Jump to content

Recommended Posts

Killua Task Sytem

Versões testadas: tfs 0.3.6 e 0.4

Eu sei que já existem vários task systems, inclusive aqui no fórum, mas do jeitinho que eu queria, não consegui achar nenhum. Por isso, resolvi fazer um eu mesmo.

O que ele tem de diferente?

É totalmente simplificado.

Não precisa "pegar" as tasks. Elas já são todas automáticas, ou seja, os monstros são contados desde sempre.

É tudo configurado em uma única tabela, de forma muito simples.

Tem um NPC que somente entra as recompensas.

Seu progresso pode ser visto pelo comando !task

2zp5dle.jpg

Atualização do sistema:

Refiz os códigos pois existia uma possibilidade de bug. Otimizei eles, deixando o código mais limpo, eficiente e rápido. Aconselho a todos que usam o sistema que instalem a nova versão.

Instalação:

Tags:

 

Em talkacions.xml adicione:

<talkaction log="yes" words="!task" event="script" value="amoebaTask.lua"/>

Em creaturescripts.xml adicione:

<event type="kill" name="AmoebaTask" event="script" value="amoebaTaskCreature.lua"/>

Em data/creaturescritps/scripts/login.lua adicione:


registerCreatureEvent(cid, "AmoebaTask") 

Scripts:

Lib:

Crie amoebaTask.lua em data/lib e coloque

-- Script feito por Killua, antigo amoeba13 --

amoebaTask = {
["Jabuti"] = {creatures = {"Jabuti","Jabuti Hatchling"}, storage = 2312112, storagecount = 890120, count = 300, exp = 0, money = 0, premios = {{6527, 10},{10133, 1}}},
["Thenebreus"] = {creatures = {"Thenebreus"}, storage = 2312113, storagecount = 890121, count = 250, exp = 0, money = 0, premios = {{6527, 4},{10134, 1}}},
["Demon"] = {creatures = {"Demon"}, storage = 2312114, storagecount = 890122, count = 5, exp = 0, money = 0, premios = {{6527, 4},{10134, 1}}}
}

function taskKills(cid, storage) 
    local kills = getPlayerStorageValue(cid, storage)
    return kills < 0 and 0 or kills
end 

 

Talkaction:

Crie amoebaTask.lua em data/talkactions/scripts e coloque

-- Script por Killua, antigo amoeba13 --

function onSay(cid, words, param, channel)
    local stt = ""

    for nome, info in pairs(amoebaTask) do
        nomes = nome
        storages = info.storagecount
        counts = info.count
        stt = stt .. nomes .. " [" .. taskKills(cid, storages) .. "/" .. counts .. "]\n"
    end        
    doShowTextDialog(cid, 11231, "Tasks disponiveis em nosso servidor: \n" .. stt .. "")
   return true
end

 

Creaturescripts:

Crie amoebaTaskCreature.lua em data/creaturescripts/scripts e coloque

 

-- Script por Killua, antigo amoeba13 --

function onKill(cid, target, lastHit)
    
    if not isMonster(target) or not isPlayer(cid) then
        return true
    end
    
    for _, tasks in pairs(amoebaTask) do
        if isInArray(tasks.creatures, getCreatureName(target)) then
            if taskKills(cid, tasks.storagecount) < tasks.count then
                doPlayerSetStorageValue(cid, tasks.storagecount, taskKills(cid, tasks.storagecount)+1)
                break
            end
        end
    end
    return true
end

 

NPC:

Em data/npc crie Task Man.xml e coloque

<?xml version="1.0" encoding="UTF-8"?><npc name="Task Man" script="data/npc/scripts/amoebaTask.lua" walkinterval="2000" floorchange="0">
<health now="150" max="150"/>
<look type="129" head="95" body="116" legs="121" feet="115" addons="3"/>
<parameters>
<parameter key="message_greet" value="Ola |PLAYERNAME|! Eu posso recompensa-lo por terminar tasks, basta dizer o nome de alguma! Para saber o nome das tasks e seu progresso em cada uma, diga !task."/>
</parameters>
</npc>

Em data/npc/script crie amoebaTask.lua e coloque

