Ir para conteúdo
  • 0

Erro No Npc Banker Na Hora De Depositar.


wellctba

Pergunta

Bom dia,

 

Estava tentando implementar o NPC Banker no meu Servidor, porém ocorre o seguinte erro:



 

erro.png

 

Este erro aparece apenas após eu dizer o 'yes' do deposit.

 

Edit: Percebi que ocorre o mesmo erro quando efetuo o 'withdraw', porém, no prompt a mensagem muda para "[C]: in function 'doPlayerWithdrawMoney'" O resto permanece igual.

 

Segue o código .lua do Npc:

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

local talkState = {}

 

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end

function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end

function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end

function onThink() npcHandler:onThink() end

 

function creatureSayCallback(cid, type, msg)

if(not npcHandler:isFocused(cid)) then

return false

end

 

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

 

--------------------MESSAGES------------------------------------------------------------------------------

if msgcontains(msg, 'deposit') then

selfSay('Please tell me how much gold it is you would like to deposit.', cid)

talkState[talkUser] = 1

 

elseif msgcontains(msg, 'withdraw') then

selfSay('Please tell me how much gold you would like to withdraw.', cid)

talkState[talkUser] = 3

 

elseif msgcontains(msg, 'transfer') then

selfSay('Please tell me the amount of gold coins you would like to transfer.', cid)

talkState[talkUser] = 5

 

elseif msgcontains(msg, 'change gold') then

selfSay('How many platinum coins do you want to get?', cid)

talkState[talkUser] = 8

 

elseif msgcontains(msg, 'change platinum') then

selfSay('Do you want to change your platinum coins to gold or crystal?', cid)

talkState[talkUser] = 10

 

elseif msgcontains(msg, 'change crystal') then

selfSay('How many crystal coins do you want to change to platinum?', cid)

talkState[talkUser] = 15

 

elseif msgcontains(msg, 'balance') then

n = getPlayerBalance(cid)

selfSay('Your balance are '..n..' golds.', cid)

talkState[talkUser] = 0

 

 

----------------------DEPOSIT-------------------------------------------------------

elseif talkState[talkUser] == 1 then

if msgcontains(msg, 'all') then

n = getPlayerMoney(cid)

selfSay('Do you want deposit '..n..' golds ?', cid)

talkState[talkUser] = 2

else

n = getNumber(msg)

selfSay('Do you want deposit '..n..' golds ?', cid)

talkState[talkUser] = 2

end

 

elseif talkState[talkUser] == 2 then

if msgcontains(msg, 'yes') then

if getPlayerMoney(cid) >= n then

doPlayerDepositMoney(cid,n)

selfSay('Sucessfull. Now your balance account is ' ..getPlayerBalance(cid)..' golds.', cid)

talkState[talkUser] = 0

else

selfSay('You don\'t have money.', cid)

end

else

selfSay('Ok then', cid)

end

 

----------------------WITHDRAW-------------------------------------------------------------------------------------

 

elseif talkState[talkUser] == 3 then

if msgcontains(msg, 'all') then

n = getPlayerBalance(cid)

selfSay('Do you want withdraw '..n..' golds ?', cid)

talkState[talkUser] = 4

else

n = getNumber(msg)

selfSay('Do you want withdraw '..n..' golds ?', cid)

talkState[talkUser] = 4

end

 

elseif talkState[talkUser] == 4 then

if msgcontains(msg, 'yes') then

if getPlayerBalance(cid) >= n then

doPlayerWithdrawMoney(cid, n)

selfSay('Here you are, '..n..' gold. Now your balance account is ' ..getPlayerBalance(cid)..' golds.', cid)

talkState[talkUser] = 0

else

selfSay('There is not enough gold on your account', cid)

end

else

selfSay('Ok then', cid)

end

 

----------------------TRANSFER----------------------------------------------------------------------------------------

 

elseif talkState[talkUser] == 5 then

if msgcontains(msg, 'all') then

n = getPlayerBalance(cid)

selfSay('Who would you like transfer '..n..' gold to?', cid)

talkState[talkUser] = 6

