2025-06-10 16:54:03 +02:00
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
2025-06-10 20:26:20 +02:00
RegisterKeyMapping ( ' +evc_lights ' , ' EVC - Lights ' , ' KEYBOARD ' , ' Q ' ) -- Enable lights
2025-06-10 16:54:03 +02:00
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
2025-06-10 20:26:20 +02:00
RegisterKeyMapping ( ' +evc_spawn_toggle ' , ' EVC - Spawn Toggle ' , ' KEYBOARD ' , ' F11 ' ) -- Put / Remove lights, objects and sirens
2025-06-10 16:54:03 +02:00
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 ,
-- Allow the keybind and the menu option to toggle lights, objects and sirens from the vehicle
AllowToggle = 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