• 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 banker scripts get's - after to much mony..

TKO

Syphero Owner!
Joined
Mar 10, 2008
Messages
2,252
Reaction score
27
Location
Sweden
hey 1 of my players deposit alot of mony and when he did that he got a -213123123123 then he want the mony back he could couse he said you dont have Enough money

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

local Topic, count, transferTo_name = {}, {}, {}
local balance_storage = 8996

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(string)
	local b, e = string:find("%d+")
	return b and e and tonumber(string:sub(b, e)) or -1
end

local function getPlayerBalance(cid)
	return getPlayerStorageValue(cid, balance_storage)
end

local function playerExists(name)
	local ret, _ret = 0, db.getResult("SELECT `name` FROM `players` WHERE `name` = '" .. db.escapeString(name) .. "';")
	if _ret:getID() ~= -1 then
		ret = _ret:getDataString("name")
	end
	_ret:free()
	return ret
end

function greetCallback(cid)
	Topic[cid], count[cid], transferTo_name[cid] = 0, nil, nil
	return true
end

function creatureSayCallback(cid, type, msg)
	if not npcHandler:isFocused(cid) then
		return false
	end

	if getPlayerBalance(cid) == -1 then
		setPlayerStorageValue(cid, balance_storage, 0)
	end

	if msgcontains(msg, 'balance') then
		npcHandler:say("Your account balance is " .. getPlayerBalance(cid) .. " gold.", cid)
		Topic[cid] = 0
	elseif msgcontains(msg, 'deposit') and msgcontains(msg, 'all') then
		if getPlayerMoney(cid) > 0 then
			count[cid] = getPlayerMoney(cid)
			npcHandler:say("Would you really like to deposit " .. count[cid] .. " gold?", cid)
			Topic[cid] = 2
		else
			npcHandler:say("Please tell me how much gold it is you would like to deposit.", cid)
			Topic[cid] = 1
		end
	elseif msgcontains(msg, 'deposit') then
		if getCount(msg) == 0 then
			npcHandler:say("You are joking, aren't you??", cid)
			Topic[cid] = 0
		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] = 0
			end
		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
		else
			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] = 0
			end
		end
	elseif msgcontains(msg, 'yes') and Topic[cid] == 2 then
		if getPlayerMoney(cid) >= count[cid] then
			doPlayerRemoveMoney(cid, count[cid])
			setPlayerStorageValue(cid, balance_storage, getPlayerBalance(cid) + count[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] = 0
	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] = 0
	elseif msgcontains(msg, 'withdraw') then
		if getCount(msg) == 0 then
			npcHandler:say("Sure, you want nothing you get nothing!", cid)
			Topic[cid] = 0
		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] = 0
			end
		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
		else
			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] = 0
			end
		end
	elseif msgcontains(msg, 'yes') and Topic[cid] == 4 then
		if getPlayerBalance(cid) >= count[cid] then
			doPlayerAddMoney(cid, count[cid])
			setPlayerStorageValue(cid, balance_storage, getPlayerBalance(cid) - count[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] = 0
	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] = 0
	elseif msgcontains(msg, 'transfer') then
		if getCount(msg) == 0 then
			npcHandler:say("Please think about it. Okay?", cid)
			Topic[cid] = 0
		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] = 0
			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] = 0
			end
		end
	elseif Topic[cid] == 6 then
		if isPlayer(getPlayerByName(msg)) then
			if getPlayerBalance(cid) >= count[cid] then
				transferTo_name[cid] = msg
				npcHandler:say("Would you really like to transfer " .. count[cid] .. " gold to " .. transferTo_name[cid] .. "?", cid)
				Topic[cid] = 7
			else
				npcHandler:say("There is not enough gold on your account.", cid)
				Topic[cid] = 0
			end
		elseif playerExists(msg):lower() == msg:lower() then
			if getPlayerBalance(cid) >= count[cid] then
				transferTo_name[cid] = msg
				npcHandler:say("Would you really like to transfer " .. count[cid] .. " gold to " .. playerExists(msg) .. "?", cid)
				Topic[cid] = 7
			else
				npcHandler:say("There is not enough gold on your account.", cid)
				count[cid] = 0
				Topic[cid] = 0
			end
		else
			npcHandler:say("This player does not exist.", cid)
			Topic[cid] = 0
		end
	elseif Topic[cid] == 7 and msgcontains(msg, 'yes') then
		if isPlayer(getPlayerByName(transferTo_name[cid])) then
			if getPlayerBalance(cid) >= count[cid] then
				setPlayerStorageValue(cid, balance_storage, getPlayerBalance(cid) - count[cid])
				setPlayerStorageValue(getPlayerByName(transferTo_name[cid]), balance_storage, getPlayerStorageValue(getPlayerByName(transferTo_name[cid]), balance_storage) + count[cid])
			
				npcHandler:say("Very well. You have transferred " .. count[cid] .. " gold to " .. transferTo_name[cid] .. ".", cid)
				Topic[cid] = 0
			else
				npcHandler:say("There is not enough gold on your account.", cid)
				Topic[cid] = 0
			end
		elseif playerExists(transferTo_name[cid]):lower() == transferTo_name[cid]:lower() then
			if getPlayerBalance(cid) >= count[cid] then
				setPlayerStorageValue(cid, balance_storage, getPlayerBalance(cid) - count[cid])
				db.executeQuery("UPDATE `player_storage` SET `value` = `value` + '" .. count[cid] .. "' WHERE `player_id` = (SELECT `id` FROM `players` WHERE `name` = '" .. escapeString(transferTo_name[cid]) .. "') AND `key` = '" .. balance_storage .. "'")
				npcHandler:say("Very well. You have transferred " .. count[cid] .. " gold to " .. playerExists(transferTo_name[cid]) .. ".", cid)
			else
				npcHandler:say("There is not enough gold on your account.", cid)
			end
		else
			npcHandler:say("This player does not exist.", cid)
		end
		Topic[cid] = 0
	elseif Topic[cid] == 7 and msgcontains(msg, 'no') then
		npcHandler:say("Alright, is there something else I can do for you?", cid)
		Topic[cid] = 0
	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 or getCount(msg) == 0 then
			npcHandler:say("Hmm, can I help you with something else?", cid)
			Topic[cid] = 0
		else
			count[cid] = 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] = 0
	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] = 0
		end
	elseif Topic[cid] == 11 then
		if getCount(msg) == -1 or getCount(msg) == 0 then
			npcHandler:say("Hmm, can I help you with something else?", cid)
			Topic[cid] = 0
		else
			count[cid] = 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] = 0
	elseif Topic[cid] == 13 then
		if getCount(msg) == -1 or getCount(msg) == 0 then
			npcHandler:say("Hmm, can I help you with something else?", cid)
			Topic[cid] = 0
		else
			count[cid] = 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] = 0
	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] = 0
		else
			count[cid] = 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] = 0
	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] = 0
	elseif msgcontains(msg, 'bank') then
		npcHandler:say("We can change money for you. You can also access your bank account.", cid)
		Topic[cid] = 0
	end
	return true
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Last edited:
I dont get any error.. if you put in much mony to him you get - instead of noting ifront like you usely have 1000gp but when you deposit more you get -10000 so i wanna know how to fix so they cant get -
 
I dont get any error.. if you put in much mony to him you get - instead of noting ifront like you usely have 1000gp but when you deposit more you get -10000 so i wanna know how to fix so they cant get -

you can't fix it i think, that's what happens when someone deposits 2^32 gold
 
You can use this one:
http://otland.net/f83/banker-npc-forgotten-server-6709/

Its almost same, with few bug fixes. It doesn't use storage values as your current script does, so you'll need to make this mysql query to kept your old players balance.

UPDATE players, player_storage SET balance = (SELECT value FROM player_storage WHERE `key` = 8996 AND player_storage.player_id = players.id) WHERE player_storage.player_id = players.id
 
Back
Top