• 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!

MOD Task System - looking for help.

shacey

New Member
Joined
Jan 23, 2021
Messages
17
Reaction score
2
Hi, Im Bart

at the beginning I would like to apologize for my English, it is not my frist language ;)

Im looking for help with my Task system.
My distro is TFS 0.4 rev 3777

Its a code :

Lua:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Talkaction Task System" version="1.0" author="Oskar" contact="[email protected]" enabled="yes">
<config name="talkactionTask_conf"><![CDATA[
task = {
    ['undead elite gladiator'] = {storage = 10000, beginStorageValue = 300, finishStorageValue = 301, count = 10,
                        requiedLevelToReward = 99999999,
                        rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
    ['retching horror'] = {storage = 9999, beginStorageValue = 1, finishStorageValue = 2, count = 10,
                        requiedLevelToReward = 99999999,
                        rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
    ['silencer'] = {storage = 9998, beginStorageValue = 3, finishStorageValue = 4, count = 10,
                        requiedLevelToReward = 99999999,
                        rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
    ['midnight asura'] = {storage = 8965, beginStorageValue = 103, finishStorageValue = 104, count = 200,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 65400, 'cash', 20000, 'item', {5880, 10}}},
    ['ghastly dragon'] = {storage = 8975, beginStorageValue = 108, finishStorageValue = 109, count = 150,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 8000, 'cash', 20000, 'item', {2486, 1, 2168, 1}}},
    ['wailing widow'] = {storage = 1421, beginStorageValue = 5, finishStorageValue = 6, count = 250,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 90750, 'cash', 30000, 'item', {2515, 1}}},
    ['triple medusa'] = {storage = 9993, beginStorageValue = 13, finishStorageValue = 14, count = 300,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 54900, 'cash', 35000, 'item', {2534, 1}}},
    ['crystal spider'] = {storage = 8675, beginStorageValue = 211, finishStorageValue = 212, count = 500,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 270000, 'cash', 20000, 'item', {5879, 10, 7290, 5}}},
    ['worker golem'] = {storage = 8375, beginStorageValue = 205, finishStorageValue = 206, count = 300,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 225000, 'cash', 20000, 'item', {2487, 1}}},
    ['dragon'] = {storage = 5123, beginStorageValue = 85, finishStorageValue = 86, count = 4,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 168000, 'cash', 60000, 'item', {2487, 1, 2516, 1}}},
    ['bog raider'] = {storage = 9992, beginStorageValue = 15, finishStorageValue = 16, count = 400,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 192000, 'cash', 64000, 'item', {8880, 1}}},
    ['giant spider'] = {storage = 9982, beginStorageValue = 35, finishStorageValue = 36, count = 500,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 270000, 'cash', 30000, 'item', {5879, 10}}},
    ['quara'] = {storage = 8412, beginStorageValue = 118, finishStorageValue = 119, count = 250,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 350000, 'cash', 70000, 'item', {5895, 10}}},
    ['necromancer'] = {storage = 8961, beginStorageValue = 100, finishStorageValue = 101, count = 400,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 140000, 'cash', 20000, 'item', {2195, 1}}},
    ['wyrm'] = {storage = 9961, beginStorageValue = 77, finishStorageValue = 78, count = 600,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 558000, 'cash', 77000, 'item', {8871, 1}}},
    ['dragon lord'] = {storage = 4561, beginStorageValue = 87, finishStorageValue = 88, count = 800,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1008000, 'cash', 90000, 'item', {2414, 1, 7899, 1}}},
    ['frost dragon'] = {storage = 9997, beginStorageValue = 90, finishStorageValue = 91, count = 800,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1008000, 'cash', 90000,  'item', {2498, 1}}},
    ['hero'] = {storage = 9996, beginStorageValue = 7, finishStorageValue = 8, count = 500,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 360000, 'cash', 70000, 'item', {2491, 1, 2488, 1}}},
    ['black knight'] = {storage = 9995, beginStorageValue = 9, finishStorageValue = 10, count = 600,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 576000, 'cash', 80000, 'item', {2496, 1}}},
    ['war golem'] = {storage = 8275, beginStorageValue = 203, finishStorageValue = 204, count = 450,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 742500, 'cash', 30000, 'item', {2645, 1}}},
    ['hydra'] = {storage = 9978, beginStorageValue = 43, finishStorageValue = 44, count = 800,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1008000, 'cash', 90000, 'item', {2498, 1, 2195, 1}}},
    ['medusa'] = {storage = 9973, beginStorageValue = 53, finishStorageValue = 54, count = 750,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1822500, 'cash', 140000, 'item', {7884, 1, 7903, 1, 7885, 1}}},
    ['serpent spawn'] = {storage = 9967, beginStorageValue = 65, finishStorageValue = 66, count = 700,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1281000, 'cash', 50000}},
    ['nightmare'] = {storage = 9959, beginStorageValue = 81, finishStorageValue = 82, count = 850,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 110000, 'cash', 95000, 'item', {6391, 1}}},
    ['warlock'] = {storage = 8475, beginStorageValue = 207, finishStorageValue = 208, count = 850,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 2040000, 'cash', 90000, 'item', {7895, 1, 7898, 1}}},
    ['behemoth'] = {storage = 9994, beginStorageValue = 11, finishStorageValue = 12, count = 500,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 900000, 'cash', 80000, 'item', {2466, 1}}},
    ['destroyer'] = {storage = 8075, beginStorageValue = 213, finishStorageValue = 214, count = 600,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 900000, 'cash', 70000, 'item', {5741, 1}}},
    ['grim reaper'] = {storage = 9983, beginStorageValue = 33, finishStorageValue = 34, count = 900,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 2180000, 'cash', 180000, 'item', {5741, 1}}},
    ['fury'] = {storage = 8175, beginStorageValue = 201, finishStorageValue = 202, count = 800,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 2160000, 'cash', 70000, 'item', {2470, 1}}},
    ['hellfire fighter'] = {storage = 8575, beginStorageValue = 209, finishStorageValue = 210, count = 450,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1053000, 'cash', 110000, 'item', {7891, 1, 7899, 1, 7890, 200}}},
    ['demon'] = {storage = 9964, beginStorageValue = 71, finishStorageValue = 72, count = 666,
                        requiedLevelToReward = 99999999,
                        rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}}
    }

mainStorage = 12155

function isSummon(cid)
        if(not isCreature(cid)) then
                return false
        end
        return getCreatureMaster(cid) ~= cid
end

function checkInfoAboutTask(tableTask)
local message = ''
for i = 1, #tableTask/2 do
        local rewardType, rewardCount = tableTask[i*2-1], tableTask[i*2]
        if rewardType == 'item' and type(rewardCount) == 'table' then
                for item = 1, #rewardCount/2 do
                        local rewardItemId, rewardItemCount = rewardCount[item*2-1], rewardCount[item*2]
                        message = message .. ('* ' .. rewardItemCount .. 'x ' .. getItemNameById(rewardItemId)) .. '\n'
                end
        else
                message = message .. ((rewardType == 'item' and '* ' .. getItemNameById(rewardCount)) or
                                                        (rewardType == 'exp' and '* ' .. rewardCount .. ' Experience ') or
                                                        (rewardType == 'cash' and '* ' .. rewardCount .. ' Money ') or
                                                        (rewardType == 'smsPoints' and '* ' .. rewardCount .. ' Sms points ')) .. '\n'
        end
end
return message
end

function doAddExp(cid, amount)
        return doSendAnimatedText(getThingPos(cid), amount, COLOR_WHITE) and doPlayerAddExperience(cid, amount) or false
end
]]></config>

