Ir para conteúdo

[Tfs 0.4][9.6 And Some Older] Offline Training - Bar (Barrinha 12:00H) Funcionando


1579091

Posts Recomendados

Training Offline

mdr.gif

 

tibia-summer-update-2012-offline-training-training-statue.jpg

 

Bom galera, hoje venho vos trazer um script que saiu no tão famoso e fodastico Offline Training.

 

Créditos:

* Gesior.pl [otland]

 

 

 

Bom, primeiro tenho que dizer, que este bar, é a barra que mostra o tempo de treino, apenas nos clientes 8.6 por isso em diversas partes você irá encontrar algo como bar, que será respectivamente algo a ver com essa barra das 12 horas.

 

Pelo que li na otland está escrito isso:

 

Offline training, with bar in-game

- show time left on 'bar' [9.6 client] smile.gif

- use skill and mlvl rate from config.lua biggrin.gif

- use vocations.xml config to:

- - calculate magic level [food mana regen of vocation] happy.gif

- - calculate club/axe/sword/distance gain speed [attackSpeed of vocation] happy.gif

 

Code tested on TFS 0.4, 9.6 (one of newest revisions). LUA scripts should work on most of TFSes (0.3.6 - 0.4), but only on 9.6 is 'bar' that show time left and RL tibia items to 'click' to select type of training. Script is designed to make it possible to start training other way then clicking on 'statue'.

 

How does it calculate skills/mlvl?

- sword, axe, club, distance: it uses multiplier from config.lua, it check attackSpeed of player vocation and 'attack' as fast he can

- shield: it uses multiplier from config.lua, it add one 'hit' per one offline second [like when you train with 2 Monks]

- magic level: it uses multiplier from config.lua, it adds as much 'mana spent' [mag level] as player could regenerate if he eat some food

 

Traduzindo:

 

 

Treinamento offline, com barra no jogo (barrinha 12:00)

- Mostra as horas de treino a direita no 'bar' (cliente 9.6)

- Usar a habilidade e velocidade de mlvl config.lua

- Configure o vocations.xml para:

* Calcular o nivel da magia [comida, mana, regeneração da vocação]

* Calcular club, axe, sword, speed distance, [attackspeed da vocação]

 

Código testado em TFS 0.4 Versão 9.60 (uma das mais recentes versoes). Script lua deve trabalhar em TFSes (0.3.5 - 0.4), mas apenas em 9.6 é o 'bar', que mostra o tempo de treino offline. Script é projetado para torná-lo possível iniciar outro treinamento depois clicando na estátua.

 

Como ele calcula as habilidades?

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

- Escudo: Ele usa o mutiplicador do config.lua, ele adiciona um 'hit' por um segundo offline (como quando você treina com 2 monks).

- Nivel de magia: Ele usa o multiplicador do config.lua acrescenta tanto 'mana gasto' [nivel ml] como jogador pode regenerar se ele comer alguma comida.

 

 

 

No início do 'lib' você tem 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 configuração são funções que podem ser modificadas para se você quiser fazê-lo iniciar com outra ação, em seguida, "clique na estátua", exemplo: se o jogador início trainging sair em alguma área)

 

First LUA scripts:

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

 

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

}

 

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

 

Lua Code:

 

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

 

 

Caso versões antigas, trocar o intervalo pra 60

 

../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ódigo C++ para TFS 0.4, versão 9.60 pra mostrar o tempo do treino na barrinha la.

 

In file protocolgame.cpp

Find:

 

C Code:

 

 

msg->put<uint16_t>(720);

 

 

 

e substituir por:

 

C 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()));

}

 

Isso irá mostrar o valor (storage: 62666) no bar > 0 = 0:00, 720 = 12:00 [12 horas tempo total] - em minutos.

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

Bom, tópico alterado, se quiser o lugar de onde peguei o script: removido

 

Caso eu esteja na sessão errada, me movam por favor!

Editado por Demonbholder
Remover link de outro fórum
Link para o comentário
Compartilhar em outros sites

Onde eu coloco isso:

 

 

 

msg->put<uint16_t>(720);

 

 

 

e substituir por:

 

C 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()));

}

Isso irá mostrar o valor (storage: 62666) no bar > 0 = 0:00, 720 = 12:00 [12 horas tempo total] - em minutos.

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

Skronos@

 

In file protocolgame.cpp

 

No arquivo protocolgame.cpp

 

@Lolksky, não fiz o teste 8.6 provavelmente não funcionará, sem contar que o 'bar' (a barra das 12hras) não existe em versões menores que 8.6... Testado em 9.6!

Link para o comentário
Compartilhar em outros sites

Skronos@

 

In file protocolgame.cpp

 

No arquivoprotocolgame.cpp

 

@Lolksky, não fiz o teste 8.6 provavelmente não funcionará, sem contar que o 'bar' (a barra das 12hras) não existe em versões menores que 8.6... Testado em 9.6!

 

eu testei aqui, funcionou normal =P

só não coloquei essas parte do "bar"

Link para o comentário
Compartilhar em outros sites

Só não entendi a parte do c++ aonde que fica isso ? funcionou tudo menos a parte da barrinha que eu não sei esse protocolgame.ccp aonde que fica

estou usando a versão 9.60, e não tem como por as statua só para p.a usar? free ta usando as statua .. explica ae a parte do protocolgame.ccp vlw !

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

Isso fica na sourcers do deu otserv, essas sourcers são utilizadas para compilar o executavel do ot. Você pode aprender mais sobre como compilar nesses links abaixo:

http://www.xtibia.co...ando-um-otserv/

http://www.xtibia.co...ilar-um-otserv/

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...