Ir para conteúdo
  • 0

NPC de TASK


zllcapiroto

Pergunta

Alguém poderia me ajudar com um NPC de Task? Se possivel, deixar identificado, onde coloco o monster/ a quantidade, e a recompensa, p/ eu poder add mais mobs, etc..

 

Valeu família ^^ 

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 2

Eu criei um NPC de Task aqui, porém eu fiz em uma base Poketibia TFS 0.3.6, pois não tenho outra base com versão de TFS diferente. Porém olhei as funções do TFS 1.0 (que é a que você descreveu) e as funções que utilizei nos scripts tem no TFS 1.0.

 

Vai em Data/NPC e cria um arquivo xml chamado Billie.xml e adicione o código dentro:

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

<npc name="Billie" script="Billie.lua" walkinterval="10000" floorchange="0" speed="100">
<health now="150" max="150"/>
<look type="1421" head="114" body="119" legs="114" feet="114" corpse="2212"/>

<parameters>
	<parameter key="message_greet" value="Hello |PLAYERNAME|, I need a service... Say {help} or {task} to more informations."/>
</parameters>
</npc>

 

Agora em Data/NPC/Scripts crie um arquivo chamado Billie.lua e insira 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 id_item = 2160 -- ITEM QUE VAI GANHAR AO CONCLUIR A TASK
local quantidade_item = 1 -- QUANTIDADE DE ITENS QUE VAI GANHAR
local exp = 500000 -- EXPERIÊNCIA QUE VAI GANHAR 

local monstro = "Magmar" -- NOME DO MONSTRO
local quantidade_monstro = 50 -- QUANTIDADE DE MONSTROS

local storage = 32500 -- STORAGE DO NPC
local storage_npc = 34900 -- STORAGE QUE O NPC DA PARA O PLAYER PARA COMEÇAR A TASK
local storage_quantidade = 32510 -- STORAGE QUE CONTÉM A QUANTIDADE DE MONSTROS DERROTADOS PELO PLAYER
local storage_task = 32600 -- STORAGE DE CONCLUSÃO DA TASK
local storage_mensagem = 32505 -- STORAGE PARA DEIXAR O DIALOGO MAIS BONITO
local restante = (quantidade_monstro - getPlayerStorageValue(cid, storage_quantidade)) + 1  

----------------------------------- [ DIALOGO COM NPC] -----------------------------------
  
if msgcontains(msg, 'task') then
 	
   if getPlayerStorageValue(cid, storage) == 1 then
      selfSay("You have already done my task.", cid)
      talkState[talkUser] = 0
   return true 
  
   else
      if getPlayerStorageValue(cid, storage_npc) < 1 then
         selfSay("I need you kill " ..quantidade_monstro.. " " ..monstro.. ". Do you accept my task?", cid) 
      else
         selfSay("Have you already finished my task?", cid) 
     end
   talkState[talkUser] = 1
   return true
   end
  

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

  if getPlayerStorageValue(cid, storage_mensagem) < 1 and getPlayerStorageValue(cid, storage_npc) < 1 then
    selfSay("Ok, go to complete my task.", cid)
    talkState[talkUser] = 0
    setPlayerStorageValue(cid, storage_mensagem, 1)
    setPlayerStorageValue(cid, storage_npc, 1)
    setPlayerStorageValue(cid, storage_quantidade, 1)
  return true
  end

  if getPlayerStorageValue(cid, storage_task) < 1 then
       selfSay("You don't finish my task yet. You need to kill " ..restante.. " " ..monstro.. " yet." , cid)
    talkState[talkUser] = 0
  return true
  
  else
    selfSay("Congratulations! You finished my task! Receive your reward.", cid)
    doSendMagicEffect(getThingPos(cid), 27)
    doPlayerAddExp(cid, exp)
    doPlayerAddItem(cid, id_item, quantidade_item)
    setPlayerStorageValue(cid, storage, 1)
    talkState[talkUser] = 0
  return true
  end

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

 

