Ir para conteúdo

[Tfs 0,4] [9,6 E Alguns Mais Velhos] Treinamento Off-Line, Com Bar No Jogo


eduardo190696

Posts Recomendados

Treinamento offline, com barra no jogo

- Mostra o tempo que tem na barra de skill [tibia 9.6]

- Pode configurar as rates

- Usa vocation.xml para configurar:

- Calcula o ml [ o quanto o food aumenta da mana ]

- Calcula club/axe/sword/distance velocidade ganha [ attackspeed da vocação ]

 

Código testado em TFS 0,4, 9,6 (um dos mais recentes revisões).

Scripts Lua deve ser usado nas versões TFSes (0.3.6 - 0,4), Mais apenas na versão 9.6 que mostra o quanto tempo tem de treino, e tem as estatuas que se da "use" para treinar off.

 

 

Como se calcular skills / mlvl?

- Sword, axe, club, distance: ele usa multiplicador de config.lua, ele verificação attackSpeed ??da vocação jogador e 'atacar' o mais rápido que puder

 

- Shield: ele usa multiplicador de config.lua, ele adiciona um 'hit' por um segundo offline [como quando você treina com 2 Monks]

 

- magic Level: ele usa multiplicador de config.lua, acrescenta tanto 'mana gasto' [nível mag] como jogador poderia regenerar se ele comer alguma comida

 

No início do 'lib' você tem as configuração básica, aqui você pode reduzir / aumentar a habilidade / mlvl, 100 = 100% do normal [descrita acima]:

 

Lua 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
}

 

(abaixo de config são as funções que podem ser modificadas para se você quiser fazê-lo iniciar com outra ação, em seguida, "clique na estátua", exemplo: só começar o treinamento off o player se o player logou em alguma área)

 

Primeiro LUA scripts:

../data/lib/103-offline-training.lua

 

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

 

../data/actions/actions.xml

 

XML Code:

 <action itemid="18492" script="offtrain_statue.lua"/>
<action itemid="18491" script="offtrain_statue.lua"/>
<action itemid="18490" script="offtrain_statue.lua"/>
<action itemid="18489" script="offtrain_statue.lua"/>
<action itemid="18488" script="offtrain_statue.lua"/>

 

../data/actions/scripts/offtrain_statue.lua

 

-- example 'action' when you click on statue:
function onUse(cid, item, fromPosition, itemEx, toPosition)
if(item.itemid == 18488) then -- sword
doCreatureSetStorage(cid, 62669, SKILL_SWORD)
elseif(item.itemid == 18489) then -- axe
doCreatureSetStorage(cid, 62669, SKILL_AXE)
elseif(item.itemid == 18492) then -- mlvl
doCreatureSetStorage(cid, 62669, SKILL__MAGLEVEL)
elseif(item.itemid == 18490) then -- club
doCreatureSetStorage(cid, 62669, SKILL_CLUB)
elseif(item.itemid == 18491) then -- distannce
doCreatureSetStorage(cid, 62669, SKILL_DISTANCE)
end
-- we remove player, so it will execute onLogout(cid) function and save time of training start
doRemoveCreature(cid)
end

 

../data/creaturescripts/creaturescripts.xml

 

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/offtrain_login.lua

 

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/offtrain_logout.lua

 

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

 

../data/globalevents/globalevents.xml

 

XML Code:

<globalevent name="offtrain_add_minutes" interval="60000" event="script" value="offtrain_addMinutes.lua"/>

 

Se você usa o TFS antigo troque os interval 60000 para 60 [60 seconds].

 

../data/globalevents/scripts/offtrain_addMinutes.lua

 

Lua Code:

function onThink(interval) -- run it with interval 60 seconds
for _, cid in pairs(getPlayersOnline()) do
OfflineTraining_addTime(cid, 1)
end
return true
end

 

C++ code for TFS 0.4, 9.6 Versão para mostrar o time left 'bar' no client.

 

Em protocolgame.cpp

Procure por:

msg->put<uint16_t>(720);[/code

E Troque por isso

[code]
// offline training minutes
std::string strValue;
if(!player->getStorage("62666", strValue))
{
// no storage
msg->put<uint16_t>(0);
}
else
{
msg->put<uint16_t>((uint16_t) atoi(strValue.c_str()));
}

 

Ela vai mostrar o valor de armazenamento '62666 'no' bar '. 0 = 0:00, 12:00 720 = [12 horas, Full] - tempo em minutos.

 

SCRIPT FEITO POR Gesior.pl E RETIRADO DO FÓRUM OTLAND.

 

@Edit

Tenho lido boatos que pega em ot 8.6 só que não pode adicionar a parte do bar, não testei

Editado por eduardobean
Link para o comentário
Compartilhar em outros sites

muito bom, ta na hora de aparecer o trinamento offline nos otservers ( porem acho que a maioria trocaria 100% pelos atuais treiners pois dezenas de jogadores treinam e o ot acaba ficando mais popular por ter mais pessoas online)

Link para o comentário
Compartilhar em outros sites

Cara presta atenção já foi postado um post desse aki no xtibia:

Se vc n percebeu, ja fiz um post desse... mais atençao:

http://www.xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/page__fromsearch__1

 

Reportado!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...