From 0bdc3143ff7b3cd7dc50c124d0e917b7b9fcd47e Mon Sep 17 00:00:00 2001 From: Brevven Date: Fri, 31 Jan 2025 02:24:45 -0800 Subject: [PATCH] updates --- changelog.txt | 5 +++++ control-util.lua | 50 ++++++++++++++++++++++++++--------------- data-util.lua | 58 +++++++++++++++++++++++++++++++++++++++++------- info.json | 2 +- me.lua | 2 +- 5 files changed, 89 insertions(+), 28 deletions(-) diff --git a/changelog.txt b/changelog.txt index 786b990..832e519 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.0.19 +Date: 2025-01-25 + Fixes: + - Improve compatiblity with mods that change armor recipes in certain ways +--------------------------------------------------------------------------------------------------- Version: 2.0.18 Date: 2025-01-19 Changes: diff --git a/control-util.lua b/control-util.lua index ef04e99..7ba42cc 100644 --- a/control-util.lua +++ b/control-util.lua @@ -58,8 +58,17 @@ function list(event) end end +function util.add_command_handler() + script.on_event(defines.events.on_console_command, route) +end + +function route(event) + if event.command == regenerate_command then regenerate_ore(event) end + if event.command == list_command then list(event) end +end + function util.add_list_command_handler() - script.on_event(defines.events.on_console_command, list) + util.add_command_handler() if not commands.commands[list_command] then commands.add_command(list_command, "", function() end) @@ -134,7 +143,7 @@ Regenerates ore patches. If frequency/size/richness are provided, the planet wil - Ores can sometimes overlap on regeneration. This can sometimes hide ore patches. If none seem to be made for a resource, regenerate just that resource and tweak frequency/size. ]] function util.add_regenerate_command_handler() - script.on_event(defines.events.on_console_command, regenerate_ore) + util.add_command_handler() if not commands.commands[regenerate_command] then commands.add_command( regenerate_command, usage_regenerate, function() end) @@ -147,9 +156,9 @@ function regenerate_ore(event) for w in event.parameters:gmatch("%S+") do table.insert(params, w) end if #params == 1 and params[1] == "all" then for _, resource in pairs(me.resources) do - if prototypes.entity[resource] then - game.print("Regenerating "..resource) - game.regenerate_entity(resource) + if prototypes.entity[resource[1]] then + game.print("Regenerating "..resource[1]) + game.regenerate_entity(resource[1]) end end return @@ -164,17 +173,17 @@ function regenerate_ore(event) game.print("Could not find surface for "..planet..". May not exist, or may not yet be explored.") return end - if resource == params[2] then + if resource[1] == params[2] and (resource[2] == planet or "tenebris" == planet) then if #params == 5 then local settings = {frequency=params[3], size=params[4], richness=params[5]} local map_gen_settings = game.surfaces[planet].map_gen_settings - map_gen_settings.autoplace_controls[resource] = settings - map_gen_settings.autoplace_settings.entity.settings[resource] = settings + map_gen_settings.autoplace_controls[resource[1]] = settings + map_gen_settings.autoplace_settings.entity.settings[resource[1]] = settings game.surfaces[planet].map_gen_settings = map_gen_settings - game.print("Set "..resource.." on "..planet.." to "..serpent.line(settings)) + game.print("Set "..resource[1].." on "..planet.." to "..serpent.line(settings)) end - game.print("Regenerating "..resource) - game.surfaces[planet].regenerate_entity(resource) + game.print("Regenerating "..resource[1]) + game.surfaces[planet].regenerate_entity(resource[1]) end end end @@ -182,6 +191,7 @@ end function util.ore_fix() ore_fix("nauvis") + ore_fix("vulcanus") if game.surfaces.tenebris then ore_fix("tenebris") end @@ -189,14 +199,18 @@ end function ore_fix(surface_name) for _, resource in pairs(me.resources) do - local map_gen_settings = game.surfaces[surface_name].map_gen_settings - if map_gen_settings.autoplace_controls[resource] == nil then - map_gen_settings.autoplace_controls[resource] = {} + if resource[2] == surface_name then + if game.surfaces[resource[2]] then + local map_gen_settings = game.surfaces[surface_name].map_gen_settings + if map_gen_settings.autoplace_controls[resource[1]] == nil then + map_gen_settings.autoplace_controls[resource[1]] = {} + end + if map_gen_settings.autoplace_settings.entity.settings[resource[1]] == nil then + map_gen_settings.autoplace_settings.entity.settings[resource[1]] = {} + end + game.surfaces[surface_name].map_gen_settings = map_gen_settings + end end - if map_gen_settings.autoplace_settings.entity.settings[resource] == nil then - map_gen_settings.autoplace_settings.entity.settings[resource] = {} - end - game.surfaces[surface_name].map_gen_settings = map_gen_settings end end diff --git a/data-util.lua b/data-util.lua index 7f9e8ea..9b471b3 100644 --- a/data-util.lua +++ b/data-util.lua @@ -785,7 +785,7 @@ end -- Add a given quantity of ingredient to a given recipe function util.add_or_add_to_ingredient(recipe_name, ingredient, quantity, options) if not should_force(options) and bypass(recipe_name) then return end - if data.raw.recipe[recipe_name] and data.raw.item[ingredient] then + if data.raw.recipe[recipe_name] and util.get_item(ingredient) then me.add_modified(recipe_name) prepare_redo_recycling(recipe_name) add_or_add_to_ingredient(data.raw.recipe[recipe_name], ingredient, quantity) @@ -800,15 +800,25 @@ function add_or_add_to_ingredient(recipe, ingredient, quantity) return end end - table.insert(recipe.ingredients, {ingredient, quantity}) + table.insert(recipe.ingredients, util.item(ingredient, quantity)) end end +function util.get_item(name) + if data.raw.item[name] then return data.raw.item[name] end + if data.raw.armor[name] then return data.raw.armor[name] end + if data.raw.fluid[name] then return data.raw.fluid[name] end + if data.raw.capsule[name] then return data.raw.capsule[name] end + if data.raw["space-platform-starter-pack"] and data.raw["space-platform-starter-pack"][name] then return data.raw["space-platform-starter-pack"][name] end + -- TODO add more subtypes of item here + return nil +end + -- Add a given quantity of ingredient to a given recipe function util.add_ingredient(recipe_name, ingredient, quantity, options) if not should_force(options) and bypass(recipe_name) then return end local is_fluid = not not data.raw.fluid[ingredient] - if data.raw.recipe[recipe_name] and (data.raw.item[ingredient] or is_fluid) then + if data.raw.recipe[recipe_name] and (util.get_item(ingredient) or is_fluid) then me.add_modified(recipe_name) prepare_redo_recycling(recipe_name) add_ingredient(data.raw.recipe[recipe_name], ingredient, quantity, is_fluid) @@ -1481,15 +1491,11 @@ function util.add_to_ingredient(recipe, ingredient, amount, options) end function add_to_ingredient(recipe, it, amount) - if recipe ~= nil and recipe.ingredients ~= nil then + if recipe and recipe.ingredients then for i, ingredient in pairs(recipe.ingredients) do if ingredient.name == it then ingredient.amount = ingredient.amount + amount return - end - if ingredient[1] == it then - ingredient[2] = ingredient[2] + amount - return end end end @@ -1537,6 +1543,16 @@ function util.add_minable_result(t, name, result) end end +function util.set_surface_property(surface, condition, value) + if not data.raw["surface-property"][condition] then return end + if data.raw.surface[surface] then + data.raw.surface[surface].surface_properties[condition] = value + end + if data.raw.planet[surface] then + data.raw.planet[surface].surface_properties[condition] = value + end +end + local function insert(nodes, node, value) table.insert(node, value) -- store as parameter @@ -1621,6 +1637,7 @@ end function remove_prior_unlocks(tech, recipe) local technology = data.raw.technology[tech] if technology then + log("Removing prior unlocks for ".. tech) util.remove_recipe_effect(tech, recipe) if technology.prerequisites then for i, prerequisite in pairs(technology.prerequisites) do @@ -1656,6 +1673,7 @@ function util.replace_ingredients_prior_to(tech, old, new, multiplier) end function replace_ingredients_prior_to(tech, old, new, multiplier) + log("Replacing for tech "..tech) local technology = data.raw.technology[tech] if technology then if technology.effects then @@ -1769,6 +1787,21 @@ function util.redo_recycling() recycling.generate_recycling_recipe(recipe) end end + -- Find all recycling recipes that result in armor and make sure not to output more than 1 + for _, recipe in pairs(data.raw.recipe) do + if recipe.name:find("recycling") then + for _, product in pairs(recipe.results) do + if data.raw.armor[product.name] then + if product.amount then + if product.amount > .99 then + product.amount = 1 + product.extra_count_fraction = nil + end + end + end + end + end + end end end @@ -1777,6 +1810,15 @@ function prepare_redo_recycling(recipe_name) data.raw.recipe[recipe_name].redo_recycling = true end +-- Change furnace output count +function util.set_minimum_furnace_outputs(category, count) + for i, entity in pairs(data.raw.furnace) do + if entity.result_inventory_size ~= nil and entity.result_inventory_size < count and util.contains(entity.crafting_categories, category) then + entity.result_inventory_size = count + end + end +end + -- According to https://mods.factorio.com/mod/Asteroid_Mining, the -- following function is under this MIT license (similar license, different author): diff --git a/info.json b/info.json index 4681ba6..676df9a 100644 --- a/info.json +++ b/info.json @@ -1,6 +1,6 @@ { "name": "bztitanium", - "version": "2.0.18", + "version": "2.0.19", "factorio_version": "2.0", "title": "Titanium", "author": "Brevven", diff --git a/me.lua b/me.lua index 4bd54b0..e3436b4 100644 --- a/me.lua +++ b/me.lua @@ -1,7 +1,7 @@ local me = {} me.name = "bztitanium" -me.resources = {"titanium-ore"} +me.resources = {{"titanium-ore", "nauvis"}} me.fluid_mining = true me.titanium_plate = "" me.titanium_processing = ""