Ir para conteúdo
lepiigor

Custom Npc 1.3 TFS Task System

Recommended Posts

lepiigor    16
lepiigor

Olá Hoje vou compartilhar o único sistema de Custom Task que consegui fazer funcionar no servidor, todo mundo que toca no Sources dá muito erro (talvez porque fiquei no 12.60, mas acho que não).) . O NPC SÓ FUNCIONA PARA 1 TAREFA, então se você quiser 20 tarefas, serão 20 NPC .. Infelizmente não consigo fazer funcionar para vários monstros e tarefas ao mesmo tempo, se você souber como fazê-lo, por favor faça então. compartilhe!

 

1- Nós criamos um NPC, aquele que você quer que você copie e cole o XML, você muda o nome, e necessariamente o nome do npc.lua você muda também. Vá em Npc / Scripts, e do mesmo jeito que você copia e cola qualquer NPC, você o renomeia com o mesmo nome do NPC do XML e cola este:

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

local storage = 6230

function creatureSayCallback(cid, type, msg)
     if not npcHandler:isFocused(cid) then
         return false
     end
     local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

     if msgcontains(msg, "mission") then
         if getPlayerStorageValue(cid, storage) == -1 then
             selfSay("I have a mission for you to kill 400 Hellhounds and 400 Hellfire Fighters do you accept?", cid)
             talkState[talkUser] = 1
         elseif getPlayerStorageValue(cid, storage) == 1 then
             selfSay("Did you kill 400 Hellhounds and 400 Hellfire Fighters?", cid)
             talkState[talkUser] = 1
         else
             selfSay("You already did the mission, you can do it only one time.", cid)
         end
     elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
         if getPlayerStorageValue(cid, storage) == -1 then
             selfSay("Good, come back when you killed them.", cid)
             setPlayerStorageValue(cid, storage, 1)
         else
             if getPlayerStorageValue(cid, 38118) == 400 and getPlayerStorageValue(cid, 38119) == 400 then
                 selfSay("Good job, here is your reward.", cid)
                 doPlayerAddItem(cid, 2160, 10)
				 doPlayerAddItem(cid, 5919, 1)
				 doPlayerAddItem(cid, 5925, 100)
				 doPlayerAddItem(cid, 5899, 100)
				 doPlayerAddItem(cid, 5884, 1)
                 doPlayerAddExp(cid, 15000000)
				 setPlayerStorageValue(cid, storage, 2)
             else
                 selfSay("You didn't kill them all.", cid)
             end
         end
         talkState[talkUser] = 0
     elseif msgcontains(msg, "no") and talkState[talkUser] == 1 then
         selfSay("Ok then.", cid)
         talkState[talkUser] = 0
     end
     return true
end

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

 

local storage = 6230 : Então aqui é muito fácil, se você vai criar 50 NPCs, onde está escrito: local storage = 6230 (este é ostorage do NPC, 1 diferente por NPC!), voce pode empezar por 825000 o numero muy alto

if getPlayerStorageValue(cid, 38118) == 400 and getPlayerStorageValue(cid, 38119) == 400 then : importante aqui, o 38118 corresponde ao armazenamento de 1 monstro (no script a seguir), o == 400, corresponde ao número de 400 monstros, o próximo o mesmo, 38119 ao armazenamento do monstro necessário (segundo monstro) para a tarefa, bem como == 400, 400 monstros também, no exemplo, 400 lutador do inferno e 400 cães do inferno. Abaixo: doplayerAdditem, você sabe o que é, é o ID do item que você dará para a tarefa seguido de uma vírgula, com o número (quantidade) que você dará. identico para doPlayerAddExp.

- Não exclua setPlayerStorageValue (cid, storag, 2), caso contrário, depois de concluído, os jogadores poderão solicitar recompensas infinitas, a tarefa não pode ser repetida, a menos que você altere o armazenamento.

 

