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

Action Offline Training for 8.60

Oldschool'er

Tibia since 1998'
Joined
Dec 14, 2010
Messages
2,201
Reaction score
148
Location
United States
Hello i do not know if anyone else has posted this, If so please let me know and ill remove it.

EYyVggq.jpg


Data/Actions/Actions.xml
Code:
--Offline Training--
<action itemid="8834" event="script" value="other/offlinetraining.lua"/>
<action itemid="10353" event="script" value="other/offlinetraining.lua"/>
<action itemid="8626" event="script" value="other/offlinetraining.lua"/>
<action itemid="1444" event="script" value="other/offlinetraining.lua"/>
<action itemid="10349" event="script" value="other/offlinetraining.lua"/>

Data/Actions/Scripts/Others/offlinetraining.lua
Code:
function onUse(cid, item, fromPosition, itemEx, toPosition)
   if(item.itemid == 1444) then -- sword
     doCreatureSetStorage(cid, 62669, SKILL_SWORD)
   elseif(item.itemid == 10349) then -- axe
     doCreatureSetStorage(cid, 62669, SKILL_AXE)
   elseif(item.itemid == 8834) then -- mlvl
     doCreatureSetStorage(cid, 62669, SKILL__MAGLEVEL)
   elseif(item.itemid == 8626) then -- club
     doCreatureSetStorage(cid, 62669, SKILL_CLUB)
   elseif(item.itemid == 10353) then -- distannce
     doCreatureSetStorage(cid, 62669, SKILL_DISTANCE)
   end
   if item.actionid == 1000 then
   doRemoveCreature(cid)
end
   return true
end

-----------------------------------------------------------------------

Creature Scripts

Data/Creaturescripts/Creaturescripts.xml
Code:
<event type="login" name="offtrain_PlayerLogin" event="script" value="offtrain_login.lua"/>
<event type="logout" name="offtrain_PlayerLogout" event="script" value="offtrain_logout.lua"/>

Data/Creaturescripts/Scripts/offlinetrain_login.lua
Code:
-- 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

Data/Creaturescripts/Scripts/offlinetrain_logout.lua
Code:
-- 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

If anything you think is missing please post and post any errors.

For people who are lazy here are the scripts! ^^
Download: http://www.mediafire.com/?bagu939w4qkombu
In this download it contains all files needed, And the map!
 
Last edited:
shouldnt this be Data/Actions/Scripts/Others/offlinetraining.lua ?

I could be wrong anyways good release! :)

yes it is haha xd

how will this work? you need to include the offline training functions?

ill add them soon

Edit: could not find anything in functions about offline training so i dont think you need to add it.
 
Last edited:
yes it is haha xd



ill add them soon

Edit: could not find anything in functions about offline training so i dont think you need to add it.
Because those functions aren't incluided in 8.6x lower versions. So this shouldn't be a script or release since 9.6+ versions already have offline training system included, you use an action script instead of all of this.
 
You need this 103-offline-training.lua in data/lib/

Code:
-- config, in percent of normal training with 2 trainers and player vocation mana regeneration [by food]
OfflineTraining_rates = {
[SKILL_CLUB] = 100,
[SKILL_SWORD] = 100,
[SKILL_AXE] = 100,
[SKILL_DISTANCE] = 100,
[SKILL_SHIELD] = 100,
[SKILL__MAGLEVEL] = 100
}
-- 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

and in data/globalevents/globalevents.xml
Code:
<globalevent name="offtrain_add_minutes" interval="60000" event="script" value="offtrain_addMinutes.lua"/>
and offtrain_addMinutes.lua in scripts .

Code:
    function onThink(interval) -- run it with interval 60 seconds
    for _, cid in pairs(getPlayersOnline()) do
    OfflineTraining_addTime(cid, 1)
    end
    return true
    end
 
Last edited:
You need this 103-offline-training.lua in data/lib/

Code:
-- config, in percent of normal training with 2 trainers and player vocation mana regeneration [by food]
OfflineTraining_rates = {
[SKILL_CLUB] = 100,
[SKILL_SWORD] = 100,
[SKILL_AXE] = 100,
[SKILL_DISTANCE] = 100,
[SKILL_SHIELD] = 100,
[SKILL__MAGLEVEL] = 100
}
-- 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

and in data/globalevents/globalevents.xml
Code:
<globalevent name="offtrain_add_minutes" interval="60000" event="script" value="offtrain_addMinutes.lua"/>
and offtrain_addMinutes.lua in scripts .

Code:
    function onThink(interval) -- run it with interval 60 seconds
    for _, cid in pairs(getPlayersOnline()) do
    OfflineTraining_addTime(cid, 1)
    end
    return true
    end
Thanks
 
I LOVE YOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!!!
Can this work on 0.4?
 
