83 lines
2.0 KiB
Lua
83 lines
2.0 KiB
Lua
---------------------------------------------------------------------------
|
|
-- Functions taken from ESX to make the script standalone
|
|
---------------------------------------------------------------------------
|
|
local entityEnumerator = {
|
|
__gc = function(enum)
|
|
if enum.destructor and enum.handle then
|
|
enum.destructor(enum.handle)
|
|
end
|
|
|
|
enum.destructor = nil
|
|
enum.handle = nil
|
|
end
|
|
}
|
|
|
|
local function EnumerateEntities(initFunc, moveFunc, disposeFunc)
|
|
return coroutine.wrap(function()
|
|
local iter, id = initFunc()
|
|
if not id or id == 0 then
|
|
disposeFunc(iter)
|
|
return
|
|
end
|
|
|
|
local enum = {handle = iter, destructor = disposeFunc}
|
|
setmetatable(enum, entityEnumerator)
|
|
|
|
local next = true
|
|
repeat
|
|
coroutine.yield(id)
|
|
next, id = moveFunc(iter)
|
|
until not next
|
|
|
|
enum.destructor, enum.handle = nil, nil
|
|
disposeFunc(iter)
|
|
end)
|
|
end
|
|
|
|
function EnumerateObjects()
|
|
return EnumerateEntities(FindFirstObject, FindNextObject, EndFindObject)
|
|
end
|
|
|
|
function EnumeratePeds()
|
|
return EnumerateEntities(FindFirstPed, FindNextPed, EndFindPed)
|
|
end
|
|
|
|
function EnumerateVehicles()
|
|
return EnumerateEntities(FindFirstVehicle, FindNextVehicle, EndFindVehicle)
|
|
end
|
|
|
|
function EnumeratePickups()
|
|
return EnumerateEntities(FindFirstPickup, FindNextPickup, EndFindPickup)
|
|
end
|
|
|
|
function GetVehicles()
|
|
local vehicles = {}
|
|
|
|
for vehicle in EnumerateVehicles() do
|
|
table.insert(vehicles, vehicle)
|
|
end
|
|
|
|
return vehicles
|
|
end
|
|
|
|
function GetVehiclesInArea(coords, area)
|
|
local vehicles = GetVehicles()
|
|
local vehiclesInArea = {}
|
|
|
|
for i=1, #vehicles, 1 do
|
|
local vehicleCoords = GetEntityCoords(vehicles[i])
|
|
local distance = GetDistanceBetweenCoords(vehicleCoords, coords.x, coords.y, coords.z, true)
|
|
|
|
if distance <= area then
|
|
table.insert(vehiclesInArea, vehicles[i])
|
|
end
|
|
end
|
|
|
|
return vehiclesInArea
|
|
end
|
|
|
|
function IsSpawnPointClear(coords, radius)
|
|
local vehicles = GetVehiclesInArea(coords, radius)
|
|
|
|
return #vehicles == 0
|
|
end |