<talkaction words="!task" event="script"><![CDATA[
domodlib('talkactionTask_conf')
function onSay(cid, words, param, channel)

local taskMenu, message = task[param:lower()], ''
if taskMenu and (taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) == -1 or getCreatureStorage(cid, mainStorage) < 1) then
        if taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) > -1 then
                return true
        else
                doCreatureSetStorage(cid, mainStorage, taskMenu.beginStorageValue)
        end
        doCreatureSetStorage(cid, taskMenu.storage, 0)
        return doPlayerPopupFYI(cid, 'The decision taken, your task is to '..(taskMenu.potionTask and 'use' or 'kill')..' - ' .. taskMenu.count.. ' ' ..param:lower().. (taskMenu.count > 1 and 's' or '') .. '\nRewards which you receive for finishing this task:\n' .. checkInfoAboutTask(taskMenu.rewards) .. (taskMenu.potionTask and '' or 'If you want to abort the current job enough that you use the command !task cancel\n')..'If you want to know about the current job simply use the command !task info\nIf you wish to receive a prize for the job simply use the command !task reward')
elseif taskMenu and (taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) == 1 or getCreatureStorage(cid, mainStorage) >= 1) then
        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You are already doing some task!')
elseif isInArray({'cancel', 'delete', 'abort'}, param:lower()) and getCreatureStorage(cid, mainStorage) > 0 then
        for _, v in pairs(task) do
                if not v.potionTask and getCreatureStorage(cid, v.storage) >= 0 then
                        doCreatureSetStorage(cid, mainStorage, -1)
                        doCreatureSetStorage(cid, v.storage, -1)
                        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You canceled the current task.')
                end
        end
elseif isInArray({'reward', 'end', 'finish'}, param:lower()) then
        local rewards, showMessage = 'Items that you got as a reward is: ', false
        for _, v in pairs(task) do
        if getCreatureStorage(cid, mainStorage) ~= v.finishStorageValue and getCreatureStorage(cid, v.storage) == v.count then
            return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You have not finished your task yet or You have not started any task!')
        end
        if (v.potionTask and getCreatureStorage(cid, v.storage) == v.count or getCreatureStorage(cid, mainStorage) == v.finishStorageValue) then
                        showMessage = true
                        if not v.potionTask then
                                doCreatureSetStorage(cid, mainStorage, -1)
                        else
                                doCreatureSetStorage(cid, v.storage, v.count + 1)
                        end
                        if not v.requiedLevelToReward or v.requiedLevelToReward >= getPlayerLevel(cid) then
                                for i = 1, #v.rewards/2 do
                                        local rewardType, rewardCount = v.rewards[i*2-1], v.rewards[i*2]
                                        if rewardType == 'item' and type(rewardCount) == 'table' and #rewardCount > 1 then
                                                for item = 1, #rewardCount / 2 do
                                                        local rewardItemId, rewardItemCount = rewardCount[item*2-1], rewardCount[item*2]
                                                        rewards = rewards .. rewardItemCount .. 'x ' .. getItemNameById(rewardItemId) .. ', '
                                                        doPlayerAddItem(cid, rewardItemId, rewardItemCount, true)
                                                end
                                        else
                                                rewards = rewards .. rewardCount .. 'x ' .. (rewardType == 'item' and getItemNameById(rewardCount) or rewardType == 'exp' and 'experience' or rewardType == 'cash' and 'money' or rewardType == 'smsPoints' and 'sms points') .. ', '
                                                if rewardType == 'item' then
                                                        doPlayerAddItem(cid, rewardCount, 1, true)
                                                elseif rewardType == 'exp' then
                                                        doAddExp(cid, rewardCount)
                                                elseif rewardType == 'cash' then
                                                        doPlayerAddMoney(cid, rewardCount)
                                                elseif rewardType == 'smsPoints' then
                                                        db.executeQuery("UPDATE `accounts` SET `premium_points` = `premium_points` + " .. rewardCount .. " WHERE `name` = '" .. getAccountByName(getCreatureName(cid)) .. "' LIMIT 1;")
                                                end
                                        end
                                end
                        else
                                rewards = 'Your experience level is too high to be able to receive the reward.'
                        end
                end
        end
        return showMessage and doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.sub(rewards, 1, string.len(rewards) - 1)..'.')
else
        for k, v in pairs(task) do
                if isInArray((v.potionTask and {'potion','potions'} or {'info', 'information', 'details'}), param:lower()) and (v.potionTask and getCreatureStorage(cid, v.storage) >= 0 or getCreatureStorage(cid, mainStorage) > 0) then
                        if (v.potionTask and getCreatureStorage(cid, v.storage) <= v.count or isInArray({v.finishStorageValue, v.beginStorageValue}, getCreatureStorage(cid, mainStorage))) then
                                return doPlayerPopupFYI(cid, 'Your current task is to '..(v.potionTask and 'use' or 'kill')..' - ' .. v.count.. ' ' ..k:lower().. (v.count > 1 and 's' or '') .. '\nYou have killed ' .. getCreatureStorage(cid, v.storage) .. ' of ' .. v.count .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. '. You must kill ' .. v.count - getCreatureStorage(cid, v.storage) .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. ' yet\nRewards which you receive for finishing this task:\n' .. checkInfoAboutTask(v.rewards))
                        end
                        else
                        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You have not started any task!')
                end
        end
end
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Wrong command!')
end
]]></talkaction>

<event type="kill" registerTo ="all" name="talkactionTask" event="script"><![CDATA[
domodlib('talkactionTask_conf')
function onKill(cid, target)
if isPlayer(target) or getCreatureMaster(target) or isNpc(target) then
        return true
end
for k, v in pairs(task) do
        if k:lower() == getCreatureName(target):lower() then
                if getCreatureStorage(cid, mainStorage) == v.beginStorageValue then
                        if getCreatureStorage(cid, v.storage) < v.count then
                                doCreatureSetStorage(cid, v.storage, getCreatureStorage(cid, v.storage) + 1)
                                s = 'You killed ' .. getCreatureStorage(cid, v.storage) .. ' of ' .. v.count .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. '.'
                                if getCreatureStorage(cid, v.storage) == v.count then
                                        doCreatureSetStorage(cid, mainStorage, v.finishStorageValue)
                                        s = 'Congratulations! You have killed enough '.. k:lower() ..'.'
                                end
                                return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, s)
                        end
                end
        end
end
return true
end
]]></event>
<event type="login" name="taskEventLogin" event="buffer"><![CDATA[
registerCreatureEvent(cid, 'talkactionTask')
]]></event>
</mod>

The problem is that system let me do any task and everyting looks fine but when you want to do another task and you have finished it (killed enough monsters) it says
Wiki:
You have not finished your task yet or You have not started any task!

and another thing is that if even that message appears, sometimes I get an reward and sometimes I don't.

Can someone help mi with this ? :)

Thanks in advance.

Best Regard
Bart
 
Last edited:
Hi, Im Bart

at the beginning I would like to apologize for my English, it is not my frist language ;)

Im looking for help with my Task system.

Its a code :

