Upgrade fuel cell/electrolyzser

master
Joachim Stolberg 2021-05-11 18:06:28 +02:00
parent 49fd5bc29a
commit 4b7fd5725d
12 changed files with 775 additions and 593 deletions

View File

@ -99,4 +99,4 @@ function api.restore_at_startup()
return {}
end
return api
return api

View File

@ -1267,16 +1267,16 @@ techage.manual_DE.aText = {
"Damit können Stromspitzen oder ein Überangebot an Strom in Wasserstoff umgewandelt und so gespeichert werden.\n"..
"\n"..
"Im Spiel kann Strom mit Hilfe des Elektrolyseurs in Wasserstoff und Wasserstoff über die Brennstoffzelle wieder in Strom umgewandelt werden.\n"..
"Damit kann Strom (in Form von Wasserstoff) nicht nur in Tanks gelagert\\, sonder mit Hilfe von Gasflaschen auch mit Wagen (carts) transportiert werden.\n"..
"Damit kann Strom (in Form von Wasserstoff) nicht nur in Tanks gelagert\\, sonder mit dem Tankwagen auch transportiert werden.\n"..
"\n"..
"Die Umwandlung von Strom in Wasserstoff und zurück ist aber verlustbehaftet. Von 100 Einheiten Strom kommen nach der Umwandlung in Wasserstoff und zurück nur 83 Einheiten Strom wieder raus.\n"..
"Die Umwandlung von Strom in Wasserstoff und zurück ist aber verlustbehaftet. Von 100 Einheiten Strom kommen nach der Umwandlung in Wasserstoff und zurück nur 95 Einheiten Strom wieder raus.\n"..
"\n"..
"\n"..
"\n",
"Der Elektrolyseur wandelt Strom in Wasserstoff um.\n"..
"Es muss von links mit Strom versorgt werden. Rechts kann Wasserstoff über Röhren und Pumpen entnommen werden.\n"..
"\n"..
"Der Elektrolyseur kann bis zu 30 ku an Strom aufnehmen und generiert dann alle 4 s ein Wasserstoff Item.\n"..
"Der Elektrolyseur kann bis zu 35 ku an Strom aufnehmen und generiert dann alle 4 s ein Wasserstoff Item.\n"..
"In den Elektrolyseur passen 200 Einheiten Wasserstoff.\n"..
"\n"..
"\n"..
@ -1284,7 +1284,11 @@ techage.manual_DE.aText = {
"Die Brennstoffzelle wandelt Wasserstoff in Strom um.\n"..
"Sie muss von links per Pumpe mit Wasserstoff versorgt werden. Rechts ist der Stromanschluss.\n"..
"\n"..
"Die Brennstoffzelle kann bis zu 25 ku an Strom abgeben und benötigt dazu alle 4 s ein Wasserstoff Item.\n"..
"Die Brennstoffzelle kann bis zu 34 ku an Strom abgeben und benötigt dazu alle 4 s ein Wasserstoff Item.\n"..
"\n"..
"Normalerweise arbeitet die Brennstoffzelle als Generator der Kategorie 2 (wie auch anderen Speichersystemen).\n"..
"In diesem Fall können keine anderen Blöcke der Kategorie 2 wie der Akku-Block geladen werden.\n"..
"Über das Kontrollkästchen kann die Brennstoffzelle jedoch auch als Generator der Kategorie 1 eingesetzt werden.\n"..
"\n"..
"\n"..
"\n",

View File

@ -1252,16 +1252,16 @@ techage.manual_EN.aText = {
"This enables current peaks or an excess supply of electricity to be converted into hydrogen and thus stored.\n"..
"\n"..
"In the game\\, electricity can be converted back into electricity via the fuel cell using the electrolyzer in hydrogen and hydrogen.\n"..
"This means that electricity (in the form of hydrogen) can not only be stored in tanks\\, but can also be transported with carts using gas cylinders.\n"..
"This means that electricity (in the form of hydrogen) can not only be stored in tanks\\, but also transported by means of the tank cart.\n"..
"\n"..
"However\\, the conversion of electricity into hydrogen and back is lossy. Out of 100 units of electricity\\, only 83 units of electricity come out after the conversion to hydrogen and back.\n"..
"However\\, the conversion of electricity into hydrogen and back is lossy. Out of 100 units of electricity\\, only 95 units of electricity come out after the conversion to hydrogen and back.\n"..
"\n"..
"\n"..
"\n",
"The electrolyzer converts electricity into hydrogen.\n"..
"It must be powered from the left. On the right\\, hydrogen can be extracted via pipes and pumps.\n"..
"\n"..
"The electrolyzer can draw up to 30 ku of electricity and then generates a hydrogen item every 4 s.\n"..
"The electrolyzer can draw up to 35 ku of electricity and then generates a hydrogen item every 4 s.\n"..
"200 units of hydrogen fit into the electrolyzer.\n"..
"\n"..
"\n"..
@ -1269,7 +1269,10 @@ techage.manual_EN.aText = {
"The fuel cell converts hydrogen into electricity.\n"..
"It must be supplied with hydrogen from the left by a pump. The power connection is on the right.\n"..
"\n"..
"The fuel cell can deliver up to 25 ku of electricity and needs a hydrogen item every 4 s.\n"..
"The fuel cell can deliver up to 34 ku of electricity and needs a hydrogen item every 4 s.\n"..
"\n"..
"Usually the fuel cell works as a category 2 generator (like other storage systems). \n"..
"In this case\\, no other category 2 blocks such as the battery block can be charged. However\\, the fuel cell can also be used as a category 1 generator via the check box.\n"..
"\n"..
"\n"..
"\n",

View File

@ -24,7 +24,7 @@ local networks = techage.networks
local CYCLE_TIME = 2
local STANDBY_TICKS = 3
local PWR_NEEDED = 30
local PWR_NEEDED = 35
local PWR_UNITS_PER_HYDROGEN_ITEM = 80
local CAPACITY = 200

View File

@ -24,10 +24,26 @@ local networks = techage.networks
local CYCLE_TIME = 2
local STANDBY_TICKS = 4
local PWR_CAPA = 25
local PWR_UNITS_PER_HYDROGEN_ITEM = 80
local PWR_CAPA = 34
local PWR_UNITS_PER_HYDROGEN_ITEM = 75
local CAPACITY = 100
local States = {}
local STATE = function(pos) return States[techage.get_node_lvm(pos).name] end
local function is_gen1(nvm)
if not nvm.running then
local is_gen1 = dump(nvm.is_gen1 or false)
return "checkbox[0.3,0.5;is_gen1;"..S("Cat. 1 generator")..";"..is_gen1.."]"..
"tooltip[0.3,0.5;1,1;"..S("If set, fuelcell will work\nas cat. 1 generator")..";#0C3D32;#FFFFFF]"
end
if nvm.is_gen1 then
return "label[0.5,0.7;"..S("Cat. 1 generator").."]"
else
return "label[0.5,0.7;"..S("Cat. 2 generator").."]"
end
end
local function formspec(self, pos, nvm)
local amount = (nvm.liquid and nvm.liquid.amount) or 0
local lqd_name = (nvm.liquid and nvm.liquid.name) or "techage:liquid"
@ -46,6 +62,7 @@ local function formspec(self, pos, nvm)
"label[2.5,-0.1;"..minetest.colorize( "#000000", S("Fuel Cell")).."]"..
techage.item_image(0.5,2, lqd_name)..
arrow..
is_gen1(nvm)..
"image_button[2,2.5;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"..
"tooltip[2,2.5;1,1;"..self:get_state_tooltip(nvm).."]"..
techage.power.formspec_label_bar(pos, 3.5, 0.8, S("Electricity"), PWR_CAPA, nvm.given)
@ -71,7 +88,7 @@ local State = techage.NodeStates:new({
cycle_time = CYCLE_TIME,
standby_ticks = STANDBY_TICKS,
formspec_func = formspec,
infotext_name = S("TA4 Fuel Cell"),
infotext_name = S("TA4 Fuel Cell Gen2"),
start_node = start_node,
stop_node = stop_node,
})
@ -94,18 +111,19 @@ end
-- converts hydrogen into power
local function node_timer(pos, elapsed)
local nvm = techage.get_nvm(pos)
local state = STATE(pos)
--print("fuelcell", nvm.running, nvm.given, nvm.num_pwr_units)
if has_hydrogen(nvm) then
local outdir = M(pos):get_int("outdir")
nvm.given = power.generator_alive(pos, Cable, CYCLE_TIME, outdir)
consuming(pos, nvm)
State:keep_running(pos, nvm, 1) -- TODO warum hier 1 und nicht COUNTDOWN_TICKS?
state:keep_running(pos, nvm, 1) -- TODO warum hier 1 und nicht COUNTDOWN_TICKS?
else
State:standby(pos, nvm)
state:standby(pos, nvm)
nvm.given = 0
end
if techage.is_activeformspec(pos) then
M(pos):set_string("formspec", formspec(State, pos, nvm))
M(pos):set_string("formspec", formspec(state, pos, nvm))
end
return true
end
@ -115,14 +133,26 @@ local function on_receive_fields(pos, formname, fields, player)
return
end
local nvm = techage.get_nvm(pos)
State:state_button_event(pos, nvm, fields)
M(pos):set_string("formspec", formspec(State, pos, nvm))
if fields.is_gen1 then
nvm.is_gen1 = fields.is_gen1 == "true"
local node = minetest.get_node(pos)
if nvm.is_gen1 then
node.name = "techage:ta4_fuelcell2"
else
node.name = "techage:ta4_fuelcell"
end
minetest.swap_node(pos, node)
local outdir = M(pos):get_int("outdir")
techage.power.update_network(pos, outdir, Cable)
end
STATE(pos):state_button_event(pos, nvm, fields)
M(pos):set_string("formspec", formspec(STATE(pos), pos, nvm))
end
local function on_rightclick(pos, node, clicker)
local nvm = techage.get_nvm(pos)
techage.set_activeformspec(pos, clicker)
M(pos):set_string("formspec", formspec(State, pos, nvm))
M(pos):set_string("formspec", formspec(STATE(pos), pos, nvm))
end
local function after_place_node(pos)
@ -130,7 +160,7 @@ local function after_place_node(pos)
nvm.running = false
nvm.num_pwr_units = 0
local number = techage.add_node(pos, "techage:ta4_fuelcell")
State:node_init(pos, nvm, number)
STATE(pos):node_init(pos, nvm, number)
local node = minetest.get_node(pos)
M(pos):set_int("outdir", networks.side_to_outdir(pos, "R"))
Pipe:after_place_node(pos)
@ -173,7 +203,7 @@ local liquid_def = {
local leftover = liquid.srv_put(pos, indir, name, amount)
if techage.is_activeformspec(pos) then
local nvm = techage.get_nvm(pos)
M(pos):set_string("formspec", formspec(State, pos, nvm))
M(pos):set_string("formspec", formspec(STATE(pos), pos, nvm))
end
return leftover
end,
@ -181,7 +211,7 @@ local liquid_def = {
amount, name = liquid.srv_take(pos, indir, name, amount)
if techage.is_activeformspec(pos) then
local nvm = techage.get_nvm(pos)
M(pos):set_string("formspec", formspec(State, pos, nvm))
M(pos):set_string("formspec", formspec(STATE(pos), pos, nvm))
end
return amount, name
end
@ -269,9 +299,126 @@ minetest.register_node("techage:ta4_fuelcell_on", {
light_source = 6,
})
Cable:add_secondary_node_names({"techage:ta4_fuelcell", "techage:ta4_fuelcell_on"})
Pipe:add_secondary_node_names({"techage:ta4_fuelcell", "techage:ta4_fuelcell_on"})
techage.register_node({"techage:ta4_fuelcell", "techage:ta4_fuelcell_on"}, {
-------------------------------------------------------------------------------
-- Gen1 fuellcell
-------------------------------------------------------------------------------
local State2 = techage.NodeStates:new({
node_name_passive = "techage:ta4_fuelcell2",
node_name_active = "techage:ta4_fuelcell2_on",
cycle_time = CYCLE_TIME,
standby_ticks = STANDBY_TICKS,
formspec_func = formspec,
infotext_name = S("TA4 Fuel Cell Gen1"),
start_node = start_node,
stop_node = stop_node,
})
local netw_def2 = {
pipe2 = {
sides = {L = 1}, -- Pipe connection sides
ntype = "tank",
},
ele1 = {
sides = {R = 1}, -- Cable connection sides
ntype = "gen1",
nominal = PWR_CAPA - 1, -- to be able to distiguish between cat1 and 2
},
}
minetest.register_node("techage:ta4_fuelcell2", {
description = S("TA4 Fuel Cell"),
tiles = {
-- up, down, right, left, back, front
"techage_filling_ta4.png^techage_frame_ta4_top.png^techage_appl_arrow.png",
"techage_filling_ta4.png^techage_frame_ta4.png",
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_electric.png",
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_pipe.png",
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_fuelcell.png^techage_appl_ctrl_unit.png^[transformFX",
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_fuelcell.png^techage_appl_ctrl_unit.png",
},
can_dig = function(pos, player)
if minetest.is_protected(pos, player:get_player_name()) then
return false
end
return liquid.is_empty(pos)
end,
after_place_node = after_place_node,
after_dig_node = after_dig_node,
tubelib2_on_update2 = tubelib2_on_update2,
on_punch = liquid.on_punch,
networks = netw_def2,
liquid = liquid_def,
on_receive_fields = on_receive_fields,
on_timer = node_timer,
on_rightclick = on_rightclick,
paramtype2 = "facedir",
groups = {cracky=2, crumbly=2, choppy=2, not_in_creative_inventory=1},
on_rotate = screwdriver.disallow,
is_ground_content = false,
drop = "techage:ta4_fuelcell",
})
minetest.register_node("techage:ta4_fuelcell2_on", {
description = S("TA4 Fuel Cell"),
tiles = {
-- up, down, right, left, back, front
"techage_filling_ta4.png^techage_frame_ta4_top.png^techage_appl_arrow.png",
"techage_filling_ta4.png^techage_frame_ta4.png",
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_electric.png",
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_pipe.png",
{
image = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_fuelcell4.png^techage_appl_ctrl_unit4.png^[transformFX",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 32,
aspect_h = 32,
length = 0.8,
},
},
{
image = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_fuelcell4.png^techage_appl_ctrl_unit4.png",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 32,
aspect_h = 32,
length = 0.8,
},
},
},
tubelib2_on_update2 = tubelib2_on_update2,
networks = netw_def2,
liquid = liquid_def,
on_receive_fields = on_receive_fields,
on_punch = liquid.on_punch,
on_timer = node_timer,
on_rightclick = on_rightclick,
paramtype2 = "facedir",
groups = {not_in_creative_inventory=1},
on_rotate = screwdriver.disallow,
is_ground_content = false,
diggable = false,
paramtype = "light",
light_source = 6,
})
States["techage:ta4_fuelcell"] = State
States["techage:ta4_fuelcell_on"] = State
States["techage:ta4_fuelcell2"] = State2
States["techage:ta4_fuelcell2_on"] = State2
Cable:add_secondary_node_names({"techage:ta4_fuelcell", "techage:ta4_fuelcell_on",
"techage:ta4_fuelcell2", "techage:ta4_fuelcell2_on"})
Pipe:add_secondary_node_names({"techage:ta4_fuelcell", "techage:ta4_fuelcell_on",
"techage:ta4_fuelcell2", "techage:ta4_fuelcell2_on"})
techage.register_node({"techage:ta4_fuelcell", "techage:ta4_fuelcell_on",
"techage:ta4_fuelcell2", "techage:ta4_fuelcell2_on"}, {
on_recv_message = function(pos, src, topic, payload)
local nvm = techage.get_nvm(pos)
if topic == "load" then
@ -279,7 +426,7 @@ techage.register_node({"techage:ta4_fuelcell", "techage:ta4_fuelcell_on"}, {
elseif topic == "delivered" then
return math.floor((nvm.given or 0) + 0.5)
else
return State:on_receive_message(pos, topic, payload)
return STATE(pos):on_receive_message(pos, topic, payload)
end
end,
})
@ -292,4 +439,3 @@ minetest.register_craft({
{'default:steel_ingot', "techage:ta4_wlanchip", 'default:steel_ingot'},
},
})

View File

@ -455,4 +455,5 @@ def run_all_subfolders(folder):
update_folder(modfolder + "/")
_argv.append("--sort")
main()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -88,8 +88,8 @@ Since the levels build on each other, all ages have to be run through one after
| Oil Drill Box | | 16 | |
| Oil Pumpjack | | 16 | |
| TA3 Oil Reboiler | | 14 | |
| TA4 Electrolyzer | | | 30 |
| TA4 Fuel Cell | | | 25 |
| TA4 Electrolyzer | | | 35 |
| TA4 Fuel Cell | | | 34 |
| TA4 Reactor | - | - | 8 |
| Steam Engine | 25 | | |
| Coal Power Station | | 80 | |

View File

@ -196,9 +196,9 @@ Strom kann mittels Elektrolyse in Wasserstoff und Sauerstoff aufgespalten werden
Damit können Stromspitzen oder ein Überangebot an Strom in Wasserstoff umgewandelt und so gespeichert werden.
Im Spiel kann Strom mit Hilfe des Elektrolyseurs in Wasserstoff und Wasserstoff über die Brennstoffzelle wieder in Strom umgewandelt werden.
Damit kann Strom (in Form von Wasserstoff) nicht nur in Tanks gelagert, sonder mit Hilfe von Gasflaschen auch mit Wagen (carts) transportiert werden.
Damit kann Strom (in Form von Wasserstoff) nicht nur in Tanks gelagert, sonder mit dem Tankwagen auch transportiert werden.
Die Umwandlung von Strom in Wasserstoff und zurück ist aber verlustbehaftet. Von 100 Einheiten Strom kommen nach der Umwandlung in Wasserstoff und zurück nur 83 Einheiten Strom wieder raus.
Die Umwandlung von Strom in Wasserstoff und zurück ist aber verlustbehaftet. Von 100 Einheiten Strom kommen nach der Umwandlung in Wasserstoff und zurück nur 95 Einheiten Strom wieder raus.
[ta4_hydrogen|image]
@ -208,7 +208,7 @@ Die Umwandlung von Strom in Wasserstoff und zurück ist aber verlustbehaftet. Vo
Der Elektrolyseur wandelt Strom in Wasserstoff um.
Es muss von links mit Strom versorgt werden. Rechts kann Wasserstoff über Röhren und Pumpen entnommen werden.
Der Elektrolyseur kann bis zu 30 ku an Strom aufnehmen und generiert dann alle 4 s ein Wasserstoff Item.
Der Elektrolyseur kann bis zu 35 ku an Strom aufnehmen und generiert dann alle 4 s ein Wasserstoff Item.
In den Elektrolyseur passen 200 Einheiten Wasserstoff.
[ta4_electrolyzer|image]
@ -219,7 +219,11 @@ In den Elektrolyseur passen 200 Einheiten Wasserstoff.
Die Brennstoffzelle wandelt Wasserstoff in Strom um.
Sie muss von links per Pumpe mit Wasserstoff versorgt werden. Rechts ist der Stromanschluss.
Die Brennstoffzelle kann bis zu 25 ku an Strom abgeben und benötigt dazu alle 4 s ein Wasserstoff Item.
Die Brennstoffzelle kann bis zu 34 ku an Strom abgeben und benötigt dazu alle 4 s ein Wasserstoff Item.
Normalerweise arbeitet die Brennstoffzelle als Generator der Kategorie 2 (wie auch anderen Speichersystemen).
In diesem Fall können keine anderen Blöcke der Kategorie 2 wie der Akku-Block geladen werden.
Über das Kontrollkästchen kann die Brennstoffzelle jedoch auch als Generator der Kategorie 1 eingesetzt werden.
[ta4_fuelcell|image]

View File

@ -196,9 +196,9 @@ Electrolysis can be used to split electricity into hydrogen and oxygen. On the o
This enables current peaks or an excess supply of electricity to be converted into hydrogen and thus stored.
In the game, electricity can be converted back into electricity via the fuel cell using the electrolyzer in hydrogen and hydrogen.
This means that electricity (in the form of hydrogen) can not only be stored in tanks, but can also be transported with carts using gas cylinders.
This means that electricity (in the form of hydrogen) can not only be stored in tanks, but also transported by means of the tank cart.
However, the conversion of electricity into hydrogen and back is lossy. Out of 100 units of electricity, only 83 units of electricity come out after the conversion to hydrogen and back.
However, the conversion of electricity into hydrogen and back is lossy. Out of 100 units of electricity, only 95 units of electricity come out after the conversion to hydrogen and back.
[ta4_hydrogen|image]
@ -208,7 +208,7 @@ However, the conversion of electricity into hydrogen and back is lossy. Out of 1
The electrolyzer converts electricity into hydrogen.
It must be powered from the left. On the right, hydrogen can be extracted via pipes and pumps.
The electrolyzer can draw up to 30 ku of electricity and then generates a hydrogen item every 4 s.
The electrolyzer can draw up to 35 ku of electricity and then generates a hydrogen item every 4 s.
200 units of hydrogen fit into the electrolyzer.
[ta4_electrolyzer|image]
@ -219,7 +219,10 @@ The electrolyzer can draw up to 30 ku of electricity and then generates a hydrog
The fuel cell converts hydrogen into electricity.
It must be supplied with hydrogen from the left by a pump. The power connection is on the right.
The fuel cell can deliver up to 25 ku of electricity and needs a hydrogen item every 4 s.
The fuel cell can deliver up to 34 ku of electricity and needs a hydrogen item every 4 s.
Usually the fuel cell works as a category 2 generator (like other storage systems).
In this case, no other category 2 blocks such as the battery block can be charged. However, the fuel cell can also be used as a category 1 generator via the check box.
[ta4_fuelcell|image]

View File

@ -45,7 +45,8 @@ local Generators = {
S("Wind turbine"),
S("Accu Box"),
S("Energy storage"),
S("Fuel cell"),
S("Fuel cell cat. 1"),
S("Fuel cell cat. 2"),
S("Electrolyzer"),
S("TA2 Generator"),
}
@ -53,7 +54,8 @@ local Generators = {
local Storage = {
[S("Accu Box")] = true,
[S("Energy storage")] = true,
[S("Fuel cell")] = true,
[S("Fuel cell cat. 1")] = true,
[S("Fuel cell cat. 2")] = true,
[S("Electrolyzer")] = true,
}
@ -64,8 +66,9 @@ local GeneratorPerformances = {
70, -- S("Wind turbine")
10, -- S("Accu Box")
60, -- S("Energy storage")
25, -- S("Fuel cell")
30, -- S("Electrolyzer")
33, -- S("Fuel cell cat. 1")
34, -- S("Fuel cell cat. 2")
35, -- S("Electrolyzer")
24, -- S("TA2 Generator")
}
@ -202,11 +205,16 @@ local function calc_network_data_type(pos, nvm, gentype)
pow_max2, pow_curr2, num_nodes2 = consumer_data(netw.con2, nominal)
pow_stored1 = storage_load(netw.con2, Gentype2Maxvalue[gentype]).." %"
pow_stored2 = pow_stored1
elseif gentype == S("Fuel cell") then
elseif gentype == S("Fuel cell cat. 2") then
pow_max1, pow_curr1, num_nodes1 = generator_data(netw.gen2, nominal)
pow_max2, pow_curr2, num_nodes2 = 0, 0, 0
pow_stored1 = storage_load(netw.gen2, Gentype2Maxvalue[gentype]).." %"
pow_stored2 = "-"
elseif gentype == S("Fuel cell cat. 1") then
pow_max1, pow_curr1, num_nodes1 = generator_data(netw.gen1, nominal)
pow_max2, pow_curr2, num_nodes2 = 0, 0, 0
pow_stored1 = storage_load(netw.gen1, Gentype2Maxvalue[gentype]).." %"
pow_stored2 = "-"
elseif gentype == S("Electrolyzer") then
pow_max1, pow_curr1, num_nodes1 = 0, 0, 0
pow_max2, pow_curr2, num_nodes2 = consumer_data(netw.con2, nominal)
@ -336,7 +344,7 @@ end
local function formspec2(pos, mem)
local meta = M(pos)
local output = meta:get_string("output")
local command = mem.cmnd or ""
local command = mem.cmnd or "help"
output = minetest.formspec_escape(output)
output = output:gsub("\n", ",")