Ir para conteúdo

Luga03

Posts Recomendados

Olá! Eu estava ajudando um cara com um task system , ele disse que pegou na net, mas as alterações que ele queria eu tive que refazer algumas partes do sistemas! Testei e funcionou perfeitamente! Funciona com Poketibia e Tibia! Vamos deixar de enrolação e adicionar o sistema!

Lembrando também que funciona com tfs 0.3.6 e tfs 0.4! Não testei com tfs 1.x mas acho que não funciona.

 

Vá em creaturescripts.xml e adicione isso:

 

<event type="kill" name="KillTask" event="script" value="task.lua"/>

No login.lua adiciona isso com os demais:

 

registerCreatureEvent(cid, "KillTask")

Agora crie um arquivo chamado task.lua e adicione isso:

 

local tasksss = {   [1] = {name = "Blastoise",  sto = 10212, count = 3, time_sto = 5457, time = 1*24*60*60, sto_count = 14129, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},   [2] = {name = "Charizard",  sto = 10213, count = 5, time_sto = 5458, time = 1*24*60*60, sto_count = 14130, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},}function onKill(cid, target)        for _, t in ipairs(tasksss) do            local total_count = t.count            local m_sto = t.sto            local count_sto = t.sto_count            if getPlayerStorageValue(cid, m_sto) ~= -1 then                if getCreatureName(target) == t.name then                	if (total_count - getPlayerStorageValue(cid, count_sto)) == 1 then                		setPlayerStorageValue(cid, count_sto, getPlayerStorageValue(cid, count_sto) + 1)                    	doPlayerSendTextMessage(cid, 20, "You are killed ".. getPlayerStorageValue(cid, count_sto) .." " .. t.name .. " and finished the task!")                    	return true                    elseif (total_count - getPlayerStorageValue(cid, count_sto)) >= 1 then                        setPlayerStorageValue(cid, count_sto, getPlayerStorageValue(cid, count_sto) + 1)                        doPlayerSendTextMessage(cid, 20, "You are killed ".. getPlayerStorageValue(cid, count_sto) .." of ".. total_count .." " .. t.name .. " kills to finish the task.")                        return true                    end                end            end        end    return trueend

Agora vá em npc/scripts e crie um arquivo chamado task.lua e adicione isso:

 

local tasksss = {   [1] = {name = "Blastoise",  sto = 10212, count = 3, time_sto = 5457, time = 1*24*60*60, sto_count = 14129, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},   [2] = {name = "Charizard",  sto = 10213, count = 5, time_sto = 5458, time = 1*24*60*60, sto_count = 14130, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},}local keywordHandler = KeywordHandler:new()local npcHandler = NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)local talkState = {}function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) endfunction onThink() npcHandler:onThink() endfunction creatureSayCallback(cid, type, msg)    if(not npcHandler:isFocused(cid)) then        return false    end    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid    value = -1    for i = 1, #tasksss do        if msgcontains(msg, tasksss[i].name) and not value ~= -1 then            value = i        end    end    if value == -1 then        selfSay('I don\'t have a this task!', cid)        talkState[talkUser] = 0        return true    end    local configss = tasksss[value]    local name = configss.name    local m_sto = configss.sto    local time_sto = configss.time_sto    local count_sto = configss.sto_count    local total_count = configss.count    local rest = total_count - getPlayerStorageValue(cid, count_sto)        if getPlayerStorageValue(cid, time_sto) < os.time() then -- verifica se o player ainda está no prazo            if getPlayerStorageValue(cid, m_sto) <= 0 then -- verifica se o player não pegou está task                selfSay('Ready! Now you need kill a '.. total_count .. ' '.. name .. '!', cid)                setPlayerStorageValue(cid, m_sto, 1)                setPlayerStorageValue(cid, total_count, 0)                talkState[talkUser] = 0                           else                if rest <= 0 then -- Verifica se o player matou todos os monstros nescessários                    doPlayerAddItem(cid, configss.rewardid, configss.rewardcount)                    setPlayerStorageValue(cid, count_sto, 0)                     setPlayerStorageValue(cid, m_sto, -1)                     setPlayerStorageValue(cid, time_sto, os.time() + configss.time)                    doPlayerAddExperience(cid, configss.rewardexp)                    doSendAnimatedText(getCreaturePosition(cid), configss.rewardexp, 215)                    selfSay(configss.text, cid)                     talkState[talkUser] = 0                else                    selfSay('You need to kill '..rest..' '..name..' to gain a reward.', cid)                    talkState[talkUser] = 0                end            end        else            selfSay('You already did this task, player. Wait '..math.ceil((getPlayerStorageValue(cid, time_sto) - os.time())/(60*60))..' hours to do it again.', cid)            talkState[talkUser] = 0        endendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new())

