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

TFS 1.X+ Automatic bestiary which gives different reward types (nekiro downgrade)

ralke

(҂ ͠❛ ෴ ͡❛)ᕤ
Joined
Dec 17, 2011
Messages
1,696
Solutions
30
Reaction score
953
Location
Santiago - Chile
GitHub
ralke23
Twitch
ralke23
Hi there, I use TFS 1.5 nekiro downgrade 8.6 and was looking at this post
It may not be exactly what you are looking for but I will leave you this example that I made for you especially:
data/scripts/example.lua -- TFS 1.5+
LUA:
local STORAGE_BASE = 75500

local records = {
    ["Dragon"] = {
        records = {
            { count = 10, message = "You killed 10 dragons." },
            { count = 50, message = "You killed 50 dragons." },
            { count = 100, message = "You killed 100 dragons." },
            { count = 250, message = "You killed 250 dragons." },
            { count = 500, message = "You killed 500 dragons." },
            { count = 1000, message = "You killed 1000 dragons." },
            { count = 2000, message = "You killed 2000 dragons." },
            { count = 5000, message = "You killed 5000 dragons." },
            { count = 10000, message = "You killed 10000 dragons." },
            { count = 20000, message = "You killed 20000 dragons." },
            { count = 50000, message = "You killed 50000 dragons." },
            { count = 100000, message = "You killed 100000 dragons." },
            { count = 200000, message = "You killed 200000 dragons." },
            { count = 500000, message = "You killed 500000 dragons." },
            { count = 1000000, message = "You killed 1000000 dragons." },
            { count = 2000000, message = "You killed 2000000 dragons." },
            { count = 5000000, message = "You killed 5000000 dragons." },
            { count = 10000000, message = "You killed 10000000 dragons." },
            { count = 20000000, message = "You killed 20000000 dragons." },
            { count = 50000000, message = "You killed 50000000 dragons." }
        }
    },
    ["Demon"] = {
        records = {
            { count = 10, message = "You killed 10 demons." },
            { count = 50, message = "You killed 50 demons." },
            { count = 100, message = "You killed 100 demons." },
            { count = 250, message = "You killed 250 demons." },
            { count = 500, message = "You killed 500 demons." },
            { count = 1000, message = "You killed 1000 demons." },
            { count = 2000, message = "You killed 2000 demons." },
            { count = 5000, message = "You killed 5000 demons." },
            { count = 10000, message = "You killed 10000 demons." },
            { count = 20000, message = "You killed 20000 demons." },
            { count = 50000, message = "You killed 50000 demons." },
            { count = 100000, message = "You killed 100000 demons." },
            { count = 200000, message = "You killed 200000 demons." },
            { count = 500000, message = "You killed 500000 demons." },
            { count = 1000000, message = "You killed 1000000 demons." },
            { count = 2000000, message = "You killed 2000000 demons." },
            { count = 5000000, message = "You killed 5000000 demons." },
            { count = 10000000, message = "You killed 10000000 demons." },
            { count = 20000000, message = "You killed 20000000 demons." },
            { count = 50000000, message = "You killed 50000000 demons." }
        }
    }
}

for name, record in pairs(records) do
    local storage = 0
    for i = 1, #name do
        storage = storage + name:byte(i)
    end
    records[name].storage = STORAGE_BASE + storage
end

local creatureEvent = CreatureEvent("KillMonsterCounter")

function creatureEvent.onKill(player, monster)
    local record = records[monster:getName()]
    if not record then
        return true
    end

    local storage = record.storage
    local count = math.max(0, tonumber(player.storage[storage]) or 0)
    for _, record in pairs(record.records) do
        if count < record.count then
            player.storage[storage] = count + 1
            if count + 1 == record.count then
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, record.message)
            end
            return true
        end
    end
    return true
end

creatureEvent:register()

local creatureEvent = CreatureEvent("LoginMonsterCounter")

function creatureEvent.onLogin(player)
    player:registerEvent("KillMonsterCounter")
    return true
end

creatureEvent:register()
Just make sure you use the correct spelling of monster names with their first letter capitalized.
example: Dragon instead dragon
LUA:
...
["Dragon"] = { -- see HERE
        records = {
            { count = 10, message = "You killed 10 dragons." },
            ...

I like the way it divides different stages of completition at the table @Sarah Wesker shows.

My question is, what is storage = storage + name:byte(i), because i'm looking into a way of using the storage assigned by completition the monster count, this way I can use this storage as requeriement for other systems (for example: I reach the 1000 dragon milestone and this will give me an storage, then I reach the 2000 dragon milestone which gives me an item reward).

So in resume, which storage would be for example, completing 1000 dragon milestone?
And also, there's a chance to add specific reward for each milestone?

So it ends up like this example:
LUA:
count = 1000, message = "You killed 1000 dragons.", storage="xxxxx"  ---- Use storage reward in this count
count = 2000, message = "You killed 2000 dragons.", itemid="xxxx" ---- Use itemid reward in this count
count = 3000, message = "You killed 3000 dragons.", money="xxxx" ---- Use money reward in this count

Thanks in advance!
 
Back
Top