Codigo siguiente: Em data / script / Creaturescript, crie uma nova pasta com o nome de Task por exemplo, copie uma lua aleatória para ela, apenas para manter a extensão lua. Copie este código para dentro.

local hellhoundsKill = CreatureEvent("hellhoundsKill")

local config = {
     ['hellhound'] = {amount = 400, storage = 38118, startstorage = 6230, startvalue = 1},
	 ['hellfire fighter'] = {amount = 400, storage = 38119, startstorage = 6230, startvalue = 1}
}
function hellhoundsKill.onKill(cid, target)
     local monster = config[getCreatureName(target):lower()]
     if isPlayer(target) or not monster or isSummon(target) then
         return true
     end

     if (getPlayerStorageValue(cid, monster.storage)+1) < monster.amount and getPlayerStorageValue(cid, monster.startstorage) >= monster.startvalue then
         setPlayerStorageValue(cid, monster.storage, getPlayerStorageValue(cid, monster.storage) + 1)
         doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, '[Task message]: '..(getPlayerStorageValue(cid, monster.storage)+1)..' of '..monster.amount..' '..getCreatureName(target)..'s killed.')
     end
     if (getPlayerStorageValue(cid, monster.storage)+1) == monster.amount then
         doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Congratulations, you have killed '..(getPlayerStorageValue(cid, monster.storage)+1)..' '..getCreatureName(target)..'s and completed the '..getCreatureName(target)..'s mission.')
         setPlayerStorageValue(cid, monster.storage, getPlayerStorageValue(cid, monster.storage) + 1)
     end
     return true
end

hellhoundsKill:register()

- Importante aqui onde você escreve hellhoundsKill, é o nome a ser alterado cada vez que você cria uma tarefa npc, no exemplo é hellhoundsKill, então você pode nomeá-lo como quiser, mas você deve substituí-lo em 4 campos, dê uma boa olhada em o script.

-Temos 'hellhound' e número para matar 400, o storage como mencionado acima, 38118 e o startstorage é o storage que corresponde ao NPC que dá a tarefa, importante que seja idêntico, abaixo do mesmo, hellfire figther, 400, storage 38119 e 6230 para o mesmo npc.

- Aqui você também pode modificar, MESSAGE_EVENT_ADVANCE, que corresponde ao texto na cor branca cada vez que ele matar 1 monstro, você pode colocar WARNING que estará em VERMELHO, ou então excluí-lo e escrever em número como este: (cid, 22, '[Mensagem de tarefa]' ... etc

 

Procure o login.lua e abaixo: se player: 

if player:getLastLoginSaved() == 0 then
		player:sendOutfitWindow()
		local backpack = player:addItem(1988)
		if backpack then
			for i = 1, #items do
				backpack:addItem(items[i][1], items[i][2])
			end
		end
		player:addItem(2050, 1, true, 1, CONST_SLOT_AMMO)
	else

 

outro Copie isso (acima do armazenamento da missão)

player:registerEvent("hellhoundsKill")

 

- Aqui você deve colocar o mesmo nome do script acima, se você o chamou de DemonKILL, você deve escrever demonKill, no exemplo que estávamos com HellhoundsKill. Leva EFFECT imediatamente, se você fizer / recarregar scripts Npc / recarregar, mas tenha cuidado !!! No login.lua, você tem que se desconectar e voltar para que tenha efeito, se não fizer o logout e matar um monstro, o servidor provavelmente irá CRASH, o melhor e reiniciará ou se você estiver sozinho antes de colocar on-line para testá-los todos. Estou com 72 NPCs hoje e irei adicionar mais 30 para todos os chefes existentes, até agora sem problemas.

Se você tiver alguma dúvida, não hesite em PM

 

Compartilhar este post


Link para o post
Majesty    1755
Majesty

Muito obrigado pela sua contribuição, seu conteúdo foi aprovado!
Nós do OTServ Brasil agradecemos, seu conteúdo com certeza ajudará a muitos outros. 
Você recebeu +1 REP!

Compartilhar este post


Link para o post

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×