v0.15 with improvements and bugfixes

This commit is contained in:
Joachim Stolberg 2020-07-02 21:26:18 +02:00
parent 3e45868372
commit d898aeacdb
21 changed files with 322 additions and 35 deletions

View File

@ -55,30 +55,32 @@ It is highly recommended that you install the following mods, too:
* [compost](https://github.com/joe7575/compost): The garden soil is needed for the TA4 LED Grow Light based flower bed
* [techpack_stairway](https://github.com/joe7575/techpack_stairway): Ladders, stairways, and bridges for your machines
* [autobahn](https://github.com/joe7575/autobahn): Street blocks and slopes with stripes for faster traveling
* [[ta4_jetpack](https://github.com/joe7575/ta4_jetpack): A Jetpack with hydrogen as fuel and TA4 recipe
For large servers with many player, the following packages are recommended:
For large servers with many player `lsqlite3` is recommended.
The package has to be installed via [luarocks](https://luarocks.org/):
* `lua-mashal` for faster serialization/deserialization of data
* `lsqlite3` for storing node and network data
Both packages are installed via [luarocks](https://luarocks.org/):
luarocks install lua-marshal
luarocks install lsqlite3
To enable this `unsafe` packages, add 'techage' to the list of trusted mods in minetest.conf:
To enable this `unsafe` package, add 'techage' to the list of trusted mods in minetest.conf:
secure.trusted_mods = techage
For the installation of 'luarocks' (if not already available), see [luarocks](https://luarocks.org/)
If you enable 'lsqlite3' you also have to enable 'lua-marshal'. Available worlds will be converted
to 'lsqlite3' and 'lua-marshal', but there is no way back, so:
Available worlds will be converted to 'lsqlite3', but there is no way back, so:
** Never disable 'lsqlite3' and 'lua-marshal' for a world, which it was already used!**
** Never disable 'lsqlite3' for a world that has already been used!**
### History
### History
**2020-07-02 V0.15**
- pipe valve added
- growlight bugfix
- further textures to gate/door blocks added
- cement recipe bugfix
- manual improvements
**2020-06-29 V0.14**
- quarry sound bugfix
@ -128,9 +130,3 @@ to 'lsqlite3' and 'lua-marshal', but there is no way back, so:
**2019-06-16 V0.01**
- First upload
-
-
-
-

View File

@ -113,6 +113,7 @@ techage.Items = {
ta3_pipe = "techage:ta3_pipeS",
ta3_pipe_wall_entry = "techage:ta3_pipe_wall_entry",
ta3_mesecons_converter = "techage:ta3_mesecons_converter",
ta3_valve = "techage:ta3_valve_closed",
----------------------------
techage_ta4 = "techage_ta4.png",
ta4_windturbine = "techage:ta4_wind_turbine",

View File

@ -76,6 +76,7 @@ techage.manual_DE.aTitel = {
"3,TA Einfülltrichter / TA Liquid Filler",
"3,TA4 Röhre / Pipe",
"3,TA3 Rohr/Wanddurchbruch / TA3 Pipe Wall Entry Blöcke",
"3,TA Ventil / TA Valve",
"2,Öl-Förderung",
"3,TA3 Ölexplorer / Oil Explorer",
"3,TA3 Ölbohrkiste / Oil Drill Box",
@ -716,6 +717,11 @@ techage.manual_DE.aText = {
"\n"..
"\n"..
"\n",
"Für die gelben Röhren gibt es ein Ventil\\, welches über Mausklicks geöffnet und geschlossen werden kann.\n"..
"Das Ventil kann auch über on/off Kommandos angesteuert werden.\n"..
"\n"..
"\n"..
"\n",
"Um deine Generatoren und Öfen mit Öl betreiben zu können\\, muss du zuerst nach Öl suchen und einen Bohrturm errichten und danach das Öl fördern.\n"..
"Dazu dienen dir TA3 Ölexplorer\\, TA3 Ölbohrkiste und TA3 Ölpumpe.\n"..
"\n"..
@ -1212,7 +1218,9 @@ techage.manual_DE.aText = {
"\n"..
"\n"..
"\n",
"Der Reaktor dient dazu\\, die über den Destillationsturm oder aus anderen Rezepten gewonnenen Zutaten zu neuen Produkten weiter zu verarbeiten. Ein Reaktor besteht aus:\n"..
"Der Reaktor dient dazu\\, die über den Destillationsturm oder aus anderen Rezepten gewonnenen Zutaten zu neuen Produkten weiter zu verarbeiten. Der Plan links zeigt nur eine mögliche Variante\\, da die Anordnung der Silos und Tanks rezeptabhängig ist.\n"..
"\n"..
"Ein Reaktor besteht aus:\n"..
"\n"..
" - div. Tanks und Silos mit den Zutaten\\, die über Leitungen mit dem Dosierer verbunden sind\n"..
" - optional einem Reaktorsockel\\, welcher die Abfälle aus dem Reaktor ableitet (nur bei Rezepten mit zwei Ausgangsstoffen notwendig)\n"..
@ -1560,6 +1568,7 @@ techage.manual_DE.aItemName = {
"ta3_filler",
"ta3_pipe",
"ta3_pipe_wall_entry",
"ta3_valve",
"techage_ta3",
"ta3_oilexplorer",
"ta3_drillbox",
@ -1754,6 +1763,7 @@ techage.manual_DE.aPlanTable = {
"",
"",
"",
"",
"ta3_loading",
"",
"",

View File

@ -76,6 +76,7 @@ techage.manual_EN.aTitel = {
"3,TA Liquid Filler",
"3,TA4 Pipe",
"3,TA3 Pipe Wall Entry Blocks",
"3,TA Valve",
"2,Oil Production",
"3,TA3 Oil Explorer",
"3,TA3 Oil Drill Box",
@ -714,6 +715,11 @@ techage.manual_EN.aText = {
"\n"..
"\n"..
"\n",
"There is a valve for the yellow pipes\\, which can be opened and closed with a click of the mouse.\n"..
"The valve can also be controlled via on/off commands.\n"..
"\n"..
"\n"..
"\n",
"In order to run your generators and stoves with oil\\, you must first look for oil and build a derrick and then extract the oil.\n"..
"TA3 oil explorer\\, TA3 oil drilling box and TA3 pump jack are used for this.\n"..
"\n"..
@ -1202,7 +1208,10 @@ techage.manual_EN.aText = {
"\n"..
"\n"..
"\n",
"The reactor is used to process the ingredients obtained from the distillation tower or from other recipes into new products. A reactor consists of:\n"..
"The reactor is used to process the ingredients obtained from the distillation tower or from other recipes into new products.\n"..
"The plan on the left shows only one possible variant\\, since the arrangement of the silos and tanks depends on the recipe.\n"..
"\n"..
"A reactor consists of:\n"..
"\n"..
" - Various tanks and silos with the ingredients that are connected to the doser via pipes\n"..
" - optionally a reactor base\\, which discharges the waste from the reactor (only necessary for recipes with two starting materials)\n"..
@ -1550,6 +1559,7 @@ techage.manual_EN.aItemName = {
"ta3_filler",
"ta3_pipe",
"ta3_pipe_wall_entry",
"ta3_valve",
"techage_ta3",
"ta3_oilexplorer",
"ta3_drillbox",
@ -1744,6 +1754,7 @@ techage.manual_EN.aPlanTable = {
"",
"",
"",
"",
"ta3_loading",
"",
"",

View File

@ -127,6 +127,7 @@ dofile(MP.."/steam_engine/flywheel.lua")
-- Liquids I
dofile(MP.."/liquids/liquid_pipe.lua")
dofile(MP.."/liquids/valve.lua")
dofile(MP.."/liquids/node_api.lua")
dofile(MP.."/liquids/pipe_wall_entry.lua")

View File

@ -47,6 +47,7 @@ minetest.register_craft({
recipe = {
{"bucket:bucket_water", "techage:cement_powder"},
{"group:sand", "default:gravel"},
}
},
replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}},
})

View File

@ -51,8 +51,10 @@ local function node_timer(pos, elapsed)
if plant_node and plant_node.name == "air" then
if mem.grow_pos[plant_idx] then
local idx = math.floor(math.random(1, #Flowers))
minetest.set_node(plant_pos, {name = Flowers[idx]})
mem.grow_pos[plant_idx] = false
if Flowers[idx] then
minetest.set_node(plant_pos, {name = Flowers[idx]})
mem.grow_pos[plant_idx] = false
end
else
mem.grow_pos[plant_idx] = true
end

View File

@ -29,13 +29,15 @@ local Pipe = tubelib2.Tube:new({
tube_type = "pipe2",
primary_node_names = {
"techage:ta3_pipeS", "techage:ta3_pipeA",
"techage:ta3_pipe_wall_entry",
"techage:ta3_pipe_wall_entry", "techage:ta3_valve_open",
},
secondary_node_names = {},
secondary_node_names = {"techage:ta3_valve_closed"},
after_place_tube = function(pos, param2, tube_type, num_tubes)
local name = minetest.get_node(pos).name
if name == "techage:ta3_pipe_wall_entry" then
minetest.swap_node(pos, {name = "techage:ta3_pipe_wall_entry", param2 = param2})
elseif name == "techage:ta3_valve_open" then
minetest.swap_node(pos, {name = "techage:ta3_valve_open", param2 = param2})
else
minetest.swap_node(pos, {name = "techage:ta3_pipe"..tube_type, param2 = param2})
end

204
liquids/valve.lua Normal file
View File

@ -0,0 +1,204 @@
--[[
TechAge
=======
Copyright (C) 2019-2020 Joachim Stolberg
GPL v3
See LICENSE.txt for more information
TA3 Valve
]]--
local S2P = minetest.string_to_pos
local P2S = minetest.pos_to_string
local M = minetest.get_meta
local S = techage.S
local Pipe = techage.LiquidPipe
local liquid = techage.liquid
local function switch_node(pos, node)
if node.name == "techage:ta3_valve_open" then
node.name = "techage:ta3_valve_closed"
--node.name = "default:dirt"
minetest.swap_node(pos, node)
local number = M(pos):get_string("node_number")
M(pos):set_string("infotext", S("TA3 Valve closed")..": "..number)
Pipe:after_dig_tube(pos, {name = "techage:ta3_valve_open", param2 = node.param2})
elseif node.name == "techage:ta3_valve_closed" then
node.name = "techage:ta3_valve_open"
minetest.swap_node(pos, node)
local number = M(pos):get_string("node_number")
M(pos):set_string("infotext", S("TA3 Valve open")..": "..number)
Pipe:after_place_tube(pos)
end
minetest.sound_play("techage_valve", {
pos = pos,
gain = 1,
max_hear_distance = 10})
end
local function on_rightclick(pos, node, clicker)
if not minetest.is_protected(pos, clicker:get_player_name()) then
switch_node(pos, node)
end
end
--local function node_timer(pos, elapsed)
-- if techage.is_activeformspec(pos) then
-- local nvm = techage.get_nvm(pos)
-- M(pos):set_string("formspec", liquid.formspec(pos, nvm))
-- return true
-- end
-- return false
--end
--local function can_dig(pos, player)
-- if minetest.is_protected(pos, player:get_player_name()) then
-- return false
-- end
-- return liquid.is_empty(pos)
--end
--local function take_liquid(pos, indir, name, amount)
-- 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", liquid.formspec(pos, nvm))
-- end
-- return amount, name
--end
--local function put_liquid(pos, indir, name, amount)
-- -- check if it is not powder
-- local ndef = minetest.registered_craftitems[name] or {}
-- if not ndef.groups or ndef.groups.powder ~= 1 then
-- 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", liquid.formspec(pos, nvm))
-- end
-- return leftover
-- end
-- return amount
--end
minetest.register_node("techage:ta3_valve_open", {
description = S("TA Valve"),
tiles = {
"techage_gaspipe.png^techage_gaspipe_valve_open.png^[transformR90",
"techage_gaspipe.png^techage_gaspipe_valve_open.png^[transformR90",
"techage_gaspipe.png^techage_gaspipe_valve_open.png",
"techage_gaspipe.png^techage_gaspipe_valve_open.png",
"techage_gaspipe_valve_hole.png",
"techage_gaspipe_valve_hole.png",
},
after_place_node = function(pos, placer, itemstack, pointed_thing)
if not Pipe:after_place_tube(pos, placer, pointed_thing) then
minetest.remove_node(pos)
return true
end
local meta = M(pos)
local nvm = techage.get_nvm(pos)
nvm.liquid = {}
local number = techage.add_node(pos, "techage:ta3_valve_closed")
meta:set_string("node_number", number)
meta:set_string("owner", placer:get_player_name())
meta:set_string("infotext", S("TA3 Valve open")..": "..number)
return false
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Pipe:after_dig_tube(pos, oldnode, oldmetadata)
end,
on_rightclick = on_rightclick,
paramtype2 = "facedir", -- important!
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-1/8, -1/8, -4/8, 1/8, 1/8, 4/8},
{-3/16, -3/16, -3/16, 3/16, 3/16, 3/16},
},
},
on_rotate = screwdriver.disallow, -- important!
paramtype = "light",
sunlight_propagates = true,
is_ground_content = false,
groups = {crumbly = 2, cracky = 2, snappy = 2},
sounds = default.node_sound_metal_defaults(),
})
minetest.register_node("techage:ta3_valve_closed", {
description = S("TA Valve"),
tiles = {
"techage_gaspipe.png^techage_gaspipe_valve_closed.png^[transformR90",
"techage_gaspipe.png^techage_gaspipe_valve_closed.png^[transformR90",
"techage_gaspipe.png^techage_gaspipe_valve_closed.png",
"techage_gaspipe.png^techage_gaspipe_valve_closed.png",
"techage_gaspipe_valve_hole.png",
"techage_gaspipe_valve_hole.png",
},
tubelib2_on_update2 = function(pos, outdir, tlib2, node)
liquid.update_network(pos, outdir)
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Pipe:after_dig_node(pos)
techage.remove_node(pos, oldnode, oldmetadata)
end,
on_rightclick = on_rightclick,
paramtype2 = "facedir", -- important!
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-1/8, -1/8, -4/8, 1/8, 1/8, 4/8},
{-3/16, -3/16, -3/16, 3/16, 3/16, 3/16},
},
},
on_rotate = screwdriver.disallow, -- important!
paramtype = "light",
sunlight_propagates = true,
is_ground_content = false,
groups = {crumbly = 2, cracky = 2, snappy = 2, not_in_creative_inventory = 1},
sounds = default.node_sound_metal_defaults(),
drop = "techage:ta3_valve_open",
})
techage.register_node({"techage:ta3_valve_closed", "techage:ta3_valve_open"}, {
on_recv_message = function(pos, src, topic, payload)
local node = techage.get_node_lvm(pos)
if topic == "on" and node.name == "techage:ta3_valve_closed" then
switch_node(pos, node)
return true
elseif topic == "off" and node.name == "techage:ta3_valve_open" then
switch_node(pos, node)
return true
elseif topic == "state" then
if node.name == "techage:ta3_valve_open" then
return "on"
end
return "off"
else
return "unsupported"
end
end,
})
minetest.register_craft({
output = "techage:ta3_valve_closed",
recipe = {
{"", "", ""},
{"techage:ta3_pipeS", "techage:iron_ingot", "techage:ta3_pipeS"},
{"", "", ""},
},
})

View File

@ -16,27 +16,30 @@ local M = minetest.get_meta
local S = techage.S
-- See also gateblock!!!
local NUM_TEXTURES = 20
local NUM_TEXTURES = 22
local sTextures = "Wood,Aspen Wood,Jungle Wood,Pine Wood,"..
"Cobblestone,Sandstone,Stone,Desert Sandstone,"..
"Desert Stone,Silver Sandstone,Mossy Cobble,Desert Cobble,"..
"Copper,Steel,Tin,Coral,"..
"Glas,Obsidian Glas,Ice,Gate Wood"
"Glas,Obsidian Glas,Basalt Glass,Basalt Glass 2,"..
"Ice,Gate Wood"
local tTextures = {
["Wood"]=1, ["Aspen Wood"]=2, ["Jungle Wood"]=3, ["Pine Wood"]=4,
["Cobblestone"]=5, ["Sandstone"]=6, ["Stone"]=7, ["Desert Sandstone"]=8,
["Desert Stone"]=9, ["Silver Sandstone"]=10, ["Mossy Cobble"]=11, ["Desert Cobble"]=12,
["Copper"]=13, ["Steel"]=14, ["Tin"]=15, ["Coral"]=16,
["Glas"]=17, ["Obsidian Glas"]=18, ["Ice"]=19, ["Gate Wood"]=20,
["Glas"]=17, ["Obsidian Glas"]=18, ["Basalt Glass"]=19, ["Basalt Glass 2"]=20,
["Ice"]=21, ["Gate Wood"]=22,
}
local tPgns = {"default_wood.png", "default_aspen_wood.png", "default_junglewood.png", "default_pine_wood.png",
"default_cobble.png", "default_sandstone.png", "default_stone.png", "default_desert_sandstone.png",
"default_desert_stone_block.png", "default_silver_sandstone.png", "default_mossycobble.png", "default_desert_cobble.png",
"default_copper_block.png", "default_steel_block.png", "default_tin_block.png", "default_coral_skeleton.png",
"default_glass.png", "default_obsidian_glass.png", "default_ice.png", "techage_gate.png"}
"default_glass.png", "default_obsidian_glass.png", "techage_basalt_glass.png", "techage_basalt_glass2.png",
"default_ice.png", "techage_gate.png"}
for idx,pgn in ipairs(tPgns) do
minetest.register_node("techage:doorblock"..idx, {
@ -84,6 +87,7 @@ for idx,pgn in ipairs(tPgns) do
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = true,
sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(),
groups = {cracky=2, choppy=2, crumbly=2, not_in_creative_inventory = idx==NUM_TEXTURES and 0 or 1},
@ -102,3 +106,32 @@ minetest.register_craft({
},
})
minetest.register_lbm({
label = "Upgrade doors and gates",
name = "techage:replace_legacy_doors_and_gates",
nodenames = {
"techage:doorblock19",
"techage:doorblock20",
"techage:gateblock19",
"techage:gateblock20",
},
run_at_every_load = false,
action = function(pos, node)
if node.name == "techage:doorblock19" then
node.name = "techage:doorblock21"
elseif node.name == "techage:doorblock20" then
node.name = "techage:doorblock22"
elseif node.name == "techage:gateblock19" then
node.name = "techage:gateblock21"
elseif node.name == "techage:gateblock20" then
node.name = "techage:gateblock22"
end
minetest.swap_node(pos, node)
end,
})

View File

@ -16,27 +16,30 @@ local M = minetest.get_meta
local S = techage.S
-- See also doorblock!!!
local NUM_TEXTURES = 20
local NUM_TEXTURES = 22
local sTextures = "Wood,Aspen Wood,Jungle Wood,Pine Wood,"..
"Cobblestone,Sandstone,Stone,Desert Sandstone,"..
"Desert Stone,Silver Sandstone,Mossy Cobble,Desert Cobble,"..
"Copper,Steel,Tin,Coral,"..
"Glas,Obsidian Glas,Ice,Gate Wood"
"Glas,Obsidian Glas,Basalt Glass,Basalt Glass 2,"..
"Ice,Gate Wood"
local tTextures = {
["Wood"]=1, ["Aspen Wood"]=2, ["Jungle Wood"]=3, ["Pine Wood"]=4,
["Cobblestone"]=5, ["Sandstone"]=6, ["Stone"]=7, ["Desert Sandstone"]=8,
["Desert Stone"]=9, ["Silver Sandstone"]=10, ["Mossy Cobble"]=11, ["Desert Cobble"]=12,
["Copper"]=13, ["Steel"]=14, ["Tin"]=15, ["Coral"]=16,
["Glas"]=17, ["Obsidian Glas"]=18, ["Ice"]=19, ["Gate Wood"]=20,
["Glas"]=17, ["Obsidian Glas"]=18, ["Basalt Glass"]=19, ["Basalt Glass 2"]=20,
["Ice"]=21, ["Gate Wood"]=22,
}
local tPgns = {"default_wood.png", "default_aspen_wood.png", "default_junglewood.png", "default_pine_wood.png",
"default_cobble.png", "default_sandstone.png", "default_stone.png", "default_desert_sandstone.png",
"default_desert_stone_block.png", "default_silver_sandstone.png", "default_mossycobble.png", "default_desert_cobble.png",
"default_copper_block.png", "default_steel_block.png", "default_tin_block.png", "default_coral_skeleton.png",
"default_glass.png", "default_obsidian_glass.png", "default_ice.png", "techage_gate.png"}
"default_glass.png", "default_obsidian_glass.png", "techage_basalt_glass.png", "techage_basalt_glass2.png",
"default_ice.png", "techage_gate.png"}
for idx,pgn in ipairs(tPgns) do
minetest.register_node("techage:gateblock"..idx, {
@ -70,6 +73,7 @@ for idx,pgn in ipairs(tPgns) do
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = true,
sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(),
groups = {cracky=2, choppy=2, crumbly=2, not_in_creative_inventory = idx==NUM_TEXTURES and 0 or 1},

View File

@ -298,6 +298,13 @@ Die Blöcke dienen als Wanddurchbrüche für Röhren, so dass keine Löcher offe
[ta3_pipe_wall_entry|image]
### TA Ventil / TA Valve
Für die gelben Röhren gibt es ein Ventil, welches über Mausklicks geöffnet und geschlossen werden kann.
Das Ventil kann auch über on/off Kommandos angesteuert werden.
[ta3_valve|image]
## Öl-Förderung

View File

@ -297,6 +297,14 @@ The blocks serve as wall openings for tubes, so that no holes remain open.
[ta3_pipe_wall_entry|image]
### TA Valve
There is a valve for the yellow pipes, which can be opened and closed with a click of the mouse.
The valve can also be controlled via on/off commands.
[ta3_valve|image]
## Oil Production
In order to run your generators and stoves with oil, you must first look for oil and build a derrick and then extract the oil.

View File

@ -223,7 +223,9 @@ Die Brennstoffzelle kann bis zu 25 ku an Strom abgeben und benötigt dazu alle 4
## Chemischer Reaktor / chemical reactor
Der Reaktor dient dazu, die über den Destillationsturm oder aus anderen Rezepten gewonnenen Zutaten zu neuen Produkten weiter zu verarbeiten. Ein Reaktor besteht aus:
Der Reaktor dient dazu, die über den Destillationsturm oder aus anderen Rezepten gewonnenen Zutaten zu neuen Produkten weiter zu verarbeiten. Der Plan links zeigt nur eine mögliche Variante, da die Anordnung der Silos und Tanks rezeptabhängig ist.
Ein Reaktor besteht aus:
- div. Tanks und Silos mit den Zutaten, die über Leitungen mit dem Dosierer verbunden sind
- optional einem Reaktorsockel, welcher die Abfälle aus dem Reaktor ableitet (nur bei Rezepten mit zwei Ausgangsstoffen notwendig)
- dem Reaktorständer, der auf den Sockel gesetzt werden muss (sofern vorhanden). Der Ständer hat einen Stromanschluss und zieht bei Betrieb 8 ku.

View File

@ -223,7 +223,10 @@ The fuel cell can deliver up to 25 ku of electricity and needs a hydrogen item e
## Chemical Reactor
The reactor is used to process the ingredients obtained from the distillation tower or from other recipes into new products. A reactor consists of:
The reactor is used to process the ingredients obtained from the distillation tower or from other recipes into new products.
The plan on the left shows only one possible variant, since the arrangement of the silos and tanks depends on the recipe.
A reactor consists of:
- Various tanks and silos with the ingredients that are connected to the doser via pipes
- optionally a reactor base, which discharges the waste from the reactor (only necessary for recipes with two starting materials)
- the reactor stand, which must be placed on the base (if available). The stand has a power connection and draws 8 ku during operation.

View File

@ -75,6 +75,7 @@
- [TA Einfülltrichter / TA Liquid Filler](./manual_ta3_DE.md#ta-einfülltrichter--ta-liquid-filler)
- [TA4 Röhre / Pipe](./manual_ta3_DE.md#ta4-röhre--pipe)
- [TA3 Rohr/Wanddurchbruch / TA3 Pipe Wall Entry Blöcke](./manual_ta3_DE.md#ta3-rohrwanddurchbruch--ta3-pipe-wall-entry-blöcke)
- [TA Ventil / TA Valve](./manual_ta3_DE.md#ta-ventil--ta-valve)
- [Öl-Förderung](./manual_ta3_DE.md#Öl-förderung)
- [TA3 Ölexplorer / Oil Explorer](./manual_ta3_DE.md#ta3-Ölexplorer--oil-explorer)
- [TA3 Ölbohrkiste / Oil Drill Box](./manual_ta3_DE.md#ta3-Ölbohrkiste--oil-drill-box)

View File

@ -75,6 +75,7 @@
- [TA Liquid Filler](./manual_ta3_EN.md#ta-liquid-filler)
- [TA4 Pipe](./manual_ta3_EN.md#ta4-pipe)
- [TA3 Pipe Wall Entry Blocks](./manual_ta3_EN.md#ta3-pipe-wall-entry-blocks)
- [TA Valve](./manual_ta3_EN.md#ta-valve)
- [Oil Production](./manual_ta3_EN.md#oil-production)
- [TA3 Oil Explorer](./manual_ta3_EN.md#ta3-oil-explorer)
- [TA3 Oil Drill Box](./manual_ta3_EN.md#ta3-oil-drill-box)

BIN
sounds/techage_valve.ogg Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B