Ir para conteúdo
  • 0

Complementar código de Bank System por Talkaction + código


Bodak Reborn

Pergunta

Hey,

 

então, eu peguei o Bank System por talkaction feito pelo Mock e tentei fazer alguns cálculos para transformar o sistema (que é em cents) para dollar. EX: Para depositar 1k, devo falar

/bank d 100000

 o ideal seria eu falar

/bank d 1000

o problema está no comando all, que deposita/saca todo seu dinheiro. Eu consegui transformar de cents para dollar, pegando a variável de adicionar/remover item e multiplicar por 100, o problema é que caso o jogador deposite algum dinheiro sem o all, assim: /bank d 100000000, quando ele for sacar com o /bank w all (comando que saca todo o dinheiro da sua conta bancária), ele vai receber 100 vezes mais do que ele depositou. Por que o all vai multiplicar o saldo da sua conta bancária por 100.

O código está imprimindo em dollar, mas os comandos são em centavos.

E outra coisa, caso o jogador deposit mais de 42 milhões, 969,4 mil, 76 dollares e 96 centavos, o saldo é zerado. E às vezes buga, dando saldo negativo, inclusive criando stacks de 226 notas. 

Não sei se ficou claro, se estiver confuso, me avisem.

Agradeço se alguém puder ajudar. 

 

Amanhã vou tentar fazer o transfer, para transferir dinheiro da conta bancária para outros jogadores. Se eu conseguir, eu edito aqui, caso alguém queira.

 

Código:

Spoiler
local storeige = 18316local function msg(cid,m)doPlayerSendTextMessage(cid, 25, m)doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, m)endfunction onSay(cid, words, param, channel)local c = getPlayerStorageValue(cid,storeige)c = c == -1 and 0 or clocal d = c/100local e = c/100000local f = c/100000000local g = getPlayerMoney(cid)/100local h = getPlayerMoney(cid)/100000local i = getPlayerMoney(cid)/100000000if param:find('balance') or param == 'b' or (words == '!balance') thenmsg(cid,'Seu saldo é: '..d..' dollares. ('..e..'K ou '..f..'KK)')elseif param:find('amount') or param == 'a' thenif getPlayerMoney(cid) == 0 then	msg(cid, 'Você não tem dinheiro na sua mochila.')elsemsg(cid,'Você tem '..g..' dollares na sua mochila. ('..h..'K ou '..i..'KK)')endelseif param:match('deposit (.+)') or param:match('d (.+)') or (words == '!deposit') thenlocal v = param:match('deposit (.+)') or param:match('d (.+)') or tonumber(param) or param == 'all' and paramlocal dep = tonumber(v == 'all' and getPlayerMoney(cid) or v)local dep1 = tonumber(v == 'all' and getPlayerMoney(cid) or v)/100local dep2 = tonumber(v == 'all' and getPlayerMoney(cid) or v)/100000local dep3 = tonumber(v == 'all' and getPlayerMoney(cid) or v)/100000000if v == "all" and getPlayerMoney(cid) == 0 then	msg(cid, 'Você não tem dinheiro na sua mochila.')elseif not dep thendoPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Insira um valor.')elseif getPlayerMoney(cid) >= dep thensetPlayerStorageValue(cid,storeige,c+dep)doPlayerRemoveMoney(cid,dep)msg(cid,'Você depositou '..dep1..' dollares. ('..dep2..'K ou '..dep3..'KK)')elselocal c = getPlayerMoney(cid)/100local d = getPlayerMoney(cid)/100000local e = getPlayerMoney(cid)/100000000msg(cid,'Você não tem esse dinheiro. Você tem '..g..' dollares na sua mochila. ('..h..'K ou '..i..'KK)')endendendelseif param:match('withdraw (.+)') or param:match('w (.+)') or (words == '!withdraw') thenlocal v = param:match('withdraw (.+)') or param:match('w (.+)') or tonumber(param) or param == 'all' and paramlocal dep = tonumber(v == 'all' and c or v)local dep1 = tonumber(v == 'all' and c or v)/100local dep2 = tonumber(v == 'all' and c or v)/100000local dep3 = tonumber(v == 'all' and c or v)/100000000local dep4 = tonumber(v == 'all' and c or v)*100if v == "all" and dep == 0 then	msg(cid, 'Você não tem dinheiro na sua conta.')elseif not dep thendoPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Insira um valor.')elseif c >= dep thensetPlayerStorageValue(cid,storeige,c-dep)doPlayerAddMoney(cid,dep)msg(cid,'Você sacou: '..dep1..' dollares. ('..dep2..'K ou '..dep3..'KK)')elsemsg(cid,'Você não tem esse dinheiro. Seu saldo é: '..d..' dollares. ('..e..'K ou '..f..'KK)')endendendelsedoPlayerSendTextMessage(cid, 25, "Diga:\n/bank d (quantidade) | para depositar na sua conta\n/bank w (quantidade) | para sacar dinheiro da sua conta\n/bank b | para ver o saldo da sua conta\n/bank a | para ver quanto dinheiro você tem na mochila\nVocê pode usar a palavra ''all'' no lugar da quantidade, para sacar/depositar todo o seu dinheiro.\nLembre-se que o sistema de sacar/depositar está em centavos, então é necessário adicionar 5 zeros depois do número de K's que você quer depositar/sacar.\nExemplo: 1k = (1)00000, 10k = (10)00000, 100k = (100)00000, 1kk = (1000)00000.\nO número dentro dos parênteses são apenas para exemplificar a quantidade de K's, você não usa os parênteses no comando.")endreturn TRUEend

 

 

