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

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.

text
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 check

custom/client/framework.lua

Custom.GetPlayerIdentifier() → string

Devolve o identificador único do jogador local (citizenid ou identifier consoante o framework).

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

Custom.HandleInteraction(interactionData) → boolean

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

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

Devolve 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
lua
Custom.GetVehicleProps = function(vehicle)
    if Config.VehiclePurchase.useOxLibProps and lib and lib.getVehicleProperties then
        return lib.getVehicleProperties(vehicle)
    end
    -- fallback: returns basic props table
end

Custom.SetVehicleProps(vehicle, props) → boolean

Aplica 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/client/keys.lua

Custom.GiveKeys(vehicle, plate) → boolean

Concede 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
lua
Custom.GiveKeys = function(vehicle, plate)
    local plateToUse = plate or (DoesEntityExist(vehicle) and GetVehicleNumberPlateText(vehicle) or nil)
    TriggerEvent("vehiclekeys:client:SetOwner", plateToUse)
    return true
end

A 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/client/notify.lua

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

Custom.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/server/framework.lua

Custom.isAdmin(source) → boolean

Verifica 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 | nil

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

Processa 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
lua
Custom.doPayment = function(source, paymentData)
    -- Handles cash/bank via framework, XP via exports['origen_xp']
end

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

Desconta 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 | nil

Encontra 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
lua
Custom.canBuyCategory = function(source, categoryKey, vehicleModel)
    -- Example: block category for players without a license
    return { cant = true, msg = "" }
end

custom/server/financing.lua

Custom.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
lua
Custom.canFinanceVehicle = function(source, model, price, period)
    return { success = true, message = '' }
end

custom/server/plate.lua

Custom.GeneratePlate() → string | nil

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

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