Module:Calculator/ETA: Difference between revisions
From Melvor Idle
m (Change user input of actionTime to seconds instead of hundreds) |
m (Add experience per hour row) |
||
Line 28: | Line 28: | ||
local targetExp = MEXP.expForLevel(targetLvl) | local targetExp = MEXP.expForLevel(targetLvl) | ||
local expRemaining = math.max(targetExp - currentExp, 0) | local expRemaining = math.max(targetExp - currentExp, 0) | ||
local expPerHour = math.floor(360000 / actionTime * expPerAction) | |||
local actionsToTarget = math.ceil(expRemaining / expPerAction) | local actionsToTarget = math.ceil(expRemaining / expPerAction) | ||
Line 39: | Line 40: | ||
addTableRow(tbl, "Target Experience", number.formatnum(targetExp)) | addTableRow(tbl, "Target Experience", number.formatnum(targetExp)) | ||
addTableRow(tbl, "Experience Remaining", number.formatnum(expRemaining)) | addTableRow(tbl, "Experience Remaining", number.formatnum(expRemaining)) | ||
addTableRow(tbl, "Experience Per Hour", number.formatnum(expPerHour)) | |||
addTableRow(tbl, "Actions Left", number.formatnum(actionsToTarget)) | addTableRow(tbl, "Actions Left", number.formatnum(actionsToTarget)) | ||
addTableRow(tbl, "Time Left", formatTime(timeToTarget)) | addTableRow(tbl, "Time Left", formatTime(timeToTarget)) |
Revision as of 01:16, 18 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 timespan = number.actionTimeToTimeSpan(timeInHundredths)
if timespan.days == 0 then
return string.format("%02dh %02dm %02ds", timespan.hours, timespan.minutes, timespan.seconds)
else
return string.format("%d days %02dh %02dm %02ds", timespan.days, timespan.hours, timespan.minutes, timespan.seconds)
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 expPerHour = math.floor(360000 / actionTime * expPerAction)
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, "Experience Per Hour", number.formatnum(expPerHour))
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.parseNumber(args.currentExp)
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) * 100
-- 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