mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 03:25:23 +09:00
84 lines
3.7 KiB
Lua
84 lines
3.7 KiB
Lua
local Commands = require("modules.exp_legacy.expcore.commands")
|
|
|
|
local function Modules(moduleInventory) -- returns the multiplier of the modules
|
|
local effect1 = moduleInventory.get_item_count("productivity-module") -- type 1
|
|
local effect2 = moduleInventory.get_item_count("productivity-module-2") -- type 2
|
|
local effect3 = moduleInventory.get_item_count("productivity-module-3") -- type 3
|
|
|
|
local multi = effect1 * 4 + effect2 * 6 + effect3 * 10
|
|
return multi / 100 + 1
|
|
end
|
|
|
|
local function AmountOfMachines(itemsPerSecond, output)
|
|
if (itemsPerSecond) then
|
|
return itemsPerSecond / output
|
|
end
|
|
end
|
|
|
|
Commands.new_command("ratio", { "expcom-ratio.description" },
|
|
"This command will give the input and output ratios of the selected machine. Use the parameter for calculating the machines needed for that amount of items per second.")
|
|
:add_param("itemsPerSecond", true, "number")
|
|
:register(function(player, itemsPerSecond)
|
|
local machine = player.selected -- selected machine
|
|
|
|
if not machine then -- nil check
|
|
return Commands.error{ "expcom-ratio.notSelecting" }
|
|
end
|
|
|
|
if machine.type ~= "assembling-machine" and machine.type ~= "furnace" then
|
|
return Commands.error{ "expcom-ratio.notSelecting" }
|
|
end
|
|
|
|
local recipe = machine.get_recipe() -- recipe
|
|
|
|
if not recipe then -- nil check
|
|
return Commands.error{ "expcom-ratio.notSelecting" }
|
|
end
|
|
|
|
local items = recipe.ingredients -- items in that recipe
|
|
local products = recipe.products -- output items
|
|
local amountOfMachines
|
|
local moduleInventory = machine.get_module_inventory() -- the module Inventory of the machine
|
|
local multi = Modules(moduleInventory) -- function for the productively modals
|
|
|
|
if itemsPerSecond then
|
|
amountOfMachines = math.ceil(AmountOfMachines(itemsPerSecond, 1 / recipe.energy * machine.crafting_speed * products[1].amount * multi)) -- amount of machines
|
|
end
|
|
|
|
if not amountOfMachines then
|
|
amountOfMachines = 1 -- set to 1 to make it not nil
|
|
end
|
|
|
|
----------------------------items----------------------------
|
|
for i, item in ipairs(items) do
|
|
local sprite -- string to make the icon work either fluid ore item
|
|
|
|
if item.type == "item" then
|
|
sprite = "expcom-ratio.item-in"
|
|
else
|
|
sprite = "expcom-ratio.fluid-in"
|
|
end
|
|
|
|
local ips = item.amount / recipe.energy * machine.crafting_speed * amountOfMachines -- math on the items/fluids per second
|
|
Commands.print{ sprite, math.round(ips, 3), item.name } -- full string
|
|
end
|
|
|
|
----------------------------products----------------------------
|
|
for i, product in ipairs(products) do
|
|
local sprite -- string to make the icon work either fluid ore item
|
|
|
|
if product.type == "item" then
|
|
sprite = "expcom-ratio.item-out"
|
|
else
|
|
sprite = "expcom-ratio.fluid-out"
|
|
end
|
|
|
|
local output = 1 / recipe.energy * machine.crafting_speed * product.amount * multi -- math on the outputs per second
|
|
Commands.print{ sprite, math.round(output * amountOfMachines, 3), product.name } -- full string
|
|
end
|
|
|
|
if amountOfMachines ~= 1 then
|
|
Commands.print{ "expcom-ratio.machines", amountOfMachines }
|
|
end
|
|
end)
|