else

n = getNumber(msg)

selfSay('Who would you like transfer '..n..' gold to?', cid)

talkState[talkUser] = 6

end

 

elseif talkState[talkUser] == 6 then

p = msg

selfSay('So you would like to transfer '..n..' gold to '..p..'?', cid)

talkState[talkUser] = 7

 

elseif talkState[talkUser] == 7 then

if msgcontains(msg, 'yes') then

if getPlayerBalance(cid) >= n then

if doPlayerTransferMoneyTo(cid, p, n) == TRUE then

selfSay('You have transferred '..n..' gold to '..p..' and your account balance is '..getPlayerBalance(cid)..' golds.', cid)

talkState[talkUser] = 0

else

selfSay('This player does not exist. Please tell me a valid name!', cid)

talkState[talkUser] = 0

end

else

selfSay('There is not enough gold on your account', cid)

talkState[talkUser] = 0

end

else

selfSay('Ok then', cid)

talkState[talkUser] = 0

end

 

----------------------CHANGE GOLD---------------------------------------------------------------------------------

elseif talkState[talkUser] == 8 then

n = getNumber(msg)

b = n * 100

selfSay('So I should change '..b..' of your gold coins to '..n..' platinum coins for you?', cid)

talkState[talkUser] = 9

 

elseif talkState[talkUser] == 9 then

if msgcontains(msg, 'yes') then

if doPlayerRemoveItem(cid, 2148, b) == TRUE then

doPlayerAddItem(cid, 2152, n)

talkState[talkUser] = 0

else

selfSay('You don\'t have money.', cid)

talkState[talkUser] = 0

end

else

selfSay('Ok. We cancel.', cid)

talkState[talkUser] = 0

end

 

---------------------CHANGE PLATINUM-------------------------------------------------------------------------

elseif talkState[talkUser] == 10 then

if msgcontains(msg, 'gold') then

selfSay('How many platinum coins do you want to change to gold?', cid)

talkState[talkUser] = 11

elseif msgcontains(msg, 'crystal') then

selfSay('How many crystal coins do you want to get?', cid)

talkState[talkUser] = 13

end

 

 

elseif talkState[talkUser] == 11 then

n = getNumber(msg)

b = n * 100

selfSay('So I should change '..n..' of your platinum coins to '..b..' gold coins for you?', cid)

talkState[talkUser] = 12

 

elseif talkState[talkUser] == 12 then

if msgcontains(msg, 'yes') then

if doPlayerRemoveItem(cid, 2152, n) == TRUE then

doPlayerAddItem(cid, 2148, b)

talkState[talkUser] = 0

else

selfSay('You don\'t have money.', cid)

talkState[talkUser] = 0

end

else

selfSay('Ok. We cancel.', cid)

talkState[talkUser] = 0

end

 

elseif talkState[talkUser] == 13 then

n = getNumber(msg)

b = n * 100

selfSay('So I should change '..b..' of your platinum coins to '..n..' crystal coins for you?', cid)

talkState[talkUser] = 14

 

elseif talkState[talkUser] == 14 then

if msgcontains(msg, 'yes') then

if doPlayerRemoveItem(cid, 2152, b) == TRUE then

doPlayerAddItem(cid, 2160, n)

talkState[talkUser] = 0

else

selfSay('You don\'t have money.', cid)

talkState[talkUser] = 0

end

else

selfSay('Ok. We cancel.', cid)

talkState[talkUser] = 0

end

 

---------------------CHANGE CRYSTAL-------------------------------------------------------------------------------

elseif talkState[talkUser] == 15 then

n = getNumber(msg)

b = n * 100

selfSay('So I should change '..n..' of your crystal coins to '..b..' platinum coins for you?', cid)

talkState[talkUser] = 16

 

elseif talkState[talkUser] == 16 then

if msgcontains(msg, 'yes') then

if doPlayerRemoveItem(cid, 2160, n) == TRUE then

doPlayerAddItem(cid, 2152, b)

talkState[talkUser] = 0

else

selfSay('You don\'t have money.', cid)

