• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Sistema] Task System 4.0 (Task system + Daily Task System) (Tfs 0.3.7, 0.4.0 and OTX 2)

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    Hola usuarios de tibiaface

    Task system + Daily Task System

    eliminado:



    * Boss Room

    * Rank Task

    * Premios para los 10 primeros a terminar todas las tareas



    Añadido:



    * Sistema de tareas diarias (exclusivo del sistema de tareas diarias y puede conseguir 1x cada 24 horas, voy a explicar más adelante).

    * Task ahora es por progreso, usted no puede salir y volver, tendrá que terminar el task 1 para avanzar a la task 2, así sucesivamente.

    * Puntos de Tarea

    * Nivel para realizar el task

    * Nueva conversación que muestra una ventana de información sobre el nivel de la tarea, premios que recibirá, progreso, etc ...

    * Items para entrega (Si el jugador debe llevar algún elemento junto con la cantidad de monstruo muerto) para finalizar el task

    *Sistema de look Task (Varia de acordo com a sua quantidade de Task Points, podendo ficar por exemplo como "Huntsman", "Ranger", etc...(alterável)

    * Mods y npc más "clean", varias líneas removidas y el sistema es más rápido

    * Voy a añadir "secuencias de comandos adicionales" Cómo:

    -> Tile que sólo pasa quien tenga permiso después de finalizar determinada quest

    -> Npc de Boss Room para entrar y enfrentar al monstruo quien hizo determinada quest





    [+] Resumen del Task system + Daily Task System [+]



    El sistema de tareas : Es el sistema de tareas "original", que es matar cierta cantidad de monstruos (y entregar ciertos elementos <- es configurable), para recibir recompensas como Exp, dinero y objetos.



    Algunos cambios del simple task 3.0 al 4.0 fueron:



    [+] El sistema ahora es por progreso, eso quiere decir que usted tendrá que ir terminando la búsqueda para avanzar a la siguiente.

    [+] El sistema También recibió un cambio, haciendo que las Tasks precisen que el jugador tiene un nivel determinado

    [+] La tabla para la edición es más fácil, haciendo que añada o elimine monstruos con más tranquilidad, incluyendo cambios de las Rewards del Task.



    Daily Task System: É um sistema que desenvolvi para que os jogadores sempre estejam se comunicando com o npc de Task, no caso da Task Diaria, vária de acordo com o level do jogador, por exemplo:



    Los jugadores entre el nivel 6 al 49 pueden caer en uno de estos tres grupos Diarias: Orcos, Tarantulas o Wyverns

    Los jugadores entre nivel 50 al 79 pueden caer en uno de estos tres grupos Diarias: Dragones, Wailing Widows o Ancient Scarabs



    Y por ahí va, claro que usted podrá aumentar las Task Diarias dependiendo del nivel, hice 3 para cada nivel que es para publicar, pero todo eso usted puede aumentar! Dependiendo de su servidor.



    Y sí, se puede hacer la tarea "ORIGINAL" y "TASK "DIARIA" ao mesmo tempo! Ambas são distintas e possuem Rewards diferenciadas!



    En el caso de la Task diaria, teniendo en cuenta que usted comenzó a hacerla el día 08/01 a las 20:00 Hrs, usted tiene hasta el día 09/01 a las 20: 00Hrs para terminarla y recibir la recompensa, si termina antes , la tarea diaria sólo estará disponible para la repetición a partir de esta misma fecha 09/01 20:00 Hrs;



    [+] Si no termina a tiempo, no tiene problema, basta con esperar este horario y comenzar una nueva tarea.

    [+] Si empezó a Daily Task y terminó antes de esta fecha. pero por algún motivo olvidado de entregar y la misma pasó del plazo, no tiene importancia, si usted ha matado a todos los monstruos hasta el 09/01 20:00 Hrs, usted podrá entregar está Task en cualquier horario para recibir sus Rewards y comenzar un task a partir del momento en que usted entregó! ($·&&$%&$%&$&·$$%&).



    [+] Comandos adicionales [+]



    / task - Muestra la información de su tarea actual, como el nombre de la tarea, Level, Rewards, monstruos que usted puede matar, si tiene que entregar algún elemento junto, etc ...

    / task daily - Es básicamente muestra la misma información de la Task Principal, pero muestra también el plazo límite para la entrega del task.

    / task counter - Es un comando que ACTIVA o DESATIVA el contador de monstruos muertos en la task en su Channel.



    [+] Imágenes [+]



    Clic en este enlace para ver algunas imágenes de la tarea: [Tienes que estar registrado y conectado para ver este vínculo]


    [+] Instalacion del Sistema [+]

    Nos vamos a la carpeta Mods y copiamos cualquier archivo y renombramos por Simple Task.xml y pegamos esto dentro

    Código:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <mod name="Simple Task" version="4.0" author="Vodkart" contact="tibiaking.com" enabled="yes">
    <config name="task_func"><![CDATA[
    task_sys = {
       [1] = {name = "Trolls", start = 176201, monsters_list = {"Troll","Troll champion"}, level = 8, count = 40, points = 0, items = {}, reward = {}, exp = 2000, money = 2000},
       [2] = {name = "rotworms", start = 176202, monsters_list = {"rotworm","carrion worm","Rotworm Queen"}, level = 12, count = 50, points = 0, items = {}, reward = {}, exp = 2500, money = 3000},
       [3] = {name = "cyclops", start = 176203, monsters_list = {"cyclops","cyclops smith","cyclops drone"}, level = 19, count = 60, points = 0, items = {}, reward = {}, exp = 3000, money = 3000},
       [4] = {name = "Green Djinn", start = 176204, monsters_list = {"Green Djinn","Efreet"}, level = 23, count = 80, points = 1, items = {}, reward = {}, exp = 10000, money = 5000},
       [5] = {name = "Blue Djinn", start = 176205, monsters_list = {"Blue Djinn","Marid"}, level = 25, count = 80, points = 1, items = {}, reward = {}, exp = 10000, money = 5000},
       [6] = {name = "pirates", start = 176206, monsters_list = {"Pirate Marauder","Pirate Cutthroat","Pirate Buccaneer","Pirate Corsair"}, level = 30, count = 120, points = 2, items = {}, reward = {}, exp = 10000, money = 5000},
       [7] = {name = "Stone Golems", start = 176207, monsters_list = {"Stone Golem"}, level = 33, count = 130, points = 3, items = {}, reward = {}, exp = 12000, money = 7000},
       [8] = {name = "Carniphilas", start = 176208, monsters_list = {"carniphila"}, level = 36, count = 135, points = 3, items = {}, reward = {}, exp = 8000, money = 8000},
       [9] = {name = "Ice Golems", start = 176209, monsters_list = {"ice golem"}, level = 40, count = 150, points = 2, items = {}, reward = {}, exp = 12000, money = 8200},
       [10] = {name = "Wailing Widows", start = 176210, monsters_list = {"Wailing Widow"}, level = 42, count = 150, points = 3, items = {}, reward = {}, exp = 0, money = 0},
       [11] = {name = "Mutated Rats", start = 176211, monsters_list = {"Mutated Rat"}, level = 46, count = 170, points = 2, items = {}, reward = {}, exp = 8000, money = 8500},
       [12] = {name = "Dragons", start = 176212, monsters_list = {"dragon"}, level = 50, count = 120, points = 1, items = {}, reward = {}, exp = 9000, money = 9000},
       [13] = {name = "Necromancer" ,start = 176213, monsters_list = {"Necromancer"}, level = 60, count = 200, points = 3, items = {}, reward = {}, exp = 20000, money = 15000},
       [14] = {name = "Crystal Spiders" ,start = 176214, monsters_list = {"Crystal Spider"}, level = 63, count = 250, points = 3, items = {}, reward = {}, exp = 25000, money = 11000},
       [15] = {name = "Giant Spider" ,start = 176215, monsters_list = {"Giant Spider","The old widow"}, level = 80, count = 500, points = 0, items = {}, reward = {}, exp = 20000, money = 32000},
       [16] = {name = "Underwater Quaras" ,start = 176216, monsters_list = {"quara predator","quara constrictor","quara hydromancer","quara mantassin","quara pincher"}, level = 82, count = 550, points = 3, items = {}, reward = {}, exp = 22000, money = 15000},
       [17] = {name = "Underwater Quaras Scout" ,start = 176217, monsters_list = {"quara predator scout","quara constrictor scout","quara hydromancer scout","quara mantassin scout","quara pincher scout"}, level = 83, count = 600, points = 3, items = {}, reward = {}, exp = 25000, money = 18000},
       [18] = {name = "Hellspawn" ,start = 176218, monsters_list = {"Hellspawn"}, level = 85, count = 600, points = 4, items = {}, reward = {}, exp = 28000, money = 26000},
       [19] = {name = "Dragon Lords" ,start = 176219, monsters_list = {"Dragon lord"}, level = 88, count = 650, points = 3, items = {}, reward = {}, exp = 30000, money = 35000},
       [20] = {name = "Lizard Dragons" ,start = 176220, monsters_list = {"Lizard Chosen","Lizard Dragon Priest","Lizard High Guard","Lizard Legionnaire", "Lizard Zaogun"}, level = 90, count = 600, points = 4, items = {}, reward = {}, exp = 28000, money = 26000},
       [21] = {name = "Nightmare" ,start = 176221, monsters_list = {"Nightmare","nightmare scion"}, level = 95, count = 650, points = 2, items = {}, reward = {}, exp = 30000, money = 35000},
       [22] = {name = "Hydras" ,start = 176222, monsters_list = {"Hydra"}, level = 100, count = 700, points = 3, items = {}, reward = {}, exp = 40000, money = 40000},
       [23] = {name = "Serpent Spawn" ,start = 176223, monsters_list = {"Serpent Spawn"}, level = 103, count = 720, points = 4, items = {}, reward = {}, exp = 50000, money = 45000},
       [24] = {name = "Hellhounds" ,start = 176224, monsters_list = {"Hellhound"}, level = 107, count = 650, points = 2, items = {}, reward = {}, exp = 30000, money = 35000},
       [25] = {name = "Demons" ,start = 176225, monsters_list = {"Demon"}, level = 110, count = 666, points = 4, items = {}, reward = {}, exp = 66600, money = 66000}
    }
    daily_task = {
       [1] = {name = "Orcs" ,monsters_list = {"Orc Berserker","Orc Rider","Orc Leader","Orc Warlord"}, count = 100, points = 0, reward = {}, exp = 5000, money = 10000},
       [2] = {name = "TarantulaS" ,monsters_list = {"Tarantula"}, count = 120, points = 1, reward = {}, exp = 9000, money = 12000},
       [3] = {name = "Wyvern" ,monsters_list = {"Wyvern"}, count = 125, points = 2, reward = {}, exp = 9000, money = 15000},
       [4] = {name = "Dragons" ,monsters_list = {"Dragon","Dragon Hatchling"}, count = 150, points = 0, reward = {}, exp = 2000, money = 10000},
       [5] = {name = "Wailing Widows" ,monsters_list = {"Wailing Widows"}, count = 200, points = 1, reward = {}, exp = 20000, money = 25000},
       [6] = {name = "Ancient Scarabs" ,monsters_list = {"Ancient Scarab"}, count = 180, points = 5, reward = {}, exp = 22000, money = 18000},
       [7] = {name = "High Class Lizards" ,monsters_list = {"Corrupted Soul","Eternal Guardian","Lizard Chosen","Lizard Dragon Priest","Lizard High Guard","Lizard Legionnaire","Lizard Magistratus","Lizard Noble","Lizard Zaogun"}, count = 300, points = 3, reward = {}, exp = 50000, money = 60000},
       [8] = {name = "Mutated BatS" ,monsters_list = {"Mutated Bat"}, count = 260, points = 2, reward = {}, exp = 40000, money = 55000},
       [9] = {name = "Giant Spiders" ,monsters_list = {"Giant Spider"}, count = 350, points = 3, reward = {}, exp = 60000, money = 70000},
       [10] = {name = "Undead Dragons" ,monsters_list = {"Undead Dragon"}, count = 500, points = 3, reward = {{2173,1}}, exp = 90000, money = 120000},
       [11] = {name = "HydraS" ,monsters_list = {"Hydra"}, count = 600, points = 3, reward = {{2173,1}}, exp = 100000, money = 160000},
       [12] = {name = "Ghastly Dragons" ,monsters_list = {"Ghastly Dragon"}, count = 700, points = 3, reward = {{2173,1}}, exp = 130000, money = 200000}
    }
    task_sys_storages = {176601, 176602, 176603, 176604, 176605, 176606, 176607, 176608} -- task, points, count, daily task, daily count, daily time , daily start, contador
    function getTaskMission(cid)
       return getPlayerStorageValue(cid,task_sys_storages[1]) < 0 and 1 or getPlayerStorageValue(cid,task_sys_storages[1])
    end
    function getDailyTaskMission(cid)
       return getPlayerStorageValue(cid,task_sys_storages[4]) < 0 and 1 or getPlayerStorageValue(cid,task_sys_storages[4])
    end
    function getTaskPoints(cid)
       return getPlayerStorageValue(cid,task_sys_storages[2]) < 0 and 0 or getPlayerStorageValue(cid,task_sys_storages[2])
    end
    function doRandomDailyTask(cid)
       local t = {
          [{6,49}] = {1,3},
          [{50,79}] = {4,6},
          [{80,129}] = {7,9},
          [{130,math.huge}] = {10,12}
       }
       for a , b in pairs(t) do
          if getPlayerLevel(cid) >= a[1] and getPlayerLevel(cid) <= a[2] then
             return math.random(b[1], b[2])
          end
       end
       return 0
    end
    function GetRankTask(cid)
       local ranks = {
          [{1, 20}] = "Huntsman",
          [{21, 50}] = "Ranger",
          [{51, 100}] = "Big Game Hunter",
          [{101, 200}] = "Trophy Hunter",      
          [{201, math.huge}] = "Elite Hunter"
       }
       for v , r in pairs(ranks) do
          if getTaskPoints(cid) >= v[1] and getTaskPoints(cid) <= v[2] then
             return r
          end
       end
       return 0
    end
    function getItemsFromList(items)
       local str = ''
       if table.maxn(items) > 0 then
          for i = 1, table.maxn(items) do
             str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1])
             if i ~= table.maxn(items) then str = str .. ', '
             end
          end
       end
       return str
    end
    function doRemoveItemsFromList(cid,items)
       local count = 0
       if table.maxn(items) > 0 then
          for i = 1, table.maxn(items) do
             if getPlayerItemCount(cid,items[i][1]) >= items[i][2] then
             count = count + 1 end
          end
       end
       if count == table.maxn(items) then
          for i = 1, table.maxn(items) do doPlayerRemoveItem(cid,items[i][1],items[i][2]) end
       else
          return false
       end
       return true
    end
    function getMonsterFromList(monster)
       local str = ''
       if #monster > 0 then
          for i = 1, #monster do
             str = str .. monster[i]
             if i ~= #monster then str = str .. ', ' end
          end
       end
       return str
    end
    function GiveRewardsTask(cid, items)
       local backpack = doPlayerAddItem(cid, 1999, 1) -- backpackID
       for _, i_i in ipairs(items) do
          local item, amount = i_i[1],i_i[2]
          if isItemStackable(item) or amount == 1 then
             doAddContainerItem(backpack, item, amount)
          else
             for i = 1, amount do
                doAddContainerItem(backpack, item, 1)
             end
          end
       end
    end
    function isSummon(cid)
       if(not isCreature(cid)) then
          return false
       end
       return getCreatureMaster(cid) ~= cid
    end
    ]]></config>
    <event type="login" name="TaskLogin" event="script"><![CDATA[
    function onLogin(cid)
       registerCreatureEvent(cid, "KillTask")
       registerCreatureEvent(cid, "TaskLook")
       return true
    end]]></event>
    <talkaction words="/task;!task" event="buffer"><![CDATA[
    domodlib('task_func')
    param,task,daily = param:lower(), getTaskMission(cid), getDailyTaskMission(cid)
    if isInArray({"counter","contador"},param) then
       setPlayerStorageValue(cid, task_sys_storages[8], getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and 1 or 0)
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"[Task System] O contador foi "..(getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and "ativado" or "desativado")..".") return true
    elseif isInArray({"daily","diaria"},param) then
       if not daily_task[daily] or getPlayerStorageValue(cid, task_sys_storages[7]) <= 0 then
          doPlayerSendCancel(cid, "Desculpe, Mas você não está em nenhuma Daily Task.") return true
       elseif getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() <= 0 and getPlayerStorageValue(cid, task_sys_storages[5]) < daily_task[daily].count then
          doPlayerSendCancel(cid,"Desculpe, Mas Você não terminou a Daily Task a tempo! Por favor volte ao npc e comece uma nova Daily Task!") return true
       end
       return doShowTextDialog(cid, 8983, "[->] CURRENT DAILY TASK INFO [<-]\n\nNome: "..daily_task[daily].name.."\nProgresso: ["..(getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and 0 or getPlayerStorageValue(cid, task_sys_storages[5])).."/"..daily_task[daily].count.."]\nPrazo para entrega: "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6])).."\nMonstros para caçar: "..getMonsterFromList(daily_task[daily].monsters_list).."\n\n[->] CURRENT TASK REWARDS [<-]\n\nMoney: "..(daily_task[daily].money > 0 and daily_task[daily].money or 0).."\nExperiencia: "..(daily_task[daily].exp > 0 and daily_task[daily].exp or 0).."\nTask Points: "..daily_task[daily].points.."\nItems: "..(#daily_task[daily].reward > 0 and getItemsFromList(daily_task[daily].reward) or "Nenhum item de recompensa")..".")
    end
    if not task_sys[task] or getPlayerStorageValue(cid, task_sys[task].start) <= 0 then
       doPlayerSendCancel(cid, "você não está em nenhuma task.") return true
    end
    return doShowTextDialog(cid, 8983, "-> CURRENT TASK ["..getTaskMission(cid).."/"..#task_sys.."] <-\n\nTask Name: "..task_sys[task].name.."\nTask Level: "..task_sys[task].level.."\nTask Progress: ["..(getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and 0 or getPlayerStorageValue(cid, task_sys_storages[3])).."/"..task_sys[task].count.."]\nMonster To Hunt: "..getMonsterFromList(task_sys[task].monsters_list)..".\nItens Para Entrega: "..(#task_sys[task].items > 0 and getItemsFromList(task_sys[task].items) or "Nenhum")..".\n\n[->] CURRENT TASK REWARDS [<-]\n\nReward Money: "..(task_sys[task].money > 0 and task_sys[task].money or 0).."\nReward Experiencia: "..(task_sys[task].exp > 0 and task_sys[task].exp or 0).."\nReward Points: "..task_sys[task].points.."\nRedward Items: "..(#task_sys[task].reward > 0 and getItemsFromList(task_sys[task].reward) or "Nenhum item de recompensa")..".")
    ]]></talkaction>
    <event type="look" name="TaskLook" event="script"><![CDATA[
    domodlib('task_func')
    function onLook(cid, thing, position, lookDistance)
       if isPlayer(thing.uid) and getTaskPoints(thing.uid) > 0 then
          doPlayerSetSpecialDescription(thing.uid, "\n"..(getPlayerSex(thing.uid) == 0 and "She" or "He").. " is a "..GetRankTask(thing.uid))
       end   
       return true
    end]]></event>
    <event type="kill" name="KillTask" event="script"><![CDATA[
    domodlib('task_func')
    function onKill(cid, target)
       if isPlayer(cid) and isMonster(target) and not isSummon(target) then
          local t,daily = task_sys[getTaskMission(cid)], daily_task[getDailyTaskMission(cid)]
          if t and getPlayerStorageValue(cid, t.start) > 0 and isInArray(t.monsters_list, getCreatureName(target):lower()) and getPlayerStorageValue(cid, task_sys_storages[3]) < t.count then
             setPlayerStorageValue(cid, task_sys_storages[3], getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and 1 or (getPlayerStorageValue(cid, task_sys_storages[3])+1))
             if getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and getPlayerStorageValue(cid, task_sys_storages[3]) < t.count then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Task System] defeated Total [" .. getPlayerStorageValue(cid, task_sys_storages[3]) .. "/" .. t.count .. "] da Task do " .. t.name .. ".")
             end
             if getPlayerStorageValue(cid, task_sys_storages[3]) >= t.count then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Task System] Parabéns! Você terminou a Task do "..t.name..", volte ao npc parece receber sua recompensa.")
             end
          end
          if daily and getPlayerStorageValue(cid, task_sys_storages[7]) > 0 and getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() >= 0 and isInArray(daily.monsters_list, getCreatureName(target):lower()) and getPlayerStorageValue(cid, task_sys_storages[5]) < daily.count then
             setPlayerStorageValue(cid, task_sys_storages[5], getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and 1 or (getPlayerStorageValue(cid, task_sys_storages[5])+1))
             if getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and getPlayerStorageValue(cid, task_sys_storages[5]) < daily.count then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"[Daily Task System] defeated Total [" .. getPlayerStorageValue(cid, task_sys_storages[5]) .. "/" .. daily.count .. "] da Task do " .. daily.name .. ".")
             end
             if getPlayerStorageValue(cid, task_sys_storages[5]) >= daily.count then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Daily Task System] Parabéns! Você terminou a Task do "..daily.name..", volte ao npc parece receber sua recompensa.")
             end
          end
       end
       return true
    end]]></event>
    </mod>

    ahora nos vamos a la carpeta data/npc/scrips copiamos cualquier archivo y renombramos por simple_task.lua y pegamos esto dentro

    Código:
    domodlib('task_func')
    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,msg, str,rst = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid, msg:lower(),"",""
       local task,daily, hours = getTaskMission(cid),getDailyTaskMission(cid), 24
       if isInArray({"task","tasks","missao","mission"}, msg) then
          if task_sys[task] then
             if getPlayerStorageValue(cid, task_sys[task].start) <= 0 then
                if getPlayerLevel(cid) >= task_sys[task].level then
                   setPlayerStorageValue(cid, task_sys[task].start, 1)
                   npcHandler:say("[Task System] Parabéns, agora você está participando da Task do "..task_sys[task].name.." e deverá matar "..task_sys[task].count.." desta lista: "..getMonsterFromList(task_sys[task].monsters_list)..". "..(#task_sys[task].items > 0 and "Ah e por favor me traga "..getItemsFromList(task_sys[task].items).." para mim." or "").."" , cid)
                else
                   npcHandler:say("Desculpe, Mas você precisa alcançar level "..task_sys[task].level.." para poder participar da Task dos "..task_sys[task].name.."!", cid)
                end
             else
                npcHandler:say("Desculpe, Mas você atualmente está na task "..task_sys[task].name..". Você pode {entregar} caso já tenha terminado.", cid)
             end
          else
             npcHandler:say("Desculpe, Mas por enquanto não tenho mais nenhuma task para você!", cid)
          end
       elseif isInArray({"diaria","daili","daily","dayli","diario"}, msg) then
          if getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() > 0 then
             npcHandler:say("Desculpe, você deve esperar até "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6])).." para iniciar uma nova task diaria!", cid) return true
          elseif daily_task[daily] and getPlayerStorageValue(cid, task_sys_storages[5]) >= daily_task[daily].count then
             npcHandler:say("Desculpe, você tem task para {entregar} !", cid) return true
          end
          local r = doRandomDailyTask(cid)
          if r == 0 then
             npcHandler:say("Desculpe, mas você não tem level para completar nenhuma Task diaria.", cid) return true
          end
          setPlayerStorageValue(cid, task_sys_storages[4], r)
          setPlayerStorageValue(cid, task_sys_storages[6], os.time()+hours*3600)
          setPlayerStorageValue(cid, task_sys_storages[7], 1)
          setPlayerStorageValue(cid, task_sys_storages[5], 0)
          local dtask = daily_task[r]
          npcHandler:say("[Daily Task System] Parabéns, agora você está participando da Task Diaria do "..dtask.name.." e deverá matar "..dtask.count.." monstros desta lista: "..getMonsterFromList(dtask.monsters_list).." até "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6]))..". Boa sorte!" , cid)
       elseif isInArray({"receber","reward","recompensa","report","reportar","entregar","entrega"}, msg) then
          local v, k = task_sys[task], daily_task[daily]
          if v then -- original task
             if getPlayerStorageValue(cid, v.start) > 0 then
                if getPlayerStorageValue(cid,task_sys_storages[3]) >= v.count then
                   if #v.items > 0 and not doRemoveItemsFromList(cid, v.items) then
                      npcHandler:say("Desculpe, Mas você também precisa entregar os itens desta lista: "..getItemsFromList(v.items), cid) return true
                   end
              if v.exp > 0 then doPlayerAddExp(cid, v.exp) str = str.."".. (str == "" and "" or ", ") .." "..v.exp.." de exp" end
                  if v.points > 0 then setPlayerStorageValue(cid, task_sys_storages[2], (getTaskPoints(cid)+v.points)) str = str.."".. (str == "" and "" or ", ") .." + "..v.points.."task points" end
                  if v.money > 0 then doPlayerAddMoney(cid, v.money) str = str.."".. (str == "" and "" or ", ") ..""..v.money.." gps" end
                  if table.maxn(v.reward) > 0 then GiveRewardsTask(cid, v.reward) str = str.."".. (str == "" and "" or ", ") ..""..getItemsFromList(v.reward) end
                   npcHandler:say("Obrigado pela sua ajuda Recompensas: "..(str == "" and "nenhuma" or ""..str.."").." por ter completado a task do "..v.name, cid)
                   setPlayerStorageValue(cid, task_sys_storages[3], 0)
                   setPlayerStorageValue(cid, task_sys_storages[1], (task+1))
                else
                   npcHandler:say("Desculpe, Mas você ainda não terminou a sua task do "..v.name..". Preciso que mate mais "..(getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and v.count or -(getPlayerStorageValue(cid,task_sys_storages[3])-v.count)).." Destes monstros terriveis!", cid)
                end
             end
          end
          if k then -- daily task
             if getPlayerStorageValue(cid, task_sys_storages[7]) > 0 then
                if getPlayerStorageValue(cid, task_sys_storages[5]) >= k.count then
                if k.exp > 0 then doPlayerAddExp(cid, k.exp) rst = rst.."".. (rst == "" and "" or ", ") .." "..k.exp.." de exp" end
                  if k.points > 0 then setPlayerStorageValue(cid, task_sys_storages[2], (getTaskPoints(cid)+k.points)) rst = rst.."".. (rst == "" and "" or ", ") .." + "..k.points.."task points" end
                  if k.money > 0 then doPlayerAddMoney(cid, k.money) rst = rst.."".. (rst == "" and "" or ", ") ..""..k.money.." gps" end
                  if table.maxn(k.reward) > 0 then GiveRewardsTask(cid, k.reward) rst = rst.."".. (rst == "" and "" or ", ") ..""..getItemsFromList(k.reward) end
                   npcHandler:say("Obrigado pela sua ajuda! Recompensas: "..(rst == "" and "nenhuma" or ""..rst.."").." por ter completado a task do "..k.name, cid)
                   setPlayerStorageValue(cid, task_sys_storages[4], 0)
                   setPlayerStorageValue(cid, task_sys_storages[5], 0)
                   setPlayerStorageValue(cid, task_sys_storages[7], 0)
                   else
                   npcHandler:say("Desculpe, Mas você ainda não terminou a sua task diaria do "..k.name..". Preciso que mate mais "..(getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and k.count or -(getPlayerStorageValue(cid,task_sys_storages[5])-k.count)).." Destes monstros!", cid)
                end
             end
          end
       elseif msg == "no" then
          selfSay("Tudo bem então", cid)
          talkState[talkUser] = 0
          npcHandler:releaseFocus(cid)
       end
       return true
    end
    npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
    npcHandler:addModule(FocusModule:new())

    ahora nos vamos a Data/Npc copiamos cualquier archivo y renombramos por Ludger.xml y pegamos esto dentro

    Código:
    <?xml version="1.0"?>
    <npc name="Ludger" script="data/npc/scripts/simple_task.lua" walkinterval="50000" floorchange="0">
    <health now="100" max="100"/>
    <look type="129" head="95" body="116" legs="121" feet="115" addons="3"/>
    <parameters>
    <parameter key="message_greet" value="Ola |PLAYERNAME|. Deseja fazer uma {task} ou {daily} task? Ou quer {entregar} sua task e receber premios por ela!" />
    </parameters>
    </npc>

    [+] configuración [+]

    patron original task

    Código:

    task_sys = {
       [1] = {name = "Trolls", start = 176201, monsters_list = {"Troll","Troll champion"}, level = 8, count = 40, points = 0, items = {}, reward = {}, exp = 2000, money = 2000}
    }

    1] -> El número entre corchetes [] significa que el orden de las tareas, como la tarea es para el progreso siempre se inicia en 1 y se pro [2], y así sucesivamente.

    name -> Es el nombre de la tarea del jugador va a hacer.

    start -> es el almacenamiento que indicará si el jugador comenzó a tareas

    monster_list = {} -> es el nombre de los monstruos que el jugador debe cazar para completar la tarea

    level -> Es el nivel requerido para iniciar tareas

    count -> El número de monstruos que el jugador tiene que matar para completar la tarea

    point -> Aquí determinan cuántos puntos de tareas el jugador recibirá la tarea completa

    items = {} -> Aquí se determina además de matar a los monstruos, el jugador tendrá que entregar tema también! Si sólo tiene colocar el {ITEM_ID, CANTIDAD} EX:

    Código:
    items = {{2173,1}{2160,10},{2493,2}}

    rewad -> Aquí determina si el jugador recibirá elementos para completar la tarea, los mismos artículos fórmula / \

    Código:
    reward = {{2520,1},{2173,1}}

    exp -> Si el jugador recibirá Exp para terminar la tarea. 0 o cantidad de exp

    Money -> Si el jugador recibirá dinero para terminar la tarea. 0 o cantidad de dinero

    Daily Task System

    Código:
    daily_task = {
       [1] = {name = "Orcs" ,monsters_list = {"Orc Berserker","Orc Rider","Orc Leader","Orc Warlord"}, count = 100, points = 0, reward = {}, exp = 5000, money = 10000}
    }

    Se sigue el patrón de la tarea original, pero que no tiene que entregar los artículos a la APN!

    ¿Cómo funciona la asignación aleatoria de nivel de acuerdo con el Daily task?

    Buscar por tabla en MODS

    Código:
    local t = {
          [{6,49}] = {1,3},
          [{50,79}] = {4,6},
          [{80,129}] = {7,9},
          [{130,math.huge}] = {10,12}
       }
    entre las llaves y corchetes es el nivel del jugador para las Daily Task, Usted puede agregar cuántas usted desea!

    Digamos que:

    [{6,49}] = {1,3} -> Esto significa que entre el nivel 6 al jugador 49a pueden caer en el número diario de tareas 1 (ORC), 2 (Tarantulas) o 3 (Wyvern)!

    [{50,79}] = {4,6} -> ¿Quieres decir entre el nivel 50-79, el jugador puede caer en el número de tareas diarias 4 (dragones), 5 (Wailing Widows) o 6 (escarabajos antiguos)!

    ...

    [{130} math.huge] = {10,12} -> ¿Se refiere al nivel de jugador de 130 o más pueden caer en el número de tareas diarias 10 (Undead Dragons), 11 (hidras) o 12 (Ghastly Dragons)!

    Look Rank System

    Buscar por tabla en MODS

    Código:
    local ranks = {
          [{1, 20}] = "Huntsman",
          [{21, 50}] = "Ranger",
          [{51, 100}] = "Big Game Hunter",
          [{101, 200}] = "Trophy Hunter",      
          [{201, math.huge}] = "Elite Hunter"
       }

    Entre 1-20 Task points la fila será Huntsman

    Entre 21-50 Tareas de tarea la fila será Ranger

    Entre 51-100 Puntos de Tareas el rango será Big Game Hunter

    etc ...

    ¡Cambie como quiera!



    Ver perfil de usuario http://www.tibiaface.com

    Sotomayor

    avatar
    Miembro
    Miembro
    Se ve simple el script pero muy detallado lo voy a probar para implementarlo en servidor de nuevo gracias saludos!



    No funciona el task counter, no marca el progreso que llevas de los monsters y cuando matas los 40 trolls no entrega nada solo te dice que mates los 40 trolls esta re bueno el mod pero me anda fallando y no me indica errores en la consola Sad tfs 0.4

    Listo! Solucionado el problema era una linea en el mod se las dejo aqui por si les sucede lo mismo tienen que remplazarla y listo!

    esta: if isPlayer(cid) and isMonster(target) and not isSummon(target) then

    por esta: if isPlayer(cid) and isMonster(target) then

    y ya! aun asi muchas gracias maya por el aporte exceleente

    Ver perfil de usuario

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).