Jump to content
  • 0

NPC que troca varios itens por x item em determinado tempo


Amoebinha
 Share

Question

Bom dia pessoal, tudo bom? eu tenho um script que o feetads fez para mim totalmente funcional, porém ela está bugada, quando o player vai lá e escreve direto ( receber ), consegue pegar o item sem perder os outros.

Edited by Amoebinha
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Veja se o problema é corrigido:

 

-- make by FeeTads //assistente TibiaKing

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
 
function onCreatureAppear(cid)         npcHandler:onCreatureAppear(cid)         end
function onCreatureDisappear(cid)      npcHandler:onCreatureDisappear(cid)         end
function onCreatureSay(cid, type, msg)   npcHandler:onCreatureSay(cid, type, msg:lower())   end
function onThink()                  npcHandler:onThink()                  end
local talkState = {}

-- function de tempo //NÃO MEXER
local function getTimeString(self)
    local format = {
        {'dia', self / 60 / 60 / 24},
        {'hora', self / 60 / 60 % 24},
        {'minuto', self / 60 % 60},
        {'segundo', self % 60}
    }

    local out = {}
    for k, t in ipairs(format) do
        local v = math.floor(t[2])
        if(v > 0) then
            table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' e ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
        end
    end
    local ret = table.concat(out)
    if ret:len() < 16 and ret:find('segundo') then
        local a, b = ret:find(' e ')
        ret = ret:sub(b+1)
    end
    return ret
end


local itemid = {						-- id dos items necessários pra troca
	[1] = {item = 7415, count = 1},     -- item = ID do item  // count = quantidade de items
}		

local save_items = 0						-- variavel apenas pra salvar a quantidade de items //nao mexer
local tempo_de_espera = 1    				-- em minutos	
local storage = 58458711					-- storage // se não souber, não mexer
local storageAceitar = 58458712 			-- storage // se não souber, não mexer
local storageVerifica = 99983812
local item_trocado = 7775					-- id do item que vira após a troca
local trocar_mais_de_uma_vez = true  		-- o player pode trocar varias vezes esse 4 items por 1?  //true pode trocar mais de 1x //false só troca uma vez
 
function creatureSayCallback(cid, type, msg)
   if(not npcHandler:isFocused(cid)) then
      return false
   end
 
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
	local msg = string.lower(msg)
	
	if isInArray({"items", "items", "lista"}, msg) then							-- se o player disser "lista"
		local lista = ''														-- string pra salvar a lista de items
		for i=1, #itemid do	
			lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item)		-- salva a quantidade e o nome dos items
			if i+1 <= #itemid then
				lista = lista..', '														-- caso ainda tenha items, coloca uma virgula pra separar //n mexer
			end
		end
		selfSay("A lista de items são: {"..lista.."}", cid)								-- mostra a lista de items
		selfSay("Você {aceita} pegar esses items?", cid)
		talkState[talkUser] = 10
	elseif isInArray({"no", "não", "nop", "not"}, msg) and talkState[talkUser] == 10 then	-- caso o player n aceite, só da BYE
		selfSay("OK, Bye!", cid)
		talkState[talkUser] = 0
		npcHandler:releaseFocus(cid)
	elseif isInArray({"yes", "aceito", "sim"}, msg) and talkState[talkUser] == 10 then		-- se o player aceitar
		selfSay("OK! estarei a espera!", cid)
		setPlayerStorageValue(cid, storageAceitar, 1)										-- seta a storage pra1
		talkState[talkUser] = 0
		npcHandler:releaseFocus(cid)
	elseif isInArray({"trocar","troca","trocar item"}, msg) then								-- mensagem do player
		if getPlayerStorageValue(cid, storageAceitar) == 1 then								-- se o player ja tiver aceitado a missão
			local lista = ''
			for i=1, #itemid do
				lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item)
				if i+1 <= #itemid then
					lista = lista..', '
				end
			end
			selfSay("Você deseja trocar {"..lista.."} pelo supremo item?", cid)				-- msg do NPC mostrando a lista
			talkState[talkUser] = 2
		else
			selfSay("Primeiro gostaria de ver a {lista} de items?", cid)					-- se o player não tiver aceitado, pede pra ele ver a lista
			talkState[talkUser] = 11
		end
	elseif isInArray({"no","não","bye","not"}, msg) and talkState[talkUser] == 11 then
		selfSay("OK, Bye!", cid)
		talkState[talkUser] = 0
		npcHandler:releaseFocus(cid)
	elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 11 then
		local lista = ''
		for i=1, #itemid do
			lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item)
			if i+1 <= #itemid then
				lista = lista..', '
			end
		end
		selfSay("A lista de items são: {"..lista.."}", cid)
		selfSay("Você {aceita} pegar esses items?", cid)
		talkState[talkUser] = 10																		-- basicamente mostra a lista...
    elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 2 then
		if trocar_mais_de_uma_vez == false and getPlayerStorageValue(cid, storage) ~= -1 then			-- se puder trocar apenas 1x deixar false
			selfSay("Desculpe, você já fez sua troca!", cid)
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
			return true
		 end
		for i=1, #itemid do																	-- for pra fazer a contagem dos items
			if getPlayerItemCount(cid, itemid[i].item) >= itemid[i].count then									-- caso o player tenha o item
				save_items = save_items + 1													-- salva na variavel
                setPlayerStorageValue(cid, storageVerifica, 1)
			end
		end
		if save_items >= #itemid and getPlayerStorageValue(cid, storageVerifica) >= 1 then														-- se tiver todos os items necessários
			selfSay("Parabéns! agora vou craftar seu item, ele irá demorar "..getTimeString(tempo_de_espera*60).." pra ficar pronto.", cid)		-- manda a mensagem
			setPlayerStorageValue(cid, storage, os.time() + (tempo_de_espera*60))	-- seta a storage pra 60 minutos
            setPlayerStorageValue(cid, storageVerifica, 0)											
			for i=1, #itemid do
				doPlayerRemoveItem(cid, itemid[i].item, itemid[i].count)																		-- remove os items do player
			end
		else
			selfSay("Desculpe, você não tem os items necessários!", cid)									-- mensagem caso não tenha os items necessários
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
	elseif isInArray({"no","não","nao","not"}, msg) and talkState[talkUser] == 2 then						-- caso o player não queira trocar, só da tchau
		 selfSay("Tudo bem então, Bye!", cid)
		 talkState[talkUser] = 0
		 npcHandler:releaseFocus(cid)
	elseif isInArray({"receber","receber item"}, msg) then															-- caso o player digite "receber"
		if (getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) > 1) then	-- checa se já passou [tempo de espera], e não é 0
      		local new_item = doCreateItemEx(item_trocado, 1)
			local receive = doPlayerAddItemEx(cid, new_item)
			if receive == RETURNVALUE_NOERROR then								-- caso o player tenha slot na bp, etc..
				selfSay("Parabéns! seu item está entregue, bom jogo!", cid)											-- msg do NPC
				setPlayerStorageValue(cid, storage, 0)																-- seta a storage do player pra 0
				talkState[talkUser] = 0
				npcHandler:releaseFocus(cid)
			else
				selfSay("Seu item está pronto, deixe espaço em sua BP!", cid)										-- caso não consiga entregar o item só pede pra deixar espaço	
				talkState[talkUser] = 0
				npcHandler:releaseFocus(cid)
			end
		elseif getPlayerStorageValue(cid, storage) - os.time() > 0 then
			selfSay("Seu item {não está pronto}, volte em "..getTimeString((getPlayerStorageValue(cid, storage)-os.time()))..".", cid)	-- caso ainda não esteja pronto o item
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		elseif getPlayerStorageValue(cid, storage) < 1 then
			selfSay("Você não me entregou nenhum item ainda!", cid)	-- caso ainda não esteja pronto o item
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
	end
 
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...