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

Personalização · origen_vendings

A pasta custom/ contém a camada de bridge do origen_vendings. Estes ficheiros estão excluídos do escrow e são os únicos que deves editar para integrar o recurso com a tua stack.

text
custom/
├── client.lua   ← TextUI and notification bridges
└── server.lua   ← Framework, permissions, economy, and inventory bridges

Edita apenas os ficheiros dentro de custom/. Os restantes ficheiros do recurso estão protegidos por escrow e não devem ser modificados.


custom/client.lua

Define dois objetos bridge usados em todo o lado cliente: HelpText e Notify.

HelpText

Controla o aviso TextUI apresentado quando o jogador está perto de uma máquina de venda automática.


HelpText.GetResourceName() → string

Devolve o nome do recurso que fornece o TextUI.

lua
HelpText.GetResourceName = function()
    return 'ox_lib'
end

HelpText.ShowHelpText(message, position?)

Mostra o TextUI no ecrã. É chamado automaticamente quando o jogador entra no raio de interação de uma máquina.

Parâmetro Tipo Descrição
message string Texto a apresentar
position string? Posição no ecrã. Por omissão 'left-center'
lua
-- Default implementation (ox_lib)
HelpText.ShowHelpText = function(message, position)
    exports.ox_lib:showTextUI(message, {
        position = position or 'left-center',
        icon     = 'shopping-cart',
    })
end

HelpText.HideHelpText()

Oculta o TextUI ativo. É chamado automaticamente quando o jogador sai do raio de interação.

lua
-- Default implementation (ox_lib)
HelpText.HideHelpText = function()
    exports.ox_lib:hideTextUI()
end

Notify

Controla as notificações emergentes do jogo enviadas ao jogador (compra bem-sucedida, erros, etc.).


Notify.GetResourceName() → string

Devolve o nome do recurso que fornece as notificações.

lua
Notify.GetResourceName = function()
    return 'ox_lib'
end

Notify.SendNotify(message, type?, time?)

Notificação simples, sem título.

Parâmetro Tipo Descrição
message string Texto a apresentar
type string? 'success' | 'error' | 'info' | 'warning'. Por omissão 'info'
time number? Duração em milissegundos. Por omissão 3000
lua
-- Default implementation (ox_lib)
Notify.SendNotify = function(message, _type, time)
    exports.ox_lib:notify({
        description = message,
        type        = _type or 'info',
        duration    = time  or 3000,
        position    = Config.NotificationPosition or 'top-right',
    })
end

Notify.SendNotification(title, message, type?, time?)

Notificação com título.

Parâmetro Tipo Descrição
title string Título da notificação. Por omissão 'Vending'
message string Corpo da notificação
type string? 'success' | 'error' | 'info' | 'warning'. Por omissão 'info'
time number? Duração em milissegundos. Por omissão 3000
lua
-- Default implementation (ox_lib)
Notify.SendNotification = function(title, message, _type, time)
    exports.ox_lib:notify({
        title       = title or 'Vending',
        description = message,
        type        = _type or 'info',
        duration    = time  or 3000,
        position    = Config.NotificationPosition or 'top-right',
    })
end

custom/server.lua

Define o objeto bridge Custom usado em todo o lado servidor. Trata da integração com a framework, das permissões, da economia e do inventário.

O fornecedor de inventário fica em cache na primeira utilização. Se alterares Config.Inventory em execução, reinicia o recurso para que seja detetado de novo.


Custom.getIdentifier(source) → string | nil

Devolve o identificador único do jogador (citizenid no QBCore/QBX, license no ESX).

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

Custom.getStaffLevel(source) → 'full' | false

Verifica se o jogador tem acesso de administração ao painel das máquinas de venda automática. Devolve 'full' se tiver e false caso contrário.

Verifica (por ordem):

  1. A marca de administrador da framework (qb-core / qbx_core)
  2. Qualquer grupo ACE definido em Config.GroupPermissions
  3. O ACE genérico command
Parâmetro Tipo Descrição
source number ID de servidor do jogador
lua
-- Usage example inside a callback
local level = Custom.getStaffLevel(source)
if not level then return end -- not an admin

Custom.getMoney(source, account?) → number | nil

Devolve o saldo do jogador na conta indicada.

Parâmetro Tipo Descrição
source number ID de servidor do jogador
account string? 'cash' (por omissão) ou 'bank'

Custom.removeMoney(source, amount, account?, reason?) → boolean, string?

Retira dinheiro ao jogador. Devolve true em caso de sucesso, ou false mais uma cadeia de erro em caso de falha.

Parâmetro Tipo Descrição
source number ID de servidor do jogador
amount number Quantia a retirar (tem de ser > 0)
account string? 'cash' (por omissão) ou 'bank'
reason string? Etiqueta da transação. Por omissão 'origen_vendings'

Possíveis cadeias de erro:

Erro Causa
'invalid_amount' A quantia é nil, 0 ou negativa
'player_not_found' A framework não conseguiu resolver o jogador
'insufficient_funds' O saldo é inferior à quantia pedida
'framework_denied' O RemoveMoney da framework devolveu false
'framework_not_supported' A framework ativa não é suportada
lua
local ok, err = Custom.removeMoney(source, 50, 'cash')
if not ok then
    print('Payment failed:', err)
end

Custom.giveItem(source, itemName, amount, metadata?) → boolean

Entrega um item ao jogador através do inventário ativo. Verifica a capacidade de carga quando é suportado.

Parâmetro Tipo Descrição
source number ID de servidor do jogador
itemName string Nome interno do item
amount number Quantidade a entregar
metadata table? Metadados opcionais do item

Custom.itemExists(itemName) → boolean

Devolve true se o item estiver registado no inventário ativo.

Parâmetro Tipo Descrição
itemName string Nome interno do item

Custom.getInventoryName() → string

Devolve o nome do recurso de inventário atualmente ativo (por exemplo 'ox_inventory', 'qb-inventory'). Útil para logs e depuração.


Custom.getAllInventoryItems() → table[]

Devolve todos os itens registados no inventário ativo, ordenados alfabeticamente pela etiqueta. É usado pelo painel de administração para preencher o seletor de itens.

Cada entrada da tabela devolvida:

Campo Tipo Descrição
name string Nome interno do item
label string Nome visível
weight number Peso do item
stack boolean Se o item é empilhável
image string URL da imagem NUI resolvida, ou '' se não for encontrada