• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

RevScripts when I spend a lot of time training afk debug when I soon

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