• 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 Error spamming console

MxSoft

Leave Tibia, Live Life.
Joined
Dec 22, 2009
Messages
1,804
Solutions
1
Reaction score
43
Location
Mexico
Hi, im having a little problem with an script:
error:
Code:
[Error - CreatureScript Interface]
data/creaturescripts/scripts/offtrain_login.lua:onLogin
Description:
data/creaturescripts/scripts/offtrain_login.lua:18: attempt to perform arithmetic on a string value
stack traceback:
        data/creaturescripts/scripts/offtrain_login.lua:18: in function <data/creaturescripts/scripts/offtrain_login.lua:3>
Script:
Lua:
-- 0.4 - offline training - login.lua
function onLogin(cid)
    OfflineTraining_initialize(cid)
    if(OfflineTraining_isTraining(cid)) then
        OfflineTraining_turnOffTraining(cid)
        -- we add skill/mlvl, we select lower value: time that player was offline OR offline training time [bar in game - 9.6]
        OfflineTraining_addTrainedSkills(cid, math.min(OfflineTraining_getTime(cid), OfflineTraining_getOfflineTime(cid)))
        -- we remove offline training time [bar in game - 9.6],
        -- if player was offline longer then his 'offline training time' it will add him time [like on RL tibia]
        -- got '3  hours offline training time', stay logged off for 8 hours, you get skills for 3 hours and on login you got '5 hours offline training time'
        OfflineTraining_setTime(cid, math.abs(OfflineTraining_getTime(cid) - OfflineTraining_getOfflineTime(cid)))
        OfflineTraining_onEndTraining(cid)
    else
        -- offline training time also regenerate when you are offline, but NOT train
        OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) + OfflineTraining_getOfflineTime(cid))
    end
    return true
end
:18: attempt to perform arithmetic on a string value
 
Solution
try again

Lua:
function onLogin(cid)
    OfflineTraining_initialize(cid)
    if(OfflineTraining_isTraining(cid)) then
        OfflineTraining_turnOffTraining(cid)
        -- we add skill/mlvl, we select lower value: time that player was offline OR offline training time [bar in game - 9.6]
        --OfflineTraining_addTrainedSkills(cid, math.min(OfflineTraining_getTime(cid), OfflineTraining_getOfflineTime(cid)))
        print(OfflineTraining_getTime(cid))
        print(OfflineTraining_getOfflineTime(cid))
        -- we remove offline training time [bar in game - 9.6],
        -- if player was offline longer then his 'offline training time' it will add him time [like on RL tibia]
        -- got '3  hours offline training time', stay logged...
Just like it says, it can't perform arithmetic on a string value.
Convert the string value to a number value.
Lua:
local string_value = "3"
if tonumber(string_value) ~= nil then
    -- it's a number
else
    -- it's not a number
end

-- edit
print OfflineTraining_getTime and OfflineTraining_getOfflineTime and check their values
lmfao, your always like 2 seconds ahead of me posting
 
Run this
Lua:
function onLogin(cid)
    OfflineTraining_initialize(cid)
    if(OfflineTraining_isTraining(cid)) then
        OfflineTraining_turnOffTraining(cid)
        -- we add skill/mlvl, we select lower value: time that player was offline OR offline training time [bar in game - 9.6]
        --OfflineTraining_addTrainedSkills(cid, math.min(OfflineTraining_getTime(cid), OfflineTraining_getOfflineTime(cid)))
        print(OfflineTraining_getTime(cid))
        print(OfflineTraining_getOfflineTime(cid))
        -- we remove offline training time [bar in game - 9.6],
        -- if player was offline longer then his 'offline training time' it will add him time [like on RL tibia]
        -- got '3  hours offline training time', stay logged off for 8 hours, you get skills for 3 hours and on login you got '5 hours offline training time'
        --OfflineTraining_setTime(cid, math.abs(OfflineTraining_getTime(cid) - OfflineTraining_getOfflineTime(cid)))
        OfflineTraining_onEndTraining(cid)
    else
        -- offline training time also regenerate when you are offline, but NOT train
        OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) + OfflineTraining_getOfflineTime(cid))
    end
    return true