-- Script por Killua, antigo Amoeba13 --

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
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid

    if amoebaTask[msg] then
        if getPlayerStorageValue(cid, amoebaTask[msg].storage) == -1 then
            if getPlayerStorageValue(cid, amoebaTask[msg].storagecount) == amoebaTask[msg].count then
                local esperiencia = amoebaTask[msg].exp > 0 and "" ..amoebaTask[msg].exp.. " exp e " or ""
                local dineiro = amoebaTask[msg].money > 0 and "" .. amoebaTask[msg].money .. " gold coins e " or ""
                selfSay("Voce conseguiu completar a task de ".. msg .. ", parabens! Eu vou te dar " .. esperiencia .. "" .. dineiro .."alguns itens como recompensa.", cid)
                doPlayerAddExperience(cid, amoebaTask[msg].exp)
                doPlayerAddMoney(cid, amoebaTask[msg].money)
                doPlayerSetStorageValue(cid, amoebaTask[msg].storage, 1)
                for juba, prize in pairs(amoebaTask[msg].premios) do
                    doPlayerAddItem(cid, prize[1], prize[2])
                end
            else
                selfSay("Desculpe, mas voce ainda nao matou todos os " .. msg .. "s. Voce so matou " .. taskKills(cid, amoebaTask[msg].storagecount) .. " de " .. amoebaTask[msg].count .. " " .. msg .. "s.", cid)
            end
        else
            selfSay("Voce so pode recber uma vez o premio de cada task.", cid)
        end
    else
        selfSay("O que?", cid)
    end
    return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Configuração:

A configuração é feita unicamente na tabela da lib:

amoebaTask = {
["Jabuti"] = {creatures = {"Jabuti","Jabuti Hatchling"}, storage = 2312112, storagecount = 890120, count = 300, exp = 0, money = 0, premios = {{6527, 10},{10133, 1}}},
["Thenebreus"] = {creatures = {"Thenebreus"}, storage = 2312113, storagecount = 890121, count = 250, exp = 0, money = 0, premios = {{6527, 4},{10134, 1}}},
["Demon"] = {creatures = {"Demon"}, storage = 2312114, storagecount = 890122, count = 5, exp = 0, money = 0, premios = {{6527, 4},{10134, 1}}}
}
  • Em [""] vc coloca o nome que vai aparecer no !task e que também será usado para pega a recompensa no NPC.
  • Em creatures vc coloca todos os monstros que vão contabilizar para tal task.
  • Em storage vc coloca o storage de task completa, que garante que o premio só será pego uma vez. Esse storage nunca pode ser repetido!
  • Em storagecount vc coloca o storage de contagem de monstros. Esse também nunca pode ser repetido!
  • Em count vc coloca o número de monstros necessários pra completar a task.
  • Em exp vc coloca a exp que ganha completando.
  • Em money vc coloca o dinheiro que ganha completando.
  • Em premios vc coloca os itens que ganham completando, seguido de sua quantidade. Ex: {6527, 4} o player vai receber 4 itens de id 6527.

Espero que façam bom uso do sistema. Vou ficar feliz em atender qualquer tipo de dúvida e também aceito sugestões.

Caso queira que as tasks possam ser feitas repetidas vezes, me peça que eu ponho aqui. Pois basta mudar duas linhas.

Edited by Killua
Atualização
Link to comment
https://xtibia.com/forum/topic/226410-killua-task-system-atualizado-16042014/
Share on other sites

  • 2 weeks later...

Muito bom trabalho mano! Amanhã meu rep é seu akspdokasdop

Tem coisa melhor que task no tibia?

 

@Edit

 

Você falou que não precisa pegar a task, é só chegar na hunt e ir matando que vai contar? Se sim, da para fazer a mesma task mais de uma vez?

Edited by JPedroTibianno

Muito bom trabalho mano! Amanhã meu rep é seu akspdokasdop

Tem coisa melhor que task no tibia?

 

@Edit

 

Você falou que não precisa pegar a task, é só chegar na hunt e ir matando que vai contar? Se sim, da para fazer a mesma task mais de uma vez?

 

Valeu cara :)

 

Isso, é só sair matando que já conta. Do jeito que eu configurei ele aqui, só dá pra fazer uma vez cada task... Mas dá pra mudar e deixar fazer a mesma várias vezes, pra isso só mudaria umas 3 linhas

amoebaTask = {

{nome = "Jabuti", creatures = {"Jabuti","Jabuti Hatchling"}, storage = 2312112, storagecount = 890120, count = 300, exp = 0, money = 0, premios = {{2160, 10},{2195, 1}}},

{nome = "Thenebreus", creatures = {"Thenebreus"}, storage = 2312113, storagecount = 890121, count = 250, exp = 0, money = 0, premios = {{2160, 8},{10134, 1}}},

{nome = "Demon", creatures = {"Demon"}, storage = 2312114, storagecount = 890122, count = 200, exp = 0, money = 0, premios = {{2160, 80},{10134, 1}}}

{nome = "Dragon", creatures = {"Dragon"}, storage = 2312114, storagecount = 890123, count = 200, exp = 0, money = 0, premios = {{2160, 20},{10134, 1}}}



storagecount = 890123 < Eu adicionei o dragon so que ta dando ero oque errei ? em storage account como voçe disse n pode ser repetido adicionei 23 e da erro

×
×
  • Create New...