Scripts/resources/[standalone]/polyzonehelper/client/cl_main.lua

84 lines
2.8 KiB
Lua
Raw Normal View History

2024-12-29 20:02:43 +00:00
local DEBUG_ENABLED = false
local comboZone = nil
local insideZone = false
local createdZones = {}
local function addToComboZone(zone)
if comboZone ~= nil then
comboZone:AddZone(zone)
else
comboZone = ComboZone:Create({ zone }, { name = 'polyzonehelper' })
comboZone:onPlayerInOutExhaustive(function(isPointInside, point, insideZones, enteredZones, leftZones)
if leftZones ~= nil then
for i = 1, #leftZones do
TriggerEvent('polyzonehelper:exit', leftZones[i].name)
end
end
if enteredZones ~= nil then
for i = 1, #enteredZones do
TriggerEvent('polyzonehelper:enter', enteredZones[i].name, enteredZones[i].data, enteredZones[i].center)
end
end
end, 500)
end
end
local function doCreateZone(options)
if options.data and options.data.id then
local key = options.name .. '_' .. tostring(options.data.id)
if not createdZones[key] then
createdZones[key] = true
return true
else
print('polyzone with name/id already added, skipping: ', key)
return false
end
end
return true
end
exports('AddBoxZone', function(name, vectors, length, width, options)
if not options then options = {} end
options.name = name
options.debugPoly = DEBUG_ENABLED or options.debugPoly
if not doCreateZone(options) then return end
local boxCenter = type(vectors) ~= 'vector3' and vector3(vectors.x, vectors.y, vectors.z) or vectors
local zone = BoxZone:Create(boxCenter, length, width, options)
addToComboZone(zone)
end)
local function addCircleZone(name, center, radius, options)
if not options then options = {} end
options.name = name
options.debugPoly = DEBUG_ENABLED or options.debugPoly
if not doCreateZone(options) then return end
local circleCenter = type(center) ~= 'vector3' and vector3(center.x, center.y, center.z) or center
local zone = CircleZone:Create(circleCenter, radius, options)
addToComboZone(zone)
end
exports('AddCircleZone', addCircleZone)
exports('AddPolyZone', function(name, vectors, options)
if not options then options = {} end
options.name = name
options.debugPoly = DEBUG_ENABLED or options.debugPoly
if not doCreateZone(options) then return end
local zone = PolyZone:Create(vectors, options)
addToComboZone(zone)
end)
RegisterNetEvent('polyzonehelper:createCircleZone')
AddEventHandler('polyzonehelper:createCircleZone', function(name, ...)
addCircleZone(name, ...)
end)
exports('DeletePolyZone', function(name)
for k, v in pairs(comboZone.zones) do
if v.name == name then
local removedZone = comboZone:RemoveZone(v.name)
removedZone:destroy()
print('[polyzonehelper]: '..v.name..' named polyzone has been deleted')
end
end
end)