Inicio › Documentación › Personalización · origen_boosting

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.

text
custom/
├── client/
│   ├── framework.lua
│   ├── functions.lua
│   ├── inventory.lua
│   └── notify.lua
└── server/
    ├── framework.lua
    ├── functions.lua
    ├── inventory.lua
    └── vinscratch.lua

custom/client/framework.lua

Gestiona cómo el script lee los datos del jugador en el cliente, según el framework activo.

Framework._GetPlayerData() → table

Devuelve el objeto completo de datos del jugador del framework activo.

lua
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
end

Framework.GetIdentifier() → string

Devuelve el identificador único del jugador (citizenid en QBCore/QBX, identifier en ESX).

lua
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
end

custom/client/functions.lua

Contiene 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
lua
Custom.GiveKeys = function(plate)
    -- Example using qb-vehiclekeys
    exports['qb-vehiclekeys']:GiveKeys(plate)
end

Custom.Minigame() → boolean

Se 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.

lua
Custom.Minigame = function()
    local status = exports['origen_hacking']:createGame("alphabet", 30)
    return status
end

Custom.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
lua
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' },
    })
end

Custom.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
lua
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)
end

Custom.IsOnDuty

Controla 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.

lua
-- Default: no duty check
Custom.IsOnDuty = false
 
-- Example: integrate with origen_police
Custom.IsOnDuty = function()
    return exports['origen_police']:IsOnDuty()
end

custom/client/notify.lua

Gestiona 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
lua
Custom.Notify = function(text, type, length)
    lib.notify({
        description = text,
        type = type,
        duration = length,
    })
end

Custom.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
lua
Custom.DrawText = function(key, text)
    lib.showTextUI('[' .. key .. '] - ' .. text)
end

Custom.HideText()

Oculta la ayuda de texto.

lua
Custom.HideText = function()
    lib.hideTextUI()
end

Custom.Progress(duration, text) → boolean

Muestra 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
lua
Custom.Progress = function(duration, text)
    return lib.progressCircle({
        canCancel = false,
        disable = { car = true },
        duration = duration,
        label = text,
        position = 'bottom',
        useWhileDead = false,
    })
end

custom/server/framework.lua

Gestiona 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 | false

Devuelve 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) → boolean

Comprueba 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) → table

Devuelve 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) → number

Devuelve 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) → boolean

Resta 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) → boolean

Añ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 | nil

Busca a un jugador conectado por su identificador único.

Parámetro Tipo Descripción
identifier string Identificador del jugador (citizenid o license)

Framework.GetPlayersInJob(jobName) → number

Devuelve 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/server/functions.lua

Custom.PlateGenerator

Sustitució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.

lua
-- Default: use built-in generator
Custom.PlateGenerator = false
 
-- Custom example
Custom.PlateGenerator = function()
    return 'CUSTOM' .. math.random(10, 99)
end

custom/server/inventory.lua

Custom.AddItem(source, name, amount, slot, metadata) → boolean

Se 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)
lua
Custom.AddItem = function(source, name, amount, slot, metadata)
    exports['ox_inventory']:AddItem(source, name, amount, metadata)
    return true
end

custom/server/vinscratch.lua

Gestiona 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.

lua
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)