samuel157
/root
- Joined
- Mar 19, 2010
- Messages
- 518
- Solutions
- 3
- Reaction score
- 71
- Location
- São Paulo, Brazil
- GitHub
- Samuel10M
Does anyone have offline training TFS 0.3.6
XML:
--Offline Training--
<action itemid="8834" event="script" value="offlinetraining.lua"/>
<action itemid="10353" event="script" value="offlinetraining.lua"/>
<action itemid="8626" event="script" value="offlinetraining.lua"/>
<action itemid="1444" event="script" value="offlinetraining.lua"/>
<action itemid="10349" event="script" value="offlinetraining.lua"/>
LUA:
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
LUA:
function onLogout(cid)
-- Verifica se o jogador pode começar o treino offline
if OfflineTraining_canStartTraining(cid) then
-- Inicia o treino offline
OfflineTraining_turnOnTraining(cid)
-- Executa ações ao iniciar o treino offline (como salvar estado, registrar tempo de início, etc.)
OfflineTraining_onStartTraining(cid)
end
-- Define o tempo de logout do jogador, para calcular o tempo de treino offline
OfflineTraining_setLogoutTime(cid)
return true
end
LUA:
function onLogin(cid)
-- Inicializa o sistema de treino offline para o jogador
OfflineTraining_initialize(cid)
-- Verifica se o jogador estava treinando enquanto estava offline
if OfflineTraining_isTraining(cid) then
-- Desliga o treino offline
OfflineTraining_turnOffTraining(cid)
-- Adiciona habilidades treinadas, considerando o menor valor entre o tempo offline e o tempo de treino offline disponível
OfflineTraining_addTrainedSkills(cid, math.min(OfflineTraining_getTime(cid), OfflineTraining_getOfflineTime(cid)))
-- Atualiza o tempo de treino offline, subtraindo o tempo que o jogador esteve offline
OfflineTraining_setTime(cid, math.abs(OfflineTraining_getTime(cid) - OfflineTraining_getOfflineTime(cid)))
-- Ação final após o término do treino offline
OfflineTraining_onEndTraining(cid)
else
-- Se o jogador não estava treinando, aumenta o tempo de treino offline baseado no tempo que ele esteve offline
OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) + OfflineTraining_getOfflineTime(cid))
end
return true
end
LUA:
function onThink(interval) -- Executado a cada 60 segundos
local playersOnline = getPlayersOnline() -- Obtém todos os jogadores online
for _, cid in ipairs(playersOnline) do
OfflineTraining_addTime(cid, 1) -- Adiciona 1 minuto ao tempo de treinamento offline
end
return true
end
LUA:
-- Configuração das taxas de treinamento offline, em porcentagem do treinamento normal
OfflineTraining_rates = {
[SKILL_CLUB] = 100,
[SKILL_SWORD] = 100,
[SKILL_AXE] = 100,
[SKILL_DISTANCE] = 100,
[SKILL_SHIELD] = 100,
[SKILL__MAGLEVEL] = 100
}
-- Função que verifica se o jogador pode iniciar o treinamento offline
function OfflineTraining_canStartTraining(cid)
return getCreatureStorage(cid, 62669) > 0
end
-- Função executada ao iniciar o treinamento offline
function OfflineTraining_onStartTraining(cid)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você começou o treinamento offline.")
end
-- Função executada ao finalizar o treinamento offline
function OfflineTraining_onEndTraining(cid)
doCreatureSetStorage(cid, 62669, 0)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Seu treinamento offline foi finalizado.")
end
-- Função para adicionar habilidades treinadas durante o tempo offline (em minutos)
function OfflineTraining_addTrainedSkills(cid, trainTime)
local timeInSeconds = trainTime * 60
local vocInfo = getVocationInfo(getPlayerVocation(cid))
-- Adiciona o skill baseado no que está armazenado
local trainingSkill = getCreatureStorage(cid, 62669)
if trainingSkill == SKILL_SWORD then
doPlayerAddSkillTry(cid, SKILL_SWORD, ((timeInSeconds * 1000) / vocInfo["attackSpeed"]) * OfflineTraining_rates[SKILL_SWORD] / 100, true)
elseif trainingSkill == SKILL_AXE then
doPlayerAddSkillTry(cid, SKILL_AXE, ((timeInSeconds * 1000) / vocInfo["attackSpeed"]) * OfflineTraining_rates[SKILL_AXE] / 100, true)
elseif trainingSkill == SKILL__MAGLEVEL then
doPlayerAddSpentMana(cid, ((timeInSeconds / vocInfo["manaGainTicks"]) * vocInfo["manaGain"]) * OfflineTraining_rates[SKILL__MAGLEVEL] / 100, true)
elseif trainingSkill == SKILL_CLUB then
doPlayerAddSkillTry(cid, SKILL_CLUB, ((timeInSeconds * 1000) / vocInfo["attackSpeed"]) * OfflineTraining_rates[SKILL_CLUB] / 100, true)
elseif trainingSkill == SKILL_DISTANCE then
doPlayerAddSkillTry(cid, SKILL_DISTANCE, ((timeInSeconds * 1000) / vocInfo["attackSpeed"]) * OfflineTraining_rates[SKILL_DISTANCE] / 100, true)
end
-- Adiciona progresso no skill de escudo (shield)
doPlayerAddSkillTry(cid, SKILL_SHIELD, timeInSeconds * OfflineTraining_rates[SKILL_SHIELD] / 100, true)
end
-- Funções para manipular o tempo de treinamento offline
function OfflineTraining_getTime(cid)
return getCreatureStorage(cid, 62666)
end
function OfflineTraining_setTime(cid, newTime)
-- Define valores apenas entre 0 - 720 [12 horas]
doCreatureSetStorage(cid, 62666, math.max(0, math.min(newTime, 720)))
-- Força o servidor a enviar 'PlayerStats' (incluindo Offline Time)
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
-- Funções de inicialização
function OfflineTraining_initialize(cid)
if OfflineTraining_getTime(cid) == -1 then
OfflineTraining_setTime(cid, 720)
OfflineTraining_setLogoutTime(cid) -- Previne problemas com o primeiro login
end
end
function OfflineTraining_isTraining(cid)
return getCreatureStorage(cid, 62667) > 0
end
function OfflineTraining_turnOnTraining(cid)
doCreatureSetStorage(cid, 62667, 1)
OfflineTraining_onStartTraining(cid) -- Chama a função de início
end
function OfflineTraining_turnOffTraining(cid)
doCreatureSetStorage(cid, 62667, 0)
OfflineTraining_onEndTraining(cid) -- Chama a função de fim
end
function OfflineTraining_getOfflineTime(cid)
return math.floor((os.time() - getCreatureStorage(cid, 62668)) / 60) -- Calcula o tempo offline em minutos
end
function OfflineTraining_setLogoutTime(cid)
doCreatureSetStorage(cid, 62668, os.time())
end
-- Função chamada periodicamente (deve ser chamada a cada 60 segundos)
function onThink(interval)
for _, cid in pairs(getPlayersOnline()) do
if OfflineTraining_isTraining(cid) then
local trainingTime = OfflineTraining_getOfflineTime(cid) -- Obtém o tempo de treinamento offline
OfflineTraining_addTrainedSkills(cid, trainingTime) -- Adiciona habilidades treinadas
OfflineTraining_setLogoutTime(cid) -- Atualiza o horário de logout
end
end
return true
end
-- Função para iniciar o treinamento
function OfflineTraining_startTraining(cid)
if OfflineTraining_canStartTraining(cid) then
OfflineTraining_turnOnTraining(cid) -- Ativa o treinamento
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não pode iniciar o treinamento offline.")
end
end
Last edited: