FANDOM


--
-- All functions relating to experience needed etc
-- 
 
local p = {}
local commas = require( 'Module:Addcommas' )
 
local XPAtLevel = mw.loadData( 'Module:Experience/data' )
 
--
-- Returns lowest needed XP to have required level
-- [[Template:XP]]
-- 
function p.xp_at_level ( frame )
    local level = tonumber( frame.args[1] )
 
    -- calling tonumber on a string returns nil
    if not level then
         return "You must pass numbers as arguments"
    end
 
    return XPAtLevel[level]
end
 
--
-- The maximum amount of experience you can have at a given level
-- [[Template:Max XP for level]]
--
function p.max_xp_at_level ( frame )
    local level = tonumber( frame.args[1] )
 
    -- calling tonumber on a string returns nil
    if not level then
         return "You must pass numbers as arguments"
    end
 
    if ( level <= 0 or level > 120 ) then
        return "Value must be in the range 1 - 120"
    -- Highest level is 120, highest XP is 200M
    end
 
    if ( level == 120 ) then
        return 200000000
    end
 
    -- Just in case
    level = math.floor(level)
 
    -- Return XP required for the *next* level minus 1
    local xp_at_next = XPAtLevel[ level + 1 ]
    return xp_at_next - 1
end
 
--
-- What level you have when at a given xp
-- [[Template:Level]]
--
function p.level_at_xp ( frame )
    local xp = frame.args[1]
 
    -- just in case
    if type( xp ) == 'string' then
         xp = commas._strip( xp )
         xp = tonumber( xp )
    end
 
    if ( xp < 0 or xp > 200000000 ) then
        return "Value must be in the range 0 - 200,000,000"
    end
 
    -- calling tonumber on a string returns nil
    if not xp then
         return "You must pass numbers as arguments"
    end
 
    local level = 0
    local index = 120
    while ( index > 0 and level == 0 ) do
        if ( XPAtLevel[index] <= xp ) then
            level = index
        else
            index = index - 1
        end
    end
 
    return level
end
 
 
--
-- Experience needed to obtain a level from a given amount of xp
-- If current xp is greater than target, returns 0
-- [[Template:XP to Level]]
--
function p.xp_to_level ( frame )
    local xp = frame.args[1]
    local target = tonumber( frame.args[2] )
 
    -- just in case
    if type( xp ) == 'string' then
         xp = commas._strip( xp )
         xp = tonumber( xp )
    end
 
    if ( xp < 0 or xp > 200000000 ) then
        return "XP value must be in the range 0 - 200,000,000"
    end
 
    if ( target < 2 or target > 120 ) then
        return "Level value must be in the range 2 - 120"
    end
 
    -- calling tonumber on a string returns nil
    if not xp or not target then
         return "You must pass numbers as arguments"
    end
 
    local target_xp = XPAtLevel[target]
 
    if ( xp >= target_xp ) then
        return 0
    else
        return target_xp - xp
    end
end
 
--
-- Experience between two levels; will always return absolute value
-- [[Template:XP level to Level]]
--
function p.level_to_level( frame )
    local level1 = tonumber( frame.args[1] )
    local level2 = tonumber( frame.args[2] )
 
    -- just in case
    if type( level1 ) == 'string' then
         level1 = commas._strip( level1 )
         level1 = tonumber( level1 )
    end
 
    if type( level2 ) == 'string' then
         level2 = commas._strip( level2 )
         level2 = tonumber( level2 )
    end
 
    if not level1 or not level2 then
         return "You must pass numbers as arguments"
    end
 
    local difference = XPAtLevel[level1] - XPAtLevel[level2]
    difference = math.abs( difference )
    return difference
end
 
return p

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.