@@ -78,57 +78,67 @@ function ESX.OneSync.GetClosestPlayer(source, maxDistance, ignore)
7878 return getNearbyPlayers (source , true , maxDistance , ignore )
7979end
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