Início › Documentação › Personalização · origen_dealerships
A pasta custom/ contém todos os pontos de integração entre o origen_dealerships e o resto do teu servidor. Estes ficheiros não estão protegidos com escrow e têm de ser adaptados à tua configuração.
custom/
├── client/
│ ├── framework.lua — player identifier, vehicle props, NPC interaction
│ ├── keys.lua — vehicle key assignment on purchase
│ └── notify.lua — notifications and text UI
└── server/
├── framework.lua — admin check, payments, vehicle DB insertion
├── financing.lua — financing eligibility hook
└── plate.lua — plate generation and uniqueness checkCustom.GetPlayerIdentifier() → stringDevolve o identificador único do jogador local (citizenid ou identifier consoante o framework).
Custom.GetPlayerIdentifier = function()
local identifier = nil
if Config.Framework == 'qb-core' then
identifier = Framework.Functions.GetPlayerData().citizenid
elseif Config.Framework == 'esx' then
identifier = Framework.GetPlayerData().identifier
end
return identifier
endCustom.HandleInteraction(interactionData) → booleanHook chamado quando um jogador tenta interagir com o NPC de um stand. Devolve true para substituir o fluxo de interação por omissão, ou false para que o recurso o trate normalmente.
| Parâmetro | Tipo | Descrição |
|---|---|---|
interactionData.type |
string |
Tipo de interação. Por agora: 'npc' |
interactionData.onInteract |
function |
Chama-a para desencadear a interação por omissão a partir do hook |
Custom.HandleInteraction = function(interactionData)
if interactionData.type == 'npc' then
-- interactionData.onInteract() -- uncomment to delegate back
return true -- return true to fully take over
end
return false
endA substituição da interação com o NPC está desativada por omissão (return false). Ativa-a se quiseres usar um menu de contexto do ox_lib próprio ou um recurso de interação de terceiros.
Custom.GetVehicleProps(vehicle) → tableDevolve as propriedades da entidade de veículo indicada. Usa lib.getVehicleProperties quando Config.VehiclePurchase.useOxLibProps é true.
| Parâmetro | Tipo | Descrição |
|---|---|---|
vehicle |
entity |
Handle da entidade do veículo |
Custom.GetVehicleProps = function(vehicle)
if Config.VehiclePurchase.useOxLibProps and lib and lib.getVehicleProperties then
return lib.getVehicleProperties(vehicle)
end
-- fallback: returns basic props table
endCustom.SetVehicleProps(vehicle, props) → booleanAplica uma tabela de propriedades a uma entidade de veículo. Usa lib.setVehicleProperties quando está disponível.
| Parâmetro | Tipo | Descrição |
|---|---|---|
vehicle |
entity |
Handle da entidade do veículo |
props |
table |
Tabela de propriedades (mesmo formato que GetVehicleProps) |
Custom.GiveKeys(vehicle, plate) → booleanConcede ao jogador local as chaves de proprietário do veículo indicado. É chamada automaticamente após a compra quando Config.VehiclePurchase.giveKeysOnPurchase é true.
| Parâmetro | Tipo | Descrição |
|---|---|---|
vehicle |
entity | nil |
Entidade do veículo. Se for nil, usa-se plate |
plate |
string | nil |
Matrícula. Usada como alternativa se a entidade não estiver disponível |
Custom.GiveKeys = function(vehicle, plate)
local plateToUse = plate or (DoesEntityExist(vehicle) and GetVehicleNumberPlateText(vehicle) or nil)
TriggerEvent("vehiclekeys:client:SetOwner", plateToUse)
return true
endA implementação por omissão dispara o evento vehiclekeys:client:SetOwner (compatível com qb-vehiclekeys). Substitui esta função se o teu servidor usar outro sistema de chaves, como qs-vehiclekeys ou vehicles_keys.
Custom.Notify(text, type, length)Mostra uma notificação ao jogador local através de lib.notify.
| Parâmetro | Tipo | Descrição |
|---|---|---|
text |
string |
Mensagem já traduzida |
type |
string |
Tipo de notificação: 'success', 'error', 'warning', 'info' |
length |
number |
Duração em milissegundos |
Custom.Notify = function(text, type, length)
lib.notify({
title = 'Origen Dealerships',
description = text,
type = type,
duration = length
})
endCustom.DrawText(text, key)Mostra o text UI do ox_lib com uma indicação de tecla.
| Parâmetro | Tipo | Descrição |
|---|---|---|
text |
string |
Texto da etiqueta |
key |
string |
Etiqueta da tecla mostrada entre parênteses retos |
Custom.HideText()Oculta o text UI do ox_lib que esteja ativo.
Custom.isAdmin(source) → booleanVerifica se o jogador indicado tem permissões de administrador segundo Config.AdminGroups.
| Parâmetro | Tipo | Descrição |
|---|---|---|
source |
number |
ID do jogador no servidor |
Custom.getPlayerIdentifier(source) → string | nilDevolve o identificador único do jogador (citizenid no QB/QBX, identifier no ESX).
| Parâmetro | Tipo | Descrição |
|---|---|---|
source |
number |
ID do jogador no servidor |
Custom.doPayment(source, paymentData) → booleanProcessa um pagamento a partir da conta de um jogador. Suporta os métodos cash, bank e xp.
| Parâmetro | Tipo | Descrição |
|---|---|---|
source |
number |
ID do jogador no servidor |
paymentData.method |
string |
Método de pagamento: 'cash', 'bank', 'xp' |
paymentData.amount |
number |
Montante a descontar |
Custom.doPayment = function(source, paymentData)
-- Handles cash/bank via framework, XP via exports['origen_xp']
endO método de pagamento 'xp' requer que o origen_xp esteja em execução. Chama exports['origen_xp']:RemoveXPFromLicense(license, amount).
Custom.removeFinanceMoney(source, amount) → booleanDesconta da conta bancária do jogador o pagamento de uma prestação do financiamento.
| Parâmetro | Tipo | Descrição |
|---|---|---|
source |
number |
ID do jogador no servidor |
amount |
number |
Montante a descontar do banco |
Custom.addVehicleToDatabase(source, vehicleModel, plate, props, callback)Insere um veículo comprado na tabela de veículos correspondente ao framework ativo.
| Parâmetro | Tipo | Descrição |
|---|---|---|
source |
number |
ID do jogador no servidor |
vehicleModel |
string |
Nome do modelo do veículo (nome de spawn) |
plate |
string |
Texto da matrícula |
props |
table | nil |
Propriedades do veículo. Se for nil, usam-se as predefinidas |
callback |
function(success, message) |
Chamada quando a inserção na base de dados termina |
Tabelas de destino:
| Framework | Tabela |
|---|---|
| QBCore / QBX | player_vehicles |
| ESX | owned_vehicles |
Custom.GetPlayerSourceByIdentifier(identifier) → number | nilEncontra o ID de servidor (source) de um jogador ligado a partir do seu identificador único. É usada nas notificações de pagamentos do financiamento.
| Parâmetro | Tipo | Descrição |
|---|---|---|
identifier |
string |
citizenid (QB/QBX) ou identifier (ESX) |
Custom.canBuyCategory(source, categoryKey, vehicleModel) → { cant: boolean, msg: string }Hook para adicionar restrições personalizadas à compra de categorias de veículos. Devolve cant = false com uma mensagem para bloquear a compra.
| Parâmetro | Tipo | Descrição |
|---|---|---|
source |
number |
ID do jogador no servidor |
categoryKey |
string |
Identificador da categoria do stand |
vehicleModel |
string |
Modelo de veículo que está a ser comprado |
Custom.canBuyCategory = function(source, categoryKey, vehicleModel)
-- Example: block category for players without a license
return { cant = true, msg = "" }
endCustom.canFinanceVehicle(source, model, price, period) → { success: boolean, message: string }Hook chamado antes de criar um contrato de financiamento. Devolve success = false com uma mensagem para bloquear a operação.
| Parâmetro | Tipo | Descrição |
|---|---|---|
source |
number |
ID do jogador no servidor |
model |
string |
Modelo do veículo |
price |
number |
Preço total do veículo |
period |
number |
Número de períodos de pagamento pedido |
Custom.canFinanceVehicle = function(source, model, price, period)
return { success = true, message = '' }
endCustom.GeneratePlate() → string | nilGera uma matrícula única de 8 caracteres (4 letras + 4 dígitos). Tenta até 100 vezes para evitar colisões. Devolve nil se não encontrar uma matrícula única após o máximo de tentativas.
Custom.PlateExists(plate) → booleanVerifica se uma matrícula já está registada na tabela de veículos.
| Parâmetro | Tipo | Descrição |
|---|---|---|
plate |
string |
Matrícula a verificar |
Consulta player_vehicles no QBCore/QBX e owned_vehicles no ESX.