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
ensure bankColoque 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:
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
| Framework | Banco | Dinheiro em mãos | Cartão |
|---|---|---|---|
| krs | Saldo do krs | Item dollar | Sim |
| QBCore | money.bank | money.cash | Não |
| Creative | Banco do Creative | Item dollar | Não |
| vRP | getBankMoney | getMoney | Nã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.
| Aba | O que faz |
|---|---|
| Conta | Depositar, sacar e transferir. Quem recebe precisa estar na cidade |
| Faturas | Cobrar pelo passaporte, pagar e cancelar. Quem é cobrado precisa estar na cidade e aceitar. Mostra as 100 mais novas |
| Contas | Impostos e multas, uma por uma ou Pagar tudo |
| Crédito | Score, faixa, empréstimo, cartão e financiamentos |
| Extrato | Operaçõ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ção | Padrão | O que muda |
|---|---|---|
Locations | 7 agências | Coordenadas dos balcões |
Distance | 1.75 | Distância para abrir. O servidor recusa quem está mais longe que Distance + 5 |
MaxValue | 100000000 | Maior valor numa operação |
Transfer | true | Liga a transferência |
Loan | true | Liga o empréstimo na tela |
Fines | true | Lê multas da tabela mdt_fines |
Notify.Time | 5000 | Duração dos avisos, em ms |
Theme.Accent | "#d8b86b" | Cor principal da tela |
Log | true | Registra operações no log do krs_helper |
Faturas, atrasos e imposto:
| Opção | Padrão | O que muda |
|---|---|---|
Invoices.Enabled | true | Liga as faturas |
Invoices.Reason | 80 | Tamanho máximo do motivo, em letras |
Invoices.Cooldown | 30 | Segundos para cobrar de novo quem recusou |
Debts.Grace | 86400 | Segundos até a conta ficar atrasada |
Debts.Block | true | Conta atrasada trava saque e transferência |
Taxes.Rate | 0.1 | Parte do valor da compra usada no imposto |
Taxes.Discount | 0.65, 0.75, 0.85 | Multiplicador do imposto por grupo VIP |
Cartão, disponível só no krs:
| Opção | Padrão | O que muda |
|---|---|---|
Card.Enabled | true | Liga o cartão |
Card.Price | 2500 | Preço do cartão |
Card.Free | Ouro, Prata, Bronze | Grupos que pedem de graça |
Crédito:
| Opção | Padrão | O que muda |
|---|---|---|
Score.Start | 600 | Score de quem nunca financiou |
Score.OnTime | 10 | Pontos por parcela paga em dia |
Score.OnTimeMax | 300 | Limite de pontos por parcelas em dia |
Score.Late | 40 | Pontos perdidos por parcela atrasada |
Score.Default | 200 | Pontos perdidos por contrato retomado |
Score.Balance | { 1000000, 100 }, { 100000, 50 } | Bônus por saldo: saldo mínimo e pontos. Vale o primeiro que bater |
VipOrder | Ouro, Prata, Bronze | Ordem de prioridade dos grupos |
Faixas (Tiers), do maior Min para o menor:
Min | Label | Interest | Limit |
|---|---|---|---|
800 | tier.great | 0.08 | 5000000 |
600 | tier.good | 0.15 | 2000000 |
400 | tier.regular | 0.25 | 500000 |
Benefícios VIP (Vip). Interest, Limit e Down multiplicam juros, limite e entrada. Installments soma parcelas.
| Grupo | Interest | Limit | Down | Installments |
|---|---|---|---|---|
Ouro | 0.25 | 2.0 | 0.5 | 6 |
Prata | 0.5 | 1.5 | 0.67 | 4 |
Bronze | 0.75 | 1.25 | 0.83 | 2 |
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.
| Plano | Usado por | Down | Installments | Interval | Limit |
|---|---|---|---|---|---|
vehicle | Concessionária | 0.30 | 6 | 86400 | 3 |
house | Casas | 0.20 | 20 | 86400 | 3 |
custom | Oficina | 0.30 | 4 | 86400 | 3 |
loan | Empréstimo da tela | 0.0 | 6 | 86400 | 3 |
Os textos ficam em locales/*.json.
Outra mira, HUD ou polícia
Troque o corpo destas funções:
| Arquivo | Função | O que faz |
|---|---|---|
client-side/ganchos.lua | AddCounter | Como o jogador chega no balcão |
client-side/ganchos.lua | Wanted | Esconde a tela de quem é procurado |
client-side/ganchos.lua | Hud | Esconde o HUD com a tela aberta |
server-side/ganchos.lua | Wanted(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.
-- 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/falseContrato aberto com o último argumento true pertence ao resource que chamou. O banco chama exports.<resource>:FinanceHook(evento, contrato, valor) com:
| Evento | Quando |
|---|---|
Valid | Pergunta se o bem ainda existe |
Paid | Parcela paga |
Default | Hora de retomar o bem |
Done | Contrato 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:
| Aviso | O 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 |