Lua:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Talkaction Task System" version="1.0" author="Oskar" contact="[email protected]" enabled="yes">
<config name="talkactionTask_conf"><![CDATA[
task = {
    ['undead elite gladiator'] = {storage = 10000, beginStorageValue = 300, finishStorageValue = 301, count = 10,
                        requiedLevelToReward = 99999999,
                        rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
    ['retching horror'] = {storage = 9999, beginStorageValue = 1, finishStorageValue = 2, count = 10,
                        requiedLevelToReward = 99999999,
                        rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
    ['silencer'] = {storage = 9998, beginStorageValue = 3, finishStorageValue = 4, count = 10,
                        requiedLevelToReward = 99999999,
                        rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
    ['midnight asura'] = {storage = 8965, beginStorageValue = 103, finishStorageValue = 104, count = 200,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 65400, 'cash', 20000, 'item', {5880, 10}}},
    ['ghastly dragon'] = {storage = 8975, beginStorageValue = 108, finishStorageValue = 109, count = 150,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 8000, 'cash', 20000, 'item', {2486, 1, 2168, 1}}},
    ['wailing widow'] = {storage = 1421, beginStorageValue = 5, finishStorageValue = 6, count = 250,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 90750, 'cash', 30000, 'item', {2515, 1}}},
    ['triple medusa'] = {storage = 9993, beginStorageValue = 13, finishStorageValue = 14, count = 300,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 54900, 'cash', 35000, 'item', {2534, 1}}},
    ['crystal spider'] = {storage = 8675, beginStorageValue = 211, finishStorageValue = 212, count = 500,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 270000, 'cash', 20000, 'item', {5879, 10, 7290, 5}}},
    ['worker golem'] = {storage = 8375, beginStorageValue = 205, finishStorageValue = 206, count = 300,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 225000, 'cash', 20000, 'item', {2487, 1}}},
    ['dragon'] = {storage = 5123, beginStorageValue = 85, finishStorageValue = 86, count = 4,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 168000, 'cash', 60000, 'item', {2487, 1, 2516, 1}}},
    ['bog raider'] = {storage = 9992, beginStorageValue = 15, finishStorageValue = 16, count = 400,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 192000, 'cash', 64000, 'item', {8880, 1}}},
    ['giant spider'] = {storage = 9982, beginStorageValue = 35, finishStorageValue = 36, count = 500,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 270000, 'cash', 30000, 'item', {5879, 10}}},
    ['quara'] = {storage = 8412, beginStorageValue = 118, finishStorageValue = 119, count = 250,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 350000, 'cash', 70000, 'item', {5895, 10}}},
    ['necromancer'] = {storage = 8961, beginStorageValue = 100, finishStorageValue = 101, count = 400,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 140000, 'cash', 20000, 'item', {2195, 1}}},
    ['wyrm'] = {storage = 9961, beginStorageValue = 77, finishStorageValue = 78, count = 600,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 558000, 'cash', 77000, 'item', {8871, 1}}},
    ['dragon lord'] = {storage = 4561, beginStorageValue = 87, finishStorageValue = 88, count = 800,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1008000, 'cash', 90000, 'item', {2414, 1, 7899, 1}}},
    ['frost dragon'] = {storage = 9997, beginStorageValue = 90, finishStorageValue = 91, count = 800,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1008000, 'cash', 90000,  'item', {2498, 1}}},
    ['hero'] = {storage = 9996, beginStorageValue = 7, finishStorageValue = 8, count = 500,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 360000, 'cash', 70000, 'item', {2491, 1, 2488, 1}}},
    ['black knight'] = {storage = 9995, beginStorageValue = 9, finishStorageValue = 10, count = 600,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 576000, 'cash', 80000, 'item', {2496, 1}}},
    ['war golem'] = {storage = 8275, beginStorageValue = 203, finishStorageValue = 204, count = 450,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 742500, 'cash', 30000, 'item', {2645, 1}}},
    ['hydra'] = {storage = 9978, beginStorageValue = 43, finishStorageValue = 44, count = 800,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1008000, 'cash', 90000, 'item', {2498, 1, 2195, 1}}},
    ['medusa'] = {storage = 9973, beginStorageValue = 53, finishStorageValue = 54, count = 750,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1822500, 'cash', 140000, 'item', {7884, 1, 7903, 1, 7885, 1}}},
    ['serpent spawn'] = {storage = 9967, beginStorageValue = 65, finishStorageValue = 66, count = 700,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1281000, 'cash', 50000}},
    ['nightmare'] = {storage = 9959, beginStorageValue = 81, finishStorageValue = 82, count = 850,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 110000, 'cash', 95000, 'item', {6391, 1}}},
    ['warlock'] = {storage = 8475, beginStorageValue = 207, finishStorageValue = 208, count = 850,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 2040000, 'cash', 90000, 'item', {7895, 1, 7898, 1}}},
    ['behemoth'] = {storage = 9994, beginStorageValue = 11, finishStorageValue = 12, count = 500,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 900000, 'cash', 80000, 'item', {2466, 1}}},
    ['destroyer'] = {storage = 8075, beginStorageValue = 213, finishStorageValue = 214, count = 600,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 900000, 'cash', 70000, 'item', {5741, 1}}},
    ['grim reaper'] = {storage = 9983, beginStorageValue = 33, finishStorageValue = 34, count = 900,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 2180000, 'cash', 180000, 'item', {5741, 1}}},
    ['fury'] = {storage = 8175, beginStorageValue = 201, finishStorageValue = 202, count = 800,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 2160000, 'cash', 70000, 'item', {2470, 1}}},
    ['hellfire fighter'] = {storage = 8575, beginStorageValue = 209, finishStorageValue = 210, count = 450,
                        requiedLevelToReward = 99999999,
                        rewards = {'exp', 1053000, 'cash', 110000, 'item', {7891, 1, 7899, 1, 7890, 200}}},
    ['demon'] = {storage = 9964, beginStorageValue = 71, finishStorageValue = 72, count = 666,
                        requiedLevelToReward = 99999999,
                        rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}}
    }

mainStorage = 12155

function isSummon(cid)
        if(not isCreature(cid)) then
                return false
        end
        return getCreatureMaster(cid) ~= cid
end

function checkInfoAboutTask(tableTask)
local message = ''
for i = 1, #tableTask/2 do
        local rewardType, rewardCount = tableTask[i*2-1], tableTask[i*2]
        if rewardType == 'item' and type(rewardCount) == 'table' then
                for item = 1, #rewardCount/2 do
                        local rewardItemId, rewardItemCount = rewardCount[item*2-1], rewardCount[item*2]
                        message = message .. ('* ' .. rewardItemCount .. 'x ' .. getItemNameById(rewardItemId)) .. '\n'
                end
        else
                message = message .. ((rewardType == 'item' and '* ' .. getItemNameById(rewardCount)) or
                                                        (rewardType == 'exp' and '* ' .. rewardCount .. ' Experience ') or
                                                        (rewardType == 'cash' and '* ' .. rewardCount .. ' Money ') or
                                                        (rewardType == 'smsPoints' and '* ' .. rewardCount .. ' Sms points ')) .. '\n'
        end
end
return message
end

function doAddExp(cid, amount)
        return doSendAnimatedText(getThingPos(cid), amount, COLOR_WHITE) and doPlayerAddExperience(cid, amount) or false
end
]]></config>

<talkaction words="!task" event="script"><![CDATA[
domodlib('talkactionTask_conf')
function onSay(cid, words, param, channel)

local taskMenu, message = task[param:lower()], ''
if taskMenu and (taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) == -1 or getCreatureStorage(cid, mainStorage) < 1) then
        if taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) > -1 then
                return true
        else
                doCreatureSetStorage(cid, mainStorage, taskMenu.beginStorageValue)
        end
        doCreatureSetStorage(cid, taskMenu.storage, 0)
        return doPlayerPopupFYI(cid, 'The decision taken, your task is to '..(taskMenu.potionTask and 'use' or 'kill')..' - ' .. taskMenu.count.. ' ' ..param:lower().. (taskMenu.count > 1 and 's' or '') .. '\nRewards which you receive for finishing this task:\n' .. checkInfoAboutTask(taskMenu.rewards) .. (taskMenu.potionTask and '' or 'If you want to abort the current job enough that you use the command !task cancel\n')..'If you want to know about the current job simply use the command !task info\nIf you wish to receive a prize for the job simply use the command !task reward')
