Início › Documentação › Personalização · origen_boosting

Personalização · origen_boosting

Todos os ficheiros da pasta custom/ são de código aberto (escrow-ignore) e constituem a camada de integração entre o origen_boosting e os recursos específicos do teu 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

Trata de como o script lê os dados do jogador no cliente, consoante a framework ativa.

Framework._GetPlayerData() → table

Devolve o objeto completo de dados do jogador da framework ativa.

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

Devolve o identificador único do jogador (citizenid em QBCore/QBX, identifier em 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

Contém hooks de integração com o jogo que são chamados durante as missões ativas.

Custom.GiveKeys(plate)

Chamada quando o jogador rouba um veículo com sucesso. Implementa aqui a integração com o teu sistema de chaves.

Parâmetro Tipo Descrição
plate string Matrícula do veículo roubado
lua
Custom.GiveKeys = function(plate)
    -- Example using qb-vehiclekeys
    exports['qb-vehiclekeys']:GiveKeys(plate)
end

Custom.Minigame() → boolean

Chamada quando o jogador tem de completar o minijogo de hacking. Tem de devolver true se for bem-sucedido ou false se falhar.

Por omissão, usa origen_hacking. Substitui-o pelo recurso de minijogo que preferires.

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

Custom.SendDispatch(data)

Chamada quando um evento da missão deve disparar um aviso de dispatch à polícia.

Parâmetro Tipo Descrição
data.coords vector3 Localização do evento
data.vehicle number Entity handle do veí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)

Chamada quando o servidor indica que o veículo da missão deve ser destruído. Por omissão, acrescenta um aviso de 20 segundos e depois provoca uma explosão.

Parâmetro Tipo Descrição
veh number Entity handle do veículo 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 se o estado de serviço é avaliado antes de permitir que um jogador inicie uma missão.

Define false (por omissão) para desativar a verificação, ou atribui uma função que devolva 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

Trata de todas as notificações do cliente, dos avisos de texto na interface e dos indicadores de progresso.

Custom.Notify(text, type, length)

Mostra uma notificação ao jogador. É chamada quando Config.CustomNotify é true ou quando se usa uma framework personalizada.

Parâmetro Tipo Descrição
text string Mensagem da notificação
type string Tipo de notificação: 'success', 'error', 'info', 'warning'
length number Duração em milissegundos
lua
Custom.Notify = function(text, type, length)
    lib.notify({
        description = text,
        type = type,
        duration = length,
    })
end

Custom.DrawText(key, text)

Mostra no ecrã uma dica de texto contextual.

Parâmetro Tipo Descrição
key string Etiqueta da tecla apresentada ao jogador
text string Texto descritivo
lua
Custom.DrawText = function(key, text)
    lib.showTextUI('[' .. key .. '] - ' .. text)
end

Custom.HideText()

Esconde a dica de texto.

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

Custom.Progress(duration, text) → boolean

Mostra um círculo de progresso. Devolve true quando termina.

Parâmetro Tipo Descrição
duration number Duração em milissegundos
text string Etiqueta apresentada por baixo do círculo de progresso
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

Trata de todas as operações da framework no servidor, como a procura de jogadores, a gestão do dinheiro e as consultas de jobs.

Framework.GetIdentifier(source) → string | false

Devolve o identificador único de um jogador a partir do seu ID de servidor.

Parâmetro Tipo Descrição
source number ID de servidor do jogador

Framework.HasPermission(source, group) → boolean

Verifica se um jogador pertence a um grupo de administração específico.

Parâmetro Tipo Descrição
source number ID de servidor do jogador
group string Nome do grupo a verificar

Framework.GetPlayerData(source) → table

Devolve o objeto de jogador em bruto da framework ativa.

Parâmetro Tipo Descrição
source number ID de servidor do jogador

Framework.GetMoney(source, account) → number

Devolve o saldo de uma conta de dinheiro do jogador indicado.

Parâmetro Tipo Descrição
source number ID de servidor do jogador
account string Nome da conta (p. ex. 'bank', 'cash')

Framework.RemoveMoney(source, account, amount) → boolean

Retira dinheiro da conta de um jogador. Devolve true se for bem-sucedido.

Parâmetro Tipo Descrição
source number ID de servidor do jogador
account string Nome da conta
amount number Quantia a retirar

Framework.AddMoney(source, account, amount) → boolean

Adiciona dinheiro à conta de um jogador.

Parâmetro Tipo Descrição
source number ID de servidor do jogador
account string Nome da conta
amount number Quantia a adicionar

Framework.AddOfflineMoney(identifier, account, amount)

Adiciona dinheiro à conta de um jogador offline através do seu identificador.

Parâmetro Tipo Descrição
identifier string Identificador do jogador (citizenid ou license)
account string Nome da conta
amount number Quantia a adicionar

Framework.GetPlayerByIdentifier(identifier) → table | nil

Procura um jogador online pelo seu identificador único.

Parâmetro Tipo Descrição
identifier string Identificador do jogador (citizenid ou license)

Framework.GetPlayersInJob(jobName) → number

Devolve o número de jogadores online que têm atualmente o job indicado.

Parâmetro Tipo Descrição
jobName string Nome do job a contar

custom/server/functions.lua

Custom.PlateGenerator

Substituição opcional da lógica integrada de geração de matrículas. Atribui-lhe uma função que devolva uma string de matrícula, ou deixa em false para usar o gerador por omissão configurado através de 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

Chamada quando o script precisa de dar um item a um jogador. Implementa-a quando o teu sistema de inventário não for suportado nativamente ou quando precisares de lógica personalizada.

Devolve true se o item foi adicionado com sucesso e false caso contrário.

Parâmetro Tipo Descrição
source number ID de servidor do jogador
name string Nome do item
amount number Quantidade
slot number | nil Ranhura de inventário de destino (opcional)
metadata table | nil Metadados do item (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

Trata da lógica para guardar na base de dados um veículo com VIN raspado quando o jogador conclui a interação de raspagem do VIN.

Este callback está registado como origen_boosting:sv:saveVinVehicle e é disparado quando o cliente pede para guardar o veículo depois de concluir o passo da missão de raspar o VIN.

Adapta aqui as consultas SQL se a estrutura da tua tabela de veículos for diferente do esquema por omissão do QBCore ou do 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)