how dose it work do i get teleported on offline trainers or can i make my own map? with thise trainers?
 
got this error! help please
Code:
[21/09/2013 07:05:16] [Error - CreatureScript Interface]
[21/09/2013 07:05:16] data/creaturescripts/scripts/offtrain_logout.lua:onLogout
[21/09/2013 07:05:16] Description:
[21/09/2013 07:05:16] data/creaturescripts/scripts/offtrain_logout.lua:5: attempt to call global 'OfflineTraining_onStartTraining' (a nil value)
[21/09/2013 07:05:16] stack traceback:
[21/09/2013 07:05:16]    data/creaturescripts/scripts/offtrain_logout.lua:5: in function <data/creaturescripts/scripts/offtrain_logout.lua:2>
 
got this error! help please
Code:
[21/09/2013 07:05:16] [Error - CreatureScript Interface]
[21/09/2013 07:05:16] data/creaturescripts/scripts/offtrain_logout.lua:onLogout
[21/09/2013 07:05:16] Description:
[21/09/2013 07:05:16] data/creaturescripts/scripts/offtrain_logout.lua:5: attempt to call global 'OfflineTraining_onStartTraining' (a nil value)
[21/09/2013 07:05:16] stack traceback:
[21/09/2013 07:05:16]    data/creaturescripts/scripts/offtrain_logout.lua:5: in function <data/creaturescripts/scripts/offtrain_logout.lua:2>


I have same Problem!
 
You have to change OfflineTraining_onstartTraining to OfflineTraining_onStartTraining and OfflineTraining_onendTraining to OfflineTraining_onEndTraining (in 103-offline-training.lua).
 
@Summ getting this error when i try to login after do as you told
Code:
[21/09/2013 16:58:06] Admin has logged in.

[21/09/2013 16:58:06] [Error - CreatureScript Interface]
[21/09/2013 16:58:06] data/creaturescripts/scripts/offtrain_login.lua:onLogin
[21/09/2013 16:58:06] Description:
[21/09/2013 16:58:06] data/creaturescripts/scripts/offtrain_login.lua:12: attempt to call global 'OfflineTraining_onEndTraining' (a nil value)
[21/09/2013 16:58:06] stack traceback:
[21/09/2013 16:58:06]    data/creaturescripts/scripts/offtrain_login.lua:12: in function <data/creaturescripts/scripts/offtrain_login.lua:2>
[21/09/2013 16:58:06] Admin has logged out.
 
You have to change OfflineTraining_onstartTraining to OfflineTraining_onStartTraining and OfflineTraining_onendTraining to OfflineTraining_onEndTraining (in 103-offline-training.lua).


Now Works Perfect for me!
Ty
 
Hello i do not know if anyone else has posted this, If so please let me know and ill remove it.

EYyVggq.jpg


Data/Actions/Actions.xml
Code:
--Offline Training--
<action itemid="8834" event="script" value="other/offlinetraining.lua"/>
<action itemid="10353" event="script" value="other/offlinetraining.lua"/>
<action itemid="8626" event="script" value="other/offlinetraining.lua"/>
<action itemid="1444" event="script" value="other/offlinetraining.lua"/>
<action itemid="10349" event="script" value="other/offlinetraining.lua"/>

Data/Actions/Scripts/Others/offlinetraining.lua
Code:
function onUse(cid, item, fromPosition, itemEx, toPosition)
   if(item.itemid == 1444) then -- sword
     doCreatureSetStorage(cid, 62669, SKILL_SWORD)
   elseif(item.itemid == 10349) then -- axe
     doCreatureSetStorage(cid, 62669, SKILL_AXE)
   elseif(item.itemid == 8834) then -- mlvl
     doCreatureSetStorage(cid, 62669, SKILL__MAGLEVEL)
   elseif(item.itemid == 8626) then -- club
     doCreatureSetStorage(cid, 62669, SKILL_CLUB)
   elseif(item.itemid == 10353) then -- distannce
     doCreatureSetStorage(cid, 62669, SKILL_DISTANCE)
   end
   if item.actionid == 1000 then
   doRemoveCreature(cid)
end
   return true
end

-----------------------------------------------------------------------

Creature Scripts

Data/Creaturescripts/Creaturescripts.xml
Code:
<event type="login" name="offtrain_PlayerLogin" event="script" value="offtrain_login.lua"/>
<event type="logout" name="offtrain_PlayerLogout" event="script" value="offtrain_logout.lua"/>

Data/Creaturescripts/Scripts/offlinetrain_login.lua
Code:
-- 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

Data/Creaturescripts/Scripts/offlinetrain_logout.lua
Code:
-- 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

If anything you think is missing please post and post any errors.


How effective is the offline training? Does it apply the server's rates?
 
Back
Top