parent
260ab8c0fd
commit
081d553483
|
@ -490,11 +490,10 @@ minetest.register_node("technic:hv_nuclear_reactor_core_active", {
|
||||||
timer:start(1)
|
timer:start(1)
|
||||||
end,
|
end,
|
||||||
on_timer = function(pos, node)
|
on_timer = function(pos, node)
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
|
|
||||||
-- Connected back?
|
-- Connected back?
|
||||||
if meta:get_int("HV_EU_timeout") > 0 then return false end
|
if technic.get_timeout("HV", pos) > 0 then return false end
|
||||||
|
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
local burn_time = meta:get_int("burn_time") or 0
|
local burn_time = meta:get_int("burn_time") or 0
|
||||||
|
|
||||||
if burn_time >= burn_ticks or burn_time == 0 then
|
if burn_time >= burn_ticks or burn_time == 0 then
|
||||||
|
|
|
@ -101,7 +101,7 @@ minetest.register_abm({
|
||||||
local sw_pos = get_swpos(pos)
|
local sw_pos = get_swpos(pos)
|
||||||
local timeout = 0
|
local timeout = 0
|
||||||
for tier in pairs(technic.machines) do
|
for tier in pairs(technic.machines) do
|
||||||
timeout = math.max(meta:get_int(tier.."_EU_timeout"),timeout)
|
timeout = math.max(technic.get_timeout(tier, pos),timeout)
|
||||||
end
|
end
|
||||||
if timeout > 0 and sw_pos then
|
if timeout > 0 and sw_pos then
|
||||||
local sw_meta = minetest.get_meta(sw_pos)
|
local sw_meta = minetest.get_meta(sw_pos)
|
||||||
|
|
|
@ -206,12 +206,12 @@ function technic.register_generator(data)
|
||||||
timer:start(1)
|
timer:start(1)
|
||||||
end,
|
end,
|
||||||
on_timer = function(pos, node)
|
on_timer = function(pos, node)
|
||||||
|
-- Connected back?
|
||||||
|
if technic.get_timeout(tier, pos) > 0 then return false end
|
||||||
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
|
|
||||||
-- Connected back?
|
|
||||||
if meta:get_int(tier.."_EU_timeout") > 0 then return false end
|
|
||||||
|
|
||||||
local burn_time = meta:get_int("burn_time") or 0
|
local burn_time = meta:get_int("burn_time") or 0
|
||||||
|
|
||||||
if burn_time <= 0 then
|
if burn_time <= 0 then
|
||||||
|
|
|
@ -10,6 +10,12 @@ local reset_overloaded = function(network_id)
|
||||||
local remaining = math.max(0, overloaded_networks[network_id] - minetest.get_us_time())
|
local remaining = math.max(0, overloaded_networks[network_id] - minetest.get_us_time())
|
||||||
if remaining == 0 then
|
if remaining == 0 then
|
||||||
-- Clear cache, remove overload and restart network
|
-- Clear cache, remove overload and restart network
|
||||||
|
local cables = technic.cables
|
||||||
|
for pos_hash,cable_net_id in pairs(cables) do
|
||||||
|
if cable_net_id == network_id then
|
||||||
|
cables[pos_hash] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
overloaded_networks[network_id] = nil
|
overloaded_networks[network_id] = nil
|
||||||
technic.networks[network_id] = nil
|
technic.networks[network_id] = nil
|
||||||
end
|
end
|
||||||
|
@ -163,7 +169,8 @@ local function check_node_subp(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes
|
||||||
overloaded_networks[net_id_new] = overloaded_networks[net_id_old]
|
overloaded_networks[net_id_new] = overloaded_networks[net_id_old]
|
||||||
-- delete caches for conflicting network
|
-- delete caches for conflicting network
|
||||||
technic.networks[net_id_old] = nil
|
technic.networks[net_id_old] = nil
|
||||||
technic.cables[pos] = net_id_new
|
technic.networks[net_id_new] = nil
|
||||||
|
technic.cables[pos_hash] = net_id_new
|
||||||
meta:set_string("infotext",S("Network Overloaded"))
|
meta:set_string("infotext",S("Network Overloaded"))
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
@ -185,7 +192,7 @@ local function check_node_subp(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes
|
||||||
add_network_node(BA_nodes, pos, network_id)
|
add_network_node(BA_nodes, pos, network_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
meta:set_int(tier.."_EU_timeout", 2) -- Touch node
|
technic.touch_node(tier, pos, 2) -- Touch node
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
@ -207,10 +214,32 @@ local function traverse_network(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_node
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
technic.node_timeout = {}
|
||||||
|
|
||||||
|
technic.pos2network = function(pos)
|
||||||
|
return technic.cables[minetest.hash_node_position(pos)]
|
||||||
|
end
|
||||||
|
|
||||||
|
technic.get_timeout = function(tier, pos)
|
||||||
|
if technic.node_timeout[tier] == nil then
|
||||||
|
-- it is normal that some multi tier nodes always drop here when checking all LV, MV and HV tiers
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
return technic.node_timeout[tier][minetest.hash_node_position(pos)] or 0
|
||||||
|
end
|
||||||
|
|
||||||
|
technic.touch_node = function(tier, pos, timeout)
|
||||||
|
if technic.node_timeout[tier] == nil then
|
||||||
|
-- this should get built up during registration
|
||||||
|
technic.node_timeout[tier] = {}
|
||||||
|
end
|
||||||
|
technic.node_timeout[tier][minetest.hash_node_position(pos)] = timeout or 2
|
||||||
|
end
|
||||||
|
|
||||||
local function touch_nodes(list, tier)
|
local function touch_nodes(list, tier)
|
||||||
|
local touch_node = technic.touch_node
|
||||||
for _, pos in ipairs(list) do
|
for _, pos in ipairs(list) do
|
||||||
local meta = minetest.get_meta(pos)
|
touch_node(tier, pos, 2) -- Touch node
|
||||||
meta:set_int(tier.."_EU_timeout", 2) -- Touch node
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -224,7 +253,7 @@ local function get_network(network_id, sw_pos, pos1, tier)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_int("active", 0)
|
meta:set_int("active", 0)
|
||||||
meta:set_string("active_pos", minetest.serialize(sw_pos))
|
meta:set_string("active_pos", minetest.serialize(sw_pos))
|
||||||
meta:set_int(tier.."_EU_timeout", 2) -- Touch node
|
technic.touch_node(tier, pos, 2) -- Touch node
|
||||||
end
|
end
|
||||||
return cached.PR_nodes, cached.BA_nodes, cached.RE_nodes
|
return cached.PR_nodes, cached.BA_nodes, cached.RE_nodes
|
||||||
end
|
end
|
||||||
|
@ -524,13 +553,13 @@ end
|
||||||
-- Timeout for a node in case it was disconnected from the network
|
-- Timeout for a node in case it was disconnected from the network
|
||||||
-- A node must be touched by the station continuously in order to function
|
-- A node must be touched by the station continuously in order to function
|
||||||
local function switching_station_timeout_count(pos, tier)
|
local function switching_station_timeout_count(pos, tier)
|
||||||
local meta = minetest.get_meta(pos)
|
local timeout = technic.get_timeout(tier, pos)
|
||||||
local timeout = meta:get_int(tier.."_EU_timeout")
|
|
||||||
if timeout <= 0 then
|
if timeout <= 0 then
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_int(tier.."_EU_input", 0) -- Not needed anymore <-- actually, it is for supply converter
|
meta:set_int(tier.."_EU_input", 0) -- Not needed anymore <-- actually, it is for supply converter
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
meta:set_int(tier.."_EU_timeout", timeout - 1)
|
technic.touch_node(tier, pos, timeout - 1)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue