Module:Wilderness agility calculator
Documentation for this module may be created at Module:Wilderness agility calculator/doc
local gePrice = require('Module:Exchange')._price
local yesNo = require('module:Yesno')
local coins = require('module:Coins')._amount
local addCommas = require('module:Addcommas')._add
local p = {}
local lapRanges = {{1, 15}, {16, 30}, {31, 60}, {61, 65536}}
local angler = gePrice('Blighted anglerfish')
angler = angler - math.floor(0.01 * angler)
local manta = gePrice('Blighted manta ray')
manta = manta - math.floor(0.01 * angler)
local kbwan = gePrice('Blighted karambwan')
kbwan = kbwan - math.floor(0.01 * kbwan)
local restore = gePrice('Blighted super restore(4)')
restore = restore - math.floor(0.01 * restore)
local steelBody = gePrice('Steel platebody')
steelBody = steelBody - math.floor(0.01 * steelBody)
local mithChain = gePrice('Mithril chainbody')
mithChain = mithChain - math.floor(0.01 * mithChain)
local mithLegs = gePrice('Mithril platelegs')
mithLegs = mithLegs - math.floor(0.01 * mithLegs)
local mithSkirt = gePrice('Mithril plateskirt')
mithSkirt = mithSkirt - math.floor(0.01 * mithSkirt)
local addyFull = gePrice('Adamant full helm')
addyFull = addyFull - math.floor(0.01 * addyFull)
local addyLegs = gePrice('Adamant platelegs')
addyLegs = addyLegs - math.floor(0.01 * addyLegs)
local addyBody = gePrice('Adamant platebody')
addyBody = addyBody - math.floor(0.01 * addyBody)
local runeChain = gePrice('Rune chainbody')
runeChain = runeChain - math.floor(0.01 * runeChain)
local runeKite = gePrice('Rune kiteshield')
runeKite = runeKite - math.floor(0.01 * runeKite)
local runeMed = gePrice('Rune med helm')
runeMed = runeMed - math.floor(0.01 * runeMed)
function lapGroupValue(lowerLap, sellNoted)
local sellNoted = yesNo(sellNoted)
local lapVal = 0
if lowerLap == 1 then
if sellNoted then
lapVal = lapVal + (8 * 4.5 * (angler + manta + kbwan) + 7 * 1.5 * restore) / 31
end
lapVal = lapVal + (2 * addyBody + 2 * runeMed + addyFull + addyLegs + mithChain + mithLegs + mithSkirt + steelBody) / 10
elseif lowerLap == 16 then
if sellNoted then
lapVal = lapVal + (8 * 8.5 * (angler + manta + kbwan) + 7 * 2.5 * restore) / 31
end
lapVal = lapVal + (addyFull + addyBody + addyLegs + mithChain + mithLegs + mithSkirt + runeChain + runeKite + runeMed) / 9
elseif lowerLap == 31 then
if sellNoted then
lapVal = lapVal + (8 * 13 * (angler + manta + kbwan) + 7 * 4.5 * restore) / 31
end
lapVal = lapVal + (2 * runeChain + 2 * runeKite + addyFull + addyBody + addyLegs + mithLegs + mithSkirt + runeMed) / 10
else
if sellNoted then
lapVal = lapVal + (8 * 17 * (angler + manta + kbwan) + 7 * 6 * restore) / 31
end
lapVal = lapVal + (6 * runeChain + 6 * runeKite + 2 * addyBody + 2 * runeMed + addyFull + addyLegs + mithLegs + mithSkirt) / 20
end
return lapVal
end
function getXp(laps)
local nonTicketXp = 571.4 * laps
if laps <= 10 then
return nonTicketXp + 200 * laps
elseif laps <= 50 then
return nonTicketXp + 210 * laps
elseif laps <= 100 then
return nonTicketXp + 220 * laps
else
return nonTicketXp + 230 * laps
end
end
function p.main(frame)
local args = frame.args
local laps = tonumber(args.laps or 80)
local sellNoted = yesNo(args.sellNoted or true)
return p.calc(laps, sellNoted)
end
function p.calc(laps, sellNoted)
local totalVal = -150000
for i, lapRange in ipairs(lapRanges) do
local lowerLap = lapRange[1]
local upperLap = lapRange[2]
local lapsInRange = upperLap - lowerLap + 1
if laps < lowerLap then
break
end
local groupVal = lapGroupValue(lowerLap, sellNoted)
if laps > upperLap then
totalVal = totalVal + groupVal * lapsInRange
else
totalVal = totalVal + groupVal * (laps - lowerLap + 1)
end
end
totalXp = addCommas(getXp(laps))
return string.format("Completing <b>%s</b> consecutive laps earns a profit of %s and <b>%s</b> experience (after tax, not including clues and un-noted supplies).", laps, coins(totalVal), totalXp)
end
return p