Agora vai em Data/Creaturescripts/Scripts e crie um arquivo chamado task_billie e adicione o código dentro:

local monstro = "Magmar" -- NOME DO MONSTRO
local quantidade = 50 -- QUANTIDADE DO MONSTRO
local storage_npc = 34900 -- NÃO MEXE
local storage_quantidade = 32510 -- NÃO MEXE
local storage_task = 32600 -- NÃO MEXE

function onKill(cid, target, lasthit)

if getPlayerStorageValue(cid, storage_npc) > 0 then
   if getPlayerStorageValue(cid, storage_task) < 1 then 
      if getPlayerStorageValue(cid, storage_quantidade) < quantidade then 
         if isPlayer(cid) and getCreatureName(target) == monstro then                  
            local restantes = quantidade - getPlayerStorageValue(cid, storage_quantidade)
            doPlayerSendTextMessage(cid, 27, "Billie: " ..restantes.. " " ..monstro.. " restantes para derrotar." ) 	
	setPlayerStorageValue(cid, storage_quantidade, getPlayerStorageValue(cid, storage_quantidade) + 1)    
         return true
         end
         
      elseif getPlayerStorageValue(cid, storage_quantidade) == quantidade then
         doPlayerSendTextMessage(cid, 27, "Billie: You don't have more " ..monstro.. " to defeat. Come back to get your reward.")
         setPlayerStorageValue(cid, storage_quantidade, -1)
         setPlayerStorageValue(cid, storage_task, 1)
      return true 
      end

   else
     return true
   end

else
  return true
end

end 

 

Ainda em Data/Creaturescripts/Scripts abra o arquivo login.lua e vá procure pela parte onde fica os registros de eventos no código, e adicione a seguinte linha embaixo do último evento:

registerCreatureEvent(cid, "task_billie")

 

E por último, em Data/Creaturescripts abra o creaturescripts.xml e adicione a tag:

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

 

Explicação: Deixei comentado as variáveis e cada parte, no arquivo Billie.lua coloque o nome do monstro na variável monstro e a quantidade na variável quantidade_monstro, e o coloque o id e quantidade do item que o player vai ganhar nas variáveis conforme deixei comentado, está bem simples de ver. No arquivo task_billie a mesma coisa, só que lá só vai precisar colocar nome do monstro e quantidade.

 

O player irá ganhar o item conforme o id que está na variável, a quantidade e experiência definida no Billie.lua, só alterar lá as recompensas. O resto não precisa mexer. 

 

Eu testei aqui e funcionou normal, mas teste e me fale se der algum problema.

Link para o comentário
Compartilhar em outros sites

  • 0

Fala mano, tranquilo? Fiz os procedimentos, mas não alterei o ID ainda, porém, quando vou sumonar o npc, /s billie, tá dando debug, sabe oq pode ser? logo vou alterar os ids e testar..

Mas, o debug será por esse motivo? 

Irmão, alterei os ids, o mob e tal, porém, ainda dá debug quando vou /s billie, sabe oque pode ser? 

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, zllcapiroto disse:

Fala mano, tranquilo? Fiz os procedimentos, mas não alterei o ID ainda, porém, quando vou sumonar o npc, /s billie, tá dando debug, sabe oq pode ser? logo vou alterar os ids e testar..

Mas, o debug será por esse motivo? 

Irmão, alterei os ids, o mob e tal, porém, ainda dá debug quando vou /s billie, sabe oque pode ser? 

E ai mano beleza? Então, npc é comando /n, o comando /s é para summon, por isso está dando debug.

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, zllcapiroto disse:

No meu servidor é /m p/ monster e pra npc é /s brosito kk

 

Já descobri o problema, é que o looktype que coloquei nele, não tem no seu servidor. Vai na pasta de NPC e copia a tag do looktype de algum e troca no script do Billie.xml. Troque esta parte:

