Scripts
Pyra Airdrops
Configuration

Configuration

All configuration lives in configuration/index.lua. This file is not escrow-locked — you can edit it freely.

Debug & Theme

Config.Debug = false
Config.Theme = '#8290F8'
KeyTypeDefaultWhat it does
Config.DebugbooleanfalseEnables verbose console output. Disable in production.
Config.Themestring'#8290F8'Hex color used for Discord webhook embeds.

Auto Airdrop

Config.AutoAirdrop = {
    Enabled        = false,
    Interval       = 900,
    PrizePool      = 'Standard',
    RandomLocation = true,
    Radius         = 80.0,
}
KeyTypeDefaultWhat it does
EnabledbooleanfalseAutomatically spawns airdrops on a timer when true.
Intervalnumber900Seconds between automatic airdrops. 900 = 15 minutes.
PrizePoolstring'Standard'Name of the prize pool used for automatic drops. Must match a key in Config.PrizePools.
RandomLocationbooleantrueIf true, picks a random location from Config.Locations each drop. If false, cycles through them in order.
Radiusnumber80.0Radius (metres) of the landing zone circle shown on the map.

Expiry

Config.Expiry = 1800
KeyTypeDefaultWhat it does
Config.Expirynumber1800Seconds before an uncollected airdrop expires and is removed. 1800 = 30 minutes.

Crate

Model

Config.Crate = {
    Type = 'static',
 
    Model = {
        Crate     = 'cs_airdrop_crate_l',
        Parachute = 'cs_airdrop_parachute_l',
    },
 
    FallbackModel = {
        Crate     = 'prop_box_wood02a',
        Parachute = 'p_parachute1_mp_dec',
    },
    ...
}
KeyTypeDefaultWhat it does
Config.Crate.Typestring'static''static' always uses Config.Crate.Model. 'dynamic' picks a model based on the number of items in the drop (see Dynamic below).
Config.Crate.Model.Cratestring'cs_airdrop_crate_l'Custom crate model (streamed with the resource).
Config.Crate.Model.Parachutestring'cs_airdrop_parachute_l'Custom parachute model (streamed with the resource).
Config.Crate.FallbackModel.Cratestring'prop_box_wood02a'Vanilla GTA model used if the custom model fails to load.
Config.Crate.FallbackModel.Parachutestring'p_parachute1_mp_dec'Vanilla GTA model used if the custom parachute fails to load.

Dynamic Sizing

Config.Crate.Dynamic = {
    { minItems = 1, crate = 'cs_airdrop_crate_s', parachute = 'cs_airdrop_parachute_s' },
    { minItems = 4, crate = 'cs_airdrop_crate_m', parachute = 'cs_airdrop_parachute_m' },
    { minItems = 8, crate = 'cs_airdrop_crate_l', parachute = 'cs_airdrop_parachute_l' },
}

Only applies when Config.Crate.Type = 'dynamic'. The crate with the highest minItems value that is still ≤ the actual item count is chosen.

Fall Physics

Config.Crate.SpawnHeight = 420.0
 
Config.Crate.Fall = {
    Duration       = 120000,
    VisualDistance = 900.0,
    EasePower      = 1.85,
    FinalHover     = 2.5,
    SpeedTop       = 2.5,
    SpeedLand      = 1.0,
    EaseWindow     = 25.0,
    SnapDist       = 0.25,
}
KeyTypeDefaultWhat it does
SpawnHeightnumber420.0Altitude (metres above ground) where the crate spawns.
Fall.Durationnumber120000Time in milliseconds for the crate to fall from spawn height to ground. 120000 = 2 minutes.
Fall.VisualDistancenumber900.0Distance in metres at which the crate becomes visible to players.
Fall.EasePowernumber1.85Controls the easing curve of the descent. Higher = slower start, faster finish.
Fall.FinalHovernumber2.5Height above ground at which the crate begins its final slow hover before landing.
Fall.SpeedTopnumber2.5Maximum fall speed (m/s) at the fastest point of descent.
Fall.SpeedLandnumber1.0Fall speed (m/s) during the final hover phase.
Fall.EaseWindownumber25.0Height range (metres) over which the easing transition applies.
Fall.SnapDistnumber0.25Distance from ground at which the crate snaps to its final landing position.

