Configuration
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 itfalsein production.locale: language code for translations, e.g.en. See thelocales/folder for the codes that ship.UITheme: visual theme for the loot panel, admin panel and in-world tag. One ofdefault,wasteland,cyberpunk,noir,fantasy,survival.InteractionMethod: how a landed crate is opened.textuishows an[E]prompt,targetuses 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. Leavenilto 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 betweenminandmax.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.randompicks a random enabled plane each time.crate-randompicks a weighted crate each drop, or set a specific crate id.zone-randompicks 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.nilusesdistance.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.radiusin meters,alphais 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-trueregisters the claimed vehicle as an owned vehicle.falseonly hands over keys to the spawned vehicle.garage: home garage stored on the owned vehicle. Customise the registration inopen/server.lua,OnVehicleClaimed.claimFuel: fuel level restored once claimed. The vehicle stays at 0 until then.
History
shared/config.lua
1Config.HistoryRetentionDays = 30HistoryRetentionDays: days to keep drop history before it is pruned.0keeps 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 ofdiscord,fivemanage,ox_lib,both,all.AdminExportResources: resource names allowed to call theTriggerAirdropexport. 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.