1579091 109 Postado Setembro 12, 2012 Share Postado Setembro 12, 2012 (editado) Training Offline 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] - use skill and mlvl rate from config.lua - use vocations.xml config to: - - calculate magic level [food mana regen of vocation] - - calculate club/axe/sword/distance gain speed [attackSpeed of vocation] 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 Setembro 13, 2012 por GuizitoG Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/ Compartilhar em outros sites More sharing options...
Piabeta Kun 359 Postado Setembro 12, 2012 Share Postado Setembro 12, 2012 cara confuso demais pra intender e creio que está na sessão errada! Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1337657 Compartilhar em outros sites More sharing options...
1579091 109 Postado Setembro 12, 2012 Autor Share Postado Setembro 12, 2012 (editado) 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 Setembro 12, 2012 por Demonbholder Remover link de outro fórum Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1337665 Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Setembro 12, 2012 Share Postado Setembro 12, 2012 Vou mover para Sistemas, considerando que são vários códigos em diferentes pastas. Como esse sistema é da otland, seria interessante se você pedisse permissão antes de postar para evitar futuras denuncias. Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1337673 Compartilhar em outros sites More sharing options...
1579091 109 Postado Setembro 12, 2012 Autor Share Postado Setembro 12, 2012 Bom, ele me autorizou. Hehe Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1337743 Compartilhar em outros sites More sharing options...
Lolksky 17 Postado Setembro 12, 2012 Share Postado Setembro 12, 2012 Deixa eu ver se entendi, funciona em 8.60? '-' Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1337988 Compartilhar em outros sites More sharing options...
caotic 393 Postado Setembro 13, 2012 Share Postado Setembro 13, 2012 Já que foi considerado como sistema. Mudei o prefixo para sistema Att Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1338048 Compartilhar em outros sites More sharing options...
Skronos 3 Postado Setembro 13, 2012 Share Postado Setembro 13, 2012 (editado) 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 Setembro 13, 2012 por Skronos Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1338218 Compartilhar em outros sites More sharing options...
1579091 109 Postado Setembro 13, 2012 Autor Share Postado Setembro 13, 2012 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 https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1338292 Compartilhar em outros sites More sharing options...
Lolksky 17 Postado Setembro 13, 2012 Share Postado Setembro 13, 2012 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 https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1338301 Compartilhar em outros sites More sharing options...
1579091 109 Postado Setembro 13, 2012 Autor Share Postado Setembro 13, 2012 Se quiser dar Rep então )! Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1338302 Compartilhar em outros sites More sharing options...
Skronos 3 Postado Setembro 13, 2012 Share Postado Setembro 13, 2012 (editado) Muito bom Editado Setembro 27, 2012 por Skronos Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1338399 Compartilhar em outros sites More sharing options...
Fir3element 185 Postado Setembro 13, 2012 Share Postado Setembro 13, 2012 boa.. não cheguei a testar mas vindo do gesior deve pegar valeu por trazer Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1338405 Compartilhar em outros sites More sharing options...
Rodrigodias12 0 Postado Setembro 16, 2012 Share Postado Setembro 16, 2012 (editado) 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 Setembro 16, 2012 por Rodrigodias12 Link para o comentário https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1340177 Compartilhar em outros sites More sharing options...
1579091 109 Postado Setembro 16, 2012 Autor Share Postado Setembro 16, 2012 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 https://xtibia.com/forum/topic/194014-tfs-0496-and-some-older-offline-training-bar-barrinha-1200h-funcionando/#findComment-1340361 Compartilhar em outros sites More sharing options...
Posts Recomendados