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

Lua TFS 1.3 Task System with points

Icaraii

Well-Known Member
Joined
Jan 5, 2020
Messages
469
Solutions
1
Reaction score
58
Hi guys,

I would like for this task system to have points, for example: the player chooses to do rotworm tasks, so he needs to kill 100 rotworms, everytime the player kills 1 rotworm, it counts 1 point to the task, everytime the player kills a carrion worm it counts 2 points to the task.

npc.lua
Lua:
-- Monster Tasks by Limos
-- Edited by Zeeb (aka Demnish)

local config = {
    repeatTask = true
}

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local xmsg = {}

function onCreatureAppear(cid)  npcHandler:onCreatureAppear(cid)  end
function onCreatureDisappear(cid)  npcHandler:onCreatureDisappear(cid)  end
function onCreatureSay(cid, type, msg)  npcHandler:onCreatureSay(cid, type, msg)  end
function onThink()  npcHandler:onThink()  end

local storage = 62003

local monsters = {
    ["Trolls"] = {storage = 5010, mstorage = 19000, amount = 100, exp = 1000, items = {{id = 2152, count = 5}}},
    ["Orcs"] = {storage = 5011, mstorage = 19001, amount = 100, exp = 1000, items = {{id = 2152, count = 5}}},
    ["Rotworms"] = {storage = 5012, mstorage = 19002, amount = 10, exp = 500, items = {{id = 2086, count = 1}}},
    ["Dragons"] = {storage = 5013, mstorage = 19003, amount = 100, exp = 10000, items = {{id = 2152, count = 25}}},
    ["Giant Spiders"] = {storage = 5014, mstorage = 19004, amount = 100, exp = 25000, items = {{id = 2152, count = 50}}},
    ["Heroes"] = {storage = 5015, mstorage = 19005, amount = 100, exp = 50000, items = {{id = 2160, count = 1}}},
    ["Demons"] = {storage = 5016, mstorage = 19006, amount = 666, exp = 1000000, items = {{id = 2160, count = 10}, {id = 24301, count = 1}}}
}


local function getItemsFromTable(itemtable)
    local text = ""
    for v = 1, #itemtable do
        count, info = itemtable[v].count, ItemType(itemtable[v].id)
        local ret = ", "
        if v == 1 then
            ret = ""
        elseif v == #itemtable then
            ret = " and "
        end
        text = text .. ret
        text = text .. (count > 1 and count or info:getArticle()).." "..(count > 1 and info:getPluralName() or info:getName())
    end
    return text
end

local function Cptl(f, r)
    return f:upper()..r:lower()
end

