Module:Sandbox/User:Microbrews/Wilderness agility calculator
Module documentation
This documentation is transcluded from Template:Module sandbox/doc. [edit] [history] [purge]
Module:Sandbox/User:Microbrews/Wilderness agility calculator requires Module:Addcommas.
Module:Sandbox/User:Microbrews/Wilderness agility calculator requires Module:Coins.
Module:Sandbox/User:Microbrews/Wilderness agility calculator requires Module:Exchange.
Module:Sandbox/User:Microbrews/Wilderness agility calculator requires Module:Yesno.
This module is a sandbox for Microbrews. It can be used to test changes to existing modules, prototype new modules, or just experimenting with lua features.
Invocations of this sandbox should be kept in userspace; if the module is intended for use in other namespaces, it should be moved out of the sandbox into a normal module and template.
This default documentation can be overridden by creating the /doc subpage of this module, as normal.
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