• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

reset task system --after relogin or after dead.

tuduras

Well-Known Member
Joined
Jun 4, 2017
Messages
351
Solutions
2
Reaction score
59
Hello, my TASK SYSTEM (data/lib/tasksystem) reset status after dead or relogin. I have to take new task every relog.
Task I have in data/lib/takssystem. Maybe somethink with storage .
task1.webp

task2.webp

task3.webp

I post my task script : ((((I use otx 2.16 based on 0.3.7))))

LUA:
if not TaskSystem then
    TaskSystem = {}

    TaskSystem.list = {

        [1] = {name = "Dragon Lord", creatures = {"dragon lord","donate dragon lord","dragon lord vip","Castle Dragon Lord"}, storage = 2312111, count = 15000, exp = 7000000, money = 50000000, rewards = {}},
        [2] = {name = "Frost Dragon", creatures = {"frost dragon","donate frost dragon","frost dragon vip","Castle Frost Dragon"}, storage = 2312112, count = 15000, exp = 7000000, money = 50000000, rewards = {}},
        [3] = {name = "Grim Reaper", creatures = {"grim reaper","donate grim reaper","grim reaper vip"}, storage = 2312113, count = 12000, exp = 9000000, money = 70000000, rewards = {}},
        [4] = {name = "Medusa", creatures = {"medusa","donate medusa","medusa vip"}, storage = 2312129, count = 25000, exp = 9500000, money = 70000000, rewards = {}},
        [5] = {name = "Hydra", creatures = {"hydra","donate hydra","hydra vip","Castle Hydra","hydra supervip"}, storage = 2312130, count = 15000, exp = 7000000, money = 50000000, rewards = {}},
        [6] = {name = "Warlock", creatures = {"warlock","donate warlock","warlock vip","Castle Warlock", "donate warlock", "warlock supervip"}, storage = 2312114, count = 15000, exp = 10000000, money = 80000000, rewards = {}},
        [7]  = {name = "Demon", creatures = {"demon","donate demon","demon vip","castle demon"}, storage = 2312115, count = 50000, exp = 15000000, money = 500000000, rewards = {{12289,1}}},
        [8] = {name = "Serpent Spawn", creatures = {"serpent spawn","serpent spawn vip"}, storage = 2312116, count = 5000, exp = 9000000, money = 50000000, rewards = {{7440,1}}},
        [9] = {name = "Nightstalker Force", creatures = {"nightstalker force"}, storage = 2312117, count = 17500, exp = 10000000, money = 70000000, rewards = {{5957,1}}},
        [10] = {name = "Shrek Warrior", creatures = {"shrek warrior"}, storage = 2312119, count = 17500, exp = 8000000, money = 70000000, rewards = {{7440,1}}},
        [11] = {name = "Primal Shaman", creatures = {"primal shaman","Donate Primal Shaman"}, storage = 2312120, count = 7500, exp = 8500000, money = 80000000, rewards = {{5957,1}}},
        [12] = {name = "Primal Guard", creatures = {"primal guard"}, storage = 2312121, count = 7500, exp = 8500000, money = 80000000, rewards = {{5957,1}}},
        [13] = {name = "Donate Werewolf", creatures = {"donate werewolf","werewolf"}, storage = 2312122, count = 7500, exp = 8500000, money = 80000000, rewards = {{5957,1}}},
        [14] = {name = "Hurricane", creatures = {"hurricane"}, storage = 2312123, count = 7500, exp = 8500000, money = 80000000, rewards = {{5957,1}}},
        [15] = {name = "Tanoris", creatures = {"curse","tanoris charm","wind minion"}, storage = 2312124, count = 40000, exp = 20000000, money = 300000000, rewards = {{5957,1},{12289,1},{10310,1}}},
        [16] = {name = "Boss Stremoxy", creatures = {"boss stremoxy"}, storage = 2312125, count = 30, exp = 15000000, money = 200000000, rewards = {{5957,1}}},
        [17] = {name = "O Coisa", creatures = {"o coisa"}, storage = 2312126, count = 1, exp = 20000000, money = 200000000, rewards = {{5957,1}}},
        [18] = {name = "Alpha Tower", creatures = {"alpha tower"}, storage = 2312127, count = 10, exp = 9000000, money = 200000000, rewards = {{5957,1}}},
        [19] = {name = "Gonka", creatures = {"gonka"}, storage = 2312128, count = 1, exp = 5000000, money = 50000000, rewards = {{7440,1}}},
        [20] = {name = "Pandora", creatures = {"pandora"}, storage = 2312131, count = 1, exp = 25000000, money = 600000000, rewards = {{7440,1},{5957,1},{10310,1}}},
        [21] = {name = "Jabuti", creatures = {"jabuti","jabuti hatchling"}, storage = 2312140, count = 15000, exp = 6000000, money = 100000000, rewards = {{6527,5}}},
        [22] = {name = "Aladdin", creatures = {"aladdin"}, storage = 2312141, count = 6000, exp = 6000000, money = 100000000, rewards = {{6527,5}}},
        [23] = {name = "Ghalapago", creatures = {"ghalapago"}, storage = 2312142, count = 6000, exp = 6000000, money = 100000000, rewards = {{6527,5}}},
        [24] = {name = "Escaravelho", creatures = {"escaravelho"}, storage = 2312143, count = 6000, exp = 6000000, money = 100000000, rewards = {{6527,5}}},
        [25] = {name = "Instance", creatures = {"dark cleric","dark morfose"}, storage = 2312144, count = 20000, exp = 20000000, money = 600000000, rewards = {{6527,5}}},

    }

   

    TaskSystem.storages = {inMission = 722710}

    function TaskSystem:register(cid)
        registerCreatureEvent(cid, "Task System")
    end

    function TaskSystem:unregister(cid)
        unregisterCreatureEvent(cid, "Task System")
    end

    function TaskSystem:isInTask(cid)
        return getCreatureStorage(cid, self.storages.inMission) ~= EMPTY_STORAGE
    end

    function TaskSystem:getCurrentTask(cid)
        local storage = getCreatureStorage(cid, self.storages.inMission)
        if storage ~= EMPTY_STORAGE then
            return self.list[storage], storage
        end
        return false
    end

    function TaskSystem:getKills(cid, storage)
        return getPlayerStorageZero(cid, storage)
    end

    function TaskSystem:getCompletedTasks(cid)
        local count = 0
        for _, task in next, self.list do
            if getPlayerStorageZero(cid, task.storage) >= task.count then
                count = count + 1
            end
        end
        return count
    end

    function TaskSystem:getTasksList()
        local names = {}
        for _, task in next, self.list do
            table.insert(names, task.name)
        end
        return table.concat(names, ", ")
    end

    function TaskSystem:getTaskByName(name)
        for index, task in next, self.list do
            if task.name:lower() == name then
                return self.list[index], index
            end
        end
        return false
    end

    function TaskSystem:hasCompleted(cid, index)
        local task = self.list[index]
        return getPlayerStorageZero(cid, task.storage) >= task.count
    end

    function TaskSystem:startTask(cid, index)
        local task = self.list[index]
        doCreatureSetStorage(cid, self.storages.inMission, index)
        doCreatureSetStorage(cid, task.storage, 0)
        self:register(cid)
    end

    function TaskSystem:quit(cid, index)
        local task = self.list[index]
        doCreatureSetStorage(cid, task.storage, EMPTY_STORAGE)
        doCreatureSetStorage(cid, self.storages.inMission, EMPTY_STORAGE)
        self:unregister(cid)
    end

    function TaskSystem:getRewardString(index)
        local task = self.list[index]
        local rewardString = ""
        if task.money and task.money > 0 then
            rewardString = task.money .." gold coins, "
        end
        if task.exp and task.exp > 0 then
            rewardString = rewardString.. task.exp .." exp"
        end
        for _, reward in next, task.rewards do
            rewardString = rewardString..", ".. reward[2] .." ".. getItemNameById(reward[1])
        end
        return rewardString
    end

    function TaskSystem:finish(cid, index)
        local task = self.list[index]
        for _, reward in next, task.rewards do
            doPlayerAddItem(cid, reward[1], reward[2])
        end
        doPlayerAddMoney(cid, task.money)
        doPlayerAddExp(cid, task.exp)
        doCreatureSetStorage(cid, self.storages.inMission, EMPTY_STORAGE)
        self:unregister(cid)
        return self:getRewardString(index)
    end

    function TaskSystem:addKill(cid, index)
        local task = self.list[index]
        local kills = self:getKills(cid, task.storage) + 1
        if kills > task.count then
            doSendAnimatedText(getThingPos(cid), "Task Complete", COLOR_LIGHTGREEN)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[Task System] Vocę completou a task de ".. task.name .."! Fale com o Grizzly Adams para pegar sua recompensa!")
        else
            doCreatureSetStorage(cid, task.storage, kills)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[Task Sytem] Total de criaturas derrotadas: [".. kills .."/".. task.count .."] ".. task.name ..".")
        end
    end

    function TaskSystem:checkOnKill(cid, target, lastHit)
        if isMonster(target) and isPlayer(cid) and not isSummon(target) then
            local task, index = TaskSystem:getCurrentTask(cid)
            if task then
                if isInArray(task.creatures, getCreatureName(target):lower()) then
                    self:addKill(cid, index)
                end
            end
        end
        return true
    end

    function TaskSystem:checkLogin(cid)
        if self:isInTask(cid) then
            self:register(cid)
        end
        return true
    end