talkactions.xml:

 

Spoiler
<talkaction words="/bank" event="script" value="bank.lua" /><talkaction words="/withdraw" event="script" value="bank.lua" /><talkaction words="/deposit" event="script" value="bank.lua" /><talkaction words="/balance" event="script" value="bank.lua" />

 

 

Editado por Bodak Reborn
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

local dep = tonumber(v == 'all' and c or v)local dep1 = tonumber(v == 'all' and c or v)/100local dep2 = tonumber(v == 'all' and c or v)/100000local dep3 = tonumber(v == 'all' and c or v)/100000000local dep4 = tonumber(v == 'all' and c or v)*100

pro primeiro erro:

edita essa parte e deixa assim (dividi por 100 pq vc disse q tava 100x maior):

local dep = tonumber(v == 'all' and c or v)/100local dep1 = tonumber(v == 'all' and c or v)/10000local dep2 = tonumber(v == 'all' and c or v)/10000000local dep3 = tonumber(v == 'all' and c or v)/10000000000

 

agora pro segundo erro: não tem solução, vc tá usando valores maiores do que o tibia reserva de bytes pra armazená-los. Se vc tá precisando usar essa quantidade absurda de digitos pro dinheiro do seu server eu sugiro q vc balanceie melhor o drop rate e os preços das coisas (controla essa inflação, moço!!). Ou então crie outros itens como sendo moedas mais evoluidas e trabalhe com elas.

Link para o comentário
Compartilhar em outros sites

  • 0

@Night Wolf, deu erro.

Eu deposito 10k e saco 100 dollares.

O script como está, funciona normalmente. Ele multiplica por 100 o dinheiro por causa do withdraw (já que multiplica por 100 também) caso eu tente passar de centavos para dollares. Se você depositar/sacar por quantia específica, funciona normalmente. Se você tenta depositar com all, dá erro, pois vai multiplicar o dinheiro que você tem por 100. Se você depositar um valor específico e sacar com all, vai sacar 100x mais do que você tem na conta bancária.

 

Caso esteja confuso, se possível, teste ai:

embaixo de

elseif param:match('deposit (.+)') or param:match('d (.+)') or (words == '!deposit') thenlocal v = param:match('deposit (.+)') or param:match('d (.+)') or tonumber(param) or param == 'all' and paramlocal dep = tonumber(v == 'all' and getPlayerMoney(cid) or v)local dep1 = tonumber(v == 'all' and getPlayerMoney(cid) or v)/100local dep2 = tonumber(v == 'all' and getPlayerMoney(cid) or v)/100000local dep3 = tonumber(v == 'all' and getPlayerMoney(cid) or v)/100000000

adicione um

local dep4 = tonumber(v == 'all' and c or v)*100

e troque

doPlayerRemoveMoney(cid,dep)

por

doPlayerRemoveMoney(cid,dep4)

e

doPlayerAddMoney(cid,dep)

por

doPlayerAddMoney(cid,dep4)

 

Editado por Bodak Reborn
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...