Ir para conteúdo
Banner com Efeitos

Featured Replies

Postado

Bom dia pessoal, estou com um problema no meu ot, eu baixei um ot 10.90 e ele não tinha quase nenhum npc, quando fui colocar o npc Bank, apareceu vários erros:

Lua Script Error: [Npc interface]
data/npc/scripts/Eva.lua:onCreatureSay
data/npc/scripts/Eva.lua:64: attempt to call global 'doPlayerDepositMoney' (a nil value)
stack traceback:
        [C]: in function 'doPlayerDepositMoney'
        data/npc/scripts/Eva.lua:64: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:411: in function 'onCreatureSay'
        data/npc/scripts/Eva.lua:8: in function <data/npc/scripts/Eva.lua:8>

 

pesquisei um pouco sobre esses erros e vi que era preciso adicionar umas coisas no 050 functions, acabei descobrindo que meu ot não tem o 050 functions... como posso fazer para que funcione o npc bank?

aqui está o script 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

  • Respostas 11
  • Visualizações 839
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local Topic, count, transfer = {}, {}, {} function onCreatureApp

Postado

Tenta esse, o que ta usando deve ser para tfs 0.4 e seu tfs acredito que seja versão maior.

 

Spoiler

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

local count = {}
local 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 voices = { {text = 'Better deposit your money in the bank where it\'s safe.'} }
npcHandler:addModule(VoiceModule:new(voices))

local function greetCallback(cid)
	count[cid], transfer[cid] = nil, nil
	return true
end

local function creatureSayCallback(cid, type, msg)
	if not npcHandler:isFocused(cid) then
		return false
	end
	local player = Player(cid)
---------------------------- help ------------------------
	if msgcontains(msg, 'bank account') then
		npcHandler:say({
			'Every Tibian has one. The big advantage is that you can access your money in every branch of the Tibian Bank! ...',
			'Would you like to know more about the {basic} functions of your bank account, the {advanced} functions, or are you already bored, perhaps?'
		}, cid)
		npcHandler.topic[cid] = 0
		return true
---------------------------- balance ---------------------
	elseif msgcontains(msg, 'balance') then
		npcHandler.topic[cid] = 0
		if player:getBankBalance() >= 100000000 then
			npcHandler:say('I think you must be one of the richest inhabitants in the world! Your account balance is ' .. player:getBankBalance() .. ' gold.', cid)
			return true
		elseif player:getBankBalance() >= 10000000 then
			npcHandler:say('You have made ten millions and it still grows! Your account balance is ' .. player:getBankBalance() .. ' gold.', cid)
			return true
		elseif player:getBankBalance() >= 1000000 then
			npcHandler:say('Wow, you have reached the magic number of a million gp!!! Your account balance is ' .. player:getBankBalance() .. ' gold!', cid)
			return true
		elseif player:getBankBalance() >= 100000 then
			npcHandler:say('You certainly have made a pretty penny. Your account balance is ' .. player:getBankBalance() .. ' gold.', cid)
			return true
		else
			npcHandler:say('Your account balance is ' .. player:getBankBalance() .. ' gold.', cid)
			return true
		end
