644 lines
20 KiB
Lua
644 lines
20 KiB
Lua
--[[
|
|
---------------------------------------------------
|
|
LUXART VEHICLE CONTROL (FOR FIVEM)
|
|
---------------------------------------------------
|
|
Last revision: MAY 01 2017 (VERS. 1.01)
|
|
Coded by Lt.Caine
|
|
---------------------------------------------------
|
|
NOTES
|
|
LVC will automatically apply to all emergency vehicles (vehicle class 18)
|
|
---------------------------------------------------
|
|
CONTROLS
|
|
Right indicator: = (Next Custom Radio Track)
|
|
Left indicator: - (Previous Custom Radio Track)
|
|
Hazard lights: ]
|
|
Toggle emergency lights: Q (Text Chat Team)
|
|
Airhorn: E (Horn)
|
|
Toggle siren: 1 (Previous Radio Station)
|
|
Manual siren / Change siren tone: R (Next Radio Station)
|
|
Auxiliary siren: Z
|
|
---------------------------------------------------
|
|
]]
|
|
|
|
local count_bcast_timer = 0
|
|
local delay_bcast_timer = 200
|
|
|
|
local count_sndclean_timer = 0
|
|
local delay_sndclean_timer = 400
|
|
|
|
local actv_ind_timer = false
|
|
local count_ind_timer = 0
|
|
local delay_ind_timer = 180
|
|
|
|
local actv_lxsrnmute_temp = false
|
|
local srntone_temp = 0
|
|
local dsrn_mute = true
|
|
|
|
local state_indic = {}
|
|
local state_lxsiren = {}
|
|
local state_pwrcall = {}
|
|
local state_airmanu = {}
|
|
|
|
local ind_state_o = 0
|
|
local ind_state_l = 1
|
|
local ind_state_r = 2
|
|
local ind_state_h = 3
|
|
|
|
local snd_lxsiren = {}
|
|
local snd_pwrcall = {}
|
|
local snd_airmanu = {}
|
|
|
|
-- these models will use their real wail siren, as determined by their assigned audio hash in vehicles.meta
|
|
local eModelsWithFireSrn =
|
|
{
|
|
"FIRETRUK",
|
|
"exp",
|
|
"f750",
|
|
"ferrara",
|
|
"pengine",
|
|
"prescue",
|
|
"bat3",
|
|
"brush",
|
|
"enladder",
|
|
}
|
|
|
|
-- models listed below will use AMBULANCE_WARNING as auxiliary siren
|
|
-- unlisted models will instead use the default wail as the auxiliary siren
|
|
local eModelsWithPcall =
|
|
{
|
|
"AMBULANCE",
|
|
"FIRETRUK",
|
|
"LGUARD",
|
|
}
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
function ShowDebug(text)
|
|
SetNotificationTextEntry("STRING")
|
|
AddTextComponentString(text)
|
|
DrawNotification(false, false)
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
function useFiretruckSiren(veh)
|
|
local model = GetEntityModel(veh)
|
|
for i = 1, #eModelsWithFireSrn, 1 do
|
|
if model == GetHashKey(eModelsWithFireSrn[i]) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
function usePowercallAuxSrn(veh)
|
|
local model = GetEntityModel(veh)
|
|
for i = 1, #eModelsWithPcall, 1 do
|
|
if model == GetHashKey(eModelsWithPcall[i]) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
function CleanupSounds()
|
|
if count_sndclean_timer > delay_sndclean_timer then
|
|
count_sndclean_timer = 0
|
|
for k, v in pairs(state_lxsiren) do
|
|
if v > 0 then
|
|
if not DoesEntityExist(k) or IsEntityDead(k) then
|
|
if snd_lxsiren[k] ~= nil then
|
|
StopSound(snd_lxsiren[k])
|
|
ReleaseSoundId(snd_lxsiren[k])
|
|
snd_lxsiren[k] = nil
|
|
state_lxsiren[k] = nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
for k, v in pairs(state_pwrcall) do
|
|
if v == true then
|
|
if not DoesEntityExist(k) or IsEntityDead(k) then
|
|
if snd_pwrcall[k] ~= nil then
|
|
StopSound(snd_pwrcall[k])
|
|
ReleaseSoundId(snd_pwrcall[k])
|
|
snd_pwrcall[k] = nil
|
|
state_pwrcall[k] = nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
for k, v in pairs(state_airmanu) do
|
|
if v == true then
|
|
if not DoesEntityExist(k) or IsEntityDead(k) or IsVehicleSeatFree(k, -1) then
|
|
if snd_airmanu[k] ~= nil then
|
|
StopSound(snd_airmanu[k])
|
|
ReleaseSoundId(snd_airmanu[k])
|
|
snd_airmanu[k] = nil
|
|
state_airmanu[k] = nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
count_sndclean_timer = count_sndclean_timer + 1
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
function TogIndicStateForVeh(veh, newstate)
|
|
if DoesEntityExist(veh) and not IsEntityDead(veh) then
|
|
if newstate == ind_state_o then
|
|
SetVehicleIndicatorLights(veh, 0, false) -- R
|
|
SetVehicleIndicatorLights(veh, 1, false) -- L
|
|
elseif newstate == ind_state_l then
|
|
SetVehicleIndicatorLights(veh, 0, false) -- R
|
|
SetVehicleIndicatorLights(veh, 1, true) -- L
|
|
elseif newstate == ind_state_r then
|
|
SetVehicleIndicatorLights(veh, 0, true) -- R
|
|
SetVehicleIndicatorLights(veh, 1, false) -- L
|
|
elseif newstate == ind_state_h then
|
|
SetVehicleIndicatorLights(veh, 0, true) -- R
|
|
SetVehicleIndicatorLights(veh, 1, true) -- L
|
|
end
|
|
state_indic[veh] = newstate
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
function TogMuteDfltSrnForVeh(veh, toggle)
|
|
if DoesEntityExist(veh) and not IsEntityDead(veh) then
|
|
DisableVehicleImpactExplosionActivation(veh, toggle)
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
function SetLxSirenStateForVeh(veh, newstate)
|
|
if DoesEntityExist(veh) and not IsEntityDead(veh) then
|
|
if newstate ~= state_lxsiren[veh] then
|
|
|
|
if snd_lxsiren[veh] ~= nil then
|
|
StopSound(snd_lxsiren[veh])
|
|
ReleaseSoundId(snd_lxsiren[veh])
|
|
snd_lxsiren[veh] = nil
|
|
end
|
|
|
|
if newstate == 1 then
|
|
if useFiretruckSiren(veh) then
|
|
TogMuteDfltSrnForVeh(veh, false)
|
|
else
|
|
snd_lxsiren[veh] = GetSoundId()
|
|
PlaySoundFromEntity(snd_lxsiren[veh], "VEHICLES_HORNS_SIREN_1", veh, 0, 0, 0)
|
|
TogMuteDfltSrnForVeh(veh, true)
|
|
end
|
|
|
|
elseif newstate == 2 then
|
|
snd_lxsiren[veh] = GetSoundId()
|
|
PlaySoundFromEntity(snd_lxsiren[veh], "VEHICLES_HORNS_SIREN_2", veh, 0, 0, 0)
|
|
TogMuteDfltSrnForVeh(veh, true)
|
|
|
|
elseif newstate == 3 then
|
|
snd_lxsiren[veh] = GetSoundId()
|
|
if useFiretruckSiren(veh) then
|
|
PlaySoundFromEntity(snd_lxsiren[veh], "VEHICLES_HORNS_AMBULANCE_WARNING", veh, 0, 0, 0)
|
|
else
|
|
PlaySoundFromEntity(snd_lxsiren[veh], "VEHICLES_HORNS_POLICE_WARNING", veh, 0, 0, 0)
|
|
end
|
|
TogMuteDfltSrnForVeh(veh, true)
|
|
|
|
else
|
|
TogMuteDfltSrnForVeh(veh, true)
|
|
|
|
end
|
|
|
|
state_lxsiren[veh] = newstate
|
|
end
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
function TogPowercallStateForVeh(veh, toggle)
|
|
if DoesEntityExist(veh) and not IsEntityDead(veh) then
|
|
if toggle == true then
|
|
if snd_pwrcall[veh] == nil then
|
|
snd_pwrcall[veh] = GetSoundId()
|
|
if usePowercallAuxSrn(veh) then
|
|
PlaySoundFromEntity(snd_pwrcall[veh], "VEHICLES_HORNS_AMBULANCE_WARNING", veh, 0, 0, 0)
|
|
else
|
|
PlaySoundFromEntity(snd_pwrcall[veh], "VEHICLES_HORNS_SIREN_1", veh, 0, 0, 0)
|
|
end
|
|
end
|
|
else
|
|
if snd_pwrcall[veh] ~= nil then
|
|
StopSound(snd_pwrcall[veh])
|
|
ReleaseSoundId(snd_pwrcall[veh])
|
|
snd_pwrcall[veh] = nil
|
|
end
|
|
end
|
|
state_pwrcall[veh] = toggle
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
function SetAirManuStateForVeh(veh, newstate)
|
|
if DoesEntityExist(veh) and not IsEntityDead(veh) then
|
|
if newstate ~= state_airmanu[veh] then
|
|
|
|
if snd_airmanu[veh] ~= nil then
|
|
StopSound(snd_airmanu[veh])
|
|
ReleaseSoundId(snd_airmanu[veh])
|
|
snd_airmanu[veh] = nil
|
|
end
|
|
|
|
if newstate == 1 then
|
|
snd_airmanu[veh] = GetSoundId()
|
|
if useFiretruckSiren(veh) then
|
|
PlaySoundFromEntity(snd_airmanu[veh], "VEHICLES_HORNS_FIRETRUCK_WARNING", veh, 0, 0, 0)
|
|
else
|
|
PlaySoundFromEntity(snd_airmanu[veh], "SIRENS_AIRHORN", veh, 0, 0, 0)
|
|
end
|
|
|
|
elseif newstate == 2 then
|
|
snd_airmanu[veh] = GetSoundId()
|
|
PlaySoundFromEntity(snd_airmanu[veh], "VEHICLES_HORNS_SIREN_1", veh, 0, 0, 0)
|
|
|
|
elseif newstate == 3 then
|
|
snd_airmanu[veh] = GetSoundId()
|
|
PlaySoundFromEntity(snd_airmanu[veh], "VEHICLES_HORNS_SIREN_2", veh, 0, 0, 0)
|
|
|
|
end
|
|
|
|
state_airmanu[veh] = newstate
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
RegisterNetEvent("lvc_TogIndicState_c")
|
|
AddEventHandler("lvc_TogIndicState_c", function(sender, newstate)
|
|
local player_s = GetPlayerFromServerId(sender)
|
|
local ped_s = GetPlayerPed(player_s)
|
|
if DoesEntityExist(ped_s) and not IsEntityDead(ped_s) then
|
|
if ped_s ~= GetPlayerPed(-1) then
|
|
if IsPedInAnyVehicle(ped_s, false) then
|
|
local veh = GetVehiclePedIsUsing(ped_s)
|
|
TogIndicStateForVeh(veh, newstate)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
---------------------------------------------------------------------
|
|
RegisterNetEvent("lvc_TogDfltSrnMuted_c")
|
|
AddEventHandler("lvc_TogDfltSrnMuted_c", function(sender, toggle)
|
|
local player_s = GetPlayerFromServerId(sender)
|
|
local ped_s = GetPlayerPed(player_s)
|
|
if DoesEntityExist(ped_s) and not IsEntityDead(ped_s) then
|
|
if ped_s ~= GetPlayerPed(-1) then
|
|
if IsPedInAnyVehicle(ped_s, false) then
|
|
local veh = GetVehiclePedIsUsing(ped_s)
|
|
TogMuteDfltSrnForVeh(veh, toggle)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
---------------------------------------------------------------------
|
|
RegisterNetEvent("lvc_SetLxSirenState_c")
|
|
AddEventHandler("lvc_SetLxSirenState_c", function(sender, newstate)
|
|
local player_s = GetPlayerFromServerId(sender)
|
|
local ped_s = GetPlayerPed(player_s)
|
|
if DoesEntityExist(ped_s) and not IsEntityDead(ped_s) then
|
|
if ped_s ~= GetPlayerPed(-1) then
|
|
if IsPedInAnyVehicle(ped_s, false) then
|
|
local veh = GetVehiclePedIsUsing(ped_s)
|
|
SetLxSirenStateForVeh(veh, newstate)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
---------------------------------------------------------------------
|
|
RegisterNetEvent("lvc_TogPwrcallState_c")
|
|
AddEventHandler("lvc_TogPwrcallState_c", function(sender, toggle)
|
|
local player_s = GetPlayerFromServerId(sender)
|
|
local ped_s = GetPlayerPed(player_s)
|
|
if DoesEntityExist(ped_s) and not IsEntityDead(ped_s) then
|
|
if ped_s ~= GetPlayerPed(-1) then
|
|
if IsPedInAnyVehicle(ped_s, false) then
|
|
local veh = GetVehiclePedIsUsing(ped_s)
|
|
TogPowercallStateForVeh(veh, toggle)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
---------------------------------------------------------------------
|
|
RegisterNetEvent("lvc_SetAirManuState_c")
|
|
AddEventHandler("lvc_SetAirManuState_c", function(sender, newstate)
|
|
local player_s = GetPlayerFromServerId(sender)
|
|
local ped_s = GetPlayerPed(player_s)
|
|
if DoesEntityExist(ped_s) and not IsEntityDead(ped_s) then
|
|
if ped_s ~= GetPlayerPed(-1) then
|
|
if IsPedInAnyVehicle(ped_s, false) then
|
|
local veh = GetVehiclePedIsUsing(ped_s)
|
|
SetAirManuStateForVeh(veh, newstate)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
|
|
CleanupSounds()
|
|
|
|
----- IS IN VEHICLE -----
|
|
local playerped = GetPlayerPed(-1)
|
|
if IsPedInAnyVehicle(playerped, false) then
|
|
|
|
----- IS DRIVER -----
|
|
local veh = GetVehiclePedIsUsing(playerped)
|
|
if GetPedInVehicleSeat(veh, -1) == playerped then
|
|
|
|
DisableControlAction(0, 84, true) -- INPUT_VEH_PREV_RADIO_TRACK
|
|
DisableControlAction(0, 83, true) -- INPUT_VEH_NEXT_RADIO_TRACK
|
|
|
|
if state_indic[veh] ~= ind_state_o and state_indic[veh] ~= ind_state_l and state_indic[veh] ~= ind_state_r and state_indic[veh] ~= ind_state_h then
|
|
state_indic[veh] = ind_state_o
|
|
end
|
|
|
|
-- INDIC AUTO CONTROL
|
|
if actv_ind_timer == true then
|
|
if state_indic[veh] == ind_state_l or state_indic[veh] == ind_state_r then
|
|
if GetEntitySpeed(veh) < 6 then
|
|
count_ind_timer = 0
|
|
else
|
|
if count_ind_timer > delay_ind_timer then
|
|
count_ind_timer = 0
|
|
actv_ind_timer = false
|
|
state_indic[veh] = ind_state_o
|
|
PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
TogIndicStateForVeh(veh, state_indic[veh])
|
|
count_bcast_timer = delay_bcast_timer
|
|
else
|
|
count_ind_timer = count_ind_timer + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--- IS EMERG VEHICLE ---
|
|
if GetVehicleClass(veh) == 18 then
|
|
|
|
local actv_manu = false
|
|
local actv_horn = false
|
|
|
|
DisableControlAction(0, 86, true) -- INPUT_VEH_HORN
|
|
DisableControlAction(0, 20, true) -- INPUT_CELLPHONE_UP
|
|
--DisableControlAction(0, 173, true) -- INPUT_CELLPHONE_DOWN
|
|
--DisableControlAction(0, 174, true) -- INPUT_CELLPHONE_LEFT
|
|
--DisableControlAction(0, 175, true) -- INPUT_CELLPHONE_RIGHT
|
|
DisableControlAction(0, 140, true) -- INPUT_VEH_NEXT_RADIO
|
|
DisableControlAction(0, 157, true) -- INPUT_VEH_PREV_RADIO
|
|
DisableControlAction(0, 19, true) -- INPUT_CHARACTER_WHEEL
|
|
DisableControlAction(0, 85, true) -- INPUT_VEH_RADIO_WHEEL
|
|
DisableControlAction(0, 80, true) -- INPUT_VEH_CIN_CAM
|
|
|
|
SetVehRadioStation(veh, "OFF")
|
|
SetVehicleRadioEnabled(veh, false)
|
|
|
|
if state_lxsiren[veh] ~= 1 and state_lxsiren[veh] ~= 2 and state_lxsiren[veh] ~= 3 then
|
|
state_lxsiren[veh] = 0
|
|
end
|
|
if state_pwrcall[veh] ~= true then
|
|
state_pwrcall[veh] = false
|
|
end
|
|
if state_airmanu[veh] ~= 1 and state_airmanu[veh] ~= 2 and state_airmanu[veh] ~= 3 then
|
|
state_airmanu[veh] = 0
|
|
end
|
|
|
|
if useFiretruckSiren(veh) and state_lxsiren[veh] == 1 then
|
|
TogMuteDfltSrnForVeh(veh, false)
|
|
dsrn_mute = false
|
|
else
|
|
TogMuteDfltSrnForVeh(veh, true)
|
|
dsrn_mute = true
|
|
end
|
|
|
|
if not IsVehicleSirenOn(veh) and state_lxsiren[veh] > 0 then
|
|
PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
SetLxSirenStateForVeh(veh, 0)
|
|
count_bcast_timer = delay_bcast_timer
|
|
end
|
|
if not IsVehicleSirenOn(veh) and state_pwrcall[veh] == true then
|
|
PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
TogPowercallStateForVeh(veh, false)
|
|
count_bcast_timer = delay_bcast_timer
|
|
end
|
|
|
|
----- CONTROLS -----
|
|
if not IsPauseMenuActive() then
|
|
|
|
-- TOG DFLT SRN LIGHTS
|
|
if IsDisabledControlJustReleased(0, 85) or IsDisabledControlJustReleased(0, 52) then
|
|
if IsVehicleSirenOn(veh) then
|
|
PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
SetVehicleSiren(veh, false)
|
|
else
|
|
PlaySoundFrontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
SetVehicleSiren(veh, true)
|
|
count_bcast_timer = delay_bcast_timer
|
|
end
|
|
|
|
-- TOG LX SIREN
|
|
elseif IsDisabledControlJustReleased(0, 19) or IsDisabledControlJustReleased(0, 157) then
|
|
local cstate = state_lxsiren[veh]
|
|
if cstate == 0 then
|
|
if IsVehicleSirenOn(veh) then
|
|
PlaySoundFrontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1) -- on
|
|
SetLxSirenStateForVeh(veh, 1)
|
|
count_bcast_timer = delay_bcast_timer
|
|
end
|
|
else
|
|
PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1) -- off
|
|
SetLxSirenStateForVeh(veh, 0)
|
|
count_bcast_timer = delay_bcast_timer
|
|
end
|
|
|
|
-- POWERCALL
|
|
elseif IsDisabledControlJustReleased(0, 20) then
|
|
if state_pwrcall[veh] == true then
|
|
PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
TogPowercallStateForVeh(veh, false)
|
|
count_bcast_timer = delay_bcast_timer
|
|
else
|
|
if IsVehicleSirenOn(veh) then
|
|
PlaySoundFrontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
TogPowercallStateForVeh(veh, true)
|
|
count_bcast_timer = delay_bcast_timer
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-- BROWSE LX SRN TONES
|
|
if state_lxsiren[veh] > 0 then
|
|
if IsDisabledControlJustReleased(0, 80) or IsDisabledControlJustReleased(0, 140) then
|
|
if IsVehicleSirenOn(veh) then
|
|
local cstate = state_lxsiren[veh]
|
|
local nstate = 1
|
|
PlaySoundFrontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1) -- on
|
|
if cstate == 1 then
|
|
nstate = 2
|
|
elseif cstate == 2 then
|
|
nstate = 3
|
|
else
|
|
nstate = 1
|
|
end
|
|
SetLxSirenStateForVeh(veh, nstate)
|
|
count_bcast_timer = delay_bcast_timer
|
|
end
|
|
end
|
|
end
|
|
|
|
-- MANU
|
|
if state_lxsiren[veh] < 1 then
|
|
if IsDisabledControlPressed(0, 80) or IsDisabledControlPressed(0, 140) then
|
|
actv_manu = true
|
|
else
|
|
actv_manu = false
|
|
end
|
|
else
|
|
actv_manu = false
|
|
end
|
|
|
|
-- HORN
|
|
if IsDisabledControlPressed(0, 86) then
|
|
actv_horn = true
|
|
else
|
|
actv_horn = false
|
|
end
|
|
|
|
end
|
|
|
|
---- ADJUST HORN / MANU STATE ----
|
|
local hmanu_state_new = 0
|
|
if actv_horn == true and actv_manu == false then
|
|
hmanu_state_new = 1
|
|
elseif actv_horn == false and actv_manu == true then
|
|
hmanu_state_new = 2
|
|
elseif actv_horn == true and actv_manu == true then
|
|
hmanu_state_new = 3
|
|
end
|
|
if hmanu_state_new == 1 then
|
|
if not useFiretruckSiren(veh) then
|
|
if state_lxsiren[veh] > 0 and actv_lxsrnmute_temp == false then
|
|
srntone_temp = state_lxsiren[veh]
|
|
SetLxSirenStateForVeh(veh, 0)
|
|
actv_lxsrnmute_temp = true
|
|
end
|
|
end
|
|
else
|
|
if not useFiretruckSiren(veh) then
|
|
if actv_lxsrnmute_temp == true then
|
|
SetLxSirenStateForVeh(veh, srntone_temp)
|
|
actv_lxsrnmute_temp = false
|
|
end
|
|
end
|
|
end
|
|
if state_airmanu[veh] ~= hmanu_state_new then
|
|
SetAirManuStateForVeh(veh, hmanu_state_new)
|
|
count_bcast_timer = delay_bcast_timer
|
|
end
|
|
end
|
|
|
|
|
|
--- IS ANY LAND VEHICLE ---
|
|
if GetVehicleClass(veh) ~= 14 and GetVehicleClass(veh) ~= 15 and GetVehicleClass(veh) ~= 16 and GetVehicleClass(veh) ~= 21 then
|
|
|
|
----- CONTROLS -----
|
|
if not IsPauseMenuActive() then
|
|
|
|
-- IND L
|
|
if IsDisabledControlJustReleased(0, 84) then -- INPUT_VEH_PREV_RADIO_TRACK
|
|
local cstate = state_indic[veh]
|
|
if cstate == ind_state_l then
|
|
state_indic[veh] = ind_state_o
|
|
actv_ind_timer = false
|
|
PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
else
|
|
state_indic[veh] = ind_state_l
|
|
actv_ind_timer = true
|
|
PlaySoundFrontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
end
|
|
TogIndicStateForVeh(veh, state_indic[veh])
|
|
count_ind_timer = 0
|
|
count_bcast_timer = delay_bcast_timer
|
|
-- IND R
|
|
elseif IsDisabledControlJustReleased(0, 83) then -- INPUT_VEH_NEXT_RADIO_TRACK
|
|
local cstate = state_indic[veh]
|
|
if cstate == ind_state_r then
|
|
state_indic[veh] = ind_state_o
|
|
actv_ind_timer = false
|
|
PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
else
|
|
state_indic[veh] = ind_state_r
|
|
actv_ind_timer = true
|
|
PlaySoundFrontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
end
|
|
TogIndicStateForVeh(veh, state_indic[veh])
|
|
count_ind_timer = 0
|
|
count_bcast_timer = delay_bcast_timer
|
|
-- IND H
|
|
elseif IsControlJustReleased(0, 197) then -- INPUT_FRONTEND_CANCEL / Backspace
|
|
if GetLastInputMethod(0) then -- last input was with kb
|
|
local cstate = state_indic[veh]
|
|
if cstate == ind_state_h then
|
|
state_indic[veh] = ind_state_o
|
|
PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
else
|
|
state_indic[veh] = ind_state_h
|
|
PlaySoundFrontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1)
|
|
end
|
|
TogIndicStateForVeh(veh, state_indic[veh])
|
|
actv_ind_timer = false
|
|
count_ind_timer = 0
|
|
count_bcast_timer = delay_bcast_timer
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
|
|
----- AUTO BROADCAST VEH STATES -----
|
|
if count_bcast_timer > delay_bcast_timer then
|
|
count_bcast_timer = 0
|
|
--- IS EMERG VEHICLE ---
|
|
if GetVehicleClass(veh) == 18 then
|
|
TriggerServerEvent("lvc_TogDfltSrnMuted_s", dsrn_mute)
|
|
TriggerServerEvent("lvc_SetLxSirenState_s", state_lxsiren[veh])
|
|
TriggerServerEvent("lvc_TogPwrcallState_s", state_pwrcall[veh])
|
|
TriggerServerEvent("lvc_SetAirManuState_s", state_airmanu[veh])
|
|
end
|
|
--- IS ANY OTHER VEHICLE ---
|
|
TriggerServerEvent("lvc_TogIndicState_s", state_indic[veh])
|
|
else
|
|
count_bcast_timer = count_bcast_timer + 1
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
Citizen.Wait(0)
|
|
end
|
|
end)
|