Pronto, agora volte para a pasta npc e crie um novo arquivo .xml chamado de Task e adicione isso lá:

 

<?xml version="1.0" encoding="UTF-8"?><npc name="Npc Nome" script="task.lua" walkinterval="350000" floorchange="0" speed="0">	<health now="150" max="150"/>	<look type="369" head="91" body="102" legs="83" feet="0"/>	<parameters>			<parameter key="message_greet" value="You want gain a task of {Blastoise}?"/>	</parameters></npc>

Pronto, agora o sistema de task está funcionando, e para adicionar um novo monstro pra fazer a task? Basta editar a tabela, mas não esqueça que tem que atualizar a tabela nos 2 scripts .lua !!

 

local tasksss = {   [1] = {name = "Blastoise",  sto = 10212, count = 3, time_sto = 5457, time = 1*24*60*60, sto_count = 14129, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},   [2] = {name = "Charizard",  sto = 10213, count = 5, time_sto = 5458, time = 1*24*60*60, sto_count = 14130, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},}

Para configurar siga as seguintes instruções:

 

Spoiler

Name = Nome da criatura da task

sto = Coloque um valor a mais do valor anterior configurado

count = quantidade de monstros a ser morto

time_sto = Coloque um valor a mais do anterior

time = tempo que poderá fazer a task novamente

sto_count = Um valor a mais do valor anterior

money = Quantidade de dinheiro que o player irá receber, caso coloque 0, não ira receber nada

rewardid = itemid do item que player irá ganhar

rewardcount = quantidade do item adicionado anteriormente

rewardexp = quantidade de exp que player irá ganhar

text = Texto que irá aparecer quando player terminar a task

 

Modificações da versão 2.0:

 

Corrigido bug de apenas o primeiro monstro configurado funcionava, agora todos configurados funcionam!

Quando player fala qual quer coisa que não seja o nome do monstro, diz que não tem aquela task!

Modificado modo de contagem de kill, agora monstra quantos você matou e o total que precisa matar, quando mata o ultimo monstro, aparece a mensagem que terminou a task!

 

Créditos:

 

Criador @miguel223

Drazyn1291 -- Editei e reformulei muita coisa! Adicionei coisas como a contagem que falta ao matar os monstros, editei pra fazer a task apenas se o player falar com o NPC e outras coisas!

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

20 horas atrás, Drazyn1291 disse:

Olá! Eu estava ajudando um cara com um task system , ele disse que pegou na net, mas as alterações que ele queria eu tive que refazer algumas partes do sistemas! Testei e funcionou perfeitamente! Funciona com Poketibia e Tibia! Vamos deixar de enrolação e adicionar o sistema!

Lembrando também que funciona com tfs 0.3.6 e tfs 0.4! Não testei com tfs 1.x mas acho que não funciona.

 

Vá em creaturescripts.xml e adicione isso:

 

<event type="kill" name="KillTask" event="script" value="task.lua"/>

No login.lua adiciona isso com os demais:

 

registerCreatureEvent(cid, "KillTask")

Agora crie um arquivo chamado task.lua e adicione isso:

 

