Skip to content

Commit 372c8a2

Browse files
committed
feat(es_extended/server/modules/onesync): add optional vehicleType to SpawnVehicle
1 parent 5722873 commit 372c8a2

File tree

1 file changed

+44
-34
lines changed

1 file changed

+44
-34
lines changed

[core]/es_extended/server/modules/onesync.lua

Lines changed: 44 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -78,57 +78,67 @@ function ESX.OneSync.GetClosestPlayer(source, maxDistance, ignore)
7878
return getNearbyPlayers(source, true, maxDistance, ignore)
7979
end
8080

81-
---@param model number|string
81+
---@param vehicleModel number|string
8282
---@param coords vector3|table
8383
---@param heading number
84-
---@param properties table
84+
---@param vehicleProperties table
8585
---@param cb? fun(netId: number)
86+
---@param vehicleType string?
8687
---@return number? netId
87-
function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb)
88+
function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperties, cb, vehicleType)
8889
if cb and not ESX.IsFunctionReference(cb) then
8990
error("Invalid callback function")
9091
end
9192

92-
93-
local vehicleModel = joaat(model)
94-
local vehicleProperties = properties
93+
vehicleModel = joaat(vehicleModel)
9594

9695
local promise = not cb and promise.new()
96+
97+
local function resolve(result)
98+
if promise then
99+
promise:resolve(result)
100+
elseif cb then
101+
cb(result)
102+
end
103+
end
104+
105+
local function reject(err)
106+
if promise then
107+
promise:reject(err)
108+
end
109+
error(err)
110+
end
111+
97112
CreateThread(function()
98-
local xPlayer = ESX.OneSync.GetClosestPlayer(coords, 300)
99-
ESX.GetVehicleType(vehicleModel, xPlayer.id, function(vehicleType)
100-
if not vehicleType then
101-
if (promise) then
102-
return promise:reject(("Tried to spawn invalid vehicle - ^5%s^7!"):format(model))
103-
end
104-
error(("Tried to spawn invalid vehicle - ^5%s^7!"):format(model))
113+
if not vehicleType then
114+
local xPlayer = ESX.OneSync.GetClosestPlayer(coords, 300)
115+
if not xPlayer then
116+
return reject("No players found nearby to check vehicle type!")
105117
end
118+
vehicleType = ESX.GetVehicleType(vehicleModel, xPlayer.id)
119+
end
106120

107-
local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords.x, coords.y, coords.z, heading)
108-
local tries = 0
121+
if not vehicleType then
122+
return reject(("Tried to spawn invalid vehicle - ^5%s^7!"):format(vehicleModel))
123+
end
109124

110-
while not createdVehicle or createdVehicle == 0 or NetworkGetEntityOwner(createdVehicle) == -1 do
111-
Wait(200)
112-
tries = tries + 1
113-
if tries > 40 then
114-
if promise then
115-
return promise:reject(("Could not spawn vehicle - ^5%s^7!"):format(model))
116-
end
117-
error(("Could not spawn vehicle - ^5%s^7!"):format(model))
118-
end
125+
local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords.x, coords.y, coords.z, heading)
126+
local tries = 0
127+
128+
while not createdVehicle or createdVehicle == 0 or NetworkGetEntityOwner(createdVehicle) == -1 do
129+
Wait(200)
130+
tries = tries + 1
131+
if tries > 40 then
132+
return reject(("Could not spawn vehicle - ^5%s^7!"):format(vehicleModel))
119133
end
134+
end
120135

121-
-- luacheck: ignore
122-
SetEntityOrphanMode(createdVehicle, 2)
123-
local networkId = NetworkGetNetworkIdFromEntity(createdVehicle)
124-
Entity(createdVehicle).state:set("VehicleProperties", vehicleProperties, true)
136+
-- luacheck: ignore
137+
SetEntityOrphanMode(createdVehicle, 2)
138+
local networkId = NetworkGetNetworkIdFromEntity(createdVehicle)
139+
Entity(createdVehicle).state:set("VehicleProperties", vehicleProperties, true)
125140

126-
if promise then
127-
promise:resolve(networkId)
128-
elseif cb then
129-
cb(networkId)
130-
end
131-
end)
141+
resolve(networkId)
132142
end)
133143

134144
if promise then

0 commit comments

Comments
 (0)