function creatureSayCallback(cid, type, msg)
    local player, cmsg = Player(cid), msg:gsub("(%a)([%w_']*)", Cptl)
    if not npcHandler:isFocused(cid) then
        if msg == "hi" or msg == "hello" then
            npcHandler:addFocus(cid)
            if player:getStorageValue(storage) == -1 then
                local text, n = "",  0
                for k, x in pairs(monsters) do
                    if player:getStorageValue(x.mstorage) < x.amount then
                        n = n + 1
                        text = text .. ", "
                        text = text .. ""..x.amount.." {"..k.."}"
                    end
                end
                if n > 1 then
                    npcHandler:say("Well met adventurer. I have several tasks for you to kill monsters"..text..", which one do you choose? I can also show you a {list} with rewards and you can {stop} a task if you want.", cid)
                    npcHandler.topic[cid] = 1
                    xmsg[cid] = msg
                elseif n == 1 then
                    npcHandler:say("I have one last task for you adventurer"..text..".", cid)
                    npcHandler.topic[cid] = 1
                else
                    npcHandler:say("You already did all tasks, I have nothing for you to do anymore, good job though.", cid)
                end
            elseif player:getStorageValue(storage) == 1 then
                for k, x in pairs(monsters) do
                    if player:getStorageValue(x.storage) == 1 then
                        npcHandler:say("Did you kill "..x.amount.." "..k.."?", cid)
                        npcHandler.topic[cid] = 2
                        xmsg[cid] = k
                    end
                end
            end
        else
            return false
        end
    elseif monsters[cmsg] and npcHandler.topic[cid] == 1 then
        if player:getStorageValue(monsters[cmsg].storage) == -1 then
            npcHandler:say("Good luck, come back when you killed "..monsters[cmsg].amount.." "..cmsg..".", cid)
            player:setStorageValue(storage, 1)
            player:setStorageValue(monsters[cmsg].storage, 1)
        else
            npcHandler:say("You already did the "..cmsg.." mission.", cid)
        end
        npcHandler.topic[cid] = 0
    elseif msgcontains(msg, "yes") and npcHandler.topic[cid] == 2 then
        local x = monsters[xmsg[cid]]
        if player:getStorageValue(x.mstorage) >= x.amount then
            if x.exp ~= nil and x.exp > 0 then
                npcHandler:say("Good job, here is your reward, "..x.exp.." experience and "..getItemsFromTable(x.items)..".", cid)
            else
                npcHandler:say("Good job, here is your reward, "..getItemsFromTable(x.items)..".", cid)
            end
            for g = 1, #x.items do
                player:addItem(x.items[g].id, x.items[g].count)
            end
            if x.exp ~= nil and x.exp > 0 then
                player:addExperience(x.exp)
                player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            end
            if config.repeatTask then
                player:setStorageValue(x.storage, -1)
                player:setStorageValue(x.mstorage, -1)
            else
                player:setStorageValue(x.storage, 2)
            end
            player:setStorageValue(storage, -1)
            npcHandler.topic[cid] = 3
        else
            npcHandler:say("You didn't kill them all, you still need to kill "..x.amount -(player:getStorageValue(x.mstorage) + 1).." "..xmsg[cid]..".", cid)
        end
    elseif msgcontains(msg, "task") and npcHandler.topic[cid] == 3 then
        local text, n = "",  0
        for k, x in pairs(monsters) do
            if player:getStorageValue(x.mstorage) < x.amount then
                n = n + 1
                text = text .. (n == 1 and "" or ", ")
                text = text .. ""..x.amount.." {"..k.."}"
            end
        end
        if text ~= "" then
            npcHandler:say("Want to do another task? You can choose "..text..".", cid)
            npcHandler.topic[cid] = 1
        else
            npcHandler:say("You already did all tasks.", cid)
        end
    elseif msgcontains(msg, "no") and npcHandler.topic[cid] == 1 then
        npcHandler:say("Ok then.", cid)
        npcHandler.topic[cid] = 0
    elseif msgcontains(msg, "stop") then
        local text, n = "",  0
        for k, x in pairs(monsters) do
            if player:getStorageValue(x.mstorage) < x.amount then
                n = n + 1
                text = text .. (n == 1 and "" or ", ")
                text = text .. "{"..k.."}"
                if player:getStorageValue(x.storage) == 1 then
                    player:setStorageValue(x.storage, -1)
                end
            end
        end
        if player:getStorageValue(storage) == 1 then
            npcHandler:say("Alright, let me know if you want to continue an other task, you can still choose "..text..".", cid)
        else
            npcHandler:say("You didn't start any new task yet, if you want to start one, you can choose "..text..".", cid)
        end
        player:setStorageValue(storage, -1)
        npcHandler.topic[cid] = 1
    elseif msgcontains(msg, "list") then
        local text = "Tasks\n\n"
        for k, x in pairs(monsters) do
            if player:getStorageValue(x.mstorage) < x.amount then
                text = text ..k .." ["..(player:getStorageValue(x.mstorage) + 1).."/"..x.amount.."]:\n  Rewards:\n  "..getItemsFromTable(x.items).."\n  "..x.exp.." experience \n\n"
            else
                text = text .. k .." [DONE]\n"
            end
        end
        player:showTextDialog(1949, "" .. text)
        npcHandler:say("Here you are.", cid)
    elseif msgcontains(msg, "bye") then
        npcHandler:say("Bye.", cid)
        npcHandler:releaseFocus(cid)
    else
        npcHandler:say("What?", cid)
    end
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

