Ir para conteúdo
  • 0

(Pedido) NPC


BrunoMaciel

Pergunta

Alguem tem a script de npc de task??

 

1 - de item 

2 - de matar x pokemon

 

Um script basica simples pra PDA!!

 

um npc de task de pegar item(loot) e outro de matar X pokemon.

 

quem puder posta aqui a script ^^

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

- Começando pelo NPC de Task de item

 

Vai em Data/NPC e crie o arquivo Breno.xml e adicione o código dentro:

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

<npc name="Breno" script="Breno.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" corpse="2212"/>

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

Agora em Data/NPC/Scripts crie o arquivo Breno.lua (com codificação ANSI) 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 storage = 150000
local storage_start = 150001
local id_item = 12163 -- ID DO ITEM QUE O NPC PEDE
local quantidade_item = 100 -- QUANTIDADE DE ITENS QUE O NPC PEDE
local id_item_recebido = 16563 -- ID DO ITEM QUE RECEBE AO COMPLETAR A TASK
local quantidade_item_recebido = 1 -- QUANTIDADE DE ITENS QUE RECEBE AO COMPLETAR A TASK

----------------------------------- [ DIALOGO COM NPC] ---------------------------------
  
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') or msgcontains(msg, 'task') then
 	  
  if getPlayerStorageValue(cid, storage) == 1 then
    selfSay("Você já completou minha task.", cid)
    talkState[talkUser] = 0
	return true 
  
  else
    selfSay("Preciso que você me traga " ..quantidade_item.. " " ..getItemNameById(id_item).. " Você trouxe?", cid) 
    talkState[talkUser] = 1
  return true
  end
  

elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then
    
  if getPlayerStorageValue(cid, storage_start) < 1 then
    setPlayerStorageValue(cid, storage_start, 1)
  return true
  end

  if getPlayerItemCount(cid, id_item) >= quantidade_item then
    doPlayerRemoveItem(cid, id_item, quantidade_item)
    selfSay("Parabéns! Você trouxe " ..quantidade_item..  " " ..getItemNameById(id_item).. " que eu precisava. Receba sua recompensa.", cid)
    doPlayerAddItem(cid, id_item_recebido, quantidade_item_recebido)
    doSendMagicEffect(getPlayerPosition(cid), 29)
    setPlayerStorageValue(cid, storage, 1)
    talkState[talkUser] = 0
  return true
  
  else
    selfSay("Você ainda não trouxe " ..quantidade_item.. " " ..getItemNameById(id_item).. " que eu preciso.", cid)
    talkState[talkUser] = 0
  return true
  end

return true

elseif (msgcontains(msg, 'no') or msgcontains(msg, 'não')) and talkState[talkUser] == 1 then
  
  if getPlayerStorageValue(cid, storage_start) < 1 then 
    selfSay("Ok, fale comigo novamente caso queira fazer minha task.")
    talkState[talkUser] = 0
  return true
  
  else
    selfSay("Então vá buscar os itens que eu pedi.")
    talkState[talkUser] = 0
  return true
  end
  
return true
end

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

 

- Agora é o NPC da Task que derrota Pokémon

 

Vá em Data/NPC e crie o arquivo Brime.xml e adicione o código dentro:

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

<npc name="Brime" script="Brime.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" corpse="2212"/>

<parameters>
	<parameter key="message_greet" value="Olá |PLAYERNAME|, eu recompenso jogadores que aceitam meus desafios. Diga {help}, {ajuda} ou {task} para mais informações."/>
</parameters>
</npc>

 

Agora em Data/NPC/Scripts crie o arquivo Brime.lua (com codificação ANSI) 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_poke_task = "Scyther"
local quantidade_pokemon = 50
local storage_npc = 120000
local storage_task = 110000
local storage_start = 121000

-- RECOMPENSAS --
local id_item = 12545
local quantidade_item = 1
local exp = 500000

----------------------------------- [ DIALOGO COM NPC] ---------------------------------
  
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') or msgcontains(msg, 'task') then
 	  
    if getPlayerStorageValue(cid, storage_task) == 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 {"..nome_poke_task.."} para mim. Você aceita este desafio?", cid) 
      talkState[talkUser] = 1
    return true
    end  
  

elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim') or (msgcontains(msg, 'ok'))) and talkState[talkUser] == 1 then           
 
if getPlayerStorageValue(cid, storage_start) < 1 then
  setPlayerStorageValue(cid, storage_start, 1)
