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

Daily reward by Snavy TFS 1.5

tomaszek123

Member
Joined
May 29, 2014
Messages
71
Solutions
1
Reaction score
18
I am having this error while using below script

1672229726767.png
Lua:
---[ CUSTOM FUNCTIONS ]---
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.mod(s, 3600)/60)
    local seconds = math.floor(math.mod(s, 60))
    return (hours   > 0 and (hours   .. ' hours ')   or '') ..
           (minutes > 0 and (minutes .. ' minutes ') or '') ..
           (seconds > 0 and (seconds .. ' seconds ') or '')
end

---[ CONFIGURATION ]---
local config = {
    -- HEALTH BOOST
    HP_BOOST_TIME    = 10, -- 10 seconds
    HP_BOOST_PERCENT = 10, -- +10%
    HP_BOOST_STORAGE = 13450,

    -- MANA BOOST
    MP_BOOST_TIME    = 10, -- 10 seconds
    MP_BOOST_PERCENT = 10, -- +10%
    MP_BOOST_STORAGE = 13451,

    -- EXP_RATE
    EXPERIENCE_AMOUNT = 10,
    EXTRA_EXP_RATE    = 1.05, -- +5%
    EXTRA_EXP_STORAGE = 181233,
    EXTRA_EXP_TIME    = 60,

    STORAGE_LAST_USED = 181234,
    REWARD_TIME = 24 * 3600
}

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

local rewards = {}
rewards[REWARD_TYPE.ITEM]       = {2160, 10}
rewards[REWARD_TYPE.EXPERIENCE] = config.EXPERIENCE_AMOUNT -- want to add constant amount of xp to every player or modified?
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

---[ ACTION SCRIPT ]---
local act = Action()
function act.onUse(player, item, fromPosition, itemEx, toPosition)
    if player:getStorageValue(config.STORAGE_LAST_USED) > os.time() then
        player:sendTextMessage(MESSAGE_STATUS_SMALL, 'You can only use this chest every 24h!')
        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)

    -- +EXPERIENCE --
    if rewardType == REWARD_TYPE.EXPERIENCE then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You have received ' .. rewards[rewardType] .. ' exp.')
        player:addExperience(rewards[rewardType])
        return true
    end

    -- EXTRA EXP RATE --
    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

    -- ITEM --
    if rewardType == REWARD_TYPE.ITEM then
        local item = rewards[rewardType]
        player:addItem(item[1], item[2])
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You have found an item.')
        return true
    end

    -- EXTRA HP / MANA --
    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
act:id(2135) -- change this
act:register()

--------[ EVENTS ]--------
local ecb = EventCallback
ecb.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
ecb:register(1)

Thanks in advance
 
Seems like your "engine" is lacking function math.mod which I guess existed in an custom lib in other engine where you have this script from.
Try replace in line 10 and 11 , math.mod to math.fmod and see the results.

Here is similar already existing thread on OTland with same problem:
 
Back
Top