Início › Documentação › 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.
custom/
├── client/
│ ├── framework.lua
│ ├── functions.lua
│ ├── inventory.lua
│ └── notify.lua
└── server/
├── framework.lua
├── functions.lua
├── inventory.lua
└── vinscratch.luaTrata de como o script lê os dados do jogador no cliente, consoante a framework ativa.
Framework._GetPlayerData() → tableDevolve o objeto completo de dados do jogador da framework ativa.
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() → stringDevolve o identificador único do jogador (citizenid em QBCore/QBX, identifier em 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
endConté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 |
Custom.GiveKeys = function(plate)
-- Example using qb-vehiclekeys
exports['qb-vehiclekeys']:GiveKeys(plate)
endCustom.Minigame() → booleanChamada 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.
Custom.Minigame = function()
local status = exports['origen_hacking']:createGame("alphabet", 30)
return status
endCustom.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 |
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)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 |
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 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.
-- Default: no duty check
Custom.IsOnDuty = false
-- Example: integrate with origen_police
Custom.IsOnDuty = function()
return exports['origen_police']:IsOnDuty()
endTrata 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 |
Custom.Notify = function(text, type, length)
lib.notify({
description = text,
type = type,
duration = length,
})
endCustom.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 |
Custom.DrawText = function(key, text)
lib.showTextUI('[' .. key .. '] - ' .. text)
endCustom.HideText()Esconde a dica de texto.
Custom.HideText = function()
lib.hideTextUI()
endCustom.Progress(duration, text) → booleanMostra 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 |
Custom.Progress = function(duration, text)
return lib.progressCircle({
canCancel = false,
disable = { car = true },
duration = duration,
label = text,
position = 'bottom',
useWhileDead = false,
})
endTrata 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 | falseDevolve 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) → booleanVerifica 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) → tableDevolve 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) → numberDevolve 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) → booleanRetira 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) → booleanAdiciona 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 | nilProcura um jogador online pelo seu identificador único.
| Parâmetro | Tipo | Descrição |
|---|---|---|
identifier |
string |
Identificador do jogador (citizenid ou license) |
Framework.GetPlayersInJob(jobName) → numberDevolve 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.PlateGeneratorSubstituiçã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.
-- 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) → booleanChamada 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) |
Custom.AddItem = function(source, name, amount, slot, metadata)
exports['ox_inventory']:AddItem(source, name, amount, metadata)
return true
endTrata 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.
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)