98 lines
3.2 KiB
Lua

local target = {}
local min_time = settings.startup["paranoidal-flowfix-min-time"].value
--local pack = 1
local function scaleTable(t, pack)
for j,item in pairs(t) do
if t[j].amount then
t[j].amount = t[j].amount*pack
local catalyst_amount = t[j].catalyst_amount
if catalyst_amount then
t[j].catalyst_amount = catalyst_amount*pack
end
else
if type(t[j][2]) == 'number' then
t[j][2] = t[j][2]*pack
else
log("WARRRING!!! not found ingredients count")
end
end
end
end
local function pack_trim(pack, item_name, result_count)
local item = data.raw.item[item_name]
if item and item.stack_size then
return math.min(pack, math.max(1, math.floor(item.stack_size)/result_count))
else
return pack
end
end
local function scaleRecipe(recipe)
if recipe.energy_required and recipe.energy_required < min_time then
local pack = math.max(1, math.ceil(min_time/recipe.energy_required))
pack = pack_trim(pack, recipe.result, recipe.result_count or 1)
if recipe.results then
for j,item in pairs(recipe.results) do
if item.amount then
pack = pack_trim(pack, item.name, item.amount)
else
if type(item[2])=='number' then
pack = pack_trim(pack, item[1], item[2])
end
end
end
end
recipe.energy_required = recipe.energy_required * pack
if recipe.ingredients then
scaleTable(recipe.ingredients, pack)
else
log("no ingridients in "..recipe.name)
end
if recipe.result then
if not recipe.result_count then
recipe.result_count = 1
end
recipe.result_count = recipe.result_count*pack
end
if recipe.results then
scaleTable(recipe.results, pack)
end
end
end
for k,v in pairs(data.raw.module) do
if v.effect.productivity and v.limitation then
--log("use limitation from "..v.name)
for i,r in pairs(v.limitation) do
local recipe = data.raw.recipe[r]
if recipe.name ~= "rocket-part" then
-- Простые рецепты
if not recipe.normal and not recipe.energy_required then
recipe.energy_required = 0.5
end
scaleRecipe(recipe)
-- Нормальные рецепты
if recipe.normal then
if not recipe.normal.energy_required then
recipe.normal.energy_required = 0.5
end
scaleRecipe(recipe.normal)
end
-- Дорогие рецепты
if recipe.expensive then
if not recipe.expensive.energy_required then
recipe.expensive.energy_required = 0.5
end
scaleRecipe(recipe.expensive)
end
end
end
end
end