elseif taskMenu and (taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) == 1 or getCreatureStorage(cid, mainStorage) >= 1) then
        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You are already doing some task!')
elseif isInArray({'cancel', 'delete', 'abort'}, param:lower()) and getCreatureStorage(cid, mainStorage) > 0 then
        for _, v in pairs(task) do
                if not v.potionTask and getCreatureStorage(cid, v.storage) >= 0 then
                        doCreatureSetStorage(cid, mainStorage, -1)
                        doCreatureSetStorage(cid, v.storage, -1)
                        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You canceled the current task.')
                end
        end
elseif isInArray({'reward', 'end', 'finish'}, param:lower()) then
        local rewards, showMessage = 'Items that you got as a reward is: ', false
        for _, v in pairs(task) do
        if getCreatureStorage(cid, mainStorage) ~= v.finishStorageValue and getCreatureStorage(cid, v.storage) == v.count then
            return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You have not finished your task yet or You have not started any task!')
        end
        if (v.potionTask and getCreatureStorage(cid, v.storage) == v.count or getCreatureStorage(cid, mainStorage) == v.finishStorageValue) then
                        showMessage = true
                        if not v.potionTask then
                                doCreatureSetStorage(cid, mainStorage, -1)
                        else
                                doCreatureSetStorage(cid, v.storage, v.count + 1)
                        end
                        if not v.requiedLevelToReward or v.requiedLevelToReward >= getPlayerLevel(cid) then
                                for i = 1, #v.rewards/2 do
                                        local rewardType, rewardCount = v.rewards[i*2-1], v.rewards[i*2]
                                        if rewardType == 'item' and type(rewardCount) == 'table' and #rewardCount > 1 then
                                                for item = 1, #rewardCount / 2 do
                                                        local rewardItemId, rewardItemCount = rewardCount[item*2-1], rewardCount[item*2]
                                                        rewards = rewards .. rewardItemCount .. 'x ' .. getItemNameById(rewardItemId) .. ', '
                                                        doPlayerAddItem(cid, rewardItemId, rewardItemCount, true)
                                                end
                                        else
                                                rewards = rewards .. rewardCount .. 'x ' .. (rewardType == 'item' and getItemNameById(rewardCount) or rewardType == 'exp' and 'experience' or rewardType == 'cash' and 'money' or rewardType == 'smsPoints' and 'sms points') .. ', '
                                                if rewardType == 'item' then
                                                        doPlayerAddItem(cid, rewardCount, 1, true)
                                                elseif rewardType == 'exp' then
                                                        doAddExp(cid, rewardCount)
                                                elseif rewardType == 'cash' then
                                                        doPlayerAddMoney(cid, rewardCount)
                                                elseif rewardType == 'smsPoints' then
                                                        db.executeQuery("UPDATE `accounts` SET `premium_points` = `premium_points` + " .. rewardCount .. " WHERE `name` = '" .. getAccountByName(getCreatureName(cid)) .. "' LIMIT 1;")
                                                end
                                        end
                                end
                        else
                                rewards = 'Your experience level is too high to be able to receive the reward.'
                        end
                end
        end
        return showMessage and doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.sub(rewards, 1, string.len(rewards) - 1)..'.')
else
        for k, v in pairs(task) do
                if isInArray((v.potionTask and {'potion','potions'} or {'info', 'information', 'details'}), param:lower()) and (v.potionTask and getCreatureStorage(cid, v.storage) >= 0 or getCreatureStorage(cid, mainStorage) > 0) then
                        if (v.potionTask and getCreatureStorage(cid, v.storage) <= v.count or isInArray({v.finishStorageValue, v.beginStorageValue}, getCreatureStorage(cid, mainStorage))) then
                                return doPlayerPopupFYI(cid, 'Your current task is to '..(v.potionTask and 'use' or 'kill')..' - ' .. v.count.. ' ' ..k:lower().. (v.count > 1 and 's' or '') .. '\nYou have killed ' .. getCreatureStorage(cid, v.storage) .. ' of ' .. v.count .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. '. You must kill ' .. v.count - getCreatureStorage(cid, v.storage) .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. ' yet\nRewards which you receive for finishing this task:\n' .. checkInfoAboutTask(v.rewards))
                        end
                        else
                        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You have not started any task!')
                end
        end
end
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Wrong command!')
end
]]></talkaction>

<event type="kill" registerTo ="all" name="talkactionTask" event="script"><![CDATA[
domodlib('talkactionTask_conf')
function onKill(cid, target)
if isPlayer(target) or getCreatureMaster(target) or isNpc(target) then
        return true
end
for k, v in pairs(task) do
        if k:lower() == getCreatureName(target):lower() then
                if getCreatureStorage(cid, mainStorage) == v.beginStorageValue then
                        if getCreatureStorage(cid, v.storage) < v.count then
                                doCreatureSetStorage(cid, v.storage, getCreatureStorage(cid, v.storage) + 1)
                                s = 'You killed ' .. getCreatureStorage(cid, v.storage) .. ' of ' .. v.count .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. '.'
                                if getCreatureStorage(cid, v.storage) == v.count then
                                        doCreatureSetStorage(cid, mainStorage, v.finishStorageValue)
                                        s = 'Congratulations! You have killed enough '.. k:lower() ..'.'
                                end
                                return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, s)
                        end
                end
        end
end
return true
end
]]></event>
<event type="login" name="taskEventLogin" event="buffer"><![CDATA[
registerCreatureEvent(cid, 'talkactionTask')
]]></event>
</mod>

The problem is that system let me do any task and everyting looks fine but when you want to do another task and you have finished it (killed enough monsters) it says
Wiki:
You have not finished your task yet or You have not started any task!

and another thing is that if even that message appears, sometimes I get an reward and sometimes I don't.

Can someone help mi with this ? :)

Thanks in advance.

Best Regard
Bart
Always specify which distro you are using. Example: TFS 1.3, OTserv etc
 
I swear I've helped with this exact issue on this exact script in the past. >.<

Ah yep, just like I expected. lol

problem is here
Lua:
for _, v in pairs(task) do
        if getCreatureStorage(cid, mainStorage) ~= v.finishStorageValue and getCreatureStorage(cid, v.storage) == v.count then

So the problem is in the loop they created, for no reason.

It's very easy to fail this if statement because of the == v.count
Which then leads you directly into the reward section.

Imagine this..

If your main storage value doesn't equal your finished storage value..
(So basically if you haven't finished the task)
AND
if you've killed all the monsters then

It's basically impossible to happen.

--
I still have no idea why they are using a loop though.. It doesn't make any sense.. since it'll cause a ton of false positives when it loops down the list..

Alright.. so based on that.. here's my suggested changes.

moving this line into the loop inside the reward section...
Lua:
return showMessage and doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.sub(rewards, 1, string.len(rewards) - 1)..'.')
moving this line outside of the loop
Lua:
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You have not finished your task yet or You have not started any task!')
and removing this line entirely.. since it's being checked below anyway...
Lua:
if getCreatureStorage(cid, mainStorage) == v.finishStorageValue and getCreatureStorage(cid, v.storage) == v.count then

and this hecking.. potionTask...? wtf it's not even part of the script as far as I can tell?
idk what to even do with that..
On 1 line it's checking if it exists.. and then the next line it checks if it doesn't exist..
So I'm just gonna remove the exist check.. and hope it breaks nothing.

So yeah..
Here's my changes. hope it works.

