Files
Elite-Gaming-FiveM/resources/ulc/client/c_reverse.lua
T
2025-01-28 07:05:49 -08:00

126 lines
4.6 KiB
Lua

--print("[ULC]: Reverse Extras Loaded")
local reversing = false
local disabledExtras = {}
local timerExpired = false
function setReverseExtras(newState)
-- set enable extras to match the new state
for _, v in ipairs(MyVehicleConfig.reverseConfig.reverseExtras) do
ULC:SetStage(v, newState, false, true, false, false, true, false)
end
if not MyVehicleConfig.reverseConfig.disableExtras then return end
if newState == 0 then
-- set disable extras off and save the ones we changed
for _, v in ipairs(MyVehicleConfig.reverseConfig.disableExtras) do
--print("Checking extra " .. v .. " for reverse state")
if IsVehicleExtraTurnedOn(MyVehicle, v) then
ULC:SetStage(v, 1, false, true, false, false, true, false)
table.insert(disabledExtras, v)
end
end
else -- newState == 1
-- set the disabled extras back on
for _, v in ipairs(disabledExtras) do
ULC:SetStage(v, 0, false, true, false, false, true, false)
end
disabledExtras = {}
end
end
AddEventHandler('ulc:StartCheckingReverseState', function()
CreateThread(function()
while true do
Wait(250)
--print("Checking reverse state")
if not IsPedInAnyVehicle(PlayerPedId()) then return end
-- this feels unncessary, but I think some people may not have .reverseConfig
if not MyVehicle then return end
if not MyVehicleConfig.reverseConfig then return end
if not MyVehicleConfig.reverseConfig.useReverse then return end
local gear = GetVehicleCurrentGear(MyVehicle)
if gear == 0 then
if not reversing then
startTimer()
reversing = true
setReverseExtras(0)
end
else
if reversing then
reversing = false
setReverseExtras(1)
end
end
end
end)
end)
-- handle disabling lights after some time
function startTimer()
-- if disabled in config, don't start timer , if enabled or missing config, start timer
if Config and Config.ReverseSettings and not Config.ReverseSettings.useRandomExpiration then return end
-- timer thread
CreateThread(function()
local speed
local duration = math.random(3, 8) * 1000
local expirationTime
while true do
--print("Reverse timer tick")
if not MyVehicle then return end
if not MyVehicleConfig.reverseConfig then return end
if not MyVehicleConfig.reverseConfig.useReverse then return end
if not reversing then
timerExpired = false
--print("Not reversing")
return
end
speed = GetVehicleSpeedConverted(MyVehicle)
if speed < 0.5 then -- if we are in reverse and stopped
if timerExpired then
goto continue
end
if Config and Config.ReverseSettings then
duration = math.random(
(Config.ReverseSettings.minExpiration or 3) * 1000,
(Config.ReverseSettings.maxExpiration or 8) * 1000
)
end
expirationTime = GetGameTimer() + duration
while GetGameTimer() < expirationTime do
Wait(500)
--print("Reverse timer active")
if GetVehicleSpeedConverted(MyVehicle) > 1 then
-- print("[ULC] Reverse: Moving, breaking timer")
break
end
if not reversing then
-- print("[ULC] Reverse: Not reversing, breaking timer")
break
end
if not IsPedInAnyVehicle(PlayerPedId()) then
-- print("[ULC] Reverse: Not in vehicle, breaking timer")
break
end
if GetGameTimer() > expirationTime then
print("[ULC] Reverse: Timer expired, disabling extras")
timerExpired = true
setReverseExtras(1)
break
end
end
else -- if we are in reverse and moving
-- print("[ULC] Reverse: Resetting timer")
setReverseExtras(0)
timerExpired = false
end
::continue::
Wait(500)
end
end)
end