Module:Calculator/ETA: Difference between revisions
From Melvor Idle
m (Use local functions) |
m (Replace Shared module with Number module) |
||
Line 2: | Line 2: | ||
local MEXP = require('Module:Experience') | local MEXP = require('Module:Experience') | ||
local | local number = require('Module:Number') | ||
local function formatTime(timeInHundredths) | local function formatTime(timeInHundredths) | ||
Line 38: | Line 38: | ||
:addClass("wikitable sticky-header text-align-right align-left-1") | :addClass("wikitable sticky-header text-align-right align-left-1") | ||
addTableRow(tbl, "Current Experience", | addTableRow(tbl, "Current Experience", number.formatnum(currentExp)) | ||
addTableRow(tbl, "Target Level", targetLvl) | addTableRow(tbl, "Target Level", targetLvl) | ||
addTableRow(tbl, "Target Experience", | addTableRow(tbl, "Target Experience", number.formatnum(targetExp)) | ||
addTableRow(tbl, "Experience Remaining", | addTableRow(tbl, "Experience Remaining", number.formatnum(expRemaining)) | ||
addTableRow(tbl, "Actions Left", | addTableRow(tbl, "Actions Left", number.formatnum(actionsToTarget)) | ||
addTableRow(tbl, "Time Left", formatTime(timeToTarget)) | addTableRow(tbl, "Time Left", formatTime(timeToTarget)) | ||
Line 55: | Line 55: | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local currentExp = | local currentExp = number.toNumberOrDefault(args.currentExp, 0) | ||
local currentLvl = | local currentLvl = number.toNumberOrDefault(args.currentLvl, 0) | ||
local targetLvl = | local targetLvl = number.toNumberOrError(args.targetLvl) | ||
local actionExp = | local actionExp = number.toNumberOrError(args.actionExp) | ||
local actionTime = | local actionTime = number.toNumberOrError(args.actionTime) | ||
-- Check Exp param for validity first, then Lvl | -- Check Exp param for validity first, then Lvl |
Revision as of 22:14, 12 March 2024
Documentation for this module may be created at Module:Calculator/ETA/doc
local p = {}
local MEXP = require('Module:Experience')
local number = require('Module:Number')
local function formatTime(timeInHundredths)
local sec = math.floor(timeInHundredths / 100)
local min = math.floor(timeInHundredths / 60000)
local hrs = math.floor(timeInHundredths / 360000)
local days = math.floor(timeInHundredths / (360000 * 24))
if days == 0 then
return string.format("%02dh %02dm %02ds", hrs % 24, min % 60, sec % 60)
else
return string.format("%d days %02dh %02dm %02ds", days, hrs % 24, min % 60, sec % 60)
end
end
local function addTableRow(tbl, c1, c2)
tbl:tag("tr")
:tag("th"):wikitext(c1)
:tag("td"):wikitext(c2)
return tbl
end
local function calc(currentExp, targetLvl, expPerAction, actionTime)
-- ActionTime is represented in hundreds of a second.
-- 1.6 seconds = 160
local actionsPerHour = math.floor(360000 / actionTime)
local targetExp = MEXP.expForLevel(targetLvl)
local expRemaining = math.max(targetExp - currentExp, 0)
local actionsToTarget = math.ceil(expRemaining / expPerAction)
local timeToTarget = actionsToTarget * actionTime
local tbl = mw.html.create("table")
:addClass("wikitable sticky-header text-align-right align-left-1")
addTableRow(tbl, "Current Experience", number.formatnum(currentExp))
addTableRow(tbl, "Target Level", targetLvl)
addTableRow(tbl, "Target Experience", number.formatnum(targetExp))
addTableRow(tbl, "Experience Remaining", number.formatnum(expRemaining))
addTableRow(tbl, "Actions Left", number.formatnum(actionsToTarget))
addTableRow(tbl, "Time Left", formatTime(timeToTarget))
return tostring(tbl)
end
function p.main(frame)
return p._main(frame)
end
function p._main(frame)
local args = frame:getParent().args
local currentExp = number.toNumberOrDefault(args.currentExp, 0)
local currentLvl = number.toNumberOrDefault(args.currentLvl, 0)
local targetLvl = number.toNumberOrError(args.targetLvl)
local actionExp = number.toNumberOrError(args.actionExp)
local actionTime = number.toNumberOrError(args.actionTime)
-- Check Exp param for validity first, then Lvl
if(currentExp == 0) then
currentExp = MEXP.expForLevel(currentLvl)
end
return calc(currentExp, targetLvl, actionExp, actionTime)
end
return p