forked from Simnation/Main
137 lines
3.9 KiB
Lua
137 lines
3.9 KiB
Lua
--[[
|
|
https://github.com/overextended/ox_lib
|
|
|
|
This file is licensed under LGPL-3.0 or higher <https://www.gnu.org/licenses/lgpl-3.0.en.html>
|
|
|
|
Copyright © 2025 Linden <https://github.com/thelindat>
|
|
]]
|
|
|
|
local function formatNumber(num)
|
|
return tostring(num):gsub(",", ".")
|
|
end
|
|
|
|
local parse = {
|
|
poly = function(data)
|
|
local points = {}
|
|
for i = 1, #data.points do
|
|
points[#points + 1] = ('\t\tvec3(%s, %s, %s),\n'):format((data.points[i].x), (data.points[i].y), data.zCoord)
|
|
end
|
|
|
|
local pattern
|
|
if data.format == 'function' then
|
|
pattern = {
|
|
'local poly = lib.zones.poly({\n',
|
|
('\tname = "%s",\n'):format(data.name),
|
|
'\tpoints = {\n',
|
|
('%s\t},\n'):format(table.concat(points)),
|
|
('\tthickness = %s,\n'):format(data.height),
|
|
'})\n',
|
|
}
|
|
elseif data.format == 'array' then
|
|
pattern = {
|
|
'{\n',
|
|
('\tname = "%s",\n'):format(data.name),
|
|
'\tpoints = {\n',
|
|
('%s\t},\n'):format(table.concat(points)),
|
|
('\tthickness = %s,\n'):format(data.height),
|
|
'},\n'
|
|
}
|
|
elseif data.format == 'target' then
|
|
pattern = {
|
|
'exports.ox_target:addPolyZone({\n',
|
|
('\tname = "%s",\n'):format(data.name),
|
|
'\tpoints = {\n',
|
|
('%s\t},\n'):format(table.concat(points)),
|
|
('\tthickness = %s,\n'):format(data.height),
|
|
'})\n'
|
|
}
|
|
end
|
|
|
|
return table.concat(pattern)
|
|
end,
|
|
box = function(data)
|
|
local pattern
|
|
if data.format == 'function' then
|
|
pattern = {
|
|
'local box = lib.zones.box({\n',
|
|
('\tname = "%s",\n'):format(data.name),
|
|
('\tcoords = vec3(%s, %s, %s),\n'):format(
|
|
formatNumber(data.xCoord),
|
|
formatNumber(data.yCoord),
|
|
formatNumber(data.zCoord)
|
|
),
|
|
('\tsize = vec3(%s, %s, %s),\n'):format(
|
|
formatNumber(data.width),
|
|
formatNumber(data.length),
|
|
formatNumber(data.height)
|
|
),
|
|
('\trotation = %s,\n'):format(formatNumber(data.heading)),
|
|
'})\n',
|
|
}
|
|
elseif data.format == 'array' then
|
|
pattern = {
|
|
'{\n',
|
|
('\tname = "%s",\n'):format(data.name),
|
|
('\tcoords = vec3(%s, %s, %s),\n'):format(
|
|
formatNumber(data.xCoord),
|
|
formatNumber(data.yCoord),
|
|
formatNumber(data.zCoord)
|
|
),
|
|
('\tsize = vec3(%s, %s, %s),\n'):format(
|
|
formatNumber(data.width),
|
|
formatNumber(data.length),
|
|
formatNumber(data.height)
|
|
),
|
|
('\trotation = %s,\n'):format(formatNumber(data.heading)),
|
|
'},\n',
|
|
}
|
|
elseif data.format == 'target' then
|
|
pattern = {
|
|
'exports.ox_target:addBoxZone({\n',
|
|
('\tname = "%s",\n'):format(data.name),
|
|
('\tcoords = vec3(%s, %s, %s),\n'):format(data.xCoord, data.yCoord, data.zCoord),
|
|
('\tsize = vec3(%s, %s, %s),\n'):format(data.width, data.length, data.height),
|
|
('\trotation = %s,\n'):format(data.heading),
|
|
'})\n',
|
|
}
|
|
end
|
|
|
|
return table.concat(pattern)
|
|
end,
|
|
sphere = function(data)
|
|
local pattern
|
|
if data.format == 'function' then
|
|
pattern = {
|
|
'local sphere = lib.zones.sphere({\n',
|
|
('\tname = "%s",\n'):format(data.name),
|
|
('\tcoords = vec3(%s, %s, %s),\n'):format(data.xCoord, data.yCoord, data.zCoord),
|
|
('\tradius = %s,\n'):format(data.height),
|
|
'})\n',
|
|
}
|
|
elseif data.format == 'array' then
|
|
pattern = {
|
|
'{\n',
|
|
('\tname = "%s",\n'):format(data.name),
|
|
('\tcoords = vec3(%s, %s, %s),\n'):format(data.xCoord, data.yCoord, data.zCoord),
|
|
('\tradius = %s,\n'):format(data.height),
|
|
'},\n',
|
|
}
|
|
elseif data.format == 'target' then
|
|
pattern = {
|
|
'exports.ox_target:addSphereZone({\n',
|
|
('\tname = "%s",\n'):format(data.name),
|
|
('\tcoords = vec3(%s, %s, %s),\n'):format(data.xCoord, data.yCoord, data.zCoord),
|
|
('\tradius = %s,\n'):format(data.height),
|
|
'})\n',
|
|
}
|
|
end
|
|
|
|
return table.concat(pattern)
|
|
end,
|
|
}
|
|
|
|
RegisterNetEvent('ox_lib:saveZone', function(data)
|
|
if not source or not IsPlayerAceAllowed(source, 'command') then return end
|
|
local output = (LoadResourceFile(cache.resource, 'created_zones.lua') or '') .. parse[data.zoneType](data)
|
|
SaveResourceFile(cache.resource, 'created_zones.lua', output, -1)
|
|
end)
|