Open

Interaction

Config.Open = {
    Distance  = 3.5,
    Key       = 'E',
    CancelKey = 'X',
    Time      = 5,
    ...
}
KeyTypeDefaultWhat it does
Distancenumber3.5How close (metres) a player must be to interact with the crate.
Keystring'E'Key to start opening the crate (key-press interaction mode).
CancelKeystring'X'Key to cancel the opening animation.
Timenumber5Seconds the opening animation takes.

Required Item

Config.Open.Required = {
    Enabled = false,
    Item    = 'crowbar',
}
KeyTypeDefaultWhat it does
EnabledbooleanfalseIf true, players must have the specified item in their inventory to open the crate. The item is consumed on open.
Itemstring'crowbar'The inventory item name required to open the crate.

Animation

Config.Open.Animation = {
    dict = 'missheist_jewel',
    anim = 'smash_case',
    bone = 57005,
    prop = 'w_me_crowbar',
}

The animation played while the crate is being opened. Uses standard FiveM animation dict/name format.

Interaction Mode

Config.Interaction = {
    mode        = 'target',
    targetIcon  = 'fa-solid fa-parachute-box',
    targetLabel = 'Open Airdrop',
}
KeyTypeDefaultWhat it does
modestring'target''target' uses ox_target for interaction. 'key' uses the key defined in Config.Open.Key.
targetIconstring'fa-solid fa-parachute-box'Font Awesome icon shown in the ox_target prompt (only used when mode = 'target').
targetLabelstring'Open Airdrop'Label shown in the ox_target prompt.

Admin Permissions

Config.Admin = {
    Mode            = 'both',
    AcePermission   = 'pyra.airdrops',
    FrameworkGroups = { 'admin', 'superadmin', 'god' },
}

Same structure as Pyra Reports. See Reports — Configuration: Admin Permissions.

KeyTypeDefaultWhat it does
Config.Admin.Modestring'both''ace', 'framework', or 'both'.
Config.Admin.AcePermissionstring'pyra.airdrops'ACE node checked for admin access.
Config.Admin.FrameworkGroupstable{ 'admin', 'superadmin', 'god' }Framework groups that grant admin access.

Zone

Outside Damage Protection

Config.Zone.OutsideDamageProtection = {
    Enabled                   = true,
    ClientRepair              = true,
    DisableOutsideFiring      = true,
    DisablePlayerFiringNative = true,
    Statuses = {
        dropping = true,
        landed   = true,
        opening  = true,
    },
}

Prevents players outside the drop zone from shooting into it. Statuses controls which crate states are protected.

KeyTypeDefaultWhat it does
EnabledbooleantrueMaster toggle for outside damage protection.
ClientRepairbooleantrueRepairs vehicle damage caused by shots from outside the zone.
DisableOutsideFiringbooleantruePrevents players outside the zone from firing toward it.
DisablePlayerFiringNativebooleantrueDisables the native firing flag for players outside the zone.
Statuses.droppingbooleantrueProtection active while the crate is falling.
Statuses.landedbooleantrueProtection active after the crate has landed.
Statuses.openingbooleantrueProtection active while a player is opening the crate.

Zone Marker

Config.Zone.Marker = {
    Enabled = true,
    Type    = 28,
    Color   = { r = 130, g = 144, b = 248, a = 120 },
    Height  = 50.0,
    Scale   = 1.0,
}
KeyTypeDefaultWhat it does
EnabledbooleantrueShows a 3D marker column above the landing zone.
Typenumber28FiveM marker type ID. 28 is a vertical cylinder beam.
Colortable{ r=130, g=144, b=248, a=120 }RGBA color of the marker.
Heightnumber50.0Height of the marker column in metres.
Scalenumber1.0Width multiplier of the marker.
Config.Zone.DefaultRadius = 50.0
KeyTypeDefaultWhat it does
Config.Zone.DefaultRadiusnumber50.0Radius of the landing zone in metres. Used for damage protection and marker sizing.

