Ir para conteúdo
  • Cadastre-se

(Resolvido)[PEDIDO] NPC com varias missões


Ir para solução Resolvido por Wakon,

Posts Recomendados

Galera, eu preciso de um NPC com várias missions e tipo, não pode fazer a próxima mission e não tiver feita a atual e claro, no final ganha um storage, NÃO GANHA RECOMPENSAS NENHUMA, só storage no final e como eu disse, não pode fazer a próxima, caso não tenha a atual.. séria assim as falas:

 

NPC: Olá (playername) estou meio perdido com a correria, vc pode me ajudar com uma missao?
 
player: missao
 
NPC: Certo, vou precisar da sua ajuda, meus irmaos estao com alguns de meus pertences, vc poderia recolher eles de volta para mim?
 
player: recolher
 
NPC: Certo, meu primeiro irmao vive em uma cidade onde habitam todos os tipos de orcs, porem ele vive fora dessa cidade, em uma casa na beira da areia, busque meu pertence e eu lhe informo o proximo passo, mas cuidado, ele tem uma Hydra como animal de estimacao, nao tente enganar-lo.
 
player: pertence
 
NPC: Voce conseguiu recolher meu pertence?
 
player: yes
 
NPC: Certo, muito obrigado. O meu proximo pertence esta com meu irmao Phill, ele habita nos montes mais gelados desse mundo, perto dos barbaros, dizem que as vezes Ghazbaran aparece por la, pegue meu item e traga de volta, mas cuidado, ele tem um Frost Dragon como animal de estimacao, nao tente enganar-lo.
 
player: item
 
NPC: Voce recolheu meu item?
 
player: yes
 
NPC: Certo, muito obrigado. O meu pertence mais valioso esta com meu irmao Ryck, ele vive nas montanhas do deserto, que fica entre o deserto e a selva, vive em uma caverna, traga meu ultimo pertence e eu te dou acesso a quest mais valiosa desse mundo como recompensa, ele tem um Dragon como animal de estimacao, nao tente enganar-lo.
 
player: quest
 
NPC: Voce trouxe meu pertence mais valioso?
 
player: Certo, pegue sua recompensa atras da porta, e entre na quest, a partir de agora e com voce, boa sorte.
 
 
postei as falar apenas pra vcs verem o numero de missões que eu preciso nesse npc..
Link para o post
Compartilhar em outros sites

O tópico foi movido para a área correta, preste mais atenção da próxima vez!
Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680

Este tópico foi movido:
De: "OTServAprovação de Tópicos de Conteúdos"
Para: "OTServSuporte OTServSuporte de Scripts"

Link para o post
Compartilhar em outros sites
  • Solução

Em "Data/npc/scripts", nome_do_arquivo.lua:

