Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Skill_Trainer_%28Magic%29.gifSkill_Trainer_%28Distance%29.gifSkill_Trainer_%28Sword%29.gifSkill_Trainer_%28Axe%29.gifSkill_Trainer_%28Club%29.gif

Aproveitem!!!

aee galera vi muita gente querendo esse script e muitos ots 9.6 sem isso e resolvi postar...

- Igual do Global com bar in game.

- Utiliza os ML e Skill rate do config.lua

- Usa o vocations.xml para calcular Attack Speed, Danos etc ...

O script baseia-se onde voce clica na estátua e começa treinar offline (não sou mapper, se alguem quiser faça o mapa que eu posto aqui).

FUNCIONA SOMENTE EM TFS 0.4

Como é feito o calculo de Skills/ML?

- sword, axe, club, distance: usa as rates do config.lua e o attackspeed no vocations.xml

- shield: usa as rates do config.lua e os hits por segundo.

- magic: rates do config.lua e 'mana spent' que é o regen quando come algum food.

Vamos lá...

Crie o arquivo 103 offline-training.lua no diretório citado ../data/lib/103-offline-training.lua

  Citar

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

  Citar

<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

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

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

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

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

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

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

  Citar

function onThink(interval) -- run it with interval 60 seconds

for _, cid in pairs(getPlayersOnline()) do

OfflineTraining_addTime(cid, 1)

end

return true

end

Para ficar perfeitamente igual ao do Global com o BAR vai ser necessário um código C++.

No protocolgame.cpp

Procure

  Citar
msg->put<uint16_t>(720);

E troque por:

  Citar
// 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()));

}

Com o bar, irá mostrar para o Player, o tempo que ele treinou e quantos skills subiu.

  • Respostas 18
  • Visualizações 4.8k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • eu já tinha visto no outro fórum mais não tinha entendido nada tava meio confuso rs. Parabéns war!

Postado

Que show mano, parabéns :D

De boua na lagoa ? *-*



Entrada ao Tibia King:27/05/2012 (02:14)

Visitante
Este tópico está impedido de receber novos posts.

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo