Ir para conteúdo
  • 0

Pedido de NPC que da quests paralelas


kamus9629

Pergunta

Ele quis dizer: 
NPC 1:
Fale com o NPC 2.

Npc 2:
(Se não falou com NPC 1: Voce ainda não pode fazer essa quest.)
(Se falou: Hola, preciso 100 seeds pra minha invenção)
(Se tiver e falar: "seeds", receber item e ganhar storage 10000)
Npc3: 
(Se tiver sorage 10000= Te dou a missã ode matar 100 charmander)
(Se não tiver storage 10000: voce ainda não pode fazer essa missão)

Editado por kamus9629
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0
Em 22/12/2019 em 19:14, kamus9629 disse:

Ele quis dizer: 
NPC 1:
Fale com o NPC 2.

Npc 2:
(Se não falou com NPC 1: Voce ainda não pode fazer essa quest.)
(Se falou: Hola, preciso 100 seeds pra minha invenção)
(Se tiver e falar: "seeds", receber item e ganhar storage 10000)
Npc3: 
(Se tiver sorage 10000= Te dou a missã ode matar 100 charmander)
(Se não tiver storage 10000: voce ainda não pode fazer essa missão)

Usa como base aqueles npc de clan po

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, brazvct disse:

Usa como base aqueles npc de clan po

qual nome dos npc clan porque vou fala real oque eu tou fazendo e todo do zero eu removir map todo todos os pokemon para refazer ele so ta faltando quest sistem

 

Link para o comentário
Compartilhar em outros sites

  • 0
51 minutos atrás, kamus9629 disse:

qual nome dos npc clan porque vou fala real oque eu tou fazendo e todo do zero eu removir map todo todos os pokemon para refazer ele so ta faltando quest sistem

 

Aqueles de task de clan tipo seeds trainer
Baixa ai denovo e usa aquilo como base é igualzin o que vc procura

Link para o comentário
Compartilhar em outros sites

  • 0
19 horas atrás, brazvct disse:

Aqueles de task de clan tipo seeds trainer
Baixa ai denovo e usa aquilo como base é igualzin o que vc procura

vou da uma olhada e que eu nao sou de joga otpokemon eu parei de joga tibia faz 2015 eu so mecho  com ot fasso cenario do zero e sprite  propria  tavo penssando se eu coloco old client o project ja que o pessoal gosta muito de bot 

Link para o comentário
Compartilhar em outros sites

  • 0
3 horas atrás, kamus9629 disse:

vou da uma olhada e que eu nao sou de joga otpokemon eu parei de joga tibia faz 2015 eu so mecho  com ot fasso cenario do zero e sprite  propria  tavo penssando se eu coloco old client o project ja que o pessoal gosta muito de bot 

Tem um Bot mais avançado pra Otclient chamado CandyBot é só compilar o OTC sem bot protection

Link para o comentário
Compartilhar em outros sites

  • 0

Sobre o pedido do tópico, começando pelo primeiro NPC, vá em Data/NPC e crie um arquivo Carl.xml (lembrando que coloquei o nome do arquivo do mesmo nome do npc, caso queira mudar nome do npc sugiro mudar o do arquivo para ficar fácil de fazer manutenções futuras), após criar adicione o seguinte código dentro: 

<?xml version="1.0" encoding="UTF-8"?>

<npc name="Carl" script="Carl.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="516" head="10" body="15" legs="20" feet="25"/>

<parameters>
	<parameter key="message_greet" value="Olá |PLAYERNAME|, o que você procura?"/>
</parameters>
</npc>

Agora vá em Data/NPC/Scripts e crie um arquivo Carl.lua e adicione o seguinte código dentro:

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


-- VARIÁVEIS --
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
msg = string.lower(msg)
local nome_segundo_npc = "Joey"
local storage = 9999

----------------------------------- [ DIALOGO COM NPC] ---------------------------------
  
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') or msgcontains(msg, 'missao') then
 	
  if getPlayerStorageValue(cid, storage) == 1 then
	  selfSay("Você deve falar diretamente com o NPC " ..nome_segundo_npc, cid)
	  talkState[talkUser] = 0
	return true 
  else
    selfSay("Você gostaria de fazer a missão do NPC " ..nome_segundo_npc.. " ?", cid)  
    talkState[talkUser] = 1
  return true
  end
   
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then
	selfSay("Agora você está autorizado para fazer a missão do NPC "..nome_segundo_npc.. "!", cid)
        setPlayerStorageValue(cid, storage, 1)
	talkState[talkUser] = 0        
return true

elseif (msgcontains(msg, 'no') or msgcontains(msg, 'não') or msgcontains(msg, 'nao')) and talkState[talkUser] == 1 then
  selfSay("Ok, fale comigo novamente caso queira fazer a missão do NPC " ..nome_segundo_npc.. ".", cid)
  talkState[talkUser] = 0
return true
end

return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Segundo NPC:

 

Agora iremos criar o segundo NPC, vá em Data/NPC e crie um arquivo Joey.xml e adicione o código dentro:

<?xml version="1.0" encoding="UTF-8"?>

<npc name="Joey" script="Joey.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="1421" head="114" body="119" legs="114" feet="114"/>

<parameters>
	<parameter key="message_greet" value="Olá |PLAYERNAME|, em que posso ajudar? Diga {help}, {ajuda} ou {missão} para mais informações."/>
</parameters>
</npc>

E vá em Data/NPC/Scripts, crie um arquivo Joey.lua e adicione o código dentro:

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


-- VARIÁVEIS --
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
msg = string.lower(msg)
local nome_primeiro_npc = "Carl"
local nome_terceiro_npc = "Peter"
local id_item = 12163
local quantidade_item = 100
local id_item_recebido = 16563
local quantidade_item_recebido = 1

----------------------------------- [ DIALOGO COM NPC] ---------------------------------
  
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') or msgcontains(msg, 'missao') then
 	
  if getPlayerStorageValue(cid, 9999) == 1 then -- STORAGE DO PRIMEIRO NPC, OU SEJA, VERIFICA SE FALOU COM PRIMEIRO NPC.
  
    if getPlayerStorageValue(cid, 10000) == 1 then -- VERIFICA SE JÁ FEZ A MISSÃO DO SEGUNDO NPC
      selfSay("Você já fez minha missão, agora você deve falar diretamente com o NPC " ..nome_terceiro_npc.. ".", cid)
      talkState[talkUser] = 0
	  return true 
    else
      selfSay("Preciso que você me traga " ..quantidade_item.. " seeds. Você trouxe?", cid) 
      talkState[talkUser] = 1
    return true
    end
  
  else
    selfSay("Você deve falar com o NPC " ..nome_primeiro_npc.. " para conseguir fazer minha missão.", cid)
    talkState[talkUser] = 0
  return true
  end

elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then

  if getPlayerItemCount(cid, id_item) >= quantidade_item then
    doPlayerRemoveItem(cid, id_item, quantidade_item)
    selfSay("Você me trouxe as " ..quantidade_item.. " que eu precisava. Agora você consegue falar com o NPC " ..nome_terceiro_npc.. ".", cid)
    doPlayerAddItem(cid, id_item_recebido, quantidade_item_recebido)
    doSendMagicEffect(getThingPos(cid), 29)
    setPlayerStorageValue(cid, 10000, 1)
    talkState[talkUser] = 0
  return true
  else
    selfSay("Você não trouxe a quantidade de seeds que eu preciso. Me traga " ..quantidade_item.. " seeds para prosseguir com a missão.", cid)
    talkState[talkUser] = 0
  return true
  end

return true
end

return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Terceiro NPC

 

Agora com o terceiro e último NPC, vá em Data/NPC e crie um arquivo Peter.xml e adicione o código dentro:

<?xml version="1.0" encoding="UTF-8"?>

<npc name="Peter" script="Peter.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="1413" head="114" body="119" legs="114" feet="114" corpse="2212"/>

<parameters>
	<parameter key="message_greet" value="Olá |PLAYERNAME|, o que você procura aqui? Diga {help}, {ajuda} ou {missão} para mais informações."/>
</parameters>
</npc>

E vá em Data/NPC/Scripts e crie um arquivo Peter.lua e adicione o código dentro:

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


-- VARIÁVEIS --
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
msg = string.lower(msg)
local nome_segundo_npc = "Joey"

----------------------------------- [ DIALOGO COM NPC] ---------------------------------
  
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') or msgcontains(msg, 'missao') then
 	
  if getPlayerStorageValue(cid, 10000) == 1 then -- VERIFICA SE FALOU COM SEGUNDO NPC
  
    if getPlayerStorageValue(cid, 10001) == 1 then -- VERIFICA SE TERMINOU A TASK
      selfSay("Você já completou minha missão.", cid)
      talkState[talkUser] = 0
	  return true 
    else
      selfSay("Preciso que você derrote alguns {Charmanders} para mim. Você quer fazer essa missão?", cid) 
      talkState[talkUser] = 1
    return true
    end
  
  else
    selfSay("Você deve falar com o NPC " ..nome_segundo_npc.. " para conseguir fazer minha missão.", cid)
    talkState[talkUser] = 0
  return true
  end

elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim') or (msgcontains(msg, 'task'))) and talkState[talkUser] == 1 then           

local id_item = 12545
local quantidade_item = 1
local exp = 10000
 
  if getPlayerStorageValue(cid, 10002) == 1 then
    selfSay("Você completou minha missão! Receba sua recompensa.", cid)
    doPlayerAddExp(cid, exp)
    doPlayerAddItem(cid, id_item, quantidade_item)
    doSendAnimatedText(getThingPos(cid), exp, 27)
    setPlayerStorageValue(cid, 72451, 1)
    talkState[talkUser] = 0
  return true

  else
    if getPlayerStorageValue(cid, 10002) < 0 then
      selfSay("Vá derrotar todos os {Charmanders} para mim.")
      setPlayerStorageValue(cid, 35000, 0)
      talkState[talkUser] = 0
    return true
    
    elseif getPlayerStorageValue(cid, 10002) == 0 then
      selfSay("Você ainda não derrotou todos os {100 Charmanders}. Termine a missão primeiro antes de falar comigo.")
      talkState[talkUser] = 0
    return true
    end
  return true
  end

 return true
 
elseif (msgcontains(msg, 'no') or msgcontains(msg, 'não')) and talkState[talkUser] == 1 then
  selfSay("Ok, fale comigo novamente caso queira fazer minha missão.", cid)    
  talkState[talkUser] = 0
return true
end

end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Agora é a configuração da task.

 

Vá em Data/Creaturescripts/Scripts crie um arquivo chamado task_peter.lua e adicione o código dentro:

local nome_terceiro_npc = "Peter"
local storage_npc = 10002
local storage_contador = 10003

local pokemon = {
   [1] = {name = "Charmander", count = 100},
}

local nome = pokemon[1].name
local restante  

function onKill(cid, target)
  for _, t in ipairs(pokemon) do
  local quantidade = t.count

  if getCreatureName(target) == nome then

    if getPlayerStorageValue(cid, storage_npc) == 0 then
	  
     	if getPlayerStorageValue(cid, storage_contador) == quantidade then        
	      doPlayerSendTextMessage(cid, 27, "Não há mais " ..nome.. " para derrotar.")
       	doPlayerSendTextMessage(cid, 20, "Parabéns! Você concluiu a task do " ..nome_terceiro_npc)
        setPlayerStorageValue(cid, storage_contador, getPlayerStorageValue(cid, storage_contador) + 1)
        setPlayerStorageValue(cid, storage_npc, 1)
     	return true
  
      elseif getPlayerStorageValue(cid, storage_contador) < quantidade then     
      
  -- AS STORAGES COMEÇAM COM -1, ENTÃO NESSA PARTE EU APENAS DEFINO COMO 0 PARA NA LINHA SEGUINTE JÁ IR PARA 1. NÃO COLOQUE RETURN NESSE LAÇO PORQUE VAI ENCERRAR O ESCOPO E NÃO VAI CONTAR CORRETAMENTE --  
        if getPlayerStorageValue(cid, storage_contador) < 0 then	
           setPlayerStorageValue(cid, storage_contador, 0)
        end	 

        setPlayerStorageValue(cid, storage_contador, getPlayerStorageValue(cid, storage_contador) + 1)
        restante = quantidade - getPlayerStorageValue(cid, storage_contador)
        doPlayerSendTextMessage(cid, 27, "Faltam " ..restante.. " " ..nome.. "s para derrotar.")
      return true
      end
    
    elseif (getPlayerStorageValue(cid, storage_npc) < 0) or (getPlayerStorageValue(cid, storage_npc) > 0) then
      return true
    end
  
  return true
  end

