• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua Block bank transfer some towns

infernality

Member
Joined
Jul 24, 2016
Messages
58
Reaction score
13
I have Dawnport and Rookgaard in my 8.60 server...
I use bank system and i want block gold transfer to players from Rookgaard and Dawnport

I tried it:
Code:
  elseif Topic[cid] == 6 then
  local v = getPlayerByName(msg)
  if getPlayerBalance(cid) >= count[cid] then
  if v and getPlayerTown(msg:lower()) ~= 7 and getPlayerTown(msg:lower()) ~= 9 then
  transfer[cid] = msg
  npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '?', cid)
  Topic[cid] = 7
  elseif getPlayerGUIDByName(msg:lower()) ~= 0 and getPlayerTown(msg:lower()) ~= 7 and getPlayerTown(msg:lower()) ~= 9 then
  transfer[cid] = msg
  npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. findPlayer(msg) .. '?', cid)
  Topic[cid] = 7
  else
  npcHandler:say('This player does not exist on this world or is from Rookgaardia/Dawn Hills.', cid)
  Topic[cid] = nil
  end
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end

Errors:
Code:
[16:53:00.166] [Error - NpcScript Interface]
[16:53:00.166] data/npc/scripts/bank.lua:onCreatureSay
[16:53:00.166] Description:
[16:53:00.166] (internalGetPlayerInfo) Player not found when requesting player info #7

[16:53:00.166] [Error - NpcScript Interface]
[16:53:00.166] data/npc/scripts/bank.lua:onCreatureSay
[16:53:00.166] Description:
[16:53:00.166] (internalGetPlayerInfo) Player not found when requesting player info #7

Full code:
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local Topic, count, transfer = {}, {}, {}

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 getCount(s)
  local b, e = s:find('%d+')
  return b and e and math.min(4294967295, tonumber(s:sub(b, e))) or -1
end