talkState[talkUser] = 0

end

else

selfSay('Ok. We cancel.', cid)

talkState[talkUser] = 0

end

 

 

end

 

 

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

 

 

-- function maded by Gesior--

function getNumber(txt) --return number if its number and is > 0, else return 0

x = string.gsub(txt,"%a","")

x = tonumber(x)

if x ~= nill and x > 0 then

return x

else

return 0

end

end

 

 

Caso tenham alguma ideia do que seja, por favor me avisem.

 

Grato,

Att.

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

6 respostass a esta questão

Posts Recomendados

  • 0

Substitua por:

 

 

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

local talkState = {}

local moneyTo = {}

local playerTo = {}

 

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end

function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end

function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end

function onThink() npcHandler:onThink() end

 

local function isValidMoney(money)

if isNumber(money) == TRUE and money > 0 and money < 999999999 then

return TRUE

end

return FALSE

end

 

function creatureSayCallback(cid, type, msg)

 

if(not npcHandler:isFocused(cid)) then

return false

end

 

if msgcontains(msg, 'help') or msgcontains(msg, 'offer') then

selfSay("You can check the {balance} of your bank account, {deposit} money or {withdraw} it. You can also {transfer} money to other characters, provided that they have a vocation.", cid)

talkState[cid] = 0

-----------------------------------------------------------------

---------------------------- Balance ----------------------------

-----------------------------------------------------------------

elseif msgcontains(msg, 'balance') or msgcontains(msg, 'Balance') then

selfSay('Your account balance is '..getPlayerBalance(cid)..' gold.', cid)

talkState[cid] = 0

-----------------------------------------------------------------

---------------------------- Help -------------------------------

-----------------------------------------------------------------

elseif msgcontains(msg, 'basic functions') then

selfSay('You can check the {balance{ of your bank account, Pdeposit{ money or Pwithdraw{ it. You can also {transfer} money to othercharacters, provided that they have a vocation.', cid)

talkState[cid] = 0

elseif msgcontains(msg, 'advanced functions') then

selfSay('Renting a house has never been this easy. Simply make a bid for an auction. We will check immediately if you haveenough money.', cid)

talkState[cid] = 0

-----------------------------------------------------------------

---------------------------- Deposit ----------------------------

-----------------------------------------------------------------

elseif msgcontains(msg, 'deposit all') then

moneyTo[cid] = getPlayerMoney(cid)

if moneyTo[cid] < 1 then

selfSay('You don\'t have any money to deposit in you inventory..', cid)

talkState[cid] = 0

else

selfSay('Would you really like to deposit '..moneyTo[cid]..' gold?', cid)

talkState[cid] = 2

end

elseif msgcontains(msg, 'deposit') then

selfSay("Please tell me how much gold it is you would like to deposit.", cid)

talkState[cid] = 1

elseif talkState[cid] == 1 then

moneyTo[cid] = tonumber(msg)

if isValidMoney(moneyTo[cid]) == TRUE then

selfSay('Would you really like to deposit '..moneyTo[cid]..' gold?', cid)

talkState[cid] = 2

else

selfSay('Is isnt valid amount of gold to deposit.', cid)

talkState[cid] = 0

end

elseif talkState[cid] == 2 then

if msgcontains(msg, 'yes') then

if doPlayerDepositMoney(cid, moneyTo[cid], 1) ~= TRUE then

selfSay('You do not have enough gold.', cid)

else

selfSay('Alright, we have added the amount of '..moneyTo[cid]..' gold to your balance. You can withdraw your money anytime you want to. Your account balance is ' .. getPlayerBalance(cid) .. '.', cid)

end

elseif msgcontains(msg, 'no') then

selfSay('As you wish. Is there something else I can do for you?', cid)

end

talkState[cid] = 0

-----------------------------------------------------------------

---------------------------- Withdraw ---------------------------

-----------------------------------------------------------------

elseif msgcontains(msg, 'withdraw') then

selfSay("Please tell me how much gold you would like to withdraw.", cid)

talkState[cid] = 6

elseif talkState[cid] == 6 then

