Module:Calculator/ETA: Difference between revisions
From Melvor Idle
m (Use local functions) |
No edit summary |
||
(7 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
local MEXP = require('Module:Experience') | local MEXP = require('Module:Experience') | ||
local | local number = require('Module:Number') | ||
local TimeSpan = require('Module:TimeSpan') | |||
local function formatTime( | local function formatTime(seconds) | ||
local timespan = TimeSpan.fromSeconds(seconds) | |||
return timespan:toStringLong() | |||
end | end | ||
Line 26: | Line 19: | ||
local function calc(currentExp, targetLvl, expPerAction, actionTime) | local function calc(currentExp, targetLvl, expPerAction, actionTime) | ||
local actionsPerHour = math.floor(3600 / actionTime) | |||
local actionsPerHour = math.floor( | |||
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(3600 / actionTime * expPerAction) | |||
local actionsToTarget = math.ceil(expRemaining / expPerAction) | local actionsToTarget = math.ceil(expRemaining / expPerAction) | ||
Line 38: | Line 30: | ||
: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, "Experience Per Hour", number.formatnum(expPerHour)) | ||
addTableRow(tbl, "Actions Left", number.formatnum(actionsToTarget)) | |||
addTableRow(tbl, "Time Left", formatTime(timeToTarget)) | addTableRow(tbl, "Time Left", formatTime(timeToTarget)) | ||
Line 55: | Line 48: | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local currentExp = | local currentExp = number.parseNumber(args.currentExp) | ||
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 |
Latest revision as of 21:23, 13 April 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 TimeSpan = require('Module:TimeSpan')
local function formatTime(seconds)
local timespan = TimeSpan.fromSeconds(seconds)
return timespan:toStringLong()
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)
local actionsPerHour = math.floor(3600 / actionTime)
local targetExp = MEXP.expForLevel(targetLvl)
local expRemaining = math.max(targetExp - currentExp, 0)
local expPerHour = math.floor(3600 / 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)
-- 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