local t = {
    storage = 34341, -- Storage utilizada na quest, para dar acessos depois de completar esta missao, use esta storage.
    items = {2160, 2161, 2162} -- Pertence 1, pertence 2, pertence valioso.
}

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 msg = msg:lower();
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

    if msgcontains(msg, 'missao') then
	if getPlayerStorageValue(cid, t.storage) <= 0 then
	    selfSay('Certo, vou precisar da sua ajuda, meus irmaos estao com alguns de meus pertences, você poderia {recolher} eles de volta para mim?', cid)
	    talkState[talkUser] = 1
	elseif getPlayerStorageValue(cid, t.storage) == 1 then
	    selfSay('Conseguiu recuperar o primeiro {pertence}? Se estiver com problemas na localização, diga {info}.', cid)
	    talkState[talkUser] = 1
	elseif getPlayerStorageValue(cid, t.storage) == 2 then
	    selfSay('Você recolheu meu {item}? Se estiver com problemas na localização, diga {info}.', cid)
	    talkState[talkUser] = 1
        elseif getPlayerStorageValue(cid, t.storage) == 3 then
	    selfSay('Você trouxe meu {pertence} mais valioso? Se estiver com problemas na localização, diga {info}.', cid)
	    talkState[talkUser] = 3
	elseif getPlayerStorageValue(cid, t.storage) == 4 then
	    selfSay('Você já me ajudou e sou muito grato por isso.', cid)
	end
    elseif msgcontains(msg, 'yes') then
        if talkState[talkUser] == 1 or talkState[talkUser] == 3 then
	    if getPlayerStorageValue(cid, t.storage) <= 0 then
		selfSay('Certo, meu primeiro irmao vive em uma cidade onde habitam todos os tipos de orcs, porem ele vive fora dessa cidade, em uma casa na beira da areia, busque meu pertence e eu lhe informo o proximo passo, mas cuidado, ele tem uma Hydra como animal de estimacao, nao tente enganar-lo.', cid)
		setPlayerStorageValue(cid, t.storage, 1)
		talkState[talkUser] = 0
	    elseif getPlayerStorageValue(cid, t.storage) == 1 then
		if doPlayerRemoveItem(cid, t.items[1], 1) then
		    selfSay('Certo, muito obrigado. O meu proximo pertence esta com meu irmao Phill, ele habita nos montes mais gelados desse mundo, perto dos barbaros, dizem que as vezes Ghazbaran aparece por la, pegue meu item e traga de volta, mas cuidado, ele tem um Frost Dragon como animal de estimacao, nao tente enganar-lo.', cid)
		    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE)
		    setPlayerStorageValue(cid, t.storage, 2)
		    talkState[talkUser] = 0
		else
		    selfSay('Está tentando me enganar?', cid)
		    talkState[talkUser] = 0
		end
	    elseif getPlayerStorageValue(cid, t.storage) == 2 then
		if doPlayerRemoveItem(cid, t.items[2], 1) then
		    selfSay('Certo, muito obrigado. O meu pertence mais valioso esta com meu irmao Ryck, ele vive nas montanhas do deserto, que fica entre o deserto e a selva, vive em uma caverna, traga meu ultimo pertence e eu te dou acesso a quest mais valiosa desse mundo como recompensa, ele tem um Dragon como animal de estimacao, nao tente enganar-lo.', cid)
		    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE)
		    setPlayerStorageValue(cid, t.storage, 3)
		    talkState[talkUser] = 0
		else
		    selfSay('Onde está meu item?', cid)
                    talkState[talkUser] = 0
                end
	    elseif getPlayerStorageValue(cid, t.storage) == 3 then
		if doPlayerRemoveItem(cid, t.items[3], 1) then
		    selfSay('Certo, pegue sua recompensa atras da porta, e entre na quest, a partir de agora e com voce, boa sorte.', cid)
		    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE)
		    setPlayerStorageValue(cid, t.storage, 4)
		    talkState[talkUser] = 0
		else
		    selfSay('Você não está com meu item!', cid)
		    talkState[talkUser] = 0
		 end
             end
        end
    elseif msgcontains(msg, 'recolher') then
	if talkState[talkUser] == 1 then
	    if getPlayerStorageValue(cid, t.storage) == 0 then
		selfSay('Certo, meu primeiro irmao vive em uma cidade onde habitam todos os tipos de orcs, porem ele vive fora dessa cidade, em uma casa na beira da areia, busque meu pertence e eu lhe informo o proximo passo, mas cuidado, ele tem uma Hydra como animal de estimacao, nao tente enganar-lo.', cid)
		setPlayerStorageValue(cid, t.storage, 1)
		talkState[talkUser] = 0
	    end
	end
    elseif msgcontains(msg, 'pertence') then
	if talkState[talkUser] == 1 then
	    if getPlayerStorageValue(cid, t.storage) == 1 then
		if doPlayerRemoveItem(cid, t.items[1], 1) then
		    selfSay('Certo, muito obrigado. O meu proximo pertence esta com meu irmao Phill, ele habita nos montes mais gelados desse mundo, perto dos barbaros, dizem que as vezes Ghazbaran aparece por la, pegue meu item e traga de volta, mas cuidado, ele tem um Frost Dragon como animal de estimacao, nao tente enganar-lo.', cid)
		    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE)
		    setPlayerStorageValue(cid, t.storage, 2)
		    talkState[talkUser] = 0
		else
		    selfSay('Está tentando me enganar?', cid)
		    talkState[talkUser] = 0
		end
	    end
        elseif talkState[talkUser] == 3 then
	    if getPlayerStorageValue(cid, t.storage) == 3 then
	        if doPlayerRemoveItem(cid, t.items[3], 1) then
		    selfSay('Certo, pegue sua recompensa atras da porta, e entre na quest, a partir de agora e com voce, boa sorte.', cid)
		    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE)
		    setPlayerStorageValue(cid, t.storage, 4)
		    talkState[talkUser] = 0
	        else
		    selfSay('Você não está com meu item!', cid)
		    talkState[talkUser] = 0
	        end
            end
        end
    elseif msgcontains(msg, 'item') then
	if talkState[talkUser] == 1 then
	    if getPlayerStorageValue(cid, t.storage) == 2 then
		if doPlayerRemoveItem(cid, t.items[2], 1) then
		    selfSay('Certo, muito obrigado. O meu pertence mais valioso esta com meu irmao Ryck, ele vive nas montanhas do deserto, que fica entre o deserto e a selva, vive em uma caverna, traga meu ultimo pertence e eu te dou acesso a quest mais valiosa desse mundo como recompensa, ele tem um Dragon como animal de estimacao, nao tente enganar-lo.', cid)
		    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE)
		    setPlayerStorageValue(cid, t.storage, 3)
		    talkState[talkUser] = 0
		else
		    selfSay('Onde está meu item?', cid)
                    talkState[talkUser] = 0
                end
            end
        end		
    elseif msgcontains(msg, 'info') then
	if getPlayerStorageValue(cid, t.storage) == 1 then
	    selfSay('Meu primeiro irmão vive ao lado de uma cidade onde habitam todos os tipos de orcs, em uma casa na beira do mar.', cid)
	elseif getPlayerStorageValue(cid, t.storage) == 2 then
	    selfSay('Meu irmão Phill habita nos montes mais gelados desse mundo, perto dos barbaros.', cid)
	elseif getPlayerStorageValue(cid, t.storage) == 3 then
	    selfSay('Meu irmão Ryck vive em uma cabana nas montanhas do deserto, que fica entre o deserto e a selva.', cid)
	end
    end
