Inicio › Documentación › Personalización · origen_boosting
Todos los ficheros de la carpeta custom/ son de código abierto (escrow-ignore) y son la capa de integración entre origen_boosting y los recursos concretos de tu servidor.
custom/
├── client/
│ ├── framework.lua
│ ├── functions.lua
│ ├── inventory.lua
│ └── notify.lua
└── server/
├── framework.lua
├── functions.lua
├── inventory.lua
└── vinscratch.luaGestiona cómo el script lee los datos del jugador en el cliente, según el framework activo.
Framework._GetPlayerData() → tableDevuelve el objeto completo de datos del jugador del framework activo.
Framework._GetPlayerData = function()
if Config.Framework == 'qb-core' or Config.Framework == 'qbx_core' then
return Framework.Functions.GetPlayerData()
elseif Config.Framework == 'esx' then
return Framework.GetPlayerData()
end
endFramework.GetIdentifier() → stringDevuelve el identificador único del jugador (citizenid en QBCore/QBX, identifier en ESX).
Framework.GetIdentifier = function()
if Config.Framework == 'qb-core' or Config.Framework == 'qbx_core' then
return Framework.Functions.GetPlayerData().citizenid
elseif Config.Framework == 'esx' then
return Framework.GetPlayerData().identifier
end
endContiene hooks de integración con el juego que se llaman durante las misiones activas.
Custom.GiveKeys(plate)Se llama cuando el jugador roba un vehículo con éxito. Implementa aquí la integración con tu sistema de llaves.
| Parámetro | Tipo | Descripción |
|---|---|---|
plate |
string |
Matrícula del vehículo robado |
Custom.GiveKeys = function(plate)
-- Example using qb-vehiclekeys
exports['qb-vehiclekeys']:GiveKeys(plate)
endCustom.Minigame() → booleanSe llama cuando el jugador debe completar el minijuego de hackeo. Debe devolver true si lo supera o false si falla.
Por defecto usa origen_hacking. Sustitúyelo por el recurso de minijuego que prefieras.
Custom.Minigame = function()
local status = exports['origen_hacking']:createGame("alphabet", 30)
return status
endCustom.SendDispatch(data)Se llama cuando un evento de la misión debe lanzar un aviso de dispatch a la policía.
| Parámetro | Tipo | Descripción |
|---|---|---|
data.coords |
vector3 |
Ubicación del evento |
data.vehicle |
number |
Entity handle del vehículo |
Custom.SendDispatch = function(data)
local plate = GetVehicleNumberPlateText(data.vehicle)
exports['ps-dispatch']:CustomAlert({
coords = data.coords,
message = 'Vehicle being stolen - ' .. plate,
dispatchCode = '10-37',
job = { 'police' },
})
endCustom.VehicleDestroy(veh)Se llama cuando el servidor indica que el vehículo de la misión debe destruirse. Por defecto, añade un aviso de 20 segundos y después provoca una explosión.
| Parámetro | Tipo | Descripción |
|---|---|---|
veh |
number |
Entity handle del vehículo que se va a destruir |
Custom.VehicleDestroy = function(veh)
Internal.Notify(locale('in_game.notifications.vehicle_explosion', 20))
SetTimeout(20000, function()
if DoesEntityExist(veh) then
AddExplosion(GetEntityCoords(veh), 0, 100.0, true, false, true)
end
end)
endCustom.IsOnDutyControla si se evalúa el estado de servicio antes de permitir que un jugador inicie una misión.
Pon false (por defecto) para desactivar la comprobación, o asigna una función que devuelva boolean.
-- Default: no duty check
Custom.IsOnDuty = false
-- Example: integrate with origen_police
Custom.IsOnDuty = function()
return exports['origen_police']:IsOnDuty()
endGestiona todas las notificaciones del cliente, los avisos de texto en la interfaz y los indicadores de progreso.
Custom.Notify(text, type, length)Muestra una notificación al jugador. Se llama cuando Config.CustomNotify es true o cuando se usa un framework personalizado.
| Parámetro | Tipo | Descripción |
|---|---|---|
text |
string |
Mensaje de la notificación |
type |
string |
Tipo de notificación: 'success', 'error', 'info', 'warning' |
length |
number |
Duración en milisegundos |
Custom.Notify = function(text, type, length)
lib.notify({
description = text,
type = type,
duration = length,
})
endCustom.DrawText(key, text)Muestra en pantalla una ayuda contextual de texto.
| Parámetro | Tipo | Descripción |
|---|---|---|
key |
string |
Etiqueta de la tecla que se muestra al jugador |
text |
string |
Texto descriptivo |
Custom.DrawText = function(key, text)
lib.showTextUI('[' .. key .. '] - ' .. text)
endCustom.HideText()Oculta la ayuda de texto.
Custom.HideText = function()
lib.hideTextUI()
endCustom.Progress(duration, text) → booleanMuestra un círculo de progreso. Devuelve true cuando se completa.
| Parámetro | Tipo | Descripción |
|---|---|---|
duration |
number |
Duración en milisegundos |
text |
string |
Etiqueta que se muestra debajo del círculo de progreso |
Custom.Progress = function(duration, text)
return lib.progressCircle({
canCancel = false,
disable = { car = true },
duration = duration,
label = text,
position = 'bottom',
useWhileDead = false,
})
endGestiona todas las operaciones del framework en el servidor, como la búsqueda de jugadores, la gestión del dinero y las consultas de jobs.
Framework.GetIdentifier(source) → string | falseDevuelve el identificador único de un jugador a partir de su ID de servidor.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
Framework.HasPermission(source, group) → booleanComprueba si un jugador pertenece a un grupo de administración concreto.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
group |
string |
Nombre del grupo que se comprueba |
Framework.GetPlayerData(source) → tableDevuelve el objeto de jugador sin procesar del framework activo.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
Framework.GetMoney(source, account) → numberDevuelve el saldo de una cuenta de dinero del jugador indicado.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
account |
string |
Nombre de la cuenta (p. ej. 'bank', 'cash') |
Framework.RemoveMoney(source, account, amount) → booleanResta dinero de la cuenta de un jugador. Devuelve true si se realiza con éxito.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
account |
string |
Nombre de la cuenta |
amount |
number |
Cantidad que se resta |
Framework.AddMoney(source, account, amount) → booleanAñade dinero a la cuenta de un jugador.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
account |
string |
Nombre de la cuenta |
amount |
number |
Cantidad que se añade |
Framework.AddOfflineMoney(identifier, account, amount)Añade dinero a la cuenta de un jugador desconectado usando su identificador.
| Parámetro | Tipo | Descripción |
|---|---|---|
identifier |
string |
Identificador del jugador (citizenid o license) |
account |
string |
Nombre de la cuenta |
amount |
number |
Cantidad que se añade |
Framework.GetPlayerByIdentifier(identifier) → table | nilBusca a un jugador conectado por su identificador único.
| Parámetro | Tipo | Descripción |
|---|---|---|
identifier |
string |
Identificador del jugador (citizenid o license) |
Framework.GetPlayersInJob(jobName) → numberDevuelve el número de jugadores conectados que tienen actualmente el job indicado.
| Parámetro | Tipo | Descripción |
|---|---|---|
jobName |
string |
Nombre del job que se cuenta |
Custom.PlateGeneratorSustitución opcional de la lógica integrada de generación de matrículas. Asígnale una función que devuelva una cadena de matrícula, o déjalo en false para usar el generador por defecto configurado mediante Config.PlatePattern.
-- Default: use built-in generator
Custom.PlateGenerator = false
-- Custom example
Custom.PlateGenerator = function()
return 'CUSTOM' .. math.random(10, 99)
endCustom.AddItem(source, name, amount, slot, metadata) → booleanSe llama cuando el script necesita dar un objeto a un jugador. Impleméntalo cuando tu sistema de inventario no sea compatible de forma nativa o cuando necesites lógica personalizada.
Devuelve true si el objeto se añadió correctamente y false en caso contrario.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
name |
string |
Nombre del objeto |
amount |
number |
Cantidad |
slot |
number | nil |
Ranura de inventario de destino (opcional) |
metadata |
table | nil |
Metadatos del objeto (opcional) |
Custom.AddItem = function(source, name, amount, slot, metadata)
exports['ox_inventory']:AddItem(source, name, amount, metadata)
return true
endGestiona la lógica para guardar en la base de datos un vehículo con VIN rascado cuando el jugador completa la interacción de rascado del VIN.
Este callback está registrado como origen_boosting:sv:saveVinVehicle y se dispara cuando el cliente solicita guardar el vehículo tras completar el paso de la misión de rascar el VIN.
Adapta aquí las consultas SQL si la estructura de tu tabla de vehículos difiere del esquema por defecto de QBCore o ESX.
lib.callback.register('origen_boosting:sv:saveVinVehicle', function(source, props, model)
local table = (Config.Framework == 'qb-core' or Config.Framework == 'qbx_core')
and 'player_vehicles'
or 'owned_vehicles'
local identifier = Framework.GetIdentifier(source)
-- QBCore / QBX
if Config.Framework == 'qb-core' or Config.Framework == 'qbx_core' then
MySQL.Async.execute(
'INSERT INTO ' .. table .. ' (license, citizenid, vehicle, hash, mods, plate, vin) VALUES (@license, @citizenid, @vehicle, @hash, @mods, @plate, @vin)',
{
license = GetPlayerIdentifierByType(source, 'license'),
citizenid = identifier,
vehicle = model,
hash = GetHashKey(model),
mods = json.encode(props),
plate = props.plate,
vin = 1,
}
)
end
end)