Module:Calculator/ItemEconomy: Difference between revisions
From Melvor Idle
m (Somehow things turn into a string magically....) |
m (Chance extra item amounts to 1 by default instead of 0) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 49: | Line 49: | ||
end | end | ||
local function createTable(target, calcAmount, useRoW, ecoType, multiplier) | |||
local function createTable( | |||
local RoWYN = useRoW and "Yes" or "No" | local RoWYN = useRoW and "Yes" or "No" | ||
Line 68: | Line 56: | ||
if ecoType == ECOIN then | if ecoType == ECOIN then | ||
addTableRow(tbl, "Desired Output", number.formatnum( | addTableRow(tbl, "Desired Output", number.formatnum(target)) | ||
addTableRow(tbl, "Estimated Input", number.formatnum(calcAmount)) | addTableRow(tbl, "Estimated Input", number.formatnum(calcAmount)) | ||
else | else | ||
addTableRow(tbl, "Starting Items", number.formatnum( | addTableRow(tbl, "Starting Items", number.formatnum(target)) | ||
addTableRow(tbl, "Estimated Output", number.formatnum(calcAmount)) | addTableRow(tbl, "Estimated Output", number.formatnum(calcAmount)) | ||
end | end | ||
addTableRow(tbl, "Economy Factor", | addTableRow(tbl, "Economy Factor", string.format("x%.2f", multiplier)) | ||
addTableRow(tbl, "[[Ring of Wealth]] benefits", RoWYN) | addTableRow(tbl, "[[Ring of Wealth]] benefits", RoWYN) | ||
Line 97: | Line 85: | ||
itemEconomy.duplicationChance = number.toNumberOrDefault(args.duplicationChance, 0) | itemEconomy.duplicationChance = number.toNumberOrDefault(args.duplicationChance, 0) | ||
itemEconomy.extraItemChance = number.toNumberOrDefault(args.extraItemChance, 0) | itemEconomy.extraItemChance = number.toNumberOrDefault(args.extraItemChance, 0) | ||
itemEconomy.extraItemAmount = number.toNumberOrDefault(args.extraItemAmount, | itemEconomy.extraItemAmount = number.toNumberOrDefault(args.extraItemAmount, 1) | ||
itemEconomy.flatExtraItems = number.toNumberOrDefault(args.flatExtraItems, 0) | itemEconomy.flatExtraItems = number.toNumberOrDefault(args.flatExtraItems, 0) | ||
itemEconomy.extraBaseItemChance = number.toNumberOrDefault(args.extraBaseItemChance, 0) | itemEconomy.extraBaseItemChance = number.toNumberOrDefault(args.extraBaseItemChance, 0) | ||
itemEconomy.extraBaseItems = number.toNumberOrDefault(args.extraBaseItems, | itemEconomy.extraBaseItems = number.toNumberOrDefault(args.extraBaseItems, 1) | ||
local result = 0 | local result = 0 | ||
Line 111: | Line 99: | ||
end | end | ||
local tbl = createTable(target, result, row, economyType) | local multiplier = eco.estimatedOutputMultiplier(itemEconomy) | ||
local tbl = createTable(target, result, row, economyType, multiplier) | |||
return tostring(tbl) | return tostring(tbl) |
Latest revision as of 00:07, 19 March 2024
Documentation for this module may be created at Module:Calculator/ItemEconomy/doc
local p = {}
local number = require('Module:Number')
local eco = require("Module:ItemEconomy")
ECOIN = "INPUT"
ECOOUT = "OUTPUT"
local function parseEconomy(eco)
if eco == nil then
return ECOOUT
end
if eco:upper() == ECOIN then
return ECOIN
elseif eco:upper() == ECOOUT then
return ECOOUT
end
return ECOOUT
end
--
-- Returns the estimated output items and TRUE/FALSE if the Ring of Wealth has a benefit.
--
local function calculateOutput(target, itemEconomy)
local estimatedOutput = eco.estimatedOutput(target, itemEconomy)
local useRoW = eco.ringOfWealthHasEffect(itemEconomy)
return math.floor(estimatedOutput), useRoW
end
--
-- Returns the estimated input items and TRUE/FALSE if the Ring of Wealth has a benefit.
--
local function calculateInput(target, itemEconomy)
local estimatedInput = eco.estimatedInput(target, itemEconomy)
local useRoW = eco.ringOfWealthHasEffect(itemEconomy)
return math.ceil(estimatedInput), useRoW
end
local function addTableRow(tbl, c1, c2)
tbl:tag("tr")
:tag("th"):wikitext(c1)
:tag("td"):wikitext(c2)
return tbl
end
local function createTable(target, calcAmount, useRoW, ecoType, multiplier)
local RoWYN = useRoW and "Yes" or "No"
local tbl = mw.html.create("table")
:addClass("wikitable sticky-header text-align-right align-left-1")
if ecoType == ECOIN then
addTableRow(tbl, "Desired Output", number.formatnum(target))
addTableRow(tbl, "Estimated Input", number.formatnum(calcAmount))
else
addTableRow(tbl, "Starting Items", number.formatnum(target))
addTableRow(tbl, "Estimated Output", number.formatnum(calcAmount))
end
addTableRow(tbl, "Economy Factor", string.format("x%.2f", multiplier))
addTableRow(tbl, "[[Ring of Wealth]] benefits", RoWYN)
return tbl
end
function p.main(frame)
local args = frame:getParent().args
return p._main(args)
end
function p._main(args)
local target = number.toNumberOrDefault(args.targetAmount, 0)
local economyType = parseEconomy(args.economyType)
-- Create and fill ItemEconomy object.
local itemEconomy = eco.ItemEconomy:new()
itemEconomy.inputsPerAction = number.toNumberOrDefault(args.inputsPerAction, 1)
itemEconomy.outputsPerAction = number.toNumberOrDefault(args.outputsPerAction, 1)
itemEconomy.preservationChance = number.toNumberOrDefault(args.preservationChance, 0)
itemEconomy.duplicationChance = number.toNumberOrDefault(args.duplicationChance, 0)
itemEconomy.extraItemChance = number.toNumberOrDefault(args.extraItemChance, 0)
itemEconomy.extraItemAmount = number.toNumberOrDefault(args.extraItemAmount, 1)
itemEconomy.flatExtraItems = number.toNumberOrDefault(args.flatExtraItems, 0)
itemEconomy.extraBaseItemChance = number.toNumberOrDefault(args.extraBaseItemChance, 0)
itemEconomy.extraBaseItems = number.toNumberOrDefault(args.extraBaseItems, 1)
local result = 0
local row = false
if economyType == ECOOUT then
result, row = calculateOutput(target, itemEconomy)
else
result, row = calculateInput(target, itemEconomy)
end
local multiplier = eco.estimatedOutputMultiplier(itemEconomy)
local tbl = createTable(target, result, row, economyType, multiplier)
return tostring(tbl)
end
return p