• 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!

Edit Snavy box script.

OTcreator

Active Member
Joined
Feb 14, 2022
Messages
425
Solutions
1
Reaction score
44
Hello!
I need to edit this script but I have huge problems with it.

1.) rewards[REWARD_TYPE.ITEM] = {2160, 1}
Here the crate gives only one reward.
I would like it to randomly depending on the chance there are five here for example.
2160, 1 - 5% chance
2160,5 - 20% chance
2160,20 - 50% chance, etc.

2.) In addition, add bost per hour: speed, critical hit.

Lua:
local function getTableLength(t)
    local count = 0
    for k, v in pairs(t) do count = count + 1 end
    return count
end

local function secondsToReadable(s)
    local hours   = math.floor(s / 3600)
    local minutes = math.floor(math.fmod(s, 3600)/60)
    local seconds = math.floor(math.fmod(s, 60))
    return (hours   > 0 and (hours   .. ' hours ')   or '') ..
           (minutes > 0 and (minutes .. ' minutes ') or '') ..
           (seconds > 0 and (seconds .. ' seconds ') or '')
end

local config = {

    HP_BOOST_TIME    = 3600, -- seconds
    HP_BOOST_PERCENT = 15, -- +15%
    HP_BOOST_STORAGE = 45392,

    MP_BOOST_TIME    = 3600, -- seconds
    MP_BOOST_PERCENT = 15, -- +15%
    MP_BOOST_STORAGE = 45393,

    EXTRA_EXP_RATE    = 1.05, -- +5%
    EXTRA_EXP_STORAGE = 45394,
    EXTRA_EXP_TIME    = 1800,

    STORAGE_LAST_USED = 45395,
    REWARD_TIME = 24 * 3600
}

local REWARD_TYPE = {
    ITEM         = 1,
    ITEM_TWO   = 2,
    EXTRA_HP     = 3,
    EXTRA_MP     = 4,
    EXP_RATE     = 5
}

local rewards = {}
rewards[REWARD_TYPE.ITEM] = {2160, 1}
rewards[REWARD_TYPE.ITEM_TWO] = {2268, 10}
rewards[REWARD_TYPE.EXTRA_HP] = Condition(CONDITION_ATTRIBUTES)
rewards[REWARD_TYPE.EXTRA_HP]:setParameter(CONDITION_PARAM_SUBID, 1234)
rewards[REWARD_TYPE.EXTRA_HP]:setParameter(CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 100 + config.HP_BOOST_PERCENT)
rewards[REWARD_TYPE.EXTRA_HP]:setParameter(CONDITION_PARAM_TICKS, config.HP_BOOST_TIME * 1000)

rewards[REWARD_TYPE.EXTRA_MP] = Condition(CONDITION_ATTRIBUTES)
rewards[REWARD_TYPE.EXTRA_HP]:setParameter(CONDITION_PARAM_SUBID, 1235)
rewards[REWARD_TYPE.EXTRA_MP]:setParameter(CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT, 100 + config.MP_BOOST_PERCENT)
rewards[REWARD_TYPE.EXTRA_MP]:setParameter(CONDITION_PARAM_TICKS, config.MP_BOOST_TIME * 1000)

rewards[REWARD_TYPE.EXP_RATE] = config.EXTRA_EXP_RATE

local ac = Action()
function ac.onUse(player, item, fromPosition, itemEx, toPosition)
    if player:getLevel() < 20 then
        player:sendTextMessage(MESSAGE_STATUS_SMALL, 'You must be level 20 in order to use this chest.')
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        return true
    end

    local cur_time, cur_storage = os.time(), player:getStorageValue(45395)
    if player:getStorageValue(config.STORAGE_LAST_USED) > os.time() then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Today you have already collected the reward.\nYou can obtain this reward again in ' .. os.date('!%Hh %Mm %Ss', cur_storage - cur_time) .. '.')
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        return true
    end

    local rewardType = math.random(1, getTableLength(REWARD_TYPE))
    if not rewards[rewardType] then
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'An error has occured. Contact admin.')
        print('[Warning - DailyRewardChest] Unknown reward. Type ('.. rewardType ..')')
        return true
    end

    player:setStorageValue(config.STORAGE_LAST_USED, os.time() + config.REWARD_TIME)
    player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)

    if rewardType == REWARD_TYPE.EXP_RATE then
        player:setStorageValue(config.EXTRA_EXP_STORAGE, os.time() + config.EXTRA_EXP_TIME)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE,
            'You have received extra exp rate of +'
                .. (config.EXTRA_EXP_RATE * 100) - 100
                .. '% for '
                .. secondsToReadable(config.EXTRA_EXP_TIME)..'.'
            )
        return true
    end

    if rewardType == REWARD_TYPE.ITEM then
        local item = rewards[rewardType]
        player:addItem(item[1], item[2])
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You have found a crystal coin.')
        return true
    end
    
    if rewardType == REWARD_TYPE.ITEM_TWO then
        local item = rewards[rewardType]
        player:addItem(item[1], item[2])
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You have found a sudden death rune.')
        return true
    end

    if rewardType == REWARD_TYPE.EXTRA_HP then
        player:addCondition(rewards[rewardType])
        player:sendTextMessage(
            MESSAGE_EVENT_ADVANCE,
            'You have received +'.. config.HP_BOOST_PERCENT ..'% health boost for '
            .. secondsToReadable(config.HP_BOOST_TIME) ..'.'
        )
        return true
    end

    if rewardType == REWARD_TYPE.EXTRA_MP then
        player:addCondition(rewards[rewardType])
        player:sendTextMessage(
            MESSAGE_EVENT_ADVANCE,
            'You have received +'.. config.MP_BOOST_PERCENT ..'% mana boost for '
            .. secondsToReadable(config.MP_BOOST_TIME)..'.'
        )
    end
    return true
end
ac:uid(26083)
ac:register()


local ec = EventCallback
ec.onGainExperience = function(self, source, exp, rawExp)
    if not source or source:isPlayer() then
        return exp
    end

    if self:getStorageValue(config.EXTRA_EXP_STORAGE) < os.time() then
        return exp
    end

    exp = exp * config.EXTRA_EXP_RATE
    return exp
end
ec:register(true)
 
Back
Top