return true
end
 
  if getPlayerStorageValue(cid, storage_npc) == 1 then
    selfSay("Parabéns! Você completou minha tarefa. Receba sua recompensa.", cid)
    doPlayerAddExp(cid, exp)
    doPlayerAddItem(cid, id_item, quantidade_item)
    doSendAnimatedText(getThingPos(cid), exp, 27)
    doSendMagicEffect(getPlayerPosition(cid), 29)
    setPlayerStorageValue(cid, storage_task, 1)
    talkState[talkUser] = 0
  return true

  else
    if getPlayerStorageValue(cid, storage_npc) < 0 then
      selfSay("Vá derrotar todos os " ..quantidade_pokemon.. " " ..nome_poke_task.. " para mim.")
      setPlayerStorageValue(cid, storage_npc, 0)
      talkState[talkUser] = 0
    return true
    
    elseif getPlayerStorageValue(cid, storage_npc) == 0 then
      selfSay("Você ainda não derrotou todos os " ..quantidade_pokemon.. " " ..nome_poke_task..  ". Vá derrotar os " ..nome_poke_task.. " restante 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
  
  if getPlayerStorageValue(cid, storage_start) < 1 then
    selfSay("Ok, fale comigo novamente caso queira fazer minha task.", cid)    
    talkState[talkUser] = 0
  return true

  else
    selfSay("Então vá completar sua tarefa.")
    talkState[talkUser] = 0
  return true
  end

 return true
 end

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

 

Agora em Data/Creaturescripts/scripts crie o arquivo task_npc.lua (com a codificação ANSI do arquivo pelo fato de ter acentuação no português) e adicione o código dentro:

local storage_npc = 120000
local storage_contador = 120001

local pokemon = {
   [1] = {name = "Scyther", count = 50},
}

local restante  
local nome = pokemon[1].name

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.")
        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..  " 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 em Data/Creaturescripts abra o creaturescripts.xml e adiciona a tag:

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

E por último em Data/Creaturescripts/Scripts abra o Login.lua e adicione a tag na parte de eventos:

registerCreatureEvent(cid, "task_npc")

 

Link para o comentário
Compartilhar em outros sites

  • 0

Ja ja vou testa ^^

 

So uma duvida antes caso eu queira ter mais npcs de task de matar pokemon vou usa este npc como base claro porem estas scripts de task tipo do >> Data/Creaturescripts/Scripts

Vo precisa adiciona sempre algo a mais ou agora e so ir adicionando os npcs de task de mata pokemon normal ou vo te que sempre adiciona umas tag dessa ??

Link para o comentário
Compartilhar em outros sites

  • 0
2 minutos atrás, BrunoMaciel disse:

Ja ja vou testa ^^

 

So uma duvida antes caso eu queira ter mais npcs de task de matar pokemon vou usa este npc como base claro porem estas scripts de task tipo do >> Data/Creaturescripts/Scripts

Vo precisa adiciona sempre algo a mais ou agora e so ir adicionando os npcs de task de mata pokemon normal ou vo te que sempre adiciona umas tag dessa ??

Você fala a tag do OnKill do creaturescripts.xml?

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, BrunoMaciel disse:

sim ou se agora e so eu ir adicionando os npcs tipo cria eles normal 

Não, para criar outros NPC de task de derrotar pokémon vai ter que repetir o mesmo processo. Pois naquele script eu apenas defini que vai derrotar o pokémon Scyther pois na tabela eu pego a primeira posição da tabela (só para amostra) e defini a storage do onKill do creaturescripts como verificação para o NPC.

 

Então para criar outro é necessário criar outro npc (xml e lua) criar o script de verificação no arquivo lua e em creaturescripts que você faz o script da task.

Link para o comentário
Compartilhar em outros sites

  • 0
2 minutos atrás, Yan18 disse:

Não, para criar outros NPC de task de derrotar pokémon vai ter que repetir o mesmo processo. Pois naquele script eu apenas defini que vai derrotar o pokémon Scyther pois na tabela eu pego a primeira posição da tabela (só para amostra) e defini a storage do onKill do creaturescripts como verificação para o NPC.

 

Então para criar outro é necessário criar outro npc (xml e lua) criar o script de verificação no arquivo lua e em creaturescripts que você faz o script da task.

ata entendi ^^

 

vou testa os npc entao ^^

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

  • 0
Agora, BrunoMaciel disse:

ata entendi ^^

 

vou testa os npc entao ^^

Testa ai, eu testei aqui e funcinou. Mas qualquer problema me fale.

 

E só fazendo um adendo, se você usa a base DXP provavelmente não vai funcionar porque o onKill dela está bugado e as task que fiz nessa base não funcionaram.

Link para o comentário
Compartilhar em outros sites

  • 0
2 minutos atrás, Yan18 disse:

Testa ai, eu testei aqui e funcinou. Mas qualquer problema me fale.

 

E só fazendo um adendo, se você usa a base DXP provavelmente não vai funcionar porque o onKill dela está bugado e as task que fiz nessa base não funcionaram.

a base e PDA 

Link para o comentário
Compartilhar em outros sites

  • 0
1 minuto atrás, Yan18 disse:

Então vai funcionar tranquilamente ^^, a menos que algum função do script não exista na sua base ou esteja bugada.

vo testa so ultima duvida na parte do NPC o level 1 eo level da task caso eu mude sei la pra 10 nego abaixo nao pode fazer certo ?

 

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, BrunoMaciel disse:

vo testa so ultima duvida na parte do NPC o level 1 eo level da task caso eu mude sei la pra 10 nego abaixo nao pode fazer certo ?

 

Level do NPC que você fala é o atributo do xml ?

Link para o comentário
Compartilhar em outros sites

  • 0
1 minuto atrás, Yan18 disse:

Level do NPC que você fala é o atributo do xml ?

sim 

 

<npc name="Breno" script="Breno.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">

level="1"

isso se e caso eu coloquei sei la 10 ai so char level 10+ pode fazer a task com ele so pra min saber se isso ou nao 

Link para o comentário
Compartilhar em outros sites

  • 0
3 minutos atrás, BrunoMaciel disse:

sim 

 


<npc name="Breno" script="Breno.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">

level="1"

isso se e caso eu coloquei sei la 10 ai so char level 10+ pode fazer a task com ele so pra min saber se isso ou nao 

Esse atributo não é para o player fazer a missão em si do NPC, mas o nível mínimo que os players terão que ter para falar com o NPC. Eu não curto muito e nem ideal verificar nível por ali, até porque se tiver verificação de nível no script da ruim kkk. Acho bem melhor verificar o nível no script do npc, e não pelo XML. Até porque se o player não tiver nível, pelo menos na mensagem da verificação o player vai saber.

 

Se quiser faço uma verificação de nível para você nos 2 npc.

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

  • 0
17 minutos atrás, Yan18 disse:

Esse atributo não é para o player fazer a missão em si do NPC, mas o nível mínimo que os players terão que ter para falar com o NPC. Eu não curto muito e nem ideal verificar nível por ali, até porque se tiver verificação de nível no script da ruim kkk. Acho bem melhor verificar o nível no script do npc, e não pelo XML. Até porque se o player não tiver nível, pelo menos na mensagem da verificação o player vai saber.

 

Se quiser faço uma verificação de nível para você nos 2 npc.

a entao so queria por nivel na de itens 

17 minutos atrás, Yan18 disse:

Esse atributo não é para o player fazer a missão em si do NPC, mas o nível mínimo que os players terão que ter para falar com o NPC. Eu não curto muito e nem ideal verificar nível por ali, até porque se tiver verificação de nível no script da ruim kkk. Acho bem melhor verificar o nível no script do npc, e não pelo XML. Até porque se o player não tiver nível, pelo menos na mensagem da verificação o player vai saber.

 

Se quiser faço uma verificação de nível para você nos 2 npc.

 

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

  • 0
7 minutos atrás, BrunoMaciel disse:

a entao so queria por nivel na de itens 

Abra o script do NPC Breno e troque o código por esse:

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 storage = 150000
local storage_start = 150001
local id_item = 12163 -- ID DO ITEM QUE O NPC PEDE
local quantidade_item = 100 -- QUANTIDADE DE ITENS QUE O NPC PEDE
local id_item_recebido = 16563 -- ID DO ITEM QUE RECEBE AO COMPLETAR A TASK
local quantidade_item_recebido = 1 -- QUANTIDADE DE ITENS QUE RECEBE AO COMPLETAR A TASK
local level = 10 -- NÍVEL NECESSÁRIO PARA FAZER A TASK DO NPC

----------------------------------- [ DIALOGO COM NPC] ---------------------------------
  
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') or msgcontains(msg, 'task') then
 	
  if getPlayerLevel(cid) < level then
    selfSay("Para fazer minha missão é necessário ter nível " ..level.. " ou mais para fazer. Fale novamente comigo quando você atingir o nível necessário.")
    talkState[talkUser] = 0
  return true  
  
  else
    if getPlayerStorageValue(cid, storage) == 1 then
      selfSay("Você já completou minha task.", cid)
      talkState[talkUser] = 0
    return true 
  
    else
      selfSay("Preciso que você me traga " ..quantidade_item.. " " ..getItemNameById(id_item).. " Você trouxe?", cid) 
      talkState[talkUser] = 1
    return true
    end
  
  return true
  end

elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then
    
  if getPlayerStorageValue(cid, storage_start) < 1 then
    setPlayerStorageValue(cid, storage_start, 1)
  return true
  end

  if getPlayerItemCount(cid, id_item) >= quantidade_item then
    doPlayerRemoveItem(cid, id_item, quantidade_item)
    selfSay("Parabéns! Você trouxe " ..quantidade_item..  " " ..getItemNameById(id_item).. " que eu precisava. Receba sua recompensa.", cid)
    doPlayerAddItem(cid, id_item_recebido, quantidade_item_recebido)
    doSendMagicEffect(getPlayerPosition(cid), 29)
    setPlayerStorageValue(cid, storage, 1)
    talkState[talkUser] = 0
  return true
  
  else
    selfSay("Você ainda não trouxe " ..quantidade_item.. " " ..getItemNameById(id_item).. " que eu preciso.", cid)
    talkState[talkUser] = 0
  return true
  end

return true

elseif (msgcontains(msg, 'no') or msgcontains(msg, 'não')) and talkState[talkUser] == 1 then
  
  if getPlayerStorageValue(cid, storage_start) < 1 then 
    selfSay("Ok, fale comigo novamente caso queira fazer minha task.")
    talkState[talkUser] = 0
  return true
  
  else
    selfSay("Então vá buscar os itens que eu pedi.")
    talkState[talkUser] = 0
  return true
  end
  
return true
end

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

Deixei o nível mínimo como 10, caso queira trocar, só alterar na variável level.

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...