Skip to content

Banco ​

Banco da cidade. No balcão de uma agência o jogador deposita, saca, transfere, cobra outro jogador com fatura, paga impostos e multas, vê o extrato, pede empréstimo e acompanha os financiamentos. O saldo é o do seu framework: o script não cria saldo próprio.

Precisa de: oxmysql, ox_lib, krs_helper e um framework

Sem framework o banco não funciona: o modo none do krs_helper não tem dinheiro nem saldo.

Opcionais: uma mira (target ou ox_target), hud e o MDT com a tabela mdt_fines.

Instalação ​

cfg
ensure bank

Coloque depois do krs_helper e da mira. Veja a ordem completa.

As tabelas transactions, invoices, taxes e bank_finance são criadas sozinhas.

Já tem outro banco ​

O saldo continua o do framework, então nada se perde. Tire o ensure do banco antigo ou mude Config.Locations, senão aparecem duas opções no mesmo balcão.

Antes de instalar, veja se o seu banco de dados já tem as tabelas transactions, invoices ou taxes. Se tiver, faça backup e renomeie:

sql
RENAME TABLE transactions TO transactions_antigo;
RENAME TABLE invoices TO invoices_antigo;
RENAME TABLE taxes TO taxes_antigo;

O banco recria as tabelas vazias. Um script antigo que usa essas tabelas pode parar de funcionar.

Onde fica o dinheiro ​

FrameworkBancoDinheiro em mãosCartão
krsSaldo do krsItem dollarSim
QBCoremoney.bankmoney.cashNão
CreativeBanco do CreativeItem dollarNão
vRPgetBankMoneygetMoneyNão

No krs as lojas cobram pelo cartão que o jogador carrega na mochila. Pelo banco ele pede um cartão novo ou bloqueia o atual. Nos outros frameworks o bloco do cartão não aparece.

Como usar ​

Vá até o balcão e mire nele. Sem target e sem ox_target, aparece um aviso e o jogador aperta E. Não há blip no mapa.

AbaO que faz
ContaDepositar, sacar e transferir. Quem recebe precisa estar na cidade
FaturasCobrar pelo passaporte, pagar e cancelar. Quem é cobrado precisa estar na cidade e aceitar. Mostra as 100 mais novas
ContasImpostos e multas, uma por uma ou Pagar tudo
CréditoScore, faixa, empréstimo, cartão e financiamentos
ExtratoOperações, das mais novas para as mais antigas

No QBCore, o passaporte é o citizenid, como ABC12345.

Contas em atraso ​

Imposto ou multa com mais de Debts.Grace segundos sem pagar trava saque e transferência, se Debts.Block for true. Outros scripts podem perguntar a mesma coisa ao banco antes de vender.

Pagar tudo só começa os impostos se o saldo cobre o total. As multas são pagas da mais antiga para a mais nova e param na primeira que o saldo não cobre.

Crédito ​

O score vai de 0 a 1000. Ele sobe com parcela paga em dia e saldo alto, e cai com parcela atrasada. Abaixo de 400 não há crédito.

Os juros valem para o contrato inteiro, não por mês. 15% em 10.000 dão 11.500 no total, divididos nas parcelas.

As parcelas saem do banco sozinhas a cada Interval segundos. Sem saldo no dia, a parcela vira um imposto "Financiamento" em Contas e o score cai. Com Limit parcelas atrasadas, o banco avisa o script dono e ele retoma o bem. O empréstimo não tem bem para retomar: a dívida continua em Contas.

Permissão ​

O banco não tem comandos de admin. Os grupos VIP vêm do framework. Troque Ouro, Prata e Bronze pelos nomes dos seus grupos.

Configuração ​

Tudo fica em config.lua. Ele só precisa ter o que você mudou. As listas de grupos (Taxes.Discount, Card.Free e Vip) são exceção: grupo apagado não volta pelo padrão. Valores em dinheiro são inteiros.

OpçãoPadrãoO que muda
Locations7 agênciasCoordenadas dos balcões
Distance1.75Distância para abrir. O servidor recusa quem está mais longe que Distance + 5
MaxValue100000000Maior valor numa operação
TransfertrueLiga a transferência
LoantrueLiga o empréstimo na tela
FinestrueLê multas da tabela mdt_fines
Notify.Time5000Duração dos avisos, em ms
Theme.Accent"#d8b86b"Cor principal da tela
LogtrueRegistra operações no log do krs_helper

Faturas, atrasos e imposto:

OpçãoPadrãoO que muda
Invoices.EnabledtrueLiga as faturas
Invoices.Reason80Tamanho máximo do motivo, em letras
Invoices.Cooldown30Segundos para cobrar de novo quem recusou
Debts.Grace86400Segundos até a conta ficar atrasada
Debts.BlocktrueConta atrasada trava saque e transferência
Taxes.Rate0.1Parte do valor da compra usada no imposto
Taxes.Discount0.65, 0.75, 0.85Multiplicador do imposto por grupo VIP

