Task System 2016

Luga03
Por Luga03
em Globalevents e Spells
  • 1
  • 2

Luga03

Gabriel Lucena :D
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/04/15Posts: 956Gênero: Masculino

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!

Hello! How are you? It's fine? 

 

Okay, so you like my helps? if yes, then do you can like my post, give-me a reputation, you can't?

 

Good morning for everyone! And have a good day!

Luga03

Gabriel Lucena :D
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/04/15Posts: 956Gênero: Masculino

Tópico atualizado! Scripts refeitos na versão 2.0 com tudo funcionando!

Hello! How are you? It's fine? 

 

Okay, so you like my helps? if yes, then do you can like my post, give-me a reputation, you can't?

 

Good morning for everyone! And have a good day!

Drakopoulos

Pra mim, tudo é um desafio que pode ser descoberto.
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 20/03/14Posts: 367Gênero: Masculino

Mt bom :P:

Josegvb

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 23/09/12Posts: 1041Gênero: Masculino
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

Administrador

xTibia 2017
avatar
Administrador
Administrador

INFOS

Grupo: AdministradorRegistrado: 09/07/05Posts: 5780Gênero: Outro

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

DICA

Utilize botão @UP, no início de seu tópico, para atualizar o destaque de seu tópico em "Tópicos Recentes" na index, fará com que mais pessoas o vejam.

 

 

Luga03

Gabriel Lucena :D
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/04/15Posts: 956Gênero: Masculino
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

Hello! How are you? It's fine? 

 

Okay, so you like my helps? if yes, then do you can like my post, give-me a reputation, you can't?

 

Good morning for everyone! And have a good day!

kttallan

Lord Sorte
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 06/03/13Posts: 1574Gênero: MasculinoChar no Tibia: Lord Sorte

Parabéns parcerio e obrigado por essa colaboração ao forum.

 

REP+

                                                                Scripter em Treinamento

 

Codigos

 

Simples Pet Sistema < New

 

Assim que possivel mais codigos, com criatividade.

Luga03

Gabriel Lucena :D
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/04/15Posts: 956Gênero: Masculino
43 minutos atrás, Taiger disse:

Funciona no PDA?

Funciona em qual quer um!

Hello! How are you? It's fine? 

 

Okay, so you like my helps? if yes, then do you can like my post, give-me a reputation, you can't?

 

Good morning for everyone! And have a good day!

Taiger

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 02/07/07Posts: 1140Gênero: Masculino

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.

Luga03

Gabriel Lucena :D
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/04/15Posts: 956Gênero: Masculino
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!

Hello! How are you? It's fine? 

 

Okay, so you like my helps? if yes, then do you can like my post, give-me a reputation, you can't?

 

Good morning for everyone! And have a good day!

Hdk

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/05/16Posts: 4

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 ?

Caronte

Ex-Moderador de Scripting
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 25/09/10Posts: 1341Gênero: Masculino
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...

 

Luga03

Gabriel Lucena :D
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/04/15Posts: 956Gênero: Masculino
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 '-'

Hello! How are you? It's fine? 

 

Okay, so you like my helps? if yes, then do you can like my post, give-me a reputation, you can't?

 

Good morning for everyone! And have a good day!

  • 1
  • 2