Configuration
Overview
shared/config/config.lua: General settings, theme, TTS, vehicle keysshared/config/peds.lua: Ped models available in the creatorshared/config/vehicles.lua: Vehicle models available in the creatorshared/config/animations.lua: Animations selectable in the creatorshared/config/weaponlist.lua: Weapons for enemy NPCsshared/config/props.lua: Prop models selectable for objectives and optional propsshared/heist_presets.lua: Scripted heist grab presets (trolleys, safes, cash tables)shared/config/zombie_animations.lua: Zombie-mode movement setsshared/config/minigames/: Minigame integrations (one file per resource)server/config_server.lua: ElevenLabs API key, Discord webhooks
Mission and NPC data is managed through the in-game creator and stored in the database.
General Settings
1Config.Settings = {
2 Locale = 'en',
3 Debug = false,
4 MoveHudCommand = 'movequesthud',
5 CreatorCommand = 'missioncreator',
6 NearbyPlayerDistance = 10,
7 SoundResource = 'xsound',
8 GiveVehicleKeys = true,
9 RewardsInfo = 'name', -- 'name' | 'image' | 'combo'
10 PlayerNameFormat = 'rp_first', -- 'fivem' | 'rp_first' | 'rp_full'
11
12 KeepOnComplete = {
13 Garage = 'pillboxgarage',
14 State = 1,
15 VehicleType = 'car',
16 },
17}Locale: Language code for translationsDebug: Enables verbose console outputMoveHudCommand: Command to reposition the quest HUD on screenCreatorCommand: Command to open the in-game mission creator (requires admin permissions)NearbyPlayerDistance: Max distance in meters to detect nearby players for squad invitesSoundResource: Resource used for TTS audio playback (default:xsound)KeepOnComplete: Destination garage, state and vehicle type used when aGIVE_VEHICLEobjective haskeepOnComplete = true. Advanced Parking is auto-detected; no setting needed.GiveVehicleKeys: Give/remove vehicle keys viaml_bridgeduring vehicle objectivesRewardsInfo: How rewards display in the UI. Options:'name'(text only),'image'(icon only),'combo'(both)PlayerNameFormat: Player name format. Options:'fivem'(Steam/Discord name),'rp_first'(RP first name),'rp_full'(RP full name)
Theme
1Config.Theme = 'classic'
2-- Config.MainColor = '#c90a47'
3-- Config.ThemeBaseColor = '#429ca8'Theme: UI theme. Options:'classic','cyberpunk','wasteland','fantasy','noir'MainColor: Hex accent color override for buttons and icons. Uncomment to apply. Only affects certain themes.ThemeBaseColor: Primary background color override. Uncomment to apply. Only affects certain themes.
TTS (Text-To-Speech)
1Config.TTS = {
2 Enabled = true,
3 ElevenLabs = {
4 DefaultVoiceId = 'Xb7hH8MSUJpSbSDYk0k2',
5 ModelId = 'eleven_multilingual_v2',
6 Stability = 0.5,
7 SimilarityBoost = 0.75,
8 }
9}1Config.TTS.ElevenLabs.ApiKey = 'YOUR_API_KEY'Enabled: Enable/disable TTS globally. Whenfalse, no API key is needed.DefaultVoiceId: Default ElevenLabs voice ID. Can be overridden per NPC in the creator.ModelId: ElevenLabs synthesis modelStability: Voice stability (0.0-1.0)SimilarityBoost: Voice similarity boost (0.0-1.0)ApiKey: ElevenLabs API key (server-side only, never shared with clients)
Generated audio is cached in cache/tts/ and re-used on every later request. Generation is capped at 50000 characters per player per hour and single lines are cut at 500 characters. Cached lines replay from disk and cost nothing.
Custom Audio Files
Any voice line can play a local file instead of calling ElevenLabs. In the creator, set the audio source to Custom File and enter the file name. Available for NPC greetings, quest list lines, mission briefings and Talk objectives.
- Place the files in
cache/tts/inside the resource folder - Formats:
.mp3,.wav,.ogg. A name typed without extension is read as.mp3 - Plain file names only (letters, numbers,
-and_), max 2 MB per file
Custom files never call ElevenLabs. Keep Config.TTS.Enabled = true so the audio pipeline stays active.
Skills Integration
1Config.Skills = {
2 Enabled = true,
3 Resource = 'ml_skills',
4 MaxXpPerQuest = 5000,
5}Enabled: Master switch. Whenfalse, skill requirements, skill XP and skill unlocks are ignored on every missionResource: Name of the skills resourceMaxXpPerQuest: Safety cap on skill XP granted by a single quest completion
Skill requirements, XP rewards and skill unlocks are set per mission in the creator. Everything stays silent when ml_skills is not running.
Permissions
1Config.Permissions = {
2 Creator = {
3 useDefaultAdmins = true,
4 ace = {
5 'ml_missions.creator',
6 'admin', 'god', 'superadmin', 'command',
7 'group.admin', 'group.superadmin',
8 },
9 },
10 LiveActions = {
11 useDefaultAdmins = true,
12 ace = {
13 'ml_missions.admin',
14 'admin', 'god', 'superadmin',
15 'group.admin', 'group.superadmin',
16 },
17 },
18}Creator: Opens the creator command, edits missions and NPCs, and views the Live Missions tabLiveActions: Force complete, force fail and teleport to leader from the Live Missions tab. When the whole block is removed it falls back toCreatoruseDefaultAdmins: Also accept the framework admin groups resolved byBridge.HasPermissionace: ACE permissions accepted for the tier. Matching any single entry is enough
Vehicle Keys
1Config.VehicleKeys = {
2 Give = function(vehicle, plate)
3 if not Config.Settings.GiveVehicleKeys then return end
4 Bridge.GiveVehicleKey(vehicle, plate)
5 end,
6 Remove = function(vehicle, plate)
7 if not Config.Settings.GiveVehicleKeys then return end
8 Bridge.RemoveVehicleKey(vehicle, plate)
9 end
10}Called automatically during vehicle objectives. Override these functions if your vehicle keys system is not supported by ml_bridge. Only active when Config.Settings.GiveVehicleKeys = true.
Minigames
Defined in shared/config/minigames/. Each file registers entries in Config.AvailableMiniGames. Selected per-objective in the creator.
Supported resources:
ox_lib: Always availablebl_ui: Optionalmgc: Optionalbd: Optionalultra_voltlab: Optionalutk_fingerprint: Optional
1Config.AvailableMiniGames["my_custom_game"] = {
2 label = "My Custom Game",
3 Start = function(params)
4 local success = exports['my-minigames']:StartGame('hard')
5 return success
6 end
7}The Start function must return true (pass) or false (fail).
Shared Config Files
Ped Models
1pedModelList = {
2 'a_f_m_beach_01', 'a_f_y_bevhills_01',
3 'a_m_m_afriamer_01', 'a_m_y_acult_01',
4 -- Add your own ped models at the bottom
5}model: GTA ped model namelabel: Display name in the creator dropdown
Vehicle Models
1carModelList = {
2 'adder', 'autarch', 'banshee2', 'sultan', 'kuruma',
3 -- Add your own vehicle spawn names at the bottom
4}model: GTA vehicle spawn namelabel: Display name in the creator dropdown
Animations
1AnimationsList = {
2 { Label = 'Mechanic (Ground)', Animation = 'base', Dictionary = 'amb@world_human_vehicle_mechanic@male@base' },
3}Label: Display name in the creatorAnimation: Animation clip nameDictionary: Animation dictionary
Discord Webhooks
1Config.DiscordWebhook = {
2 CompleteObjective = 'INSERT_WEBHOOK_LINK_HERE',
3 StartQuests = 'INSERT_WEBHOOK_LINK_HERE',
4 Allobjective = 'INSERT_WEBHOOK_LINK_HERE',
5 Turnin = 'INSERT_WEBHOOK_LINK_HERE',
6 QuestsExploit = 'INSERT_WEBHOOK_LINK_HERE',
7 FailedAll = 'INSERT_WEBHOOK_LINK_HERE',
8 MissionEdit = 'INSERT_WEBHOOK_LINK_HERE',
9 MissionDelete = 'INSERT_WEBHOOK_LINK_HERE',
10 MissionTest = 'INSERT_WEBHOOK_LINK_HERE',
11 OneTimeTurnin = 'INSERT_WEBHOOK_LINK_HERE',
12 NpcEdit = 'INSERT_WEBHOOK_LINK_HERE',
13 NpcDelete = 'INSERT_WEBHOOK_LINK_HERE',
14 SquadActions = 'INSERT_WEBHOOK_LINK_HERE',
15 RewardClaimed = 'INSERT_WEBHOOK_LINK_HERE',
16 AdminAction = 'INSERT_WEBHOOK_LINK_HERE',
17}CompleteObjective: Player completes an objectiveStartQuests: Quest startedAllobjective: All objectives completedTurnin: Quest turned inQuestsExploit: Suspicious activity detectedFailedAll: Quest failedMissionEdit/MissionDelete: Creator changesMissionTest: Test mission launchedOneTimeTurnin: One-time quest completedNpcEdit/NpcDelete: NPC changesSquadActions: Squad lifecycle eventsRewardClaimed: Rewards distributed
Leave any webhook as INSERT_WEBHOOK_LINK_HERE to disable that log entirely.