end
 
The script looks correct - if there was a storage problem, it wouldn't even count the progress. Take a look at the creaturescripts to see if there's anything resetting these storages on login/death: search for doCreatureSetStorage or setPlayerStorageValue
 
in /creaturescript/script/login.lua I've got somethink like dodge lines :
LUA:
if getPlayerStorageValue(cid, 48902) == -1 then -- dodge system essential
        setPlayerStorageValue(cid, 48902, 0)
    end
.

I will try delete

EDIT: still wrong after delete up lines

PS: This doesn't suit me 0 in setPlayerStorageValue(cid, 48902, 0)


EDIT: I replace with mod system task :

LUA:
<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Automatic Simple Task" version="1.0" author="Vodkart" contact="tibiaking.com" enabled="yes">
<config name="auto_stask"><![CDATA[

automatic_task = {
[1] = {name = "Bones", storage = 761000, monsters_list = {"Bones"}, can_repeat = false, level_min = 10, count = 2500, reward = {{6527,75}, {2160,100}, {8261,1}, {10314,1}}, exp = 500000},
[2] = {name = "Crystal Spider", storage = 761001, monsters_list = {"Crystal Spider"}, can_repeat = false, level_min = 10, count = 2500, reward = {{6527,75}, {2160,100}, {8261,1}, {10314,1}}, exp = 500000},
[3] = {name = "Damaged Worker Golem", storage = 761002, monsters_list = {"Damaged Worker Golem"}, can_repeat = false, level_min = 10, count = 2500, reward = {{6527,75}, {2160,100}, {8261,1}, {10314,1}}, exp = 500000},
[4] = {name = "Demon", storage = 761003, monsters_list = {"Demon"}, can_repeat = false, level_min = 10, count = 2500, reward = {{6527,75}, {2160,100}, {8261,1}, {10314,1}}, exp = 500000},
[5] = {name = "Dragon Lord", storage = 761004, monsters_list = {"Dragon Lord"}, can_repeat = false, level_min = 10, count = 2500, reward = {{6527,75}, {2160,100}, {8261,1}, {10314,1}}, exp = 500000},
[6] = {name = "Dragon", storage = 761005, monsters_list = {"Dragon"}, can_repeat = false, level_min = 10, count = 2500, reward = {{6527,75}, {2160,100}, {8261,1}, {10314,1}}, exp = 500000},
[7] = {name = "Earth Elemental", storage = 761006, monsters_list = {"Earth Elemental"}, can_repeat = false, level_min = 10, count = 2500, reward = {{6527,75}, {2160,100}, {8261,1}, {10314,1}}, exp = 500000},
[8] = {name = "Eternal Guardian", storage = 761007, monsters_list = {"Eternal Guardian"}, can_repeat = false, level_min = 10, count = 2500, reward = {{6527,75}, {2160,100}, {8261,1}, {10314,1}}, exp = 500000},
[9] = {name = "Ferumbras", storage = 761008, monsters_list = {"Ferumbras"}, can_repeat = false, level_min = 10, count = 2500, reward = {{6527,75}, {2160,100}, {8261,1}, {10314,1}}, exp = 500000},
[10] = {name = "Frost Dragon", storage = 761009, monsters_list = {"Frost Dragon"}, can_repeat = false, level_min = 10, count = 2500, reward = {{6527,75}, {2160,100}, {8261,1}, {10314,1}}, exp = 500000},
}

automatic_task_config = {
    reward_type = MESSAGE_STATUS_CONSOLE_BLUE,
    defeat_type = MESSAGE_STATUS_CONSOLE_ORANGE,
    defeat_storage = 963850,
    lvl_advance_control = 963851
}

function getItemsFromList(items)
    local str = ''
    if #items > 0 then
        for i = 1, #items do
            str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1])
            if i ~= #items then str = str .. ', ' end
        end
    end
    return str
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, 7343, 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

]]></config>
<event type="advance" name="TaskAutAdvance" event="script"><![CDATA[
domodlib('auto_stask')
function onAdvance(cid, skill, oldLevel, newLevel)
    if (skill == SKILL__LEVEL) then
        if getPlayerStorageValue(cid, automatic_task_config.lvl_advance_control) < newLevel then
            for k, v in pairs(automatic_task) do
                if v.level_min == newLevel then
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Task Automatico] --> Voce Desbloqueou a "..v.name.." Task! Parabens!")
                end
            end
            setPlayerStorageValue(cid, automatic_task_config.lvl_advance_control, newLevel)
        end
    end
    return true
end
]]></event>
<talkaction words="/task;!task" event="buffer"><![CDATA[
domodlib('auto_stask')
param, str = param:lower(), "Task(s) Disponiveis:\n\n"
if isInArray({"counter","contador","count"}, param) then
    setPlayerStorageValue(cid, automatic_task_config.defeat_storage, getPlayerStorageValue(cid, automatic_task_config.defeat_storage) <= 0 and 1 or 0)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[Task Automatico] --> O Contador Foi "..(getPlayerStorageValue(cid, automatic_task_config.defeat_storage) <= 0 and "Ativado" or "Desativado")..".")
    return true
end
for k, v in pairs(automatic_task) do
    if getPlayerLevel(cid) >= v.level_min and getPlayerStorageValue(cid, v.storage) < v.count then
        local amount = getPlayerStorageValue(cid, v.storage) <= 0 and 0 or getPlayerStorageValue(cid, v.storage)
        str = str.."[+] "..v.name.." Task [+]\n\nMonster Count: ["..amount.."/"..v.count.."]\n\nMonsters Killing: "..getMonsterFromList(v.monsters_list)..".\n\nLevel: "..v.level_min.." or More.\n\nCan repeat: "..(v.can_repeat and "yes" or "no")..".\n\nRewards: "..(#v.reward > 0 and getItemsFromList(v.reward) or "Nothing")..".\n\nExp: "..(v.exp > 0 and v.exp or 0)..".\n\n"
    end
end
return doShowTextDialog(cid, 8983, str)
]]></talkaction>
<event type="login" name="TaskAutLogin" event="script"><![CDATA[
function onLogin(cid)
    registerCreatureEvent(cid, "KillAutTask")
    registerCreatureEvent(cid, "TaskAutAdvance")
    return true
end
]]></event>
<event type="kill" name="KillAutTask" event="script"><![CDATA[
domodlib('auto_stask')
function onKill(cid, target)
    local str = ""
    if isPlayer(cid) and isMonster(target) then
        for task, info in pairs(automatic_task) do
            if isInArray(info.monsters_list, getCreatureName(target)) and getPlayerLevel(cid) >= info.level_min then
                local ret = getPlayerStorageValue(cid, info.storage) <= 0 and 0 or getPlayerStorageValue(cid, info.storage)
                if ret < info.count then
                    setPlayerStorageValue(cid, info.storage, getPlayerStorageValue(cid, info.storage) <= 0 and 1 or (getPlayerStorageValue(cid, info.storage)+1))
                    if getPlayerStorageValue(cid, automatic_task_config.defeat_storage) <= 0 and getPlayerStorageValue(cid, info.storage) < info.count then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Task Automatico] --> Voce Matou [" .. getPlayerStorageValue(cid, info.storage) .. "/" .. info.count .. "] da Task do " .. info.name .. ".")
                    end
                    if getPlayerStorageValue(cid, info.storage) >= info.count then
                        if info.exp > 0 then
                            doPlayerAddExp(cid, info.exp)
                            str = str..(str == "" and "" or ", ")..info.exp.." de Exp"
                        end
                        if #info.reward > 0 then
                            GiveRewardsTask(cid, info.reward)
                            str = str..(str == "" and "" or ", ")..getItemsFromList(info.reward)
                        end
                        doPlayerSendTextMessage(cid, automatic_task_config.reward_type, "[Task Automatico] --> Voce Completou a "..info.name.." Task. PREMIOS: "..(str == "" and "nenhuma" or str))
                        if info.can_repeat == true then
                            setPlayerStorageValue(cid, info.storage, 0)
                        end
                    end
                end
            end
        end
    end
    return true
end
]]></event>
</mod>
 
Last edited:
Back
Top