end
	
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Em "Data/npc", nome_do_npc.xml:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="nome_do_npc" script="data/npc/scripts/nome_do_arquivo.lua" walkinterval="5000" floorchange="0">
    <health now="100" max="100"/>
    <look type="128" head="100" body="100" legs="114" feet="114" addons="2"/>
    <parameters>
          <parameter key="message_greet" value="Ola |PLAYERNAME|!" />
    </parameters>
</npc>

Adicionei também um "info", ele diz a posição de cada irmão apartir da storage do jogador, se estiver na missão 2, diz a posição do irmão 2, se estiver na 1, a do irmão 1...

Se der algum problema me avise, espero que goste :).

Link para o post
Compartilhar em outros sites

Em "Data/npc/scripts", nome_do_arquivo.lua:

local t = {
    storage = 34341, -- Storage utilizada na quest, para dar acessos depois de completar esta missao, use esta storage.
    items = {2160, 2161, 2162} -- Pertence 1, pertence 2, pertence valioso.
}

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 msg = msg:lower();
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

    if msgcontains(msg, 'missao') then
	if getPlayerStorageValue(cid, t.storage) <= 0 then
	    selfSay('Certo, vou precisar da sua ajuda, meus irmaos estao com alguns de meus pertences, você poderia {recolher} eles de volta para mim?', cid)
	    talkState[talkUser] = 1
	elseif getPlayerStorageValue(cid, t.storage) == 1 then
	    selfSay('Conseguiu recuperar o primeiro {pertence}? Se estiver com problemas na localização, diga {info}.', cid)
	    talkState[talkUser] = 1
	elseif getPlayerStorageValue(cid, t.storage) == 2 then
	    selfSay('Você recolheu meu {item}? Se estiver com problemas na localização, diga {info}.', cid)
	    talkState[talkUser] = 1
	elseif getPlayerStorageValue(cid, t.storage) == 3 then
	    selfSay('Você trouxe meu {pertence} mais valioso? Se estiver com problemas na localização, diga {info}.', cid)
	    talkState[talkUser] = 3
	elseif getPlayerStorageValue(cid, t.storage) == 4 then
            selfSay('Você já me ajudou e sou muito grato por isso.', cid)
	end
    elseif msgcontains(msg, 'recolher') or msgcontains(msg, 'yes') then
	if talkState[talkUser] == 1 then
            if getPlayerStorageValue(cid, t.storage) == 0 then
		selfSay('Certo, meu primeiro irmao vive em uma cidade onde habitam todos os tipos de orcs, porem ele vive fora dessa cidade, em uma casa na beira da areia, busque meu pertence e eu lhe informo o proximo passo, mas cuidado, ele tem uma Hydra como animal de estimacao, nao tente enganar-lo.', cid)
		setPlayerStorageValue(cid, t.storage, 1)
		talkState[talkUser] = 0
	    end
	end
    elseif msgcontains(msg, 'pertence') then
	if talkState[talkUser] == 1 then
            if getPlayerStorageValue(cid, t.storage) == 1 then
		if doPlayerRemoveItem(cid, t.items[1], 1) then
		    selfSay('Certo, muito obrigado. O meu proximo pertence esta com meu irmao Phill, ele habita nos montes mais gelados desse mundo, perto dos barbaros, dizem que as vezes Ghazbaran aparece por la, pegue meu item e traga de volta, mas cuidado, ele tem um Frost Dragon como animal de estimacao, nao tente enganar-lo.', cid)
		    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE)
		    setPlayerStorageValue(cid, t.storage, 2)
		    talkState[talkUser] = 0
		else
		    selfSay('Está tentando me enganar?', cid)
		    talkState[talkUser] = 0
		end
	    end
	elseif talkState[talkUser] == 3 then
	    if getPlayerStorageValue(cid, t.storage) == 3 then
		if doPlayerRemoveItem(cid, t.items[3], 1) then
		    selfSay('Certo, pegue sua recompensa atras da porta, e entre na quest, a partir de agora e com voce, boa sorte.', cid)
		    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE)
		    setPlayerStorageValue(cid, t.storage, 4)
		    talkState[talkUser] = 0
		else
		    selfSay('Você não está com meu item!', cid)
		    talkState[talkUser] = 0
		end
            end
	end
    elseif msgcontains(msg, 'item') then
	if talkState[talkUser] == 1 then
	    if getPlayerStorageValue(cid, t.storage) == 2 then
		if doPlayerRemoveItem(cid, t.items[2], 1) then
		    selfSay('Certo, muito obrigado. O meu pertence mais valioso esta com meu irmao Ryck, ele vive nas montanhas do deserto, que fica entre o deserto e a selva, vive em uma caverna, traga meu ultimo pertence e eu te dou acesso a quest mais valiosa desse mundo como recompensa, ele tem um Dragon como animal de estimacao, nao tente enganar-lo.', cid)
		    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE)
		    setPlayerStorageValue(cid, t.storage, 3)
		    talkState[talkUser] = 0
		else
		   selfSay('Onde está meu item?', cid)
                   talkState[talkUser] = 0
                end
            end
        end		
    elseif msgcontains(msg, 'info') then
	if getPlayerStorageValue(cid, t.storage) == 1 then
	    selfSay('Meu primeiro irmão vive ao lado de uma cidade onde habitam todos os tipos de orcs, em uma casa na beira do mar.', cid)
	elseif getPlayerStorageValue(cid, t.storage) == 2 then
	    selfSay('Meu irmão Phill habita nos montes mais gelados desse mundo, perto dos barbaros.', cid)
	elseif getPlayerStorageValue(cid, t.storage) == 3 then
	    selfSay('Meu irmão Ryck vive em uma cabana nas montanhas do deserto, que fica entre o deserto e a selva.', cid)
	end
    end
