mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-09-04 16:23:21 +00:00
fix(es_extended/server/modules/onesync): get net owner for vehicle spawn based on routing bucket
This commit is contained in:
@@ -4,11 +4,13 @@ ESX.OneSync = {}
|
|||||||
---@param closest boolean
|
---@param closest boolean
|
||||||
---@param distance? number
|
---@param distance? number
|
||||||
---@param ignore? table
|
---@param ignore? table
|
||||||
local function getNearbyPlayers(source, closest, distance, ignore)
|
---@param routingBucket? number
|
||||||
|
local function getNearbyPlayers(source, closest, distance, ignore, routingBucket)
|
||||||
local result = {}
|
local result = {}
|
||||||
local count = 0
|
local count = 0
|
||||||
local playerPed
|
local playerPed
|
||||||
local playerCoords
|
local playerCoords
|
||||||
|
ignore = ignore or {}
|
||||||
|
|
||||||
if not distance then
|
if not distance then
|
||||||
distance = 100
|
distance = 100
|
||||||
@@ -19,14 +21,12 @@ local function getNearbyPlayers(source, closest, distance, ignore)
|
|||||||
|
|
||||||
if not source then
|
if not source then
|
||||||
error("Received invalid first argument (source); should be playerId")
|
error("Received invalid first argument (source); should be playerId")
|
||||||
return result
|
|
||||||
end
|
end
|
||||||
|
|
||||||
playerCoords = GetEntityCoords(playerPed)
|
playerCoords = GetEntityCoords(playerPed)
|
||||||
|
|
||||||
if not playerCoords then
|
if not playerCoords then
|
||||||
error("Received nil value (playerCoords); perhaps source is nil at first place?")
|
error("Received nil value (playerCoords); perhaps source is nil at first place?")
|
||||||
return result
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -35,12 +35,11 @@ local function getNearbyPlayers(source, closest, distance, ignore)
|
|||||||
|
|
||||||
if not playerCoords then
|
if not playerCoords then
|
||||||
error("Received nil value (playerCoords); perhaps source is nil at first place?")
|
error("Received nil value (playerCoords); perhaps source is nil at first place?")
|
||||||
return result
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for _, xPlayer in pairs(ESX.Players) do
|
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 entity = GetPlayerPed(xPlayer.source)
|
||||||
local coords = GetEntityCoords(entity)
|
local coords = GetEntityCoords(entity)
|
||||||
|
|
||||||
@@ -67,15 +66,17 @@ end
|
|||||||
---@param source vector3|number playerId or vector3 coordinates
|
---@param source vector3|number playerId or vector3 coordinates
|
||||||
---@param maxDistance number
|
---@param maxDistance number
|
||||||
---@param ignore? table playerIds to ignore, where the key is playerId and value is true
|
---@param ignore? table playerIds to ignore, where the key is playerId and value is true
|
||||||
function ESX.OneSync.GetPlayersInArea(source, maxDistance, ignore)
|
---@param routingBucket? number
|
||||||
return getNearbyPlayers(source, false, maxDistance, ignore)
|
function ESX.OneSync.GetPlayersInArea(source, maxDistance, ignore, routingBucket)
|
||||||
|
return getNearbyPlayers(source, false, maxDistance, ignore, routingBucket)
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param source vector3|number playerId or vector3 coordinates
|
---@param source vector3|number playerId or vector3 coordinates
|
||||||
---@param maxDistance number
|
---@param maxDistance number
|
||||||
---@param ignore? table playerIds to ignore, where the key is playerId and value is true
|
---@param ignore? table playerIds to ignore, where the key is playerId and value is true
|
||||||
function ESX.OneSync.GetClosestPlayer(source, maxDistance, ignore)
|
---@param routingBucket? number
|
||||||
return getNearbyPlayers(source, true, maxDistance, ignore)
|
function ESX.OneSync.GetClosestPlayer(source, maxDistance, ignore, routingBucket)
|
||||||
|
return getNearbyPlayers(source, true, maxDistance, ignore, routingBucket)
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param vehicleModel number|string
|
---@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 createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords.x, coords.y, coords.z, heading)
|
||||||
local tries = 0
|
local tries = 0
|
||||||
|
|
||||||
|
local closestNetOwner = ESX.OneSync.GetClosestPlayer(coords, 300, nil, 0)
|
||||||
|
local closestNetOwnerFound = next(closestNetOwner) ~= nil
|
||||||
|
|
||||||
while not createdVehicle or createdVehicle == 0
|
while not createdVehicle or createdVehicle == 0
|
||||||
or (closestPlayerFound and NetworkGetEntityOwner(createdVehicle) == -1)
|
or (closestNetOwnerFound and NetworkGetEntityOwner(createdVehicle) == -1)
|
||||||
or (not closestPlayerFound and not DoesEntityExist(createdVehicle)) do
|
or (not closestNetOwnerFound and not DoesEntityExist(createdVehicle)) do
|
||||||
Wait(200)
|
Wait(200)
|
||||||
tries = tries + 1
|
tries = tries + 1
|
||||||
if tries > 40 then
|
if tries > 40 then
|
||||||
|
|||||||
Reference in New Issue
Block a user