Referencia completa de configuración
Archivos editables, valores de fábrica y esquema SQL del paquete
Consulta los valores de fábrica antes de comparar tu configuración. Modifica tu copia instalada y conserva los archivos originales como respaldo. Los ejemplos de identificadores y webhooks deben sustituirse en el servidor.
configs/config.lua
Config = {}
Config.Debug = false
Config.Restricted = true
Config.Framework = 'ESX' -- ESX | QB | QBX | CUSTOM
Config.Target = 'OX' -- OX | QB | NONE
Config.Locale = "es" -- es | en
Config.Inventory = "DEFAULT" -- DEFAULT | QS
Config.Notify = {
Broadcast = true,
MessageKey = "airdrop_incoming",
Sound = true,
}
-- NOTA DE SEGURIDAD:
-- Config.Webhook y Config.AdminAccess viven SOLO en el servidor (server/sv_config.lua).
-- Este archivo (config.lua) se carga en cliente y servidor (shared), asi que nunca
-- debe contener secretos: ni URLs de webhook, ni identificadores de admin.
Config.Blips = {
Drop = {
Label = "Airdrop",
Sprite = 550,
Color = 1,
Scale = 0.7,
RadiusColor = 1,
RadiusAlpha = 120,
RadiusSize = 100.0,
},
Box = {
Enabled = true,
Label = "Military Crate",
Sprite = 478,
Color = 0,
Scale = 0.7,
},
Plane = {
Enabled = true,
Sprite = 307,
}
}
Config.Plane = {
Model = "titan",
Pilot = "s_m_m_pilot_02",
SpawnDistance = 600.0,
Height = 500.0,
Speed = 160.0,
DropDistance = 900.0,
DeleteDistance = 1500.0,
}
Config.Drop = {
Model = 'prop_drop_crate_01_set2',
Parachute = 'p_cargo_chute_s',
SpawnHeight = 120.0,
FallSpeed = -15.0,
OffsetRadius = 60,
TargetDistance = 2.5,
PickupDistance = 15.0,
MaxRewardEntries = 20,
MaxRewardAmount = 1000,
DespawnSeconds = 600, -- 10 minutos: tiempo max que el crate espera en el suelo antes de desaparecer solo
Particle = {
Enabled = true,
Asset = "core",
Effect = "exp_grd_flare",
Scale = 1.2,
}
}
Config.Tablet = {
Command = 'airdroptablet',
Keybind = 'F11',
Label = 'Gobernacion',
DisableControls = true,
UseAnimation = true,
}
Config.DropDefaults = {
Label = "EN Priority Supply",
DropType = "military",
LockSeconds = 0, -- 0 = sin bloqueo, el crate se puede recoger apenas aterriza. Ajustable por drop desde la tablet.
RadiusSize = 120.0,
SmokeEnabled = true,
PlaneEnabled = true,
WebhookEnabled = true,
AnnounceEnabled = true,
}
Config.MapBounds = {
MinX = -4000.0,
MaxX = 4500.0,
MinY = -4000.0,
MaxY = 8000.0,
}
Config.Performance = {
PlaneLoopTick = 1000,
-- cada cuanto se reintenta resolver la entidad networked del crate en
-- clientes que aun estan lejos (el streaming la trae recien cuando el
-- jugador se acerca); no tiene limite de intentos, solo de tiempo entre
-- reintentos, asi cualquiera puede recibir el target sin importar
-- cuanto tarde en llegar al punto del drop
NetResolveDelay = 250,
}
Config.Test = {
SkipPlane = false,
}server/sv_config.lua
-- ============================================================
-- CONFIG SERVER-ONLY (NO se carga en el cliente)
-- ============================================================
-- Todo lo sensible va aqui para que no aparezca en un dump del
-- lado cliente: URL de webhook e identificadores de administrador.
-- Este archivo se declara unicamente en server_scripts del fxmanifest.
-- ============================================================
Config = Config or {}
-- Auditoria por Discord (opcional). La URL NUNCA debe estar en un archivo shared.
Config.Webhook = {
Enabled = false,
URL = "", -- https://discord.com/api/webhooks/...
Username = "EN-AirDrops",
Color = 13644087,
LogCreate = true,
LogPickup = true,
}
-- Control de acceso a la tablet. Se valida siempre server-side (isAllowed).
Config.AdminAccess = {
Mode = "GROUP", -- GROUP | ACE | LIST | ALL
ESXGroups = {
"god"
},
QBPermissions = {
"admin",
"god"
},
AcePermission = "en.airdrops",
AllowedIdentifiers = {
-- Reemplaza por los identificadores reales de tus admins:
"discord:000000000000000000",
"license:xxxxxxxxxxxx"
}
}configs/items.lua
Items = {}
Items = {
['airdrop_1'] = { -- Drop id (make sure they are unquie)
Item = 'airdrop_1', -- Item Name used by your inventory
Reward = { -- Rewards you get from the drop
"bandage",
"weapon_carbinerifle",
}
},
['airdrop_2'] = { -- Drop id (make sure they are unquie)
Item = 'vipflare', -- Item Name used by your inventory
Reward = { -- Rewards you get from the drop
"weapon_rpg",
"weapon_carbinerifle",
}
}
-- ['example'] = { -- Drop id (make sure they are unquie)
-- Item = 'example', -- Item Name used by your inventory
-- Reward = { -- Rewards you get from the drop
-- "example",
-- "example",
-- }
-- }
}configs/global.lua
Global = {}
Global.Settings = {
Enabled = false,
Time = 30, -- How often the global event will happen (in minutes)
Positions = {
vector3(1294.24, 1438.71, 99.82),
vector3(1528.0, 1722.59, 109.95)
},
Rewards = {
[1] = { -- if you leave only 1 reward it will aways give that reward if you add more it will chose at random ( you can add as much as you want)
'weapon_pistol',
'water'
},
[2] = {
'bandage',
'weapon_heavypistol'
}
-- Random3 = {
-- 'weapon_pistol',
-- 'weapon_heavypistol'
-- }
-- Random4 = {
-- 'weapon_pistol',
-- 'weapon_heavypistol'
-- }
-- Random5 = {
-- 'weapon_pistol',
-- 'weapon_heavypistol'
-- }
}
}install_en_airdrop_history.sql
CREATE TABLE IF NOT EXISTS `en_airdrop_history` (
`id` INT NOT NULL AUTO_INCREMENT,
`admin_name` VARCHAR(64) NOT NULL,
`admin_identifier` VARCHAR(128) NOT NULL,
`x` DOUBLE NOT NULL,
`y` DOUBLE NOT NULL,
`z` DOUBLE NOT NULL,
`rewards_json` LONGTEXT NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;