Blip

Config.Blip = {
    Enabled     = true,
    Sprite      = 119,
    Color       = 1,
    Scale       = 1.0,
    Label       = 'Airdrop',
    ShowOnSpawn = true,
    ShowRadius  = true,
    RadiusColor = { r = 130, g = 144, b = 248, a = 80 },
}
KeyTypeDefaultWhat it does
EnabledbooleantrueShows a map blip for each active airdrop.
Spritenumber119GTA blip sprite ID.
Colornumber1GTA blip color index.
Scalenumber1.0Size of the blip on the map.
Labelstring'Airdrop'Text shown when hovering over the blip.
ShowOnSpawnbooleantrueBlip appears when the crate spawns (before landing).
ShowRadiusbooleantrueShows a translucent radius circle around the drop zone on the map.
RadiusColortable{ r=130, g=144, b=248, a=80 }RGBA fill color for the radius circle.

Notifications

Config.Notifications = {
    Spawn = {
        Enabled     = true,
        Message     = 'Airdrop deployed',
        Description = 'A crate is parachuting down — check your map for the drop zone.',
        Type        = 'info',
        Duration    = 5000,
    },
    Expire = {
        Enabled     = true,
        Message     = 'Airdrop expired',
        Description = 'Nobody collected the crate in time. Better luck next drop.',
        Type        = 'warning',
        Duration    = 4000,
    },
    Collected = {
        Enabled     = true,
        Message     = 'Airdrop collected',
        Description = 'Loot has been added to your inventory. Stay sharp out there.',
        Type        = 'success',
        Duration    = 5000,
    },
}

Each notification supports:

KeyTypeWhat it does
EnabledbooleanShow or hide this notification type.
MessagestringTitle line of the notification.
DescriptionstringBody text of the notification.
TypestringNotification style: 'info', 'warning', 'success', or 'error'.
DurationnumberHow long the notification stays on screen in milliseconds.

Items

The Config.Items table defines every possible item that can appear in any prize pool. Only items listed here can be added to prize pools.

Config.Items = {
    ['money'] = { label = 'Cash', min = 100, max = 25000 },
    -- ...
}
KeyTypeWhat it does
labelstringDisplay name shown in the admin panel and Discord webhook.
minnumberMinimum quantity given when this item is rolled.
maxnumberMaximum quantity given when this item is rolled.

The item key must match your inventory system's item name exactly (e.g. 'money', 'WEAPON_PISTOL').

Prize Pools

Config.PrizePools = {
    ['Standard'] = {
        { item = 'money',    label = 'Cash',       amount = 5000 },
        { item = 'firstaid', label = 'First Aid',  amount = 2    },
        { item = 'armour',   label = 'Body Armor', amount = 1    },
    },
    ['Heavy Weapons'] = { ... },
    ['Contraband']    = { ... },
}

Each prize pool is a named list of items. All items in the pool are given when the crate is opened — there is no random selection between pool entries.

KeyTypeWhat it does
itemstringMust match a key in Config.Items.
labelstringHuman-readable name shown in logs and the admin panel.
amountnumberFixed quantity given. A random amount between Config.Items[item].min and Config.Items[item].max is given if you omit amount in future versions.

The pool name (e.g. 'Standard') is what you enter in Config.AutoAirdrop.PrizePool and in the admin manager when spawning a manual drop.

Locations

Config.Locations = {
    ['Legion Square'] = { x = -267.0, y = -963.0 },
}

Named map coordinates used for automatic airdrops. Add as many as you like. Each entry needs only x and y — the crate always spawns at Config.Crate.SpawnHeight above ground regardless of z.

KeyTypeWhat it does
Key (string)stringName shown in the admin panel location picker.
xnumberWorld X coordinate of the drop zone centre.
ynumberWorld Y coordinate of the drop zone centre.

© 2026 Pyra Studios — FiveM Scripts