Module:Calculator/ItemEconomy: Difference between revisions

m
Chance extra item amounts to 1 by default instead of 0
m (Numberic formatting)
m (Chance extra item amounts to 1 by default instead of 0)
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


local shared = require('Module:Shared')
local number = require('Module:Number')
local eco = require("Module:ItemEconomy")
local eco = require("Module:ItemEconomy")


Line 24: Line 24:
-- Returns the estimated output items and TRUE/FALSE if the Ring of Wealth has a benefit.
-- Returns the estimated output items and TRUE/FALSE if the Ring of Wealth has a benefit.
--
--
local function calculateOutput(itemAmount, pChance, dChance, eChance)
local function calculateOutput(target, itemEconomy)
local estimatedOutput = eco.estimatedOutput(itemAmount, pChance, dChance, eChance)
local estimatedOutput = eco.estimatedOutput(target, itemEconomy)
local canUseRoW = eco.ringOfWealthHasEffect(pChance, dChance, eChance)
local useRoW = eco.ringOfWealthHasEffect(itemEconomy)
return estimatedOutput, canUseRoW
return math.floor(estimatedOutput), useRoW
end
end


Line 34: Line 34:
-- Returns the estimated input items and TRUE/FALSE if the Ring of Wealth has a benefit.
-- Returns the estimated input items and TRUE/FALSE if the Ring of Wealth has a benefit.
--
--
local function calculateInput(itemAmount, pChance, dChance, eChance)
local function calculateInput(target, itemEconomy)
local estimatedInput = eco.estimatedInput(itemAmount, pChance, dChance, eChance)
local estimatedInput = eco.estimatedInput(target, itemEconomy)
local useRoW = eco.ringOfWealthHasEffect(itemEconomy)
local baseModifier = eco.estimatedInput(1, pChance, dChance, eChance)
local rowModifier = eco.estimatedInput(1, pChance - 3, dChance + 7, eChance)


return estimatedOutput, rowModifier > baseModifier
return math.ceil(estimatedInput), useRoW
end
end


Line 51: Line 49:
end
end


local function calculateFactor(a, b)
local function createTable(target, calcAmount, useRoW, ecoType, multiplier)
    local highest = math.max(a, b)
    local lowest = math.min(a, b)
 
    if lowest == 0 then
    -- This shouldn't ever be possible!
        error("Div by zero")
    end
 
    local factor = highest / lowest
    return string.format("%.2f", factor)
end
 
local function createTable(userAmount, calcAmount, useRoW, ecoType)
local RoWYN = useRoW and "Yes" or "No"
local RoWYN = useRoW and "Yes" or "No"
Line 71: Line 56:
if ecoType == ECOIN then
if ecoType == ECOIN then
addTableRow(tbl, "Desired Output", shared.formatnum(userAmount))
addTableRow(tbl, "Desired Output", number.formatnum(target))
addTableRow(tbl, "Estimated Input", shared.formatnum(calcAmount))
addTableRow(tbl, "Estimated Input", number.formatnum(calcAmount))
else
else
addTableRow(tbl, "Starting Items", shared.formatnum(userAmount))
addTableRow(tbl, "Starting Items", number.formatnum(target))
addTableRow(tbl, "Estimated Output", shared.formatnum(calcAmount))
addTableRow(tbl, "Estimated Output", number.formatnum(calcAmount))
end
end
addTableRow(tbl, "Economy Factor", calculateFactor(userAmount, calcAmount))
addTableRow(tbl, "Economy Factor", string.format("x%.2f", multiplier))
addTableRow(tbl, "[[Ring of Wealth]] benefits", RoWYN)
addTableRow(tbl, "[[Ring of Wealth]] benefits", RoWYN)
Line 90: Line 75:


function p._main(args)
function p._main(args)
local itemAmount = args.targetAmount
local target = number.toNumberOrDefault(args.targetAmount, 0)
local economyType = parseEconomy(args.economyType)
local economyType = parseEconomy(args.economyType)
 
local pChance = shared.toNumberOrDefault(args.preservationChance, 0)
-- Create and fill ItemEconomy object.
local dChance = shared.toNumberOrDefault(args.duplicationChance, 0)
local itemEconomy = eco.ItemEconomy:new()
local eChance = shared.toNumberOrDefault(args.extraItemChance, 0)
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 result = 0
local row = false
local row = false
if economyType == ECOOUT then
if economyType == ECOOUT then
result, row = calculateOutput(itemAmount, pChance, dChance, eChance)
result, row = calculateOutput(target, itemEconomy)
else
else
result, row = calculateInput(itemAmount, pChance, dChance, eChance)
result, row = calculateInput(target, itemEconomy)
end
end


local tbl = createTable(itemAmount, result, row, economyType)
local multiplier = eco.estimatedOutputMultiplier(itemEconomy)
local tbl = createTable(target, result, row, economyType, multiplier)
          
          
     return tostring(tbl)
     return tostring(tbl)
918

edits