Place equipements, sirens and emergency lights on any vehicle.
This is a script, lights/objects/vehicles are not included unless mentioned otherwise
Nabla.LogLevel = Nabla.LogLevels.WARN -- Log levels are ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF (default is WARN)
Config = {
-- Please check our FAQ if you have any question : https://fivem.nabla.sh/faq
-- List of players who have access to the actions, set WhiteListEnabled = true/false to enable/disable the whitelist
WhiteListEnabled = true,
WhiteList = {
'ip:192.168.168.35',
'steam:12345',
'mechanic',
'mechanic:5',
'nabla.evc', -- To use with ACE, add this to your server.cfg : add_ace identifier.YOURIDENTIFIER nabla.evc allow
},
-- If true only whitelisted player can control the lights / sirens
WhiteListedControl = false,
-- Keybinds, you can choose from here : https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/
DefaultControls = function()
RegisterKeyMapping('+evc_menu', 'EVC - Menu (Hold for trailer)', 'KEYBOARD', 'F6') -- Open placement menu
RegisterKeyMapping('+evc_lights', 'EVC - Lights', 'KEYBOARD', 'LMENU') -- Enable lights
RegisterKeyMapping('+evc_siren', 'EVC - Siren', 'KEYBOARD', 'E') -- Enable sirens (holding with sirens on will trigger alternative siren, holding with sirens off will trigger horn)
RegisterKeyMapping('+evc_siren_tone', 'EVC - Siren Tone', 'KEYBOARD', 'G') -- Change the siren tone
RegisterKeyMapping('+evc_spawn_toggle', 'EVC - Spawn Toggle', 'KEYBOARD', 'F7') -- Put / Remove lights, objects and sirens
end,
-- Handle entityCreated / entityRemoved automatically, if you set this to false make sure to add :
-- TriggerServerEvent('EVC:entityCreated', NetworkGetNetworkIdFromEntity(veh)) -- When you create a vehicle and after you set it's plate
-- TriggerServerEvent('EVC:entityRemoved', NetworkGetNetworkIdFromEntity(veh)) -- When you delete a vehicle
-- Otherwise the script will not work
HandleEntityCreatedRemoved = true,
-- Should be loaded from a separate resource
Models = {
Lights = {
["FakeItemToShowOptions"] = { -- This is a fake item to show available options per light/object
WhiteList = {"mechanic"}, -- You can also set the whitelist at the object level, if nothing is specified, the global whitelist will be used. Syntax is same as global
Extras = true, -- Does this object has extras ? Default to false
Doors = true, -- Does this object has doors ? Default to false
Offset = vector3(-0.45, -0.1, 0.9), -- Offset between center of object and 3D object (for displaying 3D marker)
Collision = false, -- You can also set the collision at the object level, if nothing is specified, the global collision setting will be used
},
["D3sAmberBeacon"] = {},
["D3sAntennaAmberStr"] = {},
["D3sAntennaBlueStr"] = {},
["D3sAntennaGreenStr"] = {},
["D3sAntennaPurpleStr"] = {},
["D3sAntennaRedStr"] = {},
["D3sAntennaWhiteStr"] = {},
["D3sBBFedSigArjent"] = {},
["D3sBlueBeacon"] = {},
["D3sEdge9000A"] = {Extras = true},
["D3sEdge9000A_L"] = {Extras = true},
["D3sEdge9000B"] = {Extras = true},
["D3sEdge9000B_L"] = {Extras = true},
["D3sEdge9000G"] = {Extras = true},
["D3sEdge9000G_L"] = {Extras = true},
["D3sEdge9000P"] = {Extras = true},
["D3sEdge9000P_L"] = {Extras = true},
["D3sEdge9000R"] = {Extras = true},
["D3sEdge9000RB"] = {Extras = true},
["D3sEdge9000RB_L"] = {Extras = true},
["D3sEdge9000R_L"] = {Extras = true},
["D3sRBFedSigArjent"] = {},
["D3sRRFedSigArjent"] = {},
["D3sRedBeacon"] = {},
["D3s_DotBoard"] = {Doors = true, Extras = true},
["D3s_MiniP_A"] = {Extras = true},
["D3s_MiniP_B"] = {Extras = true},
["D3s_MiniP_G"] = {Extras = true},
["D3s_MiniP_P"] = {Extras = true},
["D3s_MiniP_R"] = {Extras = true},
["D3s_OneGuard_A"] = {Extras = true},
["D3s_OneGuard_AA"] = {Extras = true},
["D3s_OneGuard_AW"] = {Extras = true},
["D3s_OneGuard_B"] = {Extras = true},
["D3s_OneGuard_BB"] = {Extras = true},
["D3s_OneGuard_BW"] = {Extras = true},
["D3s_OneGuard_G"] = {Extras = true},
["D3s_OneGuard_GG"] = {Extras = true},
["D3s_OneGuard_GW"] = {Extras = true},
["D3s_OneGuard_P"] = {Extras = true},
["D3s_OneGuard_PP"] = {Extras = true},
["D3s_OneGuard_PW"] = {Extras = true},
["D3s_OneGuard_R"] = {Extras = true},
["D3s_OneGuard_RB"] = {Extras = true},
["D3s_OneGuard_RW"] = {Extras = true},
["D3s_OneGuard_W"] = {Extras = true},
["D3s_RetroHighwayRiser"] = {Animation = true},
["D3s_S_Series_BB"] = {Extras = true},
["D3s_S_Series_RB"] = {Extras = true},
["D3s_S_Series_RR"] = {Extras = true},
["D3s_SideRunners_A"] = {Extras = true},
["D3s_SideRunners_B"] = {Extras = true},
["D3s_SideRunners_G"] = {Extras = true},
["D3s_SideRunners_P"] = {Extras = true},
["D3s_SideRunners_R"] = {Extras = true},
["D3s_SideRunners_RB"] = {Extras = true},
["D3s_XR2000_AA"] = {Extras = true},
["D3s_XR2000_BB"] = {Extras = true},
["D3s_XR2000_GG"] = {Extras = true},
["D3s_XR2000_PP"] = {Extras = true},
["D3s_XR2000_RB"] = {Extras = true},
["D3s_XR2000_RR"] = {Extras = true},
["WhelenAmberBeacon"] = {},
["WhelenBlueBeacon"] = {},
["WhelenGreenBeacon"] = {},
["WhelenRedBeacon"] = {},
["fbiold"] = {Offset = vector3(-0.45, -0.1, 0.9)},
["lightbarTwoSticks"] = {Offset = vector3(0.0, 0.45, 0.65)},
["longLightbar"] = {Offset = vector3(0.35, -1.15, 0.75)},
["longLightbarRed"] = {Offset = vector3(0.35, -1.15, 0.75)},
},
Objects = {
["D3sConeStackV1"] = {},
["D3sConeStackV2"] = {},
["D3sLadderRack"] = {},
["D3sToolboxV1"] = {},
["D3sWinchV1"] = {},
["D3s_AntennaBlack"] = {},
["D3s_AntennaLowProfile"] = {},
["D3s_AntennaSLVBLK"] = {},
["D3s_BedRack"] = {Extras = true},
["D3s_PartitionCage"] = {},
["D3s_PlateReaderV1"] = {},
["D3s_PushGuard_S"] = {},
["D3s_Pushbar_L"] = {},
["D3s_SirenV1"] = {},
["D3s_TruckRack"] = {},
},
},
-- List of native vehicles on which lights are controled using EVC
-- Has less priority than configs saved by model, plate ...
-- Remove from list to disable control by EVC
NativeVehiclesHash = {
["ambulance"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_AMBULANCE_WARNING"}, Tones = {"RESIDENT_VEHICLES_SIREN_WAIL_02"}}},
["fbi"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"RESIDENT_VEHICLES_SIREN_WAIL_02"}}},
["fbi2"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"RESIDENT_VEHICLES_SIREN_WAIL_02"}}},
["firetruk"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_FIRETRUCK_WARNING"}, Tones = {"RESIDENT_VEHICLES_SIREN_FIRETRUCK_WAIL_01"}}},
["lguard"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["police"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["police2"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["police3"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["police4"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["policeb"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"RESIDENT_VEHICLES_SIREN_QUICK_03"}}},
["policeold1"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["policeold2"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["policet"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["pranger"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["riot"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["riot2"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["sheriff"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"VEHICLES_HORNS_SIREN_1"}}},
["sheriff2"] = {lights = {}, objects = {}, sirens = {AlternativeTones = {"VEHICLES_HORNS_POLICE_WARNING"}, Tones = {"RESIDENT_VEHICLES_SIREN_WAIL_03"}}},
},
-- Maximum number of lights / objects per vehicle
Max = {
Lights = 10,
Objects = 10,
},
-- Enable or disable collsions on spawned objects / lights (turning this on can lead to weird behavior)
EnableCollision = false,
-- Spawned object are invicible
Invincible = false,
-- If true lights must be on for sirens to work
SirenNeedLights = false,
-- Audio banks
AudioBanks = {
"DLC_WMSIRENS\\SIRENPACK_ONE",
},
-- Range of the sirens
SirenRange = 200.0,
-- Anything can be added / removed to your likings
SirenTones = {
-- { -- This is a fake siren to show available options per siren
-- label = "label", -- Label for checkbox item
-- description = "description", -- Description for checkbox item
-- hash = "FAKE_SIREN_TO_SHOW_OPTIONS", -- API Hash of siren for PlaySoundFromEntity
-- ref = 0, -- API ref of siren for PlaySoundFromEntity
-- WhiteList = {}, -- You can also set the whitelist at the object level, if nothing is specified, the global whitelist will be used. Syntax is same as global
-- },
{hash = "SIRENS_AIRHORN", label = "AirHorn", description = "Add this siren", ref = 0},
{hash = "VEHICLES_HORNS_SIREN_1", label = "Horns 1", description = "Add this siren", ref = 0},
{hash = "VEHICLES_HORNS_SIREN_2", label = "Horns 2", description = "Add this siren", ref = 0},
{hash = "VEHICLES_HORNS_POLICE_WARNING", label = "Police Warning", description = "Add this siren", ref = 0},
{hash = "RESIDENT_VEHICLES_SIREN_WAIL_01", label = "Wail 1", description = "Add this siren", ref = 0},
{hash = "RESIDENT_VEHICLES_SIREN_WAIL_02", label = "Wail 2", description = "Add this siren", ref = 0},
{hash = "RESIDENT_VEHICLES_SIREN_WAIL_03", label = "Wail 3", description = "Add this siren", ref = 0},
{hash = "RESIDENT_VEHICLES_SIREN_QUICK_01", label = "Quick 1", description = "Add this siren", ref = 0},
{hash = "RESIDENT_VEHICLES_SIREN_QUICK_02", label = "Quick 2", description = "Add this siren", ref = 0},
{hash = "RESIDENT_VEHICLES_SIREN_QUICK_03", label = "Quick 3", description = "Add this siren", ref = 0},
{hash = "VEHICLES_HORNS_AMBULANCE_WARNING", label = "Ambulance", description = "Add this siren", ref = 0},
{hash = "VEHICLES_HORNS_FIRETRUCK_WARNING", label = "Firetruck", description = "Add this siren", ref = 0},
{hash = "RESIDENT_VEHICLES_SIREN_FIRETRUCK_WAIL_01", label = "Firetruck wail 1", description = "Add this siren", ref = 0},
{hash = "RESIDENT_VEHICLES_SIREN_FIRETRUCK_QUICK_01", label = "Firetruck wail 2", description = "Add this siren", ref = 0},
-- Custom sirens (from https://github.com/Walsheyy/WMServerSirens)
{hash = "SIREN_ALPHA", label = "Custom Alpha", description = "Add this siren", ref = "DLC_WMSIRENS_SOUNDSET"},
{hash = "SIREN_BRAVO", label = "Custom Bravo", description = "Add this siren", ref = "DLC_WMSIRENS_SOUNDSET"},
{hash = "SIREN_CHARLIE", label = "Custom Charlie", description = "Add this siren", ref = "DLC_WMSIRENS_SOUNDSET"},
{hash = "SIREN_DELTA", label = "Custom Delta", description = "Add this siren", ref = "DLC_WMSIRENS_SOUNDSET"},
{hash = "SIREN_ECHO", label = "Custom Echo", description = "Add this siren", ref = "DLC_WMSIRENS_SOUNDSET"},
{hash = "SIREN_FOXTROT", label = "Custom Foxtrot", description = "Add this siren", ref = "DLC_WMSIRENS_SOUNDSET"},
{hash = "SIREN_GOLF", label = "Custom Golf", description = "Add this siren", ref = "DLC_WMSIRENS_SOUNDSET"},
{hash = "SIREN_HOTEL", label = "Custom Hotel", description = "Add this siren", ref = "DLC_WMSIRENS_SOUNDSET"},
},
-- Placement sensitivity (step)
Sensitivity = {
Tx = {0.01, 0.1, 1.0}, -- Translation
Rx = {1.0, 10.0, 45.0}, -- Rotation
},
-- Range during placement
Range = {
Tx = 10.0, -- Translation
Rx = 180.0, -- Rotation
},
-- Function to customize the menus
Customize = function(menu)
menu:SetBannerRectangle(NativeUI.CreateRectangle(0, 0, 0, 0, 122, 32, 20, 255.0))
end,
-- Disable lights / siren when leaving the vehicle, will NOT turn back on when entering
TurnOffOnExit = {
Sirens = false,
Lights = false,
},
-- Should a notif be sent if a user press a keybind but no vehicle is in range ?
NoVehNotif = false,
-- Save per model, per plate, per user+plate or per name ?
-- Per name is not loaded automatically, you have to go in the menu and enter the template name you want to load
-- Tip 1 : To disable server save, set all to false
-- Tip 2 : Priority is : UUID > Plate > Model, meaning you can override the model settings by saving per plate
SavePerModel = true,
SavePerPlate = true,
SavePerUUID = true,
GenerateUUID = function(identifier, vehicle)
return identifier..":"..GetVehicleNumberPlateText(vehicle)
end,
SavePerName = true,
-- Spawn objects / lights only if player is whitelisted
SpawnOnlyIfWhiteListed = false,
-- Translations
Strings = {
['no_veh'] = 'No vehicle nearby',
['open_veh'] = 'Open menu for this vehicle',
['saved'] = '~g~Saved !~w~',
['clear'] = '~g~Config cleared !~w~',
['error'] = '~r~Error !~w~',
-- Main menu
['open'] = {'Press your keybind to open the Nabla\'s Emergency Vehicle Creator'},
['toggle'] = {'Toggle lights, objects and sirens', 'Toggle the spawn of entities and siren, can also be toggled with the "EVC - Spawn Toggle" button'},
['passenger_control'] = {'Passenger control', 'Allow passengers to control the lights / sirens'},
['save'] = {'Save config by', 'Choose how the config will be saved and loaded to the car'},
['save_model'] = 'Model',
['save_plate'] = 'Plate',
['save_uuid'] = 'UUID',
['save_name'] = 'Name',
['load_name'] = {'Load by name', 'Load a config by using a custom name'},
-- Lights / Objects
['add_edit'] = {
["Objects"] = "Add, edit and remove equipements on this vehicle",
["Lights"] = "Add, edit and remove lights on this vehicle",
},
["Lights"] = "Lights",
["Objects"] = "Equipements",
["spawn"] = {"Spawn", "Select the model you wish to spawn"},
["select"] = {"Selected", "Select the element you wish to move"},
["mirror"] = {"Mirror from", "Will copy the position and orientation from this element onto the selected one"},
["tspeed"] = {"Translation Speed", "Select translation speed"},
["rspeed"] = {"Rotation Speed", "Select rotation speed"},
["tx"] = {"X", "Move left / right"},
["ty"] = {"Y", "Move front / rear"},
["tz"] = {"Z", "Move up / down"},
["rx"] = {"Pitch", "Rotate around X"},
["ry"] = {"Roll", "Rotate around Y"},
["rz"] = {"Yaw", "Rotate around Z"},
["del"] = {"Delete", "Remove this element (remember to save)"},
["ext"] = {"Extras", "Enable / disable extras"},
["doors"] = {"Doors", "Open / close doors"},
["livery"] = {"Livery", "Select the livery"},
-- Sirens
["sirens"] = {"Sirens", "Add and remove sirens on this vehicle"},
["altsiren"] = {"Alternative Siren", "Choose the siren that will be played when holding the siren button"},
},
-- Can the menu be opened from anywhere ? If set to false, add markers below
MenuOpenAnyWhere = true,
Markers = {
vector3(-2097.81, 2655.79, 2.44),
},
-- Distance to show markers, help text...
DrawMarkerDistance = 50.0,
DrawTextDistance = 2.0,
-- Function for drawing markers
DrawMarker = function(pos)
DrawMarker(2, pos.x, pos.y, pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, 1.5, 1.5, 1.5, 255, 176, 39, 100, false, true, 2, true, false, false, false)
end,
}
table.sort(Config.SirenTones, function(a,b) return a.label < b.label end)
local prev = nil
function ShowNotification(message)
if prev ~= nil then
RemoveNotification(prev)
end
AddTextEntry(GetCurrentResourceName().."Notif", Config.Strings[message])
BeginTextCommandThefeedPost(GetCurrentResourceName().."Notif")
prev = EndTextCommandThefeedPostTicker(false, false)
end
function DisplayHelpText(lineOne, lineTwo, lineThree)
BeginTextCommandDisplayHelp("THREESTRINGS")
AddTextComponentSubstringPlayerName(lineOne)
AddTextComponentSubstringPlayerName(lineTwo or "")
AddTextComponentSubstringPlayerName(lineThree or "")
EndTextCommandDisplayHelp(0, 0, 0, -1)
end
Config.NativeVehicles = {}
for k,v in pairs(Config.NativeVehiclesHash) do
Config.NativeVehicles[tostring(GetHashKey(k))] = v
end
Keybind / Command | Action |
---|---|
F6 | Open menu |
LALT | Turn on lights |
E | Turn on sirens |
G | Change the siren tone |
27/3/2023
Love this script, finally it safes to my car! Thanks for the support @Blaizz ! ♥
18/3/2023
Like: I have the product though 2 times bought ausersehen and the refund lasted not even a day and I had everything back now I could get it right. The system behind it runs very well the menu is very easy to understand and it is editable and does what it should.
Dislike: This has nothing to do with the creator but there are currently few lightbars or other what you could put on it would be great if there is still what comes.
2/8/2022
Like : Amazing script, really advanced, and good config.
Dislike : Price was a little expensive for me, 100% worth it though.
11/4/2022
Like: It works like it should and its awesome, that you can finally change it to any siren you want. Good work and fast support!
Dislike: Nothing.
2/4/2022
The LightBar script is probably one of the coolest scripts there are. Being able to put lights on any vehicle, sirens too. The lights sync up on onesync infinity perfect with no issues at all. Now with addon siren support you can add any siren you want to the cars, and there was previously a glitch where the sirens would get stuck on for others, and that is fixed. It is all around perfect now.
Dislike : There's not really any issues anymore besides some small inconveniences with the scrolling of the lightbars, but its nothing to worry about.
27/3/2022
Like: It works like it should and its awesome, that you can finally change it to any siren you want. Good work and fast support!
Dislike: Nothing.