238a6ba93b
vehicles and install new scripts
126 lines
4.6 KiB
Lua
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
|