data/creaturescript/tasksystem
Lua:
local config = {
    -- Trolls
    ['troll'] = {name = 'Troll', amount = 100, storage = 19000, startstorage = 5010, startvalue = 1},
    ['swamp troll'] = {name = 'Troll', amount = 100, storage = 19000, startstorage = 5010, startvalue = 1},
    ['frost troll'] = {name = 'Troll', amount = 100, storage = 19000, startstorage = 5010, startvalue = 1},
    ['island troll'] = {name = 'Troll', amount = 100, storage = 19000, startstorage = 5010, startvalue = 1},

    -- Orcs
    ['orc'] = {name = 'Orc', amount = 100, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc berserker'] = {name = 'Orc', amount = 100, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc leader'] = {name = 'Orc', amount = 100, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc rider'] = {name = 'Orc', amount = 100, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc shaman'] = {name = 'Orc', amount = 100, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc spearman'] = {name = 'Orc', amount = 100, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc warlord'] = {name = 'Orc', amount = 100, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc warrior'] = {name = 'Orc', amount = 100, storage = 19001, startstorage = 5011, startvalue = 1},

    ['rotworm'] = {name = 'Rotworm', amount = 10, storage = 19002, startstorage = 5012, startvalue = 1},

    -- Dragons
    ['dragon'] = {name = 'Dragon', amount = 100, storage = 19003, startstorage = 5013, startvalue = 1},
    ['dragon lord'] = {name = 'Dragon', amount = 100, storage = 19003, startstorage = 5013, startvalue = 1},

    ['giant spider'] = {name = 'Giant Spider', amount = 100, storage = 19004, startstorage = 5014, startvalue = 1},
    ['hero'] = {name = 'Hero', amount = 100, storage = 19005, startstorage = 5015, startvalue = 1},
    ['demon'] = {name = 'Demon', amount = 666, storage = 19006, startstorage = 5016, startvalue = 1}
}
function onKill(player, target)
    local monster = config[target:getName():lower()]
    if target:isPlayer() or not monster or target:getMaster() then
        return true
    end
    local stor = player:getStorageValue(monster.storage)+1
    if stor < monster.amount and player:getStorageValue(monster.startstorage) >= monster.startvalue then
        player:setStorageValue(monster.storage, stor)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] '..(stor +1)..' of '..monster.amount..' '..(monster.name or target:getName())..'s killed.')
    end
    if (stor +1) == monster.amount then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] Congratulations, you have killed '..(stor +1)..' '..monster.name..'s and completed the '..monster.name..'s mission.')
        player:setStorageValue(monster.storage, stor +1)
    end
    return true
end
 
@Icaraii try something like this:
In "points" u change value, how much monster add points

data/creaturescript/tasksystem
Lua:
local config = {
    -- Trolls
    ['troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['swamp troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['frost troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['island troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},

    -- Orcs
    ['orc'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc berserker'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc leader'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc rider'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc shaman'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc spearman'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc warlord'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc warrior'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},

    ['rotworm'] = {name = 'Rotworm', amount = 10, points = 1, storage = 19002, startstorage = 5012, startvalue = 1},

    -- Dragons
    ['dragon'] = {name = 'Dragon', amount = 100, points = 1, storage = 19003, startstorage = 5013, startvalue = 1},
    ['dragon lord'] = {name = 'Dragon', amount = 100, points = 1, storage = 19003, startstorage = 5013, startvalue = 1},

    ['giant spider'] = {name = 'Giant Spider', amount = 100, points = 1, storage = 19004, startstorage = 5014, startvalue = 1},
    ['hero'] = {name = 'Hero', amount = 100, points = 1, storage = 19005, startstorage = 5015, startvalue = 1},
    ['demon'] = {name = 'Demon', amount = 666, points = 1, storage = 19006, startstorage = 5016, startvalue = 1}
}
function onKill(player, target)
    local monster = config[target:getName():lower()]
    if target:isPlayer() or not monster or target:getMaster() then
        return true
    end
    local stor = player:getStorageValue(monster.storage) + monster.points
    if stor < monster.amount and player:getStorageValue(monster.startstorage) >= monster.startvalue then
        player:setStorageValue(monster.storage, stor)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] '..(stor + monster.points)..' of '..monster.amount..' '..(monster.name or target:getName())..'s killed.')
    end
    if (stor + monster.points) == monster.amount then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] Congratulations, you have killed '..(stor + monster.points)..' '..monster.name..'s and completed the '..monster.name..'s mission.')
        player:setStorageValue(monster.storage, stor + monster.points)
    end
    return true
end
 
@Icaraii try something like this:
In "points" u change value, how much monster add points

data/creaturescript/tasksystem
Lua:
local config = {
    -- Trolls
    ['troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['swamp troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['frost troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['island troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},

    -- Orcs
    ['orc'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc berserker'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc leader'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc rider'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc shaman'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc spearman'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc warlord'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc warrior'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},

    ['rotworm'] = {name = 'Rotworm', amount = 10, points = 1, storage = 19002, startstorage = 5012, startvalue = 1},

    -- Dragons
    ['dragon'] = {name = 'Dragon', amount = 100, points = 1, storage = 19003, startstorage = 5013, startvalue = 1},
    ['dragon lord'] = {name = 'Dragon', amount = 100, points = 1, storage = 19003, startstorage = 5013, startvalue = 1},

    ['giant spider'] = {name = 'Giant Spider', amount = 100, points = 1, storage = 19004, startstorage = 5014, startvalue = 1},
    ['hero'] = {name = 'Hero', amount = 100, points = 1, storage = 19005, startstorage = 5015, startvalue = 1},
    ['demon'] = {name = 'Demon', amount = 666, points = 1, storage = 19006, startstorage = 5016, startvalue = 1}
}
function onKill(player, target)
    local monster = config[target:getName():lower()]
    if target:isPlayer() or not monster or target:getMaster() then
        return true
    end
    local stor = player:getStorageValue(monster.storage) + monster.points
    if stor < monster.amount and player:getStorageValue(monster.startstorage) >= monster.startvalue then
        player:setStorageValue(monster.storage, stor)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] '..(stor + monster.points)..' of '..monster.amount..' '..(monster.name or target:getName())..'s killed.')
    end
    if (stor + monster.points) == monster.amount then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] Congratulations, you have killed '..(stor + monster.points)..' '..monster.name..'s and completed the '..monster.name..'s mission.')
        player:setStorageValue(monster.storage, stor + monster.points)
    end
    return true
end
It kinda works.

12:08 [Monster Task] 1 of 10 Rotworms killed. (when I killed 1 rotworm)
12:08 [Monster Task] 4 of 10 Rotworms killed. (when I killed 1 carrion worm)
So it seems that when I put 2 points to carrion worm, it add 3 points.

Lua:
local config = {
    -- Trolls
    ['troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['swamp troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['frost troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['island troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},

    -- Orcs
    ['orc'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc berserker'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc leader'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc rider'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc shaman'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc spearman'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc warlord'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc warrior'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},

    ['rotworm'] = {name = 'Rotworm', amount = 10, points = 1, storage = 19002, startstorage = 5012, startvalue = 1},
    ['carrion worm'] = {name = 'Rotworm', amount = 10, points = 2, storage = 19002, startstorage = 5012, startvalue = 1},

    -- Dragons
    ['dragon'] = {name = 'Dragon', amount = 100, points = 1, storage = 19003, startstorage = 5013, startvalue = 1},
    ['dragon lord'] = {name = 'Dragon', amount = 100, points = 1, storage = 19003, startstorage = 5013, startvalue = 1},

    ['giant spider'] = {name = 'Giant Spider', amount = 100, points = 1, storage = 19004, startstorage = 5014, startvalue = 1},
    ['hero'] = {name = 'Hero', amount = 100, points = 1, storage = 19005, startstorage = 5015, startvalue = 1},
    ['demon'] = {name = 'Demon', amount = 666, points = 1, storage = 19006, startstorage = 5016, startvalue = 1}
}
function onKill(player, target)
    local monster = config[target:getName():lower()]
    if target:isPlayer() or not monster or target:getMaster() then
        return true
    end
    local stor = player:getStorageValue(monster.storage) + monster.points
    if stor < monster.amount and player:getStorageValue(monster.startstorage) >= monster.startvalue then
        player:setStorageValue(monster.storage, stor)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] '..(stor + monster.points)..' of '..monster.amount..' '..(monster.name or target:getName())..'s killed.')
    end
    if (stor + monster.points) == monster.amount then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] Congratulations, you have killed '..(stor + monster.points)..' '..monster.name..'s and completed the '..monster.name..'s mission.')
        player:setStorageValue(monster.storage, stor + monster.points)
    end
    return true
end
 
@Icaraii check this