moneyTo[cid] = tonumber(msg)

if isValidMoney(moneyTo[cid]) == TRUE then

selfSay('Are you sure you wish to withdraw '..moneyTo[cid]..' gold from your bank account?', cid)

talkState[cid] = 7

else

selfSay('Is isnt valid amount of gold to withdraw.', cid)

talkState[cid] = 0

end

elseif talkState[cid] == 7 then

if msgcontains(msg, 'yes') then

if doPlayerWithdrawMoney(cid, moneyTo[cid]) ~= TRUE then

selfSay('There is not enough gold on your account. Your account balance is '..getPlayerBalance(cid)..'. Please tell me the amount of gold coins you would like to withdraw.', cid)

else

selfSay('Here you are, ' .. moneyTo[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)

talkState[cid] = 0

end

elseif msgcontains(msg, 'no') then

selfSay('As you wish. Is there something else I can do for you?', cid)

talkState[cid] = 0

end

-----------------------------------------------------------------

---------------------------- Transfer ---------------------------

-----------------------------------------------------------------

elseif msgcontains(msg, 'transfer') then

selfSay("Please tell me the amount of gold you would like to transfer.", cid)

talkState[cid] = 11

elseif talkState[cid] == 11 then

moneyTo[cid] = tonumber(msg)

if isValidMoney(moneyTo[cid]) == TRUE then

selfSay('Who would you like transfer '..moneyTo[cid]..' gold to?', cid)

talkState[cid] = 12

else

selfSay('Is isnt valid amount of gold to transfer.', cid)

talkState[cid] = 0

end

elseif talkState[cid] == 12 then

playerTo[cid] = msg

 

if getCreatureName(cid) == playerTo[cid] then

selfSay('Ehm, You want transfer money to yourself? Its impossible!', cid)

talkState[cid] = 0

return TRUE

end

 

if playerExists(playerTo[cid]) then

selfSay('So you would like to transfer ' .. moneyTo[cid] .. ' gold to "' .. playerTo[cid] .. '" ?', cid)

talkState[cid] = 13

else

selfSay('Player with name "' .. playerTo[cid] .. '" doesnt exist.', cid)

talkState[cid] = 0

end

elseif talkState[cid] == 13 then

if msgcontains(msg, 'yes') then

if getPlayerBalance(cid) < moneyTo[cid] then

selfSay('You dont have enought money on your bank account.', cid)

return TRUE

end

 

if doPlayerTransferMoneyTo(cid, playerTo[cid], moneyTo[cid]) ~= TRUE then

selfSay('This player does not exist on this world or have no vocation.', cid)

else

selfSay('You have transferred ' .. moneyTo[cid] .. ' gold to "' .. playerTo[cid] ..' ".', cid)

playerTo[cid] = nil

end

elseif msgcontains(msg, 'no') then

selfSay('As you wish. Is there something else I can do for you?', cid)

end

talkState[cid] = 0

end

return TRUE

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Continua o mesmo erro...

 

Exatamente igual.

 

Edit: Será que é algum erro na função doDepositMoney()?

Onde ficam os metodos dela? No arquivo global.lua?

 

Edit²: Percebi que ocorre o mesmo erro quando efetuo o 'withdraw', porém, no prompt a mensagem muda para "[C]: in function 'doPlayerWithdrawMoney'" O resto permanece igual.

 

Grato,

Att.

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

  • 0

é acho que n tinha essa função no seu server...

 

na pasta data/lib/050-function.lua adc

 

function doPlayerDepositMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end

if(not doPlayerRemoveMoney(cid, amount)) then
return false
end

doPlayerSetBalance(cid, getPlayerBalance(cid) + amount)
return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

é acho que n tinha essa função no seu server...

 

na pasta data/lib/050-function.lua adc

 

function doPlayerDepositMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end

if(not doPlayerRemoveMoney(cid, amount)) then
return false
end

doPlayerSetBalance(cid, getPlayerBalance(cid) + amount)
return true
end

 

Onde fica essa pasta? eu não encontrei a pasta lib aqui...

 

Grato,

Att.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...