end
and check the console, post results.
 
Code:
[Error - CreatureScript Interface]
data/creaturescripts/scripts/offtrain_login.lua:onLogin
Description:
data/creaturescripts/scripts/offtrain_login.lua:16: attempt to perform arithmetic on a string value
stack traceback:
        data/creaturescripts/scripts/offtrain_login.lua:16: in function <data/creaturescripts/scripts/offtrain_login.lua:1>
 
try again

Lua:
function onLogin(cid)
    OfflineTraining_initialize(cid)
    if(OfflineTraining_isTraining(cid)) then
        OfflineTraining_turnOffTraining(cid)
        -- we add skill/mlvl, we select lower value: time that player was offline OR offline training time [bar in game - 9.6]
        --OfflineTraining_addTrainedSkills(cid, math.min(OfflineTraining_getTime(cid), OfflineTraining_getOfflineTime(cid)))
        print(OfflineTraining_getTime(cid))
        print(OfflineTraining_getOfflineTime(cid))
        -- we remove offline training time [bar in game - 9.6],
        -- if player was offline longer then his 'offline training time' it will add him time [like on RL tibia]
        -- got '3  hours offline training time', stay logged off for 8 hours, you get skills for 3 hours and on login you got '5 hours offline training time'
        --OfflineTraining_setTime(cid, math.abs(OfflineTraining_getTime(cid) - OfflineTraining_getOfflineTime(cid)))
        OfflineTraining_onEndTraining(cid)
    else
        print(OfflineTraining_getTime(cid))
        print(OfflineTraining_getOfflineTime(cid))
        -- offline training time also regenerate when you are offline, but NOT train
        OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) + OfflineTraining_getOfflineTime(cid))
    end
    return true
end

btw error is in here
OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) + OfflineTraining_getOfflineTime(cid))
maybe
OfflineTraining_setTime(cid, tonumber(OfflineTraining_getTime(cid)) + tonumber(OfflineTraining_getOfflineTime(cid)))
 
Solution
Sorry for reborn this thread, but im still getting erros in the same system but in the logout creaturescript, i tryed to do the same but i didnt get succes.
Code:
[Error - CreatureScript Interface]
data/creaturescripts/scripts/offtrain_logout.lua:onLogout
Description:
data/lib/103-offline-training.lua:12: attempt to compare number with boolean
stack traceback:
        data/lib/103-offline-training.lua:12: in function 'OfflineTraining_canStartTraining'
        data/creaturescripts/scripts/offtrain_logout.lua:3: in function <data/creaturescripts/scripts/offtrain_logout.lua:2>
