several bugs fixed here and there

master
Joachim Stolberg 2020-02-17 22:46:29 +01:00
parent 87db6be6fc
commit 4f25578f16
25 changed files with 166 additions and 490 deletions

View File

@ -79,7 +79,7 @@ function techage.fuel.can_dig(pos, player)
nvm.liquid = nvm.liquid or {}
nvm.liquid.amount = nvm.liquid.amount or 0
local inv = M(pos):get_inventory()
return inv:is_empty("fuel") and nvm.liquid.amount == 0
return not inv or inv:is_empty("fuel") and nvm.liquid.amount == 0
end
function techage.fuel.on_rightclick(pos, node, clicker)

View File

@ -48,8 +48,7 @@ end
function techage.liquid.is_empty(pos)
local nvm = techage.get_nvm(pos)
local inv = minetest.get_meta(pos):get_inventory()
return inv:is_empty("src") and inv:is_empty("dst") and (not nvm.liquid or (nvm.liquid.amount or 0) == 0)
return not nvm.liquid or (nvm.liquid.amount or 0) == 0
end
techage.liquid.recv_message = {
@ -89,6 +88,7 @@ local function get_full_container(empty_container, inv_item)
return ContainerDef[empty_container] and ContainerDef[empty_container][inv_item]
end
-- used by filler
local function fill_container(pos, inv, empty_container)
local nvm = techage.get_nvm(pos)
nvm.liquid = nvm.liquid or {}
@ -112,6 +112,7 @@ local function fill_container(pos, inv, empty_container)
return false
end
-- used by filler
local function empty_container(pos, inv, full_container)
local nvm = techage.get_nvm(pos)
nvm.liquid = nvm.liquid or {}
@ -135,7 +136,7 @@ local function empty_container(pos, inv, full_container)
return false
end
-- check if the given empty container can be replaced by a full
-- check if the wielded empty container can be replaced by a full
-- container and added to the players inventory
local function fill_on_punch(nvm, empty_container, item_count, puncher)
nvm.liquid = nvm.liquid or {}
@ -176,10 +177,17 @@ local function fill_on_punch(nvm, empty_container, item_count, puncher)
end
end
local function empty_on_punch(pos, nvm, full_container)
-- check of the wielded full container can be emptied into the tank
local function empty_on_punch(pos, nvm, full_container, item_count)
nvm.liquid = nvm.liquid or {}
nvm.liquid.amount = nvm.liquid.amount or 0
local lqd_def = get_liquid_def(full_container)
local lqd_def
-- handle legacy items
if full_container == "techage:hydrogen" or full_container == "techage:oil_source" then
lqd_def = {inv_item = full_container, size = item_count, container = ""}
else
lqd_def = get_liquid_def(full_container)
end
local ndef_lqd = LQD(pos)
if lqd_def and ndef_lqd then
local tank_size = ndef_lqd.capa or 0
@ -204,7 +212,7 @@ function techage.liquid.on_punch(pos, node, puncher, pointed_thing)
local wielded_item = puncher:get_wielded_item():get_name()
local item_count = puncher:get_wielded_item():get_count()
local new_item = fill_on_punch(nvm, wielded_item, item_count, puncher)
or empty_on_punch(pos, nvm, wielded_item)
or empty_on_punch(pos, nvm, wielded_item, item_count)
if new_item then
puncher:set_wielded_item(new_item)
M(pos):set_string("formspec", techage.fuel.formspec(pos, nvm))

View File

@ -212,7 +212,7 @@ techage.register_node({"techage:ta4_generator", "techage:ta4_generator_on"}, {
on_transfer = function(pos, in_dir, topic, payload)
local nvm = techage.get_nvm(pos)
if topic == "trigger" then
print("trigger", nvm.provided)
--print("trigger", nvm.provided)
nvm.heatexchanger_trigger = 3
if nvm.running then
return nvm.provided or 0.1

View File

@ -1,404 +0,0 @@
--[[
TechAge
=======
Copyright (C) 2019-2020 Joachim Stolberg
GPL v3
See LICENSE.txt for more information
TA4 Heat Exchanger
]]--
-- for lazy programmers
local S2P = minetest.string_to_pos
local P2S = minetest.pos_to_string
local M = minetest.get_meta
local S = techage.S
local CYCLE_TIME = 2
local PWR_PERF = 60
local GRVL_CAPA = 700
local PWR_CAPA = {
[3] = GRVL_CAPA * 3 * 3 * 3, -- 18900 Cyc = 630 min = 31.5 Tage bei einem ku, oder 31,5 * 24 kuh = 756 kuh = 12,6 h bei 60 ku
[5] = GRVL_CAPA * 5 * 5 * 5, -- ~2.5 days
[7] = GRVL_CAPA * 7 * 7 * 7, -- ~6 days
}
local Cable = techage.ElectricCable
local Pipe = techage.LiquidPipe
local power = techage.power
local function in_range(val, min, max)
if val < min then return min end
if val > max then return max end
return val
end
-- commands for 'techage:heatexchanger1'
local function turbine_cmnd(pos, cmnd)
return techage.transfer(
pos,
"R", -- outdir
cmnd, -- topic
nil, -- payload
Pipe, -- Pipe
{"techage:ta4_turbine", "techage:ta4_turbine_on"})
end
local function heatexchanger3_cmnd(pos, cmnd)
return techage.transfer(
{x = pos.x, y = pos.y + 1, z = pos.z},
"U", -- outdir
cmnd, -- topic
nil, -- payload
nil, -- Pipe
{"techage:heatexchanger3"})
end
local function inlet_cmnd(pos, cmnd, payload)
return techage.transfer(
pos,
"L", -- outdir
cmnd, -- topic
payload, -- payload
Pipe, -- Pipe
{"techage:ta4_pipe_inlet"})
end
local function play_sound(pos)
local mem = techage.get_mem(pos)
if not mem.handle or mem.handle == -1 then
mem.handle = minetest.sound_play("techage_booster", {
pos = pos,
gain = 0.5,
max_hear_distance = 10,
loop = true})
if mem.handle == -1 then
minetest.after(1, play_sound, pos)
end
end
end
local function stop_sound(pos)
local mem = techage.get_mem(pos)
if mem.handle then
minetest.sound_stop(mem.handle)
mem.handle = nil
end
end
local function swap_node(pos, name)
local node = techage.get_node_lvm(pos)
if node.name == name then
return
end
node.name = name
minetest.swap_node(pos, node)
end
local function charging(pos, nvm, is_charging)
if nvm.capa >= nvm.capa_max then
return
end
if is_charging ~= nvm.was_charging then
nvm.was_charging = is_charging
if is_charging then
turbine_cmnd(pos, "stop")
play_sound(pos)
else
turbine_cmnd(pos, "start")
stop_sound(pos)
end
elseif is_charging then
play_sound(pos)
end
end
local function delivering(pos, nvm, delivered)
if nvm.capa <= 0 then
return
end
if delivered ~= nvm.had_delivered then
nvm.had_delivered = delivered
if delivered > 0 then
turbine_cmnd(pos, "start")
elseif delivered == 0 then
turbine_cmnd(pos, "stop")
end
end
end
local function glowing(pos, nvm, should_glow)
if nvm.win_pos then
if should_glow then
swap_node(nvm.win_pos, "techage:glow_gravel")
else
swap_node(nvm.win_pos, "default:gravel")
end
end
end
local function formspec(self, pos, nvm)
return "size[5,3]"..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
"image[0,0.5;1,2;"..techage.power.formspec_power_bar(nvm.capa_max, nvm.capa).."]"..
"label[0.2,2.5;Load]"..
"button[1.1,1;1.8,1;update;"..S("Update").."]"..
"image_button[3,1;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"..
"image[4,0.5;1,2;"..techage.power.formspec_load_bar(-(nvm.delivered or 0), PWR_PERF).."]"..
"label[4.2,2.5;Flow]"
end
local function error_info(pos, err)
local own_num = M(pos):get_string("node_number")
local pos1 = {x = pos.x, y = pos.y + 1, z = pos.z}
M(pos1):set_string("infotext", S("TA4 Heat Exchanger").." "..own_num.." : "..err)
end
local function can_start(pos, nvm, state)
if turbine_cmnd(pos, "power") then
local diameter = inlet_cmnd(pos, "diameter")
if diameter then
nvm.capa_max = PWR_CAPA[tonumber(diameter)] or 0
if nvm.capa_max ~= 0 then
local owner = M(pos):get_string("owner") or ""
if inlet_cmnd(pos, "volume", owner) then
error_info(pos, "")
return true
else
error_info(pos, "storage volume error")
return false
end
else
error_info(pos, "wrong storage diameter: "..diameter)
return false
end
else
error_info(pos, "inlet/pipe error")
return false
end
else
error_info(pos, "power network error")
return false
end
return false
end
local function start_node(pos, nvm, state)
nvm.running = true
nvm.delivered = 0
nvm.was_charging = true
nvm.had_delivered = nil
play_sound(pos)
nvm.win_pos = inlet_cmnd(pos, "window")
power.secondary_start(pos, nvm, PWR_PERF, PWR_PERF)
end
local function stop_node(pos, nvm, state)
nvm.running = false
nvm.delivered = 0
turbine_cmnd(pos, "stop")
power.secondary_stop(pos, nvm)
end
local State = techage.NodeStates:new({
node_name_passive = "techage:heatexchanger1",
cycle_time = CYCLE_TIME,
standby_ticks = 0,
can_start = can_start,
start_node = start_node,
stop_node = stop_node,
})
local function node_timer(pos, elapsed)
local nvm = techage.get_nvm(pos)
if nvm.running and turbine_cmnd(pos, "power") then
nvm.capa = nvm.capa or 0
nvm.capa_max = nvm.capa_max or 0
nvm.delivered = nvm.delivered or 0
nvm.delivered = power.secondary_alive(pos, nvm, nvm.capa, nvm.capa_max)
nvm.capa = nvm.capa - nvm.delivered
nvm.capa = in_range(nvm.capa, 0, nvm.capa_max)
glowing(pos, nvm, nvm.capa > nvm.capa_max * 0.8)
charging(pos, nvm, nvm.delivered < 0)
delivering(pos, nvm, nvm.delivered)
end
return nvm.running
end
local function can_dig(pos, player)
local nvm = techage.get_nvm(pos)
return not nvm.running
end
local function orientate_node(pos, name)
local node = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z})
if node.name == name then
local param2 = node.param2
node = minetest.get_node(pos)
node.param2 = param2
minetest.swap_node(pos, node)
else
minetest.remove_node(pos)
return true
end
end
-- Top
minetest.register_node("techage:heatexchanger3", {
description = S("TA4 Heat Exchanger 3"),
tiles = {
-- up, down, right, left, back, front
"techage_filling_ta4.png^techage_frame_ta4_top.png",
"techage_hole_ta4.png",
"techage_filling_ta4.png^techage_frameT_ta4.png^techage_appl_hole_pipe.png",
"techage_filling_ta4.png^techage_frameT_ta4.png^techage_appl_hole_pipe.png",
"techage_filling_ta4.png^techage_frameT_ta4.png^techage_appl_ribsT.png",
"techage_filling_ta4.png^techage_frameT_ta4.png^techage_appl_ribsT.png",
},
after_place_node = function(pos, placer)
return orientate_node(pos, "techage:heatexchanger2")
end,
paramtype2 = "facedir",
groups = {crumbly = 2, cracky = 2, snappy = 2},
on_rotate = screwdriver.disallow,
is_ground_content = false,
sounds = default.node_sound_metal_defaults(),
})
-- Middle node with the formspec from the bottom node
minetest.register_node("techage:heatexchanger2", {
description = S("TA4 Heat Exchanger 2"),
tiles = {
-- up, down, right, left, back, front
"techage_hole_ta4.png",
"techage_hole_ta4.png",
"techage_filling_ta4.png^techage_frameM_ta4.png^techage_appl_tes_turb.png",
"techage_filling_ta4.png^techage_frameM_ta4.png^techage_appl_tes_core.png",
"techage_filling_ta4.png^techage_frameM_ta4.png^techage_appl_ribsB.png",
"techage_filling_ta4.png^techage_frameM_ta4.png^techage_appl_ribsB.png",
},
selection_box = {
type = "fixed",
fixed = {-1/2, -1.5/2, -1/2, 1/2, 1/2, 1/2},
},
after_place_node = function(pos, placer)
if orientate_node(pos, "techage:heatexchanger1") then
return true
end
local pos1 = {x = pos.x, y = pos.y - 1, z = pos.z}
local nvm = techage.get_nvm(pos1)
local own_num = M(pos1):get_string("node_number")
M(pos):set_string("formspec", formspec(State, pos1, nvm))
M(pos):set_string("infotext", S("TA4 Heat Exchanger").." "..own_num)
end,
on_rightclick = function(pos)
local pos1 = {x = pos.x, y = pos.y - 1, z = pos.z}
local nvm = techage.get_nvm(pos1)
M(pos):set_string("formspec", formspec(State, pos1, nvm))
end,
on_receive_fields = function(pos, formname, fields, player)
if minetest.is_protected(pos, player:get_player_name()) then
return
end
local pos1 = {x = pos.x, y = pos.y - 1, z = pos.z}
local nvm = techage.get_nvm(pos1)
State:state_button_event(pos1, nvm, fields)
M(pos):set_string("formspec", formspec(State, pos1, nvm))
end,
paramtype2 = "facedir",
groups = {crumbly = 2, cracky = 2, snappy = 2},
on_rotate = screwdriver.disallow,
is_ground_content = false,
sounds = default.node_sound_metal_defaults(),
})
-- Base
minetest.register_node("techage:heatexchanger1", {
description = S("TA4 Heat Exchanger 1"),
tiles = {
-- up, down, right, left, back, front
"techage_hole_ta4.png^techage_appl_arrow_white.png",
"techage_filling_ta4.png^techage_frame_ta4.png",
"techage_filling_ta4.png^techage_frameB_ta4.png^techage_appl_hole_pipe.png",
"techage_filling_ta4.png^techage_frameB_ta4.png^techage_appl_hole_pipe.png",
"techage_filling_ta4.png^techage_frameB_ta4.png^techage_appl_hole_electric.png",
"techage_filling_ta4.png^techage_frameB_ta4.png^techage_appl_hole_electric.png",
},
on_timer = node_timer,
paramtype2 = "facedir",
groups = {crumbly = 2, cracky = 2, snappy = 2},
on_rotate = screwdriver.disallow,
is_ground_content = false,
sounds = default.node_sound_metal_defaults(),
})
techage.power.register_node({"techage:heatexchanger1"}, {
conn_sides = {"F", "B"},
power_network = Cable,
after_place_node = function(pos, placer)
local nvm = techage.get_nvm(pos)
local meta = M(pos)
local own_num = techage.add_node(pos, "techage:heatexchanger1")
meta:set_string("owner", placer:get_player_name())
State:node_init(pos, nvm, own_num)
nvm.capa = 0
end,
})
Pipe:add_secondary_node_names({"techage:heatexchanger1", "techage:heatexchanger3"})
-- for logical communication
techage.register_node({"techage:heatexchanger1"}, {
on_recv_message = function(pos, src, topic, payload)
local nvm = techage.get_nvm(pos)
if topic == "load" then
return techage.power.percent(nvm.capa_max, nvm.capa)
elseif topic == "size" then
return (nvm.capa_max or 0) / GRVL_CAPA
else
return State:on_receive_message(pos, topic, payload)
end
end,
})
minetest.register_craft({
output = "techage:heatexchanger1",
recipe = {
{"default:tin_ingot", "techage:electric_cableS", "default:steel_ingot"},
{"techage:ta4_pipeS", "basic_materials:gear_steel", "techage:ta4_pipeS"},
{"", "techage:baborium_ingot", ""},
},
})
minetest.register_craft({
output = "techage:heatexchanger2",
recipe = {
{"default:tin_ingot", "", "default:steel_ingot"},
{"", "techage:ta4_wlanchip", ""},
{"", "techage:baborium_ingot", ""},
},
})
minetest.register_craft({
output = "techage:heatexchanger3",
recipe = {
{"default:tin_ingot", "dye:blue", "default:steel_ingot"},
{"techage:ta4_pipeS", "basic_materials:gear_steel", "techage:ta4_pipeS"},
{"", "techage:baborium_ingot", ""},
},
})

View File

@ -135,6 +135,8 @@ end
local function tubelib2_on_update2(pos, outdir, tlib2, node)
power.update_network(pos, outdir, tlib2)
local nvm = techage.get_nvm(pos)
nvm.running = false
end
local function can_start(pos, nvm)
@ -179,7 +181,7 @@ local function node_timer(pos, elapsed)
nvm.needed = taken - given
nvm.capa = in_range(nvm.capa + nvm.needed, 0, nvm.capa_max)
glowing(pos, nvm, nvm.capa > nvm.capa_max * 0.8)
print("node_timer TES "..P2S(pos), nvm.needed, nvm.capa, nvm.capa_max)
--print("node_timer TES "..P2S(pos), nvm.needed, nvm.capa, nvm.capa_max)
return true
end

View File

@ -8,7 +8,7 @@
GPL v3
See LICENSE.txt for more information
TA4 Electrolyzer v2
TA4 Electrolyzer
]]--
@ -64,8 +64,8 @@ local function stop_node(pos, nvm, state)
end
local State = techage.NodeStates:new({
node_name_passive = "techage:ta4_electrolyzer2",
node_name_active = "techage:ta4_electrolyzer2_on",
node_name_passive = "techage:ta4_electrolyzer",
node_name_active = "techage:ta4_electrolyzer_on",
cycle_time = CYCLE_TIME,
standby_ticks = STANDBY_TICKS,
formspec_func = formspec,
@ -90,7 +90,7 @@ end
local function generating(pos, nvm)
nvm.num_pwr_units = nvm.num_pwr_units or 0
nvm.countdown = nvm.countdown or 0
print("electrolyzer", nvm.running, nvm.taken, nvm.num_pwr_units, nvm.liquid.amount)
--print("electrolyzer", nvm.running, nvm.taken, nvm.num_pwr_units, nvm.liquid.amount)
if nvm.taken > 0 then
nvm.num_pwr_units = nvm.num_pwr_units + (nvm.taken or 0)
if nvm.num_pwr_units >= PWR_UNITS_PER_HYDROGEN_ITEM then
@ -140,7 +140,7 @@ local function after_place_node(pos)
local nvm = techage.get_nvm(pos)
nvm.running = false
nvm.num_pwr_units = 0
local number = techage.add_node(pos, "techage:ta4_electrolyzer2")
local number = techage.add_node(pos, "techage:ta4_electrolyzer")
State:node_init(pos, nvm, number)
local node = minetest.get_node(pos)
M(pos):set_int("in_dir", techage.side_to_indir("R", node.param2))
@ -196,7 +196,7 @@ local liquid_def = {
end
}
minetest.register_node("techage:ta4_electrolyzer2", {
minetest.register_node("techage:ta4_electrolyzer", {
description = S("TA4 Electrolyzer"),
tiles = {
-- up, down, right, left, back, front
@ -231,7 +231,7 @@ minetest.register_node("techage:ta4_electrolyzer2", {
is_ground_content = false,
})
minetest.register_node("techage:ta4_electrolyzer2_on", {
minetest.register_node("techage:ta4_electrolyzer_on", {
description = S("TA4 Electrolyzer"),
tiles = {
-- up, down, right, left, back, front
@ -278,12 +278,12 @@ minetest.register_node("techage:ta4_electrolyzer2_on", {
light_source = 6,
})
Cable:add_secondary_node_names({"techage:ta4_electrolyzer2", "techage:ta4_electrolyzer2_on"})
Pipe:add_secondary_node_names({"techage:ta4_electrolyzer2", "techage:ta4_electrolyzer2_on"})
techage.register_node({"techage:ta4_electrolyzer2", "techage:ta4_electrolyzer2_on"}, liquid.recv_message)
Cable:add_secondary_node_names({"techage:ta4_electrolyzer", "techage:ta4_electrolyzer_on"})
Pipe:add_secondary_node_names({"techage:ta4_electrolyzer", "techage:ta4_electrolyzer_on"})
techage.register_node({"techage:ta4_electrolyzer", "techage:ta4_electrolyzer_on"}, liquid.recv_message)
minetest.register_craft({
output = "techage:ta4_electrolyzer2",
output = "techage:ta4_electrolyzer",
recipe = {
{'default:steel_ingot', 'dye:blue', 'default:steel_ingot'},
{'techage:electric_cableS', 'default:glass', 'techage:tubeS'},

View File

@ -83,11 +83,6 @@ local function has_hydrogen(nvm)
return nvm.num_pwr_units > 0 or (nvm.liquid.amount > 0 and nvm.liquid.name == "techage:hydrogen")
end
local function contains_hydrogen(pos)
local inv = M(pos):get_inventory()
return inv:contains_item("src", ItemStack("techage:hydrogen"))
end
local function consuming(pos, nvm)
if nvm.num_pwr_units <= 0 then
nvm.num_pwr_units = nvm.num_pwr_units + PWR_UNITS_PER_HYDROGEN_ITEM
@ -99,7 +94,7 @@ end
-- converts hydrogen into power
local function node_timer(pos, elapsed)
local nvm = techage.get_nvm(pos)
print("fuelcell", nvm.running, nvm.given, nvm.num_pwr_units)
--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)

View File

@ -36,18 +36,18 @@ minetest.register_craftitem("techage:gasoline", {
})
minetest.register_craftitem("techage:gas", {
description = S("TA3 Gas"),
description = S("TA3 Propane"),
inventory_image = "techage_gas_inv.png",
})
minetest.register_craftitem("techage:ta3_cylinder_small_gas", {
description = S("Gas Cylinder Small"),
description = S("Propane Cylinder Small"),
inventory_image = "techage_gas_cylinder_small.png^[colorize:#e51818:120",
stack_max = 1,
})
minetest.register_craftitem("techage:ta3_cylinder_large_gas", {
description = S("Gas Cylinder Large"),
description = S("Propane Cylinder Large"),
inventory_image = "techage_gas_cylinder_large.png^[colorize:#e51818:120",
stack_max = 1,
})

View File

@ -46,6 +46,7 @@ end
-- store network ID on each pump like node
local function store_netID(pos, outdir, netID)
networks.connection_walk(pos, outdir, Pipe, function(pos, indir, node)
print("store_netID", dump(indir))
local ntype = net_def(pos, "pipe2").ntype
if ntype and ntype == "pump" then
local nvm = techage.get_nvm(pos)
@ -84,6 +85,7 @@ local function get_netID(pos, outdir)
end
local function get_network_table(pos, outdir, ntype)
print("get_network_table", outdir)
local netID = get_netID(pos, outdir)
if netID then
local netw = networks.get_network("pipe2", netID)

View File

@ -65,6 +65,7 @@ local State4 = techage.NodeStates:new({
local function pumping(pos, nvm, state, capa)
local outdir = M(pos):get_int("outdir")
local starter = get_starter_name(pos)
print("pumping", outdir, Flip[outdir])
local taken, name = liquid.take(pos, Flip[outdir], nil, capa, starter)
if taken > 0 then
local leftover = liquid.put(pos, outdir, name, taken, starter)

View File

@ -119,6 +119,8 @@ Power Source=Stromquelle
Primary available=Primär verfügbar
Primary needed=Primär benötigt
Priv missing=Rechte fehlen
Propane Cylinder Large=Propangasflasche groß
Propane Cylinder Small=Propangasflasche klein
Pumpjack=Ölpumpe
Punch the block to make the area visible.=Schlage auf den Bock um den Bereich anzuzeigen.
Pusher=Schieber
@ -214,7 +216,6 @@ TA3 Fuel Oil=TA3 Schweröl
TA3 Fuel Oil Barrel=TA3 Schwerölfass
TA3 Fuel Oil Canister=TA3 Schwerölkanister
TA3 Furnace Oil Burner=TA3 Ofen-Ölbrenner
TA3 Gas=TA3 Gas
TA3 Gasoline=TA3 Benzin
TA3 Gasoline Barrel=TA3 Benzinfass
TA3 Gasoline Canister=TA3 Benzinkanister
@ -236,6 +237,7 @@ TA3 Player Detector=TA3 Spieler Detektor
TA3 Power Station Firebox=TA3 Kraftwerks-Feuerbox
TA3 Power Station Oil Burner=TA3 Kraftwerks-Ölbrenner
TA3 Power Terminal=TA3 Strom Terminal
TA3 Propane=TA3 Propan
TA3 Protected Chest=TA3 Gesicherte Kiste
TA3 Pump=TA3 Pumpe
TA3 Repeater=TA3 Wiederholer

View File

@ -1,9 +1,11 @@
# textdomain: techage
#### TA3 Terminal ####@n@nSend commands to your machines@nand output text messages from your@nmachines to the Terminal.@n@nCommand syntax:@n cmd <num> <cmnd>@n@nexample: cmd 181 on@n<num> is the number of the node to which the command is sent@n'on' is the command to turn machines/nodes on@nFurther commands can be retrieved by clicking on@nmachines/nodes with the Techage Info Tool.@n@nLocal commands:@n- clear @= clear screen@n- help @= this message@n- pub @= switch to public use@n- priv @= switch to private use@nTo program a user button with a command:@n set <button-num> <button-text> <command>@ne.g. 'set 1 ON cmd 123 on'@n=
(Num. nodes loaded / max. : Power current / max.)=(Anz. Blöcke geladen / max. : Strom aktuell / max.)
Active:=Aktiv:
All nodes:=Alle Blöcke:
Allow to dig/place Techage power lines nearby power poles=Erlaubt TODO
Aluminum=Aluminium
Area already loaded or max. number of Forceload Blocks reached!=Bereich bereits geladen oder maximale Anzahl von Forceload Blöcken erreicht!
Ash=Asche
Autocrafter=Autocrafter
Axle Power Source=Achsenkraftquelle
@ -29,30 +31,56 @@ Biome=Biom
Block configured items for open ports=Blockiere konfigurierte Gegenstände für offene Ausgänge
Build derrick=Errichte Ölturm
Compressed Gravel=Komprimiertes Kies
Consum. 1=Konsum. 1
Consum. 2=Konsum. 2
Depth=Tiefe
Digging depth=Grabungstiefe
Dirt with Ash=Erde mit Asche
Distributor=Verteiler
Doser=Dosierer
Drill Bit=Bohrstange
Drill area is protected=Bohrbereich ist geschützt
Drill bits missing=Bohrgestänge fehlt
Ele Power Source=Ele Kraftquelle
Electricity=Strom
Electrolyzer=Eletrolyseur
Electronic Fab=Elektronikfabrik
Enter=Eingeben
Epoxide Resin=Epoxidharz
Epoxide Resin Barrel=Epoxidharz Fass
Epoxide Resin Canister=Epoxidharz Kanister
Error=Fehler
Firebox=Feuerkasten
Flint and Iron=Flint and Iron
Flowing Oil=Fließendes Öl
Flywheel=Schwungrad
Force order of filter items=Erzwinge Reihenfolge
Fuel Cell=Brennstoffzelle
Fuel Menu=Brennstoff Menü
Furnace Top=Ofenoberteil
Gas Cylinder Large=Gasflasche groß
Gas Cylinder Small=Gasflasche klein
Genera. 1=Genera. 1
Genera. 2=Genera. 2
Generator=Generator
Gibbsite Powder=Gibbsit Pulver
Gravel Rinser=Kiesspüler
Gravel Sieve=Kiessieb
Grinder=Mühle
Grinding=Mahlen
Heat=Hitze
Heat Exchanger=Wärmetauscher
Hydrogen Cylinder Large=Wasserstoffflasche groß
Hydrogen Cylinder Small=Wasserstoffflasche klein
In use:=In Benutzung:
Insert destination node number(s)=Gebe Zielnummer(n) ein
Inverter=Wechselrichter
Leave Powder=Laub Pulver
Liquid Filler=Einfülltrichter
Liquid Sampler=Flüssigkeitensammler
Liquid Tank=Flüssigkeitstank
List of your Forceload Blocks:=Liste der Forceload Blöcke
Load=Ladung
Lye=Lauge
Lye Barrel=Lauge Fass
Lye Canister=Lauge Kanister
@ -69,25 +97,33 @@ Meridium Sword=Meridium Schwert
More water expected (2 m deep)!=Mehr Wasser erwartet (2 m tief)
Needle Powder=Nadel Pulver
Network Data=Netzwerkdaten
No network or active generator available!=Kein Stromnetz oder aktiver Generator verfügbar
No plan available=Kein Plan verfügar
No wind at this altitude!=Kein Wind auf dieser Höhe
Node owner=Blockbesitzer
Number of all nodes=Anzahl aller Blöcke
Number of nodes=Anzahl Blöcke
Oil Drill Box=Ölbohrkiste
Oil Pumpjack=Ölpumpe
Oil Source=Erdöl
Oil Tank=Öltank
Oil amount=Ölmenge
Other consumers=Weitere Verbraucher
Outp=Ergeb.
Plan=Plan
Plastic Granules=Plastikgranulat
Position=Position
Position temperature=Positionstemperatur
Power=Energie
Power AC=Wechselstrom
Power DC=Gleichstrom
Power Source=Stromquelle
Primary available=Primär verfügbar
Primary needed=Primär benötigt
Priv missing=Rechte fehlen
Pumpjack=Ölpumpe
Punch the block to make the area visible.=Schlage auf den Bock um den Bereich anzuzeigen.
Pusher=Schieber
Quarry=Steinbrecher
Quarry area is protected=Bereich ist geschützt
Recipe=Rezept
Red Mud=Rotschlamm
Red Mud Barrel=Rotschlamm Fass
@ -99,8 +135,11 @@ Save=Speichern
Secondary available=Sekundär verfügbar
Secondary needed=Sekundär benötigt
Send signal if nodes have been:=Sende ein Signal falls Blöcke:
Show all forceload blocks in a 64x64x64 range=Zeige alle Forceload Blöcke im Umkreis von 64x64x64 Blöcken
Sieved Basalt Gravel=Basaltkies gesiebt
Sieved Gravel=Gesiebtes Kies
Start level=Startebene
Start level @= 0@nmeans the same Y-level@nas the quarry is placed=Startebene @= 0@nbedeutet gleiche Y-Ebene@nwie der Steinbrecher
Steam Power Source=Dampfenergiequelle
Store=Speichern
Switched to private use!=Zur privaten Nutzung umgeschaltet
@ -116,6 +155,7 @@ TA Industrial Lamp 2=TA Industrielampe 2
TA Industrial Lamp 3=TA Industrielampe 3
TA Junction Pipe=TA Leitungskupplung
TA Lamp=TA Lampe
TA Liquid Filler=TA Einfülltrichter
TA Pipe=TA Leitung (Flüssigkeiten)
TA Power Line=TA Stromleitung
TA Power Pole=TA Strommast
@ -130,7 +170,6 @@ TA1 Burning=TA1 Brennen
TA1 Charcoal=TA1 Holzkohle
TA1 Diamond Hammer (smash stone to gravel)=TA1 Diamanthammer (zerschlage Stein zu Kies)
TA1 Gravel Sieve=TA1 Kiessieb
TA1 Hopper=TA1 Trichter
TA1 Iron Ingot=TA1 Eisenbarren
TA1 Lighter=TA1 Anzünder
TA1 Melting=TA1 Schmelzen
@ -149,7 +188,7 @@ TA2 Gearbox=TA2 Getriebeblock
TA2 Gravel Sieve=TA2 Kiessieb
TA2 Protected Chest=TA2 Gesicherte Kiste
TA2 Steam Pipe=TA2 Dampfleitung
TA3 Akku=TA3 Akku
TA3 Accu Box=Akkublock
TA3 Akku Box=TA3 Akku Block
TA3 Bitumen=TA3 Bitumen
TA3 Bitumen Barrel=TA3 Bitumenfass
@ -161,7 +200,6 @@ TA3 Button/Switch=TA3 Taster/Schalter
TA3 Canister=TA3 Kanister
TA3 Cart Detector=TA3 Wagen Detektor
TA3 Coal Power Station Firebox=TA3 Kohlekraftwerks-Feuerbox
TA3 Coal/oil=TA3 Kohle/Öl
TA3 Cooler=TA3 Kühler
TA3 Derrick=TA3 Bohrturm
TA3 Detector=TA3 Detektor
@ -175,7 +213,6 @@ TA3 Ele Fab=TA3 E-Fabrik
TA3 Fuel Oil=TA3 Schweröl
TA3 Fuel Oil Barrel=TA3 Schwerölfass
TA3 Fuel Oil Canister=TA3 Schwerölkanister
TA3 Funnel=TA3 Trichter
TA3 Furnace Oil Burner=TA3 Ofen-Ölbrenner
TA3 Gas=TA3 Gas
TA3 Gasoline=TA3 Benzin
@ -193,6 +230,7 @@ TA3 Oil Barrel=TA3 Ölfass
TA3 Oil Canister=TA3 Erdölkanister
TA3 Oil Explorer=TA3 Ölexplorer
TA3 Oil Reboiler=TA3 Aufkocher
TA3 Oil Reboiler: blocked=TA3 Aufkocher: blockiert
TA3 Oil Storage=TA3 Öl Speicher
TA3 Player Detector=TA3 Spieler Detektor
TA3 Power Station Firebox=TA3 Kraftwerks-Feuerbox
@ -213,7 +251,6 @@ TA4 Carbon Fiber=TA4 Kohlefaser
TA4 Derrick=TA4 Bohrturm
TA4 Doser=TA4 Dosierer
TA4 Electrolyzer=TA4 Elektrolyseur
TA4 Energy Storage=TA4 Energiespeicher
TA4 Fuel Cell=TA4 Brennstoffzelle
TA4 Fuel Cell Stack=Brennstoffzellenstapel
TA4 Furnace Heater=TA4 Ofenheizung
@ -235,17 +272,18 @@ TA4 Reactor Filler Pipe=TA4 Reaktor Einfüllstutzen
TA4 Reactor Stand=TA4 Reaktor Ständer
TA4 Rotor Blade=TA4 Rotorblatt
TA4 Silicon Wafer=TA4 Silizium-Wafer
TA4 Silo=Silo
TA4 Solar Carrier Module=TA4 Solar Trägermodul
TA4 Solar Carrier Module B=TA4 Solar Trägermodul U
TA4 Solar Carrier Module T=TA4 Solar Trägermodul O
TA4 Solar Inverter=TA4 Solar Wechselrichter
TA4 Solar Inverter AC=TA4 Solar Wechselrichter AC
TA4 Solar Inverter DC=TA4 Solar Wechselrichter DC
TA4 Solar Module=TA4 Solarmodul
TA4 Streetlamp Solar Cell=TA4 Straßenlampen-Solarzelle
TA4 Tank=TA4 Tank
TA4 Turbine=TA4 Turbine
TA4 WLAN Chip=TA4 WLAN Chip
TA4 Water Pump=Wasserpumpe
TA4 Wind Turbine=TA4 Windkraftanlage
TA4 Wind Turbine Nacelle=TA4 Windkraftanlagengondel
TA4 Wind Turbine Signal Lamp=TA4 Windkraftanlagenlampe
@ -261,14 +299,26 @@ TechAge Signal Lamp=TechAge Signallampe
TechAge Signal Lamp (can be colored)=TechAge Signallampe (kann gefärbt werden)
TechAge Steel Mat=TechAge Stahlmatte
TechAge Trowel=TechAge Kelle
Techage Forceload Block=Techage Forceload Block
The network is overloaded!=Das Stromnetz ist überlastet!
The network load is almost at the limit!=Das Stromnetz ist ziemlich am Limit!
The wind turbines are too close together!=Die Windkraftanlagen stehen zu eng beisammen!
Thermal=Wärme
Time=Zeit
Tiny Generator=Kleingenerator
To add fuel punch@nthis block@nwith a fuel container=Um Brennstoff nachzufüllen,@nschlage mit einem Kraftstoffbehälter@nauf den Block
To add liquids punch@nthe tank@nwith a liquid container=Um Flüssigkeit nachzufüllen,@nschlage mit einem Flüssigkeitsbehälter@nauf den Block
To add water punch@nthe boiler@nwith a water bucket=Um Wasser nachzufüllen,@nschlage mit einem Wassereimer@nauf den Block
Turned on:=Eingeschaltet:
Update=Update
Usmium Nuggets=Usmium Nuggets
Usmium Powder=Usmium Pulver
WLAN Chip=WLAN Chip
Water=Wasser
Water Barrel=Wasserfass
Water Boiler=Wasserboiler
Water Pump=Wasserpumpe
[Bucket] Lava can only be placed below sea level!=Lava kann nur unterhalb der Meerehöhe platziert werden!
[TA4 Wind Turbine]=[TA4 Windkraftanlage]
[TA] Area is protected!=[TA] Bereich ist geschützt
[TA] Derrick is being built!=[TA] Bohrturm wird errichtet
@ -279,24 +329,36 @@ Water Barrel=Wasserfass
[TechAge Programmer] Unknown node on=[TechAge Programmer] Unbekannter Block bei
[TechAge Programmer] foreign or unknown node!=[TechAge Programmer] Fremder oder unbekannter Block!
[TechAge Programmer] node programmed!=[TechAge Programmer] Nummer(n) programmiert!
[TechAge Programmer] number=[TechAge Programmer] Nummer=
[TechAge Programmer] number=[TechAge Programmer] Nummer
[TechAge Programmer] programmer reset=[TechAge Programmer] Programmer zurück gesetzt
\\[ku\\]=\\[ku\\]
accept=akzeptieren
added=hinzugefügt wird
added or removed=hinzugefügt oder entfernt wird
block can't be dug=Block kann nicht abgebaut werden
commands like: help=Kommandos wie: help
connected with=verbunden mit
did you check the plan?=hast du den Plan geprüft?
empty=leer
full=voll
inlet/pipe error=Einlass/Röhrenfehler
level@==Ebene
light=Licht
loaded=geladen
needs power=benötigt Strom
no fuel=kein Kraftstoff
no fuel or no power=kein Strom oder Brennstoff
no oil=Kein Öl
no power=kein Strom
no usable water=Kein brauchbares Wasser
off=aus
on=an
power=Strom
pos@==pos@=
power=Energie
reactor defect=Reaktor defekt
reactor defect or no power=Reaktor defekt oder kein Strom
reactor has no power=Reaktor hat keinen Strom
removed=entfernt
stopped=gestoppt
##### not used anymore #####
water temperature=Wassertemperatur
wrong storage diameter=Falscher Wärmespeicher-Durchmesser
##### not used anymore #####

View File

@ -117,6 +117,8 @@ Power Source=
Primary available=
Primary needed=
Priv missing=
Propane Cylinder Large=
Propane Cylinder Small=
Pumpjack=
Punch the block to make the area visible.=
Pusher=
@ -212,7 +214,6 @@ TA3 Fuel Oil=
TA3 Fuel Oil Barrel=
TA3 Fuel Oil Canister=
TA3 Furnace Oil Burner=
TA3 Gas=
TA3 Gasoline=
TA3 Gasoline Barrel=
TA3 Gasoline Canister=
@ -234,6 +235,7 @@ TA3 Player Detector=
TA3 Power Station Firebox=
TA3 Power Station Oil Burner=
TA3 Power Terminal=
TA3 Propane=
TA3 Protected Chest=
TA3 Pump=
TA3 Repeater=

View File

@ -87,7 +87,7 @@ local function set_given(pos, given, tlib_type)
else
def["given"] = given
end
return given
return def["given"]
end
return 0
end
@ -126,7 +126,7 @@ function techage.power.power_distribution(network, tlib_type)
network.available2 = get_generator_sum(network.gen2, tlib_type)
network.needed1 = get_consumer_sum(network.con1, tlib_type)
network.needed2 = get_consumer_sum(network.con2, tlib_type)
--print(network.available1, network.available2, network.needed1, network.needed2, network.alive)
print(network.available1, network.available2, network.needed1, network.needed2, network.alive)
-- store results
network.on = network.available1 + network.available2 >= network.needed1

View File

@ -49,7 +49,7 @@ end
-- store network ID on each node
local function store_netID(pos, outdir, netID, Cable)
networks.connection_walk(pos, outdir, Cable, function(pos, indir, node)
techage.mark_position("singleplayer", pos, "store", "", 2)-----------------------------------------
--techage.mark_position("singleplayer", pos, "store", "", 2)-----------------------------------------
--print(node.name, dump(net_def(pos, Cable.tube_type)))
if net_def(pos, Cable.tube_type) then
local nvm = techage.get_nvm(pos)
@ -63,7 +63,7 @@ end
local function delete_netID(pos, outdir, Cable)
local netID = 0
networks.connection_walk(pos, outdir, Cable, function(pos, indir, node)
techage.mark_position("singleplayer", pos, "delete", "", 2)----------------------------------------
--techage.mark_position("singleplayer", pos, "delete", "", 2)----------------------------------------
if net_def(pos, Cable.tube_type) then
local nvm = techage.get_nvm(pos)
if nvm[Cable.tube_type] and nvm[Cable.tube_type]["netID"] then
@ -108,7 +108,7 @@ function techage.power.get_power(pos, outdir, Cable, inverter)
local sum = 0
local num_inverter = 0
networks.connection_walk(pos, outdir, Cable, function(pos, indir, node)
techage.mark_position("singleplayer", pos, "get_power", "", 2)-----------------------------------------
--techage.mark_position("singleplayer", pos, "get_power", "", 2)-----------------------------------------
local def = net_def(pos, Cable.tube_type)
if def and def.on_getpower then
sum = sum + def.on_getpower(pos)

View File

@ -218,3 +218,5 @@ minetest.register_node("techage:power_terminal", {
Cable:add_secondary_node_names({"techage:power_terminal"})
minetest.register_alias("techage:ta3_power_terminal", "techage:power_terminal")

View File

@ -68,7 +68,7 @@ local function formspec(self, pos, nvm)
"box[0,-0.1;5.8,0.5;#c6e8ff]"..
"label[2.5,-0.1;"..minetest.colorize( "#000000", S("Inverter")).."]"..
power.formspec_label_bar(0, 0.8, S("Power DC"), PWR_PERF, max_power)..
power.formspec_label_bar(3.5, 0.8, S("Power AC"), PWR_PERF, delivered)..
power.formspec_label_bar(3.5, 0.8, S("Power AC"), max_power, delivered)..
arrow..
"image_button[2.5,3;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"..
"tooltip[2.5,3;1,1;"..self:get_state_tooltip(nvm).."]"

View File

@ -65,7 +65,7 @@ local function stop_sound(pos)
end
local function can_start(pos, nvm, state)
if nvm.burn_cycles > 0 or (nvm.liquid and nvm.liquid.amount and nvm.liquid.amount > 0) then
if (nvm.burn_cycles or 0) > 0 or (nvm.liquid and nvm.liquid.amount and nvm.liquid.amount > 0) then
return true
end
return S("no fuel")
@ -293,6 +293,15 @@ techage.register_node({"techage:tiny_generator", "techage:tiny_generator_on"}, {
State:on_node_load(pos)
if node.name == "techage:tiny_generator_on" then
play_sound(pos)
end
local inv = M(pos):get_inventory()
if not inv:is_empty("fuel") then
local nvm = techage.get_nvm(pos)
nvm.liquid = nvm.liquid or {}
local count = inv:get_stack("fuel", 1):get_count()
nvm.liquid.amount = (nvm.liquid.amount or 0) + count
nvm.liquid.name = "techage:gasoline"
inv:set_stack("fuel", 1, nil)
end
end,
})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 B

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 B

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 977 B

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 881 B

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 B

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 442 B

View File

@ -15,24 +15,24 @@
local M = minetest.get_meta
local S = techage.S
local Nodes2Convert = {
["techage:detector_off"] = "techage:ta3_detector_off",
["techage:detector_on"] = "techage:ta3_detector_on",
["techage:repeater"] = "techage:ta3_repeater",
["techage:button_off"] = "techage:ta3_button_off",
["techage:button_on"] = "techage:ta3_button_on",
}
local Cable1 = techage.ElectricCable
local Cable2 = techage.TA4_Cable
local Pipe2 = techage.LiquidPipe
local networks = techage.networks
local function power_data(power)
local tbl = {}
tbl[1] = S("Primary available") ..": "..(power.prim_available or 0)
tbl[2] = S("Secondary available") ..": "..(power.sec_available or 0)
tbl[3] = S("Primary needed") ..": "..(power.prim_needed or 0)
tbl[4] = S("Secondary needed") ..": "..(power.sec_needed or 0)
tbl[5] = S("Number of nodes") ..": "..(power.num_nodes or 0)
tbl[6] = ""
return table.concat(tbl, "\n")
end
local function network_check(start_pos, Cable, player_name)
local ndef = techage.networks.net_def(start_pos, Cable.tube_type)
local outdir = nil
if ndef and ndef.ntype ~= "junc" then
outdir = M(start_pos):get_int("outdir")
end
networks.connection_walk(start_pos, outdir, Cable, function(pos, indir, node)
local distance = vector.distance(start_pos, pos)
if distance < 50 then
techage.mark_position(player_name, pos, "check", "#ff0000", 6)
end
end)
end
local function read_state(itemstack, user, pointed_thing)
local pos = pointed_thing.under
@ -46,21 +46,22 @@ local function read_state(itemstack, user, pointed_thing)
if data then
local name = minetest.get_biome_name(data.biome)
minetest.chat_send_player(user:get_player_name(), S("Biome")..": "..name..", "..S("Position temperature")..": "..math.floor(data.heat).." ")
if techage.OceanIdTbl[data.biome] then
minetest.chat_send_player(user:get_player_name(), "Suitable for wind turbines")
end
end
local number = techage.get_node_number(pos)
local node = minetest.get_node(pos)
if Nodes2Convert[node.name] then
if minetest.is_protected(pos, user:get_player_name()) then
return
end
node.name = Nodes2Convert[node.name]
minetest.swap_node(pos, node)
return
end
local ndef = minetest.registered_nodes[node.name]
if ndef.networks then
local player_name = user:get_player_name()
if ndef.networks.ele1 then
network_check(pos, Cable1, player_name)
elseif ndef.networks.ele2 then
network_check(pos, Cable2, player_name)
elseif ndef.networks.pipe2 then
network_check(pos, Pipe2, player_name)
end
end
if number then
if ndef and ndef.description then
local info = techage.send_single("0", number, "info", nil)
@ -102,13 +103,7 @@ local function read_state(itemstack, user, pointed_thing)
return itemstack
end
elseif ndef and ndef.description then
if ndef.is_power_available then
techage.power.mark_nodes(user:get_player_name(), pos)
local power = ndef.is_power_available(pos)
if power then
minetest.chat_send_player(user:get_player_name(), ndef.description..":\n"..power_data(power))
end
elseif ndef.techage_info then
if ndef.techage_info then
local info = ndef.techage_info(pos) or ""
minetest.chat_send_player(user:get_player_name(), ndef.description..":\n"..info)
end