Compare commits

..

7 commits

Author SHA1 Message Date
Simon Brodtmann
7f5fd5705d Update Discord link 2025-09-15 18:13:40 +02:00
Simon Brodtmann
2a9cc689f9 1.2.7 2025-08-22 03:27:45 +02:00
Simon Brodtmann
407068968c Always show hot variants in filter menus 2025-08-22 03:24:03 +02:00
Simon Brodtmann
ff57a87914 Simplify weight calculation to prevent infinite recursion 2025-08-22 03:18:27 +02:00
Simon Brodtmann
215dd76d90 1.2.6 2025-04-18 10:41:15 +02:00
Simon Brodtmann
1adf84ef1a Move technology changes to final fixes stage 2025-04-15 18:08:54 +02:00
Simon Brodtmann
3c0ebc98e2 Add polish translation 2025-04-15 18:04:59 +02:00
6 changed files with 45 additions and 58 deletions

View file

@ -1,4 +1,16 @@
---------------------------------------------------------------------------------------------------
Version: 1.2.7
Date: 22.08.2025
Bug Fixes:
- Simplify weight calculation to prevent infinite recursion (https://mods.factorio.com/mod/hot-metals/discussion/68a3a137a86e2ca3d73388fe)
- Always show hot variants in filter menus (https://mods.factorio.com/mod/hot-metals/discussion/685ac28c1436373189fc0bff)
---------------------------------------------------------------------------------------------------
Version: 1.2.6
Date: 18.04.2025
Changes:
- Add polish translation (I forgot who did it :-( )
- Move technology changes to final fixes stage
---------------------------------------------------------------------------------------------------
Version: 1.2.5
Date: 04.02.2025
Changes:

View file

@ -0,0 +1 @@
require("prototypes/hot-metals-final")

View file

@ -1,10 +1,10 @@
{
"name": "hot-metals",
"version": "1.2.5",
"version": "1.2.7",
"title": "Hot metals",
"description": "A furnace doesn't just output cold usable results. You need to wait for them to cool down.",
"author": "cackling fiend",
"homepage": "",
"homepage": "https://discord.gg/ufvFUJtVwk",
"factorio_version": "2.0",
"dependencies": [
"base",

View file

@ -0,0 +1,12 @@
[item-name]
hot=Hot
[mod-setting-name]
hot-metals-time=Czas stygnięcia
hot-metals-plastic=Dodaj gorący plastik
hot-metals-bricks=dodaj gorące kamienne cegły i beton
[mod-setting-description]
hot-metals-time=Czas w sekundach, jaki jest potrzebny, aby gorący przedmiot ostygł.
hot-metals-plastic=Chociaż temperatura gorącego plastiku jest znacznie niższa w porównaniu do metali, możesz chcieć mieć jego gorącą wersję.
hot-metals-bricks=Kamienne cegły i beton nie są domyślnie uwzględnione. Jeśli lubisz grać z gorącymi wariantami, możesz włączyć tę opcję.

View file

@ -0,0 +1,9 @@
-- Change technology triggers
for _, tech in pairs(data.raw.technology) do
if tech.research_trigger then
local item = data.raw.item[tech.research_trigger.item]
if item and item.hot_item and not contains(HotMetals.skipTechUnlocksFor, item.name) then
tech.research_trigger.item = item.hot_item
end
end
end

View file

@ -1,52 +1,5 @@
local defaultSpoilTicks = settings.startup["hot-metals-time"].value * 60
---@param name data.ItemID
---@return data.ItemPrototype?
function getItem(name)
if data.raw.item[name] then
return data.raw.item[name] --[[@as data.ItemPrototype]]
end
for item_type in pairs(defines.prototypes.item) do
local type_lookup = data.raw[item_type]
if type_lookup and type_lookup[name] then
return type_lookup[name] --[[@as data.ItemPrototype]]
end
end
end
---@param table item
---@return number
function getWeight(item)
if type(item) == "string" then
item = getItem(item)
end
if item.weight then return item.weight end
local factor = item.ingredient_to_weight_coefficient or 0.5
for _, recipe in pairs(data.raw.recipe) do
if recipe.results == nil then
goto continue
end
local function isResultMatch(result)
return result.name == item.name
end
local results = table.filter(recipe.results, isResultMatch)
if #results > 0 then
for _, ingredient in pairs(recipe.ingredients) do
if ingredient.type == "item" then
local weight = data.raw.item[ingredient.name].weight or getWeight(data.raw.item[ingredient.name])
local amount = ingredient.amount
if ingredient.amount_min and ingredient.amount_max then
amount = (ingredient.amount_min + ingredient.amount_max) / 2
end
return amount * weight * factor
end
end
end
::continue::
end
return 100
end
function createHotVariant(config)
local itemName = config
local spoilTicks = defaultSpoilTicks
@ -58,13 +11,13 @@ function createHotVariant(config)
iconFolder = config.iconFolder or iconFolder
end
local item = data.raw.item[itemName]
item.weight = getWeight(item)
item.weight = item.weight or 10000
-- Create new item
local hotItem = table.deepcopy(data.raw.item[itemName])
hotItem.name = "hot-" .. itemName
hotItem.localised_name = { "", { "item-name.hot" }, " ", { "item-name." .. itemName } }
if (config.icons) then
if config.icons then
hotItem.icons = config.icons
else
hotItem.icon = iconFolder .. "hot-" .. itemName .. ".png"
@ -74,8 +27,15 @@ function createHotVariant(config)
hotItem.weight = item.weight
hotItem.spoil_result = itemName
hotItem.spoil_ticks = spoilTicks
hotItem.flags = hotItem.flags or {}
if not table.contains(hotItem.flags, "always-show") then
table.insert(hotItem.flags, "always-show")
end
data:extend({ hotItem })
item.hot_item = hotItem.name
-- Change recipes
for _, recipe in pairs(data.raw.recipe) do
if contains(HotMetals.craftingCategories, recipe.category) then
@ -101,13 +61,6 @@ function createHotVariant(config)
end
end
end
-- Change technology triggers
for _, tech in pairs(data.raw.technology) do
if tech.research_trigger and tech.research_trigger.item == itemName and not contains(HotMetals.skipTechUnlocksFor, itemName) then
tech.research_trigger.item = hotItem.name
end
end
end
-- Checks if a table contains a certain value