adrianokk 1 Postado Abril 29, 2020 Share Postado Abril 29, 2020 (editado) Base: Pokemon DXP. TFS 0.3.6 Estou precisando de 1 NPC de quest que pede para matar uma quantidade "X" de pokemons. Verifica se matou todos os pokemons depois de ter iniciado a quest e entrega o premio. PS: Porque o Xtibia ta caindo tanto !? Editado Abril 29, 2020 por adrianokk Link para o comentário Compartilhar em outros sites More sharing options...
1 Yan Oliveira 211 Postado Maio 2, 2020 Share Postado Maio 2, 2020 (editado) Vamos lá! Primeiramente, vai em Data/NPC e crie um arquivo xml chamado Tasker.xml (ou nome de sua preferência) e adicione o script dentro: <?xml version="1.0" encoding="UTF-8"?> <npc name="Tasker" script="Tasker.lua" walkinterval="0" floorchange="0"> <health now="150" max="150"/> <look type="1419" head="10" body="15" legs="20" feet="25"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|, I need a service... Say {task} to more informations."/> </parameters> </npc> Lembrando que se dar crash é por conta do looktype do npc que você não deve ter no seu server, só trocar. Agora em Data/NPC/Scripts crie um arquivo chamado Tasker.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 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 (TEM QUE SER A MESMA DO CREATURESCRIPTS E NÃO PODE MUDAR O VALOR APÓS COMEÇAR A TASK) local storage = 32500 -- STORAGE DO NPC local storage_npc = 34900 -- STORAGE PARA COMEÇAR A TASK local storage_quantidade = 32510 -- STORAGE QUE ARMAZENA A QUANTIDADE DE MONSTROS DERROTADOS DA TASK. 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)) ----------------------------------- [ 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, 0) 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()) Explicação: Precisa prestar bastante atenção nessa parte e na próxima, são detalhes que fazem a diferença e qualquer coisa já da problema. Recomendo que deixe essas storages caso não use, até porque usa bastante e pode te confundir na hora de trocar. Mas como comentei todas, da para saber qual é qual. Agora vai em Data/Creaturescripts/Scripts e crie o arquivo Tasker.lua e adicione o script: local monstro = "Magmar" -- NOME DO MONSTRO (VERIFICAR A NOMENCLATURA CORRETA NO ARQUIVO XML DO MONSTRO, SE COMEÇA COM MINÚSCULA OU MAIÚSCULA) local quantidade = 50 -- QUANTIDADE DE MONSTROS (MESMA QUANTIDADE DO SCRIPT DO NPC) local storage_npc = 34900 -- STORAGE QUE O NPC LIBERA A TASK PARA FAZER local storage_quantidade = 32510 -- STORAGE PARA CONTABILIZAR (CONTADOR) OS MONSTROS DERROTADOS local storage_task = 32600 -- STORAGE QUE VERIFICA SE A TASK JÁ FOI CONCLUIDA local nome_npc = "Tasker" -- NOME DO NPC AQUI function onKill(cid, target, lasthit) if getPlayerStorageValue(cid, storage_task) < 1 then if (getPlayerStorageValue(cid, storage_npc) > 0) and (getPlayerStorageValue(cid, storage_quantidade) < quantidade) then if isCreature(target) and getCreatureName(target) == monstro then setPlayerStorageValue(cid, storage_quantidade, getPlayerStorageValue(cid, storage_quantidade) + 1) local restante = quantidade - getPlayerStorageValue(cid, storage_quantidade) if restante > 1 then doPlayerSendTextMessage(cid, 27, nome_npc.. ": " ..restante.. " " ..monstro.. " restantes para derrotar.") return true elseif restante == 1 then doPlayerSendTextMessage(cid, 27, nome_npc.. ": " ..restante.. " " ..monstro.. " restante para derrotar.") return true elseif restante == 0 then doPlayerSendTextMessage(cid, 27, nome_npc.. ": Não há mais " ..monstro.. " para derrotar. Você já pode vir pegar sua recompensa!") setPlayerStorageValue(cid, storage_task, 1) return true end else return true end else return true end else return true end end Agora abra o creaturescripts.xml e adicione a tag: <event type="kill" name="Tasker" event="script" value="Tasker.lua"/> E por fim, abra o arquivo Data/Creaturescripts/Scripts/login.lua e registre o evento (de preferência por último) : registerCreatureEvent(cid, "Tasker") Lembrando que o nome do evento registrado tem que ser o mesmo que está na tag xml. E cuidado com o nome do monstro que coloca, alguns podem começar com letra minúscula ou maiúscula, e se tiver diferente, uma letra que seja em tamanho, já vai dar errado. Então precisa olhar no xml do monstro. Eu testei e funcionou, qualquer problema só falar. Editado Maio 5, 2020 por Yan18 Link para o comentário Compartilhar em outros sites More sharing options...
0 SoldierLira 0 Postado Novembro 20, 2023 Share Postado Novembro 20, 2023 Cara, o log fica esse abaixo e não contabiliza quando mato os pokes. [20/11/2023 18:04:17] -1 [20/11/2023 18:04:17] 1 [20/11/2023 18:04:17] 0 [20/11/2023 18:04:17] -1 [20/11/2023 18:04:17] 1 [20/11/2023 18:04:17] -1 Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
adrianokk 1
Base: Pokemon DXP.
TFS 0.3.6
Estou precisando de 1 NPC de quest que pede para matar uma quantidade "X" de pokemons.
Verifica se matou todos os pokemons depois de ter iniciado a quest e entrega o premio.
PS: Porque o Xtibia ta caindo tanto !?
Editado por adrianokkLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados