Configuration

6 min readUpdated 2 weeks ago

Overview

  • shared/config/config.lua: General settings, theme, TTS, vehicle keys
  • shared/config/peds.lua: Ped models available in the creator
  • shared/config/vehicles.lua: Vehicle models available in the creator
  • shared/config/animations.lua: Animations selectable in the creator
  • shared/config/weaponlist.lua: Weapons for enemy NPCs
  • shared/config/props.lua: Prop models selectable for objectives and optional props
  • shared/heist_presets.lua: Scripted heist grab presets (trolleys, safes, cash tables)
  • shared/config/zombie_animations.lua: Zombie-mode movement sets
  • shared/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

shared/config/config.lua
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 translations
  • Debug: Enables verbose console output
  • MoveHudCommand: Command to reposition the quest HUD on screen
  • CreatorCommand: Command to open the in-game mission creator (requires admin permissions)
  • NearbyPlayerDistance: Max distance in meters to detect nearby players for squad invites
  • SoundResource: Resource used for TTS audio playback (default: xsound)
  • KeepOnComplete: Destination garage, state and vehicle type used when a GIVE_VEHICLE objective has keepOnComplete = true. Advanced Parking is auto-detected; no setting needed.
  • GiveVehicleKeys: Give/remove vehicle keys via ml_bridge during vehicle objectives
  • RewardsInfo: 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

shared/config/config.lua
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)

shared/config/config.lua
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}
server/config_server.lua
1Config.TTS.ElevenLabs.ApiKey = 'YOUR_API_KEY'
  • Enabled: Enable/disable TTS globally. When false, no API key is needed.
  • DefaultVoiceId: Default ElevenLabs voice ID. Can be overridden per NPC in the creator.
  • ModelId: ElevenLabs synthesis model
  • Stability: 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
No API Key Needed

Custom files never call ElevenLabs. Keep Config.TTS.Enabled = true so the audio pipeline stays active.

Skills Integration

shared/config/config.lua
1Config.Skills = {
2    Enabled       = true,
3    Resource      = 'ml_skills',
4    MaxXpPerQuest = 5000,
5}
  • Enabled: Master switch. When false, skill requirements, skill XP and skill unlocks are ignored on every mission
  • Resource: Name of the skills resource
  • MaxXpPerQuest: 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

shared/config/config.lua
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 tab
  • LiveActions: Force complete, force fail and teleport to leader from the Live Missions tab. When the whole block is removed it falls back to Creator
  • useDefaultAdmins: Also accept the framework admin groups resolved by Bridge.HasPermission
  • ace: ACE permissions accepted for the tier. Matching any single entry is enough

Vehicle Keys

shared/config/config.lua
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 available
  • bl_ui: Optional
  • mgc: Optional
  • bd: Optional
  • ultra_voltlab: Optional
  • utk_fingerprint: Optional
shared/config/minigames/my_game.lua
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

shared/config/peds.lua
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 name
  • label: Display name in the creator dropdown

Vehicle Models

shared/config/vehicles.lua
1carModelList = {
2    'adder', 'autarch', 'banshee2', 'sultan', 'kuruma',
3    -- Add your own vehicle spawn names at the bottom
4}
  • model: GTA vehicle spawn name
  • label: Display name in the creator dropdown

Animations

shared/config/animations.lua
1AnimationsList = {
2    { Label = 'Mechanic (Ground)', Animation = 'base', Dictionary = 'amb@world_human_vehicle_mechanic@male@base' },
3}
  • Label: Display name in the creator
  • Animation: Animation clip name
  • Dictionary: Animation dictionary

Discord Webhooks

server/config_server.lua
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 objective
  • StartQuests: Quest started
  • Allobjective: All objectives completed
  • Turnin: Quest turned in
  • QuestsExploit: Suspicious activity detected
  • FailedAll: Quest failed
  • MissionEdit / MissionDelete: Creator changes
  • MissionTest: Test mission launched
  • OneTimeTurnin: One-time quest completed
  • NpcEdit / NpcDelete: NPC changes
  • SquadActions: Squad lifecycle events
  • RewardClaimed: Rewards distributed

Leave any webhook as INSERT_WEBHOOK_LINK_HERE to disable that log entirely.