diff --git a/technic/machines/supply_converter.lua b/technic/machines/supply_converter.lua index 24601c6..f9dce91 100644 --- a/technic/machines/supply_converter.lua +++ b/technic/machines/supply_converter.lua @@ -133,7 +133,6 @@ local run = function(pos, node, run_stage) enabled = enabled == "1" end enabled = enabled and (meta:get_int("mesecon_mode") == 0 or meta:get_int("mesecon_effect") ~= 0) - local demand = enabled and meta:get_int("power") or 0 local pos_up = {x=pos.x, y=pos.y+1, z=pos.z} local pos_down = {x=pos.x, y=pos.y-1, z=pos.z} @@ -144,14 +143,29 @@ local run = function(pos, node, run_stage) local to = technic.get_cable_tier(name_down) if from and to then - local input = meta:get_int(from.."_EU_input") - meta:set_int(from.."_EU_demand", demand) - meta:set_int(from.."_EU_supply", 0) - meta:set_int(to.."_EU_demand", 0) - meta:set_int(to.."_EU_supply", input * remain) - meta:set_string("infotext", S("@1 (@2 @3 -> @4 @5)", machine_name, - technic.EU_string(input), from, - technic.EU_string(input * remain), to)) + local network_hash = technic.cables[minetest.hash_node_position(pos_down)] + local network = network_hash and minetest.get_position_from_hash(network_hash) + local sw_pos = network and {x=network.x,y=network.y+1,z=network.z} + local timeout = 0 + for tier in pairs(technic.machines) do + timeout = math.max(meta:get_int(tier.."_EU_timeout"),timeout) + end + if timeout > 0 and sw_pos and minetest.get_node(sw_pos).name == "technic:switching_station" then + local sw_meta = minetest.get_meta(sw_pos) + local demand = enabled and math.min(meta:get_int("power"), + 100 * math.ceil(sw_meta:get_int("demand") / remain / 100)) or 0 + + local input = meta:get_int(from.."_EU_input") + meta:set_int(from.."_EU_demand", demand) + meta:set_int(from.."_EU_supply", 0) + meta:set_int(to.."_EU_demand", 0) + meta:set_int(to.."_EU_supply", input * remain) + meta:set_string("infotext", S("@1 (@2 @3 -> @4 @5)", machine_name, + technic.EU_string(input), from, + technic.EU_string(input * remain), to)) + else + meta:set_string("infotext",S("%s Has No Network"):format(machine_name)) + end else meta:set_string("infotext", S("%s Has Bad Cabling"):format(machine_name)) if to then