return true
end

end

 

Agora vá em Data/Creaturescripts e abra o creaturescripts.xml e adicione o evento:

<event type="kill" name="task_peter" script="task_peter.lua"/>

 

E por último, vá em Data/Creaturescripts/Scripts ou Data/Creaturescripts/Scripts/Player (dependendo da base tem essa divisão de diretório) e procure pelo arquivo login.lua e procure pela parte dos registros de evento e adicione após o último a linha:

registerCreatureEvent(cid, "task_peter")

 

Explicação:

 

Pelo que entendi o primeiro NPC não pedirá nada, só dará acesso ao player, então para o player falar com o segundo NPC ele tem que falar com o primeiro antes! Eu deixei também o valor das storages em sequência para ficar mais fácil de alterar, e deixei o segundo com o valor 10000 como pediu. 

 

Eu tinha feito os scripts faz tempo haha, mas eu estava testando na base DXP e nela não funciona o evento onKill, não da erro mas não funciona haha, ai perdi um tempinho até descobrir kk. Mas está ai a série de missão de npc.

 

Testei aqui e todos os NPCs estão funcionando normalmente e a task do creaturescript está funcionando normal também, mas qualquer problema me fale.

Editado por Yan18
Link para o comentário
Compartilhar em outros sites

  • 0
Em 31/12/2019 em 19:08, Yan18 disse:

Sobre o pedido do tópico, começando pelo primeiro NPC, vá em Data/NPC e crie um arquivo Carl.xml (lembrando que coloquei o nome do arquivo do mesmo nome do npc, caso queira mudar nome do npc sugiro mudar o do arquivo para ficar fácil de fazer manutenções futuras), após criar adicione o seguinte código dentro: 


<?xml version="1.0" encoding="UTF-8"?>

<npc name="Carl" script="Carl.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="516" head="10" body="15" legs="20" feet="25"/>

<parameters>
	<parameter key="message_greet" value="Olá |PLAYERNAME|, o que você procura?"/>
</parameters>
</npc>

Agora vá em Data/NPC/Scripts e crie um arquivo Carl.lua e adicione o seguinte código dentro:


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


-- VARIÁVEIS --
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
msg = string.lower(msg)
local nome_segundo_npc = "Joey"
local storage = 9999

----------------------------------- [ DIALOGO COM NPC] ---------------------------------
  
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') or msgcontains(msg, 'missao') then
 	
  if getPlayerStorageValue(cid, storage) == 1 then
	  selfSay("Você deve falar diretamente com o NPC " ..nome_segundo_npc, cid)
	  talkState[talkUser] = 0
	return true 
  else
    selfSay("Você gostaria de fazer a missão do NPC " ..nome_segundo_npc.. " ?", cid)  
    talkState[talkUser] = 1
  return true
  end
   
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then
	selfSay("Agora você está autorizado para fazer a missão do NPC "..nome_segundo_npc.. "!", cid)
        setPlayerStorageValue(cid, storage, 1)
	talkState[talkUser] = 0        
return true

elseif (msgcontains(msg, 'no') or msgcontains(msg, 'não') or msgcontains(msg, 'nao')) and talkState[talkUser] == 1 then
  selfSay("Ok, fale comigo novamente caso queira fazer a missão do NPC " ..nome_segundo_npc.. ".", cid)
  talkState[talkUser] = 0
