1
0
Fork 0
forked from Simnation/Main
Main/resources/[defaultmaps]/prompt_sandy_motel/proximity_loader.lua

93 lines
4.4 KiB
Lua
Raw Normal View History

2025-08-05 16:33:46 +02:00
-- IPL locations with their coordinates (extracted from XML files)
local iplLocations = {
-- Ground floor rooms (1-15)
{ name = "prompt_sandy_motel_room_1", x = 1615.8811, y = 3793.392, z = 35.5211754 },
{ name = "prompt_sandy_motel_room_2", x = 1611.48621, y = 3790.025, z = 35.5211754 },
{ name = "prompt_sandy_motel_room_3", x = 1607.138, y = 3786.635, z = 35.5211754 },
{ name = "prompt_sandy_motel_room_4", x = 1602.75232, y = 3783.26978, z = 35.5211754 },
{ name = "prompt_sandy_motel_room_5", x = 1584.32666, y = 3769.15454, z = 35.52501 },
{ name = "prompt_sandy_motel_room_6", x = 1579.42151, y = 3765.361, z = 35.52501 },
{ name = "prompt_sandy_motel_room_7", x = 1584.857, y = 3738.89575, z = 35.50938 },
{ name = "prompt_sandy_motel_room_8", x = 1589.37817, y = 3742.36548, z = 35.50938 },
{ name = "prompt_sandy_motel_room_9", x = 1593.98535, y = 3745.90063, z = 35.50938 },
{ name = "prompt_sandy_motel_room_10", x = 1598.95508, y = 3749.714, z = 35.50938 },
{ name = "prompt_sandy_motel_room_11", x = 1603.93469, y = 3753.53516, z = 35.50938 },
{ name = "prompt_sandy_motel_room_12", x = 1608.90576, y = 3757.34961, z = 35.50938 },
{ name = "prompt_sandy_motel_room_13", x = 1613.88062, y = 3761.167, z = 35.50938 },
{ name = "prompt_sandy_motel_room_14", x = 1618.85693, y = 3764.98535, z = 35.50938 },
{ name = "prompt_sandy_motel_room_15", x = 1623.81409, y = 3768.789, z = 35.50938 },
-- Upper floor rooms (16-32)
{ name = "prompt_sandy_motel_room_16", x = 1623.80627, y = 3768.78271, z = 39.117115 },
{ name = "prompt_sandy_motel_room_17", x = 1618.852, y = 3764.9812, z = 39.117115 },
{ name = "prompt_sandy_motel_room_18", x = 1613.88806, y = 3761.172, z = 39.117115 },
{ name = "prompt_sandy_motel_room_19", x = 1608.92346, y = 3757.36279, z = 39.117115 },
{ name = "prompt_sandy_motel_room_20", x = 1603.94312, y = 3753.54126, z = 39.117115 },
{ name = "prompt_sandy_motel_room_21", x = 1598.96094, y = 3749.71826, z = 39.117115 },
{ name = "prompt_sandy_motel_room_22", x = 1593.97, y = 3745.88867, z = 39.117115 },
{ name = "prompt_sandy_motel_room_23", x = 1589.0061, y = 3742.07983, z = 39.117115 },
{ name = "prompt_sandy_motel_room_24", x = 1584.02722, y = 3738.25928, z = 39.119194 },
{ name = "prompt_sandy_motel_room_25", x = 1571.75745, y = 3759.512, z = 39.1182556 },
{ name = "prompt_sandy_motel_room_26", x = 1576.73694, y = 3763.32861, z = 39.1182556 },
{ name = "prompt_sandy_motel_room_27", x = 1581.64746, y = 3767.10767, z = 39.1182556 },
{ name = "prompt_sandy_motel_room_28", x = 1587.66785, y = 3765.40454, z = 39.46466 },
{ name = "prompt_sandy_motel_room_29", x = 1602.66052, y = 3783.23853, z = 39.1182556 },
{ name = "prompt_sandy_motel_room_30", x = 1607.118, y = 3786.663, z = 39.1182556 },
{ name = "prompt_sandy_motel_room_31", x = 1611.51331, y = 3790.04443, z = 39.1182556 },
{ name = "prompt_sandy_motel_room_32", x = 1615.8811, y = 3793.392, z = 39.1182556 }
}
-- Configuration
local PROXIMITY_DISTANCE = 40.0 -- Distance in units to load/unload IPLs
local CHECK_INTERVAL = 1000 -- Check every 1 second (1000ms)
-- Keep track of loaded IPLs to avoid redundant calls
local loadedIPLs = {}
-- Function to calculate distance between two points
local function GetDistance(x1, y1, z1, x2, y2, z2)
return math.sqrt((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2)
end
-- Function to load an IPL
local function LoadIPL(iplName)
if not loadedIPLs[iplName] then
RequestIpl(iplName)
loadedIPLs[iplName] = true
--print("^2[MOTEL PROXIMITY LOADER]^7 Loaded IPL: " .. iplName)
end
end
-- Function to unload an IPL
local function UnloadIPL(iplName)
if loadedIPLs[iplName] then
RemoveIpl(iplName)
loadedIPLs[iplName] = nil
--print("^1[MOTEL PROXIMITY LOADER]^7 Unloaded IPL: " .. iplName)
end
end
-- Main proximity check function
local function CheckProximity()
local playerPed = PlayerPedId()
local playerCoords = GetEntityCoords(playerPed)
for _, ipl in ipairs(iplLocations) do
local distance = GetDistance(playerCoords.x, playerCoords.y, playerCoords.z, ipl.x, ipl.y, ipl.z)
if distance <= PROXIMITY_DISTANCE then
LoadIPL(ipl.name)
else
UnloadIPL(ipl.name)
end
end
end
-- Start the proximity checker
CreateThread(function()
while true do
CheckProximity()
Wait(CHECK_INTERVAL)
end
end)