diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index cb4157b1..633d5b95 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -401,6 +401,8 @@ function ESX.GetVehicleType(model, player, cb) elseif cb then cb(result) end + + return result end model = type(model) == "string" and joaat(model) or model diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index 93417b6c..573dc888 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -4,11 +4,13 @@ ESX.OneSync = {} ---@param closest boolean ---@param distance? number ---@param ignore? table -local function getNearbyPlayers(source, closest, distance, ignore) +---@param routingBucket? number +local function getNearbyPlayers(source, closest, distance, ignore, routingBucket) local result = {} local count = 0 local playerPed local playerCoords + ignore = ignore or {} if not distance then distance = 100 @@ -19,14 +21,12 @@ local function getNearbyPlayers(source, closest, distance, ignore) if not source then error("Received invalid first argument (source); should be playerId") - return result end playerCoords = GetEntityCoords(playerPed) if not playerCoords then error("Received nil value (playerCoords); perhaps source is nil at first place?") - return result end end @@ -35,12 +35,11 @@ local function getNearbyPlayers(source, closest, distance, ignore) if not playerCoords then error("Received nil value (playerCoords); perhaps source is nil at first place?") - return result end end for _, xPlayer in pairs(ESX.Players) do - if not ignore or not ignore[xPlayer.source] then + if not ignore[xPlayer.source] and (not routingBucket or GetPlayerRoutingBucket(xPlayer.source) == routingBucket) then local entity = GetPlayerPed(xPlayer.source) local coords = GetEntityCoords(entity) @@ -67,15 +66,17 @@ end ---@param source vector3|number playerId or vector3 coordinates ---@param maxDistance number ---@param ignore? table playerIds to ignore, where the key is playerId and value is true -function ESX.OneSync.GetPlayersInArea(source, maxDistance, ignore) - return getNearbyPlayers(source, false, maxDistance, ignore) +---@param routingBucket? number +function ESX.OneSync.GetPlayersInArea(source, maxDistance, ignore, routingBucket) + return getNearbyPlayers(source, false, maxDistance, ignore, routingBucket) end ---@param source vector3|number playerId or vector3 coordinates ---@param maxDistance number ---@param ignore? table playerIds to ignore, where the key is playerId and value is true -function ESX.OneSync.GetClosestPlayer(source, maxDistance, ignore) - return getNearbyPlayers(source, true, maxDistance, ignore) +---@param routingBucket? number +function ESX.OneSync.GetClosestPlayer(source, maxDistance, ignore, routingBucket) + return getNearbyPlayers(source, true, maxDistance, ignore, routingBucket) end ---@param vehicleModel number|string @@ -100,6 +101,8 @@ function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperti elseif cb then cb(result) end + + return result end local function reject(err) @@ -110,10 +113,12 @@ function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperti end CreateThread(function() - local closestPlayer = ESX.OneSync.GetClosestPlayer(coords, 300) - local closestPlayerFound = next(closestPlayer) ~= nil - - vehicleType = vehicleType or (closestPlayerFound and ESX.GetVehicleType(vehicleModel, closestPlayer.id) or nil) + if not vehicleType then + local xPlayer = ESX.GetExtendedPlayers()[1] + if xPlayer then + vehicleType = ESX.GetVehicleType(vehicleModel, xPlayer.source) + end + end if not vehicleType then return reject("No players found nearby to check vehicle type! Alternatively, you can specify the vehicle type manually.") @@ -122,9 +127,11 @@ function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperti local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords.x, coords.y, coords.z, heading) local tries = 0 + local hasNetOwner = next(ESX.OneSync.GetClosestPlayer(coords, 300, nil, 0) or {}) ~= nil + while not createdVehicle or createdVehicle == 0 - or (closestPlayerFound and NetworkGetEntityOwner(createdVehicle) == -1) - or (not closestPlayerFound and not DoesEntityExist(createdVehicle)) do + or (hasNetOwner and NetworkGetEntityOwner(createdVehicle) == -1) + or (not hasNetOwner and not DoesEntityExist(createdVehicle)) do Wait(200) tries = tries + 1 if tries > 40 then