return true
end

return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Segundo NPC:

 

Agora iremos criar o segundo NPC, vá em Data/NPC e crie um arquivo Joey.xml e adicione o código dentro:


<?xml version="1.0" encoding="UTF-8"?>

<npc name="Joey" script="Joey.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="1421" head="114" body="119" legs="114" feet="114"/>

<parameters>
	<parameter key="message_greet" value="Olá |PLAYERNAME|, em que posso ajudar? Diga {help}, {ajuda} ou {missão} para mais informações."/>
</parameters>
</npc>

E vá em Data/NPC/Scripts, crie um arquivo Joey.lua e adicione o código dentro:


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


-- VARIÁVEIS --
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
msg = string.lower(msg)
local nome_primeiro_npc = "Carl"
local nome_terceiro_npc = "Peter"
local id_item = 12163
local quantidade_item = 100
local id_item_recebido = 16563
local quantidade_item_recebido = 1

----------------------------------- [ DIALOGO COM NPC] ---------------------------------
  
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') or msgcontains(msg, 'missao') then
 	
  if getPlayerStorageValue(cid, 9999) == 1 then -- STORAGE DO PRIMEIRO NPC, OU SEJA, VERIFICA SE FALOU COM PRIMEIRO NPC.
  
    if getPlayerStorageValue(cid, 10000) == 1 then -- VERIFICA SE JÁ FEZ A MISSÃO DO SEGUNDO NPC
      selfSay("Você já fez minha missão, agora você deve falar diretamente com o NPC " ..nome_terceiro_npc.. ".", cid)
      talkState[talkUser] = 0
	  return true 
    else
      selfSay("Preciso que você me traga " ..quantidade_item.. " seeds. Você trouxe?", cid) 
      talkState[talkUser] = 1
    return true
    end
  
  else
    selfSay("Você deve falar com o NPC " ..nome_primeiro_npc.. " para conseguir fazer minha missão.", cid)
    talkState[talkUser] = 0
  return true
  end

elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then

  if getPlayerItemCount(cid, id_item) >= quantidade_item then
    doPlayerRemoveItem(cid, id_item, quantidade_item)
    selfSay("Você me trouxe as " ..quantidade_item.. " que eu precisava. Agora você consegue falar com o NPC " ..nome_terceiro_npc.. ".", cid)
    doPlayerAddItem(cid, id_item_recebido, quantidade_item_recebido)
    doSendMagicEffect(getThingPos(cid), 29)
    setPlayerStorageValue(cid, 10000, 1)
    talkState[talkUser] = 0
  return true
  else
    selfSay("Você não trouxe a quantidade de seeds que eu preciso. Me traga " ..quantidade_item.. " seeds para prosseguir com a missão.", cid)
    talkState[talkUser] = 0
  return true
  end

return true
end

return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Terceiro NPC

 

Agora com o terceiro e último NPC, vá em Data/NPC e crie um arquivo Peter.xml e adicione o código dentro:


<?xml version="1.0" encoding="UTF-8"?>

<npc name="Peter" script="Peter.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="1413" head="114" body="119" legs="114" feet="114" corpse="2212"/>

<parameters>
	<parameter key="message_greet" value="Olá |PLAYERNAME|, o que você procura aqui? Diga {help}, {ajuda} ou {missão} para mais informações."/>
</parameters>
</npc>

E vá em Data/NPC/Scripts e crie um arquivo Peter.lua e adicione o código dentro:


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


-- VARIÁVEIS --
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
msg = string.lower(msg)
local nome_segundo_npc = "Joey"

----------------------------------- [ DIALOGO COM NPC] ---------------------------------
  
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') or msgcontains(msg, 'missao') then
 	
  if getPlayerStorageValue(cid, 10000) == 1 then -- VERIFICA SE FALOU COM SEGUNDO NPC
  
    if getPlayerStorageValue(cid, 10001) == 1 then -- VERIFICA SE TERMINOU A TASK
      selfSay("Você já completou minha missão.", cid)
      talkState[talkUser] = 0
	  return true 
    else
      selfSay("Preciso que você derrote alguns {Charmanders} para mim. Você quer fazer essa missão?", cid) 
      talkState[talkUser] = 1
    return true
    end
  
  else
    selfSay("Você deve falar com o NPC " ..nome_segundo_npc.. " para conseguir fazer minha missão.", cid)
    talkState[talkUser] = 0
  return true
  end

elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim') or (msgcontains(msg, 'task'))) and talkState[talkUser] == 1 then           

local id_item = 12545
local quantidade_item = 1
local exp = 10000
 
  if getPlayerStorageValue(cid, 10002) == 1 then
    selfSay("Você completou minha missão! Receba sua recompensa.", cid)
    doPlayerAddExp(cid, exp)
    doPlayerAddItem(cid, id_item, quantidade_item)
    doSendAnimatedText(getThingPos(cid), exp, 27)
    setPlayerStorageValue(cid, 72451, 1)
    talkState[talkUser] = 0
  return true

  else
    if getPlayerStorageValue(cid, 10002) < 0 then
      selfSay("Vá derrotar todos os {Charmanders} para mim.")
      setPlayerStorageValue(cid, 35000, 0)
      talkState[talkUser] = 0
    return true
    
    elseif getPlayerStorageValue(cid, 10002) == 0 then
      selfSay("Você ainda não derrotou todos os {100 Charmanders}. Termine a missão primeiro antes de falar comigo.")
      talkState[talkUser] = 0
    return true
    end
  return true
  end

 return true
 
elseif (msgcontains(msg, 'no') or msgcontains(msg, 'não')) and talkState[talkUser] == 1 then
  selfSay("Ok, fale comigo novamente caso queira fazer minha missão.", cid)    
  talkState[talkUser] = 0
return true
end

end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Agora é a configuração da task.

 

Vá em Data/Creaturescripts/Scripts crie um arquivo chamado task_peter.lua e adicione o código dentro:


local nome_terceiro_npc = "Peter"
local storage_npc = 10002
local storage_contador = 10003

local pokemon = {
   [1] = {name = "Charmander", count = 100},
}

local nome = pokemon[1].name
local restante  

function onKill(cid, target)
  for _, t in ipairs(pokemon) do
  local quantidade = t.count

  if getCreatureName(target) == nome then

    if getPlayerStorageValue(cid, storage_npc) == 0 then
	  
     	if getPlayerStorageValue(cid, storage_contador) == quantidade then        
	      doPlayerSendTextMessage(cid, 27, "Não há mais " ..nome.. " para derrotar.")
       	doPlayerSendTextMessage(cid, 20, "Parabéns! Você concluiu a task do " ..nome_terceiro_npc)
        setPlayerStorageValue(cid, storage_contador, getPlayerStorageValue(cid, storage_contador) + 1)
        setPlayerStorageValue(cid, storage_npc, 1)
     	return true
  
      elseif getPlayerStorageValue(cid, storage_contador) < quantidade then     
      
  -- AS STORAGES COMEÇAM COM -1, ENTÃO NESSA PARTE EU APENAS DEFINO COMO 0 PARA NA LINHA SEGUINTE JÁ IR PARA 1. NÃO COLOQUE RETURN NESSE LAÇO PORQUE VAI ENCERRAR O ESCOPO E NÃO VAI CONTAR CORRETAMENTE --  
        if getPlayerStorageValue(cid, storage_contador) < 0 then	
           setPlayerStorageValue(cid, storage_contador, 0)
        end	 

        setPlayerStorageValue(cid, storage_contador, getPlayerStorageValue(cid, storage_contador) + 1)
        restante = quantidade - getPlayerStorageValue(cid, storage_contador)
        doPlayerSendTextMessage(cid, 27, "Faltam " ..restante.. " " ..nome.. "s para derrotar.")
      return true
      end
    
    elseif (getPlayerStorageValue(cid, storage_npc) < 0) or (getPlayerStorageValue(cid, storage_npc) > 0) then
      return true
    end
  
  return true
  end

return true
end

end

 

Agora vá em Data/Creaturescripts e abra o creaturescripts.xml e adicione o evento:


