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

set maximum level (tfs 0.4)

WikiArk21

New Member
Joined
Oct 24, 2023
Messages
11
Reaction score
1
I was looking for a script to implement a level-up lock that is only released if a certain storage is present. While searching forums, I found the script below, but it's designed for TFS 1.x. I would like it to be adapted for TFS 0.4. How can I do that?

Lua:
-- Put this in data/global.lua
function getExpForLevel(level)
    level = level - 1
    return ((50 * level * level * level) - (150 * level * level) + (400 * level)) / 3
end

-- Put this in data/events/scripts/player.lua before Player:onGainExperience (outside of function)
local level_tiers = {
    {level = 20, storage = 50000, value = 1}, -- level, quest_storage, value_required
    {level = 40, storage = 50001, value = 1},
    {level = 60, storage = 50002, value = 1},
}

-- Put this in data/events/scripts/player.lua within Player:onGainExperience before "return exp"
for _, array in pairs(level_tiers) do
    if self:getStorageValue(array.storage) < array.value then
        local current_exp, level_exp = self:getExperience(), getExpForLevel(array.level)
        if (current_exp + exp) > level_exp then
            exp = math.max(0, level_exp - current_exp)
            break
        end
    end
end
 
TFS 0.4 doesn't have anything like Player:onGainExperience function.

A crude method might be to set an experience limit, and every minute or so, remove excess experience gained from the player.

XML:
<globalevent name="experienceLimiter" interval="60000" event="script" value="experienceLimiter.lua"/>
Lua:
local experienceThresholds = {
    {experience = 100000, storage = 45001}, -- needs to have storage 45001, else experience is reset to 100000
    {experience = 200000, storage = 45002}, -- lowest experience first, higher experience later
    {experience = 300000, storage = 45003}
}

local function doPlayerLimitExperience(cid, experienceThreshold)
    if not isPlayer(cid) then
        return
    end
   
    local extraExperience = getPlayerExperience(cid) - experienceThreshold
    if extraExperience > 0 then
        doPlayerAddExperience(cid, -extraExperience)
    end
end

function onThink(interval)
    for _, cid in ipairs(getPlayersOnline()) do
        for _, threshold in ipairs(experienceThresholds) do
            if getCreatureStorage(cid, threshold.storage) ~= -1 then
                doPlayerLimitExperience(cid, threshold.experience)
                break
            end
        end
    end
    return true
end
 
Last edited:
Back
Top