• 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+ Offline Training OnLogin Problem

Hertus

New Member
Joined
Jul 28, 2018
Messages
42
Reaction score
2
Hello,
i have problem with this code. Please help me. :)
Lua:
Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/offlinetraining.lua:onLogin
getNumber(). Argument 2 has out-of-range value for j: -1
stack traceback:
        [C]: in function 'setOfflineTrainingSkill'
        data/creaturescripts/scripts/offlinetraining.lua:10: in function <data/creaturescripts/scripts/offlinetraining.lua:1>
 
My code:
Lua:
function onLogin(player)
    local lastLogout = player:getLastLogout()
    local offlineTime = lastLogout ~= 0 and math.min(os.time() - lastLogout, 86400 * 21) or 0
    local offlineTrainingSkill = player:getOfflineTrainingSkill()
    if offlineTrainingSkill == -1 then
        player:addOfflineTrainingTime(offlineTime * 1000)
        return true
    end

    player:setOfflineTrainingSkill(-1)

    if offlineTime < 600 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You must be logged out for more than 10 minutes to start offline training.")
        return true
    end

    local trainingTime = math.max(0, math.min(offlineTime, math.min(43200, player:getOfflineTrainingTime() / 1000)))
    player:removeOfflineTrainingTime(trainingTime * 1000)

    local remainder = offlineTime - trainingTime
    if remainder > 0 then
        player:addOfflineTrainingTime(remainder * 1000)
    end

    if trainingTime < 60 then
        return true
    end

    local text = "During your absence you trained for"
    local hours = math.floor(trainingTime / 3600)
    if hours > 1 then
        text = string.format("%s %d hours", text, hours)
    elseif hours == 1 then
        text = string.format("%s 1 hour", text)
    end

    local minutes = math.floor((trainingTime % 3600) / 60)
    if minutes ~= 0 then
        if hours ~= 0 then
            text = string.format("%s and", text)
        end

        if minutes > 1 then
            text = string.format("%s %d minutes", text, minutes)
        else
            text = string.format("%s 1 minute", text)
        end
    end

    text = string.format("%s.", text)
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, text)

    local vocation = player:getVocation()
    local promotion = vocation:getPromotion()
    local topVocation = not promotion and vocation or promotion

    local updateSkills = false
    if table.contains({SKILL_CLUB, SKILL_SWORD, SKILL_AXE, SKILL_DISTANCE}, offlineTrainingSkill) then
        local modifier = topVocation:getAttackSpeed() / 1000
        updateSkills = player:addOfflineTrainingTries(offlineTrainingSkill, (trainingTime / modifier) / (offlineTrainingSkill == SKILL_DISTANCE and 4 or 2))
    elseif offlineTrainingSkill == SKILL_MAGLEVEL then
        local gainTicks = topVocation:getManaGainTicks() * 2
        if gainTicks == 0 then
            gainTicks = 1
        end

        updateSkills = player:addOfflineTrainingTries(SKILL_MAGLEVEL, trainingTime * (vocation:getManaGainAmount() / gainTicks))
    end

    if updateSkills then
        player:addOfflineTrainingTries(SKILL_SHIELD, trainingTime / 4)
    end

    return true
end
 
The solution that I found is by put "false" instead of "-1", now the console gives no error and seems to works fine.
Lua:
player:setOfflineTrainingSkill(false)
 
The solution that I found is by put "false" instead of "-1", now the console gives no error and seems to works fine.
Lua:
player:setOfflineTrainingSkill(false)
Using player:setOfflineTrainingSkill(0) is correct because 0 is an integer number used to reset or clear the player's offline training skill. On the other hand, player:setOfflineTrainingSkill(false) is incorrect since false is a boolean value that does not match the expected data type for the function.
 
Thanks, It works too... I dont know if it works better, but gives no error too, and I'll follow your advice, thank you again
The same error occurred to me in the console, and I entered '0'. It's been a long time, and I haven't had any issues from six months ago until now. Everything is fine; it ran smoothly!
 
The function only adds time when it's -1, if you're going to change it to 0, did you do the same here or was there never a problem unchanging it?
Lua:
    if offlineTrainingSkill == -1 then
        player:addOfflineTrainingTime(offlineTime * 1000)
        return true
    end
 
Back
Top