# Configuration > Configuration reference for ML Airdrop Category: AIRDROP · Source: https://miciomods.it/docs/ml-airdrop-configuration · Last updated: 2026-10-05 ## 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** ```lua Config.Debug = false Config.locale = 'en' Config.UITheme = { preset = 'default', colors = { primary = nil, accent = nil, background = nil, surface = nil, text = nil, }, } Config.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.preset`: theme for the loot panel, admin panel and in-world tag. Use `default`, `wasteland`, `cyberpunk`, `noir` or `fantasy`, or `nil` to inherit the global theme. The values in `UITheme.colors` accept CSS hex colors; `nil` inherits the corresponding global color. - `InteractionMethod`: how a landed crate is opened. `textui` shows an `[E]` prompt, `target` uses ox_target. ## Admin **shared/config.lua** ```lua Config.Admin = { AcePermission = nil, Command = 'airdrop', } ``` - `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** ```lua Config.AutoEvents = { enabled = true, mode = 'global', interval = { min = 30, max = 45 }, minPlayers = 2, announce = true, countdown = 30, } ``` - `enabled`: run automatic airdrops in the selected mode. Manual and flare drops remain available when this is false. - `mode`: `global` runs one timer using `Config.Defaults`; `zones` runs an independent timer for each enabled zone whose `auto.enabled` is true. Only the selected mode runs. - `interval`: the global timer interval in minutes, chosen between `min` and `max`. Equal values give a fixed interval. Use whole minutes from 1 to 1440, with `min` no greater than `max`. Zone mode uses each zone's own interval. - `minPlayers`: minimum number of online players required for automatic drops. When too few players are online, a due drop waits until the requirement is met. - `announce`: broadcast an incoming-drop notification to everyone. - `countdown`: seconds before the plane appears. In zone mode, the countdown falls within the interval and cannot exceed its duration; after a waiting condition clears, the countdown starts then. Global mode applies the countdown only when `announce` is true, after the interval expires. ## Zone schedules Select `Timers per zone` under `Settings` in the admin panel, or set the mode in the configuration: **shared/config.lua** ```lua Config.AutoEvents.mode = 'zones' ``` Assign automatic settings after the existing zone definitions. This example gives Sandy Shores a fixed 30-minute interval and Grapeseed a random interval of 60 to 90 minutes: **shared/data/zones.lua** ```lua Config.Zones.sandy.auto = { enabled = true, interval = { min = 30, max = 30 }, } Config.Zones.grapeseed.auto = { enabled = true, interval = { min = 60, max = 90 }, } ``` `auto.enabled`: include the zone in automatic scheduling. The zone itself must also be enabled. A zone without an `auto` table does not run its own timer. `auto.interval`: minutes between successful automatic launches in that zone. Use whole minutes from 1 to 1440; `min` must not exceed `max`. Equal values give a fixed interval. Set `crateTypes` and `planeTypes` on the zone to choose its crate and aircraft pools. The first interval starts when the zone timer is activated. Later intervals start when the previous automatic drop is created, as the aircraft goes inbound. They do not start at landing or after looting. If too few players are online, the shared drop limit is reached, or a drop is already active in that zone, the launch waits. Each zone keeps one pending launch; missed intervals do not build a queue of drops. In `Zones`, use `Automatic drops`, `Minimum gap` and `Maximum gap` to edit each timer. `Control` shows `Zone schedules`, the next launch or warning countdown, and any reason a launch is waiting. Saved admin settings override the configuration files. Saving unrelated settings preserves running zone timers; changing a zone interval restarts that timer. Disabling or deleting a zone cancels its pending warning. Resource restarts start fresh intervals and do not catch up on missed launches. ## Defaults **shared/config.lua** ```lua Config.Defaults = { plane = 'cargobob_titan', crate = 'random', zone = 'random', } ``` - `plane`: default aircraft for global automatic events and drops with no aircraft selected. `random` chooses an enabled aircraft. In zone mode, the zone's `planeTypes` takes priority. - `crate`: `random` chooses a weighted crate, or use a specific crate ID. In zone mode, automatic drops use the zone's `crateTypes`. - `zone`: `random` chooses a weighted enabled zone, or use a specific zone ID. Individual zone timers always launch in their own zone. ## In-World Tag **shared/config.lua** ```lua Config.DUI = { enabled = true, maxActive = 6, distance = 30.0, sealDistance = nil, offsetZ = 0.7, scale = 1.0, } ``` - `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** ```lua Config.Blips = { plane = { enabled = true, sprite = 424, color = 5, scale = 0.9, label = 'Airdrop Plane' }, crate = { enabled = true, sprite = 478, color = 5, scale = 0.85, label = 'Airdrop' }, zoneRadius = { enabled = true, radius = 120.0, alpha = 70, color = 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** ```lua Config.Capture = { holdTime = 1500, } ``` - `holdTime`: milliseconds a player must hold to capture one loot slot. ## Limits **shared/config.lua** ```lua Config.Limits = { maxConcurrentDrops = 3, locateAttempts = 25, minDistanceFromPlayers = 8.0, } ``` - `maxConcurrentDrops`: server-wide limit shared by automatic, manual, flare and export drops. Automatic warnings also reserve capacity before the drop starts. - `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** ```lua Config.VehicleClaim = { register = true, garage = 'pillboxgarage', claimFuel = 100, } ``` - `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** ```lua Config.HistoryRetentionDays = 30 ``` - `HistoryRetentionDays`: days to keep drop history before it is pruned. `0` keeps it forever. ## Notifications **shared/config.lua** ```lua Config.Notifications = { onInbound = true, onLanded = true, } ``` - `onInbound`: toast when an airdrop is inbound. - `onLanded`: toast when an airdrop has landed. ## Skills **shared/config.lua** ```lua Config.Skills = { enabled = false, resource = 'ml_skills', category = 'personal', xp = 25, vehicleXp = 50, } ``` - `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** ```lua Config.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** ```lua Config.DiscordWebhook = { Default = 'INSERT_WEBHOOK_LINK_HERE', Spawn = 'INSERT_WEBHOOK_LINK_HERE', Loot = 'INSERT_WEBHOOK_LINK_HERE', VehicleClaimed = 'INSERT_WEBHOOK_LINK_HERE', Despawn = 'INSERT_WEBHOOK_LINK_HERE', AdminTrigger = 'INSERT_WEBHOOK_LINK_HERE', AdminSave = 'INSERT_WEBHOOK_LINK_HERE', AdminDespawn = 'INSERT_WEBHOOK_LINK_HERE', AdminTeleport = 'INSERT_WEBHOOK_LINK_HERE', } Config.LogProvider = 'discord' Config.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. > **TIP:** Disable A Log > > Leave an action on `INSERT_WEBHOOK_LINK_HERE` or empty to disable it. Empty actions fall back to `Default`.