DRS Banking
Banco completo e moderno: contas pessoais, de empresa, de gang e partilhadas, extratos, transferências, cartões com PIN seguro, ATMs e bloqueio em assaltos.
Banco completo e moderno: contas pessoais, de empresa, de gang e partilhadas, extratos, transferências, cartões de débito com PIN verificado no servidor, ATMs com limite diário, cartão de crédito opcional e bancos que fecham durante os assaltos. Substitui o qb-banking sem mexer nos outros scripts.
#Requisitos
| Framework | QBCore, Qbox ou ESX (deteção automática) |
| Base de dados | oxmysql |
| Interação | ox_target, qb-target ou tecla E (opcional) |
| Itens | bank_card (e credit_card se usares o cartão de crédito) |
#Instalação
- Desliga o banco antigo (ex.:
qb-banking). - Coloca a pasta
drs_bankingemresourcese adiciona aoserver.cfg, depois dooxmysqle do framework:
ensure drs_banking- As tabelas são criadas sozinhas no primeiro arranque. O
drs_bankingusa as mesmas tabelas do qb-banking (bank_accountsebank_statements), por isso os saldos das empresas, das gangs e das contas partilhadas mantêm-se. Os PINs ficam na tabela novadrs_bank_cards. - O item
bank_cardjá vem com o QBCore. Noutros frameworks, cria-o. - Opcional — foto do Discord no perfil:
set drs_discord_bot_token "TOKEN_DO_TEU_BOT"Nota
O drs_banking tem provide 'qb-banking' e os mesmos exports (AddMoney, RemoveMoney, GetAccountBalance…). Os scripts que usam exports['qb-banking'] continuam a funcionar.
Atenção
Alguns scripts (ex.: jg-mechanic, jg-advancedgarages) verificam se existe um recurso com o nome qb-banking. Se os usas, dá à pasta o nome qb-banking e apaga a linha provide do fxmanifest.lua.
#Como funciona
No balcão do banco (blip no mapa) abres o painel completo:
- Início — saldo total, entradas e saídas de hoje e últimos movimentos.
- Dinheiro — depositar e levantar em qualquer conta a que tens acesso.
- Transferir — entre as tuas contas, para outra pessoa (número da conta = o identificador da personagem, ex.:
ABC12345) ou para uma conta de empresa ou partilhada, pelo nome. - Extrato — por conta, com pesquisa, filtro de entradas/saídas e páginas.
- Contas — contas partilhadas: criar (com depósito inicial), renomear, apagar (o saldo volta para a tua conta), adicionar e remover membros.
- Cartões — pedir o cartão de débito com um PIN de 4 números, trocar o PIN e (opcional) pedir o cartão de crédito.
No ATM (com o cartão de débito) escreves o PIN no teclado e podes levantar ou depositar na conta pessoal, com valores rápidos e limite diário.
Dica
Os chefes (isboss no QBCore/Qbox, cargo boss no ESX) veem também a conta da empresa e da gang. As contas de todos os empregos são criadas sozinhas.
#Assaltos a bancos
O evento qb-banking:server:SetBankClosed(bankId, closed), usado pelo qb-bankrobbery, fecha o banco cujo robberyId no config.lua é igual a bankId. Enquanto está fechado, o balcão não abre.
#Comandos
| Comando | O que faz |
|---|---|
/dardinheiro [id] [quantia] | Dá dinheiro em mão a quem está perto (Config.GiveCashCommand, vazio desliga) |
#Opções principais
| Opção | Por defeito | Descrição |
|---|---|---|
Config.Currency | € | Moeda mostrada |
Config.Interaction | auto | ox_target, qb-target ou key |
Config.Banks | 8 bancos | Balcões (label, coords, robberyId) |
Config.ATMModels | 4 modelos | Props de ATM |
Config.ATMDailyLimit | 5000 | Levantamentos por dia no ATM (0 = sem limite) |
Config.MaxSharedAccounts | 2 | Contas partilhadas por pessoa |
Config.MaxSharedUsers | 8 | Membros por conta partilhada |
Config.DebitCard | bank_card, 50 | Item e preço do cartão de débito |
Config.CreditCard | desligado | Cartão de crédito opcional |
Config.GuardResource | nil | Recurso anti-exploit com SafeAddMoney/SafeRemoveMoney |
Config.UIDResource | nil | Recurso de IDs únicos para o /dardinheiro |
#Configuração completa
Config = {}
-- Idioma / Language: 'pt' ou 'en'
Config.Locale = 'pt'
-- Framework: 'auto' deteta Qbox/QBCore/ESX (ou 'qbx' | 'qb' | 'esx')
Config.Framework = 'auto'
-- Moeda mostrada na interface / Currency shown in the UI
Config.Currency = '€'
-- Como se abre o banco e o ATM: 'auto' (ox_target > qb-target > tecla) | 'ox_target' | 'qb-target' | 'key'
-- How the bank and ATMs are opened
Config.Interaction = 'auto'
Config.InteractKey = 38 -- E
Config.InteractKeyLabel = 'E'
-- ------------------------------------------------------------------ bancos / banks
-- robberyId: id do banco no script de assaltos (fecha durante o assalto) / id used by the robbery script
Config.Banks = {
{ label = 'Fleeca Legion Square', coords = vector3(149.05, -1041.3, 29.37), robberyId = 1 },
{ label = 'Fleeca Hawick', coords = vector3(313.32, -280.03, 54.17), robberyId = 2 },
{ label = 'Fleeca Rockford', coords = vector3(-351.94, -50.72, 49.04), robberyId = 3 },
{ label = 'Fleeca Del Perro', coords = vector3(-1212.68, -331.83, 37.78), robberyId = 4 },
{ label = 'Fleeca Great Ocean', coords = vector3(-2961.67, 482.31, 15.7), robberyId = 5 },
{ label = 'Fleeca Harmony', coords = vector3(1175.64, 2707.71, 38.09), robberyId = 6 },
{ label = 'Pacific Standard', coords = vector3(247.65, 223.87, 106.29), robberyId = 'pacific' },
{ label = 'Blaine County Savings', coords = vector3(-111.98, 6470.56, 31.63), robberyId = 'paleto' },
}
Config.Blip = { name = 'Banco', sprite = 108, color = 2, scale = 0.6 }
-- ------------------------------------------------------------------ ATMs
Config.ATMModels = { 'prop_atm_01', 'prop_atm_02', 'prop_atm_03', 'prop_fleeca_atm' }
Config.ATMDailyLimit = 5000 -- levantamentos por dia no ATM (0 = sem limite) / ATM withdrawals per day (0 = no limit)
Config.ATMQuickAmounts = { 50, 100, 250, 500, 1000 }
-- ------------------------------------------------------------------ contas / accounts
Config.MaxSharedAccounts = 2 -- contas partilhadas por pessoa / shared accounts per person
Config.MaxSharedUsers = 8 -- membros por conta partilhada / members per shared account
Config.StatementsLimit = 150 -- movimentos mostrados por conta / statements shown per account
-- ------------------------------------------------------------------ cartões / cards
Config.DebitCard = { item = 'bank_card', price = 50 }
-- Cartão de crédito (ex.: para um departamento de empréstimos). enabled = false esconde a opção.
-- Credit card (e.g. for a loans department). enabled = false hides the option.
Config.CreditCard = { enabled = false, item = 'credit_card' }
-- ------------------------------------------------------------------ outros / other
-- /dardinheiro [id] [quantia]: dar dinheiro a quem está perto (vazio = desligado)
-- /givecash [id] [amount]: give cash to someone close (empty = off)
Config.GiveCashCommand = 'dardinheiro'
Config.GiveCashDistance = 5.0
-- Recurso de IDs únicos com GetIDfromUID (ex.: 'RufiUniqueID'), para usar o UID em vez do ID do servidor. nil = ID do servidor.
-- Unique-ID resource with GetIDfromUID. nil = server ID.
Config.UIDResource = nil
-- Recurso anti-exploit com SafeAddMoney/SafeRemoveMoney/SafeAddItem (ex.: o recurso anti-cheat do teu servidor). nil = framework direto.
-- Anti-exploit resource exposing SafeAddMoney/SafeRemoveMoney/SafeAddItem. nil = framework directly.
Config.GuardResource = nil
-- Foto do Discord no perfil: set drs_discord_bot_token "TOKEN" no server.cfg (sem token aparecem as iniciais)
-- Discord picture on the profile: set drs_discord_bot_token "TOKEN" in server.cfg
Config.DiscordTokenConvar = 'drs_discord_bot_token'
Config.Webhook = ''
Config.UseOxNotify = false#Para programadores
exports.drs_banking:AddMoney('mechanic', 500, 'Reparação') -- também exports['qb-banking']
exports.drs_banking:RemoveMoney('police', 200, 'Combustível')
exports.drs_banking:GetAccountBalance('ambulance')
exports.drs_banking:GetAccount('mechanic') -- { account_name, account_balance, account_type, ... }
exports.drs_banking:CreateJobAccount('taxi', 0)
exports.drs_banking:SetBankClosed(1, true) -- fechar / abrir um banco#Segurança
- O PIN nunca sai do servidor: é guardado cifrado e, ao fim de 3 PINs errados, o ATM bloqueia durante 1 minuto.
- Cada pedido é validado no servidor: sessão aberta no balcão ou no ATM, distância ao banco, acesso à conta, valores e saldos.
- O saldo das contas é descontado com uma condição no SQL — dois pedidos ao mesmo tempo não deixam a conta negativa.
- Se a segunda parte de uma operação falhar, a primeira é desfeita.
#Resolução de problemas
"Ainda não tens cartão." no ATM — pede o cartão de débito no separador Cartões de um banco. Quem já tinha um bank_card de outro banco define só o PIN (grátis).
"Algo correu mal." ao abrir — vê a consola do servidor: normalmente é a base de dados (oxmysql ligado? permissões de criar tabelas?).
Os scripts jg não pagam à empresa — vê o aviso sobre o nome da pasta na instalação.