local tasksss = {   [1] = {name = "Blastoise",  sto = 10212, count = 3, time_sto = 5457, time = 1*24*60*60, sto_count = 14129, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},   [2] = {name = "Charizard",  sto = 10213, count = 5, time_sto = 5458, time = 1*24*60*60, sto_count = 14130, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},}function onKill(cid, target)        for _, t in ipairs(tasksss) do            local total_count = t.count            local m_sto = t.sto            local count_sto = t.sto_count            if getPlayerStorageValue(cid, m_sto) ~= -1 then                if getCreatureName(target) == t.name then                	if (total_count - getPlayerStorageValue(cid, count_sto)) == 1 then                		setPlayerStorageValue(cid, count_sto, getPlayerStorageValue(cid, count_sto) + 1)                    	doPlayerSendTextMessage(cid, 20, "You are killed ".. getPlayerStorageValue(cid, count_sto) .." " .. t.name .. " and finished the task!")                    	return true                    elseif (total_count - getPlayerStorageValue(cid, count_sto)) >= 1 then                        setPlayerStorageValue(cid, count_sto, getPlayerStorageValue(cid, count_sto) + 1)                        doPlayerSendTextMessage(cid, 20, "You are killed ".. getPlayerStorageValue(cid, count_sto) .." of ".. total_count .." " .. t.name .. " kills to finish the task.")                        return true                    end                end            end        end    return trueend

Agora vá em npc/scripts e crie um arquivo chamado task.lua e adicione isso:

 

local tasksss = {   [1] = {name = "Blastoise",  sto = 10212, count = 3, time_sto = 5457, time = 1*24*60*60, sto_count = 14129, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},   [2] = {name = "Charizard",  sto = 10213, count = 5, time_sto = 5458, time = 1*24*60*60, sto_count = 14130, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},}local keywordHandler = KeywordHandler:new()local npcHandler = NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)local talkState = {}function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) endfunction onThink() npcHandler:onThink() endfunction creatureSayCallback(cid, type, msg)    if(not npcHandler:isFocused(cid)) then        return false    end    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid    value = -1    for i = 1, #tasksss do        if msgcontains(msg, tasksss[i].name) and not value ~= -1 then            value = i        end    end    if value == -1 then        selfSay('I don\'t have a this task!', cid)        talkState[talkUser] = 0        return true    end    local configss = tasksss[value]    local name = configss.name    local m_sto = configss.sto    local time_sto = configss.time_sto    local count_sto = configss.sto_count    local total_count = configss.count    local rest = total_count - getPlayerStorageValue(cid, count_sto)        if getPlayerStorageValue(cid, time_sto) < os.time() then -- verifica se o player ainda está no prazo            if getPlayerStorageValue(cid, m_sto) <= 0 then -- verifica se o player não pegou está task                selfSay('Ready! Now you need kill a '.. total_count .. ' '.. name .. '!', cid)                setPlayerStorageValue(cid, m_sto, 1)                setPlayerStorageValue(cid, total_count, 0)                talkState[talkUser] = 0                           else                if rest <= 0 then -- Verifica se o player matou todos os monstros nescessários                    doPlayerAddItem(cid, configss.rewardid, configss.rewardcount)                    setPlayerStorageValue(cid, count_sto, 0)                     setPlayerStorageValue(cid, m_sto, -1)                     setPlayerStorageValue(cid, time_sto, os.time() + configss.time)                    doPlayerAddExperience(cid, configss.rewardexp)                    doSendAnimatedText(getCreaturePosition(cid), configss.rewardexp, 215)                    selfSay(configss.text, cid)                     talkState[talkUser] = 0                else                    selfSay('You need to kill '..rest..' '..name..' to gain a reward.', cid)                    talkState[talkUser] = 0                end            end        else            selfSay('You already did this task, player. Wait '..math.ceil((getPlayerStorageValue(cid, time_sto) - os.time())/(60*60))..' hours to do it again.', cid)            talkState[talkUser] = 0        endendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new())

Pronto, agora volte para a pasta npc e crie um novo arquivo .xml chamado de Task e adicione isso lá:

 

<?xml version="1.0" encoding="UTF-8"?><npc name="Npc Nome" script="task.lua" walkinterval="350000" floorchange="0" speed="0">	<health now="150" max="150"/>	<look type="369" head="91" body="102" legs="83" feet="0"/>	<parameters>			<parameter key="message_greet" value="You want gain a task of {Blastoise}?"/>	</parameters></npc>

Pronto, agora o sistema de task está funcionando, e para adicionar um novo monstro pra fazer a task? Basta editar a tabela, mas não esqueça que tem que atualizar a tabela nos 2 scripts .lua !!

 