Cartão, disponível só no krs:

OpçãoPadrãoO que muda
Card.EnabledtrueLiga o cartão
Card.Price2500Preço do cartão
Card.FreeOuro, Prata, BronzeGrupos que pedem de graça

Crédito:

OpçãoPadrãoO que muda
Score.Start600Score de quem nunca financiou
Score.OnTime10Pontos por parcela paga em dia
Score.OnTimeMax300Limite de pontos por parcelas em dia
Score.Late40Pontos perdidos por parcela atrasada
Score.Default200Pontos perdidos por contrato retomado
Score.Balance{ 1000000, 100 }, { 100000, 50 }Bônus por saldo: saldo mínimo e pontos. Vale o primeiro que bater
VipOrderOuro, Prata, BronzeOrdem de prioridade dos grupos

Faixas (Tiers), do maior Min para o menor:

MinLabelInterestLimit
800tier.great0.085000000
600tier.good0.152000000
400tier.regular0.25500000

Benefícios VIP (Vip). Interest, Limit e Down multiplicam juros, limite e entrada. Installments soma parcelas.

GrupoInterestLimitDownInstallments
Ouro0.252.00.56
Prata0.51.50.674
Bronze0.751.250.832

Planos (Plans). Down é a entrada, Interval são os segundos entre parcelas, Limit são as parcelas atrasadas até retomar o bem. loan também tem Min = 5000.

PlanoUsado porDownInstallmentsIntervalLimit
vehicleConcessionária0.306864003
houseCasas0.2020864003
customOficina0.304864003
loanEmpréstimo da tela0.06864003

Os textos ficam em locales/*.json.

Outra mira, HUD ou polícia ​

Troque o corpo destas funções:

ArquivoFunçãoO que faz
client-side/ganchos.luaAddCounterComo o jogador chega no balcão
client-side/ganchos.luaWantedEsconde a tela de quem é procurado
client-side/ganchos.luaHudEsconde o HUD com a tela aberta
server-side/ganchos.luaWanted(charId)Decide quem não pode usar o banco

Sem o hud, todo mundo usa o banco. Com ele, o servidor recusa toda operação de quem está procurado.

Para programadores ​

charId é número no krs, Creative e vRP, e citizenid (texto) no QBCore.

lua
-- servidor
exports.bank:AddTaxes(charId, "Concessionária", 150000, "Imposto do carro")  -- true/false
exports.bank:CheckTaxes(charId)        -- true se tem imposto atrasado e Debts.Block
exports.bank:CheckFines(charId)        -- o mesmo para multas
exports.bank:Taxes(charId)             -- lista de impostos
exports.bank:Fines(charId)             -- multas em aberto
exports.bank:Invoices(charId)          -- faturas recebidas e enviadas
exports.bank:Transactions(charId)      -- extrato
exports.bank:AddTransactions(charId, "Compra", 500, "loja")  -- true/false
exports.bank:CreateInvoice(charId, alvo, valor, motivo)      -- { Id } ou { Error, Key }

-- financiamento
exports.bank:Terms(charId, "vehicle", preco)
exports.bank:Open(charId, "vehicle", preco, ref, nome, dados, true)  -- condições ou false, motivo
exports.bank:FinanceOf(origem, charId, ref)                          -- contrato ou nil
exports.bank:FinancePayoff(nil, charId, origem, ref)                 -- true, mensagem ou false, motivo
exports.bank:FinanceClose(origem, charId, ref)                       -- true/false

Contrato aberto com o último argumento true pertence ao resource que chamou. O banco chama exports.<resource>:FinanceHook(evento, contrato, valor) com:

EventoQuando
ValidPergunta se o bem ainda existe
PaidParcela paga
DefaultHora de retomar o bem
DoneContrato quitado

Evento local de cliente: bank:Open abre a tela.

Problemas comuns ​

tabela mdt_fines não encontrada (MDT não instalado): a aba de multas fica vazia.: use Config.Fines = false. Multas de outro MDT não aparecem.

Avisos que vão ao log mesmo com Config.Log = false:

AvisoO que fazer
[DEVOLUÇÃO FALHOU]O framework recusou devolver dinheiro. Dê o valor no banco do jogador com o comando de admin do framework
[RESERVA NÃO DESFEITA]Uma fatura, multa ou imposto saiu da lista sem ser cobrado. Recrie a linha na tabela ou deixe a dívida perdoada
[SQL FALHOU]Uma parcela ou contrato não foi gravado. Confira Paid e NextDue da linha em bank_finance
[ADAPTER FALHOU]O framework deu erro numa operação de dinheiro. Confira o saldo do jogador