• 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 Reset System by table

jel

Member
Joined
Mar 22, 2014
Messages
302
Reaction score
12
hello, could someone pass this storage reset script to the database table?

distro canary

Lua:
local resetSys = TalkAction("!reset")

local config = {
    storageResets = 731500,
    backToLevel = 8,
    redskull = true, -- need to be without redskull to reset?
    battle = true, -- need to be without battle to reset?
    pz = true, -- need to be in protect zone to reset?
    defaultGainMaxHealth = 0.02, -- If the stage don't have gainMaxHealth, use this value
    defaultGainMaxMana = 0.02, -- If the stage don't have gainMaxMana, use this value
    stages = {
        --[[ You can extra properties to each stage
            Example:
                {..., gainMaxHealth = 0.25 gainMaxMana = 0.25 }
        ]]--
        {resets = 4, level = 350, premium = 350},
        {resets = 9, level = 450, premium = 450},
        {resets = 14, level = 500, premium = 500},
        {resets = 19, level = 550, premium = 550},
        {resets = 24, level = 600, premium = 600},
        {resets = 29, level = 650, premium = 650},
        {resets = 34, level = 700, premium = 700},
        {resets = 39, level = 750, premium = 750},
        {resets = 44, level = 800, premium = 800},
        {resets = 49, level = 820, premium = 820},
        {resets = 54, level = 850, premium = 850},
        {resets = 59, level = 870, premium = 870},
        {resets = 64, level = 900, premium = 900},
        {resets = 69, level = 920, premium = 920},
        {resets = 74, level = 950, premium = 950},
        {resets = 79, level = 970, premium = 970},
        {resets = 84, level = 1000, premium = 1000},
        {resets = 89, level = 1100, premium = 1100},
        {resets = 94, level = 1500, premium = 1500},
        {resets = math.huge, level = 2000, premium = 2000}
    }
}

local function getExperienceForLevel(lv)
    lv = lv - 1
    return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3
end

function resetSys.onSay(player, words, param)
    if config.redskull and player:getSkull() == 4 then
        player:sendCancelMessage("You need to be without red skull to reset.")
        return false
    elseif config.pz and not getTilePzInfo(player:getPosition()) then
        player:sendCancelMessage("You need to be in protection zone to reset.")
        return false
    elseif config.battle and player:getCondition(CONDITION_INFIGHT) then
        player:sendCancelMessage("You need to be without battle to reset.")
        return false
    end

    local playerResets = math.max(0, player:getStorageValue(config.storageResets))
    local stage = nil
    for _, _stage in pairs(config.stages) do
        if playerResets <= _stage.resets then
            stage = _stage
            break
        end
    end

    if not stage then
        print("[Warning - ResetSystem::onSay] Stage not found for player: " .. player:getName())
        return false
    end

    local resetLevel = player:isVip() and stage.premium or stage.level
    local playerLevel = player:getLevel()
    if playerLevel < resetLevel then
        player:sendCancelMessage("You need level " .. resetLevel .. " or more to reset.")
        return false
    end

    playerResets = playerResets + 1
    player:setStorageValue(config.storageResets, playerResets)
    player:removeExperience(getExperienceForLevel(playerLevel) - getExperienceForLevel(config.backToLevel))
    local maxHealth = player:getMaxHealth()
    local maxMana = player:getMaxMana()
    local newMaxHealth = 0
    local newMaxMana = 0
    if stage.gainMaxHealth then
        newMaxHealth = maxHealth + math.ceil(maxHealth * stage.gainMaxHealth)
    else
        newMaxHealth = maxHealth + math.ceil(maxHealth * config.defaultGainMaxHealth)
    end

    if stage.gainMaxMana then
        newMaxMana = maxMana + math.ceil(maxMana * stage.gainMaxMana)
    else
        newMaxMana = maxMana + math.ceil(maxMana * config.defaultGainMaxMana)
    end

    player:setMaxHealth(newMaxHealth)
    player:setMaxMana(newMaxMana)
    player:addHealth(newMaxHealth)
    player:addMana(newMaxMana)
    player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED)
    player:sendTextMessage(MESSAGE_INFO_DESCR, "Now you have " .. playerResets .. " " .. (playerResets == 1 and "reset" or "resets") .. ".")
    return false
end

resetSys:register()
 
Back
Top