local function findPlayer(name)
  local resultId = db.storeQuery('SELECT name FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
  if resultId == false then
  return
  end
  local r = result.getDataString(resultId, "name")
  result.free(resultId)
  return r
end

local function vocation(name)
  local resultId = db.storeQuery('SELECT vocation FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
  if resultId == false then
  return
  end
  local r = result.getDataInt(resultId, "vocation")
  result.free(resultId)
  return r
end

local function updatePlayerBalance(name, value)
  db.query('UPDATE players SET balance=' .. value .. ' WHERE name=' .. db.escapeString(name) .. ' LIMIT 1')
end

function greet(cid)
  Topic[cid], count[cid], transfer[cid] = nil, nil, nil
  return true
end

function creatureSayCallback(cid, type, msg)
  if not npcHandler:isFocused(cid) then
  return false
  elseif msgcontains(msg, 'balance') then
  npcHandler:say('Your account balance is ' .. getPlayerBalance(cid) .. ' gold.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'deposit') and msgcontains(msg, 'all') then
  if getPlayerMoney(cid) == 0 then
  npcHandler:say('You don\'t have any gold with you.', cid)
  Topic[cid] = nil
  else
  count[cid] = getPlayerMoney(cid)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  end
  elseif msgcontains(msg, 'deposit') then
  if getCount(msg) == 0 then
  npcHandler:say('You are joking, aren\'t you??', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
  if getPlayerMoney(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  else
  npcHandler:say('You do not have enough gold.', cid)
  Topic[cid] = nil
  end
  elseif getPlayerMoney(cid) == 0 then
  npcHandler:say('You don\'t have any gold with you.', cid)
  Topic[cid] = nil
  else
  npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
  Topic[cid] = 1
  end
  elseif Topic[cid] == 1 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
  Topic[cid] = 1
  elseif getPlayerMoney(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  else
  npcHandler:say('You do not have enough gold.', cid)
  Topic[cid] = nil
  end
  elseif msgcontains(msg, 'yes') and Topic[cid] == 2 then
  if doPlayerRemoveMoney(cid, count[cid]) then
  doPlayerSetBalance(cid, getPlayerBalance(cid) + count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  npcHandler:say('Alright, we have added the amount of ' .. count[cid] .. ' gold to your balance. You can withdraw your money anytime you want to.', cid)
  else
  npcHandler:say('I am inconsolable, but it seems you have lost your gold. I hope you get it back.', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'no') and Topic[cid] == 2 then
  npcHandler:say('As you wish. Is there something else I can do for you?', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'withdraw') then
  if getCount(msg) == 0 then
  npcHandler:say('Sure, you want nothing you get nothing!', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
  if getPlayerBalance(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
  Topic[cid] = 4
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif getPlayerBalance(cid) == 0 then
  npcHandler:say('You don\'t have any money on your bank account.', cid)
  Topic[cid] = nil
  else
  npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
  Topic[cid] = 3
  end
  elseif Topic[cid] == 3 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
  Topic[cid] = 3
  elseif getPlayerBalance(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
  Topic[cid] = 4
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif msgcontains(msg, 'yes') and Topic[cid] == 4 then
  if getPlayerBalance(cid) >= count[cid] then
  doPlayerAddMoney(cid, count[cid])
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  npcHandler:say('Here you are, ' .. count[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'no') and Topic[cid] == 4 then
  npcHandler:say('The customer is king! Come back anytime you want to if you wish to withdraw your money.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'transfer') then
  if getCount(msg) == 0 then
  npcHandler:say('Please think about it. Okay?', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then

  count[cid] = getCount(msg)
  if getPlayerBalance(cid) >= count[cid] then
  npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
  Topic[cid] = 6
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end

  else
  npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
  Topic[cid] = 5
  end
  elseif Topic[cid] == 5 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
  Topic[cid] = 5
  else
  count[cid] = getCount(msg)
  if getPlayerBalance(cid) >= count[cid] then
  npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
  Topic[cid] = 6
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  end
  elseif Topic[cid] == 6 then
  local v = getPlayerByName(msg)
  if getPlayerBalance(cid) >= count[cid] then
  if v and getPlayerTown(msg:lower()) ~= 7 and getPlayerTown(msg:lower()) ~= 9 then
  transfer[cid] = msg
  npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '?', cid)
  Topic[cid] = 7
  elseif getPlayerGUIDByName(msg:lower()) ~= 0 and getPlayerTown(msg:lower()) ~= 7 and getPlayerTown(msg:lower()) ~= 9 then
  transfer[cid] = msg
  npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. findPlayer(msg) .. '?', cid)
  Topic[cid] = 7
  else
  npcHandler:say('This player does not exist on this world or is from Rookgaardia/Dawn Hills.', cid)
  Topic[cid] = nil
  end
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif Topic[cid] == 7 and msgcontains(msg, 'yes') then
  if getPlayerBalance(cid) >= count[cid] then
  local v = getPlayerByName(transfer[cid])
  if v then
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  doPlayerSetBalance(v, getPlayerBalance(v) + count[cid])
  updatePlayerBalance(getPlayerName(v), getPlayerBalance(v))
  npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '.', cid)
  elseif findPlayer(transfer[cid]):lower() == transfer[cid]:lower() then
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  db.query('UPDATE players SET balance=balance+' .. count[cid] .. ' WHERE name=' .. db.escapeString(transfer[cid]) .. ' LIMIT 1')
  npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. findPlayer(transfer[cid]) .. '.', cid)
  else
  npcHandler:say('This player does not exist.', cid)
  end
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  end
  Topic[cid] = nil
  elseif Topic[cid] == 7 and msgcontains(msg, 'no') then
  npcHandler:say('Alright, is there something else I can do for you?', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'change gold') then
  npcHandler:say('How many platinum coins would you like to get?', cid)
  Topic[cid] = 8
  elseif Topic[cid] == 8 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your gold coins into ' .. count[cid] .. ' platinum coins?', cid)
  Topic[cid] = 9
  end
  elseif Topic[cid] == 9 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2148, count[cid] * 100) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2152, count[cid])
  else
  npcHandler:say('Sorry, you do not have enough gold coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change platinum') then
  npcHandler:say('Would you like to change your platinum coins into gold or crystal?', cid)
  Topic[cid] = 10
  elseif Topic[cid] == 10 then
  if msgcontains(msg, 'gold') then
  npcHandler:say('How many platinum coins would you like to change into gold?', cid)
  Topic[cid] = 11
  elseif msgcontains(msg, 'crystal') then
  npcHandler:say('How many crystal coins would you like to get?', cid)
  Topic[cid] = 13
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  Topic[cid] = nil
  end
  elseif Topic[cid] == 11 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your platinum coins into ' .. count[cid] * 100 .. ' gold coins for you?', cid)
  Topic[cid] = 12
  end
  elseif Topic[cid] == 12 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2152, count[cid]) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2148, count[cid] * 100)
  else
  npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif Topic[cid] == 13 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your platinum coins into ' .. count[cid] .. ' crystal coins for you?', cid)
  Topic[cid] = 14
  end
  elseif Topic[cid] == 14 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2152, count[cid] * 100) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2160, count[cid])
  else
  npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change crystal') then
  npcHandler:say('How many crystal coins would you like to change into platinum?', cid)
  Topic[cid] = 15
  elseif Topic[cid] == 15 then
  if getCount(msg) == -1 or getCount(msg) == 0 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your crystal coins into ' .. count[cid] * 100 .. ' platinum coins for you?', cid)
  Topic[cid] = 16
  end
  elseif Topic[cid] == 16 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2160, count[cid]) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2152, count[cid] * 100)
  else
  npcHandler:say('Sorry, you do not have enough crystal coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change') then
  npcHandler:say('There are three different coin types in Tibia: 100 gold coins equal 1 platinum coin, 100 platinum coins equal 1 crystal coin. So if you\'d like to change 100 gold into 1 platinum, simply say \'{change gold}\' and then \'1 platinum\'.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'bank') then
  npcHandler:say('We can change money for you. You can also access your bank account.', cid)
  Topic[cid] = nil
  end
  return true
end

npcHandler:setCallback(CALLBACK_GREET, greet)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Code:
if getPlayerTown(v:lower()) ~= 7 and getPlayerTown(v:lower()) ~= 9 then

0.4:

Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local Topic, count, transfer = {}, {}, {}

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 getCount(s)
  local b, e = s:find('%d+')
  return b and e and math.min(4294967295, tonumber(s:sub(b, e))) or -1
end

local function findPlayer(name)
  local resultId = db.storeQuery('SELECT name FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
  if resultId == false then
  return
  end
  local r = result.getDataString(resultId, "name")
  result.free(resultId)
  return r
end

local function vocation(name)
  local resultId = db.storeQuery('SELECT vocation FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
  if resultId == false then
  return
  end
  local r = result.getDataInt(resultId, "vocation")
  result.free(resultId)
  return r
end

local function updatePlayerBalance(name, value)
  db.query('UPDATE players SET balance=' .. value .. ' WHERE name=' .. db.escapeString(name) .. ' LIMIT 1')
end

function greet(cid)
  Topic[cid], count[cid], transfer[cid] = nil, nil, nil
  return true
end

function creatureSayCallback(cid, type, msg)
  if not npcHandler:isFocused(cid) then
  return false
  elseif msgcontains(msg, 'balance') then
  npcHandler:say('Your account balance is ' .. getPlayerBalance(cid) .. ' gold.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'deposit') and msgcontains(msg, 'all') then
  if getPlayerMoney(cid) == 0 then
  npcHandler:say('You don\'t have any gold with you.', cid)
  Topic[cid] = nil
  else
  count[cid] = getPlayerMoney(cid)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  end
  elseif msgcontains(msg, 'deposit') then
  if getCount(msg) == 0 then
  npcHandler:say('You are joking, aren\'t you??', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
  if getPlayerMoney(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  else
  npcHandler:say('You do not have enough gold.', cid)
  Topic[cid] = nil
  end
  elseif getPlayerMoney(cid) == 0 then
  npcHandler:say('You don\'t have any gold with you.', cid)
  Topic[cid] = nil
  else
  npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
  Topic[cid] = 1
  end
  elseif Topic[cid] == 1 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
  Topic[cid] = 1
  elseif getPlayerMoney(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  else
  npcHandler:say('You do not have enough gold.', cid)
  Topic[cid] = nil
  end
  elseif msgcontains(msg, 'yes') and Topic[cid] == 2 then
  if doPlayerRemoveMoney(cid, count[cid]) then
  doPlayerSetBalance(cid, getPlayerBalance(cid) + count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  npcHandler:say('Alright, we have added the amount of ' .. count[cid] .. ' gold to your balance. You can withdraw your money anytime you want to.', cid)
  else
  npcHandler:say('I am inconsolable, but it seems you have lost your gold. I hope you get it back.', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'no') and Topic[cid] == 2 then
  npcHandler:say('As you wish. Is there something else I can do for you?', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'withdraw') then
  if getCount(msg) == 0 then
  npcHandler:say('Sure, you want nothing you get nothing!', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
  if getPlayerBalance(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
  Topic[cid] = 4
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif getPlayerBalance(cid) == 0 then
  npcHandler:say('You don\'t have any money on your bank account.', cid)
  Topic[cid] = nil
  else
  npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
  Topic[cid] = 3
  end
  elseif Topic[cid] == 3 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
  Topic[cid] = 3
  elseif getPlayerBalance(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
  Topic[cid] = 4
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif msgcontains(msg, 'yes') and Topic[cid] == 4 then
  if getPlayerBalance(cid) >= count[cid] then
  doPlayerAddMoney(cid, count[cid])
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  npcHandler:say('Here you are, ' .. count[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'no') and Topic[cid] == 4 then
  npcHandler:say('The customer is king! Come back anytime you want to if you wish to withdraw your money.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'transfer') then
  if getCount(msg) == 0 then
  npcHandler:say('Please think about it. Okay?', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
   
  count[cid] = getCount(msg)
  if getPlayerBalance(cid) >= count[cid] then
  npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
  Topic[cid] = 6
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end

  else
  npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
  Topic[cid] = 5
  end
  elseif Topic[cid] == 5 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
  Topic[cid] = 5
  else
  count[cid] = getCount(msg)
  if getPlayerBalance(cid) >= count[cid] then
  npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
  Topic[cid] = 6
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  end
  elseif Topic[cid] == 6 then
  local v = getPlayerByName(msg)
  if getPlayerBalance(cid) >= count[cid] then
  if getPlayerTown(v:lower()) ~= 7 and getPlayerTown(v:lower()) ~= 9 then
  transfer[cid] = msg
  npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '?', cid)
  Topic[cid] = 7
  elseif getPlayerGUIDByName(msg:lower()) ~= 0 and getPlayerTown(msg:lower()) ~= 7 and getPlayerTown(msg:lower()) ~= 9 then
  transfer[cid] = msg
  npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. findPlayer(msg) .. '?', cid)
  Topic[cid] = 7   
  else
  npcHandler:say('This player does not exist on this world or is from Rookgaardia/Dawn Hills.', cid)
  Topic[cid] = nil
  end
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif Topic[cid] == 7 and msgcontains(msg, 'yes') then
  if getPlayerBalance(cid) >= count[cid] then
  local v = getPlayerByName(transfer[cid])
  if v then
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  doPlayerSetBalance(v, getPlayerBalance(v) + count[cid])
  updatePlayerBalance(getPlayerName(v), getPlayerBalance(v))
  npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '.', cid)
  elseif findPlayer(transfer[cid]):lower() == transfer[cid]:lower() then
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  db.query('UPDATE players SET balance=balance+' .. count[cid] .. ' WHERE name=' .. db.escapeString(transfer[cid]) .. ' LIMIT 1')
  npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. findPlayer(transfer[cid]) .. '.', cid)
  else
  npcHandler:say('This player does not exist.', cid)
  end
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  end
  Topic[cid] = nil
  elseif Topic[cid] == 7 and msgcontains(msg, 'no') then
  npcHandler:say('Alright, is there something else I can do for you?', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'change gold') then
  npcHandler:say('How many platinum coins would you like to get?', cid)
  Topic[cid] = 8
  elseif Topic[cid] == 8 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your gold coins into ' .. count[cid] .. ' platinum coins?', cid)
  Topic[cid] = 9
  end
  elseif Topic[cid] == 9 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2148, count[cid] * 100) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2152, count[cid])
  else
  npcHandler:say('Sorry, you do not have enough gold coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change platinum') then
  npcHandler:say('Would you like to change your platinum coins into gold or crystal?', cid)
  Topic[cid] = 10
  elseif Topic[cid] == 10 then
  if msgcontains(msg, 'gold') then
  npcHandler:say('How many platinum coins would you like to change into gold?', cid)
  Topic[cid] = 11
  elseif msgcontains(msg, 'crystal') then
  npcHandler:say('How many crystal coins would you like to get?', cid)
  Topic[cid] = 13
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  Topic[cid] = nil
  end
  elseif Topic[cid] == 11 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your platinum coins into ' .. count[cid] * 100 .. ' gold coins for you?', cid)
  Topic[cid] = 12
  end
  elseif Topic[cid] == 12 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2152, count[cid]) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2148, count[cid] * 100)
  else
  npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif Topic[cid] == 13 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your platinum coins into ' .. count[cid] .. ' crystal coins for you?', cid)
  Topic[cid] = 14
  end
  elseif Topic[cid] == 14 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2152, count[cid] * 100) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2160, count[cid])
  else
  npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change crystal') then
  npcHandler:say('How many crystal coins would you like to change into platinum?', cid)
  Topic[cid] = 15
  elseif Topic[cid] == 15 then
  if getCount(msg) == -1 or getCount(msg) == 0 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your crystal coins into ' .. count[cid] * 100 .. ' platinum coins for you?', cid)
  Topic[cid] = 16
  end
  elseif Topic[cid] == 16 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2160, count[cid]) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2152, count[cid] * 100)
  else
  npcHandler:say('Sorry, you do not have enough crystal coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change') then
  npcHandler:say('There are three different coin types in Tibia: 100 gold coins equal 1 platinum coin, 100 platinum coins equal 1 crystal coin. So if you\'d like to change 100 gold into 1 platinum, simply say \'{change gold}\' and then \'1 platinum\'.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'bank') then
  npcHandler:say('We can change money for you. You can also access your bank account.', cid)
  Topic[cid] = nil
  end
  return true
end

npcHandler:setCallback(CALLBACK_GREET, greet)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Code:
20:57 Steve [52]: Oliver
20:57 Steve [52]: hi
20:57 Steve [52]: transfer
20:57 [NPC]Bank: Please tell me the amount of gold you would like to transfer.
20:57 Steve [52]: 50
20:57 [NPC]Bank: Who would you like to transfer 50 gold to?
20:57 Steve [52]: Oliver

Code:
[20:57:12.689] [Error - NpcScript Interface]
[20:57:12.689] data/npc/scripts/bank.lua:onCreatureSay
[20:57:12.689] Description:
[20:57:12.689] data/npc/scripts/bank.lua:187: attempt to index local 'v' (a nil value)
[20:57:12.689] stack traceback:
[20:57:12.689]    data/npc/scripts/bank.lua:187: in function 'callback'
[20:57:12.689]    data/npc/lib/npcsystem/npchandler.lua:423: in function 'onCreatureSay'
[20:57:12.689]    data/npc/scripts/bank.lua:9: in function <data/npc/scripts/bank.lua:9>

[20:57:36.191] [Error - NpcScript Interface]
[20:57:36.191] data/npc/scripts/bank.lua:onCreatureSay
[20:57:36.192] Description:
[20:57:36.192] data/npc/scripts/bank.lua:187: attempt to index local 'v' (a nil value)
[20:57:36.192] stack traceback:
[20:57:36.192]    data/npc/scripts/bank.lua:187: in function 'callback'
[20:57:36.192]    data/npc/lib/npcsystem/npchandler.lua:423: in function 'onCreatureSay'
[20:57:36.192]    data/npc/scripts/bank.lua:9: in function <data/npc/scripts/bank.lua:9>
 
Code:
if getPlayerTown(string.lower(getPlayerName(msg))) ~= 7 and getPlayerTown(string.lower(getPlayerName(msg))) ~= 9 then
however idk which is correct name of this funciton, getPlayerByName or getPlayerName.

Same talks, new errors:
Code:
[3:20:09.704] [Error - NpcScript Interface]
[3:20:09.705] data/npc/scripts/bank.lua:onCreatureSay
[3:20:09.705] Description:
[3:20:09.705] (luaGetCreatureName) Creature not found

[3:20:09.705] [Error - NpcScript Interface]
[3:20:09.705] data/npc/scripts/bank.lua:onCreatureSay
[3:20:09.705] Description:
[3:20:09.705] data/npc/scripts/bank.lua:187: bad argument #1 to 'lower' (string expected, got boolean)
[3:20:09.705] stack traceback:
[3:20:09.705]    [C]: in function 'lower'
[3:20:09.705]    data/npc/scripts/bank.lua:187: in function 'callback'
[3:20:09.706]    data/npc/lib/npcsystem/npchandler.lua:423: in function 'onCreatureSay'
[3:20:09.706]    data/npc/scripts/bank.lua:9: in function <data/npc/scripts/bank.lua:9>
 
getPlayerByName is old post /\

I did

getPlayerName:
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local Topic, count, transfer = {}, {}, {}

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 getCount(s)
  local b, e = s:find('%d+')
  return b and e and math.min(4294967295, tonumber(s:sub(b, e))) or -1
end

local function findPlayer(name)
  local resultId = db.storeQuery('SELECT name FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
  if resultId == false then
  return
  end
  local r = result.getDataString(resultId, "name")
  result.free(resultId)
  return r
end

local function vocation(name)
  local resultId = db.storeQuery('SELECT vocation FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
  if resultId == false then
  return
  end
  local r = result.getDataInt(resultId, "vocation")
  result.free(resultId)
  return r
end

local function updatePlayerBalance(name, value)
  db.query('UPDATE players SET balance=' .. value .. ' WHERE name=' .. db.escapeString(name) .. ' LIMIT 1')
end

function greet(cid)
  Topic[cid], count[cid], transfer[cid] = nil, nil, nil
  return true
end

function creatureSayCallback(cid, type, msg)
  if not npcHandler:isFocused(cid) then
  return false
  elseif msgcontains(msg, 'balance') then
  npcHandler:say('Your account balance is ' .. getPlayerBalance(cid) .. ' gold.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'deposit') and msgcontains(msg, 'all') then
  if getPlayerMoney(cid) == 0 then
  npcHandler:say('You don\'t have any gold with you.', cid)
  Topic[cid] = nil
  else
  count[cid] = getPlayerMoney(cid)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  end
  elseif msgcontains(msg, 'deposit') then
  if getCount(msg) == 0 then
  npcHandler:say('You are joking, aren\'t you??', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
  if getPlayerMoney(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  else
  npcHandler:say('You do not have enough gold.', cid)
  Topic[cid] = nil
  end
  elseif getPlayerMoney(cid) == 0 then
  npcHandler:say('You don\'t have any gold with you.', cid)
  Topic[cid] = nil
  else
  npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
  Topic[cid] = 1
  end
  elseif Topic[cid] == 1 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
  Topic[cid] = 1
  elseif getPlayerMoney(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  else
  npcHandler:say('You do not have enough gold.', cid)
  Topic[cid] = nil
  end
  elseif msgcontains(msg, 'yes') and Topic[cid] == 2 then
  if doPlayerRemoveMoney(cid, count[cid]) then
  doPlayerSetBalance(cid, getPlayerBalance(cid) + count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  npcHandler:say('Alright, we have added the amount of ' .. count[cid] .. ' gold to your balance. You can withdraw your money anytime you want to.', cid)
  else
  npcHandler:say('I am inconsolable, but it seems you have lost your gold. I hope you get it back.', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'no') and Topic[cid] == 2 then
  npcHandler:say('As you wish. Is there something else I can do for you?', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'withdraw') then
  if getCount(msg) == 0 then
  npcHandler:say('Sure, you want nothing you get nothing!', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
  if getPlayerBalance(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
  Topic[cid] = 4
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif getPlayerBalance(cid) == 0 then
  npcHandler:say('You don\'t have any money on your bank account.', cid)
  Topic[cid] = nil
  else
  npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
  Topic[cid] = 3
  end
  elseif Topic[cid] == 3 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
  Topic[cid] = 3
  elseif getPlayerBalance(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
  Topic[cid] = 4
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif msgcontains(msg, 'yes') and Topic[cid] == 4 then
  if getPlayerBalance(cid) >= count[cid] then
  doPlayerAddMoney(cid, count[cid])
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  npcHandler:say('Here you are, ' .. count[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'no') and Topic[cid] == 4 then
  npcHandler:say('The customer is king! Come back anytime you want to if you wish to withdraw your money.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'transfer') then
  if getCount(msg) == 0 then
  npcHandler:say('Please think about it. Okay?', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
   
  count[cid] = getCount(msg)
  if getPlayerBalance(cid) >= count[cid] then
  npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
  Topic[cid] = 6
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end

  else
  npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
  Topic[cid] = 5
  end
  elseif Topic[cid] == 5 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
  Topic[cid] = 5
  else
  count[cid] = getCount(msg)
  if getPlayerBalance(cid) >= count[cid] then
  npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
  Topic[cid] = 6
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  end
  elseif Topic[cid] == 6 then
  local v = getPlayerName(msg)
  if getPlayerBalance(cid) >= count[cid] then
  if getPlayerTown(string.lower(getPlayerName(msg))) ~= 7 and getPlayerTown(string.lower(getPlayerName(msg))) ~= 9 then
  transfer[cid] = msg
  npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '?', cid)
  Topic[cid] = 7
  elseif getPlayerGUIDByName(msg:lower()) ~= 0 and getPlayerTown(msg:lower()) ~= 7 and getPlayerTown(msg:lower()) ~= 9 then
  transfer[cid] = msg
  npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. findPlayer(msg) .. '?', cid)
  Topic[cid] = 7   
  else
  npcHandler:say('This player does not exist on this world or is from Rookgaardia/Dawn Hills.', cid)
  Topic[cid] = nil
  end
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif Topic[cid] == 7 and msgcontains(msg, 'yes') then
  if getPlayerBalance(cid) >= count[cid] then
  local v = getPlayerName(transfer[cid])
  if v then
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  doPlayerSetBalance(v, getPlayerBalance(v) + count[cid])
  updatePlayerBalance(getPlayerName(v), getPlayerBalance(v))
  npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '.', cid)
  elseif findPlayer(transfer[cid]):lower() == transfer[cid]:lower() then
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getPlayerName(cid), getPlayerBalance(cid))
  db.query('UPDATE players SET balance=balance+' .. count[cid] .. ' WHERE name=' .. db.escapeString(transfer[cid]) .. ' LIMIT 1')
  npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. findPlayer(transfer[cid]) .. '.', cid)
  else
  npcHandler:say('This player does not exist.', cid)
  end
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  end
  Topic[cid] = nil
  elseif Topic[cid] == 7 and msgcontains(msg, 'no') then
  npcHandler:say('Alright, is there something else I can do for you?', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'change gold') then
  npcHandler:say('How many platinum coins would you like to get?', cid)
  Topic[cid] = 8
  elseif Topic[cid] == 8 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your gold coins into ' .. count[cid] .. ' platinum coins?', cid)
  Topic[cid] = 9
  end
  elseif Topic[cid] == 9 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2148, count[cid] * 100) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2152, count[cid])
  else
  npcHandler:say('Sorry, you do not have enough gold coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change platinum') then
  npcHandler:say('Would you like to change your platinum coins into gold or crystal?', cid)
  Topic[cid] = 10
  elseif Topic[cid] == 10 then
  if msgcontains(msg, 'gold') then
  npcHandler:say('How many platinum coins would you like to change into gold?', cid)
  Topic[cid] = 11
  elseif msgcontains(msg, 'crystal') then
  npcHandler:say('How many crystal coins would you like to get?', cid)
  Topic[cid] = 13
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  Topic[cid] = nil
  end
  elseif Topic[cid] == 11 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your platinum coins into ' .. count[cid] * 100 .. ' gold coins for you?', cid)
  Topic[cid] = 12
  end
  elseif Topic[cid] == 12 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2152, count[cid]) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2148, count[cid] * 100)
  else
  npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif Topic[cid] == 13 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your platinum coins into ' .. count[cid] .. ' crystal coins for you?', cid)
  Topic[cid] = 14
  end
  elseif Topic[cid] == 14 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2152, count[cid] * 100) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2160, count[cid])
  else
  npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change crystal') then
  npcHandler:say('How many crystal coins would you like to change into platinum?', cid)
  Topic[cid] = 15
  elseif Topic[cid] == 15 then
  if getCount(msg) == -1 or getCount(msg) == 0 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your crystal coins into ' .. count[cid] * 100 .. ' platinum coins for you?', cid)
  Topic[cid] = 16
  end
  elseif Topic[cid] == 16 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2160, count[cid]) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2152, count[cid] * 100)
  else
  npcHandler:say('Sorry, you do not have enough crystal coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change') then
  npcHandler:say('There are three different coin types in Tibia: 100 gold coins equal 1 platinum coin, 100 platinum coins equal 1 crystal coin. So if you\'d like to change 100 gold into 1 platinum, simply say \'{change gold}\' and then \'1 platinum\'.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'bank') then
  npcHandler:say('We can change money for you. You can also access your bank account.', cid)
  Topic[cid] = nil
  end
  return true
end

npcHandler:setCallback(CALLBACK_GREET, greet)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Code:
[3:47:31.985] [Error - NpcScript Interface]
[3:47:31.985] data/npc/scripts/bank.lua:onCreatureSay
[3:47:31.985] Description:
[3:47:31.985] (luaGetCreatureName) Creature not found

[3:47:31.985] [Error - NpcScript Interface]
[3:47:31.985] data/npc/scripts/bank.lua:onCreatureSay
[3:47:31.985] Description:
[3:47:31.985] (luaGetCreatureName) Creature not found

[3:47:31.985] [Error - NpcScript Interface]
[3:47:31.985] data/npc/scripts/bank.lua:onCreatureSay
[3:47:31.985] Description:
[3:47:31.985] data/npc/scripts/bank.lua:187: bad argument #1 to 'lower' (string expected, got boolean)
[3:47:31.985] stack traceback:
[3:47:31.985]    [C]: in function 'lower'
[3:47:31.986]    data/npc/scripts/bank.lua:187: in function 'callback'
[3:47:31.986]    data/npc/lib/npcsystem/npchandler.lua:423: in function 'onCreatureSay'
[3:47:31.986]    data/npc/scripts/bank.lua:9: in function <data/npc/scripts/bank.lua:9>
 
getPlayerByName is old post /\

Code:
if getPlayerTown(string.lower(getCreatureByName(msg))) ~= 7 and getPlayerTown(string.lower(getCreatureByName(msg))) ~= 9 then
last thing i can think atm, idk 0.3 script syntax, if it works i'd suggest you check if creature isPlayer() for it doesnt make bugs since if player say transfer demon yes it will return true as well.
 
Code:
if getPlayerTown(string.lower(getCreatureByName(msg))) ~= 7 and getPlayerTown(string.lower(getCreatureByName(msg))) ~= 9 then
last thing i can think atm, idk 0.3 script syntax, if it works i'd suggest you check if creature isPlayer() for it doesnt make bugs since if player say transfer demon yes it will return true as well.

Code:
  if not isPlayer(cid) then
  return true
  end

You mean it?

But my old test was players with correct name...
 
is this working? getCreatureByName(msg)?

No, gave me same error

Code:
20:57 Steve [52]: Oliver
20:57 Steve [52]: hi
20:57 Steve [52]: transfer
20:57 [NPC]Bank: Please tell me the amount of gold you would like to transfer.
20:57 Steve [52]: 50
20:57 [NPC]Bank: Who would you like to transfer 50 gold to?
20:57 Steve [52]: Oliver

Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local Topic, count, transfer = {}, {}, {}

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 getCount(s)
  local b, e = s:find('%d+')
  return b and e and math.min(4294967295, tonumber(s:sub(b, e))) or -1
end

local function findPlayer(name)
  local resultId = db.storeQuery('SELECT name FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
  if resultId == false then
  return
  end
  local r = result.getDataString(resultId, "name")
  result.free(resultId)
  return r
end

local function vocation(name)
  local resultId = db.storeQuery('SELECT vocation FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
  if resultId == false then
  return
  end
  local r = result.getDataInt(resultId, "vocation")
  result.free(resultId)
  return r
end

local function updatePlayerBalance(name, value)
  db.query('UPDATE players SET balance=' .. value .. ' WHERE name=' .. db.escapeString(name) .. ' LIMIT 1')
end

function greet(cid)
  Topic[cid], count[cid], transfer[cid] = nil, nil, nil
  return true
end

function creatureSayCallback(cid, type, msg)
  if not npcHandler:isFocused(cid) then
  return false
  elseif msgcontains(msg, 'balance') then
  npcHandler:say('Your account balance is ' .. getPlayerBalance(cid) .. ' gold.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'deposit') and msgcontains(msg, 'all') then
  if getPlayerMoney(cid) == 0 then
  npcHandler:say('You don\'t have any gold with you.', cid)
  Topic[cid] = nil
  else
  count[cid] = getPlayerMoney(cid)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  end
  elseif msgcontains(msg, 'deposit') then
  if getCount(msg) == 0 then
  npcHandler:say('You are joking, aren\'t you??', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
  if getPlayerMoney(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  else
  npcHandler:say('You do not have enough gold.', cid)
  Topic[cid] = nil
  end
  elseif getPlayerMoney(cid) == 0 then
  npcHandler:say('You don\'t have any gold with you.', cid)
  Topic[cid] = nil
  else
  npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
  Topic[cid] = 1
  end
  elseif Topic[cid] == 1 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
  Topic[cid] = 1
  elseif getPlayerMoney(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
  Topic[cid] = 2
  else
  npcHandler:say('You do not have enough gold.', cid)
  Topic[cid] = nil
  end
  elseif msgcontains(msg, 'yes') and Topic[cid] == 2 then
  if doPlayerRemoveMoney(cid, count[cid]) then
  doPlayerSetBalance(cid, getPlayerBalance(cid) + count[cid])
  updatePlayerBalance(getCreatureByName(cid), getPlayerBalance(cid))
  npcHandler:say('Alright, we have added the amount of ' .. count[cid] .. ' gold to your balance. You can withdraw your money anytime you want to.', cid)
  else
  npcHandler:say('I am inconsolable, but it seems you have lost your gold. I hope you get it back.', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'no') and Topic[cid] == 2 then
  npcHandler:say('As you wish. Is there something else I can do for you?', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'withdraw') then
  if getCount(msg) == 0 then
  npcHandler:say('Sure, you want nothing you get nothing!', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
  if getPlayerBalance(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
  Topic[cid] = 4
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif getPlayerBalance(cid) == 0 then
  npcHandler:say('You don\'t have any money on your bank account.', cid)
  Topic[cid] = nil
  else
  npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
  Topic[cid] = 3
  end
  elseif Topic[cid] == 3 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
  Topic[cid] = 3
  elseif getPlayerBalance(cid) >= getCount(msg) then
  count[cid] = getCount(msg)
  npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
  Topic[cid] = 4
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif msgcontains(msg, 'yes') and Topic[cid] == 4 then
  if getPlayerBalance(cid) >= count[cid] then
  doPlayerAddMoney(cid, count[cid])
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getCreatureByName(cid), getPlayerBalance(cid))
  npcHandler:say('Here you are, ' .. count[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'no') and Topic[cid] == 4 then
  npcHandler:say('The customer is king! Come back anytime you want to if you wish to withdraw your money.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'transfer') then
  if getCount(msg) == 0 then
  npcHandler:say('Please think about it. Okay?', cid)
  Topic[cid] = nil
  elseif getCount(msg) ~= -1 then
   
  count[cid] = getCount(msg)
  if getPlayerBalance(cid) >= count[cid] then
  npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
  Topic[cid] = 6
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end

  else
  npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
  Topic[cid] = 5
  end
  elseif Topic[cid] == 5 then
  if getCount(msg) == -1 then
  npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
  Topic[cid] = 5
  else
  count[cid] = getCount(msg)
  if getPlayerBalance(cid) >= count[cid] then
  npcHandler:say('Who would you like to transfer ' .. count[cid] .. ' gold to?', cid)
  Topic[cid] = 6
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  end
  elseif Topic[cid] == 6 then
  local v = getCreatureByName(msg)
  if getPlayerBalance(cid) >= count[cid] then
  if getPlayerTown(string.lower(getCreatureByName(msg))) ~= 7 and getPlayerTown(string.lower(getCreatureByName(msg))) ~= 9 then
  transfer[cid] = msg
  npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. getCreatureByName(v) .. '?', cid)
  Topic[cid] = 7
  elseif getPlayerGUIDByName(msg:lower()) ~= 0 and getPlayerTown(msg:lower()) ~= 7 and getPlayerTown(msg:lower()) ~= 9 then
  transfer[cid] = msg
  npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. findPlayer(msg) .. '?', cid)
  Topic[cid] = 7   
  else
  npcHandler:say('This player does not exist on this world or is from Rookgaardia/Dawn Hills.', cid)
  Topic[cid] = nil
  end
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  Topic[cid] = nil
  end
  elseif Topic[cid] == 7 and msgcontains(msg, 'yes') then
  if getPlayerBalance(cid) >= count[cid] then
  local v = getCreatureByName(transfer[cid])
  if v then
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getCreatureByName(cid), getPlayerBalance(cid))
  doPlayerSetBalance(v, getPlayerBalance(v) + count[cid])
  updatePlayerBalance(getCreatureByName(v), getPlayerBalance(v))
  npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. getCreatureByName(v) .. '.', cid)
  elseif findPlayer(transfer[cid]):lower() == transfer[cid]:lower() then
  doPlayerSetBalance(cid, getPlayerBalance(cid) - count[cid])
  updatePlayerBalance(getCreatureByName(cid), getPlayerBalance(cid))
  db.query('UPDATE players SET balance=balance+' .. count[cid] .. ' WHERE name=' .. db.escapeString(transfer[cid]) .. ' LIMIT 1')
  npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. findPlayer(transfer[cid]) .. '.', cid)
  else
  npcHandler:say('This player does not exist.', cid)
  end
  else
  npcHandler:say('There is not enough gold on your account.', cid)
  end
  Topic[cid] = nil
  elseif Topic[cid] == 7 and msgcontains(msg, 'no') then
  npcHandler:say('Alright, is there something else I can do for you?', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'change gold') then
  npcHandler:say('How many platinum coins would you like to get?', cid)
  Topic[cid] = 8
  elseif Topic[cid] == 8 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your gold coins into ' .. count[cid] .. ' platinum coins?', cid)
  Topic[cid] = 9
  end
  elseif Topic[cid] == 9 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2148, count[cid] * 100) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2152, count[cid])
  else
  npcHandler:say('Sorry, you do not have enough gold coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change platinum') then
  npcHandler:say('Would you like to change your platinum coins into gold or crystal?', cid)
  Topic[cid] = 10
  elseif Topic[cid] == 10 then
  if msgcontains(msg, 'gold') then
  npcHandler:say('How many platinum coins would you like to change into gold?', cid)
  Topic[cid] = 11
  elseif msgcontains(msg, 'crystal') then
  npcHandler:say('How many crystal coins would you like to get?', cid)
  Topic[cid] = 13
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  Topic[cid] = nil
  end
  elseif Topic[cid] == 11 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your platinum coins into ' .. count[cid] * 100 .. ' gold coins for you?', cid)
  Topic[cid] = 12
  end
  elseif Topic[cid] == 12 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2152, count[cid]) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2148, count[cid] * 100)
  else
  npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif Topic[cid] == 13 then
  if getCount(msg) < 1 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your platinum coins into ' .. count[cid] .. ' crystal coins for you?', cid)
  Topic[cid] = 14
  end
  elseif Topic[cid] == 14 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2152, count[cid] * 100) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2160, count[cid])
  else
  npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change crystal') then
  npcHandler:say('How many crystal coins would you like to change into platinum?', cid)
  Topic[cid] = 15
  elseif Topic[cid] == 15 then
  if getCount(msg) == -1 or getCount(msg) == 0 then
  npcHandler:say('Hmm, can I help you with something else?', cid)
  Topic[cid] = nil
  else
  count[cid] = math.min(500, getCount(msg))
  npcHandler:say('So you would like me to change ' .. count[cid] .. ' of your crystal coins into ' .. count[cid] * 100 .. ' platinum coins for you?', cid)
  Topic[cid] = 16
  end
  elseif Topic[cid] == 16 then
  if msgcontains(msg, 'yes') then
  if doPlayerRemoveItem(cid, 2160, count[cid]) then
  npcHandler:say('Here you are.', cid)
  doPlayerAddItem(cid, 2152, count[cid] * 100)
  else
  npcHandler:say('Sorry, you do not have enough crystal coins.', cid)
  end
  else
  npcHandler:say('Well, can I help you with something else?', cid)
  end
  Topic[cid] = nil
  elseif msgcontains(msg, 'change') then
  npcHandler:say('There are three different coin types in Tibia: 100 gold coins equal 1 platinum coin, 100 platinum coins equal 1 crystal coin. So if you\'d like to change 100 gold into 1 platinum, simply say \'{change gold}\' and then \'1 platinum\'.', cid)
  Topic[cid] = nil
  elseif msgcontains(msg, 'bank') then
  npcHandler:say('We can change money for you. You can also access your bank account.', cid)
  Topic[cid] = nil
  end
  return true
end

npcHandler:setCallback(CALLBACK_GREET, greet)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Code:
[20:17:27.081] [Error - NpcScript Interface]
[20:17:27.081] data/npc/scripts/bank.lua:onCreatureSay
[20:17:27.081] Description:
[20:17:27.081] data/npc/scripts/bank.lua:187: bad argument #1 to 'lower' (string expected, got nil)
[20:17:27.081] stack traceback:
[20:17:27.081]    [C]: in function 'lower'
[20:17:27.081]    data/npc/scripts/bank.lua:187: in function 'callback'
[20:17:27.081]    data/npc/lib/npcsystem/npchandler.lua:423: in function 'onCreatureSay'
[20:17:27.081]    data/npc/scripts/bank.lua:9: in function <data/npc/scripts/bank.lua:9>
 
try
Code:
if getPlayerTown(getCreatureByName(msg):lower()) ~= 7 or getPlayerTown(getCreatureByName(msg):lower()) ~= 9 then

Also, please use indentation so that the script can be read easier and faster.
http://lua-users.org/wiki/LuaStyleGuide :D

Code:
[5:39:37.182] [Error - NpcScript Interface]
[5:39:37.182] data/npc/scripts/bank.lua:onCreatureSay
[5:39:37.182] Description:
[5:39:37.182] data/npc/scripts/bank.lua:187: attempt to index a nil value
[5:39:37.182] stack traceback:
[5:39:37.182]    data/npc/scripts/bank.lua:187: in function 'callback'
[5:39:37.182]    data/npc/lib/npcsystem/npchandler.lua:423: in function 'onCreatureSay'
[5:39:37.183]    data/npc/scripts/bank.lua:9: in function <data/npc/scripts/bank.lua:9>
 
Back
Top