local tasksss = {   [1] = {name = "Blastoise",  sto = 10212, count = 3, time_sto = 5457, time = 1*24*60*60, sto_count = 14129, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},   [2] = {name = "Charizard",  sto = 10213, count = 5, time_sto = 5458, time = 1*24*60*60, sto_count = 14130, money = 100, rewardid = 7621, rewardcount = 100, rewardexp = 10000,  text = "Congratulations! You finished this task. In 24h, you will be able to do it again."},}

Para configurar siga as seguintes instruções:

 

  Ocultar conteúdo

Name = Nome da criatura da task

sto = Coloque um valor a mais do valor anterior configurado

count = quantidade de monstros a ser morto

time_sto = Coloque um valor a mais do anterior

time = tempo que poderá fazer a task novamente

sto_count = Um valor a mais do valor anterior

money = Quantidade de dinheiro que o player irá receber, caso coloque 0, não ira receber nada

rewardid = itemid do item que player irá ganhar

rewardcount = quantidade do item adicionado anteriormente

rewardexp = quantidade de exp que player irá ganhar

text = Texto que irá aparecer quando player terminar a task

 

Modificações da versão 2.0:

 

Corrigido bug de apenas o primeiro monstro configurado funcionava, agora todos configurados funcionam!

Quando player fala qual quer coisa que não seja o nome do monstro, diz que não tem aquela task!

Modificado modo de contagem de kill, agora monstra quantos você matou e o total que precisa matar, quando mata o ultimo monstro, aparece a mensagem que terminou a task!

 

Créditos:

 

Quem criou o script base n sei quem foi

Drazyn1291 -- Eeditei e reformulei muita coisa! Adicionei coisas como a contagem que falta ao matar os monstros, editei pra fazer a task apenas se o player falar com o NPC e outras coisas!

 

valeu ^^ quem fez o script pra min foi o @miguel223  ficou dahora com suas modificaçoes

Link para o comentário
Compartilhar em outros sites

Em 16/05/2016 at 12:33, Daniel disse:

Seria bom adaptar pra tfs mais recentes, embora voltado às duas categorias. De qualquer forma o sistema parece estar impecável. Parabéns pela contribuição @Drazyn1291

Caso alguém esteja disposto a fazer está atualização pode fazer! Eu não sei as functions de tfs 1.x kkk

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Edit:

Ja tem kk, eu que nao vi que tinha a barrinha de rolagem. Obrigado. Ah teria como adicionar mais npcs, tipow deixar igual pxg com 4 npcs com dificuldades diferentes?

 

Teria como adicionar recompensa de xp tb? No caso o player ganharia o iten e tb uma quantidade de xp.

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

1 hora atrás, Taiger disse:

Edit:

Ja tem kk, eu que nao vi que tinha a barrinha de rolagem. Obrigado. Ah teria como adicionar mais npcs, tipow deixar igual pxg com 4 npcs com dificuldades diferentes?

 

Teria como adicionar recompensa de xp tb? No caso o player ganharia o iten e tb uma quantidade de xp.

Ele já tem isso de ganhar XP '-' Só configurar na tabela, e isso de 4 NPC's é só criar um novo NPC.xml e um novo .lua e modificar as tabelas ai funfa normal, mas na parte do creaturescripts coloca uma tabela com todos, TODOS os monstros configurados!

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Obrigado por compartilhar, estava precisando exatamente desse sistema. 

 

É possível eu configurar a recompensa para "pontos", cada task da 1 ponto e com uma certa quantia de pontos a pessoa troca por uma recompensa no npc ?

Link para o comentário
Compartilhar em outros sites

Em ‎16‎/‎05‎/‎2016 at 12:33, Daniel disse:

Seria bom adaptar pra tfs mais recentes, embora voltado às duas categorias. De qualquer forma o sistema parece estar impecável. Parabéns pela contribuição @Drazyn1291

 

Acredito que o sistema foi feito pensando em poketibia mesmo, já que a maioria dos poketibias são de tfs versão antiga...

 

Link para o comentário
Compartilhar em outros sites

4 horas atrás, Caronte disse:

 

Acredito que o sistema foi feito pensando em poketibia mesmo, já que a maioria dos poketibias são de tfs versão antiga...

 

Eu fiz ele pensando no poketibia, mas pode sim, ser usado em tibia normal, só mudar as mensagens e monstros configurados '-' Até por que existem vários 8.60 q não são tfs 1.x '-'

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...