end
	
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Em "Data/npc", nome_do_npc.xml:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="nome_do_npc" script="data/npc/scripts/nome_do_arquivo.lua" walkinterval="5000" floorchange="0">
    <health now="100" max="100"/>
    <look type="128" head="100" body="100" legs="114" feet="114" addons="2"/>
    <parameters>
          <parameter key="message_greet" value="Ola |PLAYERNAME|!" />
    </parameters>
</npc>

Adicionei também um "info", ele diz a posição de cada irmão apartir da storage do jogador, se estiver na missão 2, diz a posição do irmão 2, se estiver na 1, a do irmão 1...

Se der algum problema me avise, espero que goste :).

 

 

maninho, depois que eu falo "recolher", ele não responde mais nada.

Link para o post
Compartilhar em outros sites

O diálogo segue pelas palavras escuras, mas, alterei o script acima para conseguir diálogar com apenas missao/yes.

Link para o post
Compartilhar em outros sites

O diálogo segue pelas palavras escuras, mas, alterei o script acima para conseguir diálogar com apenas missao/yes.

 

Deu certo agora, mas tem como colocar pra ganhar o storage 34341 só no final da terceiro entrega? Porque tipo, após a primeira entrega vc ja ganha o storage e tem acesso a porta.

Link para o post
Compartilhar em outros sites

É só você colocar para ter acesso apenas com a storage no valor 4.

if getPlayerStorageValue(cid, 34341) == 4 then...

Link para o post
Compartilhar em outros sites

Como ficaria então? Não manjo muito de script :///

Editado por mattosknight (veja o histórico de edições)
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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo