Inicio › Documentación › Personalización · origen_admin
La carpeta custom/ te permite integrar cualquier sistema de framework, inventario, ambulancia, ropa, baneos o vehículos sin tocar el núcleo. Todos los ficheros son escrow_ignore, así que se conservan al actualizar.
custom/
├── client/
│ ├── actions.lua — revive, skin, tuning, fuel, vehicle actions
│ ├── inventory.lua — clear/view inventory
│ ├── notifications.lua — notifications
│ └── weather.lua — weather/time sync
├── server/
│ ├── actions.lua — revive, kill, ban system hooks, gang setter
│ ├── apartments.lua — fetch/add player apartments
│ ├── business.lua — fetch business list
│ ├── chat.lua — admin chat messages
│ ├── ck.lua — post-CK hook
│ ├── debug.lua — permission tester command (debug only)
│ ├── gangs.lua — fetch gang list, assign gang
│ ├── inventory.lua — view inventory server-side
│ ├── player.lua — read player metadata (health, hunger, thirst, armor)
│ ├── vehicles.lua — fetch/add/delete player vehicles
│ └── weather.lua — weather/time freeze via qb-weathersync
└── framework/
├── client/
│ ├── qb.lua — QBCore/QBX client bridge exports
│ └── esx.lua — ESX client bridge exports
└── server/
├── qb.lua — QBCore/QBX server bridge exports
└── esx.lua — ESX server bridge exportsSelfRevive()Revive al admin local. Delega en el Config.AmbulanceSystem configurado.
-- qb-ambulancejob → hospital:client:Revive
-- wasabi_ambulance → wasabi_ambulance:revive
-- default → /revive commandModifySkin()Abre el menú de ropa para el admin local. Delega en Config.ClothingSystem.
-- origen_clothing → origen_clothing:openClothingMenu
-- qb-clothing → qb-clothing:client:openMenu
-- illenium-appearance → illenium-appearance:client:openClothingShop
-- vms_clothestore → exports vms_clothestore:OpenWardrobe()ModifyVehicle()Abre el menú de tuning del vehículo actual. Delega en Config.TunningSystem.
-- qb-mechanicjob → exports qb-mechanicjob:PaintCategories()
-- vms_tunning → exports vms_tuning:openTuning()
-- esx_tunning → exports esx_tuning:OpenMenu()
-- okokTunning → TriggerServerEvent okokTuning:openFreeMenuSetMaxVehicleFuel(vehicle)Reposta el vehículo indicado al 100 %. Delega en Config.FuelSystem.
-- default → SetVehicleFuelLevel(vehicle, 100.0)
-- legacyfuel → exports LegacyFuel:SetFuel(vehicle, 100)FixVehicle(vehicle) / UnlockVehicle(vehicle) / BoostVehicle(vehicle)Acciones de vehículo integradas. BoostVehicle aplica los máximos de motor, frenos, tracción y manejo.
ClearInv(source)Vacía el inventario de un jugador ejecutando el comando adecuado para Config.Inventory.
Compatibles: origen_inventory, qs-inventory, codem-inventory, ox_inventory, qb-inventory.
SeeInv(source)Abre el inventario de un jugador. Recurre a origen_admin:server:open_otherinv si el inventario no tiene comando en el cliente.
Compatibles en el cliente: origen_inventory, qs-inventory, codem-inventory, ox_inventory. Alternativa en el servidor: qb-inventory (mediante OpenInventoryById).
ShowNotification(text)Muestra una notificación al admin local. Delega en Config.Framework.
function ShowNotification(text)
-- 'qbcore' → TriggerEvent("QBCore:Notify", text)
-- 'esx' → Framework.ShowNotification(text)
endGestiona la sincronización del clima y la hora. Detecta automáticamente qb-weathersync si está presente.
SetWeather(weather, isSynced)Establece el tipo de clima. Si isSynced = true y qb-weathersync está en ejecución, lo sincroniza con todos los jugadores.
SetWeatherTime(hour, minute)Fuerza el reloj del juego a una hora concreta.
SetWeatherSync(state) → activa/desactiva la sincronización de qb-weathersyncIsTimeFreezed() / IsWeatherFreezed() → booleanBanPlayerHandler(license, targetId, time, staffName, reason)Se llama cuando Config.CustomBanSystem = true. Implementa aquí tu lógica de baneo personalizada.
function BanPlayerHandler(license, targetId, time, staffName, reason)
-- implement custom ban
endUnbanPlayerHandler(license)Se llama al desbanear con Config.CustomBanSystem = true.
function UnbanPlayerHandler(license)
endIsbannedHandler(license) → false | { banTime, expireTime, reason, staff }Se llama cuando un jugador se conecta con Config.CustomBanSystem = true. Devuelve false si no está baneado, o una tabla con los detalles del baneo.
function IsbannedHandler(license)
return false
endOnCK(identifier)Hook que se ejecuta después de borrar a un jugador (CK). Añade aquí lógica de limpieza propia: consultas extra a la base de datos, eventos, etc.
function OnCK(identifier)
-- Example: delete player properties
-- MySQL.query.await("DELETE FROM player_properties WHERE citizenid = ?", { identifier })
endGetPlayerVehicles(citizenid) → table[]Obtiene de la base de datos los vehículos registrados de un jugador. Resuelve la consulta automáticamente según Config.GarageSystem y Config.Framework. Devuelve { label, subData (plate), garage } por cada vehículo.
AddPlayerVehicle(citizenid, model) no tiene implementación por defecto: tienes que escribir la consulta INSERT para la tabla de vehículos concreta de tu servidor.
GetPlayerApartments(citizenid) → table[]Obtiene las propiedades de un jugador. Se resuelve automáticamente según Config.HousingSystem.
AddPlayerApartment(citizenid, type) no tiene implementación por defecto: tienes que escribir la consulta INSERT para tu sistema de viviendas.
Sobrescribe estas funciones para leer los metadatos del jugador con la estructura de tu framework:
| Función | Devuelve | Lee por defecto de |
|---|---|---|
GetPlayerHealth(player) |
number |
PlayerData.metadata.health (por defecto 200) |
GetPlayerHunger(player) |
number |
PlayerData.metadata.hunger (por defecto 100) |
GetPlayerThirst(player) |
number |
PlayerData.metadata.thirst (por defecto 100) |
GetPlayerArmor(player) |
number |
PlayerData.metadata.armor (por defecto 0) |
SendChatMessage(src, header, color, message)Envía un mensaje de chat con formato a un jugador.
function SendChatMessage(src, header, color, message)
TriggerClientEvent('chatMessage', src, header, color, message)
end