---------------------------- deposit ---------------------
	elseif msgcontains(msg, 'deposit') then
		count[cid] = player:getMoney()
		if count[cid] < 1 then
			npcHandler:say('You do not have enough gold.', cid)
			npcHandler.topic[cid] = 0
			return false
		end
		if msgcontains(msg, 'all') then
			count[cid] = player:getMoney()
			npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
			npcHandler.topic[cid] = 2
			return true
		else
			if string.match(msg,'%d+') then
				count[cid] = getMoneyCount(msg)
				if count[cid] < 1 then
					npcHandler:say('You do not have enough gold.', cid)
					npcHandler.topic[cid] = 0
					return false
				end
				npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
				npcHandler.topic[cid] = 2
				return true
			else
				npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
				npcHandler.topic[cid] = 1
				return true
			end
		end
		if not isValidMoney(count[cid]) then
			npcHandler:say('Sorry, but you can\'t deposit that much.', cid)
			npcHandler.topic[cid] = 0
			return false
		end
	elseif npcHandler.topic[cid] == 1 then
		count[cid] = getMoneyCount(msg)
		if isValidMoney(count[cid]) then
			npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
			npcHandler.topic[cid] = 2
			return true
		else
			npcHandler:say('You do not have enough gold.', cid)
			npcHandler.topic[cid] = 0
			return true
		end
	elseif npcHandler.topic[cid] == 2 then
		if msgcontains(msg, 'yes') then
			if player:getMoney() >= tonumber(count[cid]) then
				player:depositMoney(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('You do not have enough gold.', cid)
			end
		elseif msgcontains(msg, 'no') then
			npcHandler:say('As you wish. Is there something else I can do for you?', cid)
		end
		npcHandler.topic[cid] = 0
		return true
---------------------------- withdraw --------------------
	elseif msgcontains(msg, 'withdraw') then
		if string.match(msg,'%d+') then
			count[cid] = getMoneyCount(msg)
			if isValidMoney(count[cid]) then
				npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
				npcHandler.topic[cid] = 7
			else
				npcHandler:say('There is not enough gold on your account.', cid)
				npcHandler.topic[cid] = 0
			end
			return true
		else
			npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
			npcHandler.topic[cid] = 6
			return true
		end
	elseif npcHandler.topic[cid] == 6 then
		count[cid] = getMoneyCount(msg)
		if isValidMoney(count[cid]) then
			npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
			npcHandler.topic[cid] = 7
		else
			npcHandler:say('There is not enough gold on your account.', cid)
			npcHandler.topic[cid] = 0
		end
		return true
	elseif npcHandler.topic[cid] == 7 then
		if msgcontains(msg, 'yes') then
			if player:getFreeCapacity() >= getMoneyWeight(count[cid]) then
				if not player:withdrawMoney(count[cid]) then
					npcHandler:say('There is not enough gold on your account.', cid)
				else
					npcHandler:say('Here you are, ' .. count[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)
				end
			else
				npcHandler:say('Whoah, hold on, you have no room in your inventory to carry all those coins. I don\'t want you to drop it on the floor, maybe come back with a cart!', cid)
			end
			npcHandler.topic[cid] = 0
		elseif msgcontains(msg, 'no') then
			npcHandler:say('The customer is king! Come back anytime you want to if you wish to {withdraw} your money.', cid)
			npcHandler.topic[cid] = 0
		end
		return true
---------------------------- transfer --------------------
	elseif msgcontains(msg, 'transfer') then
		npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
		npcHandler.topic[cid] = 11
	elseif npcHandler.topic[cid] == 11 then
		count[cid] = getMoneyCount(msg)
		if player:getBankBalance() < count[cid] then
			npcHandler:say('There is not enough gold on your account.', cid)
			npcHandler.topic[cid] = 0
			return true
		end
		if isValidMoney(count[cid]) then
			npcHandler:say('Who would you like transfer ' .. count[cid] .. ' gold to?', cid)
			npcHandler.topic[cid] = 12
		else
			npcHandler:say('There is not enough gold on your account.', cid)
			npcHandler.topic[cid] = 0
		end
	elseif npcHandler.topic[cid] == 12 then
		transfer[cid] = msg
		if player:getName() == transfer[cid] then
			npcHandler:say('Fill in this field with person who receives your gold!', cid)
			npcHandler.topic[cid] = 0
			return true
		end
		if playerExists(transfer[cid]) then
			npcHandler:say('So you would like to transfer ' .. count[cid] .. ' gold to ' .. transfer[cid] .. '?', cid)
			npcHandler.topic[cid] = 13
		else
			npcHandler:say('This player does not exist.', cid)
			npcHandler.topic[cid] = 0
		end
	elseif npcHandler.topic[cid] == 13 then
		if msgcontains(msg, 'yes') then
			if not player:transferMoneyTo(transfer[cid], count[cid]) then
				npcHandler:say('You cannot transfer money to this account.', cid)
			else
				npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. transfer[cid] ..'.', cid)
				transfer[cid] = nil
			end
		elseif msgcontains(msg, 'no') then
			npcHandler:say('Alright, is there something else I can do for you?', cid)
		end
		npcHandler.topic[cid] = 0
---------------------------- money exchange --------------
	elseif msgcontains(msg, 'change gold') then
		npcHandler:say('How many platinum coins would you like to get?', cid)
		npcHandler.topic[cid] = 14
	elseif npcHandler.topic[cid] == 14 then
		if getMoneyCount(msg) < 1 then
			npcHandler:say('Sorry, you do not have enough gold coins.', cid)
			npcHandler.topic[cid] = 0
		else
			count[cid] = getMoneyCount(msg)
			npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your gold coins into ' .. count[cid] .. ' platinum coins?', cid)
			npcHandler.topic[cid] = 15
		end
	elseif npcHandler.topic[cid] == 15 then
		if msgcontains(msg, 'yes') then
			if player:removeItem(2148, count[cid] * 100) then
				player:addItem(2152, count[cid])
				npcHandler:say('Here you are.', 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
		npcHandler.topic[cid] = 0
	elseif msgcontains(msg, 'change platinum') then
		npcHandler:say('Would you like to change your platinum coins into gold or crystal?', cid)
		npcHandler.topic[cid] = 16
	elseif npcHandler.topic[cid] == 16 then
		if msgcontains(msg, 'gold') then
			npcHandler:say('How many platinum coins would you like to change into gold?', cid)
			npcHandler.topic[cid] = 17
		elseif msgcontains(msg, 'crystal') then
			npcHandler:say('How many crystal coins would you like to get?', cid)
			npcHandler.topic[cid] = 19
		else
			npcHandler:say('Well, can I help you with something else?', cid)
			npcHandler.topic[cid] = 0
		end
	elseif npcHandler.topic[cid] == 17 then
		if getMoneyCount(msg) < 1 then
			npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
			npcHandler.topic[cid] = 0
		else
			count[cid] = getMoneyCount(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)
			npcHandler.topic[cid] = 18
		end
	elseif npcHandler.topic[cid] == 18 then
		if msgcontains(msg, 'yes') then
			if player:removeItem(2152, count[cid]) then
				player:addItem(2148, count[cid] * 100)
				npcHandler:say('Here you are.', 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
		npcHandler.topic[cid] = 0
	elseif npcHandler.topic[cid] == 19 then
		if getMoneyCount(msg) < 1 then
			npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
			npcHandler.topic[cid] = 0
		else
			count[cid] = getMoneyCount(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)
			npcHandler.topic[cid] = 20
		end
	elseif npcHandler.topic[cid] == 20 then
		if msgcontains(msg, 'yes') then
			if player:removeItem(2152, count[cid] * 100) then
				player:addItem(2160, count[cid])
				npcHandler:say('Here you are.', 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
		npcHandler.topic[cid] = 0
	elseif msgcontains(msg, 'change crystal') then
		npcHandler:say('How many crystal coins would you like to change into platinum?', cid)
		npcHandler.topic[cid] = 21
	elseif npcHandler.topic[cid] == 21 then
		if getMoneyCount(msg) < 1 then
			npcHandler:say('Sorry, you do not have enough crystal coins.', cid)
			npcHandler.topic[cid] = 0
		else
			count[cid] = getMoneyCount(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)
			npcHandler.topic[cid] = 22
		end
	elseif npcHandler.topic[cid] == 22 then
		if msgcontains(msg, 'yes') then
			if player:removeItem(2160, count[cid])  then
				player:addItem(2152, count[cid] * 100)
				npcHandler:say('Here you are.', cid)
			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
		npcHandler.topic[cid] = 0
	end
	return true
end

keywordHandler:addKeyword({'money'}, StdModule.say, {npcHandler = npcHandler, text = 'We can {change} money for you. You can also access your {bank account}.'})
keywordHandler:addKeyword({'change'}, StdModule.say, {npcHandler = npcHandler, text = '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\'.'})
keywordHandler:addKeyword({'bank'}, StdModule.say, {npcHandler = npcHandler, text = 'We can {change} money for you. You can also access your {bank account}.'})
keywordHandler:addKeyword({'advanced'}, StdModule.say, {npcHandler = npcHandler, text = 'Your bank account will be used automatically when you want to {rent} a house or place an offer on an item on the {market}. Let me know if you want to know about how either one works.'})
keywordHandler:addKeyword({'help'}, StdModule.say, {npcHandler = npcHandler, text = '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.'})
keywordHandler:addKeyword({'functions'}, StdModule.say, {npcHandler = npcHandler, text = '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.'})
keywordHandler:addKeyword({'basic'}, StdModule.say, {npcHandler = npcHandler, text = '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.'})
keywordHandler:addKeyword({'job'}, StdModule.say, {npcHandler = npcHandler, text = 'I work in this bank. I can change money for you and help you with your bank account.'})

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:setMessage(MESSAGE_GREET, "Welcome |PLAYERNAME|! What business do you have in the Tibian bank today?")
npcHandler:setMessage(MESSAGE_FAREWELL, "Good bye, |PLAYERNAME|.")
npcHandler:setMessage(MESSAGE_WALKAWAY, "Good bye, |PLAYERNAME|.")
npcHandler:addModule(FocusModule:new())

 

 

Discord: Naze#3578

 

Ter Linux Dentro de Windows com Acesso 'localhost' para testes e +

AutoLoot Otimizado Direto na Source (tfs 0.4/otx)

 

// Pirataria é crime, original é roubo, compartilhar é legal.

 

tumblr_muk78tEwDQ1qah4nko1_500.gif

Postado
  • Autor
4 minutos atrás, Naze disse:

Tenta esse, o que ta usando deve ser para tfs 0.4 e seu tfs acredito que seja versão maior.

 

  Ocultar conteúdo


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

local count = {}
local 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 voices = { {text = 'Better deposit your money in the bank where it\'s safe.'} }
npcHandler:addModule(VoiceModule:new(voices))

local function greetCallback(cid)
	count[cid], transfer[cid] = nil, nil
	return true
end

local function creatureSayCallback(cid, type, msg)
	if not npcHandler:isFocused(cid) then
		return false
	end
	local player = Player(cid)
---------------------------- help ------------------------
	if msgcontains(msg, 'bank account') then
		npcHandler:say({
			'Every Tibian has one. The big advantage is that you can access your money in every branch of the Tibian Bank! ...',
			'Would you like to know more about the {basic} functions of your bank account, the {advanced} functions, or are you already bored, perhaps?'
		}, cid)
		npcHandler.topic[cid] = 0
		return true
---------------------------- balance ---------------------
	elseif msgcontains(msg, 'balance') then
		npcHandler.topic[cid] = 0
		if player:getBankBalance() >= 100000000 then
			npcHandler:say('I think you must be one of the richest inhabitants in the world! Your account balance is ' .. player:getBankBalance() .. ' gold.', cid)
			return true
		elseif player:getBankBalance() >= 10000000 then
			npcHandler:say('You have made ten millions and it still grows! Your account balance is ' .. player:getBankBalance() .. ' gold.', cid)
			return true
		elseif player:getBankBalance() >= 1000000 then
			npcHandler:say('Wow, you have reached the magic number of a million gp!!! Your account balance is ' .. player:getBankBalance() .. ' gold!', cid)
			return true
		elseif player:getBankBalance() >= 100000 then
			npcHandler:say('You certainly have made a pretty penny. Your account balance is ' .. player:getBankBalance() .. ' gold.', cid)
			return true
		else
			npcHandler:say('Your account balance is ' .. player:getBankBalance() .. ' gold.', cid)
			return true
		end
---------------------------- deposit ---------------------
	elseif msgcontains(msg, 'deposit') then
		count[cid] = player:getMoney()
		if count[cid] < 1 then
			npcHandler:say('You do not have enough gold.', cid)
			npcHandler.topic[cid] = 0
			return false
		end
		if msgcontains(msg, 'all') then
			count[cid] = player:getMoney()
			npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
			npcHandler.topic[cid] = 2
			return true
		else
			if string.match(msg,'%d+') then
				count[cid] = getMoneyCount(msg)
				if count[cid] < 1 then
					npcHandler:say('You do not have enough gold.', cid)
					npcHandler.topic[cid] = 0
					return false
				end
				npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
				npcHandler.topic[cid] = 2
				return true
			else
				npcHandler:say('Please tell me how much gold it is you would like to deposit.', cid)
				npcHandler.topic[cid] = 1
				return true
			end
		end
		if not isValidMoney(count[cid]) then
			npcHandler:say('Sorry, but you can\'t deposit that much.', cid)
			npcHandler.topic[cid] = 0
			return false
		end
	elseif npcHandler.topic[cid] == 1 then
		count[cid] = getMoneyCount(msg)
		if isValidMoney(count[cid]) then
			npcHandler:say('Would you really like to deposit ' .. count[cid] .. ' gold?', cid)
			npcHandler.topic[cid] = 2
			return true
		else
			npcHandler:say('You do not have enough gold.', cid)
			npcHandler.topic[cid] = 0
			return true
		end
	elseif npcHandler.topic[cid] == 2 then
		if msgcontains(msg, 'yes') then
			if player:getMoney() >= tonumber(count[cid]) then
				player:depositMoney(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('You do not have enough gold.', cid)
			end
		elseif msgcontains(msg, 'no') then
			npcHandler:say('As you wish. Is there something else I can do for you?', cid)
		end
		npcHandler.topic[cid] = 0
		return true
---------------------------- withdraw --------------------
	elseif msgcontains(msg, 'withdraw') then
		if string.match(msg,'%d+') then
			count[cid] = getMoneyCount(msg)
			if isValidMoney(count[cid]) then
				npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
				npcHandler.topic[cid] = 7
			else
				npcHandler:say('There is not enough gold on your account.', cid)
				npcHandler.topic[cid] = 0
			end
			return true
		else
			npcHandler:say('Please tell me how much gold you would like to withdraw.', cid)
			npcHandler.topic[cid] = 6
			return true
		end
	elseif npcHandler.topic[cid] == 6 then
		count[cid] = getMoneyCount(msg)
		if isValidMoney(count[cid]) then
			npcHandler:say('Are you sure you wish to withdraw ' .. count[cid] .. ' gold from your bank account?', cid)
			npcHandler.topic[cid] = 7
		else
			npcHandler:say('There is not enough gold on your account.', cid)
			npcHandler.topic[cid] = 0
		end
		return true
	elseif npcHandler.topic[cid] == 7 then
		if msgcontains(msg, 'yes') then
			if player:getFreeCapacity() >= getMoneyWeight(count[cid]) then
				if not player:withdrawMoney(count[cid]) then
					npcHandler:say('There is not enough gold on your account.', cid)
				else
					npcHandler:say('Here you are, ' .. count[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)
				end
			else
				npcHandler:say('Whoah, hold on, you have no room in your inventory to carry all those coins. I don\'t want you to drop it on the floor, maybe come back with a cart!', cid)
			end
			npcHandler.topic[cid] = 0
		elseif msgcontains(msg, 'no') then
			npcHandler:say('The customer is king! Come back anytime you want to if you wish to {withdraw} your money.', cid)
			npcHandler.topic[cid] = 0
		end
		return true
---------------------------- transfer --------------------
	elseif msgcontains(msg, 'transfer') then
		npcHandler:say('Please tell me the amount of gold you would like to transfer.', cid)
		npcHandler.topic[cid] = 11
	elseif npcHandler.topic[cid] == 11 then
		count[cid] = getMoneyCount(msg)
		if player:getBankBalance() < count[cid] then
			npcHandler:say('There is not enough gold on your account.', cid)
			npcHandler.topic[cid] = 0
			return true
		end
		if isValidMoney(count[cid]) then
			npcHandler:say('Who would you like transfer ' .. count[cid] .. ' gold to?', cid)
			npcHandler.topic[cid] = 12
		else
			npcHandler:say('There is not enough gold on your account.', cid)
			npcHandler.topic[cid] = 0
		end
	elseif npcHandler.topic[cid] == 12 then
		transfer[cid] = msg
		if player:getName() == transfer[cid] then
			npcHandler:say('Fill in this field with person who receives your gold!', cid)
			npcHandler.topic[cid] = 0
			return true
		end
		if playerExists(transfer[cid]) then
			npcHandler:say('So you would like to transfer ' .. count[cid] .. ' gold to ' .. transfer[cid] .. '?', cid)
			npcHandler.topic[cid] = 13
		else
			npcHandler:say('This player does not exist.', cid)
			npcHandler.topic[cid] = 0
		end
	elseif npcHandler.topic[cid] == 13 then
		if msgcontains(msg, 'yes') then
			if not player:transferMoneyTo(transfer[cid], count[cid]) then
				npcHandler:say('You cannot transfer money to this account.', cid)
			else
				npcHandler:say('Very well. You have transferred ' .. count[cid] .. ' gold to ' .. transfer[cid] ..'.', cid)
				transfer[cid] = nil
			end
		elseif msgcontains(msg, 'no') then
			npcHandler:say('Alright, is there something else I can do for you?', cid)
		end
		npcHandler.topic[cid] = 0
---------------------------- money exchange --------------
	elseif msgcontains(msg, 'change gold') then
		npcHandler:say('How many platinum coins would you like to get?', cid)
		npcHandler.topic[cid] = 14
	elseif npcHandler.topic[cid] == 14 then
		if getMoneyCount(msg) < 1 then
			npcHandler:say('Sorry, you do not have enough gold coins.', cid)
			npcHandler.topic[cid] = 0
		else
			count[cid] = getMoneyCount(msg)
			npcHandler:say('So you would like me to change ' .. count[cid] * 100 .. ' of your gold coins into ' .. count[cid] .. ' platinum coins?', cid)
			npcHandler.topic[cid] = 15
		end
	elseif npcHandler.topic[cid] == 15 then
		if msgcontains(msg, 'yes') then
			if player:removeItem(2148, count[cid] * 100) then
				player:addItem(2152, count[cid])
				npcHandler:say('Here you are.', 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
		npcHandler.topic[cid] = 0
	elseif msgcontains(msg, 'change platinum') then
		npcHandler:say('Would you like to change your platinum coins into gold or crystal?', cid)
		npcHandler.topic[cid] = 16
	elseif npcHandler.topic[cid] == 16 then
		if msgcontains(msg, 'gold') then
			npcHandler:say('How many platinum coins would you like to change into gold?', cid)
			npcHandler.topic[cid] = 17
		elseif msgcontains(msg, 'crystal') then
			npcHandler:say('How many crystal coins would you like to get?', cid)
			npcHandler.topic[cid] = 19
		else
			npcHandler:say('Well, can I help you with something else?', cid)
			npcHandler.topic[cid] = 0
		end
	elseif npcHandler.topic[cid] == 17 then
		if getMoneyCount(msg) < 1 then
			npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
			npcHandler.topic[cid] = 0
		else
			count[cid] = getMoneyCount(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)
			npcHandler.topic[cid] = 18
		end
	elseif npcHandler.topic[cid] == 18 then
		if msgcontains(msg, 'yes') then
			if player:removeItem(2152, count[cid]) then
				player:addItem(2148, count[cid] * 100)
				npcHandler:say('Here you are.', 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
		npcHandler.topic[cid] = 0
	elseif npcHandler.topic[cid] == 19 then
		if getMoneyCount(msg) < 1 then
			npcHandler:say('Sorry, you do not have enough platinum coins.', cid)
			npcHandler.topic[cid] = 0
		else
			count[cid] = getMoneyCount(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)
			npcHandler.topic[cid] = 20
		end
	elseif npcHandler.topic[cid] == 20 then
		if msgcontains(msg, 'yes') then
			if player:removeItem(2152, count[cid] * 100) then
				player:addItem(2160, count[cid])
				npcHandler:say('Here you are.', 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
		npcHandler.topic[cid] = 0
	elseif msgcontains(msg, 'change crystal') then
		npcHandler:say('How many crystal coins would you like to change into platinum?', cid)
		npcHandler.topic[cid] = 21
	elseif npcHandler.topic[cid] == 21 then
		if getMoneyCount(msg) < 1 then
			npcHandler:say('Sorry, you do not have enough crystal coins.', cid)
			npcHandler.topic[cid] = 0
		else
			count[cid] = getMoneyCount(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)
			npcHandler.topic[cid] = 22
		end
	elseif npcHandler.topic[cid] == 22 then
		if msgcontains(msg, 'yes') then
			if player:removeItem(2160, count[cid])  then
				player:addItem(2152, count[cid] * 100)
				npcHandler:say('Here you are.', cid)
			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
		npcHandler.topic[cid] = 0
	end
	return true
end

keywordHandler:addKeyword({'money'}, StdModule.say, {npcHandler = npcHandler, text = 'We can {change} money for you. You can also access your {bank account}.'})
keywordHandler:addKeyword({'change'}, StdModule.say, {npcHandler = npcHandler, text = '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\'.'})
keywordHandler:addKeyword({'bank'}, StdModule.say, {npcHandler = npcHandler, text = 'We can {change} money for you. You can also access your {bank account}.'})
keywordHandler:addKeyword({'advanced'}, StdModule.say, {npcHandler = npcHandler, text = 'Your bank account will be used automatically when you want to {rent} a house or place an offer on an item on the {market}. Let me know if you want to know about how either one works.'})
keywordHandler:addKeyword({'help'}, StdModule.say, {npcHandler = npcHandler, text = '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.'})
keywordHandler:addKeyword({'functions'}, StdModule.say, {npcHandler = npcHandler, text = '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.'})
keywordHandler:addKeyword({'basic'}, StdModule.say, {npcHandler = npcHandler, text = '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.'})
keywordHandler:addKeyword({'job'}, StdModule.say, {npcHandler = npcHandler, text = 'I work in this bank. I can change money for you and help you with your bank account.'})

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:setMessage(MESSAGE_GREET, "Welcome |PLAYERNAME|! What business do you have in the Tibian bank today?")
npcHandler:setMessage(MESSAGE_FAREWELL, "Good bye, |PLAYERNAME|.")
npcHandler:setMessage(MESSAGE_WALKAWAY, "Good bye, |PLAYERNAME|.")
npcHandler:addModule(FocusModule:new())

 

 

 

Deu isso aqui oh

 Lua Script Error: [Npc interface]
data/npc/scripts/Eva.lua
data/npc/scripts/Eva.lua:14: attempt to index global 'VoiceModule' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/npc/scripts/Eva.lua:14: in main chunk
        [C]: in function 'createNpc'
        data/talkactions/scripts/place_npc.lua:11: in function <data/talkactions/scripts/place_npc.lua:1>
[Warning - NpcScript::NpcScript] Can not load script: Eva.lua

Postado
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 q = db.getResult('SELECT name FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
        if q:getID() == -1 then
                return
        end
        local r = q:getDataString('name')
        q:free()
        return r
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])
                        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])
                        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 then
                                transfer[cid] = msg
                                npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '?', cid)
                                Topic[cid] = 7
                        elseif findPlayer(msg):lower() == msg:lower() 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.', 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])
                                doPlayerSetBalance(v, getPlayerBalance(v) + count[cid])
                                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])
                                db.executeQuery('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())

-- 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

 

Postado
  • Autor
1 minuto atrás, ikaroangelo21 disse:

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 q = db.getResult('SELECT name FROM players WHERE name=' .. db.escapeString(name) .. ' LIMIT 1'), nil
        if q:getID() == -1 then
                return
        end
        local r = q:getDataString('name')
        q:free()
        return r
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])
                        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])
                        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 then
                                transfer[cid] = msg
                                npcHandler:say('Would you really like to transfer ' .. count[cid] .. ' gold to ' .. getPlayerName(v) .. '?', cid)
                                Topic[cid] = 7
                        elseif findPlayer(msg):lower() == msg:lower() 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.', 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])
                                doPlayerSetBalance(v, getPlayerBalance(v) + count[cid])
                                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])
                                db.executeQuery('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())

-- 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

 

 

funcionou!!! mt obrigado! +rep

2 minutos atrás, kinomoto disse:

funcionou!!! mt obrigado! +rep

 

tentei usar o transfer e apareceu um erro 

Lua Script Error: [Npc interface]
data/npc/scripts/Eva.lua:onCreatureSay
data/npc/scripts/Eva.lua:18: attempt to call field 'getResult' (a nil value)
stack traceback:
        [C]: in function 'getResult'
        data/npc/scripts/Eva.lua:18: in function 'findPlayer'
        data/npc/scripts/Eva.lua:172: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:411: in function 'onCreatureSay'
        data/npc/scripts/Eva.lua:9: in function <data/npc/scripts/Eva.lua:9>

Lua Script Error: [Npc interface]
data/npc/scripts/Eva.lua:onCreatureSay
data/npc/scripts/Eva.lua:18: attempt to call field 'getResult' (a nil value)
stack traceback:
        [C]: in function 'getResult'
        data/npc/scripts/Eva.lua:18: in function 'findPlayer'
        data/npc/scripts/Eva.lua:172: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:411: in function 'onCreatureSay'
        data/npc/scripts/Eva.lua:9: in function <data/npc/scripts/Eva.lua:9>

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo