Ir para conteúdo
  • Cadastre-se

(Resolvido)NPC Teleporta Storange e Level, Ajuda por favor


Ir para solução Resolvido por .Smile,

Posts Recomendados

Ola, consegui um script de npc que da travel por storage aqui no tibiaking, e fiz uma pequena modificação para da travel dependendo o level. Mas como esse teleporte vai fazer parte de uma quest gostaria que ao finalizar a quest e obter a ultima storage o npc não fizesse mais o teleporte. Por isso também modifiquei para tentar, mas acontece q apesar de não dar nenhum erro, o npc não da mais o teleporte depois da primeira fala.

 

Essa é a script do npc funcionando perfeitamente, verificando o level e fazendo o teleporte

local DESTINO = {x = 160, y = 54, z = 7} -- POSIÇÃO DE DESTINO
 
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 creatureSayCallback(cid, type, msg)
   if(not npcHandler:isFocused(cid)) then
      return false
   end
 
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
   if msgcontains(msg, "tentar") then
      selfSay("Você realmente deseja tentar obter aprovação, achar o caminho de volta pode ser muito dificil se não conseguir?", cid)
      talkState[talkUser] = 1
   elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
      if getPlayerLevel(cid) >= 400 then
         selfSay("Boa sorte!", cid)
         doSendMagicEffect(getThingPos(cid), 10)
         npcHandler:releaseFocus(cid)
         doTeleportThing(cid, DESTINO)
         doSendMagicEffect(DESTINO, 10)
      else
         selfSay("Me desculpe, mas você não tem level necessario para obter aprovação. Volte quando atingir level 400.", cid)
      end
      talkState[talkUser] = 0
   end
 
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

Essa é que tentei modificar novamente agr colocando para se ele não tiver a storage ele continua o teleporte, caso ele ja tenha a storage fala que já obteve finaliza.

Mas acontece q ele está verificando se tem a storage corretamente, e fala a segunda fala perguntando se quer "tentar", e apos fala o yes ele não faz o teleporte.

local DESTINO = {x = 160, y = 54, z = 7} -- POSIÇÃO DE DESTINO
 
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 creatureSayCallback(cid, type, msg)
   if(not npcHandler:isFocused(cid)) then
      return false
   end
 
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
   if msgcontains(msg, "tentar") then
	if getPlayerStorageValue(cid, 13540) >= 0 then
      selfSay("Você realmente deseja tentar obter aprovação, achar o caminho de volta pode ser muito dificil se não conseguir?", cid)
      talkState[talkUser] = 1
   elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
      if getPlayerLevel(cid) >= 400 then
         selfSay("Boa sorte!", cid)
         doSendMagicEffect(getThingPos(cid), 10)
         npcHandler:releaseFocus(cid)
         doTeleportThing(cid, DESTINO)
         doSendMagicEffect(DESTINO, 10)
      else
         selfSay("Me desculpe, mas você não tem level necessario para obter aprovação. Volte quando atingir level 400.", cid)
      end
    else
       selfSay("Você ja obteve aprovação.", cid)
    end

      talkState[talkUser] = 0
   end
 
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Poderiam me indicar o erro e como corrigi-lo, pois ele não está funcionando mas não da nenhum aviso na distro. Obrigado desde já.

Editado por Naze (veja o histórico de edições)

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

Link para o post
Compartilhar em outros sites
  • Solução
local DESTINO = {x = 160, y = 54, z = 7} -- POSIÇÃO DE DESTINO
 
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 creatureSayCallback(cid, type, msg)
   if(not npcHandler:isFocused(cid)) then
      return false
   end
 
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
  if getPlayerStorageValue(cid, 12345) > 0 then -- STORAGE
      selfSay('Você já fez a quest',cid)
      return false
   end
  
   if msgcontains(msg, "tentar") then
      selfSay("Você realmente deseja tentar obter aprovação, achar o caminho de volta pode ser muito dificil se não conseguir?", cid)
      talkState[talkUser] = 1
   elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
      if getPlayerLevel(cid) >= 400 then
         selfSay("Boa sorte!", cid)
         doSendMagicEffect(getThingPos(cid), 10)
         npcHandler:releaseFocus(cid)
         doTeleportThing(cid, DESTINO)
         doSendMagicEffect(DESTINO, 10)
      else
         selfSay("Me desculpe, mas você não tem level necessario para obter aprovação. Volte quando atingir level 400.", cid)
      end
      talkState[talkUser] = 0
   end
 
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

Editado por .Smile (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Obrigado funcionou esse que me passou, mas acabei mudando um pouco antes de ver sua resposta e também consegui um que deu certo, mas muito obrigado.

 

Esse é o que vou usar, e também está funcionando:

local DESTINO = {x = 2241, y = 2374, z = 7} -- POSIÇÃO DE DESTINO
 
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 creatureSayCallback(cid, type, msg)
    if (not npcHandler:isFocused(cid)) then
        return false
    end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
 
	if msgcontains(msg, "ancient paradise") then
		if getPlayerStorageValue(cid, 100101) >= 1 then
		selfSay("Você ja obteve a aprovação, porque está ocupando meu tempo?", cid)
		npcHandler:onCreatureDisappear(cid)
		else
		doNPCTalkALot(cid, getNpcCid(), 1000, {"Jovem Heroi, Ancient Paradise acreditamos que seja um continente imensuravel, e sua localização foi descoberta por navegadores, e essa ilha a nomeamos como Small Paradise, a primeira ilha antes de chegar em Ancient Paradise Island.", "Eu estou encarregado de aprovar novos aventureiro nessa ilha, se passar pelo meu {teste} podera ir sem mais restrições para Ancient Paradise e também desfrutar dos misterios dessa Small Paradise."})
		talkState[talkUser] = 1
		end
	elseif msgcontains(msg, "teste") and talkState[talkUser] == 1 then
		talkState[talkUser] = 2
		doNPCTalkALot(cid, getNpcCid(), 1000, {"Veja bem, meu teste é muito simples, essa Smalll Paradise está repleta de monstros um tanto curioso, então por isso resolvemos usar ela para fazer esse teste.", "Você vai precisar escontrar um báu deixado por mim em uma determinada parte da ilha, após encontra recebera um presente por sua conquista, e também te darei acesso imediato a Ancient Paradise, deseja {tentar} obeter aprovação agora?"})

	elseif msgcontains(msg, "tentar") and talkState[talkUser] == 2 then
		talkState[talkUser] = 3
		selfSay("Você realmente deseja tentar obter aprovação, achar o caminho de volta pode ser muito dificil se não conseguir?", cid)

	elseif msgcontains(msg, "yes") and talkState[talkUser] == 3 then
		if getPlayerLevel(cid) >= 400 then
		doNPCTalkALot(cid, getNpcCid(), 2000, {"Para obter sua aprovação você vai precisar busca nesta ilha o baú que contém um presente especial pra você. Se obter isso te teleportarei novamente para vc obter acesso a Ancient Paradise, e também poderá explorar o restante dessa Small Paradise dizem que contém tesouros.", "Jovem herói, não que eu teja olhando para baixo em você, mas você não me parece que possa passar a aprovação com apenas isso... Por isso vou te dar um aviso e também conta como ajuda já que vai saber o que enfrentar, cuidado cons dragões.","Tome esse {machete} também vai precisar."})
		local bp = doPlayerAddItem(cid, 1987, 1)
		doAddContainerItem(bp, 2420, 1)
		doSendMagicEffect(getThingPos(cid), 10)
		npcHandler:releaseFocus(cid)
		doTeleportThing(cid, DESTINO)
		doSendMagicEffect(DESTINO, 10)
		else
		selfSay("Me desculpe, mas você não tem level necessario para obter aprovação. Volte quando atingir level 400.", cid)
		end
	end
	return true
	end


npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
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

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo