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.
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)