Lua:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Talkaction Task System" version="1.0" author="Oskar" contact="[email protected]" enabled="yes">
<config name="talkactionTask_conf"><![CDATA[
task = {
        ['undead elite gladiator'] = {storage = 10000, beginStorageValue = 300, finishStorageValue = 301, count = 10,
                            requiedLevelToReward = 99999999,
                            rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
        ['retching horror'] = {storage = 9999, beginStorageValue = 1, finishStorageValue = 2, count = 10,
                            requiedLevelToReward = 99999999,
                            rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
        ['silencer'] = {storage = 9998, beginStorageValue = 3, finishStorageValue = 4, count = 10,
                            requiedLevelToReward = 99999999,
                            rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
        ['midnight asura'] = {storage = 8965, beginStorageValue = 103, finishStorageValue = 104, count = 200,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 65400, 'cash', 20000, 'item', {5880, 10}}},
        ['ghastly dragon'] = {storage = 8975, beginStorageValue = 108, finishStorageValue = 109, count = 150,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 8000, 'cash', 20000, 'item', {2486, 1, 2168, 1}}},
        ['wailing widow'] = {storage = 1421, beginStorageValue = 5, finishStorageValue = 6, count = 250,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 90750, 'cash', 30000, 'item', {2515, 1}}},
        ['triple medusa'] = {storage = 9993, beginStorageValue = 13, finishStorageValue = 14, count = 300,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 54900, 'cash', 35000, 'item', {2534, 1}}},
        ['crystal spider'] = {storage = 8675, beginStorageValue = 211, finishStorageValue = 212, count = 500,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 270000, 'cash', 20000, 'item', {5879, 10, 7290, 5}}},
        ['worker golem'] = {storage = 8375, beginStorageValue = 205, finishStorageValue = 206, count = 300,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 225000, 'cash', 20000, 'item', {2487, 1}}},
        ['dragon'] = {storage = 5123, beginStorageValue = 85, finishStorageValue = 86, count = 4,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 168000, 'cash', 60000, 'item', {2487, 1, 2516, 1}}},
        ['bog raider'] = {storage = 9992, beginStorageValue = 15, finishStorageValue = 16, count = 400,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 192000, 'cash', 64000, 'item', {8880, 1}}},
        ['giant spider'] = {storage = 9982, beginStorageValue = 35, finishStorageValue = 36, count = 500,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 270000, 'cash', 30000, 'item', {5879, 10}}},
        ['quara'] = {storage = 8412, beginStorageValue = 118, finishStorageValue = 119, count = 250,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 350000, 'cash', 70000, 'item', {5895, 10}}},
        ['necromancer'] = {storage = 8961, beginStorageValue = 100, finishStorageValue = 101, count = 400,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 140000, 'cash', 20000, 'item', {2195, 1}}},
        ['wyrm'] = {storage = 9961, beginStorageValue = 77, finishStorageValue = 78, count = 600,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 558000, 'cash', 77000, 'item', {8871, 1}}},
        ['dragon lord'] = {storage = 4561, beginStorageValue = 87, finishStorageValue = 88, count = 800,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1008000, 'cash', 90000, 'item', {2414, 1, 7899, 1}}},
        ['frost dragon'] = {storage = 9997, beginStorageValue = 90, finishStorageValue = 91, count = 800,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1008000, 'cash', 90000,  'item', {2498, 1}}},
        ['hero'] = {storage = 9996, beginStorageValue = 7, finishStorageValue = 8, count = 500,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 360000, 'cash', 70000, 'item', {2491, 1, 2488, 1}}},
        ['black knight'] = {storage = 9995, beginStorageValue = 9, finishStorageValue = 10, count = 600,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 576000, 'cash', 80000, 'item', {2496, 1}}},
        ['war golem'] = {storage = 8275, beginStorageValue = 203, finishStorageValue = 204, count = 450,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 742500, 'cash', 30000, 'item', {2645, 1}}},
        ['hydra'] = {storage = 9978, beginStorageValue = 43, finishStorageValue = 44, count = 800,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1008000, 'cash', 90000, 'item', {2498, 1, 2195, 1}}},
        ['medusa'] = {storage = 9973, beginStorageValue = 53, finishStorageValue = 54, count = 750,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1822500, 'cash', 140000, 'item', {7884, 1, 7903, 1, 7885, 1}}},
        ['serpent spawn'] = {storage = 9967, beginStorageValue = 65, finishStorageValue = 66, count = 700,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1281000, 'cash', 50000}},
        ['nightmare'] = {storage = 9959, beginStorageValue = 81, finishStorageValue = 82, count = 850,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 110000, 'cash', 95000, 'item', {6391, 1}}},
        ['warlock'] = {storage = 8475, beginStorageValue = 207, finishStorageValue = 208, count = 850,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 2040000, 'cash', 90000, 'item', {7895, 1, 7898, 1}}},
        ['behemoth'] = {storage = 9994, beginStorageValue = 11, finishStorageValue = 12, count = 500,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 900000, 'cash', 80000, 'item', {2466, 1}}},
        ['destroyer'] = {storage = 8075, beginStorageValue = 213, finishStorageValue = 214, count = 600,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 900000, 'cash', 70000, 'item', {5741, 1}}},
        ['grim reaper'] = {storage = 9983, beginStorageValue = 33, finishStorageValue = 34, count = 900,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 2180000, 'cash', 180000, 'item', {5741, 1}}},
        ['fury'] = {storage = 8175, beginStorageValue = 201, finishStorageValue = 202, count = 800,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 2160000, 'cash', 70000, 'item', {2470, 1}}},
        ['hellfire fighter'] = {storage = 8575, beginStorageValue = 209, finishStorageValue = 210, count = 450,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1053000, 'cash', 110000, 'item', {7891, 1, 7899, 1, 7890, 200}}},
        ['demon'] = {storage = 9964, beginStorageValue = 71, finishStorageValue = 72, count = 666,
                            requiedLevelToReward = 99999999,
                            rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}}
}

mainStorage = 12155

function isSummon(cid)
        if(not isCreature(cid)) then
                return false
        end
        return getCreatureMaster(cid) ~= cid
end

function checkInfoAboutTask(tableTask)
local message = ''
for i = 1, #tableTask/2 do
        local rewardType, rewardCount = tableTask[i*2-1], tableTask[i*2]
        if rewardType == 'item' and type(rewardCount) == 'table' then
                for item = 1, #rewardCount/2 do
                        local rewardItemId, rewardItemCount = rewardCount[item*2-1], rewardCount[item*2]
                        message = message .. ('* ' .. rewardItemCount .. 'x ' .. getItemNameById(rewardItemId)) .. '\n'
                end
        else
                message = message .. ((rewardType == 'item' and '* ' .. getItemNameById(rewardCount)) or
                                                        (rewardType == 'exp' and '* ' .. rewardCount .. ' Experience ') or
                                                        (rewardType == 'cash' and '* ' .. rewardCount .. ' Money ') or
                                                        (rewardType == 'smsPoints' and '* ' .. rewardCount .. ' Sms points ')) .. '\n'
        end
end
return message
end

function doAddExp(cid, amount)
        return doSendAnimatedText(getThingPos(cid), amount, COLOR_WHITE) and doPlayerAddExperience(cid, amount) or false
end
]]></config>

