From 227532d4b663b98839dec0047aaf818b03d75f97 Mon Sep 17 00:00:00 2001 From: Mycroft Date: Fri, 9 Dec 2022 22:17:47 +0000 Subject: [PATCH] fix(es_extended): dont spawn vehicle if non-existant --- [esx]/es_extended/client/main.lua | 45 +++++++++++++++------------- [esx]/es_extended/server/onesync.lua | 40 ++++++++++++++----------- 2 files changed, 48 insertions(+), 37 deletions(-) diff --git a/[esx]/es_extended/client/main.lua b/[esx]/es_extended/client/main.lua index 6d46a79d..34ba5d47 100644 --- a/[esx]/es_extended/client/main.lua +++ b/[esx]/es_extended/client/main.lua @@ -690,28 +690,33 @@ AddEventHandler("esx:freezePlayer", function(input) end) RegisterNetEvent("esx:GetVehicleType", function(Model, Request) + local ReturnedType = "automobile" local Model = Model - local VehicleType = GetVehicleClassFromName(Model) - local type = "automobile" - if VehicleType == 15 then - type = "heli" - elseif VehicleType == 16 then - type = "plane" - elseif VehicleType == 14 then - type = "boat" - elseif VehicleType == 11 then - type = "trailer" - elseif VehicleType == 21 then - type = "train" - elseif VehicleType == 13 or VehicleType == 8 then - type = "bike" - end - if Model == `submersible` or Model == `submersible2` then - type = "submarine" - end - TriggerServerEvent("esx:ReturnVehicleType", type, Request) -end) + local IsValidModel = IsModelInCdimage(Model) + if IsValidModel == true or IsValidModel == 1 then + local VehicleType = GetVehicleClassFromName(Model) + if VehicleType == 15 then + ReturnedType = "heli" + elseif VehicleType == 16 then + ReturnedType = "plane" + elseif VehicleType == 14 then + ReturnedType = "boat" + elseif VehicleType == 11 then + ReturnedType = "trailer" + elseif VehicleType == 21 then + ReturnedType = "train" + elseif VehicleType == 13 or VehicleType == 8 then + ReturnedType = "bike" + end + if Model == `submersible` or Model == `submersible2` then + ReturnedType = "submarine" + end + else + ReturnedType = false + end + TriggerServerEvent("esx:ReturnVehicleType", ReturnedType, Request) +end) local DoNotUse = { 'essentialmode', diff --git a/[esx]/es_extended/server/onesync.lua b/[esx]/es_extended/server/onesync.lua index 67a629d1..2ede0ff2 100644 --- a/[esx]/es_extended/server/onesync.lua +++ b/[esx]/es_extended/server/onesync.lua @@ -61,23 +61,29 @@ end ---@param heading number ---@param Properties table ---@param cb function -function ESX.OneSync.SpawnVehicle(model, coords, heading, Properties, cb) - model = type(model) == 'string' and joaat(model) or model - Properties = Properties or {} - local vector = type(coords) == "vector3" and coords or vec(coords.x, coords.y, coords.z) - TriggerClientEvent("esx:requestModel", -1, model) - CreateThread(function() - local xPlayer = ESX.OneSync.GetClosestPlayer(vector, 200) - ESX.GetVehicleType(model, xPlayer.id, function(Type) - local SpawnedEntity = CreateVehicleServerSetter(model, Type, vector, heading) - Wait(250) - local NetworkId = NetworkGetNetworkIdFromEntity(SpawnedEntity) - Properties.NetId = NetworkId - Entity(SpawnedEntity).state:set('VehicleProperties', Properties, true) - cb(NetworkId) - end) - end) -end + function ESX.OneSync.SpawnVehicle(model, coords, heading, Properties, cb) + local veh_model = type(model) == 'string' and joaat(model) or model + Properties = Properties or {} + local vector = type(coords) == "vector3" and coords or vec(coords.x, coords.y, coords.z) + TriggerClientEvent("esx:requestModel", -1, model) + CreateThread(function() + local xPlayer = ESX.OneSync.GetClosestPlayer(vector, 300) + ESX.GetVehicleType(veh_model, xPlayer.id, function(Type) + if Type then + local SpawnedEntity = CreateVehicleServerSetter(veh_model, Type, vector, heading) + local NetworkId = NetworkGetNetworkIdFromEntity(SpawnedEntity) + while not DoesEntityExist(SpawnedEntity) do + Wait(100) + end + Properties.NetId = NetworkId + Entity(SpawnedEntity).state:set('VehicleProperties', Properties, true) + cb(NetworkId) + else + print(('[^1ERROR^7] Tried to spawn invalid vehicle - ^5%s^7!'):format(model)) + end + end) + end) + end ---@param model number|string