From 87e512ff247685f96d8e9ac298c8b0b843da38b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B3th=20Korn=C3=A9l?= Date: Fri, 22 Nov 2024 21:19:49 +0100 Subject: [PATCH] Fix power monitor instability (#654) This fixes the power monitor instability where it was switching between having and not having network infotext. The cause was that the power monitor is LV MV and HV machine at the same time, and each tier has a countdown. If any of these countdowns were 0 it treated the machine as having no network. This was changed so that it only treats a machine as having no network if it is timed out in all tiers that it is a part of. --- technic/machines/switching_station.lua | 31 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/technic/machines/switching_station.lua b/technic/machines/switching_station.lua index 521e2f8..d1cabf0 100644 --- a/technic/machines/switching_station.lua +++ b/technic/machines/switching_station.lua @@ -468,22 +468,29 @@ minetest.register_abm({ interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) + local has_network = false + local technic_machine = false for tier, machines in pairs(technic.machines) do - if machines[node.name] and switching_station_timeout_count(pos, tier) then - local nodedef = minetest.registered_nodes[node.name] - if nodedef then - local meta = minetest.get_meta(pos) - meta:set_string("infotext", S("%s Has No Network"):format(nodedef.description)) - end - if nodedef and nodedef.technic_disabled_machine_name then - node.name = nodedef.technic_disabled_machine_name - minetest.swap_node(pos, node) - end - if nodedef and nodedef.technic_on_disable then - nodedef.technic_on_disable(pos, node) + if machines[node.name] then + technic_machine = true + if not switching_station_timeout_count(pos, tier) then + has_network = true end end end + + if technic_machine and not has_network then + local nodedef = minetest.registered_nodes[node.name] + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("%s Has No Network"):format(nodedef.description)) + if nodedef.technic_disabled_machine_name then + node.name = nodedef.technic_disabled_machine_name + minetest.swap_node(pos, node) + end + if nodedef.technic_on_disable then + nodedef.technic_on_disable(pos, node) + end + end end, })