<talkaction words="!task" event="script"><![CDATA[
domodlib('talkactionTask_conf')
function onSay(cid, words, param, channel)

local taskMenu, message = task[param:lower()], ''
if taskMenu and (taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) == -1 or getCreatureStorage(cid, mainStorage) < 1) then
        if taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) > -1 then
                return true
        else
                doCreatureSetStorage(cid, mainStorage, taskMenu.beginStorageValue)
        end
        doCreatureSetStorage(cid, taskMenu.storage, 0)
        return doPlayerPopupFYI(cid, 'The decision taken, your task is to '..(taskMenu.potionTask and 'use' or 'kill')..' - ' .. taskMenu.count.. ' ' ..param:lower().. (taskMenu.count > 1 and 's' or '') .. '\nRewards which you receive for finishing this task:\n' .. checkInfoAboutTask(taskMenu.rewards) .. (taskMenu.potionTask and '' or 'If you want to abort the current job enough that you use the command !task cancel\n')..'If you want to know about the current job simply use the command !task info\nIf you wish to receive a prize for the job simply use the command !task reward')
elseif taskMenu and (taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) == 1 or getCreatureStorage(cid, mainStorage) >= 1) then
        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You are already doing some task!')
elseif isInArray({'cancel', 'delete', 'abort'}, param:lower()) and getCreatureStorage(cid, mainStorage) > 0 then
        for _, v in pairs(task) do
                if not v.potionTask and getCreatureStorage(cid, v.storage) >= 0 then
                        doCreatureSetStorage(cid, mainStorage, -1)
                        doCreatureSetStorage(cid, v.storage, -1)
                        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You canceled the current task.')
                end
        end
elseif isInArray({'reward', 'end', 'finish'}, param:lower()) then
        local rewards, showMessage = 'Items that you got as a reward is: ', false
        for _, v in pairs(task) do
                if (getCreatureStorage(cid, v.storage) == v.count or getCreatureStorage(cid, mainStorage) == v.finishStorageValue) then
                        showMessage = true
                        if not v.potionTask then
                                doCreatureSetStorage(cid, mainStorage, -1)
                        else
                                doCreatureSetStorage(cid, v.storage, v.count + 1)
                        end
                        if not v.requiedLevelToReward or v.requiedLevelToReward >= getPlayerLevel(cid) then
                                for i = 1, #v.rewards/2 do
                                        local rewardType, rewardCount = v.rewards[i*2-1], v.rewards[i*2]
                                        if rewardType == 'item' and type(rewardCount) == 'table' and #rewardCount > 1 then
                                                for item = 1, #rewardCount / 2 do
                                                        local rewardItemId, rewardItemCount = rewardCount[item*2-1], rewardCount[item*2]
                                                        rewards = rewards .. rewardItemCount .. 'x ' .. getItemNameById(rewardItemId) .. ', '
                                                        doPlayerAddItem(cid, rewardItemId, rewardItemCount, true)
                                                end
                                        else
                                                rewards = rewards .. rewardCount .. 'x ' .. (rewardType == 'item' and getItemNameById(rewardCount) or rewardType == 'exp' and 'experience' or rewardType == 'cash' and 'money' or rewardType == 'smsPoints' and 'sms points') .. ', '
                                                if rewardType == 'item' then
                                                        doPlayerAddItem(cid, rewardCount, 1, true)
                                                elseif rewardType == 'exp' then
                                                        doAddExp(cid, rewardCount)
                                                elseif rewardType == 'cash' then
                                                        doPlayerAddMoney(cid, rewardCount)
                                                elseif rewardType == 'smsPoints' then
                                                        db.executeQuery("UPDATE `accounts` SET `premium_points` = `premium_points` + " .. rewardCount .. " WHERE `name` = '" .. getAccountByName(getCreatureName(cid)) .. "' LIMIT 1;")
                                                end
                                        end
                                        return showMessage and doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.sub(rewards, 1, string.len(rewards) - 1)..'.')
                                end
                        else
                                rewards = 'Your experience level is too high to be able to receive the reward.'
                        end
                end
        end
        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You have not finished your task yet or You have not started any task!')
else
        for k, v in pairs(task) do
                if isInArray((v.potionTask and {'potion','potions'} or {'info', 'information', 'details'}), param:lower()) and (v.potionTask and getCreatureStorage(cid, v.storage) >= 0 or getCreatureStorage(cid, mainStorage) > 0) then
                        if (v.potionTask and getCreatureStorage(cid, v.storage) <= v.count or isInArray({v.finishStorageValue, v.beginStorageValue}, getCreatureStorage(cid, mainStorage))) then
                                return doPlayerPopupFYI(cid, 'Your current task is to '..(v.potionTask and 'use' or 'kill')..' - ' .. v.count.. ' ' ..k:lower().. (v.count > 1 and 's' or '') .. '\nYou have killed ' .. getCreatureStorage(cid, v.storage) .. ' of ' .. v.count .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. '. You must kill ' .. v.count - getCreatureStorage(cid, v.storage) .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. ' yet\nRewards which you receive for finishing this task:\n' .. checkInfoAboutTask(v.rewards))
                        end
                        else
                        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You have not started any task!')
                end
        end
end
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Wrong command!')
end
]]></talkaction>

<event type="kill" registerTo ="all" name="talkactionTask" event="script"><![CDATA[
domodlib('talkactionTask_conf')
function onKill(cid, target)
if isPlayer(target) or getCreatureMaster(target) or isNpc(target) then
        return true
end
for k, v in pairs(task) do
        if k:lower() == getCreatureName(target):lower() then
                if getCreatureStorage(cid, mainStorage) == v.beginStorageValue then
                        if getCreatureStorage(cid, v.storage) < v.count then
                                doCreatureSetStorage(cid, v.storage, getCreatureStorage(cid, v.storage) + 1)
                                s = 'You killed ' .. getCreatureStorage(cid, v.storage) .. ' of ' .. v.count .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. '.'
                                if getCreatureStorage(cid, v.storage) == v.count then
                                        doCreatureSetStorage(cid, mainStorage, v.finishStorageValue)
                                        s = 'Congratulations! You have killed enough '.. k:lower() ..'.'
                                end
                                return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, s)
                        end
                end
        end
end
return true
end
]]></event>
<event type="login" name="taskEventLogin" event="buffer"><![CDATA[
registerCreatureEvent(cid, 'talkactionTask')
]]></event>
</mod>
 
Hi, thank you for your time. It working fine now i can swap from task to task and it always says task is finish when it really is.

But from now I have a problem with rewards, before there were no problems with this parts can you look through it again please ?

For example :

Undead elite gladiator :

Reward :
Lua:
rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},

but it only gives me message with :

Code:
23:56 Items that you got as a reward is: 100x sms points,.

Another example is Dragon
Reward :
Lua:
rewards = {'exp', 168000, 'cash', 60000, 'item', {2487, 1, 2516, 1}}},

but it only gives me message with :

Code:
00:01 Items that you got as a reward is: 100x sms points,.       - but there is no reward sms points..
or
00:01 Items that you got as a reward is: 168000x experience,.


Thanks in advance,

Best regards.
 
Hi, thank you for your time. It working fine now i can swap from task to task and it always says task is finish when it really is.

But from now I have a problem with rewards, before there were no problems with this parts can you look through it again please ?

For example :

Undead elite gladiator :

Reward :
Lua:
rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},

but it only gives me message with :

Code:
23:56 Items that you got as a reward is: 100x sms points,.

Another example is Dragon
Reward :
Lua:
rewards = {'exp', 168000, 'cash', 60000, 'item', {2487, 1, 2516, 1}}},

but it only gives me message with :

Code:
00:01 Items that you got as a reward is: 100x sms points,.       - but there is no reward sms points..
or
00:01 Items that you got as a reward is: 168000x experience,.


Thanks in advance,

