Configuration

5 min readUpdated Today

Overview

  • shared/config.lua: general behavior, auto events, in-world tag, blips, capture, limits, vehicles, history, notifications and skills.
  • server/config_server.lua: Discord webhooks, the log provider and the export allowlist.

Planes, crates, loot tables, zones and flares start from the files in shared/data. The in-game admin panel edits them live and saves to the database, which then overrides those files.

General

shared/config.lua
1Config.Debug = false
2Config.locale = 'en'
3Config.UITheme = 'default'
4Config.InteractionMethod = 'textui'
  • Debug: prints extra diagnostics to the server console. Keep it false in production.
  • locale: language code for translations, e.g. en. See the locales/ folder for the codes that ship.
  • UITheme: visual theme for the loot panel, admin panel and in-world tag. One of default, wasteland, cyberpunk, noir, fantasy, survival.
  • InteractionMethod: how a landed crate is opened. textui shows an [E] prompt, target uses ox_target.

Admin

shared/config.lua
1Config.Admin = {
2    AcePermission = nil,
3    Command = 'airdrop',
4}
  • AcePermission: dedicated ACE permission for the admin panel, e.g. ml_airdrop.admin. Leave nil to fall back to the ml_bridge permission check.
  • Command: chat command that opens the admin panel.

Auto Events

shared/config.lua
1Config.AutoEvents = {
2    enabled = true,
3    interval = { min = 30, max = 45 },
4    minPlayers = 2,
5    announce = true,
6    countdown = 30,
7}
  • enabled: spawn timed global airdrops on their own.
  • interval: minutes between auto-drops, randomised between min and max.
  • minPlayers: skip the auto-drop when fewer players than this are online.
  • announce: broadcast an incoming-drop notification to everyone.
  • countdown: seconds of warning before the plane appears.

Defaults

shared/config.lua
1Config.Defaults = {
2    plane = 'cargobob_titan',
3    crate = 'random',
4    zone = 'random',
5}
  • plane: plane used for auto-events and any drop with no plane chosen. random picks a random enabled plane each time.
  • crate - random picks a weighted crate each drop, or set a specific crate id.
  • zone - random picks a weighted enabled zone each drop, or set a specific zone id.

In-World Tag

shared/config.lua
1Config.DUI = {
2    enabled = true,
3    maxActive = 6,
4    distance = 30.0,
5    sealDistance = nil,
6    offsetZ = 0.7,
7    scale = 1.0,
8}
  • enabled: show the floating tag above each crate and vehicle drop.
  • maxActive: how many tags render at once. The nearest drops win when more are active.
  • distance: render distance in meters, fading near the edge.
  • sealDistance: optional larger render distance while a crate is still sealed, so the unlock countdown is readable from farther. nil uses distance.
  • offsetZ: height of the tag above the crate origin.
  • scale: tag size multiplier.

Blips

shared/config.lua
1Config.Blips = {
2    plane = { enabled = true, sprite = 424, color = 5, scale = 0.9, label = 'Airdrop Plane' },
3    crate = { enabled = true, sprite = 478, color = 5, scale = 0.85, label = 'Airdrop' },
4    zoneRadius = { enabled = true, radius = 120.0, alpha = 70, color = 5 },
5}
  • plane: blip for the inbound aircraft while it flies in.
  • crate: blip on the landed crate or vehicle.
  • zoneRadius: search-area circle shown while a drop is inbound. radius in meters, alpha is its opacity.

Loot Capture

shared/config.lua
1Config.Capture = {
2    holdTime = 1500,
3}
  • holdTime: milliseconds a player must hold to capture one loot slot.

Limits

shared/config.lua
1Config.Limits = {
2    maxConcurrentDrops = 3,
3    locateAttempts = 25,
4    minDistanceFromPlayers = 8.0,
5}
  • maxConcurrentDrops: server-wide cap on active airdrops at once.
  • locateAttempts: candidate points tried before giving up on a zone.
  • minDistanceFromPlayers: a drop point must be at least this far from any player.

Vehicle Claim

shared/config.lua
1Config.VehicleClaim = {
2    register = true,
3    garage = 'pillboxgarage',
4    claimFuel = 100,
5}
  • register - true registers the claimed vehicle as an owned vehicle. false only hands over keys to the spawned vehicle.
  • garage: home garage stored on the owned vehicle. Customise the registration in open/server.lua, OnVehicleClaimed.
  • claimFuel: fuel level restored once claimed. The vehicle stays at 0 until then.

History

shared/config.lua
1Config.HistoryRetentionDays = 30
  • HistoryRetentionDays: days to keep drop history before it is pruned. 0 keeps it forever.

Notifications

shared/config.lua
1Config.Notifications = {
2    onInbound = true,
3    onLanded = true,
4}
  • onInbound: toast when an airdrop is inbound.
  • onLanded: toast when an airdrop has landed.

Skills

shared/config.lua
1Config.Skills = {
2    enabled   = false,
3    resource  = 'ml_skills',
4    category  = 'personal',
5    xp        = 25,
6    vehicleXp = 50,
7}
  • enabled: award XP through ml_skills when a drop is looted or claimed.
  • resource: skills resource name, in case you run a fork.
  • category: default category credited when a crate sets no rewards of its own. It must exist in your ml_skills setup.
  • xp: default container XP budget when a crate sets no rewards. The budget is split across the loot slots, so every player earns for the slots they take.
  • vehicleXp: default XP budget for the player who claims a vehicle drop.

A crate can override this with its own rewards, in one or more categories at once, set per crate in the admin panel.

Minigames

shared/config.lua
1Config.AirdropMiniGames = Config.AirdropMiniGames or {}

The minigame registry is filled by the adapter files in open/minigames. Add your own there and it becomes selectable as a crate open method.

Server Config

server/config_server.lua
1Config.DiscordWebhook = {
2    Default        = 'INSERT_WEBHOOK_LINK_HERE',
3    Spawn          = 'INSERT_WEBHOOK_LINK_HERE',
4    Loot           = 'INSERT_WEBHOOK_LINK_HERE',
5    VehicleClaimed = 'INSERT_WEBHOOK_LINK_HERE',
6    Despawn        = 'INSERT_WEBHOOK_LINK_HERE',
7    AdminTrigger   = 'INSERT_WEBHOOK_LINK_HERE',
8    AdminSave      = 'INSERT_WEBHOOK_LINK_HERE',
9    AdminDespawn   = 'INSERT_WEBHOOK_LINK_HERE',
10    AdminTeleport  = 'INSERT_WEBHOOK_LINK_HERE',
11}
12Config.LogProvider = 'discord'
13Config.AdminExportResources = {}
  • DiscordWebhook: one webhook per action, so each kind of event can go to its own channel.
  • LogProvider: where logs are sent through ml_bridge. One of discord, fivemanage, ox_lib, both, all.
  • AdminExportResources: resource names allowed to call the TriggerAirdrop export. Empty means only ml_airdrop itself can call it.
Disable A Log

Leave an action on INSERT_WEBHOOK_LINK_HERE or empty to disable it. Empty actions fall back to Default.