<look type="1421" head="114" body="119" legs="114" feet="114" corpse="2212"/>

Pelo looktype de outro npc do seu servidor que vai funcionar.

 

Link para o comentário
Compartilhar em outros sites

  • 0

Brosito, troquei o look type, e deu certo, testando o npc lá

Coloquei de 20 mob, só p/ testes

Eu matei os 20 mobs

21:36 Billie: You don't finish my task yet. You need to kill 0 Dragon yet.
21:36 Tefinha Ownss [464]: yes
21:36 Billie: Hello Tefinha Ownss, I need a service... Say help or task to more informations.
21:36 Tefinha Ownss [464]: task
21:36 Billie: Have you already finished my task?
21:36 Tefinha Ownss [464]: yes
21:36 Billie: You don't finish my task yet. You need to kill -1 Dragon yet.
21:36 Tefinha Ownss [464]: yes

 

Ele não tá entregando a recompensa, e nem tá falando em algum local chat, o tanto de mobs que fala, oque faço? tem whats?

se tiver, me add ai, 032 988244977

Acho que já sei oque é, alterei a quantidade, dps que tinha pego a task, sepa é isso..

Mas como faço p/ fazer a task com mais de 1 mob, tem como? 

Tipo, 1 task p/ dragon, outra p/ dragon lord, 1 pra demon, por exemplo..

Ou tem que fazer outro npc?

Irmão, nem sei como agradecer, TMJ!

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, zllcapiroto disse:

Brosito, troquei o look type, e deu certo, testando o npc lá

Coloquei de 20 mob, só p/ testes

Eu matei os 20 mobs

21:36 Billie: You don't finish my task yet. You need to kill 0 Dragon yet.
21:36 Tefinha Ownss [464]: yes
21:36 Billie: Hello Tefinha Ownss, I need a service... Say help or task to more informations.
21:36 Tefinha Ownss [464]: task
21:36 Billie: Have you already finished my task?
21:36 Tefinha Ownss [464]: yes
21:36 Billie: You don't finish my task yet. You need to kill -1 Dragon yet.
21:36 Tefinha Ownss [464]: yes

 

Ele não tá entregando a recompensa, e nem tá falando em algum local chat, o tanto de mobs que fala, oque faço? tem whats?

se tiver, me add ai, 032 988244977

Acho que já sei oque é, alterei a quantidade, dps que tinha pego a task, sepa é isso..

Mas como faço p/ fazer a task com mais de 1 mob, tem como? 

Tipo, 1 task p/ dragon, outra p/ dragon lord, 1 pra demon, por exemplo..

Ou tem que fazer outro npc?

Sim, não pode alterar o valor da task depois que já começou a fazer, porque ele contabiliza a quantidade de monstro incrementando o valor da storage, então se você muda ai quebra a verificação no script kk. 

 

Bom está trabalhando com um npc só e um arquivo só, se quiser fazer mais tasks com mesmo npc ou diferentes tasks com outros npc, vai ter que mudar o valor da storage no arquivo.lua do npc e do arquivo .lua da pasta creaturescripts, ou criar outros arquivos baseado naquele mudando as storage e os textos. 

Link para o comentário
Compartilhar em outros sites

  • 0
11 horas atrás, zllcapiroto disse:

Valeu mano, por acaso tem algum script de alavanca? 

Ou que a pessoa clica, e é teleportada pra tal lugar

Ou clica e nasce mobs..

Tô precisando desses scripts, vlw

 

Por nada!

 

Consigo sim, mas você vai precisar criar um novo tópico para isso porque esse pedido já não tem nada haver mais com o que fez aqui de task. Caso o script que fiz para você resolveu seu problema, marque como melhor resposta.

 

Sobre alavanca, pode criar um novo tópico ou me mandar mensagem, já que existem vários pedidos assim no fórum, então não teria problema resolver via pm. É bem tranquilo de fazer.

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...