88 lines
2.4 KiB
Lua
88 lines
2.4 KiB
Lua
|
|
-- THERE IS NOTHING IN THIS FILE THAT SHOULD BE CHANGED UNLESS YOU WANTED TO BREAK THE SCRIPT
|
|
|
|
local jsonZones = LoadResourceFile(GetCurrentResourceName(), "zones.json")
|
|
local zoneData = json.decode(jsonZones)
|
|
|
|
local zones = {}
|
|
|
|
for _, zone in pairs(zoneData) do
|
|
local vectors = {}
|
|
for _, pt in ipairs(zone.points) do
|
|
table.insert(vectors, vector2(pt.x, pt.y))
|
|
end
|
|
|
|
zones[zone.name] = PolyZone:Create(vectors, {
|
|
name = zone.name,
|
|
debugGrid = false,
|
|
minZ = zone.minZ,
|
|
maxZ = zone.maxZ
|
|
})
|
|
end
|
|
|
|
--for _, zone in pairs(zones) do
|
|
-- print("zone: " .. zone.name)
|
|
--end
|
|
|
|
Citizen.Wait(10000)
|
|
local insideZones = {}
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
local plyPed = PlayerPedId()
|
|
local coord = GetEntityCoords(plyPed)
|
|
|
|
Citizen.Wait(500)
|
|
|
|
for _, zone in pairs(zones) do
|
|
if zones[_]:isPointInside(coord) then
|
|
if (not insideZones[_]) then
|
|
insideZones[_] = true
|
|
local insideZone = true
|
|
TriggerEvent("BigDaddy-Hunting:EnterZone", zone.name)
|
|
Citizen.CreateThread(function()
|
|
while insideZone do
|
|
local plyPed = PlayerPedId()
|
|
local InZoneCoordS = GetEntityCoords(plyPed)
|
|
|
|
if not zones[_]:isPointInside(InZoneCoordS) then
|
|
TriggerEvent("BigDaddy-Hunting:LeaveZone", zone.name)
|
|
insideZone = false
|
|
insideZones[_] = false
|
|
end
|
|
Citizen.Wait(500)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
exports('GetZoneCenter', function(polyname)
|
|
return zones[polyname]:getBoundingBoxCenter()
|
|
end)
|
|
|
|
exports('IsPointInPoly', function(polyname, coord)
|
|
if zones[polyname]:isPointInside(coord) then
|
|
return true
|
|
end
|
|
return false
|
|
end)
|
|
|
|
exports('IsPointInAnyPoly', function(coord)
|
|
for _, poly in pairs(zones) do
|
|
local name = poly.name
|
|
if zones[name]:isPointInside(coord) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end)
|
|
|
|
exports('GetZoneBounds', function (polyname)
|
|
local zone = zones[polyname]
|
|
print(zone.name)
|
|
local min = zones[polyname]:getBoundingBoxMin()
|
|
local max = zones[polyname]:getBoundingBoxMax()
|
|
return min.x .. ',' .. min.y .. ',' .. max.x .. ',' .. max.y;
|
|
end) |