Best regards.
Lua:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Talkaction Task System" version="1.0" author="Oskar" contact="[email protected]" enabled="yes">
<config name="talkactionTask_conf"><![CDATA[
task = {
        ['undead elite gladiator'] = {storage = 10000, beginStorageValue = 300, finishStorageValue = 301, count = 10,
                            requiedLevelToReward = 99999999,
                            rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
        ['retching horror'] = {storage = 9999, beginStorageValue = 1, finishStorageValue = 2, count = 10,
                            requiedLevelToReward = 99999999,
                            rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
        ['silencer'] = {storage = 9998, beginStorageValue = 3, finishStorageValue = 4, count = 10,
                            requiedLevelToReward = 99999999,
                            rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}},
        ['midnight asura'] = {storage = 8965, beginStorageValue = 103, finishStorageValue = 104, count = 200,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 65400, 'cash', 20000, 'item', {5880, 10}}},
        ['ghastly dragon'] = {storage = 8975, beginStorageValue = 108, finishStorageValue = 109, count = 150,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 8000, 'cash', 20000, 'item', {2486, 1, 2168, 1}}},
        ['wailing widow'] = {storage = 1421, beginStorageValue = 5, finishStorageValue = 6, count = 250,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 90750, 'cash', 30000, 'item', {2515, 1}}},
        ['triple medusa'] = {storage = 9993, beginStorageValue = 13, finishStorageValue = 14, count = 300,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 54900, 'cash', 35000, 'item', {2534, 1}}},
        ['crystal spider'] = {storage = 8675, beginStorageValue = 211, finishStorageValue = 212, count = 500,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 270000, 'cash', 20000, 'item', {5879, 10, 7290, 5}}},
        ['worker golem'] = {storage = 8375, beginStorageValue = 205, finishStorageValue = 206, count = 300,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 225000, 'cash', 20000, 'item', {2487, 1}}},
        ['dragon'] = {storage = 5123, beginStorageValue = 85, finishStorageValue = 86, count = 4,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 168000, 'cash', 60000, 'item', {2487, 1, 2516, 1}}},
        ['bog raider'] = {storage = 9992, beginStorageValue = 15, finishStorageValue = 16, count = 400,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 192000, 'cash', 64000, 'item', {8880, 1}}},
        ['giant spider'] = {storage = 9982, beginStorageValue = 35, finishStorageValue = 36, count = 500,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 270000, 'cash', 30000, 'item', {5879, 10}}},
        ['quara'] = {storage = 8412, beginStorageValue = 118, finishStorageValue = 119, count = 250,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 350000, 'cash', 70000, 'item', {5895, 10}}},
        ['necromancer'] = {storage = 8961, beginStorageValue = 100, finishStorageValue = 101, count = 400,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 140000, 'cash', 20000, 'item', {2195, 1}}},
        ['wyrm'] = {storage = 9961, beginStorageValue = 77, finishStorageValue = 78, count = 600,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 558000, 'cash', 77000, 'item', {8871, 1}}},
        ['dragon lord'] = {storage = 4561, beginStorageValue = 87, finishStorageValue = 88, count = 800,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1008000, 'cash', 90000, 'item', {2414, 1, 7899, 1}}},
        ['frost dragon'] = {storage = 9997, beginStorageValue = 90, finishStorageValue = 91, count = 800,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1008000, 'cash', 90000,  'item', {2498, 1}}},
        ['hero'] = {storage = 9996, beginStorageValue = 7, finishStorageValue = 8, count = 500,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 360000, 'cash', 70000, 'item', {2491, 1, 2488, 1}}},
        ['black knight'] = {storage = 9995, beginStorageValue = 9, finishStorageValue = 10, count = 600,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 576000, 'cash', 80000, 'item', {2496, 1}}},
        ['war golem'] = {storage = 8275, beginStorageValue = 203, finishStorageValue = 204, count = 450,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 742500, 'cash', 30000, 'item', {2645, 1}}},
        ['hydra'] = {storage = 9978, beginStorageValue = 43, finishStorageValue = 44, count = 800,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1008000, 'cash', 90000, 'item', {2498, 1, 2195, 1}}},
        ['medusa'] = {storage = 9973, beginStorageValue = 53, finishStorageValue = 54, count = 750,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1822500, 'cash', 140000, 'item', {7884, 1, 7903, 1, 7885, 1}}},
        ['serpent spawn'] = {storage = 9967, beginStorageValue = 65, finishStorageValue = 66, count = 700,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1281000, 'cash', 50000}},
        ['nightmare'] = {storage = 9959, beginStorageValue = 81, finishStorageValue = 82, count = 850,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 110000, 'cash', 95000, 'item', {6391, 1}}},
        ['warlock'] = {storage = 8475, beginStorageValue = 207, finishStorageValue = 208, count = 850,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 2040000, 'cash', 90000, 'item', {7895, 1, 7898, 1}}},
        ['behemoth'] = {storage = 9994, beginStorageValue = 11, finishStorageValue = 12, count = 500,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 900000, 'cash', 80000, 'item', {2466, 1}}},
        ['destroyer'] = {storage = 8075, beginStorageValue = 213, finishStorageValue = 214, count = 600,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 900000, 'cash', 70000, 'item', {5741, 1}}},
        ['grim reaper'] = {storage = 9983, beginStorageValue = 33, finishStorageValue = 34, count = 900,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 2180000, 'cash', 180000, 'item', {5741, 1}}},
        ['fury'] = {storage = 8175, beginStorageValue = 201, finishStorageValue = 202, count = 800,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 2160000, 'cash', 70000, 'item', {2470, 1}}},
        ['hellfire fighter'] = {storage = 8575, beginStorageValue = 209, finishStorageValue = 210, count = 450,
                            requiedLevelToReward = 99999999,
                            rewards = {'exp', 1053000, 'cash', 110000, 'item', {7891, 1, 7899, 1, 7890, 200}}},
        ['demon'] = {storage = 9964, beginStorageValue = 71, finishStorageValue = 72, count = 666,
                            requiedLevelToReward = 99999999,
                            rewards = {'smsPoints', 100, 'exp', 2397600, 'cash', 200000,  'item', {5808, 1}}}
}

mainStorage = 12155

function isSummon(cid)
        if(not isCreature(cid)) then
                return false
        end
        return getCreatureMaster(cid) ~= cid
end

function checkInfoAboutTask(tableTask)
local message = ''
for i = 1, #tableTask/2 do
        local rewardType, rewardCount = tableTask[i*2-1], tableTask[i*2]
        if rewardType == 'item' and type(rewardCount) == 'table' then
                for item = 1, #rewardCount/2 do
                        local rewardItemId, rewardItemCount = rewardCount[item*2-1], rewardCount[item*2]
                        message = message .. ('* ' .. rewardItemCount .. 'x ' .. getItemNameById(rewardItemId)) .. '\n'
                end
        else
                message = message .. ((rewardType == 'item' and '* ' .. getItemNameById(rewardCount)) or
                                                        (rewardType == 'exp' and '* ' .. rewardCount .. ' Experience ') or
                                                        (rewardType == 'cash' and '* ' .. rewardCount .. ' Money ') or
                                                        (rewardType == 'smsPoints' and '* ' .. rewardCount .. ' Sms points ')) .. '\n'
        end
end
return message
end

function doAddExp(cid, amount)
        return doSendAnimatedText(getThingPos(cid), amount, COLOR_WHITE) and doPlayerAddExperience(cid, amount) or false
end
]]></config>

