This commit is contained in:
Brevven 2025-01-31 02:24:45 -08:00
parent 7aae55195f
commit 0bdc3143ff
5 changed files with 89 additions and 28 deletions

View file

@ -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:

View file

@ -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,16 +199,20 @@ end
function ore_fix(surface_name)
for _, resource in pairs(me.resources) do
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] == nil then
map_gen_settings.autoplace_controls[resource] = {}
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] == nil then
map_gen_settings.autoplace_settings.entity.settings[resource] = {}
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
end
end
-- A workaround for generating ores until this bug is fixed:

View file

@ -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):

View file

@ -1,6 +1,6 @@
{
"name": "bztitanium",
"version": "2.0.18",
"version": "2.0.19",
"factorio_version": "2.0",
"title": "Titanium",
"author": "Brevven",

2
me.lua
View file

@ -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 = ""