<event type="kill" name="task_peter" script="task_peter.lua"/>

 

E por último, vá em Data/Creaturescripts/Scripts ou Data/Creaturescripts/Scripts/Player (dependendo da base tem essa divisão de diretório) e procure pelo arquivo login.lua e procure pela parte dos registros de evento e adicione após o último a linha:


registerCreatureEvent(cid, "task_peter")

 

Explicação:

 

Pelo que entendi o primeiro NPC não pedirá nada, só dará acesso ao player, então para o player falar com o segundo NPC ele tem que falar com o primeiro antes! Eu deixei também o valor das storages em sequência para ficar mais fácil de alterar, e deixei o segundo com o valor 10000 como pediu. 

 

Eu tinha feito os scripts faz tempo haha, mas eu estava testando na base DXP e nela não funciona o evento onKill, não da erro mas não funciona haha, ai perdi um tempinho até descobrir kk. Mas está ai a série de missão de npc.

 

Testei aqui e todos os NPCs estão funcionando normalmente e a task do creaturescript está funcionando normal também, mas qualquer problema me fale.

 

 

O sistem Task Nao funcionou aqui 

Link para o comentário
Compartilhar em outros sites

  • 0
1 minuto atrás, kamus9629 disse:

 

 

O sistem Task Nao funcionou aqui 

Você fez o procedimento certo como falei no tutorial ? Adicionou tudo certo? Porque eu testei no meu servidor e deu certo, e na parte da task eu só usei funções genéricas que tem em qualquer base de poketibia. Mas aparece algum erro na distro?

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, Yan18 disse:

Você fez o procedimento certo como falei no tutorial ? Adicionou tudo certo? Porque eu testei no meu servidor e deu certo, e na parte da task eu só usei funções genéricas que tem em qualquer base de poketibia. Mas aparece algum erro na distro?

tipo da uma olhada na scripte que eu te passei porqe eu editei ela ver se eu fiz algo de errado ae me fala aonde eu errei para eu concertar

Link para o comentário
Compartilhar em outros sites

  • 0
29 minutos atrás, kamus9629 disse:

tipo da uma olhada na scripte que eu te passei porqe eu editei ela ver se eu fiz algo de errado ae me fala aonde eu errei para eu concertar

Então ai é outro caso kkk, não é que o script não funcionou, mas você usou ele como base para fazer uma adaptação, então o problema deve estar no que você mudou, pois esse script funciona porque eu testei antes de postar e testei em duas bases diferentes e funcionou. Irei olhar seu script que mandou por PM.

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, Yan18 disse:

Então ai é outro caso kkk, não é que o script não funcionou, mas você usou ele como base para fazer uma adaptação, então o problema deve estar no que você mudou, pois esse script funciona porque eu testei antes de postar e testei em duas bases diferentes e funcionou. Irei olhar seu script que mandou por PM.

 

 

VLW

Link para o comentário
Compartilhar em outros sites

  • 0
Em 16/01/2020 em 16:19, kamus9629 disse:

mesmo erro eu nao sei se isso vai ajudar mais   tem isso aqui 

 

(luaDoCreateMonster) Monster with name 'Peter' not found

eu tavo revendo esse codigo aqui eu nao testei porque nao entendi direito confere para min se esta correto 

 

 -- AS STORAGES COMEÇAM COM -1, ENTÃO NESSA PARTE EU APENAS DEFINO COMO 0 PARA NA LINHA SEGUINTE JÁ IR PARA 1. NÃO COLOQUE RETURN NESSE LAÇO PORQUE VAI ENCERRAR O ESCOPO E NÃO VAI CONTAR CORRETAMENTE --  
        if getPlayerStorageValue(cid, storage_contador) < 0 then    
           setPlayerStorageValue(cid, storage_contador, 0)
        end     
 

sabe oque vou fazer so vou usa npc de task drop item mesmo assim tipo se voce tem que mata 3 bixo voce antes de mata 3 voce vai drop 4 Foto

depois que os cara donatar eu pago um programador para concerta isso 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...