Tudo o que está em custom/ consta de escrow_ignore, pelo que continua aberto quando o recurso é encriptado, e está separado do núcleo, por isso as atualizações do telemóvel não o substituem. Os ficheiros de fornecedor em bridge/ também são abertos: podes lê-los ou copiar um como ponto de partida.
Todos os hooks Custom devolvem nil por omissão, o que significa «faz o habitual». Devolve qualquer outra coisa e o teu código assume o controlo.
custom/client/notifications.lua
Custom.ShowNotification(data) → boolean|nil
Como se vê uma notificação enquanto o telemóvel está guardado. Por omissão, o telemóvel espreita a partir da parte inferior do ecrã. Com o telemóvel aberto, as notificações mostram-se sempre dentro dele.
O hook corre dentro de pcall. Se falhar, o erro é impresso e o telemóvel mostra a notificação como de costume.
custom/server/money.lua
Todas as cobranças e pagamentos que o telemóvel faz passam por aqui: anúncios, tarifas de táxi, faturas, transferências, subscrições de encontros, recuperação de linha. Por omissão, o telemóvel usa a ponte de Banking.
Conta escolhida pelo jogador, se a app lho permitir
Retorno
Comportamento
nil
Cobra através da ponte bancária
true
Cobrado, continua
false, 'reason'
Falhou; o texto é mostrado ao jogador
Cobrar em dinheiro em vez de banco (Qbox):
lua
functionCustom.Charge(source, amount, reason)local player = exports.qbx_core:GetPlayer(source)
ifnot player thenreturnfalse, 'Player not found'endif player.Functions.RemoveMoney('cash', amount, reason) thenreturntrueendreturnfalse, 'You do not have enough cash'end
Anúncios grátis para repórteres:
lua
functionCustom.Charge(source, amount, reason)local job = Framework.GetJob(source)
if reason:find('Ad') and job and job.name == 'reporter'thenreturntrueendreturnnilend
Paga a um jogador: ganhos de condutores e estafetas, vendas do marketplace e reembolsos. Mesmas regras de retorno que Custom.Charge.
Parâmetro
Tipo
Descrição
source
number
ID de servidor do jogador
amount
number
Quantia a pagar
reason
string
Já traduzido para o idioma do jogador
custom/server/permissions.lua
Custom.CanUseApp(source, appId) → boolean|nil
O teu próprio veto sobre uma app, para condições que não cabem numa regra do painel. Corre depois das regras do painel e só pode retirar acesso, nunca conceder.
Isto corre sempre que um telemóvel é aberto, uma vez por app (mais de trinta vezes seguidas). Não consultes a base de dados aqui: guarda em memória o que precisares.
custom/bridge
Cada categoria tem um modelo com as funções exatas de que precisa. Preenche-o e define a categoria como 'custom' em config/bridge.lua:
lua
BridgeConfig.Banking = 'custom'
Cada modelo regista-se com Bridge.Register(category, 'custom', { ... }) e só é usado quando a sua categoria está definida como 'custom'.