<talkaction words="!task" event="script"><![CDATA[
domodlib('talkactionTask_conf')
function onSay(cid, words, param, channel)

local taskMenu, message = task[param:lower()], ''
if taskMenu and (taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) == -1 or getCreatureStorage(cid, mainStorage) < 1) then
        if taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) > -1 then
                return true
        else
                doCreatureSetStorage(cid, mainStorage, taskMenu.beginStorageValue)
        end
        doCreatureSetStorage(cid, taskMenu.storage, 0)
        return doPlayerPopupFYI(cid, 'The decision taken, your task is to '..(taskMenu.potionTask and 'use' or 'kill')..' - ' .. taskMenu.count.. ' ' ..param:lower().. (taskMenu.count > 1 and 's' or '') .. '\nRewards which you receive for finishing this task:\n' .. checkInfoAboutTask(taskMenu.rewards) .. (taskMenu.potionTask and '' or 'If you want to abort the current job enough that you use the command !task cancel\n')..'If you want to know about the current job simply use the command !task info\nIf you wish to receive a prize for the job simply use the command !task reward')
elseif taskMenu and (taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) == 1 or getCreatureStorage(cid, mainStorage) >= 1) then
        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You are already doing some task!')
elseif isInArray({'cancel', 'delete', 'abort'}, param:lower()) and getCreatureStorage(cid, mainStorage) > 0 then
        for _, v in pairs(task) do
                if not v.potionTask and getCreatureStorage(cid, v.storage) >= 0 then
                        doCreatureSetStorage(cid, mainStorage, -1)
                        doCreatureSetStorage(cid, v.storage, -1)
                        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You canceled the current task.')
                end
        end
elseif isInArray({'reward', 'end', 'finish'}, param:lower()) then
        local rewards, showMessage = 'Items that you got as a reward is: ', false
        for _, v in pairs(task) do
                if (getCreatureStorage(cid, v.storage) == v.count or getCreatureStorage(cid, mainStorage) == v.finishStorageValue) then
                        showMessage = true
                        if not v.potionTask then
                                doCreatureSetStorage(cid, mainStorage, -1)
                        else
                                doCreatureSetStorage(cid, v.storage, v.count + 1)
                        end
                        if not v.requiedLevelToReward or v.requiedLevelToReward >= getPlayerLevel(cid) then
                                for i = 1, #v.rewards/2 do
                                        local rewardType, rewardCount = v.rewards[i*2-1], v.rewards[i*2]
                                        if rewardType == 'item' and type(rewardCount) == 'table' and #rewardCount > 1 then
                                                for item = 1, #rewardCount / 2 do
                                                        local rewardItemId, rewardItemCount = rewardCount[item*2-1], rewardCount[item*2]
                                                        rewards = rewards .. rewardItemCount .. 'x ' .. getItemNameById(rewardItemId) .. ', '
                                                        doPlayerAddItem(cid, rewardItemId, rewardItemCount, true)
                                                end
                                        else
                                                rewards = rewards .. rewardCount .. 'x ' .. (rewardType == 'item' and getItemNameById(rewardCount) or rewardType == 'exp' and 'experience' or rewardType == 'cash' and 'money' or rewardType == 'smsPoints' and 'sms points') .. ', '
                                                if rewardType == 'item' then
                                                        doPlayerAddItem(cid, rewardCount, 1, true)
                                                elseif rewardType == 'exp' then
                                                        doAddExp(cid, rewardCount)
                                                elseif rewardType == 'cash' then
                                                        doPlayerAddMoney(cid, rewardCount)
                                                elseif rewardType == 'smsPoints' then
                                                        db.executeQuery("UPDATE `accounts` SET `premium_points` = `premium_points` + " .. rewardCount .. " WHERE `name` = '" .. getAccountByName(getCreatureName(cid)) .. "' LIMIT 1;")
                                                end
                                        end
                                end
								return showMessage and doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.sub(rewards, 1, string.len(rewards) - 1)..'.')
                        else
                                rewards = 'Your experience level is too high to be able to receive the reward.'
                        end
                end
        end
        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You have not finished your task yet or You have not started any task!')
else
        for k, v in pairs(task) do
                if isInArray((v.potionTask and {'potion','potions'} or {'info', 'information', 'details'}), param:lower()) and (v.potionTask and getCreatureStorage(cid, v.storage) >= 0 or getCreatureStorage(cid, mainStorage) > 0) then
                        if (v.potionTask and getCreatureStorage(cid, v.storage) <= v.count or isInArray({v.finishStorageValue, v.beginStorageValue}, getCreatureStorage(cid, mainStorage))) then
                                return doPlayerPopupFYI(cid, 'Your current task is to '..(v.potionTask and 'use' or 'kill')..' - ' .. v.count.. ' ' ..k:lower().. (v.count > 1 and 's' or '') .. '\nYou have killed ' .. getCreatureStorage(cid, v.storage) .. ' of ' .. v.count .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. '. You must kill ' .. v.count - getCreatureStorage(cid, v.storage) .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. ' yet\nRewards which you receive for finishing this task:\n' .. checkInfoAboutTask(v.rewards))
                        end
                        else
                        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You have not started any task!')
                end
        end
end
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Wrong command!')
end
]]></talkaction>

<event type="kill" registerTo ="all" name="talkactionTask" event="script"><![CDATA[
domodlib('talkactionTask_conf')
function onKill(cid, target)
if isPlayer(target) or getCreatureMaster(target) or isNpc(target) then
        return true
end
for k, v in pairs(task) do
        if k:lower() == getCreatureName(target):lower() then
                if getCreatureStorage(cid, mainStorage) == v.beginStorageValue then
                        if getCreatureStorage(cid, v.storage) < v.count then
                                doCreatureSetStorage(cid, v.storage, getCreatureStorage(cid, v.storage) + 1)
                                s = 'You killed ' .. getCreatureStorage(cid, v.storage) .. ' of ' .. v.count .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. '.'
                                if getCreatureStorage(cid, v.storage) == v.count then
                                        doCreatureSetStorage(cid, mainStorage, v.finishStorageValue)
                                        s = 'Congratulations! You have killed enough '.. k:lower() ..'.'
                                end
                                return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, s)
                        end
                end
        end
end
return true
end
]]></event>
<event type="login" name="taskEventLogin" event="buffer"><![CDATA[
registerCreatureEvent(cid, 'talkactionTask')
]]></event>
</mod>
 
Hi, thank you for your help but there is still problem with reward.

This is from dragon task, but dragon should be giving crown armor, dragon shield etc but is giving something different. Could you look at it again please?
Lua:
12:21 Items that you got as a reward is: 100x sms points, 2397600x experience, 200000x money, 1x orshabaal's brain,.

Now task gave me proper reward?
Code:
12:25 Items that you got as a reward is: 168000x experience, 60000x money, 1x crown armor, 1x dragon shield,.

I dont know whats going on but something is wrong with reading rewards by a scripts cuz sometimes it gives right reward and sometime wrong.

Looking forward for your help.
Thank you.

Best Regards
Bart
 
Hi, thank you for your help but there is still problem with reward.

This is from dragon task, but dragon should be giving crown armor, dragon shield etc but is giving something different. Could you look at it again please?
Lua:
12:21 Items that you got as a reward is: 100x sms points, 2397600x experience, 200000x money, 1x orshabaal's brain,.

Now task gave me proper reward?
Code:
12:25 Items that you got as a reward is: 168000x experience, 60000x money, 1x crown armor, 1x dragon shield,.

I dont know whats going on but something is wrong with reading rewards by a scripts cuz sometimes it gives right reward and sometime wrong.

Looking forward for your help.
Thank you.

Best Regards
Bart
change
Lua:
if (getCreatureStorage(cid, v.storage) == v.count or getCreatureStorage(cid, mainStorage) == v.finishStorageValue) then
to
Lua:
if (getCreatureStorage(cid, v.storage) == v.count and getCreatureStorage(cid, mainStorage) == v.finishStorageValue) then

Not sure how that slipped past me.
 
Back
Top