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.

v3.0.1 QBCoreQboxESX drs_banking
Ver na loja

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

FrameworkQBCore, Qbox ou ESX (deteção automática)
Base de dadosoxmysql
Interaçãoox_target, qb-target ou tecla E (opcional)
Itensbank_card (e credit_card se usares o cartão de crédito)

#Instalação

  1. Desliga o banco antigo (ex.: qb-banking).
  2. Coloca a pasta drs_banking em resources e adiciona ao server.cfg, depois do oxmysql e do framework:
server.cfg
ensure drs_banking
  1. As tabelas são criadas sozinhas no primeiro arranque. O drs_banking usa as mesmas tabelas do qb-banking (bank_accounts e bank_statements), por isso os saldos das empresas, das gangs e das contas partilhadas mantêm-se. Os PINs ficam na tabela nova drs_bank_cards.
  2. O item bank_card já vem com o QBCore. Noutros frameworks, cria-o.
  3. Opcional — foto do Discord no perfil:
server.cfg
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

ComandoO que faz
/dardinheiro [id] [quantia]Dá dinheiro em mão a quem está perto (Config.GiveCashCommand, vazio desliga)

#Opções principais

OpçãoPor defeitoDescrição
Config.Currency€Moeda mostrada
Config.Interactionautoox_target, qb-target ou key
Config.Banks8 bancosBalcões (label, coords, robberyId)
Config.ATMModels4 modelosProps de ATM
Config.ATMDailyLimit5000Levantamentos por dia no ATM (0 = sem limite)
Config.MaxSharedAccounts2Contas partilhadas por pessoa
Config.MaxSharedUsers8Membros por conta partilhada
Config.DebitCardbank_card, 50Item e preço do cartão de débito
Config.CreditCarddesligadoCartão de crédito opcional
Config.GuardResourcenilRecurso anti-exploit com SafeAddMoney/SafeRemoveMoney
Config.UIDResourcenilRecurso de IDs únicos para o /dardinheiro

#Configuração completa

config.lua
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

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