From bb03bd0fe370a342dd7768c27d9f9cb760b84d5b Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 6 Jul 2025 14:09:51 +0200 Subject: [PATCH 1/7] fix(es_extended_server/functions): fix GetVehicleType returning nil --- [core]/es_extended/server/functions.lua | 2 ++ [core]/es_extended/server/modules/onesync.lua | 2 ++ 2 files changed, 4 insertions(+) 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 14c09698..8642b55d 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -100,6 +100,8 @@ function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperti elseif cb then cb(result) end + + return result end local function reject(err) From 787eca684f46b41cc0bcdfd4bf1a9b5fc48da5dd Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 6 Jul 2025 14:50:57 +0200 Subject: [PATCH 2/7] fix(es_extended/server/modules/onesync): get net owner for vehicle spawn based on routing bucket --- [core]/es_extended/server/modules/onesync.lua | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index 8642b55d..c67d13c6 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 @@ -124,9 +125,12 @@ function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperti local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords.x, coords.y, coords.z, heading) local tries = 0 + local closestNetOwner = ESX.OneSync.GetClosestPlayer(coords, 300, nil, 0) + local closestNetOwnerFound = next(closestNetOwner) ~= nil + while not createdVehicle or createdVehicle == 0 - or (closestPlayerFound and NetworkGetEntityOwner(createdVehicle) == -1) - or (not closestPlayerFound and not DoesEntityExist(createdVehicle)) do + or (closestNetOwnerFound and NetworkGetEntityOwner(createdVehicle) == -1) + or (not closestNetOwnerFound and not DoesEntityExist(createdVehicle)) do Wait(200) tries = tries + 1 if tries > 40 then From 54b9f97a4204beb284e6f0c073069408c8dd0437 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 6 Jul 2025 15:19:32 +0200 Subject: [PATCH 3/7] fix(es_extended/server/modules/onesync): spawn vehicle regardless of players in scope --- [core]/es_extended/server/modules/onesync.lua | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index c67d13c6..873d55bb 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -113,10 +113,13 @@ function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperti end CreateThread(function() - local closestPlayer = ESX.OneSync.GetClosestPlayer(coords, 300) - local closestPlayerFound = next(closestPlayer) ~= nil + if not vehicleType then + local src, xPlayer = next(ESX.Players) - vehicleType = vehicleType or (closestPlayerFound and ESX.GetVehicleType(vehicleModel, closestPlayer.id) or nil) + 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.") @@ -125,12 +128,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 closestNetOwner = ESX.OneSync.GetClosestPlayer(coords, 300, nil, 0) - local closestNetOwnerFound = next(closestNetOwner) ~= nil + local hasNetOwner = next(ESX.OneSync.GetClosestPlayer(coords, 300, nil, 0)) ~= nil while not createdVehicle or createdVehicle == 0 - or (closestNetOwnerFound and NetworkGetEntityOwner(createdVehicle) == -1) - or (not closestNetOwnerFound 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 From da293f897e41cd60b405522efd1a8776e4a977f3 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 6 Jul 2025 15:30:02 +0200 Subject: [PATCH 4/7] fix(es_extended/server/modules/onesync): skip stale player obj --- [core]/es_extended/server/modules/onesync.lua | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index 873d55bb..f5e04b0f 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -114,10 +114,11 @@ function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperti CreateThread(function() if not vehicleType then - local src, xPlayer = next(ESX.Players) - - if xPlayer then - vehicleType = ESX.GetVehicleType(vehicleModel, xPlayer.source) + for src, xPlayer in pairs(ESX.GetExtendedPlayers()) do + if(GetPlayerPing(src) > 0) then + vehicleType = ESX.GetVehicleType(vehicleModel, xPlayer.source) + break + end end end From 58cc3fe4807d2c233425b9e1ae55c674df706b23 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 6 Jul 2025 15:30:52 +0200 Subject: [PATCH 5/7] fix(es_extended/server/modules/onesync): GetExtendedPlayers returns array --- [core]/es_extended/server/modules/onesync.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index f5e04b0f..bd9f799c 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -114,8 +114,8 @@ function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperti CreateThread(function() if not vehicleType then - for src, xPlayer in pairs(ESX.GetExtendedPlayers()) do - if(GetPlayerPing(src) > 0) then + for i, xPlayer in ipairs(ESX.GetExtendedPlayers()) do + if(GetPlayerPing(xPlayer.source) > 0) then vehicleType = ESX.GetVehicleType(vehicleModel, xPlayer.source) break end From e2a92a9052749c5ff0fc9c23797f397b1e634207 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 6 Jul 2025 16:50:51 +0200 Subject: [PATCH 6/7] Fix nil value error in GetClosestPlayer usage --- [core]/es_extended/server/modules/onesync.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index bd9f799c..f51f3519 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -129,7 +129,7 @@ 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)) ~= nil + local hasNetOwner = next(ESX.OneSync.GetClosestPlayer(coords, 300, nil, 0) or {}) ~= nil while not createdVehicle or createdVehicle == 0 or (hasNetOwner and NetworkGetEntityOwner(createdVehicle) == -1) From 04b1d32c9d162838b2dea601c3b49284f4f40e48 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 6 Jul 2025 16:53:25 +0200 Subject: [PATCH 7/7] Refactor vehicle type selection in SpawnVehicle Simplified the logic for determining vehicleType by selecting the first available player instead of iterating through all players. I will fix ESX.GetExtendedPlayers to filter out stale player objects. --- [core]/es_extended/server/modules/onesync.lua | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/[core]/es_extended/server/modules/onesync.lua b/[core]/es_extended/server/modules/onesync.lua index f51f3519..1dce277a 100644 --- a/[core]/es_extended/server/modules/onesync.lua +++ b/[core]/es_extended/server/modules/onesync.lua @@ -114,11 +114,9 @@ function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperti CreateThread(function() if not vehicleType then - for i, xPlayer in ipairs(ESX.GetExtendedPlayers()) do - if(GetPlayerPing(xPlayer.source) > 0) then - vehicleType = ESX.GetVehicleType(vehicleModel, xPlayer.source) - break - end + local xPlayer = ESX.GetExtendedPlayers()[1] + if xPlayer then + vehicleType = ESX.GetVehicleType(vehicleModel, xPlayer.source) end end