Lua:
-- config, in percent of normal training with 2 trainers and player vocation mana regeneration [by food]
OfflineTraining_rates = {
[SKILL_CLUB] = 110,
[SKILL_SWORD] = 110,
[SKILL_AXE] = 110,
[SKILL_DISTANCE] = 110,
[SKILL_SHIELD] = 110,
[SKILL__MAGLEVEL] = 110
}
-- function that you should edit to make it add other skill etc.
function OfflineTraining_canStartTraining(cid) -- return bool
return getCreatureStorage(cid, 62669) > 0
end
function OfflineTraining_onStartTraining(cid)
-- maybe someone will need
-- to save your time, this: doPlayerPopupFYI(cid, "You started offline training.")
-- NOT WORK :(
end
function OfflineTraining_onEndTraining(cid)
doCreatureSetStorage(cid, 62669, 0)
end
function OfflineTraining_addTrainedSkills(cid, trainTime) -- time in minutes!
local timeInSeconds = trainTime * 60
local vocInfo = getVocationInfo(getPlayerVocation(cid))
if(getCreatureStorage(cid, 62669) == SKILL_SWORD) then
doPlayerAddSkillTry(cid, SKILL_SWORD, ((timeInSeconds * 1000) / vocInfo["attackSpeed"]) * OfflineTraining_rates[SKILL_SWORD] / 100, true)
elseif(getCreatureStorage(cid, 62669) == SKILL_AXE) then
doPlayerAddSkillTry(cid, SKILL_AXE, ((timeInSeconds * 1000) / vocInfo["attackSpeed"]) * OfflineTraining_rates[SKILL_AXE] / 100, true)
elseif(getCreatureStorage(cid, 62669) == SKILL__MAGLEVEL) then
doPlayerAddSpentMana(cid, ((timeInSeconds / vocInfo["manaGainTicks"]) * vocInfo["manaGain"]) * OfflineTraining_rates[SKILL__MAGLEVEL] / 100, true)
elseif(getCreatureStorage(cid, 62669) == SKILL_CLUB) then
doPlayerAddSkillTry(cid, SKILL_CLUB, ((timeInSeconds * 1000) / vocInfo["attackSpeed"]) * OfflineTraining_rates[SKILL_CLUB] / 100, true)
elseif(getCreatureStorage(cid, 62669) == SKILL_DISTANCE) then
doPlayerAddSkillTry(cid, SKILL_DISTANCE, ((timeInSeconds * 1000) / vocInfo["attackSpeed"]) * OfflineTraining_rates[SKILL_DISTANCE] / 100, true)
end
doPlayerAddSkillTry(cid, SKILL_SHIELD, timeInSeconds * OfflineTraining_rates[SKILL_SHIELD] / 100, true)
end

-- 4 functions to show right values on 'bar' in Tibia 9.6
function OfflineTraining_getTime(cid)
return getCreatureStorage(cid, 62666)
end
function OfflineTraining_setTime(cid, newTime)
-- set values only between 0 - 720 [12 hours]
doCreatureSetStorage(cid, 62666, math.max(0, math.min(newTime, 720)))
-- now code to force server to send 'PlayerStats' (including Offline Time)
-- we must change any stat: hp,mana,stamina,cap,soul,exp,level
doPlayerAddSoul(cid, 1)
doPlayerAddSoul(cid, -1)
end
function OfflineTraining_addTime(cid, addTime)
OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) + addTime)
end
function OfflineTraining_removeTime(cid, removeTime)
OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) - removeTime)
end

-- functions for library to add skills/mlvl
function OfflineTraining_initialize(cid)
if(OfflineTraining_getTime(cid) == -1) then
OfflineTraining_setTime(cid, 720)
OfflineTraining_setLogoutTime(cid) -- block problem with first login 'add time'
end
end
function OfflineTraining_isTraining(cid)
return (getCreatureStorage(cid, 62667) > 0)
end
function OfflineTraining_turnOnTraining(cid)
doCreatureSetStorage(cid, 62667, 1)
end
function OfflineTraining_turnOffTraining(cid)
doCreatureSetStorage(cid, 62667, 0)
end
function OfflineTraining_getOfflineTime(cid)
return math.floor((os.time() - getCreatureStorage(cid, 62668)) / 60)
end
function OfflineTraining_setLogoutTime(cid)
return doCreatureSetStorage(cid, 62668, os.time())
end
Lua:
-- 0.4 - offline training - logout.lua
function onLogout(cid)
    if(OfflineTraining_canStartTraining(cid)) then
        OfflineTraining_turnOnTraining(cid)
        OfflineTraining_onStartTraining(cid)
    end
    OfflineTraining_setLogoutTime(cid)
    return true
end
 
Last edited:
Ty i will try this:

function OfflineTraining_addTime(cid, addTime)
OfflineTraining_setTime(cid, tonumber(OfflineTraining_getTime(cid)) + addTime)
end
function OfflineTraining_removeTime(cid, removeTime)
OfflineTraining_setTime(cid, tonumber(OfflineTraining_getTime(cid)) - removeTime)
end
 
Back
Top