Module:Training manual calculator
Module documentation
This documentation is transcluded from Template:No documentation/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:Training manual calculator/doc. [edit]
Module:Training manual calculator's function main is invoked by Calculator:Training manuals.
Module:Training manual calculator requires Module:Addcommas.
Module:Training manual calculator requires Module:Experience.
Module:Training manual calculator requires Module:Paramtest.
Module:Training manual calculator requires Module:SCP.
local p = {}
local commas = require('Module:Addcommas')._add
local paramTest = require('Module:Paramtest')
local scp = require('Module:SCP')._main
local xpAtLevel = require('Module:Experience').xp_at_level_unr
local levelAtXp = require('Module:Experience').level_at_xp_unr
function trainingManualFormula(levelInput)
if(levelInput >= 72) then
return math.floor((5/4) * levelInput * 25)
end
return math.floor((5/4) * ((math.pow(levelInput, 2) * (1/4)) + (7 * levelInput)))
end
function p._main(args)
local goalSkill = args.skill
local currentXP = {
['Attack'] = paramTest.default_to(tonumber(args.currentAttackXP), 0),
['Defence'] = paramTest.default_to(tonumber(args.currentDefenceXP), 0),
['Strength'] = paramTest.default_to(tonumber(args.currentStrengthXP), 0),
['Hitpoints'] = paramTest.default_to(tonumber(args.currentHitpoints), 0),
}
local goalLevel = math.min(paramTest.default_to(tonumber(args.goalLevel), 1), 126)
local goalMaxXP = tonumber(args.goalLevel) == 127 and true or false
local currentLevel = levelAtXp({ args = { currentXP[goalSkill] } })
if(goalLevel <= currentLevel) then
return error('Your current level (' .. currentLevel .. ') is at or above your goal level')
end
local manualCount = 0
local xpIter = currentXP[goalSkill]
for i = currentLevel, goalLevel - 1, 1 do
local manualXPAtLevel = trainingManualFormula(math.min(i, 99))
local xpToNextlevel = xpAtLevel({ args = { i + 1 } }) - xpIter
local manualsToLevel = math.ceil(xpToNextlevel / manualXPAtLevel)
manualCount = manualCount + manualsToLevel
xpIter = xpIter + (manualsToLevel * manualsToLevel)
end
local ret = 'It takes ' .. commas(manualCount) .. ' [[training manual]]s to level ' .. scp(goalSkill, nil, true) .. ' from level ' .. currentLevel .. ' (' .. commas(currentXP[goalSkill]) .. 'xp) to level ' .. goalLevel .. ' (' .. commas(xpAtLevel({ args = { goalLevel } })) .. 'xp).'
if(goalMaxXP) then
local manualXPAtLevel = trainingManualFormula(99)
local xpToNextlevel = 200000000 - xpIter
local manualsToLevel = math.ceil(xpToNextlevel / manualXPAtLevel)
manualCount = manualCount + manualsToLevel
ret = ret .. '<br/>Virtual level 127 does not exist, but to reach 200 million experience, it will require ' .. commas(manualCount) .. ' [[training manual]]s, ' .. commas(manualsToLevel) .. ' more after reaching 126.'
end
return ret
end
function p.main(frame)
local args = frame.args
return p._main(args)
end
return p