Main/resources/[Lightbar]/EVC/Shared/shared.lua

349 lines
19 KiB
Lua
Raw Normal View History

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