BLOCK_ZONES = {} BLOCK_ZONES.__index = BLOCK_ZONES BLOCK_ZONES.ZONES = { { areas = { Vector2(2177.018, 1726.247, 10.820), Vector2(2178.847, 1629.306, 10.953), Vector2(2161.369, 1627.833, 10.953), Vector2(2160.458, 1725.983, 10.953) }, onTeleport = function(element) if not isElement(element) or getElementType(element) ~= "vehicle" then return end setElementPosition(element, 2135.258, 1710.632, 10.688) end, callbackEnter = function(element, dim) if not isElement(element) or not dim or not isElementStreamedIn(element) or getElementType(element) ~= "vehicle" then return end if getPedOccupiedVehicle(localPlayer) ~= element or not isElementSyncer(element) then return end local job = getElementData(element, "vehicle:job") local data = getElementData(element, "vehicle:infos") if not job or not data or not data.ownerOrganization then local vx, vy, vz = getElementVelocity(element) setElementVelocity(element, -vx * 2, -vy * 2, vz) setElementData(element, "hospital:zone:1", true, false) end end, callbackLeave = function(element, dim) if not isElement(element) or not dim or not isElementSyncer(element) or getElementType(element) ~= "vehicle" then return end if getElementData(element, "hospital:zone:1") then setTimer(function() setElementVelocity(element, 0, 0, 0) setElementData(element, "hospital:zone:1", nil, false) end, 80, 1) end end}, -- ponte do amor eterno { areas = { Vector2(-2388.500, -275.824, 56.949), Vector2(-2401.520, -274.873, 56.434), Vector2(-2418.175, -281.534, 56.164), Vector2(-2440.938, -299.349, 57.104), Vector2(-2451.944, -308.316, 57.327), Vector2(-2464.270, -293.183, 43.732), Vector2(-2503.121, -294.170, 38.432), Vector2(-2519.905, -272.673, 38.082), Vector2(-2514.169, -225.461, 37.782), Vector2(-2463.177, -225.635, 37.782), Vector2(-2438.917, -222.371, 38.482), Vector2(-2407.131, -209.674, 38.482), Vector2(-2386.847, -208.425, 40.782), Vector2(-2372.253, -251.769, 44.432) }, onTeleport = function(element) if not isElement(element) or getElementType(element) ~= "vehicle" then return end setElementPosition(element,-2359.610, -239.311, 42.753) end, callbackEnter = function(element, dim) if not isElement(element) or not dim or not isElementStreamedIn(element) or getElementType(element) ~= "vehicle" then return end if getPedOccupiedVehicle(localPlayer) ~= element or not isElementSyncer(element) then return end local job = getElementData(element, "vehicle:job") local data = getElementData(element, "vehicle:infos") if not job or not data or not data.ownerOrganization then local vx, vy, vz = getElementVelocity(element) setElementVelocity(element, -vx * 2, -vy * 2, vz) setElementData(element, "ponte-do-amor-eterno:zone:1", true, false) end end, callbackLeave = function(element, dim) if not isElement(element) or not dim or not isElementSyncer(element) or getElementType(element) ~= "vehicle" then return end if getElementData(element, "ponte-do-amor-eterno:zone:1") then setTimer(function() setElementVelocity(element, 0, 0, 0) setElementData(element, "ponte-do-amor-eterno:zone:1", nil, false) end, 80, 1) end end}, -- Dealership {areas = {Vector2(1740.950, -1117.282, 24.078), Vector2(1769.805, -1117.127, 24.125), Vector2(1770.931, -1144.000, 24.034), Vector2(1741.178, -1143.763, 24.037)}, onTeleport = function(element) if not isElement(element) or getElementType(element) ~= "vehicle" then return end setElementPosition(element, 1742.941, -1150.138, 23.865) end, callbackEnter = function(element, dim) if not isElement(element) or not dim or not isElementStreamedIn(element) or getElementType(element) ~= "vehicle" then return end if getPedOccupiedVehicle(localPlayer) ~= element or not isElementSyncer(element) then return end local job = getElementData(element, "vehicle:job") local data = getElementData(element, "vehicle:infos") if not job or not data or not data.ownerOrganization then local vx, vy, vz = getElementVelocity(element) setElementVelocity(element, -vx * 2, -vy * 2, vz) setElementData(element, "dealership:zone:2", true, false) end end, callbackLeave = function(element, dim) if not isElement(element) or not dim or not isElementSyncer(element) or getElementType(element) ~= "vehicle" then return end if getElementData(element, "dealership:zone:2") then setTimer(function() setElementVelocity(element, 0, 0, 0) setElementData(element, "dealership:zone:2", nil, false) end, 80, 1) end end}, -- Prefeitura {areas = {Vector2(599.406, -1467.550, 14.713), Vector2(598.893, -1452.073, 14.713), Vector2(610.712, -1452.425, 14.632), Vector2(610.647, -1465.562, 14.617)}, onTeleport = function(element) if not isElement(element) or getElementType(element) ~= "vehicle" then return end setElementPosition(element, 613.596, -1462.619, 14.331) end, callbackEnter = function(element, dim) if not isElement(element) or not dim or not isElementStreamedIn(element) or getElementType(element) ~= "vehicle" then return end if getPedOccupiedVehicle(localPlayer) ~= element or not isElementSyncer(element) then return end local job = getElementData(element, "vehicle:job") local data = getElementData(element, "vehicle:infos") if not job or not data or not data.ownerOrganization then local vx, vy, vz = getElementVelocity(element) setElementVelocity(element, -vx * 2, -vy * 2, vz) setElementData(element, "prefeitura:zone:2", true, false) end end, callbackLeave = function(element, dim) if not isElement(element) or not dim or not isElementSyncer(element) or getElementType(element) ~= "vehicle" then return end if getElementData(element, "prefeitura:zone:2") then setTimer(function() setElementVelocity(element, 0, 0, 0) setElementData(element, "prefeitura:zone:2", nil, false) end, 80, 1) end end}, -- Loja de Roupas {areas = {Vector2(1017.289, -1595.148, 13.195), Vector2(1010.335, -1595.222, 13.156), Vector2(1008.911, -1589.965, 13.590), Vector2(1018.462, -1589.667, 13.590)}, onTeleport = function(element) if not isElement(element) or getElementType(element) ~= "vehicle" then return end setElementPosition(element, 1010.740, -1585.678, 13.590) end, callbackEnter = function(element, dim) if not isElement(element) or not dim or not isElementStreamedIn(element) or getElementType(element) ~= "vehicle" then return end if getPedOccupiedVehicle(localPlayer) ~= element or not isElementSyncer(element) then return end local job = getElementData(element, "vehicle:job") local data = getElementData(element, "vehicle:infos") if not job or not data or not data.ownerOrganization then local vx, vy, vz = getElementVelocity(element) setElementVelocity(element, -vx * 2, -vy * 2, vz) setElementData(element, "roupas1:zone:2", true, false) end end, callbackLeave = function(element, dim) if not isElement(element) or not dim or not isElementSyncer(element) or getElementType(element) ~= "vehicle" then return end if getElementData(element, "roupas1:zone:2") then setTimer(function() setElementVelocity(element, 0, 0, 0) setElementData(element, "roupas1:zone:2", nil, false) end, 80, 1) end end}, -- {areas = { -- Vector2(162.571, -1772.850, 4.363), -- Vector2(205.532, -1772.928, 4.041), -- Vector2(243.115, -1772.891, 4.217), -- Vector2(302.983, -1773.955, 4.553), -- Vector2(303.598, -1782.274, 4.484), -- Vector2(303.655, -1869.468, 2.795), -- Vector2(325.982, -1871.359, 2.813), -- Vector2(360.587, -1871.070, 3.431), -- Vector2(360.587, -1901.589, 1.019), -- Vector2(343.670, -1912.965, 0.964), -- Vector2(333.836, -1915.247, 0.992), -- Vector2(319.986, -1914.211, 0.998), -- Vector2(202.545, -1912.984, 1.004), -- Vector2(167.480, -1892.684, 1.157), -- Vector2(162.725, -1883.461, 1.819), -- Vector2(162.694, -1857.218, 3.357) -- }, -- onTeleport = function(element) -- if not isElement(element) or getElementType(element) ~= "vehicle" then -- return -- end -- setElementPosition(element, 331.307, -1801.168, 4.655) -- end, -- callbackEnter = function(element, dim) -- if not isElement(element) or not dim or not isElementStreamedIn(element) or getElementType(element) ~= "vehicle" then -- return -- end -- if getPedOccupiedVehicle(localPlayer) ~= element or not isElementSyncer(element) then -- return -- end -- local job = getElementData(element, "vehicle:job") -- local data = getElementData(element, "vehicle:infos") -- if not job or not data or not data.ownerOrganization then -- local vx, vy, vz = getElementVelocity(element) -- setElementVelocity(element, -vx * 2, -vy * 2, vz) -- setElementData(element, "praia-festival:zone:1", true, false) -- end -- end, -- callbackLeave = function(element, dim) -- if not isElement(element) or not dim or not isElementSyncer(element) or getElementType(element) ~= "vehicle" then -- return -- end -- if getElementData(element, "praia-festival:zone:1") then -- setTimer(function() -- setElementVelocity(element, 0, 0, 0) -- setElementData(element, "praia-festival:zone:1", nil, false) -- end, 80, 1) -- end -- end}, } BLOCK_ZONES.ELEMENTS = {} BLOCK_ZONES.AREAS = {} BLOCK_ZONES.INDEX = {} local function onEnterBlockZone(element, dim) local zone = BLOCK_ZONES.INDEX[source] if type(zone.callbackEnter) == 'function' then return zone.callbackEnter(element, dim) end end local function onLeaveBlockZone(element, dim) local zone = BLOCK_ZONES.INDEX[source] if type(zone.callbackLeave) == 'function' then return zone.callbackLeave(element, dim) end end addEventHandler("onClientResourceStart", resourceRoot, function() for _, zone in ipairs(BLOCK_ZONES.ZONES) do local blockZone = createColPolygon(zone.areas[1].x, zone.areas[1].y, unpack(zone.areas)) if isElement(blockZone) then BLOCK_ZONES.AREAS[blockZone] = true BLOCK_ZONES.INDEX[blockZone] = zone addEventHandler("onClientColShapeHit", blockZone, onEnterBlockZone) addEventHandler("onClientColShapeLeave", blockZone, onLeaveBlockZone) end end outputDebugString('['..resource.name..'] '..#BLOCK_ZONES.ZONES..' block zones loaded') end) setTimer(function() local camX, camY, camZ = getCameraMatrix() for blockZone in pairs(BLOCK_ZONES.AREAS) do local zX, zY, zZ = getElementPosition(blockZone) if getDistance3D(camX, camY, camZ, zX, zY, zZ) < 100 then local vehicles = getElementsWithinColShape(blockZone, 'vehicle') for i, v in ipairs(vehicles) do local zone = BLOCK_ZONES.INDEX[blockZone] if type(zone.onTeleport) == 'function' and isElementSyncer(v) then local job = getElementData(v, "vehicle:job") or nil local data = getElementData(v, "vehicle:infos") or nil if not job or not data or not data.ownerOrganization then zone.onTeleport(v) end end end end end end, 1000, 0)