83 lines
2.9 KiB
Lua
83 lines
2.9 KiB
Lua
-- ============================================================
|
|
-- LANE STATE (SINGLE LANE)
|
|
-- ============================================================
|
|
local laneStates = {
|
|
LaneA = Config.MainLights and Config.MainLights.AutoMode and true or nil
|
|
}
|
|
|
|
-- Prevent multiple timers from overlapping
|
|
local autoTimers = {
|
|
LaneA = false
|
|
}
|
|
|
|
-- ============================================================
|
|
-- SEND STATE TO PLAYER
|
|
-- ============================================================
|
|
RegisterNetEvent("jd_weighlight:requestState")
|
|
AddEventHandler("jd_weighlight:requestState", function()
|
|
local src = source
|
|
-- Sends the current server truth to the client
|
|
TriggerClientEvent("jd_weighlight:setLaneState", src, "LaneA", laneStates.LaneA)
|
|
end)
|
|
|
|
-- ============================================================
|
|
-- SET LANE STATE (MANUAL)
|
|
-- ============================================================
|
|
RegisterNetEvent("jd_weighlight:setLaneState")
|
|
AddEventHandler("jd_weighlight:setLaneState", function(lane, state)
|
|
local src = source
|
|
if lane ~= "LaneA" then return end
|
|
|
|
-- ACL check
|
|
if Config.ACL.UseACL and not IsPlayerAceAllowed(src, Config.ACL.MainLights) then
|
|
print(("[weigh_lights] Player %d denied access"):format(src))
|
|
return
|
|
end
|
|
|
|
-- Update the Master State and tell EVERYONE to update their local objects
|
|
laneStates.LaneA = state
|
|
TriggerClientEvent("jd_weighlight:setLaneState", -1, "LaneA", state)
|
|
end)
|
|
|
|
-- ============================================================
|
|
-- AUTO MODE TRIGGER
|
|
-- ============================================================
|
|
RegisterNetEvent("jd_weighlight:autoTrigger")
|
|
AddEventHandler("jd_weighlight:autoTrigger", function(lane)
|
|
if lane ~= "LaneA" or not Config.MainLights.AutoMode then return end
|
|
|
|
-- Safety: If a timer is already running, don't start another one
|
|
if autoTimers.LaneA then return end
|
|
|
|
-- Turn the light RED for everyone
|
|
laneStates.LaneA = false
|
|
TriggerClientEvent("jd_weighlight:setLaneState", -1, "LaneA", false)
|
|
|
|
autoTimers.LaneA = true
|
|
CreateThread(function()
|
|
Wait(30000) -- 30 Seconds
|
|
|
|
autoTimers.LaneA = false
|
|
|
|
-- Only set back to GREEN if a staff member hasn't manually changed it or turned it OFF
|
|
if laneStates.LaneA == false then
|
|
laneStates.LaneA = true
|
|
TriggerClientEvent("jd_weighlight:setLaneState", -1, "LaneA", true)
|
|
end
|
|
end)
|
|
end)
|
|
|
|
-- ============================================================
|
|
-- PERMISSION CHECK
|
|
-- ============================================================
|
|
RegisterNetEvent("weigh_lights:checkPermissionMain")
|
|
AddEventHandler("weigh_lights:checkPermissionMain", function()
|
|
local src = source
|
|
local allowed = true
|
|
|
|
if Config.ACL.UseACL then
|
|
allowed = IsPlayerAceAllowed(src, Config.ACL.MainLights)
|
|
end
|
|
|
|
TriggerClientEvent("weigh_lights:permissionResultMain", src, allowed)
|
|
end) |