Module:ItemEconomy/Sandbox: Difference between revisions
From Melvor Idle
(Rewrite output estimation functions) |
No edit summary |
||
Line 4: | Line 4: | ||
local ItemEconomy = { | local ItemEconomy = { | ||
-- Amount of items required per action. | |||
inputsPerAction, | |||
-- Amount of items created per action. (ie. 3 bolts per action). | -- Amount of items created per action. (ie. 3 bolts per action). | ||
outputsPerAction, | |||
-- The chance from 0 to 80 to preserve resources. | -- The chance from 0 to 80 to preserve resources. | ||
preservationChance, | preservationChance, | ||
Line 33: | Line 35: | ||
local function verifyEconomyValues(itemEconomy) | local function verifyEconomyValues(itemEconomy) | ||
-- Set default values if some are nil | -- Set default values if some are nil | ||
itemEconomy. | itemEconomy.inputsPerAction = itemEconomy.inputsPerAction or 1 | ||
itemEconomy.outputsPerAction = itemEconomy.outputsPerAction or 1 | |||
itemEconomy.preservationChance = itemEconomy.preservationChance or 0 | itemEconomy.preservationChance = itemEconomy.preservationChance or 0 | ||
itemEconomy.duplicationChance = itemEconomy.duplicationChance or 0 | itemEconomy.duplicationChance = itemEconomy.duplicationChance or 0 | ||
Line 52: | Line 55: | ||
--- Estimates the output multiplier of a crafting process based on ItemEconomy values. | --- Estimates the output multiplier of a crafting process based on ItemEconomy values. | ||
-- @param itemEconomy (table) The ItemEconomy object containing ItemEconomy values. | -- @param itemEconomy (table) The ItemEconomy object containing ItemEconomy values. | ||
-- @return (number) The estimated output multiplier of the crafting process. | -- @return (number) The estimated output multiplier of the crafting process. | ||
function p.estimatedOutputMultiplier( | function p.estimatedOutputMultiplier(itemEconomy) | ||
return p.estimatedOutput(nil, inputPerAction, outputPerAction, itemEconomy) | |||
return p.estimatedOutput( | |||
end | end | ||
--- Estimates the output of a crafting process based on input and ItemEconomy values. | --- Estimates the output of a crafting process based on input and ItemEconomy values. | ||
-- @param inputAmount (number) The total amount of input items available for crafting. | -- @param inputAmount (number) The total amount of input items available for crafting. | ||
-- @param itemEconomy (table) The ItemEconomy object containing ItemEconomy values. | -- @param itemEconomy (table) The ItemEconomy object containing ItemEconomy values. | ||
-- @return (number) The estimated output of the crafting process. | -- @return (number) The estimated output of the crafting process. | ||
function p.estimatedOutput(inputAmount | function p.estimatedOutput(inputAmount, itemEconomy) | ||
eco = verifyEconomyValues(itemEconomy) | eco = verifyEconomyValues(itemEconomy) | ||
-- Equal inputAmount to inputsPerAction to get 1 baseAction | |||
inputAmount = inputAmount or | inputAmount = inputAmount or eco.inputsPerAction | ||
baseActions = math.floor(inputAmount / eco.inputsPerAction) | |||
baseActions = inputAmount / | |||
-- Calculate the effective actions taken. | -- Calculate the effective actions taken. | ||
Line 83: | Line 80: | ||
-- Total output | -- Total output | ||
return (totalActions * baseItems * (1 + eco.duplicationChance)) + extraItems | |||
end | end | ||
Line 101: | Line 98: | ||
p.ItemEconomy = ItemEconomy | p.ItemEconomy = ItemEconomy | ||
-- Test stuff.... | |||
function p.Test() | |||
local eco = ItemEconomy:new() | |||
return p.estimatedOutput() | |||
end | |||
return p | return p |
Revision as of 21:56, 17 March 2024
Documentation for this module may be created at Module:ItemEconomy/Sandbox/doc
local number = require('Module:Number')
local p = {}
local ItemEconomy = {
-- Amount of items required per action.
inputsPerAction,
-- Amount of items created per action. (ie. 3 bolts per action).
outputsPerAction,
-- The chance from 0 to 80 to preserve resources.
preservationChance,
-- The chance from 0 to 100 to duplicate the crafting output.
duplicationChance,
-- The chance from 0 to 100 to get extra output items (not doubled).
extraItemChance,
-- The amount of extra items received, when the extraItemChance is rolled.
extraItemAmount,
-- The amount of extra items always received per action (not doubled).
flatExtraItems,
-- The chance to get extra base items (can be doubled).
extraBaseItemChance,
-- The amount of extra base items received.
extraBaseItems
}
-- Make constructor so external modules can more easily use the
-- ItemEconomy object, should they desire
function ItemEconomy:new()
local newObj = {}
self.__index = self
return setmetatable(newObj, self)
end
local function verifyEconomyValues(itemEconomy)
-- Set default values if some are nil
itemEconomy.inputsPerAction = itemEconomy.inputsPerAction or 1
itemEconomy.outputsPerAction = itemEconomy.outputsPerAction or 1
itemEconomy.preservationChance = itemEconomy.preservationChance or 0
itemEconomy.duplicationChance = itemEconomy.duplicationChance or 0
itemEconomy.extraItemChance = itemEconomy.extraItemChance or 0
itemEconomy.extraItemAmount = itemEconomy.extraItemAmount or 1
itemEconomy.flatExtraItems = itemEconomy.flatExtraItems or 1
itemEconomy.extraBaseItemChance = itemEconomy.extraBaseItemChance or 0
itemEconomy.extraBaseItems = itemEconomy.extraBaseItems or 0
-- Clamp economy values
itemEconomy.preservationChance = number.clamp(itemEconomy.preservationChance, 0, 80) / 100
itemEconomy.duplicationChance = number.clamp(itemEconomy.duplicationChance, 0, 100) / 100
itemEconomy.extraItemChance = number.clamp(itemEconomy.extraItemChance, 0, 100) / 100
itemEconomy.extraBaseItems = number.clamp(itemEconomy.extraBaseItems, 0, 100) / 100
return itemEconomy
end
--- Estimates the output multiplier of a crafting process based on ItemEconomy values.
-- @param itemEconomy (table) The ItemEconomy object containing ItemEconomy values.
-- @return (number) The estimated output multiplier of the crafting process.
function p.estimatedOutputMultiplier(itemEconomy)
return p.estimatedOutput(nil, inputPerAction, outputPerAction, itemEconomy)
end
--- Estimates the output of a crafting process based on input and ItemEconomy values.
-- @param inputAmount (number) The total amount of input items available for crafting.
-- @param itemEconomy (table) The ItemEconomy object containing ItemEconomy values.
-- @return (number) The estimated output of the crafting process.
function p.estimatedOutput(inputAmount, itemEconomy)
eco = verifyEconomyValues(itemEconomy)
-- Equal inputAmount to inputsPerAction to get 1 baseAction
inputAmount = inputAmount or eco.inputsPerAction
baseActions = math.floor(inputAmount / eco.inputsPerAction)
-- Calculate the effective actions taken.
local totalActions = baseActions / (1 - eco.preservationChance)
-- Calculates extra items that can't be doubled.
local extraItems = (totalActions * eco.extraItemChance * eco.extraItemAmount) + (totalActions * eco.flatExtraItems)
-- Calculates extra items that CAN be doubled.
local baseItems = (outputPerAction + eco.extraBaseItemChance * eco.extraBaseItems)
-- Total output
return (totalActions * baseItems * (1 + eco.duplicationChance)) + extraItems
end
function p.estimatedInput(outputAmount, preservationChance, duplicationChance, extraItemChance)
end
--
-- Calculates if equipping the Ring Of Wealth will result in more items for the player.
-- PreservationChance (number from 0 - 80)
-- DuplicationChance (number from 0 - 100)
-- ExtraItemChance (number from 0 - ?)
--
function p.ringOfWealthHasEffect(preservationChance, duplicationChance, extraItemChance)
end
p.ItemEconomy = ItemEconomy
-- Test stuff....
function p.Test()
local eco = ItemEconomy:new()
return p.estimatedOutput()
end
return p