Lua:
local config = {
    -- Trolls
    ['troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['swamp troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['frost troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},
    ['island troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1},

    -- Orcs
    ['orc'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc berserker'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc leader'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc rider'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc shaman'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc spearman'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc warlord'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},
    ['orc warrior'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1},

    ['rotworm'] = {name = 'Rotworm', amount = 10, points = 1, storage = 19002, startstorage = 5012, startvalue = 1},
    ['carrion worm'] = {name = 'Rotworm', amount = 10, points = 2, storage = 19002, startstorage = 5012, startvalue = 1},

    -- Dragons
    ['dragon'] = {name = 'Dragon', amount = 100, points = 1, storage = 19003, startstorage = 5013, startvalue = 1},
    ['dragon lord'] = {name = 'Dragon', amount = 100, points = 1, storage = 19003, startstorage = 5013, startvalue = 1},

    ['giant spider'] = {name = 'Giant Spider', amount = 100, points = 1, storage = 19004, startstorage = 5014, startvalue = 1},
    ['hero'] = {name = 'Hero', amount = 100, points = 1, storage = 19005, startstorage = 5015, startvalue = 1},
    ['demon'] = {name = 'Demon', amount = 666, points = 1, storage = 19006, startstorage = 5016, startvalue = 1}
}
function onKill(player, target)
    local monster = config[target:getName():lower()]
    if target:isPlayer() or not monster or target:getMaster() then
        return true
    end
    local stor = player:getStorageValue(monster.storage)
    if stor < monster.amount and player:getStorageValue(monster.startstorage) >= monster.startvalue then
        player:setStorageValue(monster.storage, stor + monster.points)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] '..(stor + monster.points)..' of '..monster.amount..' '..(monster.name or target:getName())..'s killed.')
    end
    if (stor + monster.points) == monster.amount then
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] Congratulations, you have killed '..(stor + monster.points)..' '..monster.name..'s and completed the '..monster.name..'s mission.')
        player:setStorageValue(monster.storage, stor + monster.points)
    end
    return true
end
 
local config = { -- Trolls ['troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1}, ['swamp troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1}, ['frost troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1}, ['island troll'] = {name = 'Troll', amount = 100, points = 1, storage = 19000, startstorage = 5010, startvalue = 1}, -- Orcs ['orc'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1}, ['orc berserker'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1}, ['orc leader'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1}, ['orc rider'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1}, ['orc shaman'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1}, ['orc spearman'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1}, ['orc warlord'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1}, ['orc warrior'] = {name = 'Orc', amount = 100, points = 1, storage = 19001, startstorage = 5011, startvalue = 1}, ['rotworm'] = {name = 'Rotworm', amount = 10, points = 1, storage = 19002, startstorage = 5012, startvalue = 1}, ['carrion worm'] = {name = 'Rotworm', amount = 10, points = 2, storage = 19002, startstorage = 5012, startvalue = 1}, -- Dragons ['dragon'] = {name = 'Dragon', amount = 100, points = 1, storage = 19003, startstorage = 5013, startvalue = 1}, ['dragon lord'] = {name = 'Dragon', amount = 100, points = 1, storage = 19003, startstorage = 5013, startvalue = 1}, ['giant spider'] = {name = 'Giant Spider', amount = 100, points = 1, storage = 19004, startstorage = 5014, startvalue = 1}, ['hero'] = {name = 'Hero', amount = 100, points = 1, storage = 19005, startstorage = 5015, startvalue = 1}, ['demon'] = {name = 'Demon', amount = 666, points = 1, storage = 19006, startstorage = 5016, startvalue = 1} } function onKill(player, target) local monster = config[target:getName():lower()] if target:isPlayer() or not monster or target:getMaster() then return true end local stor = player:getStorageValue(monster.storage) if stor < monster.amount and player:getStorageValue(monster.startstorage) >= monster.startvalue then player:setStorageValue(monster.storage, stor + monster.points) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] '..(stor + monster.points)..' of '..monster.amount..' '..(monster.name or target:getName())..'s killed.') end if (stor + monster.points) == monster.amount then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Monster Task] Congratulations, you have killed '..(stor + monster.points)..' '..monster.name..'s and completed the '..monster.name..'s mission.') player:setStorageValue(monster.storage, stor + monster.points) end return true end
Thanks, that works perfectly.
 
Back
Top