samuel157
/root
- Joined
- Mar 19, 2010
- Messages
- 518
- Solutions
- 3
- Reaction score
- 71
- Location
- São Paulo, Brazil
- GitHub
- Samuel10M
LUA:
-- Configuração das taxas de treino offline, em porcentagem do treino normal
OfflineTraining_rates = {
[SKILL_CLUB] = 1000, -- Clava
[SKILL_SWORD] = 1000, -- Espada
[SKILL_AXE] = 1000, -- Machado
[SKILL_DISTANCE] = 1000, -- Distância
[SKILL_SHIELD] = 1000, -- Escudo
[SKILL__MAGLEVEL] = 1000 -- Nível Mágico, taxa aumentada para treino rápido
}
-- Função para verificar se o jogador pode iniciar o treino offline
function OfflineTraining_canStartTraining(cid)
return getCreatureStorage(cid, 62669) > 0
end
-- Função chamada ao iniciar o treino offline
function OfflineTraining_onStartTraining(cid)
-- Esta função pode ser útil futuramente (notificação ao jogador, etc.)
end
-- Função chamada ao terminar o treino offline
function OfflineTraining_onEndTraining(cid)
doCreatureSetStorage(cid, 62669, 0)
end
-- Função para adicionar as habilidades treinadas de acordo com o tempo offline
function OfflineTraining_addTrainedSkills(cid, trainTime)
local timeInSeconds = trainTime -- Tempo de treino em segundos
local vocInfo = getVocationInfo(getPlayerVocation(cid)) -- Informações da vocação do jogador
-- Verifica qual skill está sendo treinado (armazenado no storage)
local skillStorage = getCreatureStorage(cid, 62669)
-- Adiciona tentativas de treino para a skill específica
if skillStorage == SKILL_SWORD then
doPlayerAddSkillTry(cid, SKILL_SWORD, timeInSeconds * (OfflineTraining_rates[SKILL_SWORD] / 100))
elseif skillStorage == SKILL_AXE then
doPlayerAddSkillTry(cid, SKILL_AXE, timeInSeconds * (OfflineTraining_rates[SKILL_AXE] / 100))
elseif skillStorage == SKILL_CLUB then
doPlayerAddSkillTry(cid, SKILL_CLUB, timeInSeconds * (OfflineTraining_rates[SKILL_CLUB] / 100))
elseif skillStorage == SKILL_DISTANCE then
doPlayerAddSkillTry(cid, SKILL_DISTANCE, timeInSeconds * (OfflineTraining_rates[SKILL_DISTANCE] / 100))
elseif skillStorage == SKILL__MAGLEVEL then
-- Treino acelerado de magia
doPlayerAddSpentMana(cid, timeInSeconds * 1000)
end
-- Treina sempre o escudo (shield) junto
doPlayerAddSkillTry(cid, SKILL_SHIELD, timeInSeconds * (OfflineTraining_rates[SKILL_SHIELD] / 100))
end
-- Funções para manipular o tempo de treino offline
function OfflineTraining_getTime(cid)
return getCreatureStorage(cid, 62666)
end
function OfflineTraining_setTime(cid, newTime)
-- Permite tempo de treino infinito
doCreatureSetStorage(cid, 62666, math.max(0, newTime))
-- Força o servidor a enviar as atualizações de status do jogador
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 auxiliares para o sistema de treino offline
function OfflineTraining_initialize(cid)
if OfflineTraining_getTime(cid) == -1 then
OfflineTraining_setTime(cid, 0) -- Inicia com 0 minutos
OfflineTraining_setLogoutTime(cid) -- Previne problemas no primeiro login
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))) -- Calcula o tempo offline em segundos
end
function OfflineTraining_setLogoutTime(cid)
return doCreatureSetStorage(cid, 62668, os.time())
end
-- Eventos ao logar e deslogar
function onLogin(cid)
-- Inicializa o sistema de treino offline para o jogador
OfflineTraining_initialize(cid)
-- Verifica se o jogador estava treinando offline
if OfflineTraining_isTraining(cid) then
-- Desativa o treino offline
OfflineTraining_turnOffTraining(cid)
-- Adiciona habilidades treinadas
OfflineTraining_addTrainedSkills(cid, math.min(OfflineTraining_getTime(cid), OfflineTraining_getOfflineTime(cid)))
-- Atualiza o tempo restante de treino
OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) - OfflineTraining_getOfflineTime(cid))
-- Ação após finalizar o treino
OfflineTraining_onEndTraining(cid)
else
-- Aumenta o tempo de treino baseado no tempo offline
OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) + OfflineTraining_getOfflineTime(cid))
end
return true
end
LUA:
function onLogout(cid)
-- Verifica se o jogador pode iniciar o treino offline
if OfflineTraining_canStartTraining(cid) then
OfflineTraining_turnOnTraining(cid)
OfflineTraining_onStartTraining(cid)
end
-- Define o tempo de logout
OfflineTraining_setLogoutTime(cid)
return true
end
LUA:
-- Eventos ao logar e deslogar
function onLogin(cid)
-- Inicializa o sistema de treino offline para o jogador
OfflineTraining_initialize(cid)
-- Verifica se o jogador estava treinando offline
if OfflineTraining_isTraining(cid) then
-- Desativa o treino offline
OfflineTraining_turnOffTraining(cid)
-- Adiciona habilidades treinadas
OfflineTraining_addTrainedSkills(cid, math.min(OfflineTraining_getTime(cid), OfflineTraining_getOfflineTime(cid)))
-- Atualiza o tempo restante de treino
OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) - OfflineTraining_getOfflineTime(cid))
-- Ação após finalizar o treino
OfflineTraining_onEndTraining(cid)
else
-- Aumenta o tempo de treino baseado no tempo offline
OfflineTraining_setTime(cid, OfflineTraining_getTime(cid) + OfflineTraining_getOfflineTime(cid))
end
return true
end
LUA:
function onThink(interval) -- run it with interval 60 seconds
for _, cid in pairs(getPlayersOnline()) do
OfflineTraining_addTime(cid, 1)
end
return true
end
XML:
<globalevent name="offtrain_add_minutes" interval="86400" event="script" value="offtrain_addMinutes.lua"/>
Code:
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
XML:
<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"/>