built on 25/08/2024 19:49:57

This commit is contained in:
Joachim Stolberg 2024-08-25 19:49:57 +02:00
parent d053a2c467
commit 72e633bc74
132 changed files with 10031 additions and 969 deletions

View File

@ -46,6 +46,50 @@ ta4_jetpack requires the modpack 3d_armor. 3d_armor is itself a modpack and can'
### History
#### 2024-08-25
Updated Mods:
- techage:
- Fix bug 'TA2 boiler work without requiring boiler'
- Improve move/fly controller
- Add replacement to electricmeter recipe (Eternal-Study)
- Fix injector bug
- Fix flowers detection when using ethereal (Niklp09)
- Fix issue #175 (TA3 Furnace Does not implement replacements in recipes)
- Water to Salt + River Water Recipe, add Salt.lua (Eternal-Study)
- Add new button commands
- Fix bug with injector with a full 8x2000 chest
- Fix forceload block formspec list (Niklp09)
- Improve techage:ta4_power_box node_box (Niklp09)
- Allow to move the TA4 terminal with the assembly tool (#165)
- add aluminum recipes for techpack_stairway items (jfanjoy)
- Replace techage_invisible.png w/ engine provided blank.png (Niklp09)
- adds a new chat command and column to forceload formspec (jfanjoy)
- Fix bug #24 (Energy Storage respawn red gravel infinit)
- Allow TA3 screwdriver to get repaired by anvil (Niklp09)
- Add translations and fix bug with growlight
- Add manual for pt-BR language (hephaestus-br)
- Add reverse mode for ta5 pump
- Fix assembly tool bug with non-empty chests
- hyperloop:
- add luacheck workflow
- Change code so that no luacheck warnings are issued
- Fix set_look_horizontal bug
- Prevent 'deprecated warnings'
- signs_bot:
- Fix to Fall_Down when non-walkable nodes are in path (Eternal-Study)
- Fix to fall_down (Eternal-Study)
- hold aux1 to invert signal (blaboing)
- Fix flowers detection when using ethereal (Niklp09)
- Fix bug #38 (Colon in print command breaks jumps)
- tubelib2:
- Replace deprecated meta:set_string(*, nil) calls (Niklp09)
- lcdlib:
- Use initial_properties for text entity (Niklp09)
- safer_lua:
- Add safe variants for strin.rep() and string.find()
#### 2023-11-26
Updated Mods:

View File

@ -3,3 +3,4 @@ title=Autobahn
description=Street mod for faster travelling.
depends=default
optional_depends=moreblocks, techage, minecart, player_monoids
supported_games = minetest_game

View File

@ -1,3 +0,0 @@
[submodule "sound_api_core"]
path = sound_api_core
url = https://github.com/mt-mods/sound_api_core.git

View File

@ -3,5 +3,5 @@ globals = {
}
read_globals = {
"default",
"default", "xcompat",
}

View File

@ -20,11 +20,4 @@ mod that adds basic material nodes and items
### Option 3: use git
* `git clone https://github.com/mt-mods/basic_materials.git`
* `cd basic_materials`
* `git submodule init`
* `git submodule update`
to update please use the following commands starting inside the mod directory
* `git submodule sync`
* `git submodule update`
* `cd basic_materials`

View File

@ -1,136 +1,4 @@
local materials = {
dirt = "default:dirt",
sand = "default:sand",
gravel = "default:gravel",
copper_ingot = "default:copper_ingot",
steel_ingot = "default:steel_ingot",
gold_ingot = "default:gold_ingot",
tin_ingot = "default:tin_ingot",
mese_crystal_fragment = "default:mese_crystal_fragment",
torch = "default:torch",
diamond = "default:diamond",
clay_lump = "default:clay_lump",
water_bucket = "bucket:bucket_water",
empty_bucket = "bucket:bucket_empty",
dye_dark_grey = "dye:dark_grey",
silicon = "mesecons_materials:silicon",
}
if minetest.get_modpath("moreores") then
materials.silver_ingot = "moreores:silver_ingot"
end
if minetest.get_modpath("technic") then
materials.lead_ingot = "technic:lead_ingot"
materials.carbon_steel_ingot = "technic:carbon_steel_ingot"
materials.stainless_steel_ingot = "technic:stainless_steel_ingot"
end
if minetest.get_modpath("aloz") then
materials.aluminum_ingot = "aloz:aluminum_ingot"
end
if minetest.get_modpath("techage") then
materials.aluminum_ingot = "techage:aluminum"
end
if minetest.get_modpath("mcl_core") then
materials = {
dirt = "mcl_core:dirt",
sand = "mcl_core:sand",
gravel = "mcl_core:gravel",
steel_ingot = "mcl_core:iron_ingot",
gold_ingot = "mcl_core:gold_ingot",
mese_crystal_fragment = "mesecons:redstone",
torch = "mcl_torches:torch",
diamond = "mcl_core:diamond",
clay_lump = "mcl_core:clay_lump",
water_bucket = "mcl_buckets:bucket_water",
empty_bucket = "mcl_buckets:bucket_empty",
dye_dark_grey = "mcl_dye:dark_grey",
-- Use iron where no equivalent
copper_ingot = "mcl_core:iron_ingot",
tin_ingot = "mcl_core:iron_ingot",
silver_ingot = "mcl_core:iron_ingot",
silicon = "mesecons_materials:silicon",
}
elseif minetest.get_modpath("fl_ores") and minetest.get_modpath("fl_stone") then
materials = {
dirt = "fl_topsoil:dirt",
sand = "fl_stone:sand",
gravel = "fl_topsoil:gravel",
steel_ingot = "fl_ores:iron_ingot",
gold_ingot = "fl_ores:gold_ingot",
mese_crystal_fragment = "fl_ores:iron_ingot",
torch = "fl_light_sources:torch",
diamond = "fl_ores:diamond",
clay_lump = "fl_bricks:clay_lump",
water_bucket = "fl_bucket:bucket_water",
empty_bucket = "fl_bucket:bucket",
dye_dark_grey = "fl_dyes:dark_grey_dye",
copper_ingot = "fl_ores:copper_ingot",
tin_ingot = "fl_ores:tin_ingot",
silver_ingot = "fl_ores:iron_ingot",
silicon = "mesecons_materials:silicon",
}
elseif minetest.get_modpath("rp_default") then
materials = {
dirt = "rp_default:dirt",
sand = "rp_default:sand",
gravel = "rp_default:gravel",
steel_ingot = "rp_default:ingot_steel",
gold_ingot = "rp_default:ingot_gold",
mese_crystal_fragment = "rp_default:ingot_steel",
torch = "rp_default:torch",
diamond = "rp_default:pearl",
clay_lump = "rp_default:ingot_steel",
water_bucket = "rp_default:swamp_dirt",
empty_bucket = "rp_default:dirt",
dye_dark_grey = "rp_default:ingot_steel",
copper_ingot = "rp_default:ingot_copper",
tin_ingot = "rp_default:ingot_tin",
silver_ingot = "rp_default:ingot_steel",
silicon = "rp_default:ingot_steel",
}
elseif minetest.get_modpath("hades_core") then
materials = {
dirt = "hades_core:dirt",
sand = "hades_core:fertile_sand",
gravel = "hades_core:gravel",
steel_ingot = "hades_core:steel_ingot",
gold_ingot = "hades_core:gold_ingot",
mese_crystal_fragment = "hades_core:mese_crystal_fragment",
torch = "hades_torches:torch",
diamond = "hades_core:diamond",
clay_lump = "hades_core:clay_lump",
dye_dark_grey = "hades_dye:dark_grey",
copper_ingot = "hades_core:copper_ingot",
tin_ingot = "hades_core:tin_ingot",
--[[
Since hades doesnt have buckets or water for the user,
using dirt from near water to pull the water out
]]
water_bucket = "hades_core:dirt",
empty_bucket = "hades_core:fertile_sand",
-- Set this to steel unless hadesextraores is present
silver_ingot = "hades_core:steel_ingot",
silicon = "hades_materials:silicon",
}
if minetest.get_modpath("hades_bucket") then
materials["water_bucket"] = "hades_bucket:bucket_water"
materials["empty_bucket"] = "hades_bucket:bucket_empty"
end
if minetest.get_modpath("hades_extraores") then
materials["silver_ingot"] = "hades_extraores:silver_ingot"
materials["aluminum_ingot"] = "hades_extraores:aluminum_ingot"
end
if minetest.get_modpath("hades_technic") then
materials.lead_ingot = "hades_technic:lead_ingot"
materials.carbon_steel_ingot = "hades_technic:carbon_steel_ingot"
materials.stainless_steel_ingot = "hades_technic:stainless_steel_ingot"
end
end
local materials = xcompat.materials
local have_hades_materials = minetest.get_modpath("hades_materials")
@ -524,7 +392,7 @@ register_craft({
if not have_hades_materials then
register_craft( {
output = materials.silicon.." 4",
output = "basic_materials:silicon 4",
recipe = {
{materials.sand, materials.sand},
{materials.sand, materials.steel_ingot},
@ -535,8 +403,8 @@ end
register_craft( {
output = "basic_materials:ic 4",
recipe = {
{materials.silicon, materials.silicon},
{materials.silicon, materials.copper_ingot},
{"basic_materials:silicon", "basic_materials:silicon"},
{"basic_materials:silicon", materials.copper_ingot},
},
})

View File

@ -1,3 +1,4 @@
name = basic_materials
optional_depends = moreores, default, mesecons_materials, dye, bucket, fl_stone, fl_trees, mcl_sounds, hades_core, hades_sounds, hades_materials, hades_dye, hades_bucket, hades_extraores, hades_mesecons_materials, aloz, rp_crafting
depends = xcompat
optional_depends = moreores, default, mesecons_materials, dye, bucket, fl_stone, fl_trees, mcl_sounds, hades_core, hades_sounds, hades_materials, hades_dye, hades_bucket, hades_extraores, hades_mesecons_materials, aloz, rp_crafting, mcl_core, mcl_copper
min_minetest_version = 5.2.0

View File

@ -1,11 +1,11 @@
local S = minetest.get_translator("basic_materials")
local sound_api = dofile(basic_materials.modpath .. "/sound_api_core/init.lua")
local sound_api = xcompat.sounds
local chains_sbox = {type = "fixed",fixed = { -0.1, -0.5, -0.1, 0.1, 0.5, 0.1 }}
minetest.register_node("basic_materials:cement_block", {
description = S("Cement"),
tiles = {"basic_materials_cement_block.png"},
is_ground_content = true,
is_ground_content = false,
groups = {cracky=2, dig_stone = 1, pickaxey=5},
_mcl_hardness=1.6,
sounds = sound_api.node_sound_stone_defaults(),
@ -14,6 +14,7 @@ minetest.register_node("basic_materials:cement_block", {
minetest.register_node("basic_materials:concrete_block", {
description = S("Concrete Block"),
tiles = {"basic_materials_concrete_block.png",},
is_ground_content = false,
groups = {cracky=1, concrete=1, dig_stone = 1, pickaxey=5},
_mcl_hardness=1.6,
sounds = sound_api.node_sound_stone_defaults(),
@ -29,6 +30,7 @@ minetest.register_node("basic_materials:chain_steel", {
sunlight_propagates = true,
paramtype = "light",
inventory_image = "basic_materials_chain_steel_inv.png",
is_ground_content = false,
groups = {cracky=3, dig_stone = 1, pickaxey=5},
_mcl_hardness=1.6,
selection_box = chains_sbox,
@ -44,6 +46,7 @@ minetest.register_node("basic_materials:chain_brass", {
sunlight_propagates = true,
paramtype = "light",
inventory_image = "basic_materials_chain_brass_inv.png",
is_ground_content = false,
groups = {cracky=3, dig_stone = 1, pickaxey=5},
_mcl_hardness=1.6,
selection_box = chains_sbox,

View File

@ -1,5 +0,0 @@
read_globals = {
"minetest", "mcl_sounds", "default", "ks_sounds",
"nodes_nature", "fl_stone", "fl_topsoil", "fl_trees",
"hades_sounds",
}

View File

@ -1,19 +0,0 @@
MIT Copyright 2021 wsor4035
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,276 +0,0 @@
local sound_api = {}
--convert some games for api usage
--ks_sounds conversion
--currently loggy and bedrock are ignored
local ks = {}
function ks.node_sound_defaults(table)
table = table or {}
table.footstep = table.footstep or ks_sounds.generalnode_sounds.footstep
table.dug = table.dug or ks_sounds.generalnode_sounds.dug
table.dig = table.dig or ks_sounds.generalnode_sounds.dig
table.place = table.place or ks_sounds.generalnode_sounds.place
return table
end
function ks.node_sound_wood_defaults(table)
table = table or {}
table.footstep = table.footstep or ks_sounds.woodennode_sounds.footstep
table.dug = table.dug or ks_sounds.woodennode_sounds.dug
table.dig = table.dig or ks_sounds.woodennode_sounds.dig
table.place = table.place or ks_sounds.woodennode_sounds.place
ks.node_sound_defaults(table)
return table
end
function ks.node_sound_leaves_defaults(table)
table = table or {}
table.footstep = table.footstep or ks_sounds.leafynode_sounds.footstep
table.dug = table.dug or ks_sounds.leafynode_sounds.dug
table.dig = table.dig or ks_sounds.leafynode_sounds.dig
table.place = table.place or ks_sounds.leafynode_sounds.place
ks.node_sound_defaults(table)
return table
end
function ks.node_sound_snow_defaults(table)
table = table or {}
table.footstep = table.footstep or ks_sounds.snowynode_sounds.footstep
table.dug = table.dug or ks_sounds.snowynode_sounds.dug
table.dig = table.dig or ks_sounds.snowynode_sounds.dig
table.place = table.place or ks_sounds.snowynode_sounds.place
ks.node_sound_defaults(table)
return table
end
--api
function sound_api.node_sound_default(table)
if minetest.get_modpath("default") then
return default.node_sound_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_defaults(table)
elseif minetest.get_modpath("ks_sounds") then
return ks.node_sound_default(table)
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_default(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_defaults(table)
else
return table
end
end
function sound_api.node_sound_stone_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_stone_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_stone_defaults(table)
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_stone_defaults(table)
elseif minetest.get_modpath("fl_stone") then
return fl_stone.sounds.stone(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_stone_defaults(table)
else
return table
end
end
function sound_api.node_sound_dirt_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_dirt_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_dirt_defaults(table)
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_dirt_defaults(table)
--s/dirt/grass
elseif minetest.get_modpath("fl_topsoil") then
return fl_topsoil.sounds.grass(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_dirt_defaults(table)
else
return table
end
end
--return dirt as some games use dirt vs grass
function sound_api.node_sound_grass_defaults(table)
if minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_grass_defaults(table)
else
return sound_api.node_sound_dirt_defaults(table)
end
end
function sound_api.node_sound_sand_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_sand_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_sand_defaults(table)
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_sand_defaults(table)
elseif minetest.get_modpath("fl_stone") then
return fl_stone.sounds.sand(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_sand_defaults(table)
else
return table
end
end
function sound_api.node_sound_gravel_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_gravel_defaults(table)
--s/gravel/sand
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_sand_defaults(table)
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_gravel_defaults(table)
elseif minetest.get_modpath("fl_topsoil") then
return fl_topsoil.sounds.gravel(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_gravel_defaults(table)
else
return table
end
end
function sound_api.node_sound_wood_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_wood_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_wood_defaults(table)
elseif minetest.get_modpath("ks_sounds") then
return ks.node_sound_wood_default(table)
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_wood_defaults(table)
elseif minetest.get_modpath("fl_trees") then
return fl_trees.sounds.wood(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_wood_defaults(table)
else
return table
end
end
function sound_api.node_sound_leaves_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_leaves_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_leaves_defaults(table)
elseif minetest.get_modpath("ks_sounds") then
return ks.node_sound_leaves_default(table)
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_leaves_defaults(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_leaves_defaults(table)
else
return table
end
end
function sound_api.node_sound_glass_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_glass_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_glass_defaults(table)
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_glass_defaults(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_glass_defaults(table)
else
return table
end
end
function sound_api.node_sound_ice_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_ice_defaults(table)
--s/ice/glass
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_glass_defaults(table)
--s/ice/glass
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_glass_defaults(table)
--s/ice/glass
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_glass_defaults(table)
else
return table
end
end
function sound_api.node_sound_metal_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_metal_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_metal_defaults(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_metal_defaults(table)
else
return table
end
end
function sound_api.node_sound_water_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_water_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_water_defaults(table)
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_water_defaults(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_water_defaults(table)
else
return table
end
end
function sound_api.node_sound_lava_defaults(table)
--s/lava/water
if minetest.get_modpath("default") then
return default.node_sound_water_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_lava_defaults(table)
--s/lava/water
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_water_defaults(table)
elseif minetest.get_modpath("hades_sounds") then
return hades_sounds.node_sound_lava_defaults(table)
else
return table
end
end
function sound_api.node_sound_snow_defaults(table)
if minetest.get_modpath("default") then
return default.node_sound_snow_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_snow_defaults(table)
elseif minetest.get_modpath("ks_sounds") then
return ks.node_sound_snow_default(table)
elseif minetest.get_modpath("nodes_nature") then
return nodes_nature.node_sound_snow_defaults(table)
elseif minetest.get_modpath("fl_topsoil") then
return fl_topsoil.sounds.snow(table)
else
return table
end
end
function sound_api.node_sound_wool_defaults(table)
--s/wool/default
if minetest.get_modpath("default") then
return default.node_sound_defaults(table)
elseif minetest.get_modpath("mcl_sounds") then
return mcl_sounds.node_sound_wool_defaults(table)
else
return table
end
end
return sound_api

29
grep.py Executable file
View File

@ -0,0 +1,29 @@
#!/usr/bin/env python2
# -*- coding: iso-8859-1 -*-
import os
import re
import sys
def grep(pattern, path='./', endings=['.lua']):
"""
Search in all files with the ending 'endings' in the given 'path'
for the given text 'pattern'.
"""
lOut = []
for dirpath, dirnames, filenames in os.walk(path):
for name in filenames:
_, ext = os.path.splitext(name)
if ext in endings:
filename = os.path.join(dirpath, name)
i = 0
## line oriented approach
for line in file(filename).readlines():
i = i + 1
match = re.search(pattern, line) # search pattern in line
if match:
print filename + ' [' + str(i) + '] ' + line.strip()
return lOut
if __name__ == '__main__':
grep(sys.argv[1])

View File

@ -0,0 +1,10 @@
name: luacheck
on: [push, pull_request]
jobs:
luacheck:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@main
- name: Luacheck
uses: lunarmodules/luacheck@master

28
hyperloop/.luacheckrc Normal file
View File

@ -0,0 +1,28 @@
unused_args = false
ignore = {
"131", -- Unused global variable
"432", -- Shadowing an upvalue argument
}
read_globals = {
"core",
"minetest",
"default",
"worldedit",
"tubelib2",
"intllib",
"DIR_DELIM",
"techage",
string = {fields = {"split", "trim"}},
vector = {fields = {"add", "equals", "multiply"}},
table = {fields = {"copy", ""}},
}
globals = {
"hyperloop",
"ItemStack",
"screwdriver",
}

View File

@ -13,11 +13,11 @@
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
--local P = minetest.string_to_pos
--local M = minetest.get_meta
local S = hyperloop.S
local NS = hyperloop.NS
--local NS = hyperloop.NS
local tBlockingTime = {}
local tBookings = {} -- open bookings: tBookings[SP(departure_pos)] = arrival_pos
@ -33,7 +33,7 @@ function hyperloop.reserve(departure_pos, arrival_pos, player)
hyperloop.chat(player, S("Station data is corrupted. Please rebuild the station!"))
return false
end
if (tBlockingTime[SP(departure_pos)] or 0) > minetest.get_gametime() then
hyperloop.chat(player, S("Station is still blocked. Please try again in a few seconds!"))
return false
@ -41,7 +41,7 @@ function hyperloop.reserve(departure_pos, arrival_pos, player)
hyperloop.chat(player, S("Station is still blocked. Please try again in a few seconds!"))
return false
end
-- place a reservation for 20 seconds to start the trip
tBlockingTime[SP(departure_pos)] = minetest.get_gametime() + 20
tBlockingTime[SP(arrival_pos)] = minetest.get_gametime() + 20
@ -55,7 +55,7 @@ function hyperloop.block(departure_pos, arrival_pos, seconds)
elseif Stations:get(arrival_pos) == nil then
return false
end
tBlockingTime[SP(departure_pos)] = minetest.get_gametime() + seconds
tBlockingTime[SP(arrival_pos)] = minetest.get_gametime() + seconds
return true
@ -67,14 +67,14 @@ function hyperloop.is_blocked(pos)
if Stations:get(pos) == nil then
return false
end
return (tBlockingTime[SP(pos)] or 0) > minetest.get_gametime()
end
function hyperloop.set_arrival(departure_pos, arrival_pos)
tBookings[SP(departure_pos)] = arrival_pos
end
end
function hyperloop.get_arrival(departure_pos)
-- Return and delete the arrival pos

View File

@ -18,9 +18,8 @@ local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
-- Used to store the Station list for each booking machine:
-- Used to store the Station list for each booking machine:
-- tStationList[SP(pos)] = {pos1, pos2, ...}
local tStationList = {}
@ -33,7 +32,7 @@ local function generate_string(sortedList)
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
"item_image[0,0;1,1;hyperloop:booking]"..
"item_image[0,0;1,1;hyperloop:booking]"..
"label[4,0; "..S("Select your destination").."]"}
tRes[2] = "tablecolumns[text,width=20;text,width=6,align=right;text]"
@ -80,7 +79,7 @@ local function filter_subnet(sortedList, subnet)
if subnet == "" then
subnet = nil
end
local tbl = {}
for idx,item in ipairs(sortedList) do
if item.subnet == subnet then
@ -95,7 +94,6 @@ end
-- Used to update the station list for booking machine
-- and teleport list.
local function station_list_as_string(pos, subnet)
local meta = M(pos)
-- Generate a name sorted list of all connected stations
local sortedList = Stations:station_list(pos, pos, "name")
-- remove all junctions from the list
@ -108,7 +106,7 @@ local function station_list_as_string(pos, subnet)
return generate_string(sortedList)
end
local naming_formspec = nil
local naming_formspec
if hyperloop.subnet_enabled then
naming_formspec = function(pos)
@ -185,7 +183,7 @@ local function on_receive_fields(pos, formname, fields, player)
booking_info = string.trim(fields.info),
subnet = subnet,
})
local meta = M(pos)
meta:set_string("sStationPos", SP(stationPos))
meta:set_string("infotext", "Station: "..station_name)
@ -217,7 +215,7 @@ local function on_receive_fields(pos, formname, fields, player)
end
end
end
local function on_destruct(pos)
local sStationPos = M(pos):get_string("sStationPos")
if sStationPos ~= "" then
@ -229,7 +227,7 @@ local function on_destruct(pos)
end
end
-- wap from wall to ground
-- wap from wall to ground
local function swap_node(pos, placer)
pos.y = pos.y - 1
if minetest.get_node_or_nil(pos).name ~= "air" then
@ -255,7 +253,7 @@ minetest.register_node("hyperloop:booking", {
"hyperloop_booking.png",
"hyperloop_booking_front.png",
},
drawtype = "nodebox",
node_box = {
type = "fixed",
@ -263,13 +261,13 @@ minetest.register_node("hyperloop:booking", {
{ -8/16, -8/16, 2/16, 8/16, 8/16, 8/16},
},
},
after_place_node = function(pos, placer, itemstack, pointed_thing)
naming_formspec(pos)
swap_node(pos, placer)
end,
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
on_receive_fields = on_receive_fields,
on_destruct = on_destruct,
on_rightclick = on_rightclick,
@ -293,7 +291,7 @@ minetest.register_node("hyperloop:booking_ground", {
"hyperloop_booking.png",
"hyperloop_booking_front.png",
},
drawtype = "nodebox",
node_box = {
type = "fixed",
@ -301,7 +299,7 @@ minetest.register_node("hyperloop:booking_ground", {
{ -8/16, -8/16, -3/16, 8/16, 8/16, 3/16},
},
},
after_place_node = function(pos, placer, itemstack, pointed_thing)
naming_formspec(pos)
end,
@ -309,8 +307,8 @@ minetest.register_node("hyperloop:booking_ground", {
on_receive_fields = on_receive_fields,
on_destruct = on_destruct,
on_rightclick = on_rightclick,
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
drop = "hyperloop:booking",
light_source = 2,
paramtype = 'light',

View File

@ -12,30 +12,12 @@
]]--
-- for lazy programmers
local S = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
--local P = minetest.string_to_pos
--local M = minetest.get_meta
hyperloop.Stations = hyperloop.Network:new()
hyperloop.Elevators = hyperloop.Network:new()
-- Check all nodes on the map and delete useless data base entries
local function check_data_base()
-- used for VM get_node
local tube = tubelib2.Tube:new({})
hyperloop.Stations:filter(function(pos)
local _,node = tube:get_node(pos)
return node.name == "hyperloop:station" or node.name == "hyperloop:junction"
end)
hyperloop.Elevators:filter(function(pos)
local _,node = tube:get_node(pos)
return node.name == "hyperloop:elevator_bottom"
end)
end
local storage = minetest.get_mod_storage()
hyperloop.Stations:deserialize(storage:get_string("Stations"))
hyperloop.Elevators:deserialize(storage:get_string("Elevators"))

View File

@ -15,20 +15,19 @@
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local tilesL = {"hyperloop_alpsL.png", "hyperloop_seaL.png", "hyperloop_agyptL.png"}
local tilesR = {"hyperloop_alpsR.png", "hyperloop_seaR.png", "hyperloop_agyptR.png"}
-- determine facedir and pos on the right hand side from the given pos
function right_hand_side(pos, placer)
local function right_hand_side(pos, placer)
local facedir = hyperloop.get_facedir(placer)
pos = hyperloop.new_pos(pos, facedir, "1R", 0)
return facedir,pos
end
for idx = 1,3 do
minetest.register_node("hyperloop:poster"..idx.."L", {
description = S("Hyperloop Promo Poster ")..idx,
tiles = {
@ -51,7 +50,7 @@ for idx = 1,3 do
type = "fixed",
fixed = { -8/16, -8/16, -6/16, 24/16, 8/16, 8/16},
},
after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
local facedir
@ -69,8 +68,8 @@ for idx = 1,3 do
minetest.remove_node(pos)
end
end,
paramtype2 = "facedir",
light_source = 4,
is_ground_content = false,
@ -133,7 +132,7 @@ minetest.register_node("hyperloop:signR", {
{ -8/16, -5/16, 6/16, 8/16, 5/16, 8/16},
},
},
after_place_node = function(pos, placer, itemstack, pointed_thing)
pos.y = pos.y - 1
if minetest.get_node_or_nil(pos).name ~= "air" then
@ -144,7 +143,7 @@ minetest.register_node("hyperloop:signR", {
minetest.swap_node(pos, node)
end
end,
paramtype2 = "facedir",
paramtype = 'light',
light_source = 4,
@ -170,7 +169,7 @@ minetest.register_node("hyperloop:signL", {
{ -8/16, -5/16, 6/16, 8/16, 5/16, 8/16},
},
},
after_place_node = function(pos, placer, itemstack, pointed_thing)
pos.y = pos.y - 1
if minetest.get_node_or_nil(pos).name ~= "air" then
@ -181,7 +180,7 @@ minetest.register_node("hyperloop:signL", {
minetest.swap_node(pos, node)
end
end,
paramtype2 = "facedir",
paramtype = 'light',
light_source = 4,

View File

@ -11,13 +11,12 @@
]]--
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
--local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
--local P = minetest.string_to_pos
local M = minetest.get_meta
--- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
-- Open the door for an emergency
local function door_on_punch(pos, node, puncher, pointed_thing)
@ -40,7 +39,6 @@ local function door_command(door_pos1, facedir, cmnd)
local node1 = minetest.get_node(door_pos1)
local node2 = minetest.get_node(door_pos2)
local meta = minetest.get_meta(door_pos1)
if cmnd == "open" then
minetest.sound_play("door", {
pos = door_pos1,
@ -116,15 +114,15 @@ minetest.register_node("hyperloop:doorTopPassive", {
type = "fixed",
fixed = {-8/16, -8/16, -5/16, 8/16, 8/16, 5/16},
},
on_punch = door_on_punch,
auto_place_node = function(pos, facedir, sStationPos)
M(pos):set_int("facedir", facedir)
M(pos):set_string("sStationPos", sStationPos)
end,
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
paramtype = 'light',
light_source = 1,
paramtype2 = "facedir",
@ -158,8 +156,8 @@ minetest.register_node("hyperloop:doorTopActive", {
type = "fixed",
fixed = {-8/16, -8/16, -5/16, 8/16, 8/16, 5/16},
},
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
paramtype2 = "facedir",
drop = "",
light_source = 2,
@ -184,15 +182,15 @@ minetest.register_node("hyperloop:doorBottom", {
type = "fixed",
fixed = {-8/16, -8/16, -5/16, 8/16, 8/16, 5/16},
},
on_punch = door_on_punch,
auto_place_node = function(pos, facedir, sStationPos)
M(pos):set_int("facedir", facedir)
M(pos):set_string("sStationPos", sStationPos)
end,
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
paramtype = 'light',
light_source = 1,
paramtype2 = "facedir",

View File

@ -17,7 +17,6 @@ local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
-- To store elevator floors and formspecs
local Cache = {}
@ -36,9 +35,9 @@ end
local Shaft = tubelib2.Tube:new({
dirs_to_check = dirs_to_check,
max_tube_length = 1000,
max_tube_length = 1000,
show_infotext = true,
primary_node_names = {"hyperloop:shaft", "hyperloop:shaft2", "hyperloop:shaftA", "hyperloop:shaftA2"},
primary_node_names = {"hyperloop:shaft", "hyperloop:shaft2", "hyperloop:shaftA", "hyperloop:shaftA2"},
secondary_node_names = {"hyperloop:elevator_bottom", "hyperloop:elevator_top"},
after_place_tube = function(pos, param2, tube_type, num_tubes)
if tube_type == "S" then
@ -65,8 +64,8 @@ Shaft:register_on_tube_update(function(node, pos, out_dir, peer_pos, peer_in_dir
-- switch to elevator_bottom node
pos = Shaft:get_pos(pos, 5)
elseif peer_pos then
local _,node = Shaft:get_node(peer_pos)
if node.name == "hyperloop:elevator_top" then
local _,node1 = Shaft:get_node(peer_pos)
if node1.name == "hyperloop:elevator_top" then
peer_pos = Shaft:get_pos(peer_pos, 5)
end
end
@ -108,11 +107,11 @@ minetest.register_node("hyperloop:shaft", {
end
return false
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Shaft:after_dig_tube(pos, oldnode, oldmetadata)
end,
climbable = true,
paramtype2 = "facedir",
on_rotate = screwdriver.disallow,
@ -158,11 +157,11 @@ minetest.register_node("hyperloop:shaftA", {
end
return false
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Shaft:after_dig_tube(pos, oldnode, oldmetadata)
end,
climbable = true,
paramtype2 = "facedir",
on_rotate = screwdriver.disallow,
@ -204,7 +203,7 @@ minetest.register_node("hyperloop:shaft2", {
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Shaft:after_dig_tube(pos, oldnode, oldmetadata)
end,
climbable = true,
paramtype2 = "facedir",
on_rotate = screwdriver.disallow,
@ -251,7 +250,7 @@ minetest.register_node("hyperloop:shaftA2", {
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Shaft:after_dig_tube(pos, oldnode, oldmetadata)
end,
climbable = true,
paramtype2 = "facedir",
on_rotate = screwdriver.disallow,
@ -332,13 +331,13 @@ local function door_command(floor_pos, facedir, cmnd, sound)
local door_pos1 = hyperloop.new_pos(floor_pos, facedir, "1B", 0)
local door_pos2 = hyperloop.new_pos(floor_pos, facedir, "1B", 1)
local meta = M(floor_pos)
local owner = meta:contains("owner") and meta:get_string("owner")
local owner = meta:contains("owner") and meta:get_string("owner")
if owner and (minetest.is_protected(door_pos1, owner) or minetest.is_protected(door_pos2, owner)) then
return
end
local node1 = minetest.get_node(door_pos1)
local node2 = minetest.get_node(door_pos2)
if sound then
minetest.sound_play("ele_door", {
pos = floor_pos,
@ -445,7 +444,7 @@ minetest.register_node("hyperloop:elevator_bottom", {
fixed = { -8/16, -8/16, -8/16, 8/16, 23/16, 8/16 },
},
inventory_image = "hyperloop_elevator_inventory.png",
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
drawtype = "nodebox",
paramtype = 'light',
light_source = 6,
@ -458,25 +457,25 @@ minetest.register_node("hyperloop:elevator_bottom", {
if node.name == "air" then
local facedir = hyperloop.get_facedir(placer)
Elevators:set(pos, "<unknown>", {facedir=facedir, busy=false})
Shaft:after_place_node(pos, {5})
-- formspec
local meta = minetest.get_meta(pos)
local formspec = "size[6,4]"..
local fs = "size[6,4]"..
"label[0,0;"..S("Please insert floor name").."]" ..
"field[0.5,1.5;5,1;floor;"..S("Floor name")..";"..S("Base").."]" ..
"button_exit[2,3;2,1;exit;"..S("Save").."]"
meta:set_string("formspec", formspec)
meta:set_string("formspec", fs)
meta:set_string("owner", placer:get_player_name())
-- add upper part of the car
pos = Shaft:get_pos(pos, 6)
minetest.add_node(pos, {name="hyperloop:elevator_top", param2=facedir})
Shaft:after_place_node(pos, {6})
else
minetest.remove_node(pos)
return true
return true
end
end,
@ -559,8 +558,8 @@ minetest.register_node("hyperloop:elevator_top", {
{ -7/16, -8/16, 7/16, 7/16, 8/16, 8/16},
},
},
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
drawtype = "nodebox",
paramtype = 'light',
light_source = 6,
@ -584,8 +583,8 @@ minetest.register_node("hyperloop:elevator_door_top", {
{ -8/16, -8/16, 7/16, 8/16, 8/16, 8/16},
},
},
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
drop = "",
paramtype = 'light',
paramtype2 = "facedir",
@ -607,12 +606,12 @@ minetest.register_node("hyperloop:elevator_door", {
{ -8/16, -8/16, 7/16, 8/16, 8/16, 8/16},
},
},
selection_box = {
type = "fixed",
fixed = { -8/16, -8/16, 6.5/16, 8/16, 24/16, 8/16 },
},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local floor_pos = P(M(pos):get_string("floor_pos"))
if floor_pos ~= nil then
@ -623,8 +622,8 @@ minetest.register_node("hyperloop:elevator_door", {
end
end
end,
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
drop = "",
paramtype = 'light',
paramtype2 = "facedir",
@ -646,8 +645,8 @@ minetest.register_node("hyperloop:elevator_door_dark_top", {
{ -8/16, -8/16, 7/16, 8/16, 8/16, 8/16},
},
},
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
drop = "",
paramtype = 'light',
paramtype2 = "facedir",
@ -668,13 +667,13 @@ minetest.register_node("hyperloop:elevator_door_dark", {
{ -8/16, -8/16, 7/16, 8/16, 8/16, 8/16},
},
},
selection_box = {
type = "fixed",
fixed = { -8/16, -8/16, 7/16, 8/16, 24/16, 8/16 },
},
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
drop = "",
paramtype = 'light',
paramtype2 = "facedir",

View File

@ -34,8 +34,8 @@
2020-01-03 v2.04 Elevator door bugfix (MT 5+)
2020-03-12 v2.05 minetest translator added (thanks to acmgit/Clyde)
2020-06-14 v2.06 The default value for `hyperloop_free_tube_placement_enabled` is now true
2021-02-07 v2.07 tube_crowbar: Add tube length check
2021-11-01 v2.08 Enable the use of hyperloop networks for other mods
2021-02-07 v2.07 tube_crowbar: Add tube length check
2021-11-01 v2.08 Enable the use of hyperloop networks for other mods
]]--

View File

@ -11,13 +11,12 @@
]]--
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
--local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
--local P = minetest.string_to_pos
local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Tube = hyperloop.Tube
local Stations = hyperloop.Stations
@ -63,7 +62,7 @@ minetest.register_node("hyperloop:junction", {
Tube:after_dig_node(pos)
Stations:delete(pos)
end,
paramtype2 = "facedir",
on_rotate = screwdriver.disallow,
paramtype = "light",

View File

@ -1,8 +1,8 @@
--[[
LCD
LCD
===
Derived from the work of kaeza, sofar and others (digilines)
LGPLv2.1+
@ -12,8 +12,6 @@
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
-- load characters map
local chars_file = io.open(minetest.get_modpath("hyperloop").."/characters.data", "r")
@ -138,7 +136,7 @@ local prepare_writing = function(pos)
{x = pos.x + lcd_info.delta.x,
y = pos.y + lcd_info.delta.y,
z = pos.z + lcd_info.delta.z}, "hyperloop_lcd:text")
text:setyaw(lcd_info.yaw or 0)
text:set_yaw(lcd_info.yaw or 0)
--* text:setpitch(lcd_info.yaw or 0)
return text
end
@ -161,7 +159,7 @@ minetest.register_node("hyperloop:lcd", {
description = S("Hyperloop Display"),
tiles = {"hyperloop_lcd.png"},
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "wallmounted",
@ -185,7 +183,7 @@ minetest.register_node("hyperloop:lcd", {
update = function(pos, text)
lcd_update(pos, text)
end,
light_source = 6,
})

View File

@ -12,12 +12,11 @@
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
--local P = minetest.string_to_pos
--local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Stations = hyperloop.Stations
@ -30,7 +29,7 @@ local function generate_string(sortedList)
local sKey = SP(item.pos)
lStationPositions[sKey] = idx
end
local tRes = {
"label[0,0;ID]"..
"label[0.7,0;"..S("Dist.").."]"..
@ -46,7 +45,7 @@ local function generate_string(sortedList)
local owner = dataSet.owner or "<unknown>"
local name = dataSet.name or "<unknown>"
local distance = dataSet.distance or 0
tRes[#tRes+1] = "label[0,"..ypos..";"..idx.."]"
tRes[#tRes+1] = "label[0.7,"..ypos..";"..distance.." m]"
tRes[#tRes+1] = "label[1.8,"..ypos..";"..string.sub(name,1,24).."]"
@ -87,7 +86,7 @@ local function map_on_use(itemstack, user)
local player_name = user:get_player_name()
local pos = user:get_pos()
local sStationList = station_list_as_string(pos)
local formspec = "size[12,10]" ..
local formspec = "size[12,10]" ..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
@ -102,7 +101,7 @@ local function map_on_secondary_use(itemstack, user)
local player_name = user:get_player_name()
local pos = user:get_pos()
local sStationList = network_list_as_string(pos)
local formspec = "size[12,10]" ..
local formspec = "size[12,10]" ..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..

View File

@ -12,7 +12,7 @@
see init.lua
Migrate from v1 to v2
]]--
-- for lazy programmers
@ -22,7 +22,6 @@ local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Tube = hyperloop.Tube
local Shaft = hyperloop.Shaft
@ -37,12 +36,12 @@ local JunctionsToBePlacedAfter = {}
local function get_tube_data(pos, dir1, dir2, num_tubes)
local param2, tube_type = tubelib2.encode_param2(dir1, dir2, num_tubes)
return pos, param2, tube_type, num_tubes
end
end
-- Check if node has a connection on the given dir
local function connected(self, pos, dir)
local _,node = self:get_node(pos, dir)
return self.primary_node_names[node.name]
return self.primary_node_names[node.name]
or self.secondary_node_names[node.name]
end
@ -100,7 +99,7 @@ local function convert_legary_nodes(self, pos, dir)
if tLegacyNodeNames[node.name] then
local dir1, dir2, num = determine_dir1_dir2_and_num_conn(self, npos)
if dir1 then
self.clbk_after_place_tube(get_tube_data(npos, dir1,
self.clbk_after_place_tube(get_tube_data(npos, dir1,
dir2 or tubelib2.Turn180Deg[dir1], num))
if tubelib2.Turn180Deg[dir] == dir1 then
return npos, dir2
@ -110,9 +109,9 @@ local function convert_legary_nodes(self, pos, dir)
end
end
end
local cnt = 0
if not dir then return pos, dir, cnt end
if not dir then return pos, dir, cnt end
while cnt <= 64000 do
local new_pos, new_dir = convert_next_tube(self, pos, dir)
if cnt > 0 and (cnt % self.max_tube_length) == 0 then -- border reached?
@ -123,11 +122,11 @@ local function convert_legary_nodes(self, pos, dir)
cnt = cnt + 1
end
return pos, dir, cnt
end
end
local function convert_line(self, pos, dir)
local fpos,fdir = convert_legary_nodes(self, pos, dir)
self:tool_repair_tube(pos)
convert_legary_nodes(self, pos, dir)
self:tool_repair_tube(pos)
end
@ -135,12 +134,12 @@ local tWifiNodes = {} -- user for pairing
local lWifiNodes = {} -- used for post processing
local function set_pairing(pos, peer_pos)
M(pos):set_int("tube_dir", Tube:get_primary_dir(pos))
M(peer_pos):set_int("tube_dir", Tube:get_primary_dir(peer_pos))
local tube_dir1 = Tube:store_teleport_data(pos, peer_pos)
local tube_dir2 = Tube:store_teleport_data(peer_pos, pos)
Tube:store_teleport_data(pos, peer_pos)
Tube:store_teleport_data(peer_pos, pos)
end
@ -195,8 +194,8 @@ end
local function search_wifi_node(pos, dir)
local convert_next_tube = function(pos, dir)
local npos, node = Tube:get_node(pos, dir)
local dir1, dir2, num = next_node_on_the_way_to_a_wifi_node(npos)
local npos, _ = Tube:get_node(pos, dir)
local dir1, dir2, _ = next_node_on_the_way_to_a_wifi_node(npos)
if dir1 then
if tubelib2.Turn180Deg[dir] == dir1 then
return npos, dir2
@ -205,9 +204,9 @@ local function search_wifi_node(pos, dir)
end
end
end
local cnt = 0
if not dir then return pos, cnt end
if not dir then return pos, cnt end
while true do
local new_pos, new_dir = convert_next_tube(pos, dir)
if not new_dir then break end
@ -215,12 +214,12 @@ local function search_wifi_node(pos, dir)
cnt = cnt + 1
end
return pos, dir, cnt
end
end
local function search_wifi_node_in_all_dirs(pos)
-- check all positions
for dir = 1, 6 do
local npos, node = Tube:get_node(pos, dir)
local _, node = Tube:get_node(pos, dir)
if node and node.name == "hyperloop:tube1" then
search_wifi_node(pos, dir)
end
@ -230,7 +229,7 @@ end
local function convert_tube_line(pos)
-- check all positions
for dir = 1, 6 do
local npos, node = Tube:get_node(pos, dir)
local _, node = Tube:get_node(pos, dir)
if node and node.name == "hyperloop:tube1" then
convert_line(Tube, pos, dir)
end
@ -266,13 +265,13 @@ end
local function convert_station_data(tAllStations)
tLegacyNodeNames = {
["hyperloop:tube0"] = true,
["hyperloop:tube1"] = true,
["hyperloop:tube2"] = true,
["hyperloop:tube0"] = true,
["hyperloop:tube1"] = true,
["hyperloop:tube2"] = true,
}
local originNodeNames = add_to_table(Tube.primary_node_names, tLegacyNodeNames)
for key,item in pairs(tAllStations) do
if item.pos and Tube:is_secondary_node(item.pos) then
Stations:set(item.pos, station_name(item), {
@ -301,19 +300,19 @@ local function convert_station_data(tAllStations)
end
-- Repair the tube lines of wifi nodes
wifi_post_processing()
Tube.primary_node_names = originNodeNames
end
local function convert_elevator_data(tAllElevators)
tLegacyNodeNames = {
["hyperloop:shaft"] = true,
["hyperloop:shaft"] = true,
["hyperloop:shaft2"] = true,
}
local originNodeNames = add_to_table(Shaft.primary_node_names, tLegacyNodeNames)
local originDirsToCheck = table.copy(Shaft.dirs_to_check)
Shaft.dirs_to_check = {5,6} -- legacy elevators use up/down only
for pos,tElevator in pairs(tAllElevators) do
for _,floor in pairs(tElevator.floors) do
if floor.pos and Shaft:is_secondary_node(floor.pos) then
@ -326,7 +325,7 @@ local function convert_elevator_data(tAllElevators)
end
end
end
Shaft.primary_node_names = originNodeNames
Shaft.dirs_to_check = originDirsToCheck
end

View File

@ -2,3 +2,4 @@ name = hyperloop
depends = default, tubelib2
optional_depends = techage, worldedit
description = Hyperloop Mod, the fast and modern way of traveling.
supported_games = minetest_game

View File

@ -14,26 +14,26 @@
-- for lazy programmers
local S = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
--local M = minetest.get_meta
-- Convert to list and add pos based on key string
local function table_to_list(table)
local lRes = {}
for key,item in pairs(table) do
for key,item in pairs(table) do
item.pos = P(key)
lRes[#lRes+1] = item
lRes[#lRes+1] = item
end
return lRes
end
local function distance(pos1, pos2)
return math.floor(math.abs(pos1.x - pos2.x) +
return math.floor(math.abs(pos1.x - pos2.x) +
math.abs(pos1.y - pos2.y) + math.abs(pos1.z - pos2.z))
end
-- Add the distance to pos to each list item
local function add_distance_to_list(lStations, pos)
for _,item in ipairs(lStations) do
for _,item in ipairs(lStations) do
item.distance = distance(item.pos, pos)
end
return lStations
@ -50,7 +50,7 @@ local function add_index_to_list(lStations)
end
end
end
local key = nil
for idx = 1,#lStations do
key = get_next(key, idx)
@ -61,8 +61,8 @@ end
-- Return a table with all stations, the given station (as 'sKey') is connected with
-- tRes is used for the resulting table (recursive call)
local function get_stations(tStations, sKey, tRes)
if not tStations[sKey] or not tStations[sKey].conn then
return {}
if not tStations[sKey] or not tStations[sKey].conn then
return {}
end
for dir,dest in pairs(tStations[sKey].conn) do
-- Not already visited?
@ -87,7 +87,7 @@ local function sort_based_on_level(tStations)
table.sort(lStations, function(a,b) return (a.idx or 9999) < (b.idx or 9999) end)
return lStations
end
-- Return a list with sorted stations
local function sort_based_on_distance(tStations, pos)
local lStations = table_to_list(table.copy(tStations))
@ -100,7 +100,7 @@ end
-- Return a list with sorted stations
local function sort_based_on_name(tStations, pos)
local lStations = table_to_list(table.copy(tStations))
-- Add distance
-- Add distance
lStations = add_distance_to_list(lStations, pos)
table.sort(lStations, function(a,b) return a.name < b.name end)
return lStations
@ -185,7 +185,7 @@ end
function Network:changed(counter)
return self.change_counter > counter, self.change_counter
end
-- Update the connection data base. The output dir information is needed
-- to be able to delete a connection, if necessary.
-- Returns true, if data base is changed.
@ -273,16 +273,16 @@ function Network:deserialize(data)
self.change_counter = data.change_counter
end
end
function Network:serialize()
return minetest.serialize(self)
end
-- Return a pos/item table with all network nodes, the node at pos is connected with
function Network:get_node_table(pos)
local tRes = {}
local key = S(pos)
get_stations(self.tStations, key, tRes)
get_stations(self.tStations, key, tRes)
tRes[key] = nil
return tRes
end

View File

@ -15,7 +15,6 @@
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
minetest.register_craftitem("hyperloop:hypersteel_ingot", {
description = S("Hypersteel Ingot"),

View File

@ -11,16 +11,14 @@
]]--
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
--local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
--local P = minetest.string_to_pos
local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local I, _ = dofile( minetest.get_modpath("hyperloop").."/intllib.lua")
local Stations = hyperloop.Stations
local PlayerNameTags = {}
local function enter_display(tStation, text)
@ -28,7 +26,7 @@ local function enter_display(tStation, text)
if tStation ~= nil then
local lcd_pos = hyperloop.new_pos(tStation.pos, tStation.facedir, "1F", 2)
-- update display
minetest.registered_nodes["hyperloop:lcd"].update(lcd_pos, text)
minetest.registered_nodes["hyperloop:lcd"].update(lcd_pos, text)
end
end
@ -74,7 +72,7 @@ local function on_arrival(tDeparture, tArrival, player_name, sound)
if val1 ~= nil and val2 ~= nil then
local offs = val1 - val2
local yaw = hyperloop.facedir_to_rad(tArrival.facedir) - offs
player:set_look_yaw(yaw)
player:set_look_horizontal(yaw)
end
-- set player name again
if PlayerNameTags[player_name] then
@ -149,13 +147,13 @@ local function on_start_travel(pos, node, clicker)
if tDeparture == nil or tArrival == nil then
return
end
minetest.sound_play("up2", {
pos = pos,
gain = 0.5,
max_hear_distance = 2
})
-- close the door at arrival station
hyperloop.close_pod_door(tArrival)
-- place player on the seat
@ -166,9 +164,9 @@ local function on_start_travel(pos, node, clicker)
-- hide player name
PlayerNameTags[player_name] = clicker:get_nametag_attributes()
clicker:set_nametag_attributes({text = " "})
-- activate display
local dist = hyperloop.distance(pos, tArrival.pos)
local dist = hyperloop.distance(pos, tArrival.pos)
local text = I("Destination:").." | "..string.sub(tArrival.name, 1, 13).." | "..I("Distance:").." | "..
meter_to_km(dist).." | "..I("Arrival in:").." | "
local atime
@ -182,7 +180,7 @@ local function on_start_travel(pos, node, clicker)
enter_display(tDeparture, text..atime.." sec")
-- block departure and arrival stations
hyperloop.block(departure_pos, arrival_pos, atime+10)
hyperloop.block(departure_pos, arrival_pos, atime+10)
-- store some data for on_timer()
meta:set_int("arrival_time", atime)
@ -207,7 +205,7 @@ minetest.register_node("hyperloop:seat", {
},
drawtype = "nodebox",
paramtype = 'light',
light_source = 1,
light_source = 1,
paramtype2 = "facedir",
is_ground_content = false,
walkable = false,
@ -229,8 +227,8 @@ minetest.register_node("hyperloop:seat", {
on_timer = display_timer,
on_rightclick = on_start_travel,
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
auto_place_node = function(pos, facedir, sStationPos)
M(pos):set_string("sStationPos", sStationPos)
end,

View File

@ -12,12 +12,11 @@
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
--local P = minetest.string_to_pos
local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Tube = hyperloop.Tube
local Stations = hyperloop.Stations
@ -38,7 +37,7 @@ local AssemblyPlan = {
{ 0, "1F", 2, "hyperloop:seat"},
{ 0, "1F", 0, "hyperloop:pod_floor"},
{ 1, "", 0, "hyperloop:lcd"},
-- right slice
-- right slice
{-1, "1F1R", 0, "hyperloop:pod_wall_ni"},
{ 1, "", 0, "hyperloop:pod_wall_ni"},
{ 1, "", 0, "hyperloop:pod_wall_ni"},
@ -51,7 +50,7 @@ local AssemblyPlan = {
{ 0, "1F", 0, "hyperloop:pod_wall_ni"},
{ 1, "", 0, "hyperloop:pod_wall_ni"},
{ 0, "1B", 0, "hyperloop:pod_wall_ni"},
-- left slice
-- left slice
{-1, "2L2R", 0, "hyperloop:pod_wall_ni"},
{ 1, "", 0, "hyperloop:pod_wall_ni"},
{ 1, "", 0, "hyperloop:pod_wall_ni"},
@ -69,10 +68,10 @@ local AssemblyPlan = {
local function store_station(pos, placer)
local facedir = hyperloop.get_facedir(placer)
-- do a facedir correction
-- do a facedir correction
facedir = (facedir + 3) % 4 -- face to LCD
Stations:set(pos, "Station", {
owner = placer:get_player_name(),
owner = placer:get_player_name(),
facedir = facedir,
time_blocked = 0})
end
@ -88,7 +87,7 @@ end
local function place_node(pos, facedir, node_name, sKey)
if node_name == "hyperloop:lcd" then
-- wallmounted devices need a facedir correction
local tbl = {[0]=4, [1]=2, [2]=5, [3]=3}
local tbl = {[0]=4, [1]=2, [2]=5, [3]=3}
minetest.add_node(pos, {name=node_name, paramtype2="wallmounted", param2=tbl[facedir]})
else
minetest.add_node(pos, {name=node_name, param2=facedir})
@ -107,11 +106,11 @@ local function construct(idx, pos, facedir, player_name, sKey)
else
hyperloop.chat(player_name, S("Station completed. Now place the Booking Machine!"))
end
end
end
local function check_space(pos, facedir, placer)
for _,item in ipairs(AssemblyPlan) do
local y, path, node_name = item[1], item[2], item[4]
local y, path, _ = item[1], item[2], item[4]
pos = hyperloop.new_pos(pos, facedir, path, y)
if minetest.is_protected(pos, placer:get_player_name()) then
hyperloop.chat(placer, S("Area is protected!"))
@ -169,7 +168,7 @@ local function check_inventory(inv, player)
hyperloop.chat(player, S("Not enough inventory items to build the station!"))
return false
end
local function remove_inventory_items(inv, meta)
inv:remove_item("src", ItemStack("hyperloop:pod_wall 30"))
inv:remove_item("src", ItemStack("hyperloop:hypersteel_ingot 4"))
@ -189,18 +188,18 @@ local function build_station(pos, placer)
-- check protection
if minetest.is_protected(pos, placer:get_player_name()) then
return
end
end
local meta = M(pos)
local inv = meta:get_inventory()
local facedir = hyperloop.get_facedir(placer)
-- do a facedir correction
-- do a facedir correction
facedir = (facedir + 3) % 4 -- face to LCD
if check_inventory(inv, placer) then
Stations:update(pos, {facedir = facedir})
if check_space(table.copy(pos), facedir, placer) then
construct(1, table.copy(pos), facedir, placer:get_player_name(), SP(pos))
meta:set_string("formspec", station_formspec ..
meta:set_string("formspec", station_formspec ..
"button_exit[0,3.9;3,1;destroy;"..S("Destroy Station").."]")
meta:set_int("built", 1)
meta:set_int("busy", 1)
@ -222,21 +221,21 @@ local function destroy_station(pos, player_name)
-- check protection
if minetest.is_protected(pos, player_name) then
return
end
end
local station = Stations:get(pos)
if station then
-- remove nodes
local _pos = table.copy(pos)
for _,item in ipairs(AssemblyPlan) do
local y, path, node_name = item[1], item[2], item[4]
local y, path, _ = item[1], item[2], item[4]
_pos = hyperloop.new_pos(_pos, station.facedir, path, y)
minetest.remove_node(_pos)
end
on_destruct(pos)
-- maintain meta
local meta = M(pos)
meta:set_string("formspec", station_formspec ..
meta:set_string("formspec", station_formspec ..
"button_exit[0,3.9;3,1;build;"..S("Build Station").."]")
local inv = meta:get_inventory()
add_inventory_items(inv)
@ -257,12 +256,12 @@ minetest.register_node("hyperloop:station", {
on_construct = function(pos)
local meta = M(pos)
meta:set_string("formspec", station_formspec ..
meta:set_string("formspec", station_formspec ..
"button_exit[0,3.9;3,1;build;"..S("Build Station").."]")
local inv = meta:get_inventory()
inv:set_size('src', 4)
end,
after_place_node = function(pos, placer, itemstack, pointed_thing)
hyperloop.check_network_level(pos, placer)
M(pos):set_string("infotext", S("Station"))
@ -280,7 +279,7 @@ minetest.register_node("hyperloop:station", {
build_station(pos, player)
end
end,
on_dig = function(pos, node, puncher, pointed_thing)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
@ -288,13 +287,13 @@ minetest.register_node("hyperloop:station", {
minetest.node_dig(pos, node, puncher, pointed_thing)
end
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Tube:after_dig_node(pos)
Stations:delete(pos)
end,
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
paramtype2 = "facedir",
groups = {cracky = 1},
is_ground_content = false,
@ -309,7 +308,7 @@ minetest.register_node("hyperloop:pod_wall", {
"hyperloop_skin2.png",
"hyperloop_skin.png",
},
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
paramtype2 = "facedir",
groups = {cracky=2},
is_ground_content = false,
@ -324,7 +323,7 @@ minetest.register_node("hyperloop:pod_wall_ni", {
"hyperloop_skin2.png",
"hyperloop_skin.png",
},
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
paramtype2 = "facedir",
groups = {cracky=2, not_in_creative_inventory=1},
is_ground_content = false,
@ -345,7 +344,7 @@ minetest.register_node("hyperloop:pod_floor", {
{-8/16, -8/16, -8/16, 8/16, -7.5/16, 8/16},
},
},
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
paramtype2 = "facedir",
groups = {cracky=2, not_in_creative_inventory=1},
is_ground_content = false,

View File

@ -11,27 +11,11 @@
]]--
-- for lazy programmers
local S = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
--local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local function station_name(pos)
local dataSet = hyperloop.get_station(pos)
if dataSet then
if dataSet.junction == true then
return S("Junction at ")..SP(pos)
elseif dataSet.name ~= nil then
return S("Station '")..dataSet.name.."' at "..SP(pos)
else
return S("Station at ")..SP(pos)
end
end
return S("Open end at ")..minetest.pos_to_string(pos)
end
function hyperloop.check_network_level(pos, player)
if hyperloop.free_tube_placement_enabled then
@ -54,9 +38,9 @@ end
local Tube = tubelib2.Tube:new({
dirs_to_check = dirs_to_check,
max_tube_length = 1000,
max_tube_length = 1000,
show_infotext = true,
primary_node_names = {"hyperloop:tubeS", "hyperloop:tubeS2", "hyperloop:tubeA", "hyperloop:tubeA2"},
primary_node_names = {"hyperloop:tubeS", "hyperloop:tubeS2", "hyperloop:tubeA", "hyperloop:tubeA2"},
secondary_node_names = {"hyperloop:junction", "hyperloop:station", "hyperloop:tube_wifi1"},
after_place_tube = function(pos, param2, tube_type, num_tubes)
if num_tubes == 2 then
@ -71,7 +55,7 @@ hyperloop.Tube = Tube
minetest.register_node("hyperloop:tubeS", {
description = S("Hyperloop Tube"),
inventory_image = minetest.inventorycube("hyperloop_tube_locked.png",
inventory_image = minetest.inventorycube("hyperloop_tube_locked.png",
'hyperloop_tube_open.png', "hyperloop_tube_locked.png"),
tiles = {
-- up, down, right, left, back, front
@ -113,11 +97,11 @@ minetest.register_node("hyperloop:tubeS", {
end
return false
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Tube:after_dig_tube(pos, oldnode, oldmetadata)
end,
paramtype2 = "facedir", -- important!
on_rotate = screwdriver.disallow, -- important!
paramtype = "light",
@ -166,7 +150,7 @@ minetest.register_node("hyperloop:tubeS2", {
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Tube:after_dig_tube(pos, oldnode, oldmetadata)
end,
paramtype2 = "facedir", -- important!
on_rotate = screwdriver.disallow, -- important!
paramtype = "light",
@ -184,7 +168,7 @@ minetest.register_node("hyperloop:tubeS2", {
minetest.register_node("hyperloop:tubeA", {
description = S("Hyperloop Tube"),
inventory_image = minetest.inventorycube("hyperloop_tube_locked.png",
inventory_image = minetest.inventorycube("hyperloop_tube_locked.png",
'hyperloop_tube_open.png', "hyperloop_tube_locked.png"),
tiles = {
-- up, down, right, left, back, front
@ -233,7 +217,7 @@ minetest.register_node("hyperloop:tubeA", {
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Tube:after_dig_tube(pos, oldnode, oldmetadata)
end,
paramtype2 = "facedir", -- important!
on_rotate = screwdriver.disallow, -- important!
paramtype = "light",
@ -260,7 +244,7 @@ minetest.register_node("hyperloop:tubeA2", {
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Tube:after_dig_tube(pos, oldnode, oldmetadata)
end,
paramtype2 = "facedir", -- important!
on_rotate = screwdriver.disallow, -- important!
paramtype = "light",

View File

@ -12,12 +12,11 @@
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
--local P = minetest.string_to_pos
--local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Shaft = hyperloop.Shaft
local Tube = hyperloop.Tube
@ -36,11 +35,11 @@ end
local function repair_tubes(itemstack, placer, pointed_thing)
if pointed_thing.type == "node" then
local pos = pointed_thing.under
local dir1, dir2, fpos1, fpos2, fdir1, fdir2, cnt1, cnt2 =
local dir1, dir2, fpos1, fpos2, fdir1, fdir2, cnt1, cnt2 =
Shaft:tool_repair_tube(pos, placer, pointed_thing)
if fpos1 and fpos2 then
if cnt1 + cnt2 >= Shaft.max_tube_length then
minetest.chat_send_player(placer:get_player_name(), string.char(0x1b) ..
minetest.chat_send_player(placer:get_player_name(), string.char(0x1b) ..
"(c@#ff0000)" .. S("[Hyperloop] Error: Tube is too long!"))
end
minetest.chat_send_player(placer:get_player_name(), chat_message(dir1, cnt1, fpos1, fdir1))
@ -52,11 +51,11 @@ local function repair_tubes(itemstack, placer, pointed_thing)
max_hear_distance=5,
loop=false})
else
local dir1, dir2, fpos1, fpos2, fdir1, fdir2, cnt1, cnt2 =
dir1, dir2, fpos1, fpos2, fdir1, fdir2, cnt1, cnt2 =
Tube:tool_repair_tube(pos, placer, pointed_thing)
if fpos1 and fpos2 then
if cnt1 + cnt2 >= Shaft.max_tube_length then
minetest.chat_send_player(placer:get_player_name(), string.char(0x1b) ..
minetest.chat_send_player(placer:get_player_name(), string.char(0x1b) ..
"(c@#ff0000)" .. S("[Hyperloop] Error: Tube is too long!"))
end
minetest.chat_send_player(placer:get_player_name(), chat_message(dir1, cnt1, fpos1, fdir1))
@ -70,7 +69,7 @@ local function repair_tubes(itemstack, placer, pointed_thing)
end
end
else
minetest.chat_send_player(placer:get_player_name(),
minetest.chat_send_player(placer:get_player_name(),
S("[Crowbar Help]\n")..
S(" left: remove node\n")..
S(" right: repair tube/shaft line\n"))
@ -83,7 +82,7 @@ local function add_to_inventory(placer, item_name)
if inv and item and inv:room_for_item("main", item) then
inv:add_item("main", item)
end
end
end
local function remove_tube(itemstack, placer, pointed_thing)
if minetest.check_player_privs(placer:get_player_name(), "hyperloop") then
@ -100,10 +99,6 @@ local function remove_tube(itemstack, placer, pointed_thing)
end
end
local function dump_data_base(pos)
print(dump(hyperloop.tDatabase))
end
-- Tool for tube workers to crack a protected tube line
minetest.register_node("hyperloop:tube_crowbar", {
description = S("Hyperloop Tube Crowbar"),
@ -118,8 +113,8 @@ minetest.register_node("hyperloop:tube_crowbar", {
stack_max = 1,
})
minetest.register_privilege("hyperloop",
{description = S("Rights to remove tube nodes by means of the crowbar"),
minetest.register_privilege("hyperloop",
{description = S("Rights to remove tube nodes by means of the crowbar"),
give_to_singleplayer = false})

View File

@ -14,7 +14,7 @@
local PI = 3.1415926
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
--local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
@ -40,7 +40,7 @@ end
-- Distance between two points in (tube) blocks
function hyperloop.distance(pos1, pos2)
return math.floor(math.abs(pos1.x - pos2.x) +
return math.floor(math.abs(pos1.x - pos2.x) +
math.abs(pos1.y - pos2.y) + math.abs(pos1.z - pos2.z))
end
@ -67,7 +67,7 @@ function hyperloop.new_pos(pos, facedir, path, y_offs)
_pos = vector.add(_pos, vector.multiply(dir, num))
end
return _pos
end
end
function hyperloop.is_player_around(pos)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 2)) do

View File

@ -17,7 +17,6 @@ local Waypoints = {}
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
minetest.register_node("hyperloop:waypoint", {
description = S("Hyperloop Waypoint"),
@ -33,7 +32,7 @@ minetest.register_node("hyperloop:waypoint", {
{ -4/16, -8/16, -4/16, 4/16, -7/16, 4/16},
},
},
after_place_node = function(pos, placer)
local name = placer:get_player_name()
if Waypoints[name] then
@ -46,7 +45,7 @@ minetest.register_node("hyperloop:waypoint", {
name = "Hyperloop",
text = "m",
world_pos = pos
})
})
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
@ -57,9 +56,9 @@ minetest.register_node("hyperloop:waypoint", {
end
end,
on_rotate = screwdriver.disallow,
on_rotate = screwdriver.disallow,
paramtype = "light",
light_source = minetest.LIGHT_MAX,
light_source = minetest.LIGHT_MAX,
sunlight_propagates = true,
groups = {cracky=2, crumbly=2, choppy=2},
is_ground_content = false,

View File

@ -12,7 +12,6 @@
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Tube = hyperloop.Tube
@ -39,13 +38,13 @@ minetest.register_node("hyperloop:tube_wifi1", {
tubelib2_on_update = function(node, pos, out_dir, peer_pos, peer_in_dir)
Tube:prepare_pairing(pos, out_dir, sFormspec)
end,
on_receive_fields = function(pos, formname, fields, player)
if fields.channel ~= nil then
Tube:pairing(pos, fields.channel)
end
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
Tube:stop_pairing(pos, oldmetadata, sFormspec)
local tube_dir = tonumber(oldmetadata.fields.tube_dir or 0)

View File

@ -217,9 +217,11 @@ end
function lcdlib.register_display_entity(entity_name)
if not minetest.registered_entity then
minetest.register_entity(':'..entity_name, {
collisionbox = { 0, 0, 0, 0, 0, 0 },
visual = "upright_sprite",
textures = {},
initial_properties = {
collisionbox = { 0, 0, 0, 0, 0, 0 },
visual = "upright_sprite",
textures = {},
},
on_activate = lcdlib.on_activate,
})
end

View File

@ -2,3 +2,4 @@ name=minecart
depends = default,carts
optional_depends = doc, doclib
description = Minecart, the lean railway transportation automation system
supported_games = minetest_game

View File

@ -129,7 +129,10 @@ function networks.open_node(pos, node, placer)
if ndef and ndef.paramtype2 == "color" then
stack:get_meta():set_int("palette_index", node.param2)
end
inv:add_item("main", stack)
local leftover = inv:add_item("main", stack)
if leftover:get_count() > 0 then
minetest.add_item(pos, leftover)
end
return true
end

View File

@ -31,6 +31,30 @@ local function range(from, to)
end, minetest.get_us_time() + safer_lua.MaxExeTime, from-1
end
-- Borrowed from mesecons_luacontroller
-- string.rep(str, n) with a high value for n can be used to DoS
-- the server. Therefore, limit max. length of generated string.
local function safe_string_rep(str, n)
if #str * n > 1000 then
debug.sethook() -- Clear hook
error("string.rep: string length overflow", 2)
end
return string.rep(str, n)
end
-- Borrowed from mesecons_luacontroller
-- string.find with a pattern can be used to DoS the server.
-- Therefore, limit string.find to patternless matching.
local function safe_string_find(...)
if (select(4, ...)) ~= true then
debug.sethook() -- Clear hook
error("string.find: 'plain' (fourth parameter) must always be true")
end
return string.find(...)
end
local BASE_ENV = {
Array = safer_lua.Array,
Store = safer_lua.Store,
@ -47,14 +71,14 @@ local BASE_ENV = {
string = {
byte = string.byte,
char = string.char,
find = string.find,
find = safe_string_find,
format = string.format,
gmatch = string.gmatch,
gsub = string.gsub,
len = string.len,
lower = string.lower,
match = string.match,
rep = string.rep,
rep = safe_string_rep,
sub = string.sub,
upper = string.upper,
split = function(str, separator, include_empty, max_splits, sep_is_pattern)

View File

@ -15,7 +15,7 @@
safer_lua = {}
-- Version for compatibility checks, see readme.md/history
safer_lua.version = 1.01
safer_lua.version = 1.03
dofile(minetest.get_modpath("safer_lua") .. "/data_struct.lua")
dofile(minetest.get_modpath("safer_lua") .. "/scanner.lua")

View File

@ -10,7 +10,7 @@ A subset of the language Lua for safe and secure Lua sandboxes with:
### License
Copyright (C) 2018-2022 Joachim Stolberg
Code: Licensed under the GNU LGPL version 2.1 or later. See LICENSE.txt
Functions safe_string_rep and safe_string_find (from mesecons) LGPL version 3
### Dependencies
none
@ -20,3 +20,4 @@ none
- 2020-03-14 v1.00 * extracted from TechPack and released
- 2021-11-28 v1.01 * function `string.split2` added, `unpack` removed
- 2022-12-22 v1.02 * Limit code execution time for recursive function calls (#3 by Thomas--S)
- 2024-06-19 V1.03 * Add safe variants for strin.rep() and string.find()

View File

@ -35,12 +35,20 @@ signs_bot.register_flower("default:acacia_bush_stem")
signs_bot.register_flower("default:pine_bush_stem")
minetest.after(1, function()
local function add_flower(name)
local def = minetest.registered_nodes[name]
if def and (def.groups.mushroom == 1 or def.groups.flower == 1) then
signs_bot.register_flower(name)
end
end
for _,def in pairs(minetest.registered_decorations) do
local name = def.decoration
if name and type(name) == "string" then
local mod = string.split(name, ":")[1]
if mod == "flowers" or mod == "bakedclay" then -- Bakedclay also registers flowers as decoration.
signs_bot.register_flower(name)
if type(name) == "string" then
add_flower(name)
elseif type(name) == "table" then
for _,sub_name in ipairs(name) do
add_flower(sub_name)
end
end
end

View File

@ -3,7 +3,7 @@
Signs Bot
=========
Copyright (C) 2019-2021 Joachim Stolberg
Copyright (C) 2019-2024 Joachim Stolberg
GPL v3
See LICENSE.txt for more information
@ -263,20 +263,32 @@ signs_bot.register_botcommand("fall_down", {
description = S("Fall into a hole/chasm (up to 10 blocks)"),
cmnd = function(base_pos, mem)
if not mem.bot_falling then
local pos1 = {x=mem.robot_pos.x, y=mem.robot_pos.y-1, z=mem.robot_pos.z}
local pos2 = {x=mem.robot_pos.x, y=mem.robot_pos.y-10, z=mem.robot_pos.z}
local sts, pos3 = minetest.line_of_sight(pos1, pos2)
if sts == false then
sts, _ = minetest.spawn_falling_node(mem.robot_pos)
mem.stored_node = get_node_lvm(pos3)
minetest.swap_node(pos3, {name="air"})
if sts then
mem.bot_falling = 2
mem.robot_pos = {x=pos3.x, y=pos3.y, z=pos3.z}
return signs_bot.BUSY
end
--Run a while loop that checks the 10 nodes below bot for a node with the walkable property, breaking the loop once it finds a walkable node.
local fallcounter = 0
local fallnode = {walkable = false}
while fallcounter <= 9 and fallnode.walkable == false do
fallcounter = fallcounter + 1
--Pulls the node name from the next position, then assigns the node definintion to the fallnode variable.
fallnode = minetest.get_node_or_nil({x=mem.robot_pos.x, y=mem.robot_pos.y-fallcounter, z=mem.robot_pos.z})
fallnode = minetest.registered_nodes[fallnode.name]
end
--If the first nine nodes below the bot are not walkable, then it should assign the definintion to the 10th node. If it too is not walkable, then a "Too Deep" error is returned.
if fallnode.walkable == false then
return signs_bot.ERROR, "Too deep"
end
--Designates the node above the walkable node as the new location for the bot.
local pos3 = {x=mem.robot_pos.x, y=mem.robot_pos.y-fallcounter+1, z=mem.robot_pos.z}
--Turns the bot into a falling node.
local sts, _ = minetest.spawn_falling_node(mem.robot_pos)
--Stores the data for the node the bot will land in and replaces it with air. This way if the node the bot lands in is occupied by an unwalkable node, such as a rail or sign,
--it will be repalced when the bot moves.
mem.stored_node = get_node_lvm(pos3)
minetest.swap_node(pos3, {name="air"})
if sts then
mem.bot_falling = 2
mem.robot_pos = {x=pos3.x, y=pos3.y, z=pos3.z}
return signs_bot.BUSY
end
return signs_bot.ERROR, "Too deep"
else
mem.bot_falling = mem.bot_falling - 1
if mem.bot_falling <= 0 then

View File

@ -86,7 +86,7 @@ local function tokenizer(script)
if num_param >= 3 then
tokens[#tokens + 1] = param3 or "nil"
end
elseif cmnd:find("%w+:") then
elseif cmnd:find("%w+:$") then
tokens[#tokens + 1] = cmnd
end
end
@ -98,7 +98,7 @@ local function pass1(tokens)
local pc = 1
tSymbolTbl = {}
for _, token in ipairs(tokens) do
if token:find("%w+:") then
if token:find("%w+:$") then
tSymbolTbl[token] = pc
else
pc = pc + 1
@ -265,7 +265,7 @@ function api.check_script(script)
if tCmdDef[cmnd].num_param > 0 and not tCmdDef[cmnd].check(param1, param2, param3) then
return false, S("Parameter error"), idx
end
elseif not cmnd:find("%w+:") then
elseif not cmnd:find("%w+:$") then
return false, S("Command error"), idx
end
tbl[cmnd] = (tbl[cmnd] or 0) + 1
@ -298,8 +298,10 @@ function api.run_script(base_pos, mem)
CodeCache[hash] = compile(mem.script)
mem.pc = 1
mem.Stack = {}
elseif res == api.ERROR then
return res, err, gen_string_cmnd(code, mem.pc, num_param, mem.script)
end
return res, err, gen_string_cmnd(code, mem.pc, num_param, mem.script)
return res, err, ""
end
return api.EXIT
end

View File

@ -2,3 +2,5 @@ name=signs_bot
depends = default,farming,basic_materials,tubelib2
optional_depends = node_io,techage,doc,minecart,bucket,fire,xdecor,ethereal,compost,doclib
description = A robot controlled by signs
supported_games = minetest_game

View File

@ -39,14 +39,18 @@ local function store_data(placer, pos, name)
meta:set_string("signs_bot_spos", spos)
meta:set_string("signs_bot_name", name)
else
meta:set_string("signs_bot_spos", nil)
meta:set_string("signs_bot_name", nil)
meta:set_string("signs_bot_spos", "")
meta:set_string("signs_bot_name", "")
end
end
-- Write actuator_pos data to sensor_pos
local function pairing(actuator_pos, sensor_pos)
local function pairing(actuator_pos, sensor_pos, invert)
local signal = signs_bot.get_signal(actuator_pos)
if invert then
signal = ({on = "off", off = "on"})[signal]
end
if signal then
signs_bot.store_signal(sensor_pos, actuator_pos, signal)
local node = tubelib2.get_node_lvm(sensor_pos)
@ -58,24 +62,29 @@ local function pairing(actuator_pos, sensor_pos)
end
local function use_tool(itemstack, placer, pointed_thing)
local invert = false
if placer:get_player_control().aux1 then
invert = true
end
if pointed_thing.type == "node" then
local pos1,ntype1 = get_stored_data(placer)
local pos2,ntype2 = get_current_data(pointed_thing)
if ntype1 == "actuator" and (ntype2 == "sensor" or ntype2 == "repeater") then
pairing(pos1, pos2)
pairing(pos1, pos2, invert)
store_data(placer, nil, nil)
minetest.sound_play('signs_bot_pong', {to_player = placer:get_player_name()})
elseif (ntype1 == "actuator" or ntype1 == "repeater") and ntype2 == "sensor" then
pairing(pos1, pos2)
pairing(pos1, pos2, invert)
store_data(placer, nil, nil)
minetest.sound_play('signs_bot_pong', {to_player = placer:get_player_name()})
elseif ntype2 == "actuator" and (ntype1 == "sensor" or ntype1 == "repeater") then
pairing(pos2, pos1)
pairing(pos2, pos1, invert)
store_data(placer, nil, nil)
minetest.sound_play('signs_bot_pong', {to_player = placer:get_player_name()})
elseif (ntype2 == "actuator" or ntype2 == "repeater") and ntype1 == "sensor" then
pairing(pos2, pos1)
pairing(pos2, pos1, invert)
store_data(placer, nil, nil)
minetest.sound_play('signs_bot_pong', {to_player = placer:get_player_name()})
elseif ntype2 == "actuator" or ntype2 == "sensor" or ntype2 == "repeater" then

View File

@ -73,6 +73,19 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
return stack:get_count()
end
local function get_original_waste(inv, waste)
-- Waste has meta data, so we need to find the original waste item
for i = 1, 8 do
local stack = inv:get_stack("src", i)
if stack:get_count() == 1 then
if stack:get_name() == waste:get_name() then
return stack
end
end
end
return waste
end
local function making(pos, crd, nvm, inv)
local owner = M(pos):get_string("owner")
local rtype = RecipeType[crd.stage]
@ -87,6 +100,17 @@ local function making(pos, crd, nvm, inv)
return
end
end
-- For some recipes, an item customized via metadata is used as a copy template.
-- This allows specially programmed items such as ROM chips to be produced.
-- The metadata of the copy template must be passed to the on_production function.
-- At the same time, the metadata of the copy template must not be lost when moving
-- as 'waste' to the output inventory.
local idef = minetest.registered_items[recipe.output.name]
if waste and idef and idef.on_production then
waste = get_original_waste(inv, waste)
local metadata = waste:get_meta():to_table().fields or {}
output = idef.on_production(output, metadata)
end
for _,item in ipairs(recipe.input) do
local input = ItemStack(item.name.." "..item.num)
inv:remove_item("src", input)

View File

@ -78,7 +78,11 @@ local function del_pos(pos, player)
local meta = player:get_meta()
local lPos = minetest.deserialize(meta:get_string("techage_forceload_blocks")) or {}
lPos = remove_list_elem(lPos, pos)
meta:set_string("techage_forceload_blocks", minetest.serialize(lPos))
if next(lPos) then
meta:set_string("techage_forceload_blocks", minetest.serialize(lPos))
else
meta:set_string("techage_forceload_blocks", "")
end
end
local function get_pos_list(player)
@ -88,7 +92,11 @@ end
local function set_pos_list(player, lPos)
local meta = player:get_meta()
meta:set_string("techage_forceload_blocks", minetest.serialize(lPos))
if next(lPos) then
meta:set_string("techage_forceload_blocks", minetest.serialize(lPos))
else
meta:set_string("techage_forceload_blocks", "")
end
end
local function show_flbs(pos, name, range)
@ -114,20 +122,26 @@ local function formspec(name)
if player then
local lPos = get_pos_list(player)
local tRes = {}
for idx,pos in ipairs(lPos) do
tRes[#tRes+1] = "#"
tRes[#tRes+1] = S("Block at pos")
tRes[#tRes+1] = S("Area from")
tRes[#tRes+1] = S("Area to")
tRes[#tRes+1] = S("Status")
for idx,pos in ipairs(lPos) do
local pos1, pos2 = calc_area(pos)
tRes[#tRes+1] = idx
tRes[#tRes+1] = minetest.formspec_escape(P2S(pos))
tRes[#tRes+1] = minetest.formspec_escape(P2S(pos1))
tRes[#tRes+1] = "to"
tRes[#tRes+1] = minetest.formspec_escape(P2S(pos2))
tRes[#tRes+1] = minetest.forceload_block(pos, true) and 'Loaded' or 'Unloaded'
end
return "size[7,9]"..
return "size[9,9]"..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
"label[0,0;"..S("List of your Forceload Blocks:").."]"..
"tablecolumns[text,width=1.2;text,width=12;text,width=1.6;text,width=12]"..
"table[0,0.6;6.8,8.4;output;"..table.concat(tRes, ",")..";1]"
"tablecolumns[text,width=1.8;text,width=12;text,width=12;text,width=12;text,width=12]"..
"table[0,0.6;8.8,8.4;output;"..table.concat(tRes, ",")..";1]"
end
end
@ -306,3 +320,21 @@ minetest.register_chatcommand("forceload", {
end
end,
})
minetest.register_chatcommand("forceload_verify", {
params = "",
description = "Checks each forceload block and returns a count of active/placed blocks",
func = function(name, param)
local player = minetest.get_player_by_name(name)
if player then
local loaded = {}
local wanted = get_pos_list(player)
for _,pos in ipairs(wanted) do
if minetest.forceload_block(pos, true) then
loaded[#loaded+1] = pos
end
end
minetest.chat_send_player(name, "Found "..#loaded.." out of ".. #wanted .. " force loads")
end
end,
})

View File

@ -81,7 +81,11 @@ techage.register_node({"shop:shop"}, {
on_inv_request = function(pos, in_dir, access_type)
local meta = minetest.get_meta(pos)
if is_owner(pos, meta) then
return meta:get_inventory(), "main"
if access_type == "push" then
return meta:get_inventory(), "stock"
elseif access_type == "pull" then
return meta:get_inventory(), "register"
end
end
end,
on_pull_item = function(pos, in_dir, num)

View File

@ -122,8 +122,23 @@ local function push_items(pos, out_dir, idx, items)
return true
end
end
return false
else
return techage.push_items(pos, out_dir, items, idx)
local taken = items:get_count()
local leftover = techage.push_items(pos, out_dir, items, idx)
if not leftover or leftover == false then
return false -- No items placed
elseif leftover ~= true then
-- One or more items placed?
if leftover:get_count() < taken then
-- place the rest back
local pull_dir = M(pos):get_int("pull_dir")
techage.unpull_items(pos, pull_dir, leftover)
return true -- Some items placed
end
return false -- No items placed
end
return true -- All items placed
end
end

View File

@ -457,6 +457,7 @@ function techage.beduino_send_cmnd(src, number, topic, payload)
if ninfo and ninfo.name and ninfo.pos then
local ndef = NodeDef[ninfo.name]
if ndef and ndef.on_beduino_receive_cmnd then
techage_counting_hit()
return ndef.on_beduino_receive_cmnd(ninfo.pos, src, topic, payload or {})
end
end
@ -469,6 +470,7 @@ function techage.beduino_request_data(src, number, topic, payload)
if ninfo and ninfo.name and ninfo.pos then
local ndef = NodeDef[ninfo.name]
if ndef and ndef.on_beduino_request_data then
techage_counting_hit()
return ndef.on_beduino_request_data(ninfo.pos, src, topic, payload or {})
end
end

View File

@ -10,9 +10,12 @@
Configured inventory lib
Assuming the inventory has the name "conf"
Otherwise the name has to be provided as argument
]]--
local StackName = ... or "conf"
-- for lazy programmers
local M = minetest.get_meta
@ -22,7 +25,7 @@ function inv_lib.preassigned_stacks(pos, xsize, ysize)
local inv = M(pos):get_inventory()
local tbl = {}
for idx = 1, xsize * ysize do
local item_name = inv:get_stack("conf", idx):get_name()
local item_name = inv:get_stack(StackName, idx):get_name()
if item_name ~= "" then
local x = (idx - 1) % xsize
local y = math.floor((idx - 1) / xsize)
@ -36,7 +39,7 @@ function inv_lib.item_filter(pos, size)
local inv = M(pos):get_inventory()
local filter = {}
for idx = 1, size do
local item_name = inv:get_stack("conf", idx):get_name()
local item_name = inv:get_stack(StackName, idx):get_name()
if item_name == "" then item_name = "unconfigured" end
if not filter[item_name] then
filter[item_name] = {}

View File

@ -87,6 +87,14 @@ function marker.stop(name)
MaxNumber[name] = nil
end
minetest.register_on_leaveplayer(function(ObjectRef, timed_out)
if ObjectRef and ObjectRef:is_player() then
local name = ObjectRef:get_player_name()
marker.unmark_all(name)
end
end)
minetest.register_entity(":techage:block_marker", {
initial_properties = {
visual = "cube",

View File

@ -153,6 +153,18 @@ function techage.get_nvm(pos)
return block[key2]
end
-- Returns true/false
function techage.has_nvm(pos)
local key1, key2 = get_keys(pos)
if not NvmStore[key1] then
NvmStore[key1] = backend.get_mapblock_data(key1)
push(key1)
end
return NvmStore[key1][key2] ~= nil
end
function techage.peek_nvm(pos)
local key1, key2 = get_keys(pos)
local block = NvmStore[key1] or {}

View File

@ -0,0 +1,88 @@
--[[
TechAge
=======
Copyright (C) 2019-2024 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
Packing functions
]]--
-- for lazy programmers
local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end
local M = minetest.get_meta
-- string/usercode conversion
local function usercode_to_string(tbl)
if tbl and tbl.inventory then
for list_name,list in pairs(tbl.inventory) do
for i,item in ipairs(list) do
tbl.inventory[list_name][i] = item:to_string()
end
end
end
end
local function string_to_usercode(tbl)
if tbl and tbl.inventory then
for list_name,list in pairs(tbl.inventory) do
for i,item in ipairs(list) do
tbl.inventory[list_name][i] = ItemStack(item)
end
end
end
end
-- pack/unpack node nvm data
local function pack_nvm(pos)
if techage.has_nvm(pos) then
local s = minetest.serialize(techage.get_nvm(pos))
techage.del_mem(pos)
return s
end
end
local function unpack_nvm(pos, s)
if s and s ~= "" then
local tbl = minetest.deserialize(s)
local nvm = techage.get_nvm(pos)
for k,v in pairs(tbl) do
nvm.k = v
end
end
end
-- pack/unpack node metedata
local function pack_meta(pos)
local tbl = M(pos):to_table() or {}
usercode_to_string(tbl)
return minetest.serialize(tbl)
end
local function unpack_meta(pos, s)
if s and s ~= "" then
local tbl = minetest.deserialize(s) or {}
string_to_usercode(tbl)
M(pos):from_table(tbl)
end
end
-------------------------------------------------------------------------------
-- preserve/restore API functions
-------------------------------------------------------------------------------
function techage.preserve_nodedata(pos)
local smeta = pack_meta(pos)
local snvm = pack_nvm(pos)
return minetest.serialize({smeta = smeta, snvm = snvm})
end
function techage.restore_nodedata(pos, s)
local tbl = minetest.deserialize(s) or {}
unpack_nvm(pos, tbl.snvm)
unpack_meta(pos, tbl.smeta)
end

View File

@ -129,7 +129,11 @@ local function generate_formspec_substring(pos, meta, form_def, player_name)
tbl[#tbl+1] = "dropdown[4.72," .. (offs) .. ";5.5,1.4;" .. elem.name .. ";" .. elem.choices .. ";" .. idx .. "]"
end
elseif elem.type == "items" then -- inventory
tbl[#tbl+1] = "list[detached:" .. minetest.formspec_escape(player_name) .. "_techage_wrench_menu;cfg;4.75," .. offs .. ";" .. elem.size .. ",1;]"
if elem.size then
tbl[#tbl+1] = "list[detached:" .. minetest.formspec_escape(player_name) .. "_techage_wrench_menu;cfg;4.75," .. offs .. ";" .. elem.size .. ",1;]"
else
tbl[#tbl+1] = "list[detached:" .. minetest.formspec_escape(player_name) .. "_techage_wrench_menu;cfg;4.75," .. offs .. ";" .. elem.width .. "," .. elem.height .. ";]"
end
player_inv_needed = true
end
end

View File

@ -47,7 +47,6 @@ minetest.register_node("techage:ta4_collider_cooler", {
"techage_filling_ta4.png^techage_frame_ta4.png^techage_cooler.png",
"techage_filling_ta4.png^techage_frame_ta4.png^techage_cooler.png",
},
drawtype = "nodebox",
paramtype2 = "facedir",
groups = {cracky = 1},
on_rotate = screwdriver.disallow,

View File

@ -207,7 +207,6 @@ minetest.register_node("techage:ta4_detector_core", {
"default_steel_block.png^techage_collider_detector_core.png",
"default_steel_block.png^techage_collider_detector_core.png",
},
drawtype = "nodebox",
paramtype2 = "facedir",
groups = {cracky = 1},
is_ground_content = false,

View File

@ -56,6 +56,8 @@ minetest.register_node("techage:ta4_collider_tube_inlet", {
fixed = {-4/8, -4/8, -4/8, 4/8, 4/8, 4/8},
},
paramtype2 = "facedir",
paramtype = "light",
use_texture_alpha = techage.CLIP,
groups = {cracky = 1},
on_rotate = screwdriver.disallow,
is_ground_content = false,

View File

@ -12,6 +12,7 @@ local settings = {
doclib.create_manual("techage", "DE", settings)
doclib.create_manual("techage", "EN", settings)
doclib.create_manual("techage", "pt-BR", settings)
local content
content = dofile(MP.."/doc/manual_DE.lua")
@ -40,6 +41,18 @@ doclib.add_to_manual("techage", "EN", content)
content = dofile(MP.."/doc/manual_ta5_EN.lua")
doclib.add_to_manual("techage", "EN", content)
content = dofile(MP.."/doc/manual_pt-BR.lua")
doclib.add_to_manual("techage", "pt-BR", content)
content = dofile(MP.."/doc/manual_ta1_pt-BR.lua")
doclib.add_to_manual("techage", "pt-BR", content)
content = dofile(MP.."/doc/manual_ta2_pt-BR.lua")
doclib.add_to_manual("techage", "pt-BR", content)
content = dofile(MP.."/doc/manual_ta3_pt-BR.lua")
doclib.add_to_manual("techage", "pt-BR", content)
content = dofile(MP.."/doc/manual_ta4_pt-BR.lua")
doclib.add_to_manual("techage", "pt-BR", content)
content = dofile(MP.."/doc/manual_ta5_pt-BR.lua")
doclib.add_to_manual("techage", "pt-BR", content)
local board_box = {
type = "wallmounted",
@ -94,7 +107,7 @@ minetest.register_node("techage:construction_board_EN", {
selection_box = board_box,
after_place_node = function(pos, placer, itemstack)
M(pos):set_string("infotext", "TA Konstruktionsplan (EN)")
M(pos):set_string("infotext", "TA Construction Board (EN)")
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "EN"))
end,
@ -124,6 +137,45 @@ minetest.register_craft({
},
})
minetest.register_node("techage:construction_board_pt_BR", {
description = "TA Placa de construção (pt-BR)",
inventory_image = 'techage_constr_plan_inv.png',
tiles = {"techage_constr_plan.png"},
drawtype = "nodebox",
node_box = board_box,
selection_box = board_box,
after_place_node = function(pos, placer, itemstack)
M(pos):set_string("infotext", "TA Placa de construção (pt-BR)")
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "pt-BR"))
end,
on_receive_fields = function(pos, formname, fields, player)
local player_name = player:get_player_name()
if minetest.is_protected(pos, player_name) then
return
end
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "pt-BR", fields))
end,
paramtype2 = "wallmounted",
paramtype = "light",
use_texture_alpha = techage.CLIP,
sunlight_propagates = true,
is_ground_content = false,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_craft({
output = "techage:construction_board_pt_BR",
recipe = {
{"default:stick", "default:stick", "default:paper"},
{"default:paper", "default:paper", "default:paper"},
{"default:paper", "default:paper", "default:paper"},
},
})
minetest.register_craft({
type = "shapeless",
output = "techage:construction_board_EN",
@ -133,9 +185,14 @@ minetest.register_craft({
minetest.register_craft({
type = "shapeless",
output = "techage:construction_board",
recipe = {"techage:construction_board_EN"},
recipe = {"techage:construction_board_pt_BR"},
})
minetest.register_craft({
type = "shapeless",
output = "techage:construction_board_pt_BR",
recipe = {"techage:construction_board_EN"},
})
--
-- Legacy API functions
@ -149,6 +206,7 @@ function techage.add_manual_items(table_with_items)
for name, image in pairs(table_with_items) do
doclib.add_manual_image("techage", "EN", name, image)
doclib.add_manual_image("techage", "DE", name, image)
doclib.add_manual_image("techage", "pt-BR", name, image)
end
end
@ -156,5 +214,6 @@ function techage.add_manual_plans(table_with_plans)
for name, plan in pairs(table_with_plans) do
doclib.add_manual_plan("techage", "EN", name, plan)
doclib.add_manual_plan("techage", "DE", name, plan)
doclib.add_manual_plan("techage", "pt-BR", name, plan)
end
end

View File

@ -117,6 +117,7 @@ local items = {
ta3_terminal = "techage:terminal2",
ta3_colorlamp = "techage:color_lamp_off",
ta3_doorblock = "techage:doorblock20",
ta3_soundblock = "techage:ta3_soundblock",
ta3_programmer = "techage:programmer",
ta3_doorcontroller = "techage:ta3_doorcontroller",
ta3_drill_pipe_wrench = "techage:ta3_drill_pipe_wrench",
@ -228,4 +229,5 @@ local items = {
for name, image in pairs(items) do
doclib.add_manual_image("techage", "DE", name, image)
doclib.add_manual_image("techage", "EN", name, image)
doclib.add_manual_image("techage", "pt-BR", name, image)
end

View File

@ -15,7 +15,7 @@ return {
texts = {
"Tech Age ist eine Technik-Mod mit 5 Entwicklungsstufen:\n"..
"\n"..
"TA1: Eisenzeitalter (Iron Age) \n"..
"TA1: Eisenzeitalter (Iron Age)\n"..
"Benutze Werkzeuge und Hilfsmittel wie Köhler\\, Kohlebrenner\\, Kiessieb\\, Hammer\\, Hopper um notwendige Erze und Metalle zu schürfen und zu verarbeiten.\n"..
"\n"..
"TA2: Dampfzeitalter (Steam Age)\n"..

View File

@ -26,12 +26,12 @@ return {
"Find and extract oil\\, built railways for oil transportation. A power plant provides the necessary electricity for your machines. Electric light illuminates your industrial plants.\n"..
"\n"..
"TA4: Present\n"..
"Renewable energy sources such as wind\\, sun and biofuels help you to leave the oil age. With modern technologies and intelligent machines you set out into the future.\n"..
"Renewable energy sources such as wind\\, sun and bio-fuels help you to leave the oil age. With modern technologies and intelligent machines you set out into the future.\n"..
"\n"..
"TA5: Future\n"..
"Machines to overcome space and time\\, new sources of energy and other achievements shape your life.\n"..
"\n"..
"Note: With a click on the plus sign you get into the subchapters of this manual.\n"..
"Note: With a click on the plus sign you get into the sub-chapters of this manual.\n"..
"\n"..
"\n"..
"\n",

View File

@ -0,0 +1,152 @@
return {
titles = {
"1,Mod Tech Age",
"2,TA1: Idade do Ferro",
"2,TA2: Idade do Vapor",
"2,TA3: Idade do Petróleo",
"2,TA4: Tempos atuais (Presente)",
"2,TA5: Futuro",
"1,Dicas",
"1,Mudanças a partir da versão 1.0",
"2,Dicas sobre a troca",
"1,Minérios e Minerais",
"2,Meridium",
"2,Usmium",
"2,Baborium",
"2,Petróleo",
"2,Bauxita",
"2,Basalto",
"2,History",
},
texts = {
"O Tech Age é um mod de tecnologia com 5 estágios de desenvolvimento:\n"..
"\n",
"Utilize ferramentas e instrumentos auxiliares como queimadores de carvão\\, peneiras de cascalho\\, martelos e funis para extrair e processar minérios e metais necessários.\n"..
"\n",
"Construa uma máquina a vapor com eixos de transmissão e use-a para operar suas primeiras máquinas de processamento de minérios.\n"..
"\n",
"Encontre e extraia óleo\\, construa ferrovias para transporte de óleo. Uma usina fornece a eletricidade necessária para suas máquinas. A luz elétrica ilumina suas instalações industriais.\n"..
"\n",
"Fontes de energia renovável\\, como vento\\, sol e biocombustíveis\\, ajudam você a sair da era do petróleo. Com tecnologias modernas e máquinas inteligentes\\, você parte para o futuro.\n"..
"\n",
"Máquinas para superar espaço e tempo\\, novas fontes de energia e outras conquistas moldam sua vida.\n"..
"\n"..
"Nota: Clicando no sinal de adição\\, você acessa os subcapítulos deste manual.\n"..
"\n"..
"\n"..
"\n",
"Esta documentação está disponível tanto \"dentro do jogo\" (plano de construção de blocos) quanto no GitHub como arquivos MD.\n"..
"\n"..
" - Link: https://github.com/joe7575/techage/wiki\nOs planos de construção (diagramas) para a construção das máquinas e as imagens estão disponíveis apenas no jogo.\n"..
"\n"..
"Com o Tech Age\\, você precisa começar do zero. Você só pode criar blocos TA2 com os itens do TA1\\, para o TA3 você precisa dos resultados do TA2\\, e assim por diante.\n"..
"\n"..
"No TA2\\, as máquinas só funcionam com eixos de transmissão.\n"..
"\n"..
"A partir do TA3\\, as máquinas funcionam com eletricidade e têm uma interface de comunicação para controle remoto.\n"..
"\n"..
"O TA4 adiciona mais fontes de energia\\, mas também desafios logísticos mais altos (linhas de energia\\, transporte de itens).\n"..
"\n",
"A partir da V1.0 (17/07/2021)\\, as seguintes alterações foram feitas:\n"..
"\n"..
" - O algoritmo para calcular a distribuição de energia foi alterado. Isso torna os sistemas de armazenamento de energia mais importantes. Eles compensam as flutuações\\, o que é importante em redes maiores com vários geradores.\n"..
" - Por esse motivo\\, o TA2 recebeu seu próprio sistema de armazenamento de energia.\n"..
" - Os blocos de bateria do TA3 também servem como armazenamento de energia. Sua funcionalidade foi adaptada de acordo.\n"..
" - O sistema de armazenamento do TA4 foi revisado. O permutador de calor recebeu um novo número porque a funcionalidade foi movida do bloco inferior para o bloco central. Se eles estiverem sendo controlados remotamente\\, o número do nó deve ser adaptado. Os geradores não têm mais um menu próprio\\, mas são ligados/desligados apenas através do permutador de calor. O permutador de calor e o gerador agora devem estar conectados à mesma rede!\n"..
" - Vários sistemas de energia podem agora ser acoplados via blocos transformadores TA4.\n"..
" - Um novo bloco medidor de eletricidade TA4 para sub-redes também foi adicionado.\n"..
" - Pelo menos um bloco de bateria ou um sistema de armazenamento em cada rede.\n"..
"\n",
"Muitos outros blocos receberam alterações menores. Portanto\\, é possível que máquinas ou sistemas não reiniciem imediatamente após a troca. Em caso de falhas\\, as seguintes dicas ajudarão:\n"..
"\n"..
" - Desligue e ligue as máquinas novamente.\n"..
" - Remova um bloco de cabo de energia e coloque-o de volta no lugar.\n"..
" - Remova completamente o bloco e coloque-o de volta no lugar.\n"..
"\n",
"Techage adiciona novos itens ao jogo:\n"..
"\n"..
" - Meridium - uma liga para a produção de ferramentas luminosas no TA1\n"..
" - Usmium - um minério que é extraído no TA2 e necessário para o TA3\n"..
" - Baborium - um metal necessário para receitas no TA3\n"..
" - Petróleo - necessário no TA3\n"..
" - Bauxita - um minério de alumínio necessário no TA4 para produzir alumínio\n"..
" - Basalto - surge quando água e lava se encontram\n"..
"\n",
"O Meridium é uma liga de aço e cristais de mesecons. Lingotes de Meridium podem ser feitos com a caldeira a carvão a partir de aço e cristais de mesecons. O Meridium brilha no escuro. Ferramentas feitas de Meridium também emitem luz e são\\, portanto\\, muito úteis na mineração subterrânea.\n"..
"\n"..
"\n"..
"\n",
"O Usmium ocorre apenas como pepitas e só pode ser obtido lavando cascalho com o sistema de lavagem de cascalho TA2/TA3.\n"..
"\n"..
"\n"..
"\n",
"O Baborium só pode ser obtido através da mineração subterrânea. Essa substância só pode ser encontrada a uma profundidade de -250 a -340 metros.\n"..
"\n"..
"O Baborium só pode ser derretido na Fornalha Industrial TA3.\n"..
"\n"..
"\n"..
"\n",
"O Petróleo só pode ser encontrado com a ajuda do Explorer e extraído com a ajuda de máquinas apropriadas do TA3. Veja TA3.\n"..
"\n"..
"\n"..
"\n",
"A Bauxita é extraída apenas na mineração subterrânea. A Bauxita só é encontrada na pedra a uma altura entre -50 e -500 metros.\n"..
"É necessária para a produção de alumínio\\, que é principalmente usada no TA4.\n"..
"\n"..
"\n"..
"\n",
"O Basalto só é criado quando lava e água se encontram.\n"..
"A melhor coisa a fazer é montar um sistema onde uma fonte de lava e uma fonte de água se encontram.\n"..
"O Basalto é formado onde ambos os líquidos se encontram.\n"..
"Você pode construir um gerador automático de basalto com o Sign Bot.\n"..
"\n"..
"\n"..
"\n",
" - 28.09.2019: Solar system added\n"..
" - 05.10.2019: Data on the solar system and description of the inverter and the power terminal changed\n"..
" - 18.11.2019: Chapter for ores\\, reactor\\, aluminum\\, silo\\, bauxite\\, furnace heating\\, gravel washing system added\n"..
" - 22.02.2020: corrections and chapters on the update\n"..
" - 29.02.2020: ICTA controller added and further corrections\n"..
" - 14.03.2020 Lua controller added and further corrections\n"..
" - 22.03.2020 More TA4 blocks added\n"..
"\n",
},
images = {
"",
"",
"",
"",
"",
"techage_ta4",
"",
"",
"",
"",
"meridium",
"usmium",
"baborium",
"oil",
"bauxite",
"basalt",
"",
},
plans = {
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
}

View File

@ -0,0 +1,153 @@
return {
titles = {
"1,TA1: Idade do Ferro",
"2,Pilha de Carvão (queimador de carvão)",
"2,Forno de Fundição",
"2,Moinho d'Água",
"3,Moinho d'Água TA1",
"3,Comporta TA1",
"3,Alavanca de Comporta TA1",
"3,Placa de Madeira de Maçã TA1",
"3,Placa de Curso d'Água de Maçã TA1",
"1,Minérios e Ferramentas",
"2,Martelo",
"2,Peneira de Cascalho(Sieve)",
"2,Funil (Minecart Hopper)",
"2,Peneirando sete cascalhos com Funil",
},
texts = {
"TA1 trata da extração de minérios suficientes e da produção de carvão com ferramentas e equipamentos simples\\, para que as máquinas TA2 possam ser fabricadas e operadas.\n"..
"\n"..
"É claro que\\, para uma Idade do Ferro\\, deve haver ferro e não apenas aço\\, como em \"Minetest Game\". Como resultado\\, algumas receitas foram alteradas para que o ferro precise ser produzido primeiro e\\, posteriormente\\, o aço.\n"..
"\n"..
"A durabilidade das ferramentas é baseada nas eras e\\, portanto\\, não corresponde ao jogo original do Minetest.\n"..
"A durabilidade/dureza de um machado\\, por exemplo:\n"..
"\n"..
" - Bronze: 20\n"..
" - Aço: 30\n"..
"\n"..
"\n"..
"\n",
"Você precisa da Pilha de Carvão para fazer carvão. O carvão é necessário para a fundição\\, mas também\\, por exemplo\\, em TA2 para a máquina a vapor.\n"..
"\n"..
"Para o queimador de carvão\\, você precisa de:\n"..
"\n"..
" - Um bloco de acendedor ('techage:lighter')\n"..
" - 26 blocos de madeira empilhados para formar um monte de madeira. O tipo de madeira é irrelevante.\n"..
" - Terra para cobrir o monte de madeira\n"..
" - Pedra lascada e Ferro (nome técnico: 'fire:flint_and_steel') para acender o bloco de acendedor\n"..
"\n"..
"Instruções de construção (veja também o plano):\n"..
"\n"..
" - Construa uma área de 5x5 de terra\n"..
" - Coloque 7 blocos de madeira ao redor do acendedor\\, mas deixe um buraco para o acendedor\n"..
" - Construa mais 2 camadas de madeira em cima\\, formando um cubo de madeira 3x3x3\n"..
" - Cubra tudo com uma camada de terra formando um cubo de 5x5x5\\, mas mantenha o buraco para o acendedor aberto\n"..
" - Acenda utilizando o isqueiro e feche imediatamente o buraco com um bloco de madeira e terra\n"..
" - Se você fez tudo corretamente\\, o queimador de carvão começará a soltar fumaça após alguns segundos\n"..
" - Só abra o queimador de carvão quando a fumaça tiver desaparecido (aproximadamente 20 minutos)\n"..
" - Então você pode remover os 9 blocos de carvão e reabastecer a Pilha de Carvão.\n"..
"\n"..
"\n"..
"\n",
"Você precisa do forno de fundição\\, por exemplo\\, para fundir ferro e outros minérios no Vaso de fundição(cadinho). Existem receitas diferentes que requerem diferentes temperaturas. Quanto mais alto a torre de fusão\\, mais quente é a chama. Uma altura de 11 blocos acima da placa base é para todas as receitas\\, mas um queimador com essa altura também requer mais carvão.\n"..
"\n"..
"Instruções de construção (veja também o plano):\n"..
"\n"..
" - Construa uma torre de pedregulho (cobble) com uma base de 3x3 (7-11 blocos de altura)\n"..
" - Deixe um buraco aberto de um lado na parte inferior\n"..
" - Coloque um acendedor nele\n"..
" - Encha a torre até a borda com carvão despejando o carvão no buraco de cima para baixo\n"..
" - Acenda o acendedor através do buraco\n"..
" - Coloque o Vaso de fundição(cadinho) no topo da torre diretamente na chama\\, um bloco acima da borda da torre\n"..
" - Para parar o queimador\\, feche temporariamente o buraco com um bloco de terra\\, por exemplo.\n"..
" - O Vaso de fundição(cadinho) tem seu próprio menu de receitas e um inventário onde você precisa colocar os minérios.\n"..
"\n"..
"\n"..
"\n",
"O moinho d'água pode ser usado para moer trigo e outros grãos para fazer farinha e depois assá-los no forno para fazer pão.\n"..
"O moinho é alimentado por energia hidráulica. Para isso\\, um curso de água deve ser conduzido até a roda do moinho através de um canal.\n"..
"O fluxo de água e\\, portanto\\, a roda do moinho\\, podem ser controlados por meio de uma comporta. A comporta é composta pelo bloqueio de comporta e pela alavanca de comporta.\n"..
"\n"..
"A imagem à direita (clique em \"Plano\") mostra a estrutura do moinho d'água.\n"..
"\n"..
"\n"..
"\n",
"O moinho d'água pode ser usado para moer trigo e outros grãos para fazer farinha e depois assá-los no forno para fazer pão. O moinho deve ser conectado à roda do moinho com um eixo TA1. A potência da roda do moinho é apenas suficiente para um moinho.\n"..
"\n"..
"O moinho pode ser automatizado com a ajuda de um Funil(Minecart Hopper)\\, para que a farinha\\, por exemplo\\, seja transportada diretamente do moinho para um forno para assar pão.\n"..
"\n"..
"\n"..
"\n",
"A válvula de comporta deve ser colocada diretamente ao lado de um lago ou em um riacho na mesma altura que a superfície da água.\n"..
"Quando a comporta é aberta\\, a água flui através do canal. Essa água deve ser conduzida até a roda do moinho\\, onde movimenta o moinho.\n"..
"\n"..
"\n"..
"\n",
"A alavanca de comporta TA1 deve ser colocada na comporta. A comporta pode ser aberta com a ajuda da alavanca de comporta (clique com o botão direito).\n"..
"\n"..
"\n"..
"\n",
"Podem ser usados bloco de diferentes tipos de madeira para construir o canal do curso d'água. No entanto\\, qualquer outro material também pode ser usado.\n"..
"\n"..
"\n"..
"\n",
"Podem ser utilizados blocos em diferentes tipos de madeira para construir o canal do curso d'água. Este bloco é especialmente adequado em conexão com postes da cerca de madeira para construir um suporte do canal.\n"..
"\n"..
"\n"..
"\n",
"O TA1 possui suas próprias ferramentas\\, como martelo e peneira de cascalho\\, mas o Funil(Minecart Hopper) também pode ser utilizado.\n"..
"\n",
"O martelo TA1 pode ser utilizado para bater/escavar pedra em uma mina\\, mas também para quebrar pedregulho(cobble) em cascalho(gravel). O martelo está disponível em diferentes versões\\, cada uma com propriedades distintas: bronze\\, aço\\, latão e diamante.\n"..
"\n",
"Minérios podem ser peneirados do cascalho com a peneira de cascalho. Para fazer isso\\, clique na peneira com o cascalho. O cascalho peneirado e os minérios caem abaixo.\n"..
"\n"..
"Para não ficar horas na peneira\\, é possível automatizar o processo com o Funil(Minecart Hopper).\n"..
"\n",
"O funil do mod \"Minecart Hopper\" é utilizado principalmente para carregar e descarregar carrinhos de mineração. Ele suga itens de cima e os passa para a direita. Portanto\\, ao posicionar o funil\\, preste atenção na direção de dispensa.\n"..
"\n"..
"O funil também pode puxar itens de baús\\, desde que a caixa esteja ao lado ou em cima do funil.\n"..
"\n"..
"O funil também pode colocar itens em baús se a caixa estiver ao lado do funil.\n"..
"\n",
"Com a ajuda de dois baús\\, dois funis e uma peneira de cascalho\\, o processo de peneiração pode ser automatizado. O plano à direita mostra a estrutura.\n"..
"\n"..
"Certifique-se de que os baús são protegidos\\, caso contrário\\, alguém pode roubar os minérios valiosos do baú abaixo.\n"..
"\n"..
"Meridium\n"..
"O TA1 possui sua própria liga metálica\\, o Meridium. Lingotes de meridium podem ser feitos com a caldeira a carvão\\, utilizando aço e cristais de mesecons. O meridium brilha no escuro. Ferramentas feitas de meridium também emitem luz\\, sendo\\, portanto\\, muito úteis na mineração subterrânea.\n"..
"\n",
},
images = {
"techage_ta1",
"",
"",
"",
"",
"ta1_sluice",
"ta1_sluice_handle",
"ta1_board1",
"ta1_board2",
"",
"",
"",
"",
"",
},
plans = {
"",
"coalpile",
"coalburner",
"watermill1",
"watermill2",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
}

View File

@ -0,0 +1,306 @@
return {
titles = {
"1,TA2: Era a Vapor",
"2,Máquina a Vapor",
"3,Caixa de Fogo(Firebox) TA2",
"3,TA2 Caldeira(Boiler)",
"3,TA2 Cilindro(Cylinder)",
"3,TA2 Volante(Flywheel)",
"3,TA2 Tubos de Vapor(Steam pipes)",
"3,TA2 Eixo de Transmissão(Drive axle) TA2 / Caixa de Engrenagem(Gearbox)",
"3,TA2 Gerador de Energia",
"2,TA2 Armazenamento de Energia",
"3,TA2 Guincho",
"3,TA2 Baú de Pesos",
"3,TA2 Embreagem",
"2,Empurrar e classificar itens",
"3,Tubo TechAge",
"3,Tubo Concentrador",
"3,TA2 Pusher",
"3,TA2 Distributor(Distribuidor)",
"2,Gravel washer(Lavador de cascalho)",
"3,TA2 Gravel Rinser(Enxaguatório de cascalho)",
"2,Escavar pedra\\, moer e peneirar",
"3,TA2 Quarry(Pedreira)",
"3,TA2 Grinder(Moedor)",
"3,TA2 Gravel Sieve(Peneira de cascalho)",
"2,Produzindo Itens",
"3,TA2 Autocrafter",
"3,TA2 Electronic Fab",
"2,Outros Blocos",
"3,TA2 Liquid Sampler",
"3,TA2 Protected Chest",
"3,Techage Forceload Block",
},
texts = {
"TA2 trata-se de construir e operar as primeiras máquinas para processamento de minérios. Algumas máquinas precisam ser acionadas por eixos de transmissão. Para fazer isso\\, você precisa construir uma máquina a vapor e aquecê-la com carvão ou carvão vegetal.\n"..
"\n"..
"No TA2\\, há também um lavador de cascalho que pode ser usado para lavar minérios raros\\, como pepitas de Usmium. Você precisará dessas pepitas posteriormente para receitas adicionais.\n"..
"\n"..
"\n"..
"\n",
"A máquina a vapor é composta por vários blocos e deve ser montada conforme mostrado no plano à direita. São necessários os blocos da Caixa de Fogo(Firebox) TA2\\, parte superior da Caldeira(Boiler) TA2\\, parte inferior da Caldeira(Boiler) TA2\\, Cilindro(Cylinder) TA2\\, Volante(Flywheel) TA2 e Tubos de Vapor(steam piper) TA2.\n"..
"\n"..
"Além disso\\, são necessários Eixos de Transmissão(drive axles) e blocos de Engrenagem(gear) para mudança de direção. O Volante deve ser conectado a todas as máquinas que precisam ser acionadas pelos Eixos de Transmissão.\n"..
"\n"..
"Sempre preste atenção ao alinhamento de todos os blocos ao colocá-los:\n"..
"\n"..
" - Cilindro à esquerda\\, volante à direita\n"..
" - Conectar os tubos de vapor onde há um furo correspondente\n"..
" - Eixo de transmissão no volante apenas à direita\n"..
" - Em todas as máquinas\\, os eixos de transmissão podem ser conectados em todos os lados que não estejam ocupados por outras funções\\, como os furos de ENTRADA(IN) e SAÍDA(OUTPUT) no Moedor(grinder) e na Peneira(sieve).\n"..
"\n"..
"A Caldeira deve ser preenchida com água. Preencha até 10 baldes de água na caldeira.\n"..
"A Caixa de fogo deve ser preenchida com carvão ou carvão vegetal.\n"..
"Quando a água estiver quente (indicador de temperatura no topo)\\, a máquina a vapor pode ser iniciada no Volante.\n"..
"\n"..
"A máquina a vapor tem uma capacidade de 25ku\\, podendo acionar várias máquinas ao mesmo tempo.\n"..
"\n"..
"\n"..
"\n",
"Parte da máquina a vapor.\n"..
"\n"..
"A Caixa de fogo deve ser preenchida com carvão ou carvão vegetal. O tempo de queima depende da potência exigida pela máquina a vapor. O carvão queima por 32s e o carvão vegetal por 96s em carga máxima.\n"..
"\n"..
"\n"..
"\n",
"Parte da máquina a vapor. Deve ser preenchida com água. Isso é feito clicando na caldeira com um balde de água. Quando não há mais água ou a temperatura cai muito\\, a máquina a vapor desliga. Com a máquina a vapor\\, parte da água é perdida como vapor a cada curso do pistão\\, então a água deve ser reabastecida regularmente.\n"..
"\n"..
"\n"..
"\n",
"Parte da máquina a vapor.\n"..
"\n"..
"\n"..
"\n",
"Parte motora da máquina a vapor. O Volante deve ser conectado às máquinas por meio de eixos de transmissão.\n"..
"\n"..
"\n"..
"\n",
"Parte da máquina a vapor. A caldeira deve ser conectada ao cilindro por meio dos Tubos de vapor. O tubo de vapor não tem ramificações\\, o comprimento máximo é 12 m (blocos).\n"..
"\n"..
"\n"..
"\n",
"Os Eixos de transmissão são usados para transmitir energia da máquina a vapor para outras máquinas. O comprimento máximo de um eixo de transmissão é 10 blocos. Com as Caixas de Engrenagem TA2\\, é possível vencer distâncias maiores\\, e também realizar ramificações e mudanças de direção.\n"..
"\n"..
"\n"..
"\n",
"O Gerador de Energia TA2 é necessário para operar lâmpadas ou outros consumidores de energia em uma Máquina a vapor. O Gerador de Energia TA2 deve ser conectado aos eixos de transmissão de um lado e\\, em seguida\\, fornece eletricidade do outro lado.\n"..
"\n"..
"Se o Gerador de Energia não receber energia suficiente\\, ele entra em estado de erro e deve ser reativado com um clique direito.\n"..
"\n"..
"O Gerador de Energia consome no máximo 25ku de potência do eixo e fornece no máximo 24ku como eletricidade do outro lado. Portanto\\, ele consome um ku para a conversão.\n"..
"\n"..
"\n"..
"\n",
"Para sistemas maiores com várias máquinas a vapor ou muitas máquinas acionadas\\, é recomendado um sistema de armazenamento de energia. O armazenamento de energia no TA2 funciona com energia potencial. Para isso\\, o peso (pedras\\, cascalho\\, areia) é puxado para cima em um baú com a ajuda de um guincho. Se houver excesso de energia na rede de eixos\\, o baú é puxado para cima. Se mais energia for necessária a curto prazo do que a máquina a vapor pode fornecer\\, o armazenamento de energia libera a energia armazenada novamente e o baú de pesos desce novamente.\n"..
"O armazenamento de energia é composto por vários blocos e deve ser montado conforme mostrado no plano à direita. \n"..
"Para alcançar a capacidade máxima de armazenamento\\, o baú deve ser completamente preenchido com pesos e o mastro\\, incluindo as duas caixas de engrenagens\\, deve ter 12 blocos de altura. Estruturas menores também são possíveis.\n"..
"\n"..
"\n"..
"\n",
"O guincho deve ser conectado a uma caixa de engrenagens e pode absorver energia excessiva e assim puxar um baú de pesos para cima. \n"..
"Ao montar o guincho\\, certifique-se de que a seta no topo do bloco aponte para a caixa de engrenagens.\n"..
"O comprimento máximo da corda é 10 blocos. \n"..
"\n"..
"\n"..
"\n",
"Este baú deve ser colocado sob o guincho com uma distância de até 10 blocos e preenchido com pedras\\, cascalho ou areia. Se o peso mínimo de uma pilha (99+ itens)\n"..
"\n",
"Com a embreagem\\, eixos e máquinas podem ser separados do armazenamento de energia. Isso significa que os eixos após a embreagem param e sistemas de máquinas podem ser reconstruídos. Ao montar a embreagem\\, certifique-se de que a seta na parte superior do bloco aponta para o sistema de armazenamento de energia.\n"..
"\n"..
"\n"..
"\n",
"Para transportar objetos de uma estação de processamento para a próxima\\, são usados pushers e tubos. Veja o plano.\n"..
"\n"..
"\n"..
"\n",
"Duas máquinas podem ser conectadas com a ajuda de um pusher e um tubo. Tubos não têm ramificações. O comprimento máximo é 200m (blocos).\n"..
"\n"..
"Alternativamente\\, os tubos podem ser colocados usando a tecla Shift. Isso permite\\, por exemplo\\, que tubos sejam colocados em paralelo sem que eles se conectem acidentalmente.\n"..
"\n"..
"A capacidade de transporte de um tubo é ilimitada e é limitada apenas pelo pusher.\n"..
"\n"..
"\n"..
"\n",
"Vários tubos podem ser combinados em um único tubo via concentrador. A direção na qual todos os itens são passados é marcada com uma seta. \n"..
"\n"..
"\n"..
"\n",
"Um pusher(empurrador) é capaz de puxar itens de caixas ou máquinas e empurrá-los para outras caixas ou máquinas. Em outras palavras\\, deve haver um e apenas um pusher entre dois blocos com inventário. Múltiplos pushers em sequência não são possíveis.\n"..
"No entanto\\, na direção oposta\\, um pusher é permeável a itens\\, de modo que uma caixa pode ser preenchida via tubo e também ensinada.\n"..
"\n"..
"Um pusher entra no estado \"standby\" se não tiver itens para empurrar. Se a saída estiver bloqueada ou o inventário do destinatário estiver cheio\\, o pusher entra no estado \"bloqueado\". O pusher automaticamente sai de ambos os estados após alguns segundos se a situação mudar.\n"..
"\n"..
"A capacidade de processamento de um pusher TA2 é de 2 itens a cada 2 s.\n"..
"\n"..
"\n"..
"\n",
"O distribuidor é capaz de transportar os itens de seu inventário ordenados em até quatro direções. Para fazer isso\\, o distribuidor deve ser configurado conforme necessário.\n"..
"\n"..
"O distribuidor possui um menu com 4 filtros com cores diferentes\\, correspondendo às 4 saídas. Se uma saída for usada\\, o filtro correspondente deve ser ativado via caixa de seleção \"ligado\". Todos os itens configurados para este filtro são enviados através da saída designada. Se um filtro for ativado sem que itens sejam configurados\\, estamos falando de uma saída \"não configurada\"\\, aberta.\n"..
"\n"..
"*Atenção: O distribuidor também é um pusher em suas saídas. Portanto\\, nunca puxe itens do distribuidor com um pusher!*\n"..
"\n"..
"Existem dois modos de operação para uma saída não configurada:\n"..
"\n"..
"1) Enviar todos os itens que não podem ser enviados para nenhuma outra saída\\, mesmo que estejam bloqueados.\n"..
"\n"..
"2) Enviar apenas os itens que não foram configurados para nenhum outro filtro.\n"..
"\n"..
"No primeiro caso\\, todos os itens são sempre encaminhados e o distribuidor não fica cheio. No segundo caso\\, os itens são retidos e o distribuidor pode ficar cheio e\\, em seguida\\, bloquear.\n"..
"\n"..
"O modo de operação pode ser definido usando a caixa de seleção \"modo de bloqueio\".\n"..
"\n"..
"A capacidade de processamento de um distribuidor TA2 é de 4 itens a cada 2s\\, onde o distribuidor tenta distribuir os 4 itens para as saídas abertas.\n"..
"\n"..
"Se o mesmo item for configurado várias vezes em um filtro\\, a proporção de distribuição a longo prazo será influenciada de acordo.\n"..
"\n"..
"Observe que a distribuição é um processo probabilístico. Isso significa que as proporções de distribuição não serão correspondidas exatamente\\, mas apenas a longo prazo.\n"..
"\n"..
"O tamanho máximo de pilha nos filtros é 12\\; no total\\, não mais que 36 itens podem ser configurados.\n"..
"\n"..
"\n"..
"\n",
"O lavador de cascalho é uma máquina mais complexa com o objetivo de lavar pepitas de Usmium a partir de cascalho peneirado. Um enxaguatório TA2 com eixo de acionamento\\, um funil\\, um baú e água corrente são necessários para a instalação.\n"..
"\n"..
"Estrutura da esquerda para a direita (veja também o plano):\n"..
"\n"..
" - Um bloco de terra\\, sobre ele a fonte de água\\, cercada em 3 lados\\, por exemplo\\, por blocos de vidro\n"..
" - Ao lado\\, o enxaguatório de cascalho\\, se necessário com conexões de tubulação para a entrega e remoção de cascalho\n"..
" - Em seguida\\, o funil com baú\n"..
"\n"..
"O conjunto é cercado por mais blocos de vidro\\, para que a água flua sobre o enxaguatório de cascalho e o funil\\, e as pepitas lavadas possam ser coletadas novamente pelo funil.\n"..
"\n"..
"\n"..
"\n",
"O lavador de cascalho é capaz de enxaguar os minérios de Usmium e cobre do cascalho que já foi peneirado\\, desde que seja lavado com água.\n"..
"\n"..
"Se o Enxaguatório de Cascalho funciona corretamente\\, pode ser testado com pedaços de madeira\\, se estes forem colocados no inventário do Enxaguatório de Cascalho. Eles devem ser enxaguados individualmente e recolhidos pelo funil.\n"..
"\n"..
"A capacidade de processamento é de um item de cascalho a cada 2s. O lavador de cascalho precisa de 3 ku de energia.\n"..
"\n"..
"\n"..
"\n",
"Esmagar\\, moer e peneirar pedregulhos é usado para extrair minérios. O cascalho peneirado também pode ser usado para outros fins. A pedreira\\, moedor e peneira devem ser acionados e\\, portanto\\, instalados perto de uma máquina a vapor.\n"..
"\n"..
"\n"..
"\n",
"A pedreira é usada para remover pedras e outros materiais do subsolo. A pedreira escava um buraco de 5x5 blocos. A profundidade é ajustável.\n"..
"A capacidade de processamento é de um bloco a cada 4s. A pedreira precisa de 10 ku de energia. A profundidade máxima é de 20 metros. Para maiores profundidades\\, consulte TA3 / TA4.\n"..
"\n"..
"\n"..
"\n",
"O moedor é capaz de moer várias rochas\\, mas também madeira e outros itens.\n"..
"A capacidade de processamento é de um item a cada 4s. O moedor precisa de 4 ku de energia.\n"..
"\n"..
"\n"..
"\n",
"A peneira de cascalho é capaz de peneirar cascalho para extrair minérios. O resultado é parcialmente \"sieved gravel\"\\, que não pode ser peneirado novamente.\n"..
"A capacidade de processamento é de um item a cada 4s. A peneira de cascalho requer 3 ku de energia.\n"..
"\n"..
"\n"..
"\n",
"As máquinas TA2 podem não apenas extrair minérios\\, mas também produzir objetos.\n"..
"\n",
"O autocrafter é usado para a produção automática de bens. Tudo o que o jogador pode produzir via \"Crafting Grid\" também pode ser feito pelo autocrafter. Para isso\\, a receita deve ser inserida no menu do autocrafter e os ingredientes necessários adicionados.\n"..
"\n"..
"Ingredientes e produtos fabricados podem ser transportados para dentro e para fora do bloco por meio de tubos e pushers.\n"..
"\n"..
"A capacidade de processamento é de um item a cada 4s. O autocrafter requer 4 ku de energia.\n"..
"\n"..
"\n"..
"\n",
"O electronic fab é uma máquina especial e só pode ser usada para a produção de tubos de vácuo. Tubos de vácuo são necessários para máquinas e blocos TA3.\n"..
"\n"..
"A capacidade de processamento é de um tubo de vácuo a cada 6s. O electronic fab requer 8 ku de energia.\n"..
"\n"..
"\n"..
"\n",
"",
"Algumas receitas requerem água. Para que essas receitas também possam ser processadas automaticamente com o autocrafter\\, água deve ser fornecida em baldes. Isso é feito usando o liquid sampler. Ele precisa de baldes vazios e deve ser colocado na água.\n"..
"\n"..
"A capacidade de processamento é de um balde de água a cada 8s. O liquid sampler requer 3 ku de energia.\n"..
"\n"..
"\n"..
"\n",
"O protected chest só pode ser usado por jogadores que têm permissão de construção neste local\\, ou seja\\, que têm direitos de proteção. Não importa quem coloca o baú.\n"..
"\n"..
"\n"..
"\n",
"O Minetest divide o mapa em chamados map blocks. Estes são cubos com uma aresta de 16x16x16 blocos. Um map block é sempre completamente carregado pelo servidor\\, mas apenas os blocos ao redor de um jogador são carregados (aproximadamente 2-3 blocos em todas as direções). Na direção de visão do jogador\\, também existem mais map blocks. Apenas esta parte do mundo é ativa e apenas aqui as plantas e árvores crescem ou as máquinas funcionam.\n"..
"\n"..
"Com um bloco forceload\\, você pode forçar o map block em que o bloco forceload está localizado a permanecer carregado enquanto você estiver no servidor. Quando todos os seus campos e máquinas estão cobertos com blocos Forceload\\, tudo está sempre em execução.\n"..
"\n"..
"Os map blocks com suas coordenadas são predefinidos\\, por exemplo\\, (0\\,0\\,0) a (15\\,15\\,15)\\, ou (16\\,16\\,16) a (31\\,31\\,31).\n"..
"Você pode mover um bloco forceload dentro de um map block como quiser\\, a posição do map block permanece inalterada.\n"..
"\n"..
"\n"..
"\n",
},
images = {
"techage_ta2",
"",
"ta2_firebox",
"ta2_boiler",
"ta2_cylinder",
"ta2_flywheel",
"ta2_steampipe",
"ta2_driveaxle",
"ta2_generator",
"",
"ta2_winch",
"",
"techage:ta2_clutch_off",
"",
"tube",
"concentrador",
"ta2_pusher",
"ta2_distributor",
"",
"ta2_rinser",
"ta2_grinder",
"ta2_quarry",
"ta2_grinder",
"ta2_gravelsieve",
"",
"ta2_autocrafter",
"ta2_electronicfab",
"",
"ta2_liquidsampler",
"ta2_chest",
"ta2_forceload",
},
plans = {
"",
"steamengine",
"",
"",
"",
"",
"",
"",
"",
"ta2_storage",
"",
"",
"",
"itemtransport",
"",
"",
"",
"",
"gravelrinser",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
}

View File

@ -0,0 +1,942 @@
return {
titles = {
"1,TA3: Era do Petróleo",
"2,Usina Termelétrica a Carvão / Usina Termelétrica a Óleo",
"3,TA3 Fornalha(firebox) da estação de energia",
"3,TA3 Queimador de Óleo da Usina de Energia",
"3,TA3 Base / Topo da Caldeira",
"3,TA3 Turbina",
"3,TA3 Gerador",
"3,TA3 Cooler",
"2,Corrente elétrica",
"3,Importância dos sistemas de armazenamento",
"3,TA3 Cabo Elétrico",
"3,TA Caixa de Junção Elétrica",
"3,TA Linha de Energia",
"3,TA Poste de Energia",
"3,TA Topo do Poste de Energia",
"3,TA Topo do Poste de Energia 2",
"3,TA Interruptor de Energia",
"3,TA Interruptor de Energia Pequeno",
"3,TA Caixa de Interruptor de Energia",
"3,TA3 Pequeno Gerador de Energia",
"3,TA3 Bloco Acumulador",
"3,TA3 Terminal de Energia",
"3,TA3 Motor Elétrico",
"2,TA3 Forno Industrial",
"3,TA3 Forno - Queimador de Óleo",
"3,TA3 Forno - Parte Superior",
"3,TA3 Reforço",
"2,Líquidos",
"3,TA3 Tanque",
"3,TA3 Bomba",
"3,TA Liquid Filler",
"3,TA4 Tubos(pipe)",
"3,TA3 Tubos de parede (entre-blocos)",
"3,TA Válvula",
"2,Produção de Óleo",
"3,TA3 Explorador de petróleo",
"3,TA3 Caixa de perfuração de petróleo",
"3,TA3 Bomba de petróleo",
"3,TA3 Haste de perfuração",
"3,Tanque de petróleo",
"2,Transporte de Petróleo",
"3,Transporte de Petróleo por Vagões Tanque",
"3,Oil transportation with barrels over Minecarts",
"3,Transporte de Petróleo com Barris por Minecarts",
"3,Carrinho-tanque",
"3,Carrinho-baú",
"2,Processamento de Petróleo",
"3,Torre de Destilação",
"4,Refervedor(Reboiler)",
"2,Blocos Lógicos / de Comutação",
"3,TA3 Botão / Interruptor",
"3,TA3 Conversor de Comandos",
"3,TA3 Flip-Flop",
"3,Bloco Lógico TA3",
"3,TA3 Repetidor",
"3,TA3 Sequenciador",
"3,TA3 Temporizador",
"3,TA3 Terminal",
"3,Lâmpada Colorida TechAge",
"3,Blocos de Porta/Portão",
"3,TA3 Controlador de Porta",
"3,Controlador de Porta TA3 II",
"3,TA3 Bloco de Som",
"3,TA3 Conversor Mesecons",
"2,Detectores",
"3,TA3 Detector",
"3,TA3 Cart Detector",
"3,TA3 Node Detector",
"3,TA3 Detector de jogador(Player detector)",
"3,TA3 Detector de luz(Light detector)",
"2,Máquinas TA3",
"3,TA3 Pusher",
"3,TA3 Distributor",
"3,TA3 Autocrafter",
"3,TA3 Electronic Fab",
"3,TA3 Quarry",
"3,TA3 Gravel Sieve",
"3,TA3 Gravel Rinser",
"3,TA3 Grinder",
"3,TA3 Injetor",
"2,Ferramentas",
"3,Techage Info Tool",
"3,TechAge Programmer (Programador)",
"3,TechAge Trowel / Trowel",
"3,TA3 chave de cano",
"3,Techage Screwdriver",
"3,TechAge Assembly Tool",
},
texts = {
"Na TA3\\, é importante substituir as máquinas a vapor por máquinas mais potentes movidas a eletricidade.\n"..
"\n"..
"Para fazer isso\\, é necessário construir usinas termelétricas a carvão e geradores. Logo você perceberá que suas necessidades de eletricidade só podem ser atendidas com usinas movidas a óleo. Portanto\\, você parte em busca de petróleo. Torres de perfuração e bombas de petróleo ajudam a extrair o óleo. Ferrovias são usadas para transportar o óleo até as usinas.\n"..
"\n"..
"A era industrial está em seu auge.\n"..
"\n"..
"\n"..
"\n",
"A usina termelétrica a carvão é composta por vários blocos e deve ser montada conforme mostrado no plano à direita. São necessários os blocos Fornalha(Firebox) TA3\\, Topo da Caldeira TA3\\, Base da Caldeira TA3\\, Turbina TA3\\, Gerador TA3 e Resfriador TA3.\n"..
"\n"..
"A caldeira deve ser preenchida com água. Encha até 10 baldes de água na caldeira.\n"..
"A caixa de fogo deve ser preenchida com carvão ou carvão vegetal.\n"..
"Quando a água estiver quente\\, o gerador pode ser iniciado.\n"..
"\n"..
"Alternativamente\\, a usina pode ser equipada com um queimador de óleo e operada com óleo. O óleo pode ser reabastecido usando uma bomba e um tubo de óleo.\n"..
"\n"..
"A usina fornece uma saída de 80 ku.\n"..
"\n"..
"\n"..
"\n",
"Parte da usina de energia.\n"..
"A fornalha deve ser preenchida com carvão ou carvão vegetal. O tempo de queima depende da potência solicitada pela usina. Carvão queima por 20s e carvão vegetal por 60s em carga total. Proporcionalmente mais tempo em carga parcial (50% de carga = dobro do tempo).\n"..
"\n"..
"\n"..
"\n",
"Parte da usina de energia.\n"..
"\n"..
"O queimador de óleo pode ser preenchido com óleo cru\\, óleo combustível\\, nafta ou gasolina. O tempo de queima depende da potência solicitada pela usina. Em carga total\\, óleo cru queima por 15s\\, óleo combustível por 20s\\, nafta por 22s e gasolina por 25s.\n"..
"\n"..
"Proporcionalmente mais tempo em carga parcial (50% de carga = dobro do tempo).\n"..
"\n"..
"O queimador de óleo pode armazenar apenas 50 unidades de combustível. Recomenda-se\\, portanto\\, um tanque de óleo adicional e uma bomba de óleo.\n"..
"\n"..
"\n"..
"\n",
"Parte da usina de energia. Deve ser preenchida com água. Se não houver mais água ou a temperatura diminuir muito\\, a usina desliga.\n"..
"\n"..
"O consumo de água da caldeira TA3 é muito menor do que o da máquina a vapor devido ao circuito de vapor fechado.\n"..
"Com a máquina a vapor\\, parte da água é perdida como vapor a cada curso do pistão.\n"..
"\n"..
"\n"..
"\n",
"A turbina faz parte da usina de energia. Deve ser colocada ao lado do gerador e conectada à caldeira e ao resfriador por meio de tubos de vapor\\, conforme mostrado no plano.\n"..
"\n"..
"\n"..
"\n",
"O gerador é usado para gerar eletricidade. Deve ser conectado às máquinas por meio de cabos de energia e caixas de junção.\n"..
"\n"..
"\n"..
"\n",
"Usado para resfriar o vapor quente da turbina. Deve ser conectado à caldeira e à turbina por meio de tubos de vapor\\, conforme mostrado no plano.\n"..
"\n"..
"\n"..
"\n",
"Em TA3 (e TA4)\\, as máquinas são alimentadas por eletricidade. Para isso\\, máquinas\\, sistemas de armazenamento e geradores devem ser conectados com cabos de energia.\n"..
"TA3 possui 2 tipos de cabos de energia:\n"..
"\n"..
" - Cabos isolados (cabos de energia TA) para instalação local no chão ou em edifícios. Esses cabos podem ser ocultos na parede ou no chão (podem ser \"revestidos\" com a colher de pedreiro).\n"..
" - Linhas aéreas (linha de energia TA) para cabeamento externo em longas distâncias. Esses cabos são protegidos e não podem ser removidos por outros jogadores.\n"..
"\n"..
"Vários consumidores\\, sistemas de armazenamento e geradores podem ser operados juntos em uma rede de energia. Redes podem ser configuradas com a ajuda das caixas de junção.\n"..
"Se houver pouca eletricidade fornecida\\, os consumidores ficam sem energia.\n"..
"Nesse contexto\\, também é importante entender a funcionalidade dos blocos de Forceload\\, porque os geradores\\, por exemplo\\, só fornecem eletricidade quando o bloco de mapa correspondente está carregado. Isso pode ser imposto com um bloco de Forceload.\n"..
"\n"..
"Em TA4\\, também existe um cabo para o sistema solar.\n"..
"\n"..
"\n"..
"\n",
"Os sistemas de armazenamento na rede elétrica desempenham duas funções:\n"..
"\n"..
" - Lidar com picos de demanda: Todos os geradores sempre fornecem exatamente a quantidade de energia necessária. No entanto\\, se os consumidores forem ligados/desligados ou houver flutuações na demanda por outros motivos\\, os consumidores podem falhar por um curto período. Para evitar isso\\, deve sempre haver pelo menos um bloco de bateria em cada rede. Isso serve como um buffer e compensa essas flutuações na faixa de segundos.\n"..
" - Armazenar energia regenerativa: Solar e eólica não estão disponíveis 24 horas por dia. Para que o fornecimento de energia não falhe quando não há produção de eletricidade\\, um ou mais sistemas de armazenamento devem ser instalados na rede. Alternativamente\\, as lacunas também podem ser preenchidas com eletricidade de óleo/carvão.\n"..
"\n"..
"Um sistema de armazenamento indica sua capacidade em kud\\, ou seja\\, ku por dia. Por exemplo\\, um sistema de armazenamento com 100 kud fornece 100 ku por um dia de jogo\\, ou 10 ku por 10 dias de jogo.\n"..
"\n"..
"Todas as fontes de energia TA3/TA4 têm características de carregamento ajustáveis. Por padrão\\, isso é configurado para \"80% - 100%\". Isso significa que\\, quando o sistema de armazenamento estiver 80% cheio\\, a saída é reduzida cada vez mais até desligar completamente em 100%. Se eletricidade for necessária na rede\\, nunca se atingirá 100%\\, pois a potência do gerador em algum momento caiu para a demanda de eletricidade na rede e o sistema de armazenamento não está mais sendo carregado\\, mas apenas os consumidores estão sendo atendidos.\n"..
"\n"..
"Isso tem várias vantagens:\n"..
"\n"..
" - As características de carregamento são ajustáveis. Isso significa\\, por exemplo\\, que as fontes de energia de óleo/carvão podem ser reduzidas em 60% e as fontes de energia renovável apenas em 80%. Isso significa que o óleo/carvão só é queimado se não houver energia renovável suficiente disponível.\n"..
" - Várias fontes de energia podem ser operadas em paralelo e são carregadas quase uniformemente\\, porque todas as fontes de energia trabalham\\, por exemplo\\, até 80% da capacidade de carga do sistema de armazenamento em sua capacidade total e depois reduzem sua capacidade ao mesmo tempo.\n"..
" - Todos os sistemas de armazenamento em uma rede formam um grande buffer. A capacidade de carga e o nível de preenchimento de todo o sistema de armazenamento podem sempre ser lidos em percentagem em todos os sistemas de armazenamento\\, mas também no terminal de eletricidade.\n"..
"\n"..
" \n"..
"\n",
"Para fiação local no chão ou em construções.\n"..
"Ramos podem ser realizados usando caixas de junção. O comprimento máximo do cabo entre máquinas ou caixas de junção é de 1000 m. Um máximo de 1000 nós pode ser conectado em uma rede elétrica. Todos os blocos com conexão elétrica\\, incluindo caixas de junção\\, contam como nós.\n"..
"\n"..
"Como os cabos elétricos não são automaticamente protegidos\\, as linhas aéreas (TA power line) são recomendadas para distâncias mais longas.\n"..
"\n"..
"Os cabos elétricos podem ser rebocados com a colher de alvenaria para que fiquem ocultos na parede ou no chão. Todos os blocos de pedra\\, argila e outros blocos sem \"inteligência\" podem ser usados como material de reboco. A sujeira não funciona porque pode ser convertida em grama ou algo semelhante\\, o que destruiria a linha.\n"..
"\n"..
"Para rebocar\\, o cabo deve ser clicado com a colher de alvenaria. O material com o qual o cabo deve ser rebocado deve estar no canto mais à esquerda do inventário do jogador.\n"..
"Os cabos podem ser tornados visíveis novamente clicando no bloco com a colher de alvenaria.\n"..
"\n"..
"Além dos cabos\\, a caixa de junção TA e a caixa de interruptores de energia TA também podem ser rebocadas.\n"..
"\n"..
"\n"..
"\n",
"Com a caixa de junção\\, a eletricidade pode ser distribuída em até 6 direções. Caixas de junção também podem ser rebocadas (ocultas) com uma colher de alvenaria e tornadas visíveis novamente.\n"..
"\n"..
"\n"..
"\n",
"Com a linha de energia TA e os postes de eletricidade\\, é possível realizar linhas aéreas razoavelmente realistas. As cabeças dos postes também servem para proteger a linha de energia (proteção). Um poste deve ser colocado a cada 16 m ou menos. A proteção se aplica apenas à linha de energia e aos postes\\; no entanto\\, todos os outros blocos nesta área não estão protegidos.\n"..
"\n"..
"\n"..
"\n",
"Usado para construir postes de eletricidade. É protegido contra destruição pela cabeça do poste de eletricidade e só pode ser removido pelo proprietário.\n"..
"\n"..
"\n"..
"\n",
"Possui até quatro braços e permite assim a distribuição de eletricidade em até 6 direções.\n"..
"A cabeça do poste de eletricidade protege as linhas de energia e os postes dentro de um raio de 8 m.\n"..
"\n"..
"\n"..
"\n",
"Esta cabeça de poste de eletricidade tem dois braços fixos e é usada para as linhas aéreas. No entanto\\, também pode transmitir corrente para baixo e para cima.\n"..
"A cabeça do poste de eletricidade protege as linhas de energia e os postes dentro de um raio de 8 m.\n"..
"\n"..
"\n"..
"\n",
"O interruptor pode ser usado para ligar e desligar a energia. Para isso\\, o interruptor deve ser colocado em uma caixa de interruptor de energia. A caixa de interruptor de energia deve ser conectada ao cabo de energia em ambos os lados.\n"..
"\n"..
"\n"..
"\n",
"O interruptor pode ser usado para ligar e desligar a energia. Para isso\\, o interruptor deve ser colocado em uma caixa de interruptor de energia. A caixa de interruptor de energia deve ser conectada ao cabo de energia em ambos os lados.\n"..
"\n"..
"\n"..
"\n",
"Veja o interruptor de energia TA.\n"..
"\n"..
"\n"..
"\n",
"O pequeno gerador de energia funciona com gasolina e pode ser usado para consumidores pequenos com até 12 ku. A gasolina queima por 150s em carga total. Correspondentemente mais tempo em carga parcial (50% de carga = tempo duplo).\n"..
"\n"..
"O gerador de energia só pode armazenar 50 unidades de gasolina. Portanto\\, é aconselhável um tanque adicional e uma bomba.\n"..
"\n"..
"\n"..
"\n",
"O bloco acumulador (bateria recarregável) é usado para armazenar energia excedente e fornece automaticamente energia em caso de queda de energia (se disponível).\n"..
"Vários blocos de acumulador juntos formam um sistema de armazenamento de energia TA3. Cada bloco de acumulador possui um display para o estado de carga e para a carga armazenada.\n"..
"Os valores para toda a rede são sempre exibidos aqui. A carga armazenada é exibida em \"kud\" ou \"ku-dias\" (análogo a kWh). Assim\\, 5 kud correspondem\\, por exemplo\\, a 5 ku para um dia de jogo (20 minutos) ou 1 ku para 5 dias de jogo.\n"..
"\n"..
"Um bloco de acumulador tem 3\\,33 kud.\n"..
"\n"..
"\n"..
"\n",
"O terminal de energia deve ser conectado à rede elétrica. Ele exibe dados da rede elétrica.\n"..
"\n"..
"As informações mais importantes são exibidas na metade superior:\n"..
"\n"..
" - potência do gerador atual/máxima\n"..
" - consumo de energia atual de todos os consumidores\n"..
" - corrente de carga atual dentro/fora do sistema de armazenamento\n"..
" - Estado de carga atual do sistema de armazenamento em percentual\n"..
"\n"..
"O número de blocos da rede é exibido na metade inferior.\n"..
"\n"..
"Dados adicionais sobre os geradores e sistemas de armazenamento podem ser consultados através da guia \"console\".\n"..
"\n"..
"\n"..
"\n",
"O Motor Elétrico TA3 é necessário para operar as máquinas TA2 através da rede elétrica. O Motor Elétrico TA3 converte eletricidade em potência de eixo.\n"..
"Se o motor elétrico não for alimentado com energia suficiente\\, ele entra em um estado de falha e deve ser reativado com um clique direito.\n"..
"\n"..
"O motor elétrico consome no máximo 40 ku de eletricidade e fornece do outro lado no máximo 39 ku como potência de eixo. Portanto\\, ele consome um ku para a conversão.\n"..
"\n"..
"\n"..
"\n",
"O forno industrial TA3 serve como complemento aos fornos normais. Isso significa que todos os produtos podem ser fabricados com receitas de \"cozimento\"\\, mesmo em um forno industrial. No entanto\\, também existem receitas especiais que só podem ser feitas em um forno industrial.\n"..
"O forno industrial possui seu próprio menu para seleção de receitas. Dependendo dos produtos no inventário do forno industrial à esquerda\\, o produto de saída pode ser selecionado à direita.\n"..
"\n"..
"O forno industrial requer eletricidade (para o impulsionador) e óleo combustível/gasolina para o queimador. O forno industrial deve ser montado conforme mostrado no plano à direita.\n"..
"\n"..
"Veja também o aquecedor TA4.\n"..
"\n"..
"\n"..
"\n",
"Parte do forno industrial TA3.\n"..
"\n"..
"O queimador de óleo pode ser operado com óleo bruto\\, óleo combustível\\, nafta ou gasolina. O tempo de queima é de 64 s para óleo bruto\\, 80 s para óleo combustível\\, 90 s para nafta e 100 s para gasolina.\n"..
"\n"..
"O queimador de óleo pode armazenar apenas 50 unidades de combustível. Portanto\\, é aconselhável um tanque adicional e uma bomba.\n"..
"\n"..
"\n"..
"\n",
"Faz parte do forno industrial TA3. Consulte o forno industrial TA3.\n"..
"\n"..
"\n"..
"\n",
"Faz parte do forno industrial TA3. Consulte o forno industrial TA3.\n"..
"\n"..
"\n"..
"\n",
"Líquidos como água ou óleo só podem ser bombeados através de tubulações especiais e armazenados em tanques. Assim como com a água\\, existem recipientes (latas\\, barris) nos quais o líquido pode ser armazenado e transportado.\n"..
"\n"..
"Também é possível conectar vários tanques usando as tubulações amarelas e conectores. No entanto\\, os tanques devem ter o mesmo conteúdo e sempre deve haver pelo menos um tubo amarelo entre o tanque\\, a bomba e o tubo distribuidor.\n"..
"\n"..
"Por exemplo\\, não é possível conectar dois tanques diretamente a um tubo distribuidor.\n"..
"\n"..
"O enchimento de líquidos é usado para transferir líquidos de recipientes para tanques. O plano mostra como latas ou barris com líquidos são empurrados para um enchimento de líquidos através de empurradores. O recipiente é esvaziado no enchimento de líquidos e o líquido é conduzido para baixo no tanque.\n"..
"\n"..
"O enchimento de líquidos também pode ser colocado sob um tanque para esvaziar o tanque.\n"..
"\n"..
"\n"..
"\n",
"Líquidos podem ser armazenados em um tanque. Um tanque pode ser preenchido ou esvaziado usando uma bomba. Para fazer isso\\, a bomba deve ser conectada ao tanque por meio de um tubo (tubos amarelos).\n"..
"\n"..
"Um tanque também pode ser preenchido ou esvaziado manualmente clicando no tanque com um recipiente de líquido cheio ou vazio (barril\\, galão). Deve-se observar que os barris só podem ser completamente preenchidos ou esvaziados. Se\\, por exemplo\\, houver menos de 10 unidades no tanque\\, esse restante deve ser removido com galões ou esvaziado com uma bomba.\n"..
"\n"..
"Um tanque TA3 pode armazenar 1000 unidades ou 100 barris de líquido.\n"..
"\n"..
"\n"..
"\n",
"A bomba pode ser usada para bombear líquidos de tanques ou recipientes para outros tanques ou recipientes. A direção da bomba (seta) deve ser observada. As linhas amarelas e os conectores também permitem organizar vários tanques em cada lado da bomba. No entanto\\, os tanques devem ter o mesmo conteúdo.\n"..
"\n"..
"A bomba TA3 bombeia 4 unidades de líquido a cada dois segundos.\n"..
"\n"..
"Observação 1: A bomba não deve ser colocada diretamente ao lado do tanque. Deve sempre haver pelo menos um pedaço de tubo amarelo entre eles.\n"..
"\n"..
"\n"..
"\n",
"O liquid filler é usado para transferir líquidos entre recipientes e tanques.\n"..
"\n"..
" - Se o liquid filler for colocado sob um tanque e barris vazios forem colocados no liquid filler com um empurrador ou manualmente\\, o conteúdo do tanque é transferido para os barris e os barris podem ser removidos da saída\n"..
" - Se o liquid filler for colocado em cima de um tanque e se recipientes cheios forem colocados no liquid filler com um empurrador ou manualmente\\, o conteúdo é transferido para o tanque e os recipientes vazios podem ser removidos no lado de saída\n"..
"\n"..
"Deve-se observar que os barris só podem ser completamente cheios ou esvaziados. Se\\, por exemplo\\, houver menos de 10 unidades no tanque\\, este restante deve ser removido com recipientes ou bombeado vazio.\n"..
"\n"..
"\n"..
"\n",
"Os tubos amarelos são usados para a transmissão de gás e líquidos.\n"..
"O comprimento máximo do tubo é 100m.\n"..
"\n"..
"\n"..
"\n",
"Os blocos servem como aberturas de parede para os tubos\\, para que não fiquem buracos abertos.\n"..
"\n"..
"\n"..
"\n",
"Existe uma válvula para os tubos amarelos\\, que pode ser aberta e fechada com um clique do mouse.\n"..
"A válvula também pode ser controlada por comandos ligar/desligar.\n"..
"\n"..
"\n"..
"\n",
"Para alimentar seus geradores e fogões com óleo\\, você deve primeiro procurar óleo e construir uma torre de perfuração para extrair o óleo.\n"..
"Para isso\\, são utilizados o explorador de óleo TA3\\, a caixa de perfuração de óleo TA3 e o macaco de bomba de óleo TA3.\n"..
"\n"..
"\n"..
"\n",
"Você pode procurar petróleo com o explorador de petróleo. Para fazer isso\\, coloque o bloco no chão e clique com o botão direito para iniciar a busca. O explorador de petróleo pode ser usado tanto acima quanto abaixo do solo em todas as profundidades.\n"..
"A saída do chat mostra a profundidade até a qual o petróleo foi procurado e quanto petróleo foi encontrado.\n"..
"Você pode clicar várias vezes no bloco para procurar petróleo em áreas mais profundas. Os campos de petróleo variam em tamanho de 4.000 a 20.000 itens.\n"..
"\n"..
"Se a busca não der certo\\, você deve mover o bloco aproximadamente 16 m para frente.\n"..
"O explorador de petróleo sempre procura petróleo em todo o bloco do mapa e abaixo\\, no qual foi colocado. Uma nova busca no mesmo bloco do mapa (campo 16x16) portanto\\, não faz sentido.\n"..
"\n"..
"Se o petróleo for encontrado\\, a localização para a torre de perfuração é exibida. Você precisa erguer a torre de perfuração dentro da área mostrada\\, é melhor marcar o local com uma placa e proteger toda a área contra jogadores estrangeiros.\n"..
"\n"..
"Não desista de procurar petróleo muito rapidamente. Se tiver azar\\, pode levar muito tempo para encontrar um poço de petróleo.\n"..
"Também não faz sentido procurar em uma área que outro jogador já tenha procurado. A chance de encontrar petróleo é a mesma para todos os jogadores.\n"..
"\n"..
"O explorador de petróleo pode ser sempre usado para procurar petróleo.\n"..
"\n"..
"\n"..
"\n",
"A caixa de perfuração de petróleo deve ser colocada na posição indicada pelo explorador de petróleo. Perfurar petróleo em outro lugar não tem sentido.\n"..
"Se o botão na caixa de perfuração de petróleo for clicado\\, a torre de perfuração será erguida acima da caixa. Isso leva alguns segundos.\n"..
"A caixa de perfuração de petróleo tem 4 lados\\, em IN o tubo de perfuração deve ser entregue via pusher e em OUT o material de perfuração deve ser removido. A caixa de perfuração de petróleo deve ser alimentada com eletricidade por um dos outros dois lados.\n"..
"\n"..
"A caixa de perfuração de petróleo perfura até o campo de petróleo (1 metro em 16 s) e requer 16 ku de eletricidade.\n"..
"Depois que o campo de petróleo for alcançado\\, a torre de perfuração pode ser desmontada e a caixa removida.\n"..
"\n"..
"\n"..
"\n",
"A bomba de petróleo (pumpjack) deve ser colocada no lugar da caixa de perfuração de petróleo. A bomba de petróleo também requer eletricidade (16 ku) e fornece uma unidade de petróleo a cada 8 segundos. O petróleo deve ser coletado em um tanque. Para fazer isso\\, a bomba de petróleo deve ser conectada ao tanque por meio de tubos amarelos.\n"..
"Depois que todo o petróleo for bombeado para fora\\, a bomba de petróleo também pode ser removida.\n"..
"\n"..
"\n"..
"\n",
"A haste de perfuração é necessária para perfurar. Tantos itens de haste de perfuração são necessários quanto a profundidade especificada para o campo de petróleo. A haste de perfuração é inútil após a perfuração\\, mas também não pode ser desmontada e permanece no solo. No entanto\\, há uma ferramenta para remover os blocos de haste de perfuração (-> Ferramentas -> TA3 Alicate de haste de perfuração(drill pipe pliers)).\n"..
"\n"..
"\n"..
"\n",
"O tanque de petróleo é a versão grande do tanque TA3 (ver líquidos -> Tanque TA3).\n"..
"\n"..
"O tanque grande pode armazenar 4000 unidades de petróleo\\, mas também qualquer outro tipo de líquido.\n"..
"\n"..
"\n"..
"\n",
"",
"Os vagões tanque podem ser usados para transportar petróleo do poço de petróleo para a usina de processamento de petróleo. Um vagão tanque pode ser preenchido ou esvaziado diretamente usando bombas. Em ambos os casos\\, os tubos amarelos devem ser conectados ao vagão tanque de cima.\n"..
"\n"..
"Os seguintes passos são necessários:\n"..
"\n"..
" - Coloque o vagão tanque na frente do bloco para-choque da ferrovia. O bloco para-choque ainda não deve estar programado com um tempo para que o vagão tanque não comece automaticamente.\n"..
" - Conecte o vagão tanque à bomba usando tubos amarelos.\n"..
" - Ligue a bomba.\n"..
" - Programe o para-choque com um tempo (10 - 20s).\n"..
"\n"..
"Essa sequência deve ser observada em ambos os lados (encher / esvaziar).\n"..
"\n"..
"\n"..
"\n",
"Canisters and barrels can be loaded into the Minecarts. To do this\\, the oil must first be transferred to barrels. The oil barrels can be pushed directly into the Minecart with a pusher and tubes (see map). The empty barrels\\, which come back from the unloading station by Minecart\\, can be unloaded using a hopper\\, which is placed under the rail at the stop.\n"..
"\n"..
"It is not possible with the hopper to both *unload the empty barrels and load the full barrels at a stop*. The hopper immediately unloads the full barrels. It is therefore advisable to set up 2 stations on the loading and unloading side and then program the Minecart accordingly using a recording run.\n"..
"\n"..
"The plan shows how the oil can be pumped into a tank and filled into barrels via a liquid filler and loaded into Minecarts.\n"..
"\n"..
"For the Minecarts to start again automatically\\, the bumper blocks must be configured with the station name and waiting time. 5 s are sufficient for unloading. However\\, since the pushers always go into standby for several seconds when there is no Minecart\\, a time of 15 or more seconds must be entered for loading.\n"..
"\n"..
"\n"..
"\n",
"As latas e barris podem ser carregados nos Minecarts. Para fazer isso\\, o petróleo deve primeiro ser transferido para os barris. Os barris de petróleo podem ser empurrados diretamente para dentro do Minecart com um empurrador e tubos (veja o mapa). Os barris vazios\\, que retornam da estação de descarga por Minecart\\, podem ser descarregados usando um funil\\, que é colocado sob os trilhos na parada.\n"..
"\n"..
"Não é possível com o funil *descarregar os barris vazios e carregar os barris cheios em uma parada*. O funil descarrega imediatamente os barris cheios. Portanto\\, é aconselhável configurar 2 estações no lado de carregamento e descarregamento e\\, em seguida\\, programar o Minecart de acordo com uma corrida de gravação.\n"..
"\n"..
"O plano mostra como o petróleo pode ser bombeado para um tanque\\, preenchido em barris via um dispositivo de enchimento de líquidos e carregado em Minecarts.\n"..
"\n"..
"Para que os Minecarts reiniciem automaticamente\\, os blocos para-choque devem ser configurados com o nome da estação e o tempo de espera. 5 segundos são suficientes para descarregar. No entanto\\, como os empurradores sempre entram em espera por vários segundos quando não há Minecart\\, um tempo de 15 segundos ou mais deve ser inserido para carregar.\n"..
"\n"..
"\n"..
"\n",
"O carrinho-tanque é usado para transportar líquidos. Assim como os tanques\\, ele pode ser cheio com bombas ou esvaziado. Em ambos os casos\\, o tubo amarelo deve ser conectado ao caminhão-tanque de cima.\n"..
"\n"..
"Cabem 200 unidades no caminhão-tanque.\n"..
"\n"..
"\n"..
"\n",
"O carrinho-baú é usado para transportar itens. Assim como os baús\\, ele pode ser cheio ou esvaziado usando um empurrador.\n"..
"\n"..
"Cabem 4 pilhas no carrinho de baú.\n"..
"\n"..
"\n"..
"\n",
"O petróleo é uma mistura de substâncias e consiste em muitos componentes. O petróleo pode ser decomposto em seus principais componentes\\, como betume\\, óleo combustível\\, nafta\\, gasolina e gás propano\\, por meio de uma torre de destilação.\n"..
"O processamento adicional para produtos finais ocorre no reator químico.\n"..
"\n"..
"\n"..
"\n",
"A torre de destilação deve ser montada como no plano no canto superior direito.\n"..
"O betume é drenado pelo bloco de base. A saída está na parte de trás do bloco de base (observe a direção da seta).\n"..
"Os blocos \"torre de destilação\" com os números: 1\\, 2\\, 3\\, 2\\, 3\\, 2\\, 3\\, 4 são colocados sobre este bloco base.\n"..
"Óleo combustível\\, nafta e gasolina são drenados das aberturas de baixo para cima. O gás propano é capturado no topo.\n"..
"Todas as aberturas na torre devem ser conectadas a tanques.\n"..
"O reboiler deve ser conectado ao bloco \"torre de destilação 1\".\n"..
"\n"..
"O reboiler precisa de eletricidade (não mostrado no plano)!\n"..
"\n"..
"\n"..
"\n",
"O reboiler aquece o petróleo para aproximadamente 400 °C. Ele evapora em grande parte e é alimentado na torre de destilação para resfriamento.\n"..
"\n"..
"O reboiler requer 14 unidades de eletricidade e produz uma unidade de betume\\, óleo combustível\\, nafta\\, gasolina e propano a cada 16s.\n"..
"Para isso\\, o reboiler deve ser alimentado com petróleo por meio de uma bomba.\n"..
"\n"..
"\n"..
"\n",
"Além dos tubos para transporte de mercadorias\\, bem como os tubos de gás e energia\\, há também um nível de comunicação sem fio através do qual os blocos podem trocar dados entre si. Não é necessário desenhar linhas para isso\\, a conexão entre transmissor e receptor é feita apenas através do número do bloco.\n"..
"\n"..
"*Info:* Um número de bloco é um número único gerado pelo Techage quando muitos blocos do Techage são colocados. O número do bloco é usado para endereçamento durante a comunicação entre controladores e máquinas Techage. Todos os blocos que podem participar dessa comunicação mostram o número do bloco como texto de informações se você fixar o bloco com o cursor do mouse.\n"..
"\n"..
"Quais comandos um bloco suporta podem ser lidos e exibidos com a TechAge Info Tool (chave inglesa ou wrench).\n"..
"Os comandos mais simples suportados por quase todos os blocos são:\n"..
"\n"..
" - 'on' - para ligar o bloco / máquina / lâmpada\n"..
" - 'off' - para desligar o bloco / máquina / lâmpada\n"..
"\n"..
"Com a ajuda do Terminal TA3\\, esses comandos podem ser testados muito facilmente. Suponha que uma lâmpada de sinalização seja o número 123.\n"..
"Então com:\n"..
"\n"..
" cmd 123 on\n"..
"\n"..
"a lâmpada pode ser ligada e com:\n"..
"\n"..
" cmd 123 off\n"..
"\n"..
"a lâmpada pode ser desligada novamente. Esses comandos devem ser inseridos no campo de entrada do terminal TA3.\n"..
"\n"..
"Comandos como 'on' e 'off' são enviados ao destinatário sem que uma resposta seja enviada de volta. Portanto\\, esses comandos podem ser enviados para vários destinatários ao mesmo tempo\\, por exemplo\\, com um botão de pressão / interruptor\\, se vários números forem inseridos no campo de entrada.\n"..
"\n"..
"Um comando como 'state' solicita o status de um bloco. O bloco então envia seu status de volta. Esse tipo de comando confirmado só pode ser enviado para um destinatário de cada vez.\n"..
"Esse comando também pode ser testado com o terminal TA3 em um empurrador\\, por exemplo:\n"..
"\n"..
" cmd 123 state\n"..
"\n"..
"As respostas possíveis do empurrador são:\n"..
"\n"..
" - 'running' -> Estou funcionando\n"..
" - 'stopped' -> desligado\n"..
" - 'standby' -> nada a fazer porque o inventário da fonte está vazio\n"..
" - 'blocked' -> não pode fazer nada porque o inventário de destino está cheio\n"..
"\n"..
"Esse status e outras informações também são exibidos quando a chave inglesa(wrench) é clicada no bloco.\n"..
"\n"..
"\n"..
"\n",
"O botão/interruptor envia comandos 'on' / 'off' para os blocos que foram configurados através dos números.\n"..
"O botão/interruptor pode ser configurado como um botão ou um interruptor. Se for configurado como um botão\\, o tempo entre os comandos 'on' e 'off' pode ser definido. Com o modo de operação \"no botão\"\\, apenas um comando 'on' e nenhum comando 'off' é enviado.\n"..
"\n"..
"A caixa de seleção \"público\" pode ser usada para definir se o botão pode ser usado por todos (marcado) ou apenas pelo próprio proprietário (não marcado).\n"..
"\n"..
"Nota: Com o programador\\, os números dos blocos podem ser facilmente coletados e configurados.\n"..
"\n"..
"\n"..
"\n",
"Com o conversor de comandos TA3\\, os comandos 'on' / 'off' podem ser convertidos em outros comandos\\, e o encaminhamento pode ser impedido ou atrasado.\n"..
"Deve-se inserir o número do bloco de destino ou os números dos blocos de destino\\, os comandos a serem enviados e os tempos de atraso em segundos. Se nenhum comando for inserido\\, nada será enviado.\n"..
"\n"..
"Os números também podem ser programados usando o programador Techage(programmer).\n"..
"\n"..
"\n"..
"\n",
"O flip-flop TA3 muda de estado a cada comando 'on' recebido. Os comandos 'off' recebidos são ignorados. Dependendo da alteração de status\\, os comandos 'on' / 'off' são enviados alternadamente. Deve-se inserir o número do bloco de destino ou os números dos blocos de destino. Os números também podem ser programados usando o programador Techage.\n"..
"\n"..
"Por exemplo\\, lâmpadas podem ser ligadas e desligadas com a ajuda de botões.\n"..
"\n"..
"\n"..
"\n",
"O bloco lógico TA3 pode ser programado de forma que um ou mais comandos de entrada estejam vinculados a um comando de saída e sejam enviados. Este bloco pode\\, portanto\\, substituir vários elementos lógicos\\, como AND\\, OR\\, NOT\\, XOR\\, etc.\n"..
"Os comandos de entrada para o bloco lógico são comandos 'ligar' / 'desligar'.\n"..
"Os comandos de entrada são referenciados pelo número\\, por exemplo\\, '1234' para o comando do remetente com o número 1234.\n"..
"O mesmo se aplica aos comandos de saída.\n"..
"\n"..
"Uma regra é estruturada da seguinte forma:\n"..
"\n"..
" <output> = on/off if <expressão-de-entrada> is true\n"..
"\n"..
"'<output>' é o número do bloco para o qual o comando deve ser enviado.\n"..
"'<expressão-de-entrada>' é uma expressão booleana onde os números de entrada são avaliados.\n"..
"\n"..
"*Exemplos para a expressão de entrada*\n"..
"\n"..
"Negar sinal (NOT):\n"..
"\n"..
" 1234 == off\n"..
"\n"..
"AND lógico:\n"..
"\n"..
" 1234 == on e 2345 == on\n"..
"\n"..
"OR lógico:\n"..
"\n"..
" 1234 == ligar ou 2345 == ligar\n"..
"\n"..
"Os seguintes operadores são permitidos: 'and' 'or' 'on' 'off' 'me' '==' '~=' '(' ')'\n"..
"\n"..
"Se a expressão for verdadeira\\, um comando é enviado para o bloco com o número '<output>'.\n"..
"Até quatro regras podem ser definidas\\, sendo que todas as regras são sempre verificadas quando um comando é recebido.\n"..
"O tempo interno de processamento para todos os comandos é de 100 ms.\n"..
"\n"..
"Seu próprio número de nó pode ser referenciado usando a palavra-chave 'me'. Isso permite que o bloco envie a si mesmo um comando (função flip-flop).\n"..
"\n"..
"O tempo de bloqueio define uma pausa após um comando\\, durante a qual o bloco lógico não aceita mais comandos externos. Comandos recebidos durante o período de bloqueio são descartados. O tempo de bloqueio pode ser definido em segundos.\n"..
"\n"..
"\n"..
"\n",
"O repetidor envia o sinal recebido para todos os números configurados.\n"..
"Isso pode fazer sentido\\, por exemplo\\, se você quiser controlar muitos blocos ao mesmo tempo. O repetidor pode ser configurado com o programador\\, o que não é possível com todos os blocos.\n"..
"\n"..
"\n"..
"\n",
"O sequenciador pode enviar uma série de comandos 'on' / 'off'\\, em que o intervalo entre os comandos deve ser especificado em segundos. Você pode usá-lo para fazer uma lâmpada piscar\\, por exemplo.\n"..
"Até 8 comandos podem ser configurados\\, cada um com número de bloco de destino e aguardando o próximo comando.\n"..
"O sequenciador repete os comandos indefinidamente quando \"Run endless\" está ativado.\n"..
"Se nada for selecionado\\, apenas o tempo especificado em segundos é aguardado.\n"..
"\n"..
"\n"..
"\n",
"O temporizador pode enviar comandos controlados pelo tempo. O horário\\, o(s) número(s) de destino e o comando em si podem ser especificados para cada linha de comando. Isso significa que as lâmpadas podem ser ligadas à noite e desligadas pela manhã.\n"..
"\n"..
"\n"..
"\n",
"O terminal é usado principalmente para testar a interface de comando de outros blocos (veja \"Blocos lógicos / de comutação\").\n"..
"Você também pode atribuir comandos a teclas e usar o terminal de maneira produtiva.\n"..
"\n"..
" set <número-do-botão> <texto-do-botão> <comando>\n"..
"\n"..
"Com 'set 1 ON cmd 123 on'\\, por exemplo\\, a tecla do usuário 1 pode ser programada com o comando 'cmd 123 on'. Se a tecla for pressionada\\, o comando é enviado e a resposta é exibida na tela.\n"..
"\n"..
"O terminal possui os seguintes comandos locais:\n"..
"\n"..
" - 'clear' limpa a tela\n"..
" - 'help' exibe uma página de ajuda\n"..
" - 'pub' alterna para o modo público\n"..
" - 'priv' alterna para o modo privado\n"..
"\n"..
"No modo privado\\, o terminal só pode ser usado por jogadores que podem construir neste local\\, ou seja\\, que têm direitos de proteção.\n"..
"\n"..
"No modo público\\, todos os jogadores podem usar as teclas preconfiguradas.\n"..
"\n"..
"\n"..
"\n",
"A lâmpada de sinalização pode ser ligada ou desligada com o comando 'on' / 'off'. Esta lâmpada não precisa de eletricidade e pode ser colorida com a ferramenta de aerografia do mod \"Dyes Unificados\" e via comandos Lua/Beduino.\n"..
"\n"..
"Com o comando de chat '/ta_color'\\, a paleta de cores com os valores para os comandos Lua/Beduino é exibida e com '/ta_send color <num>' a cor pode ser alterada.\n"..
"\n"..
"\n"..
"\n",
"Com esses blocos\\, você pode criar portas e portões que podem ser abertos por meio de comandos (blocos desaparecem) e fechados novamente. Um controlador de porta é necessário para cada portão ou porta.\n"..
"\n"..
"A aparência dos blocos pode ser ajustada por meio do menu de blocos.\n"..
"Isso permite a criação de portas secretas que só se abrem para certos jogadores (com a ajuda do detector de jogadores).\n"..
"\n"..
"\n"..
"\n",
"O controlador de porta é usado para controlar os blocos de porta/portão TA3. Com o controlador de porta\\, os números dos blocos de porta/portão devem ser inseridos. Se um comando 'on' / 'off' for enviado para o controlador de porta\\, isso abre/fecha a porta ou portão.\n"..
"\n"..
"\n"..
"\n",
"O Controlador de Porta II pode remover e definir todos os tipos de blocos. Para ensinar ao Controlador de Porta II\\, o botão \"Record\" deve ser pressionado. Em seguida\\, todos os blocos que devem fazer parte da porta/portão devem ser clicados. Depois\\, o botão \"Done\" deve ser pressionado. Até 16 blocos podem ser selecionados. Os blocos removidos são salvos no inventário do controlador. A função do controlador pode ser testada manualmente usando os botões \"Remove\" ou \"Set\". Se um comando 'on' /'off' for enviado para o Controlador de Porta II\\, ele remove ou define os blocos também.\n"..
"\n"..
"Com '$send_cmnd(número_do_nó\\, \"exchange\"\\, 2)' blocos individuais podem ser definidos\\, removidos ou substituídos por outros blocos do inventário.\n"..
"\n"..
"Com '$send_cmnd(número_do_nó\\, \"set\"\\, 2)' um bloco do inventário pode ser definido explicitamente\\, desde que o slot do inventário não esteja vazio.\n"..
"\n"..
"Um bloco pode ser removido novamente com '$send_cmnd(número_do_nó\\, \"dig\"\\, 2)' se o slot do inventário estiver vazio.\n"..
"\n"..
"O nome do bloco definido é retornado com '$send_cmnd(número_do_nó\\, \"get\"\\, 2)'.\n"..
"\n"..
"O número do slot do inventário (1 .. 16) deve ser passado como carga útil em todos os três casos.\n"..
"\n"..
"Isso também pode ser usado para simular escadas extensíveis e coisas do tipo.\n"..
"\n"..
"\n"..
"\n",
"Diferentes sons podem ser reproduzidos com o bloco de som. Todos os sons dos Mods Techage\\, Signs Bot\\, Hyperloop\\, Unified Inventory\\, TA4 Jetpack e Minetest Game estão disponíveis.\n"..
"\n"..
"Os sons podem ser selecionados e reproduzidos pelo menu e via comando.\n"..
"\n"..
" - Comando 'on' para reproduzir um som\n"..
" - Comando 'sound <índice>' para selecionar um som via o índice\n"..
" - Comando 'gain <volume>' para ajustar o volume via o valor '<volume>' (1 a 5).\n"..
"\n"..
"\n"..
"\n",
"O conversor Mesecons é utilizado para converter comandos de ligar/desligar do Techage em sinais Mesecons e vice-versa.\n"..
"Para fazer isso\\, um ou mais números de nó devem ser inseridos e o conversor deve ser conectado a blocos Mesecons por meio de cabos Mesecons. O conversor Mesecons também pode ser configurado com o programador.\n"..
"O conversor Mesecons aceita até 5 comandos por segundo\\; ele se desativa em cargas mais altas.\n"..
"\n"..
"*Este nó só existe se o mod mesecons estiver ativo!*\n"..
"\n"..
"\n"..
"\n",
"Os detectores escaneiam o ambiente e enviam um comando 'on' quando a busca é reconhecida.\n"..
"\n"..
"\n"..
"\n",
"O detector é um bloco de tubo especial que detecta quando itens passam pelo tubo. Para fazer isso\\, ele deve ser conectado a tubos dos dois lados. Se os itens forem empurrados para o detector com um empurrador(pusher)\\, eles são passados automaticamente.\n"..
"Ele envia um comando 'on' quando um item é reconhecido\\, seguido por um 'off' um segundo depois.\n"..
"Em seguida\\, outros comandos são bloqueados por 8 segundos.\n"..
"O tempo de espera e os itens que devem acionar um comando podem ser configurados usando o menu de chave inglesa(wrench).\n"..
"\n"..
"\n"..
"\n",
"O detector de carrinho envia um comando 'on' se reconhecer um carrinho (Minecart) diretamente na frente dele. Além disso\\, o detector também pode reiniciar o carrinho quando recebe um comando 'on'.\n"..
"\n"..
"O detector também pode ser programado com seu próprio número. Nesse caso\\, ele empurra todos os vagões que param perto dele (um bloco em todas as direções).\n"..
"\n"..
"\n"..
"\n",
"O detector de nó envia um comando 'on' se detectar que nós (blocos) aparecem ou desaparecem na frente dele\\, mas deve ser configurado de acordo. Após retornar o detector ao estado padrão (bloco cinza)\\, um comando 'off' é enviado. Blocos válidos são todos os tipos de blocos e plantas\\, mas não animais ou jogadores. O alcance do sensor é de 3 blocos por metro na direção da seta.\n"..
"\n"..
"\n"..
"\n",
"O detector de jogador envia um comando 'on' se detectar um jogador dentro de 4m do bloco. Se o jogador sair da área\\, um comando 'off' é enviado.\n"..
"Se a pesquisa deve ser limitada a jogadores específicos\\, esses nomes de jogador também podem ser inseridos.\n"..
"\n"..
"\n"..
"\n",
"O detector de luz envia um comando 'on' se o nível de luz do bloco acima exceder um certo nível\\, que pode ser definido através do menu de clique direito.\n"..
"Se você tiver um Controlador Lua TA4\\, pode obter o nível exato de luz com $get_cmd(num\\, 'light_level')\n"..
"\n"..
"\n"..
"\n",
"TA3 possui as mesmas máquinas que o TA2\\, apenas estas são mais poderosas e requerem eletricidade em vez de movimento por eixo.\n"..
"Portanto\\, abaixo são fornecidos apenas os dados técnicos diferentes.\n"..
"\n"..
"\n"..
"\n",
"A função corresponde à do TA2.\n"..
"A capacidade de processamento é de 6 itens a cada 2 segundos.\n"..
"\n"..
"\n"..
"\n",
"A função do Distribuidor TA3 corresponde à do TA2.\n"..
"A capacidade de processamento é de 12 itens a cada 4 segundos.\n"..
"\n"..
"\n"..
"\n",
"A função corresponde à do TA2.\n"..
"A capacidade de processamento é de 2 itens a cada 4 segundos. O autocrafter requer 6 ku de eletricidade.\n"..
"\n"..
"\n"..
"\n",
"A função corresponde à do TA2\\, apenas os chips WLAN do TA4 são produzidos aqui.\n"..
"A capacidade de processamento é de um chip a cada 6 segundos. O bloco requer 12 ku de eletricidade para isso.\n"..
"\n"..
"\n"..
"\n",
"A função corresponde à do TA2.\n"..
"A profundidade máxima é de 40 metros. A pedreira requer 12 ku de eletricidade.\n"..
"\n"..
"\n"..
"\n",
"A função corresponde à do TA2.\n"..
"A capacidade de processamento é de 2 itens a cada 4 segundos. O bloco requer 4 ku de eletricidade.\n"..
"\n"..
"\n"..
"\n",
"A função corresponde à do TA2.\n"..
"A probabilidade também é a mesma que a do TA2. O bloco também requer 3 ku de eletricidade.\n"..
"Mas\\, ao contrário do TA2\\, o status do bloco TA3 pode ser lido (controlador)\n"..
"\n"..
"\n"..
"\n",
"A função corresponde à do TA2.\n"..
"A capacidade de processamento é de 2 itens a cada 4 segundos. O bloco requer 6 ku de eletricidade.\n"..
"\n"..
"\n"..
"\n",
"O injetor é um TA3 pusher com propriedades especiais. Ele possui um menu para configuração. Até 8 itens podem ser configurados aqui. Ele apenas pega esses itens de um baú para passá-los para as máquinas com receitas (autocrafter\\, forno industrial e electronic fab).\n"..
"\n"..
"Ao passar\\, apenas uma posição no inventário é usada na máquina de destino. Se\\, por exemplo\\, apenas as três primeiras entradas estiverem configuradas no injetor\\, apenas as três primeiras posições de armazenamento no inventário da máquina serão usadas. Isso evita o transbordamento no inventário da máquina.\n"..
"\n"..
"O injetor também pode ser alternado para o \"modo pull\". Então ele apenas retira itens do baú das posições que estão definidas na configuração do injetor. Nesse caso\\, o tipo e a posição do item devem corresponder. Isso permite esvaziar entradas específicas do inventário de um baú.\n"..
"\n"..
"A capacidade de processamento é de até 8 vezes um item a cada 4 segundos.\n"..
"\n"..
"\n"..
"\n",
"",
"O Techage Info Tool (chave inglesa de ponta aberta) possui várias funções. Ele mostra a hora\\, posição\\, temperatura e bioma quando um bloco desconhecido é clicado.\n"..
"Se você clicar em um bloco TechAge com interface de comando\\, todos os dados disponíveis serão mostrados (consulte também \"Blocos lógicos / de comutação\").\n"..
"\n"..
"Com Shift + clique direito\\, um menu estendido pode ser aberto para alguns blocos. Dependendo do bloco\\, dados adicionais podem ser chamados ou configurações especiais podem ser feitas aqui. No caso de um gerador\\, por exemplo\\, a curva de carga/desligamento pode ser programada.\n"..
"\n"..
"\n"..
"\n",
"Com o programador\\, números de bloco podem ser coletados de vários blocos com um clique direito e gravados em um bloco como um botão / interruptor com um clique esquerdo.\n"..
"Se você clicar no ar\\, a memória interna é apagada.\n"..
"\n"..
"\n"..
"\n",
"A colher de pedreiro é usada para revestir cabos de energia. Veja também \"Cabo de energia TA\".\n"..
"\n"..
"\n"..
"\n",
"Esta ferramenta pode ser usada para remover blocos de tubo se\\, por exemplo\\, um túnel precisar passar por lá.\n"..
"\n"..
"\n"..
"\n",
"A chave de fenda Techage serve como substituto da chave de fenda normal. Ela possui as seguintes funções:\n"..
"\n"..
" - Clique esquerdo: girar o bloco para a esquerda\n"..
" - Clique direito: girar a face visível do bloco para cima\n"..
" - Shift + clique esquerdo: salvar o alinhamento do bloco clicado\n"..
" - Shift + clique direito: aplicar o alinhamento salvo ao bloco clicado\n"..
"\n"..
" \n"..
"\n",
"A TechAge Assembly Tool é usada para remover e reposicionar blocos Techage sem que esses blocos percam seu número de bloco ou recebam um novo número ao serem configurados. Isso é útil\\, por exemplo\\, para pedreiras\\, já que muitas vezes precisam ser movidas.\n"..
"\n"..
" - Botão esquerdo: remover um bloco\n"..
" - Botão direito: configurar um bloco\n"..
"\n"..
"O bloco que foi removido anteriormente com a ferramenta de montagem e que será colocado novamente deve estar no extremo esquerdo do inventário do jogador.\n"..
"\n"..
"\n"..
"\n",
},
images = {
"techage_ta3",
"",
"ta3_firebox",
"ta3_oilbox",
"ta3_boiler",
"ta3_turbine",
"ta3_generator",
"ta3_cooler",
"ta3_powerswitch",
"power_reduction",
"ta3_powercable",
"ta3_powerjunction",
"ta3_powerline",
"ta3_powerpole",
"ta3_powerpole4",
"ta3_powerpole2",
"ta3_powerswitch",
"ta3_powerswitchsmall",
"ta3_powerswitchbox",
"ta3_tinygenerator",
"ta3_akkublock",
"ta3_powerterminal",
"ta3_motor",
"",
"ta3_furnacefirebox",
"ta3_furnace",
"ta3_booster",
"",
"ta3_tank",
"ta3_pump",
"ta3_filler",
"ta3_pipe",
"ta3_pipe_wall_entry",
"ta3_valve",
"techage_ta3",
"ta3_oilexplorer",
"ta3_drillbox",
"ta3_pumpjack",
"ta3_drillbit",
"oiltank",
"",
"tank_cart",
"",
"",
"tank_cart",
"chest_cart",
"techage_ta31",
"",
"reboiler",
"ta3_logic",
"ta3_button",
"ta3_command_converter",
"ta3_flipflop",
"ta3_logic",
"ta3_repeater",
"ta3_sequencer",
"ta3_timer",
"ta3_terminal",
"ta3_colorlamp",
"ta3_doorblock",
"ta3_doorcontroller",
"ta3_doorcontroller",
"ta3_soundblock",
"ta3_mesecons_converter",
"ta3_nodedetector",
"ta3_detector",
"ta3_cartdetector",
"ta3_nodedetector",
"ta3_playerdetector",
"ta3_lightdetector",
"ta3_grinder",
"ta3_pusher",
"ta3_distributor",
"ta3_autocrafter",
"ta3_electronicfab",
"ta3_quarry",
"ta3_gravelsieve",
"ta3_gravelrinser",
"ta3_grinder",
"ta3_injector",
"",
"ta3_end_wrench",
"ta3_programmer",
"ta3_trowel",
"ta3_drill_pipe_wrench",
"ta3_screwdriver",
"techage:assembly_tool",
},
plans = {
"",
"coalpowerstation",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"ta3_furnace",
"",
"",
"",
"ta3_tank",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"ta3_loading",
"ta3_loading",
"",
"",
"",
"ta3_distiller",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,214 @@
return {
titles = {
"1,TA5: Futuro",
"2,Fontes de energia",
"3,Reator de fusão TA5",
"4,Ímã do reator de fusão TA5",
"4,Bomba TA5",
"4,Trocador de calor TA5",
"4,Controlador do reator de fusão TA5",
"4,Carcaça do reator de fusão TA5",
"4,Núcleo do reator de fusão TA5",
"2,Armazenamento de energia",
"3,Armazenamento híbrido TA5 (planejado)",
"2,Blocos lógicos",
"2,Transporte e tráfego",
"3,Controlador de voo TA5",
"3,TA5 Hyperloop Chest",
"3,Tanque de hyperloop TA5",
"2,Blocos de teletransporte",
"3,Itens do bloco de teletransporte TA5",
"3,Líquidos do bloco de teletransporte TA5",
"3,Blocos de teletransporte Hyperloop (planejados)",
"2,Mais blocos/itens TA5",
"3,Contêiner TA5 (planejado)",
"3,Chip TA5 AI",
"3,Chip TA5 AI II",
},
texts = {
"Máquinas para superar o espaço e o tempo\\, novas fontes de energia e outras conquistas moldam sua vida.\n"..
"\n"..
"São necessários pontos de experiência para a fabricação e o uso de máquinas e blocos TA5. Eles só podem ser calculados usando o colisor do TA4.\n"..
"\n"..
"\n"..
"\n",
"",
"A fusão nuclear significa a fusão de dois núcleos atômicos. Dependendo da reação\\, grandes quantidades de energia podem ser liberadas. As fusões nucleares\\, nas quais a energia é liberada\\, ocorrem na forma de reações em cadeia. Elas são a fonte de energia das estrelas\\, inclusive do nosso sol\\, por exemplo. Um reator de fusão converte a energia liberada durante a fusão nuclear controlada em eletricidade.\n"..
"\n"..
"*Como funcionam os reatores de fusão?*\n"..
"\n"..
"Um reator de fusão funciona de acordo com o princípio clássico de uma usina de energia térmica: a água é aquecida e aciona uma turbina a vapor\\, cuja energia cinética é convertida em eletricidade por um gerador.\n"..
"\n"..
"Uma usina de fusão requer inicialmente uma grande quantidade de energia\\, pois é necessário gerar um plasma. \"Plasma\" é o nome dado ao quarto estado da matéria\\, depois do sólido\\, líquido e gasoso. Isso requer uma grande quantidade de eletricidade. Somente por meio dessa concentração extrema de energia é que a reação de fusão se inflama e o calor liberado é usado para gerar eletricidade por meio do trocador de calor. O gerador fornece então 800 ku de eletricidade.\n"..
"\n"..
"A planta à direita mostra uma seção do reator de fusão.\n"..
"\n"..
"São necessários 60 pontos de experiência para operar o reator de fusão. O reator de fusão deve ser construído inteiramente em uma área de bloco de carga.\n"..
"\n"..
"\n"..
"\n",
"Um total de 60 ímãs de reator de fusão TA5 é necessário para configurar o reator de fusão. Eles formam o anel no qual o plasma se forma. O TA5 Fusion Reactor Magnets requer energia e tem duas portas para resfriamento.\n"..
"\n"..
"Há dois tipos de ímãs\\, portanto\\, todos os lados do ímã voltados para o anel de plasma também podem ser protegidos com um protetor térmico.\n"..
"\n"..
"Com os ímãs de canto na parte interna do anel\\, um lado da conexão é coberto (energia ou resfriamento) e\\, portanto\\, não pode ser conectado. Isso não é tecnicamente viável e\\, portanto\\, não influencia a função do reator de fusão. \n"..
"\n"..
"\n"..
"\n",
"A bomba é necessária para encher o circuito de resfriamento com isobutano. São necessárias cerca de 350 unidades de isobutano.\n"..
"\n"..
"Observação: A bomba TA5 só pode ser usada para encher o circuito de resfriamento\\; não é possível bombear o líquido de arrefecimento para fora. Portanto\\, a bomba não deve ser ligada até que os ímãs estejam corretamente posicionados e todas as linhas de alimentação e resfriamento estejam conectadas.\n"..
"\n"..
"\n"..
"\n",
"O trocador de calor TA5 é necessário para converter o calor gerado no reator de fusão primeiro em vapor e depois em eletricidade. O próprio trocador de calor requer 5 ku de eletricidade. A estrutura é semelhante à do trocador de calor do depósito de energia do TA4.\n"..
"\n"..
"Observação: O trocador de calor TA5 tem duas conexões (azul e verde) para o circuito de resfriamento. O trocador de calor e todos os ímãs devem ser conectados para formar um circuito de resfriamento por meio dos tubos verde e azul.\n"..
"\n"..
"É possível verificar se o circuito de resfriamento está completo usando o botão de partida no trocador de calor\\, mesmo que o líquido de arrefecimento ainda não tenha sido abastecido.\n"..
"\n"..
"\n"..
"\n",
"O reator de fusão é ligado por meio do controlador do reator de fusão TA5. O resfriamento/trocador de calor deve ser ligado primeiro e depois o controlador. Leva cerca de 2 minutos para o reator iniciar e fornecer eletricidade. O reator de fusão e\\, portanto\\, o controlador requerem 400 ku de eletricidade para manter o plasma.\n"..
"\n"..
"\n"..
"\n",
"O reator inteiro deve ser cercado por um invólucro que absorva a enorme pressão que os ímãs exercem sobre o plasma e proteja o ambiente da radiação. Sem esse invólucro\\, o reator não pode ser iniciado. Com a TechAge Trowel\\, os cabos de energia e os tubos de resfriamento do reator de fusão também podem ser integrados à carcaça.\n"..
"\n"..
"\n"..
"\n",
"O núcleo deve ficar no centro do reator. Veja a ilustração em \"TA5 Fusion Reactor\". A espátula TechAge também é necessária para isso.\n"..
"\n"..
"\n"..
"\n",
"",
"",
"",
"",
"O controlador de voo TA5 é semelhante ao controlador de movimento TA4. Ao contrário do TA4 Move Controller\\, vários movimentos podem ser combinados em uma rota de voo. Essa rota de voo pode ser definida no campo de entrada usando várias entradas x\\,y\\,z (um movimento por linha). A rota de voo é verificada e salva por meio de \"Save\" (Salvar). Em caso de erro\\, é emitida uma mensagem de erro.\n"..
"\n"..
"Com o botão \"Test\" (Testar)\\, a rota de voo com as coordenadas absolutas é emitida para verificação no bate-papo.\n"..
"\n"..
"A distância máxima para toda a distância de voo é de 1.500 m. Até 32 blocos podem ser treinados.\n"..
"\n"..
"O uso do controlador de voo TA5 requer 40 pontos de experiência.\n"..
"\n"..
"*Modo teletransporte*\n"..
"\n"..
"Se o \"Teleport Mode\" (Modo de teletransporte) estiver ativado\\, o jogador também poderá ser movido sem blocos. Para fazer isso\\, a posição inicial deve ser configurada usando o botão \"Record\" (Registrar). Somente uma posição pode ser configurada aqui. O jogador a ser movido deve estar nessa posição.\n"..
"\n"..
"\n"..
"\n",
"O TA5 Hyperloop Chest permite que objetos sejam transportados em uma rede Hyperloop.\n"..
"\n"..
"O Baú Hyperloop TA5 deve ser colocado em uma Junção Hyperloop. O baú tem um menu especial\\, com o qual você pode emparelhar dois baús. Os itens que estão no baú são teletransportados para a estação remota. O baú também pode ser preenchido/esvaziado com um empurrador.\n"..
"\n"..
"Para fazer o emparelhamento\\, primeiro você precisa inserir um nome para o baú de um lado e\\, em seguida\\, selecionar esse nome para o outro baú e\\, assim\\, conectar os dois blocos.\n"..
"\n"..
"O uso do Baú do Hyperloop TA5 requer 15 pontos de experiência.\n"..
"\n"..
"\n"..
"\n",
"O TA5 Hyperloop Tank permite o transporte de líquidos em uma rede Hyperloop.\n"..
"\n"..
"O TA5 Hyperloop Tank deve ser colocado em um Hyperloop Junction. O tanque tem um menu especial\\, com o qual você pode emparelhar dois tanques. Os líquidos no tanque serão teletransportados para a estação remota. O tanque também pode ser enchido/esvaziado com uma bomba.\n"..
"\n"..
"Para fazer o emparelhamento\\, primeiro é necessário inserir um nome para o tanque de um lado e\\, em seguida\\, selecionar esse nome para o outro tanque e\\, assim\\, conectar os dois blocos.\n"..
"\n"..
"O uso do TA5 Hyperloop Tank requer 15 pontos de experiência.\n"..
"\n"..
"\n"..
"\n",
"Os blocos de teletransporte permitem a transferência de objetos entre dois blocos de teletransporte sem a necessidade de um cano ou tubo entre eles. Para emparelhar os blocos\\, primeiro é preciso digitar um nome para o bloco de um lado e\\, em seguida\\, selecionar esse nome para o outro bloco e\\, assim\\, conectar os dois blocos. O emparelhamento só pode ser realizado por um jogador (o nome do jogador é verificado) e deve ser concluído antes de o servidor ser reiniciado. Caso contrário\\, os dados de emparelhamento serão perdidos.\n"..
"\n"..
"O mapa à direita mostra como os blocos podem ser usados. \n"..
"\n"..
"\n"..
"\n",
"Esses blocos de teletransporte permitem a transferência de itens e\\, portanto\\, substituem um tubo. Distâncias de até 500 blocos podem ser transpostas.\n"..
"\n"..
"Cada bloco de teletransporte requer 12 ku de eletricidade.\n"..
"\n"..
"São necessários 30 pontos de experiência para usar os blocos de teletransporte. \n"..
"\n"..
"\n"..
"\n",
"Esses blocos de teletransporte permitem a transferência de líquidos e\\, portanto\\, substituem um cano. Distâncias de até 500 blocos podem ser transpostas.\n"..
"\n"..
"Cada bloco de teletransporte requer 12 ku de eletricidade.\n"..
"\n"..
"São necessários 30 pontos de experiência para usar os blocos de teletransporte. \n"..
"\n"..
"\n"..
"\n",
"Os blocos de teletransporte Hyperloop permitem a construção de uma rede Hyperloop sem tubos Hyperloop.\n"..
"\n"..
"O uso dos blocos de teletransporte Hyperloop requer 60 pontos de experiência.\n"..
"\n",
"",
"O contêiner TA5 permite que os sistemas Techage sejam embalados e desembalados em outro local.\n"..
"\n"..
"São necessários 80 pontos de experiência para usar o contêiner TA5.\n"..
"\n",
"O chip TA5 AI é parcialmente necessário para a produção de blocos TA5. O chip de IA TA5 só pode ser fabricado na fábrica de eletrônicos TA4. Isso requer 10 pontos de experiência.\n"..
"\n"..
"\n"..
"\n",
"O TA5 AI Chip II é necessário para construir o Reator de Fusão TA5. O TA5 AI Chip II só pode ser fabricado na fábrica de eletrônicos TA4. Isso requer 25 pontos de experiência.\n"..
"\n"..
"\n"..
"\n",
},
images = {
"techage_ta5",
"",
"",
"ta5_magnet",
"ta5_pump",
"",
"ta5_fr_controller",
"ta5_fr_shell",
"ta5_fr_nucleus",
"",
"",
"",
"",
"ta5_flycontroller",
"ta5_chest",
"ta5_tank",
"",
"ta5_tele_tube",
"ta5_tele_pipe",
"",
"",
"",
"ta5_aichip",
"ta5_aichip2",
},
plans = {
"",
"",
"ta5_fusion_reactor",
"",
"",
"ta5_heatexchanger",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"ta5_teleport",
"",
"",
"",
"",
"",
"",
"",
}
}

View File

@ -603,4 +603,5 @@ for name, plan in pairs(plans) do
local plan2 = reformat(plan)
doclib.add_manual_plan("techage", "EN", name, plan2)
doclib.add_manual_plan("techage", "DE", name, plan2)
doclib.add_manual_plan("techage", "pt-BR", name, plan2)
end

View File

@ -163,8 +163,10 @@ end
local function check_TES_integrity(pos, nvm)
nvm.ticks = (nvm.ticks or 0) + 1
if (nvm.ticks % 5) == 0 then -- every 10 saec
glowing(pos, nvm, (nvm.capa or 0) / (nvm.capa_max or 1) > 0.8)
if (nvm.ticks % 5) == 0 then -- every 10 sec
if techage.is_running(nvm) then
glowing(pos, nvm, (nvm.capa or 0) / (nvm.capa_max or 1) > 0.8)
end
end
if (nvm.ticks % 30) == 0 then -- every minute
return heatexchanger1_cmnd(pos, "volume")

View File

@ -36,11 +36,16 @@ local function stop_firebox(pos, nvm)
M(pos):set_string("formspec", fuel.formspec(nvm))
end
local function furnace_active(pos)
-- Check if furnace is not in standby mode
return techage.get_node_lvm({x=pos.x, y=pos.y+1, z=pos.z}).name == "techage:ta3_furnace_act"
end
local function node_timer(pos, elapsed)
local nvm = techage.get_nvm(pos)
nvm.liquid = nvm.liquid or {}
nvm.liquid.amount = nvm.liquid.amount or 0
if nvm.running then
if nvm.running and furnace_active(pos) then
nvm.burn_cycles = (nvm.burn_cycles or 0) - 1
if nvm.burn_cycles <= 0 then
if nvm.liquid.amount > 0 then
@ -53,6 +58,9 @@ local function node_timer(pos, elapsed)
return false
end
end
else
stop_firebox(pos, nvm)
return false
end
if techage.is_activeformspec(pos) then
M(pos):set_string("formspec", fuel.formspec(nvm))
@ -61,7 +69,8 @@ local function node_timer(pos, elapsed)
end
local function start_firebox(pos, nvm)
if not nvm.running then
if not nvm.running and furnace_active(pos) then
nvm.running = true
node_timer(pos, 0)
firebox.swap_node(pos, "techage:furnace_firebox_on")

View File

@ -30,7 +30,19 @@ local reset_cooking = techage.furnace.reset_cooking
local get_ingredients = techage.furnace.get_ingredients
local check_if_worth_to_wakeup = techage.furnace.check_if_worth_to_wakeup
local range = techage.in_range
local MP = minetest.get_modpath(minetest.get_current_modname())
local mConf = assert(loadfile(MP .. "/basis/conf_inv.lua"))("cfg")
local WRENCH_MENU3 = {
{
type = "items",
name = "config",
label = S("Pre-Assignment Input Inv."),
tooltip = S("Stack locations can be pre-assigned to specific items,\nto be filled only with those items."),
width = 2,
height = 2,
}
}
local function update_recipe_menu(pos, nvm)
local ingr = get_ingredients(pos)
@ -47,7 +59,9 @@ local function formspec(self, pos, nvm)
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
techage.wrench_image(7.6, -0.2) ..
"list[context;src;0,0;2,2;]"..
mConf.preassigned_stacks(pos, 2, 2)..
"image[2,0.5;1,1;techage_form_arrow_bg.png^[lowpart:"..
(nvm.item_percent or 0)..":techage_form_arrow_fg.png^[transformR270]"..
"image_button[2,2;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"..
@ -237,9 +251,20 @@ local tubing = {
end,
on_push_item = function(pos, in_dir, stack, idx)
local meta = minetest.get_meta(pos)
if meta:get_int("push_dir") == in_dir or in_dir == 5 then
if meta:get_int("push_dir") == in_dir or in_dir == 5 then
local inv = M(pos):get_inventory()
return techage.put_items(inv, "src", stack, idx)
local mem = techage.get_mem(pos)
mem.filter = mem.filter or mConf.item_filter(pos, 4)
mem.chest_configured = mem.chest_configured or not inv:is_empty("cfg")
if mem.chest_configured then
local name = stack:get_name()
local stacks = mem.filter[name] or mem.filter["unconfigured"]
return mConf.put_items(pos, inv, "src", stack, stacks, idx)
else
return techage.put_items(inv, "src", stack, idx)
end
end
end,
on_unpull_item = function(pos, in_dir, stack)
@ -283,6 +308,7 @@ local _, node_name_ta3, _ =
local inv = M(pos):get_inventory()
inv:set_size("src", 2*2)
inv:set_size("dst", 2*2)
inv:set_size("cfg", 2*2)
end,
can_dig = can_dig,
node_timer = keep_running,
@ -293,6 +319,8 @@ local _, node_name_ta3, _ =
on_metadata_inventory_put = on_metadata_inventory,
on_metadata_inventory_take = on_metadata_inventory,
on_metadata_inventory_move = on_metadata_inventory,
ta3_formspec = WRENCH_MENU3,
on_rightclick = on_rightclick,
groups = {choppy=2, cracky=2, crumbly=2},
sounds = default.node_sound_wood_defaults(),
num_items = {0,1,1,1},

View File

@ -31,6 +31,14 @@ local WRENCH_MENU = {{
name = "flowrate",
label = S("Total flow rate"),
tooltip = S("Total flow rate in liquid units"),
},{
type = "dropdown",
choices = "normal,reverse",
name = "operation",
label = S("Operation"),
tooltip = S("Pump direction"),
values = {0, 1},
default = "1",
}}
local State = techage.NodeStates:new({
@ -43,20 +51,39 @@ local State = techage.NodeStates:new({
local function pumping(pos, nvm)
local outdir = M(pos):get_int("outdir")
local taken, name = liquid.take(pos, Pipe2, Flip[outdir], nil, CAPA)
if taken > 0 then
local leftover = liquid.put(pos, Pipe3, outdir, name, taken)
if leftover and leftover > 0 then
liquid.untake(pos, Pipe2, Flip[outdir], name, leftover)
if leftover == taken then
State:blocked(pos, nvm)
return 0
local reverse = M(pos):get_int("operation")
if reverse == 1 then
local taken, name = liquid.take(pos, Pipe3, outdir, nil, CAPA)
if taken > 0 then
local leftover = liquid.put(pos, Pipe2, Flip[outdir], name, taken)
if leftover and leftover > 0 then
liquid.untake(pos, Pipe3, outdir, name, leftover)
if leftover == taken then
State:blocked(pos, nvm)
return 0
end
State:keep_running(pos, nvm, COUNTDOWN_TICKS)
return taken - leftover
end
State:keep_running(pos, nvm, COUNTDOWN_TICKS)
return taken - leftover
return taken
end
else
local taken, name = liquid.take(pos, Pipe2, Flip[outdir], nil, CAPA)
if taken > 0 then
local leftover = liquid.put(pos, Pipe3, outdir, name, taken)
if leftover and leftover > 0 then
liquid.untake(pos, Pipe2, Flip[outdir], name, leftover)
if leftover == taken then
State:blocked(pos, nvm)
return 0
end
State:keep_running(pos, nvm, COUNTDOWN_TICKS)
return taken - leftover
end
State:keep_running(pos, nvm, COUNTDOWN_TICKS)
return taken
end
State:keep_running(pos, nvm, COUNTDOWN_TICKS)
return taken
end
State:idle(pos, nvm)
return 0

View File

@ -379,7 +379,6 @@ minetest.register_node("techage:ta4_icta_controller", {
meta:set_string("number", number)
meta:set_int("state", techage.STOPPED)
meta:set_string("formspec", techage.formspecRules(meta, fs_data, sOUTPUT))
--meta:set_string("formspec", techage.cond_formspec(1, 1, nil))
meta:set_string("infotext", "TA4 ICTA Controller "..number..": stopped")
end,

View File

@ -3,7 +3,7 @@
TechAge
=======
Copyright (C) 2019-2023 Joachim Stolberg
Copyright (C) 2019-2024 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
@ -106,6 +106,7 @@ dofile(MP.."/basis/shared_inv.lua")
dofile(MP.."/basis/shared_tank.lua")
dofile(MP.."/basis/teleport.lua")
dofile(MP.."/basis/fly_lib.lua")
dofile(MP.."/basis/pack_lib.lua")
-- Main doc
dofile(MP.."/doc/guide.lua")
@ -393,6 +394,7 @@ dofile(MP.."/items/cracking.lua")
dofile(MP.."/items/ceramic.lua")
dofile(MP.."/items/basalt.lua")
dofile(MP.."/items/moreblocks.lua")
dofile(MP.."/items/salt.lua")
-- Carts
dofile(MP.."/carts/tank_cart.lua")

View File

@ -61,3 +61,68 @@ techage.furnace.register_recipe({
time = 16,
})
if minetest.get_modpath('techpack_stairway') then
minetest.register_craft({
output = "techpack_stairway:grating 6",
recipe = {
{"", "", ""},
{"dye:dark_grey", "", "default:coal_lump"},
{"default:steel_ingot", "techage:aluminum", "default:steel_ingot"},
},
})
minetest.register_craft({
output = "techpack_stairway:handrail 6",
recipe = {
{"default:steel_ingot", "default:coal_lump", ""},
{"techage:aluminum", "", ""},
{"default:steel_ingot", "dye:dark_grey", ""},
},
})
minetest.register_craft({
output = "techpack_stairway:stairway1 6",
recipe = {
{"", "", "default:steel_ingot"},
{"dye:dark_grey", "techage:aluminum", "default:coal_lump"},
{"default:steel_ingot", "", ""},
},
})
minetest.register_craft({
output = "techpack_stairway:ladder1 3",
recipe = {
{"", "default:steel_ingot", ""},
{"dye:dark_grey", "techage:aluminum", "default:coal_lump"},
{"", "default:steel_ingot", ""},
},
})
minetest.register_craft({
output = "techpack_stairway:ladder3 6",
recipe = {
{"", "", "default:steel_ingot"},
{"dye:dark_grey", "techage:aluminum", "default:coal_lump"},
{"", "", "default:steel_ingot"},
},
})
minetest.register_craft({
output = "techpack_stairway:ladder4 12",
recipe = {
{"dye:dark_grey", "techage:aluminum", "default:coal_lump"},
{"", "default:steel_ingot", ""},
{"", "default:steel_ingot", ""},
},
})
minetest.register_craft({
output = "techpack_stairway:lattice 4",
recipe = {
{"default:steel_ingot", "", "default:steel_ingot"},
{"dye:dark_grey", "techage:aluminum", "default:coal_lump"},
{"default:steel_ingot", "", "default:steel_ingot"},
},
})
end

50
techage/items/salt.lua Normal file
View File

@ -0,0 +1,50 @@
--[[
TechAge
=======
Copyright (C) 2024 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
Salt
]]--
--Detects if the salt node is registered.
minetest.register_on_mods_loaded(function()
if minetest.registered_nodes["farming:salt"] then
--Adds salt to powder group to ensure reactor and silo will accept it
local def = minetest.registered_nodes["farming:salt"]
local groups = table.copy(def.groups)
groups.powder = 1
minetest.override_item("farming:salt", { groups=groups })
--Add the water -> salt & river water recipe.
techage.recipes.add("ta4_doser", {
output = "farming:salt 1",
waste = "techage:river_water 1",
input = {
"techage:water 1",
}
})
-- Add salt recipe as replacement for the minetest.register_craft("farming:salt") recipe
techage.furnace.register_recipe({
output = "farming:salt",
recipe = {"bucket:bucket_water"},
waste = "bucket:bucket_empty",
time = 8,
})
else
-- Creates a water -> River Water recipe in absense of the farming:salt node.
techage.recipes.add("ta4_doser", {
output = "techage:river_water 1",
input = {
"techage:water 1",
}
})
end
end)

View File

@ -74,7 +74,7 @@ local function grow_flowers(pos)
local soil_node = minetest.get_node(soil_pos)
if soil_node and soil_node.name == "compost:garden_soil" then
if plant_node and plant_node.name == "air" then
if mem.grow_pos[plant_idx] then
if mem.grow_pos[plant_idx] and #Flowers > 1 then
local idx = math.floor(math.random(1, #Flowers))
if Flowers[idx] then
minetest.set_node(plant_pos, {name = Flowers[idx]})
@ -192,14 +192,22 @@ function techage.register_plant(name)
end
minetest.after(1, function()
local function add_flower(name)
local def = minetest.registered_nodes[name]
if def and (def.groups.mushroom == 1 or def.groups.flower == 1) then
if not Ignore[name] then
techage.register_flower(name)
end
end
end
for _,def in pairs(minetest.registered_decorations) do
local name = def.decoration
if name and type(name) == "string" then
local mod = string.split(name, ":")[1]
if mod == "flowers" or mod == "bakedclay" then -- Bakedclay also registers flowers as decoration.
if not Ignore[name] then
techage.register_flower(name)
end
if type(name) == "string" then
add_flower(name)
elseif type(name) == "table" then
for _,sub_name in ipairs(name) do
add_flower(sub_name)
end
end
end
@ -213,5 +221,4 @@ minetest.after(1, function()
end
end
end
-- print(dump(Flowers))
end)

View File

@ -3,7 +3,7 @@
TechAge
=======
Copyright (C) 2019-2022 Joachim Stolberg
Copyright (C) 2019-2024 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
@ -128,7 +128,7 @@ local tLiquid = {
put = function(pos, indir, name, amount)
-- check if it is powder
local nvm = techage.get_nvm(pos)
local ndef = minetest.registered_craftitems[name] or {}
local ndef = minetest.registered_craftitems[name] or minetest.registered_nodes[name] or {}
if ndef.groups and ndef.groups.powder == 1 then
local inv = M(pos):get_inventory()
local stack = ItemStack(name.." "..amount)

View File

@ -591,6 +591,9 @@ TA2 Flywheel=TA2 Schwungrad
### forceload.lua ###
Area already loaded or max. number of Forceload Blocks reached!=Bereich bereits geladen oder maximale Anzahl von Forceload Blöcken erreicht!
Area from=Bereich von
Area to=Bereich bis
Block at pos=Block an Pos
List of your Forceload Blocks:=Liste der Forceload Blöcke
Punch the block to make the area visible.=Schlage auf den Bock um den Bereich anzuzeigen.
Show all forceload blocks in a 64x64x64 range=Zeige alle Forceload Blöcke im Umkreis von 64x64x64 Blöcken
@ -1577,5 +1580,3 @@ TA4 Collider Detector Worker=TA4 Collider Detektor Worker
##### not used anymore #####
TA3 Akku Box=TA3 Akku Block

1602
techage/locale/techage.fr.tr Normal file

File diff suppressed because it is too large Load Diff

1576
techage/locale/techage.ru.tr Normal file

File diff suppressed because it is too large Load Diff

View File

@ -591,6 +591,9 @@ TA2 Flywheel=
### forceload.lua ###
Area already loaded or max. number of Forceload Blocks reached!=
Area from=
Area to=
Block at pos=
List of your Forceload Blocks:=
Punch the block to make the area visible.=
Show all forceload blocks in a 64x64x64 range=

View File

@ -87,7 +87,7 @@ local WRENCH_MENU4 = {
},
}
local function switch_on(pos)
local function switch_on(pos, no_sound)
local cycle_time = M(pos):get_int("cycle_time")
local name = techage.get_node_lvm(pos).name
if name == "techage:ta3_button_off" then
@ -96,14 +96,16 @@ local function switch_on(pos)
logic.swap_node(pos, "techage:ta4_button_on")
end
logic.send_cmnd(pos, "command", "on", cycle_time)
minetest.sound_play("techage_button", {
pos = pos,
gain = 0.5,
max_hear_distance = 5,
})
if not no_sound then
minetest.sound_play("techage_button", {
pos = pos,
gain = 0.5,
max_hear_distance = 5,
})
end
end
local function switch_off(pos, is_button)
local function switch_off(pos, no_sound)
local name = techage.get_node_lvm(pos).name
if name == "techage:ta3_button_on" then
logic.swap_node(pos, "techage:ta3_button_off")
@ -115,7 +117,7 @@ local function switch_off(pos, is_button)
(not meta:contains("command") or meta:get_string("command") == "on") then
logic.send_off(pos, M(pos))
end
if not is_button then
if not no_sound then
minetest.sound_play("techage_button", {
pos = pos,
gain = 0.5,
@ -200,7 +202,7 @@ local function on_receive_fields(pos, formname, fields, player)
local meta = M(pos)
logic.infotext(meta, NDEF(pos).description)
if fields.exit then
meta:set_string("formspec", nil)
meta:set_string("formspec", "")
meta:set_string("fixed" , "true")
else
meta:set_string("formspec", formspec(meta))
@ -425,13 +427,54 @@ minetest.register_craft({
},
})
techage.register_node({"techage:ta3_button_off", "techage:ta3_button_on"}, {})
techage.register_node({"techage:ta3_button_off", "techage:ta3_button_on"}, {
on_recv_message = function(pos, src, topic, payload)
if topic == "on" then
switch_on(pos, true)
return true
elseif topic == "off" then
switch_off(pos, true)
return true
elseif topic == "state" then
local name = techage.get_node_lvm(pos).name
return name == "techage:ta3_button_on" and "on" or "off"
else
return "unsupported"
end
end,
on_beduino_receive_cmnd = function(pos, src, topic, payload)
if topic == 1 and payload[1] == 1 then
switch_on(pos, true)
return 0
elseif topic == 1 and payload[1] == 0 then
switch_off(pos, true)
return 0
else
return 2
end
end,
on_beduino_request_data = function(pos, src, topic, payload)
if topic == 131 then -- State
local name = techage.get_node_lvm(pos).name
return 0, name == "techage:ta3_button_on" and {1} or {0}
else
return 2, ""
end
end,
}
)
techage.register_node({
"techage:ta4_button_off", "techage:ta4_button_on",
}, {
on_recv_message = function(pos, src, topic, payload)
if topic == "state" then
if topic == "on" then
switch_on(pos, true)
return true
elseif topic == "off" then
switch_off(pos, true)
return true
elseif topic == "state" then
local name = techage.get_node_lvm(pos).name
return name == "techage:ta4_button_on" and "on" or "off"
elseif topic == "name" then
@ -444,6 +487,17 @@ techage.register_node({
return "unsupported"
end
end,
on_beduino_receive_cmnd = function(pos, src, topic, payload)
if topic == 1 and payload[1] == 1 then
switch_on(pos, true)
return 0
elseif topic == 1 and payload[1] == 0 then
switch_off(pos, true)
return 0
else
return 2
end
end,
on_beduino_request_data = function(pos, src, topic, payload)
if topic == 131 then -- State
local name = techage.get_node_lvm(pos).name

View File

@ -244,7 +244,49 @@ minetest.register_node("techage:ta4_button_2x", {
sounds = default.node_sound_glass_defaults(),
})
techage.register_node({"techage:ta4_button_2x"}, {})
techage.register_node({"techage:ta4_button_2x"}, {
on_recv_message = function(pos, src, topic, payload)
local num = math.max(tonumber(payload) or 0, 1)
if topic == "on" then
switch_on(pos, num)
send_cmnd(pos, num)
return true
elseif topic == "off" then
switch_off(pos, num)
return true
elseif topic == "state" then
local nvm = techage.get_nvm(pos)
nvm.button = nvm.button or {}
return nvm.button[num] == true
else
return "unsupported"
end
end,
on_beduino_receive_cmnd = function(pos, src, topic, payload)
local num = math.max(payload[1], 1)
if topic == 23 and payload[2] == 1 then
switch_on(pos, num)
send_cmnd(pos, num)
return 0
elseif topic == 23 and payload[2] == 0 then
switch_off(pos, num)
return 0
else
return 2
end
end,
on_beduino_request_data = function(pos, src, topic, payload)
if topic == 152 then -- State
local num = math.max(payload[1], 1)
local nvm = techage.get_nvm(pos)
nvm.button = nvm.button or {}
return 0, nvm.button[num] and {1} or {0}
else
return 2, ""
end
end,
}
)
minetest.register_craft({
output = "techage:ta4_button_2x",

View File

@ -300,7 +300,49 @@ minetest.register_node("techage:ta4_button_4x", {
sounds = default.node_sound_glass_defaults(),
})
techage.register_node({"techage:ta4_button_4x"}, {})
techage.register_node({"techage:ta4_button_4x"}, {
on_recv_message = function(pos, src, topic, payload)
local num = math.max(tonumber(payload) or 0, 3)
if topic == "on" then
switch_on(pos, num)
send_cmnd(pos, num)
return true
elseif topic == "off" then
switch_off(pos, num)
return true
elseif topic == "state" then
local nvm = techage.get_nvm(pos)
nvm.button = nvm.button or {}
return nvm.button[num] == true
else
return "unsupported"
end
end,
on_beduino_receive_cmnd = function(pos, src, topic, payload)
local num = math.max(payload[1], 3)
if topic == 23 and payload[2] == 1 then
switch_on(pos, num)
send_cmnd(pos, num)
return 0
elseif topic == 23 and payload[2] == 0 then
switch_off(pos, num)
return 0
else
return 2
end
end,
on_beduino_request_data = function(pos, src, topic, payload)
if topic == 152 then -- State
local num = math.max(payload[1], 3)
local nvm = techage.get_nvm(pos)
nvm.button = nvm.button or {}
return 0, nvm.button[num] and {1} or {0}
else
return 2, ""
end
end,
}
)
minetest.register_craft({
output = "techage:ta4_button_4x",

View File

@ -306,7 +306,9 @@ techage.register_node({"techage:ta3_detector_off", "techage:ta3_detector_on"}, {
if leftover then
local inv = minetest.get_inventory({type = "node", pos = pos})
if not inv or inv:is_empty("cfg") or inv:contains_item("cfg", ItemStack(stack:get_name())) then
switch_on(pos)
if leftover == true or leftover:get_count() ~= stack:get_count() then
switch_on(pos)
end
end
return leftover
end
@ -331,10 +333,14 @@ techage.register_node({"techage:ta4_detector_off", "techage:ta4_detector_on"}, {
nvm.countdown = nvm.countdown - num_moved
if nvm.countdown <= 0 then
M(pos):set_int("countdown", 0)
switch_on(pos)
if leftover == true or leftover:get_count() ~= stack:get_count() then
switch_on(pos)
end
end
elseif nvm.countdown == nil then
switch_on(pos)
if leftover == true or leftover:get_count() ~= stack:get_count() then
switch_on(pos)
end
end
nvm.counter = (nvm.counter or 0) + num_moved
end

View File

@ -25,7 +25,7 @@ local function join_to_string(tbl)
end
local function reset_programmer(itemstack, user, pointed_thing)
user:get_meta():set_string("techage_prog_numbers", nil)
user:get_meta():set_string("techage_prog_numbers", "")
minetest.chat_send_player(user:get_player_name(), S("[TechAge Programmer] programmer reset"))
return itemstack
end
@ -53,7 +53,7 @@ local function program_numbers(itemstack, placer, pointed_thing)
if pos then
local meta = M(pos)
local numbers = minetest.deserialize(placer:get_meta():get_string("techage_prog_numbers")) or {}
placer:get_meta():set_string("techage_prog_numbers", nil)
placer:get_meta():set_string("techage_prog_numbers", "")
local player_name = placer:get_player_name()
if meta and meta:get_string("owner") ~= player_name then
minetest.chat_send_player(player_name, S("[TechAge Programmer] foreign or unknown node!"))

View File

@ -3,7 +3,7 @@
Terminal
========
Copyright (C) 2018-2021 Joachim Stolberg
Copyright (C) 2018-2024 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
@ -334,6 +334,9 @@ local function register_terminal(name, description, tiles, node_box, selection_b
techage.remove_node(pos, oldnode, oldmetadata)
end,
preserve_nodedata = techage.preserve_nodedata,
restore_nodedata = techage.restore_nodedata,
paramtype = "light",
use_texture_alpha = techage.CLIP,
sunlight_propagates = true,
@ -426,7 +429,7 @@ techage.register_node({"techage:terminal2"}, {
local number = meta:get_string("number") or ""
if number ~= "" then
meta:set_string("node_number", number)
meta:set_string("number", nil)
meta:set_string("number", "")
end
end,
})

View File

@ -0,0 +1,49 @@
From [c56](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=29520) Minetest [Forum](https://forum.minetest.net/viewtopic.php?p=414865#p414865)
I decided to write a longer post describing the game to encourage the undecided. I am not native in English, so forgive me for mistakes.
I had a very nice time playing with a mod called Tech Age. There are some things that annoy me and not everything seems well balanced, but basically it's a very cool and complex tech mod. The gameplay can be fun, relaxing and challenging. If you are concerned about communication difficulties, don't be afraid ;-) Although the server is oriented to the German language, and in the crafting guide the names of the objects are in German, you know most of these objects from other minetest games and all admins/mods also speak English, so there is no problem communicating in that language. (I do not speak German and can play there - it is possible). They are all nice and friendly people there!
The new player starts the game with Construction Board in his or her inventory - instructions describing the next steps of technological development. This information is very useful and is written in both German and English. The player also has the ability to easily craft more of this objects and place them where they need them.This guide also includes illustrations of how to assemble and connect something to build a working device.
Traditionally, at the begining you need to find free land and build some kind of food farm. In this case, however, it is good to find a place far away from other players, because as time goes on, you will need more space in your base, and it would be bad when other players with their structures will stop your progress. You should think about place/sapace management in advance, because as you progress, you may have a lot of objects that will be difficult for you to move to a new place if you eventually will need to move. It seems that it is best not to move at all and have good opportunities to expand your base from the very beginning, both on the surface and underground.
At the beginning, you need to have good access to wheat, from which you will produce lighter blocks, and to trees (the best is to build a tree farm), from which you will produce charcoal blocks. Charcoal is a fuel for smelting ores into usable ingots on the early technological level. You make charcoal in a some kind of furnace, self-builded from dirt blocks, in which you put several wood planks and single lighter. You melt the ingots in a pot on a tall tower of cobbles. That tower need a hole inside, where you drop charcoal blocks, one on another, which will then burn. You make lighter block on fire with flint-and-iron item. Sounds cool? Oh yeah, it's a lot of fun with that!
Another basic technology is getting ores from regular cobble with Gravel Sieve. This process produces gravel from cobble, but such gravel can also be passed through a sieve for more ores! You can mine ores in the traditional way too, but there is at least one element that cannot be obtained otherwise than by sieving: usmium nuggets. And you need that item to make further progress. With chests and hoppers you can make sieving somehow automated. I put all of these on the screenshot. On the picture [1] below you can see the Charcoal Burner (surrounded with iron bars), top part of Melting Furnace (as other part is underground), and the Gravel Sieve with chests and hopper attached to the wall of Melting Furnace.
In this game you can also build a beautiful and animated (!) mill, in which the falling water power grinding the wheat into seeds, and hopper is then sending theese seeds into a regular furnace for bread making [2]. Thanks to the later progress in the game, an electrically powered robot takes care of harvesting my wheat [3]. I hit the button in the game, the robot appears, takes the wheat and sows the seeds, then places the harvested stuff in the mill. In the meantime I am either watching it or doing something else. I have a old-school coal furnace there, but I could put an electric cable over there and out an an industrial electric furnace. Alternatively I can program the same robot to refill coal in coal powered furnace which I already have right now. The player can easily program robots using commands such as "turn right", "turn left", "harvest", "sow_seed", "go forward" or "put what you have into the chest". The player put a command sign in front of the robot, writes a set of commands in the right order on the sign, and then robot can read the entire program and executes it. It is pretty easy! [4]
<img src="https://i.ibb.co/tH7wG62/pic01.png" alt="Image" style="zoom:150%;" />
Picture 5 show you next level of automation of sieving process, thanks to the steam engine (top left). The engine is powered by coal and boiling water. When the stored water reaches a high temperature, the steam drives an axle, and the axle drives machines: Grinder, Gravel Sieve and Gravel Rinser.
Cobble is transported from the chest to Grinder using a device called Pusher that does not need to be powered. Then another Pusher takes the grinded stuff from the Grinder to a Distributor device, which sorts and sends sorted items into one of its outputs. Distributor also not need to be powered. This Distributor pass the gravel to the Gravel Sieve and anything else to the chest. Gravel Sieve produces ores that need to be send to the chest, gravel that need to be send back to the input of Gravel Sieve, and sieved gravel, that need to be send to the Gravel Rinser.
Gravel Rinser produces sand and ores. It produces sand inside itself, so sand can be picked up by a pusher and then transported with tubes to the chest. But ores are produced outside, ores appear dropped above the Gravel Rinser, and this is why there is a water. The flowing water pushes the dropped ores to the hopper placed one or two blocks away. Hopper take it and put into a chest.
This is more or less how the process of sieving and obtaining ores looks like. Of course, nothing prevents you from going to the mine with a pickaxe or digtron and obtaining ores in the traditional way. But even if you do so, this process can utilize all of that cobbles that come from pick, digtron or quarry mining, additionally producing the necessary usmium, which otherwise cannot be obtained.
Later in the game, better versions of some machines, powered by electricity, become available. You will need a power generator driven by a steam turbine, which can be powered by a coal or gasoline firebox. Then you also have to build a network of electric cables that will connect the power source with the machines. Cables don't connect to each other by themselves, but the game provide an additional block that allows you to create a junction for splitting one line into two, three or four.
Most importantly, electric lines can be placed like any other block in the game, but also can be placed inside other blocks! Thanks to a special tool, TechAge Trowel, you can put a whole line through your base, and then cover the electric cables with decorative bricks that is often use to build floors, walls or ceilings. I think this feature of Tech Age is awesome!
As I progressed on the server, one electricity generator was no longer enough for me and I needed three coal-fired generators [6] I also experimented with wind and solar generators, all of them together gave me a lot of energy, but it was still not enough. Finally, when I built a thermonuclear plant,two Fusion Reactors [7], I stopped complaining about power drops and the need to turn on only selected processes in a given time.
Tech Age mod is very computerized. Even too much! The player has the ability to control various devices and processes remotely. The game provides programmable buttons and "computers", with which you can turn something on, off, or check their status. Each machine has its own unique number, so that is how you identify them, when you need to program their external control. I have put in one place buttons that I can use to open or close the entrances to the building, start or stop oil processing, or turn on or off power generators [8]. With the help of control monitors, I can check the level of various substances in tanks, the status of selected machines [9] and even the amount of electricity needed by running machines and generated by generators [10]. There are also items that you can use to program in-game objects using Lua and even something like assembler language.
In this game you can search for crude oil on a map, then build drilling wells and transport oil in carts or with pipes to refineries. Oil distillation produces bitumen, fuel oil, naphta, gasoline, and propane [11]. You can collect all that stuff in tanks and process it later. You can use bitumen to make an asphalt roads (you can move faster on them), fuel oil to create vulcanized rubber items, naphta to get epoxide resin, gasoline to generate electricity or power cars that drive on asphalt roads, and propane to make isobutane. You can process one petroleum material into another, so you can even all your crude oil turn into a gasoline (or bitumen). Oil distillation need electric power.
Tech Age provide a chemical reactors, which are an alternative type of crafting workshop. Thanks to these reactors, you can convert the initial objects into other objects. You can change water with usmium powder into lye liquid, and then lye with bauxite powder into gibbsite. Smelted gibbsite turn into an aluminium, which is important material later in the game. You can have one chemical reactor and changing its connection with different tanks, choosing different recipie when needed, or you can build many chemical reactors, with fixed set up to produce one specific thing. I choose that second solution, with fixed production line [12]. Chemical reactors need electric power.
<img src="https://i.ibb.co/HnY1QSF/pic02.png" alt="Image" style="zoom:150%;" />
In the picture [13, 14, 15] you can see my final version of the process of obtaining ores by sieving. Nothing has changed in the idea of this process, described earlier. Just the whole thing is built with faster and more efficient machines, powered by electricity. And there are 3 lines of sieving. The initial cobbles are split into three loads, each of which goes to a separate line of transporting through the Grinder, Gravel Sieve and Gravel Rinser. The output is sorted to the final chests, and the ores are melted immediately into ingots. 3 parallel production lines ensure faster acquisition of end products.
At one point in my game, I was running out of electricity and the challenge was to move to the next technological level. When I started the Hardon Collider [16, 17], it needed a lot of energy, but I needed the points it generated to build fusion reactors. I managed this somehow. The fusion reactor needs electricity too, it consumes half of what it produces. But with two of them, I have now even too much electricity! ;-)
So if you are looking for a quiet game for a long time, where instead of fighting a monster you want to build machines, improve your factories, create accelerators and fusion reactors, plan technical puzzles, this can be for you. You don't have to worry, that you probably you do not know evrything in this game. It is natural that you will face a questions: what next, how to build it, how to achieve it? You will discover it all. By experimenting and asking the right questions, you solve all the challenges!
And finallyt, I would like to thank the creator of Tech Age and the people who maintain the server. It's great entertainment!

View File

@ -2,19 +2,19 @@
Tech Age ist eine Technik-Mod mit 5 Entwicklungsstufen:
TA1: Eisenzeitalter (Iron Age)
TA1: Eisenzeitalter (Iron Age)
Benutze Werkzeuge und Hilfsmittel wie Köhler, Kohlebrenner, Kiessieb, Hammer, Hopper um notwendige Erze und Metalle zu schürfen und zu verarbeiten.
TA2: Dampfzeitalter (Steam Age)
TA2: Dampfzeitalter (Steam Age)
Baue eine Dampfmaschine mit Antriebsachsen und betreibe damit deine ersten Maschinen zur Verarbeitung von Erzen.
TA3: Ölzeitalter (Oil Age)
TA3: Ölzeitalter (Oil Age)
Suche und fördere Öl, baute Schienenwege zur Ölbeförderung. Ein Kraftwerk liefert den notwendigen Strom für deine Maschinen. Elektrisches Licht erhellt deine Industrieanlagen.
TA4: Gegenwart (Present)
TA4: Gegenwart (Present)
Regenerative Energiequellen wie Wind, Sonne und Biokraft helfen dir, das Ölzeitalter zu verlassen. Mit modernen Technologien und intelligenten Maschinen machst du dich auf in die Zukunft.
TA5: Zukunft (Future)
TA5: Zukunft (Future)
Maschinen zur Überwindung von Raum und Zeit, neue Energiequellen und andere Errungenschaften prägen dein Leben.

View File

@ -2,23 +2,23 @@
Tech Age is a technology mod with 5 development stages:
TA1: Iron Age
TA1: Iron Age
Use tools and aids such as coal burners, coal burners, gravel sieves, hammers and hoppers to mine and process the necessary ores and metals.
TA2: Steam Age
TA2: Steam Age
Build a steam engine with drive axles and use it to operate your first ore processing machines.
TA3: Oil Age
TA3: Oil Age
Find and extract oil, built railways for oil transportation. A power plant provides the necessary electricity for your machines. Electric light illuminates your industrial plants.
TA4: Present
Renewable energy sources such as wind, sun and biofuels help you to leave the oil age. With modern technologies and intelligent machines you set out into the future.
TA4: Present
Renewable energy sources such as wind, sun and bio-fuels help you to leave the oil age. With modern technologies and intelligent machines you set out into the future.
TA5: Future
TA5: Future
Machines to overcome space and time, new sources of energy and other achievements shape your life.
Note: With a click on the plus sign you get into the subchapters of this manual.
Note: With a click on the plus sign you get into the sub-chapters of this manual.
[techage_ta4|image]

View File

@ -0,0 +1,110 @@
# Mod Tech Age
O Tech Age é um mod de tecnologia com 5 estágios de desenvolvimento:
## TA1: Idade do Ferro
Utilize ferramentas e instrumentos auxiliares como queimadores de carvão, peneiras de cascalho, martelos e funis para extrair e processar minérios e metais necessários.
## TA2: Idade do Vapor
Construa uma máquina a vapor com eixos de transmissão e use-a para operar suas primeiras máquinas de processamento de minérios.
## TA3: Idade do Petróleo
Encontre e extraia óleo, construa ferrovias para transporte de óleo. Uma usina fornece a eletricidade necessária para suas máquinas. A luz elétrica ilumina suas instalações industriais.
## TA4: Tempos atuais (Presente)
Fontes de energia renovável, como vento, sol e biocombustíveis, ajudam você a sair da era do petróleo. Com tecnologias modernas e máquinas inteligentes, você parte para o futuro.
## TA5: Futuro
Máquinas para superar espaço e tempo, novas fontes de energia e outras conquistas moldam sua vida.
Nota: Clicando no sinal de adição, você acessa os subcapítulos deste manual.
[techage_ta4|image]
# Dicas
Esta documentação está disponível tanto "dentro do jogo" (plano de construção de blocos) quanto no GitHub como arquivos MD.
* Link: https://github.com/joe7575/techage/wiki
Os planos de construção (diagramas) para a construção das máquinas e as imagens estão disponíveis apenas no jogo.
Com o Tech Age, você precisa começar do zero. Você só pode criar blocos TA2 com os itens do TA1, para o TA3 você precisa dos resultados do TA2, e assim por diante.
No TA2, as máquinas só funcionam com eixos de transmissão.
A partir do TA3, as máquinas funcionam com eletricidade e têm uma interface de comunicação para controle remoto.
O TA4 adiciona mais fontes de energia, mas também desafios logísticos mais altos (linhas de energia, transporte de itens).
# Mudanças a partir da versão 1.0
A partir da V1.0 (17/07/2021), as seguintes alterações foram feitas:
* O algoritmo para calcular a distribuição de energia foi alterado. Isso torna os sistemas de armazenamento de energia mais importantes. Eles compensam as flutuações, o que é importante em redes maiores com vários geradores.
* Por esse motivo, o TA2 recebeu seu próprio sistema de armazenamento de energia.
* Os blocos de bateria do TA3 também servem como armazenamento de energia. Sua funcionalidade foi adaptada de acordo.
* O sistema de armazenamento do TA4 foi revisado. O permutador de calor recebeu um novo número porque a funcionalidade foi movida do bloco inferior para o bloco central. Se eles estiverem sendo controlados remotamente, o número do nó deve ser adaptado. Os geradores não têm mais um menu próprio, mas são ligados/desligados apenas através do permutador de calor. O permutador de calor e o gerador agora devem estar conectados à mesma rede!
* Vários sistemas de energia podem agora ser acoplados via blocos transformadores TA4.
* Um novo bloco medidor de eletricidade TA4 para sub-redes também foi adicionado.
* Pelo menos um bloco de bateria ou um sistema de armazenamento em cada rede.
## Dicas sobre a troca
Muitos outros blocos receberam alterações menores. Portanto, é possível que máquinas ou sistemas não reiniciem imediatamente após a troca. Em caso de falhas, as seguintes dicas ajudarão:
* Desligue e ligue as máquinas novamente.
* Remova um bloco de cabo de energia e coloque-o de volta no lugar.
* Remova completamente o bloco e coloque-o de volta no lugar.
# Minérios e Minerais
Techage adiciona novos itens ao jogo:
* Meridium - uma liga para a produção de ferramentas luminosas no TA1
* Usmium - um minério que é extraído no TA2 e necessário para o TA3
* Baborium - um metal necessário para receitas no TA3
* Petróleo - necessário no TA3
* Bauxita - um minério de alumínio necessário no TA4 para produzir alumínio
* Basalto - surge quando água e lava se encontram
## Meridium
O Meridium é uma liga de aço e cristais de mesecons. Lingotes de Meridium podem ser feitos com a caldeira a carvão a partir de aço e cristais de mesecons. O Meridium brilha no escuro. Ferramentas feitas de Meridium também emitem luz e são, portanto, muito úteis na mineração subterrânea.
[meridium|image]
## Usmium
O Usmium ocorre apenas como pepitas e só pode ser obtido lavando cascalho com o sistema de lavagem de cascalho TA2/TA3.
[usmium|image]
## Baborium
O Baborium só pode ser obtido através da mineração subterrânea. Essa substância só pode ser encontrada a uma profundidade de -250 a -340 metros.
O Baborium só pode ser derretido na Fornalha Industrial TA3.
[baborium|image]
## Petróleo
O Petróleo só pode ser encontrado com a ajuda do Explorer e extraído com a ajuda de máquinas apropriadas do TA3. Veja TA3.
[oil|image]
## Bauxita
A Bauxita é extraída apenas na mineração subterrânea. A Bauxita só é encontrada na pedra a uma altura entre -50 e -500 metros.
É necessária para a produção de alumínio, que é principalmente usada no TA4.
[bauxite|image]
## Basalto
O Basalto só é criado quando lava e água se encontram.
A melhor coisa a fazer é montar um sistema onde uma fonte de lava e uma fonte de água se encontram.
O Basalto é formado onde ambos os líquidos se encontram.
Você pode construir um gerador automático de basalto com o Sign Bot.
[basalt|image]
## History
- 28.09.2019: Solar system added
- 05.10.2019: Data on the solar system and description of the inverter and the power terminal changed
- 18.11.2019: Chapter for ores, reactor, aluminum, silo, bauxite, furnace heating, gravel washing system added
- 22.02.2020: corrections and chapters on the update
- 29.02.2020: ICTA controller added and further corrections
- 14.03.2020 Lua controller added and further corrections
- 22.03.2020 More TA4 blocks added

View File

@ -0,0 +1,119 @@
# TA1: Idade do Ferro
TA1 trata da extração de minérios suficientes e da produção de carvão com ferramentas e equipamentos simples, para que as máquinas TA2 possam ser fabricadas e operadas.
É claro que, para uma Idade do Ferro, deve haver ferro e não apenas aço, como em "Minetest Game". Como resultado, algumas receitas foram alteradas para que o ferro precise ser produzido primeiro e, posteriormente, o aço.
A durabilidade das ferramentas é baseada nas eras e, portanto, não corresponde ao jogo original do Minetest.
A durabilidade/dureza de um machado, por exemplo:
* Bronze: 20
* Aço: 30
[techage_ta1|image]
## Pilha de Carvão (queimador de carvão)
Você precisa da Pilha de Carvão para fazer carvão. O carvão é necessário para a fundição, mas também, por exemplo, em TA2 para a máquina a vapor.
Para o queimador de carvão, você precisa de:
* Um bloco de acendedor (`techage:lighter`)
* 26 blocos de madeira empilhados para formar um monte de madeira. O tipo de madeira é irrelevante.
* Terra para cobrir o monte de madeira
* Pedra lascada e Ferro (nome técnico: `fire:flint_and_steel`) para acender o bloco de acendedor
Instruções de construção (veja também o plano):
* Construa uma área de 5x5 de terra
* Coloque 7 blocos de madeira ao redor do acendedor, mas deixe um buraco para o acendedor
* Construa mais 2 camadas de madeira em cima, formando um cubo de madeira 3x3x3
* Cubra tudo com uma camada de terra formando um cubo de 5x5x5, mas mantenha o buraco para o acendedor aberto
* Acenda utilizando o isqueiro e feche imediatamente o buraco com um bloco de madeira e terra
* Se você fez tudo corretamente, o queimador de carvão começará a soltar fumaça após alguns segundos
* Só abra o queimador de carvão quando a fumaça tiver desaparecido (aproximadamente 20 minutos)
* Então você pode remover os 9 blocos de carvão e reabastecer a Pilha de Carvão.
[coalpile|plan]
## Forno de Fundição
Você precisa do forno de fundição, por exemplo, para fundir ferro e outros minérios no Vaso de fundição(cadinho). Existem receitas diferentes que requerem diferentes temperaturas. Quanto mais alto a torre de fusão, mais quente é a chama. Uma altura de 11 blocos acima da placa base é para todas as receitas, mas um queimador com essa altura também requer mais carvão.
Instruções de construção (veja também o plano):
* Construa uma torre de pedregulho (cobble) com uma base de 3x3 (7-11 blocos de altura)
* Deixe um buraco aberto de um lado na parte inferior
* Coloque um acendedor nele
* Encha a torre até a borda com carvão despejando o carvão no buraco de cima para baixo
* Acenda o acendedor através do buraco
* Coloque o Vaso de fundição(cadinho) no topo da torre diretamente na chama, um bloco acima da borda da torre
* Para parar o queimador, feche temporariamente o buraco com um bloco de terra, por exemplo.
* O Vaso de fundição(cadinho) tem seu próprio menu de receitas e um inventário onde você precisa colocar os minérios.
[coalburner|plan]
## Moinho d'Água
O moinho d'água pode ser usado para moer trigo e outros grãos para fazer farinha e depois assá-los no forno para fazer pão.
O moinho é alimentado por energia hidráulica. Para isso, um curso de água deve ser conduzido até a roda do moinho através de um canal.
O fluxo de água e, portanto, a roda do moinho, podem ser controlados por meio de uma comporta. A comporta é composta pelo bloqueio de comporta e pela alavanca de comporta.
A imagem à direita (clique em "Plano") mostra a estrutura do moinho d'água.
[watermill1|plan]
### Moinho d'Água TA1
O moinho d'água pode ser usado para moer trigo e outros grãos para fazer farinha e depois assá-los no forno para fazer pão. O moinho deve ser conectado à roda do moinho com um eixo TA1. A potência da roda do moinho é apenas suficiente para um moinho.
O moinho pode ser automatizado com a ajuda de um Funil(Minecart Hopper), para que a farinha, por exemplo, seja transportada diretamente do moinho para um forno para assar pão.
[watermill2|plan]
### Comporta TA1
A válvula de comporta deve ser colocada diretamente ao lado de um lago ou em um riacho na mesma altura que a superfície da água.
Quando a comporta é aberta, a água flui através do canal. Essa água deve ser conduzida até a roda do moinho, onde movimenta o moinho.
[ta1_sluice|image]
### Alavanca de Comporta TA1
A alavanca de comporta TA1 deve ser colocada na comporta. A comporta pode ser aberta com a ajuda da alavanca de comporta (clique com o botão direito).
[ta1_sluice_handle|image]
### Placa de Madeira de Maçã TA1
Podem ser usados bloco de diferentes tipos de madeira para construir o canal do curso d'água. No entanto, qualquer outro material também pode ser usado.
[ta1_board1|image]
### Placa de Curso d'Água de Maçã TA1
Podem ser utilizados blocos em diferentes tipos de madeira para construir o canal do curso d'água. Este bloco é especialmente adequado em conexão com postes da cerca de madeira para construir um suporte do canal.
[ta1_board2|image]
# Minérios e Ferramentas
O TA1 possui suas próprias ferramentas, como martelo e peneira de cascalho, mas o Funil(Minecart Hopper) também pode ser utilizado.
## Martelo
O martelo TA1 pode ser utilizado para bater/escavar pedra em uma mina, mas também para quebrar pedregulho(cobble) em cascalho(gravel). O martelo está disponível em diferentes versões, cada uma com propriedades distintas: bronze, aço, latão e diamante.
## Peneira de Cascalho(Sieve)
Minérios podem ser peneirados do cascalho com a peneira de cascalho. Para fazer isso, clique na peneira com o cascalho. O cascalho peneirado e os minérios caem abaixo.
Para não ficar horas na peneira, é possível automatizar o processo com o Funil(Minecart Hopper).
## Funil (Minecart Hopper)
O funil do mod "Minecart Hopper" é utilizado principalmente para carregar e descarregar carrinhos de mineração. Ele suga itens de cima e os passa para a direita. Portanto, ao posicionar o funil, preste atenção na direção de dispensa.
O funil também pode puxar itens de baús, desde que a caixa esteja ao lado ou em cima do funil.
O funil também pode colocar itens em baús se a caixa estiver ao lado do funil.
## Peneirando sete cascalhos com Funil
Com a ajuda de dois baús, dois funis e uma peneira de cascalho, o processo de peneiração pode ser automatizado. O plano à direita mostra a estrutura.
Certifique-se de que os baús são protegidos, caso contrário, alguém pode roubar os minérios valiosos do baú abaixo.
Meridium
O TA1 possui sua própria liga metálica, o Meridium. Lingotes de meridium podem ser feitos com a caldeira a carvão, utilizando aço e cristais de mesecons. O meridium brilha no escuro. Ferramentas feitas de meridium também emitem luz, sendo, portanto, muito úteis na mineração subterrânea.

View File

@ -0,0 +1,284 @@
# TA2: Era a Vapor
TA2 trata-se de construir e operar as primeiras máquinas para processamento de minérios. Algumas máquinas precisam ser acionadas por eixos de transmissão. Para fazer isso, você precisa construir uma máquina a vapor e aquecê-la com carvão ou carvão vegetal.
No TA2, há também um lavador de cascalho que pode ser usado para lavar minérios raros, como pepitas de Usmium. Você precisará dessas pepitas posteriormente para receitas adicionais.
[techage_ta2|image]
## Máquina a Vapor
A máquina a vapor é composta por vários blocos e deve ser montada conforme mostrado no plano à direita. São necessários os blocos da Caixa de Fogo(Firebox) TA2, parte superior da Caldeira(Boiler) TA2, parte inferior da Caldeira(Boiler) TA2, Cilindro(Cylinder) TA2, Volante(Flywheel) TA2 e Tubos de Vapor(steam piper) TA2.
Além disso, são necessários Eixos de Transmissão(drive axles) e blocos de Engrenagem(gear) para mudança de direção. O Volante deve ser conectado a todas as máquinas que precisam ser acionadas pelos Eixos de Transmissão.
Sempre preste atenção ao alinhamento de todos os blocos ao colocá-los:
- Cilindro à esquerda, volante à direita
- Conectar os tubos de vapor onde há um furo correspondente
- Eixo de transmissão no volante apenas à direita
- Em todas as máquinas, os eixos de transmissão podem ser conectados em todos os lados que não estejam ocupados por outras funções, como os furos de ENTRADA(IN) e SAÍDA(OUTPUT) no Moedor(grinder) e na Peneira(sieve).
A Caldeira deve ser preenchida com água. Preencha até 10 baldes de água na caldeira.
A Caixa de fogo deve ser preenchida com carvão ou carvão vegetal.
Quando a água estiver quente (indicador de temperatura no topo), a máquina a vapor pode ser iniciada no Volante.
A máquina a vapor tem uma capacidade de 25ku, podendo acionar várias máquinas ao mesmo tempo.
[steamengine|plan]
### Caixa de Fogo(Firebox) TA2
Parte da máquina a vapor.
A Caixa de fogo deve ser preenchida com carvão ou carvão vegetal. O tempo de queima depende da potência exigida pela máquina a vapor. O carvão queima por 32s e o carvão vegetal por 96s em carga máxima.
[ta2_firebox|image]
### TA2 Caldeira(Boiler)
Parte da máquina a vapor. Deve ser preenchida com água. Isso é feito clicando na caldeira com um balde de água. Quando não há mais água ou a temperatura cai muito, a máquina a vapor desliga. Com a máquina a vapor, parte da água é perdida como vapor a cada curso do pistão, então a água deve ser reabastecida regularmente.
[ta2_boiler|image]
### TA2 Cilindro(Cylinder)
Parte da máquina a vapor.
[ta2_cylinder|image]
### TA2 Volante(Flywheel)
Parte motora da máquina a vapor. O Volante deve ser conectado às máquinas por meio de eixos de transmissão.
[ta2_flywheel|image]
### TA2 Tubos de Vapor(Steam pipes)
Parte da máquina a vapor. A caldeira deve ser conectada ao cilindro por meio dos Tubos de vapor. O tubo de vapor não tem ramificações, o comprimento máximo é 12 m (blocos).
[ta2_steampipe|image]
### TA2 Eixo de Transmissão(Drive axle) TA2 / Caixa de Engrenagem(Gearbox)
Os Eixos de transmissão são usados para transmitir energia da máquina a vapor para outras máquinas. O comprimento máximo de um eixo de transmissão é 10 blocos. Com as Caixas de Engrenagem TA2, é possível vencer distâncias maiores, e também realizar ramificações e mudanças de direção.
[ta2_driveaxle|image]
### TA2 Gerador de Energia
O Gerador de Energia TA2 é necessário para operar lâmpadas ou outros consumidores de energia em uma Máquina a vapor. O Gerador de Energia TA2 deve ser conectado aos eixos de transmissão de um lado e, em seguida, fornece eletricidade do outro lado.
Se o Gerador de Energia não receber energia suficiente, ele entra em estado de erro e deve ser reativado com um clique direito.
O Gerador de Energia consome no máximo 25ku de potência do eixo e fornece no máximo 24ku como eletricidade do outro lado. Portanto, ele consome um ku para a conversão.
[ta2_generator|image]
## TA2 Armazenamento de Energia
Para sistemas maiores com várias máquinas a vapor ou muitas máquinas acionadas, é recomendado um sistema de armazenamento de energia. O armazenamento de energia no TA2 funciona com energia potencial. Para isso, o peso (pedras, cascalho, areia) é puxado para cima em um baú com a ajuda de um guincho. Se houver excesso de energia na rede de eixos, o baú é puxado para cima. Se mais energia for necessária a curto prazo do que a máquina a vapor pode fornecer, o armazenamento de energia libera a energia armazenada novamente e o baú de pesos desce novamente.
O armazenamento de energia é composto por vários blocos e deve ser montado conforme mostrado no plano à direita.
Para alcançar a capacidade máxima de armazenamento, o baú deve ser completamente preenchido com pesos e o mastro, incluindo as duas caixas de engrenagens, deve ter 12 blocos de altura. Estruturas menores também são possíveis.
[ta2_storage|plan]
### TA2 Guincho
O guincho deve ser conectado a uma caixa de engrenagens e pode absorver energia excessiva e assim puxar um baú de pesos para cima.
Ao montar o guincho, certifique-se de que a seta no topo do bloco aponte para a caixa de engrenagens.
O comprimento máximo da corda é 10 blocos.
[ta2_winch|image]
### TA2 Baú de Pesos
Este baú deve ser colocado sob o guincho com uma distância de até 10 blocos e preenchido com pedras, cascalho ou areia. Se o peso mínimo de uma pilha (99+ itens)
### TA2 Embreagem
Com a embreagem, eixos e máquinas podem ser separados do armazenamento de energia. Isso significa que os eixos após a embreagem param e sistemas de máquinas podem ser reconstruídos. Ao montar a embreagem, certifique-se de que a seta na parte superior do bloco aponta para o sistema de armazenamento de energia.
[techage:ta2_clutch_off|image]
## Empurrar e classificar itens
Para transportar objetos de uma estação de processamento para a próxima, são usados pushers e tubos. Veja o plano.
[itemtransport|plan]
### Tubo TechAge
Duas máquinas podem ser conectadas com a ajuda de um pusher e um tubo. Tubos não têm ramificações. O comprimento máximo é 200m (blocos).
Alternativamente, os tubos podem ser colocados usando a tecla Shift. Isso permite, por exemplo, que tubos sejam colocados em paralelo sem que eles se conectem acidentalmente.
A capacidade de transporte de um tubo é ilimitada e é limitada apenas pelo pusher.
[tube|image]
### Tubo Concentrador
Vários tubos podem ser combinados em um único tubo via concentrador. A direção na qual todos os itens são passados é marcada com uma seta.
[concentrator|image]
### TA2 Pusher
Um pusher(empurrador) é capaz de puxar itens de caixas ou máquinas e empurrá-los para outras caixas ou máquinas. Em outras palavras, deve haver um e apenas um pusher entre dois blocos com inventário. Múltiplos pushers em sequência não são possíveis.
No entanto, na direção oposta, um pusher é permeável a itens, de modo que uma caixa pode ser preenchida via tubo e também ensinada.
Um pusher entra no estado "standby" se não tiver itens para empurrar. Se a saída estiver bloqueada ou o inventário do destinatário estiver cheio, o pusher entra no estado "bloqueado". O pusher automaticamente sai de ambos os estados após alguns segundos se a situação mudar.
A capacidade de processamento de um pusher TA2 é de 2 itens a cada 2 s.
[ta2_pusher|image]
### TA2 Distributor(Distribuidor)
O distribuidor é capaz de transportar os itens de seu inventário ordenados em até quatro direções. Para fazer isso, o distribuidor deve ser configurado conforme necessário.
O distribuidor possui um menu com 4 filtros com cores diferentes, correspondendo às 4 saídas. Se uma saída for usada, o filtro correspondente deve ser ativado via caixa de seleção "ligado". Todos os itens configurados para este filtro são enviados através da saída designada. Se um filtro for ativado sem que itens sejam configurados, estamos falando de uma saída "não configurada", aberta.
**Atenção: O distribuidor também é um pusher em suas saídas. Portanto, nunca puxe itens do distribuidor com um pusher!**
Existem dois modos de operação para uma saída não configurada:
1) Enviar todos os itens que não podem ser enviados para nenhuma outra saída, mesmo que estejam bloqueados.
2) Enviar apenas os itens que não foram configurados para nenhum outro filtro.
No primeiro caso, todos os itens são sempre encaminhados e o distribuidor não fica cheio. No segundo caso, os itens são retidos e o distribuidor pode ficar cheio e, em seguida, bloquear.
O modo de operação pode ser definido usando a caixa de seleção "modo de bloqueio".
A capacidade de processamento de um distribuidor TA2 é de 4 itens a cada 2s, onde o distribuidor tenta distribuir os 4 itens para as saídas abertas.
Se o mesmo item for configurado várias vezes em um filtro, a proporção de distribuição a longo prazo será influenciada de acordo.
Observe que a distribuição é um processo probabilístico. Isso significa que as proporções de distribuição não serão correspondidas exatamente, mas apenas a longo prazo.
O tamanho máximo de pilha nos filtros é 12; no total, não mais que 36 itens podem ser configurados.
[ta2_distributor|image]
## Gravel washer(Lavador de cascalho)
O lavador de cascalho é uma máquina mais complexa com o objetivo de lavar pepitas de Usmium a partir de cascalho peneirado. Um enxaguatório TA2 com eixo de acionamento, um funil, um baú e água corrente são necessários para a instalação.
Estrutura da esquerda para a direita (veja também o plano):
- Um bloco de terra, sobre ele a fonte de água, cercada em 3 lados, por exemplo, por blocos de vidro
- Ao lado, o enxaguatório de cascalho, se necessário com conexões de tubulação para a entrega e remoção de cascalho
- Em seguida, o funil com baú
O conjunto é cercado por mais blocos de vidro, para que a água flua sobre o enxaguatório de cascalho e o funil, e as pepitas lavadas possam ser coletadas novamente pelo funil.
[gravelrinser|plan]
### TA2 Gravel Rinser(Enxaguatório de cascalho)
O lavador de cascalho é capaz de enxaguar os minérios de Usmium e cobre do cascalho que já foi peneirado, desde que seja lavado com água.
Se o Enxaguatório de Cascalho funciona corretamente, pode ser testado com pedaços de madeira, se estes forem colocados no inventário do Enxaguatório de Cascalho. Eles devem ser enxaguados individualmente e recolhidos pelo funil.
A capacidade de processamento é de um item de cascalho a cada 2s. O lavador de cascalho precisa de 3 ku de energia.
[ta2_rinser|image]
## Escavar pedra, moer e peneirar
Esmagar, moer e peneirar pedregulhos é usado para extrair minérios. O cascalho peneirado também pode ser usado para outros fins. A pedreira, moedor e peneira devem ser acionados e, portanto, instalados perto de uma máquina a vapor.
[ta2_grinder|image]
### TA2 Quarry(Pedreira)
A pedreira é usada para remover pedras e outros materiais do subsolo. A pedreira escava um buraco de 5x5 blocos. A profundidade é ajustável.
A capacidade de processamento é de um bloco a cada 4s. A pedreira precisa de 10 ku de energia. A profundidade máxima é de 20 metros. Para maiores profundidades, consulte TA3 / TA4.
[ta2_quarry|image]
### TA2 Grinder(Moedor)
O moedor é capaz de moer várias rochas, mas também madeira e outros itens.
A capacidade de processamento é de um item a cada 4s. O moedor precisa de 4 ku de energia.
[ta2_grinder|image]
### TA2 Gravel Sieve(Peneira de cascalho)
A peneira de cascalho é capaz de peneirar cascalho para extrair minérios. O resultado é parcialmente "sieved gravel", que não pode ser peneirado novamente.
A capacidade de processamento é de um item a cada 4s. A peneira de cascalho requer 3 ku de energia.
[ta2_gravelsieve|image]
## Produzindo Itens
As máquinas TA2 podem não apenas extrair minérios, mas também produzir objetos.
### TA2 Autocrafter
O autocrafter é usado para a produção automática de bens. Tudo o que o jogador pode produzir via "Crafting Grid" também pode ser feito pelo autocrafter. Para isso, a receita deve ser inserida no menu do autocrafter e os ingredientes necessários adicionados.
Ingredientes e produtos fabricados podem ser transportados para dentro e para fora do bloco por meio de tubos e pushers.
A capacidade de processamento é de um item a cada 4s. O autocrafter requer 4 ku de energia.
[ta2_autocrafter|image]
### TA2 Electronic Fab
O electronic fab é uma máquina especial e só pode ser usada para a produção de tubos de vácuo. Tubos de vácuo são necessários para máquinas e blocos TA3.
A capacidade de processamento é de um tubo de vácuo a cada 6s. O electronic fab requer 8 ku de energia.
[ta2_electronicfab|image]
## Outros Blocos
### TA2 Liquid Sampler
Algumas receitas requerem água. Para que essas receitas também possam ser processadas automaticamente com o autocrafter, água deve ser fornecida em baldes. Isso é feito usando o liquid sampler. Ele precisa de baldes vazios e deve ser colocado na água.
A capacidade de processamento é de um balde de água a cada 8s. O liquid sampler requer 3 ku de energia.
[ta2_liquidsampler|image]
### TA2 Protected Chest
O protected chest só pode ser usado por jogadores que têm permissão de construção neste local, ou seja, que têm direitos de proteção. Não importa quem coloca o baú.
[ta2_chest|image]
### Techage Forceload Block
O Minetest divide o mapa em chamados map blocks. Estes são cubos com uma aresta de 16x16x16 blocos. Um map block é sempre completamente carregado pelo servidor, mas apenas os blocos ao redor de um jogador são carregados (aproximadamente 2-3 blocos em todas as direções). Na direção de visão do jogador, também existem mais map blocks. Apenas esta parte do mundo é ativa e apenas aqui as plantas e árvores crescem ou as máquinas funcionam.
Com um bloco forceload, você pode forçar o map block em que o bloco forceload está localizado a permanecer carregado enquanto você estiver no servidor. Quando todos os seus campos e máquinas estão cobertos com blocos Forceload, tudo está sempre em execução.
Os map blocks com suas coordenadas são predefinidos, por exemplo, (0,0,0) a (15,15,15), ou (16,16,16) a (31,31,31).
Você pode mover um bloco forceload dentro de um map block como quiser, a posição do map block permanece inalterada.
[ta2_forceload|image]

View File

@ -0,0 +1,890 @@
# TA3: Era do Petróleo
Na TA3, é importante substituir as máquinas a vapor por máquinas mais potentes movidas a eletricidade.
Para fazer isso, é necessário construir usinas termelétricas a carvão e geradores. Logo você perceberá que suas necessidades de eletricidade só podem ser atendidas com usinas movidas a óleo. Portanto, você parte em busca de petróleo. Torres de perfuração e bombas de petróleo ajudam a extrair o óleo. Ferrovias são usadas para transportar o óleo até as usinas.
A era industrial está em seu auge.
[techage_ta3|image]
## Usina Termelétrica a Carvão / Usina Termelétrica a Óleo
A usina termelétrica a carvão é composta por vários blocos e deve ser montada conforme mostrado no plano à direita. São necessários os blocos Fornalha(Firebox) TA3, Topo da Caldeira TA3, Base da Caldeira TA3, Turbina TA3, Gerador TA3 e Resfriador TA3.
A caldeira deve ser preenchida com água. Encha até 10 baldes de água na caldeira.
A caixa de fogo deve ser preenchida com carvão ou carvão vegetal.
Quando a água estiver quente, o gerador pode ser iniciado.
Alternativamente, a usina pode ser equipada com um queimador de óleo e operada com óleo. O óleo pode ser reabastecido usando uma bomba e um tubo de óleo.
A usina fornece uma saída de 80 ku.
[coalpowerstation|plan]
### TA3 Fornalha(firebox) da estação de energia
Parte da usina de energia.
A fornalha deve ser preenchida com carvão ou carvão vegetal. O tempo de queima depende da potência solicitada pela usina. Carvão queima por 20s e carvão vegetal por 60s em carga total. Proporcionalmente mais tempo em carga parcial (50% de carga = dobro do tempo).
[ta3_firebox|image]
### TA3 Queimador de Óleo da Usina de Energia
Parte da usina de energia.
O queimador de óleo pode ser preenchido com óleo cru, óleo combustível, nafta ou gasolina. O tempo de queima depende da potência solicitada pela usina. Em carga total, óleo cru queima por 15s, óleo combustível por 20s, nafta por 22s e gasolina por 25s.
Proporcionalmente mais tempo em carga parcial (50% de carga = dobro do tempo).
O queimador de óleo pode armazenar apenas 50 unidades de combustível. Recomenda-se, portanto, um tanque de óleo adicional e uma bomba de óleo.
[ta3_oilbox|image]
### TA3 Base / Topo da Caldeira
Parte da usina de energia. Deve ser preenchida com água. Se não houver mais água ou a temperatura diminuir muito, a usina desliga.
O consumo de água da caldeira TA3 é muito menor do que o da máquina a vapor devido ao circuito de vapor fechado.
Com a máquina a vapor, parte da água é perdida como vapor a cada curso do pistão.
[ta3_boiler|image]
### TA3 Turbina
A turbina faz parte da usina de energia. Deve ser colocada ao lado do gerador e conectada à caldeira e ao resfriador por meio de tubos de vapor, conforme mostrado no plano.
[ta3_turbine|image]
### TA3 Gerador
O gerador é usado para gerar eletricidade. Deve ser conectado às máquinas por meio de cabos de energia e caixas de junção.
[ta3_generator|image]
### TA3 Cooler
Usado para resfriar o vapor quente da turbina. Deve ser conectado à caldeira e à turbina por meio de tubos de vapor, conforme mostrado no plano.
[ta3_cooler|image]
## Corrente elétrica
Em TA3 (e TA4), as máquinas são alimentadas por eletricidade. Para isso, máquinas, sistemas de armazenamento e geradores devem ser conectados com cabos de energia.
TA3 possui 2 tipos de cabos de energia:
- Cabos isolados (cabos de energia TA) para instalação local no chão ou em edifícios. Esses cabos podem ser ocultos na parede ou no chão (podem ser "revestidos" com a colher de pedreiro).
- Linhas aéreas (linha de energia TA) para cabeamento externo em longas distâncias. Esses cabos são protegidos e não podem ser removidos por outros jogadores.
Vários consumidores, sistemas de armazenamento e geradores podem ser operados juntos em uma rede de energia. Redes podem ser configuradas com a ajuda das caixas de junção.
Se houver pouca eletricidade fornecida, os consumidores ficam sem energia.
Nesse contexto, também é importante entender a funcionalidade dos blocos de Forceload, porque os geradores, por exemplo, só fornecem eletricidade quando o bloco de mapa correspondente está carregado. Isso pode ser imposto com um bloco de Forceload.
Em TA4, também existe um cabo para o sistema solar.
[ta3_powerswitch|image]
### Importância dos sistemas de armazenamento
Os sistemas de armazenamento na rede elétrica desempenham duas funções:
- Lidar com picos de demanda: Todos os geradores sempre fornecem exatamente a quantidade de energia necessária. No entanto, se os consumidores forem ligados/desligados ou houver flutuações na demanda por outros motivos, os consumidores podem falhar por um curto período. Para evitar isso, deve sempre haver pelo menos um bloco de bateria em cada rede. Isso serve como um buffer e compensa essas flutuações na faixa de segundos.
- Armazenar energia regenerativa: Solar e eólica não estão disponíveis 24 horas por dia. Para que o fornecimento de energia não falhe quando não há produção de eletricidade, um ou mais sistemas de armazenamento devem ser instalados na rede. Alternativamente, as lacunas também podem ser preenchidas com eletricidade de óleo/carvão.
Um sistema de armazenamento indica sua capacidade em kud, ou seja, ku por dia. Por exemplo, um sistema de armazenamento com 100 kud fornece 100 ku por um dia de jogo, ou 10 ku por 10 dias de jogo.
Todas as fontes de energia TA3/TA4 têm características de carregamento ajustáveis. Por padrão, isso é configurado para "80% - 100%". Isso significa que, quando o sistema de armazenamento estiver 80% cheio, a saída é reduzida cada vez mais até desligar completamente em 100%. Se eletricidade for necessária na rede, nunca se atingirá 100%, pois a potência do gerador em algum momento caiu para a demanda de eletricidade na rede e o sistema de armazenamento não está mais sendo carregado, mas apenas os consumidores estão sendo atendidos.
Isso tem várias vantagens:
- As características de carregamento são ajustáveis. Isso significa, por exemplo, que as fontes de energia de óleo/carvão podem ser reduzidas em 60% e as fontes de energia renovável apenas em 80%. Isso significa que o óleo/carvão só é queimado se não houver energia renovável suficiente disponível.
- Várias fontes de energia podem ser operadas em paralelo e são carregadas quase uniformemente, porque todas as fontes de energia trabalham, por exemplo, até 80% da capacidade de carga do sistema de armazenamento em sua capacidade total e depois reduzem sua capacidade ao mesmo tempo.
- Todos os sistemas de armazenamento em uma rede formam um grande buffer. A capacidade de carga e o nível de preenchimento de todo o sistema de armazenamento podem sempre ser lidos em percentagem em todos os sistemas de armazenamento, mas também no terminal de eletricidade.
[power_reduction|image]
### TA3 Cabo Elétrico
Para fiação local no chão ou em construções.
Ramos podem ser realizados usando caixas de junção. O comprimento máximo do cabo entre máquinas ou caixas de junção é de 1000 m. Um máximo de 1000 nós pode ser conectado em uma rede elétrica. Todos os blocos com conexão elétrica, incluindo caixas de junção, contam como nós.
Como os cabos elétricos não são automaticamente protegidos, as linhas aéreas (TA power line) são recomendadas para distâncias mais longas.
Os cabos elétricos podem ser rebocados com a colher de alvenaria para que fiquem ocultos na parede ou no chão. Todos os blocos de pedra, argila e outros blocos sem "inteligência" podem ser usados como material de reboco. A sujeira não funciona porque pode ser convertida em grama ou algo semelhante, o que destruiria a linha.
Para rebocar, o cabo deve ser clicado com a colher de alvenaria. O material com o qual o cabo deve ser rebocado deve estar no canto mais à esquerda do inventário do jogador.
Os cabos podem ser tornados visíveis novamente clicando no bloco com a colher de alvenaria.
Além dos cabos, a caixa de junção TA e a caixa de interruptores de energia TA também podem ser rebocadas.
[ta3_powercable|image]
### TA Caixa de Junção Elétrica
Com a caixa de junção, a eletricidade pode ser distribuída em até 6 direções. Caixas de junção também podem ser rebocadas (ocultas) com uma colher de alvenaria e tornadas visíveis novamente.
[ta3_powerjunction|image]
### TA Linha de Energia
Com a linha de energia TA e os postes de eletricidade, é possível realizar linhas aéreas razoavelmente realistas. As cabeças dos postes também servem para proteger a linha de energia (proteção). Um poste deve ser colocado a cada 16 m ou menos. A proteção se aplica apenas à linha de energia e aos postes; no entanto, todos os outros blocos nesta área não estão protegidos.
[ta3_powerline|image]
### TA Poste de Energia
Usado para construir postes de eletricidade. É protegido contra destruição pela cabeça do poste de eletricidade e só pode ser removido pelo proprietário.
[ta3_powerpole|image]
### TA Topo do Poste de Energia
Possui até quatro braços e permite assim a distribuição de eletricidade em até 6 direções.
A cabeça do poste de eletricidade protege as linhas de energia e os postes dentro de um raio de 8 m.
[ta3_powerpole4|image]
### TA Topo do Poste de Energia 2
Esta cabeça de poste de eletricidade tem dois braços fixos e é usada para as linhas aéreas. No entanto, também pode transmitir corrente para baixo e para cima.
A cabeça do poste de eletricidade protege as linhas de energia e os postes dentro de um raio de 8 m.
[ta3_powerpole2|image]
### TA Interruptor de Energia
O interruptor pode ser usado para ligar e desligar a energia. Para isso, o interruptor deve ser colocado em uma caixa de interruptor de energia. A caixa de interruptor de energia deve ser conectada ao cabo de energia em ambos os lados.
[ta3_powerswitch|image]
### TA Interruptor de Energia Pequeno
O interruptor pode ser usado para ligar e desligar a energia. Para isso, o interruptor deve ser colocado em uma caixa de interruptor de energia. A caixa de interruptor de energia deve ser conectada ao cabo de energia em ambos os lados.
[ta3_powerswitchsmall|image]
### TA Caixa de Interruptor de Energia
Veja o interruptor de energia TA.
[ta3_powerswitchbox|image]
### TA3 Pequeno Gerador de Energia
O pequeno gerador de energia funciona com gasolina e pode ser usado para consumidores pequenos com até 12 ku. A gasolina queima por 150s em carga total. Correspondentemente mais tempo em carga parcial (50% de carga = tempo duplo).
O gerador de energia só pode armazenar 50 unidades de gasolina. Portanto, é aconselhável um tanque adicional e uma bomba.
[ta3_tinygenerator|image]
### TA3 Bloco Acumulador
O bloco acumulador (bateria recarregável) é usado para armazenar energia excedente e fornece automaticamente energia em caso de queda de energia (se disponível).
Vários blocos de acumulador juntos formam um sistema de armazenamento de energia TA3. Cada bloco de acumulador possui um display para o estado de carga e para a carga armazenada.
Os valores para toda a rede são sempre exibidos aqui. A carga armazenada é exibida em "kud" ou "ku-dias" (análogo a kWh). Assim, 5 kud correspondem, por exemplo, a 5 ku para um dia de jogo (20 minutos) ou 1 ku para 5 dias de jogo.
Um bloco de acumulador tem 3,33 kud.
[ta3_akkublock|image]
### TA3 Terminal de Energia
O terminal de energia deve ser conectado à rede elétrica. Ele exibe dados da rede elétrica.
As informações mais importantes são exibidas na metade superior:
- potência do gerador atual/máxima
- consumo de energia atual de todos os consumidores
- corrente de carga atual dentro/fora do sistema de armazenamento
- Estado de carga atual do sistema de armazenamento em percentual
O número de blocos da rede é exibido na metade inferior.
Dados adicionais sobre os geradores e sistemas de armazenamento podem ser consultados através da guia "console".
[ta3_powerterminal|image]
### TA3 Motor Elétrico
O Motor Elétrico TA3 é necessário para operar as máquinas TA2 através da rede elétrica. O Motor Elétrico TA3 converte eletricidade em potência de eixo.
Se o motor elétrico não for alimentado com energia suficiente, ele entra em um estado de falha e deve ser reativado com um clique direito.
O motor elétrico consome no máximo 40 ku de eletricidade e fornece do outro lado no máximo 39 ku como potência de eixo. Portanto, ele consome um ku para a conversão.
[ta3_motor|image]
## TA3 Forno Industrial
O forno industrial TA3 serve como complemento aos fornos normais. Isso significa que todos os produtos podem ser fabricados com receitas de "cozimento", mesmo em um forno industrial. No entanto, também existem receitas especiais que só podem ser feitas em um forno industrial.
O forno industrial possui seu próprio menu para seleção de receitas. Dependendo dos produtos no inventário do forno industrial à esquerda, o produto de saída pode ser selecionado à direita.
O forno industrial requer eletricidade (para o impulsionador) e óleo combustível/gasolina para o queimador. O forno industrial deve ser montado conforme mostrado no plano à direita.
Veja também o aquecedor TA4.
[ta3_furnace|plan]
### TA3 Forno - Queimador de Óleo
Parte do forno industrial TA3.
O queimador de óleo pode ser operado com óleo bruto, óleo combustível, nafta ou gasolina. O tempo de queima é de 64 s para óleo bruto, 80 s para óleo combustível, 90 s para nafta e 100 s para gasolina.
O queimador de óleo pode armazenar apenas 50 unidades de combustível. Portanto, é aconselhável um tanque adicional e uma bomba.
[ta3_furnacefirebox|image]
### TA3 Forno - Parte Superior
Faz parte do forno industrial TA3. Consulte o forno industrial TA3.
[ta3_furnace|image]
### TA3 Reforço
Faz parte do forno industrial TA3. Consulte o forno industrial TA3.
[ta3_booster|image]
## Líquidos
Líquidos como água ou óleo só podem ser bombeados através de tubulações especiais e armazenados em tanques. Assim como com a água, existem recipientes (latas, barris) nos quais o líquido pode ser armazenado e transportado.
Também é possível conectar vários tanques usando as tubulações amarelas e conectores. No entanto, os tanques devem ter o mesmo conteúdo e sempre deve haver pelo menos um tubo amarelo entre o tanque, a bomba e o tubo distribuidor.
Por exemplo, não é possível conectar dois tanques diretamente a um tubo distribuidor.
O enchimento de líquidos é usado para transferir líquidos de recipientes para tanques. O plano mostra como latas ou barris com líquidos são empurrados para um enchimento de líquidos através de empurradores. O recipiente é esvaziado no enchimento de líquidos e o líquido é conduzido para baixo no tanque.
O enchimento de líquidos também pode ser colocado sob um tanque para esvaziar o tanque.
[ta3_tank|plan]
### TA3 Tanque
Líquidos podem ser armazenados em um tanque. Um tanque pode ser preenchido ou esvaziado usando uma bomba. Para fazer isso, a bomba deve ser conectada ao tanque por meio de um tubo (tubos amarelos).
Um tanque também pode ser preenchido ou esvaziado manualmente clicando no tanque com um recipiente de líquido cheio ou vazio (barril, galão). Deve-se observar que os barris só podem ser completamente preenchidos ou esvaziados. Se, por exemplo, houver menos de 10 unidades no tanque, esse restante deve ser removido com galões ou esvaziado com uma bomba.
Um tanque TA3 pode armazenar 1000 unidades ou 100 barris de líquido.
[ta3_tank|image]
### TA3 Bomba
A bomba pode ser usada para bombear líquidos de tanques ou recipientes para outros tanques ou recipientes. A direção da bomba (seta) deve ser observada. As linhas amarelas e os conectores também permitem organizar vários tanques em cada lado da bomba. No entanto, os tanques devem ter o mesmo conteúdo.
A bomba TA3 bombeia 4 unidades de líquido a cada dois segundos.
Observação 1: A bomba não deve ser colocada diretamente ao lado do tanque. Deve sempre haver pelo menos um pedaço de tubo amarelo entre eles.
[ta3_pump|image]
### TA Liquid Filler
O liquid filler é usado para transferir líquidos entre recipientes e tanques.
- Se o liquid filler for colocado sob um tanque e barris vazios forem colocados no liquid filler com um empurrador ou manualmente, o conteúdo do tanque é transferido para os barris e os barris podem ser removidos da saída
- Se o liquid filler for colocado em cima de um tanque e se recipientes cheios forem colocados no liquid filler com um empurrador ou manualmente, o conteúdo é transferido para o tanque e os recipientes vazios podem ser removidos no lado de saída
Deve-se observar que os barris só podem ser completamente cheios ou esvaziados. Se, por exemplo, houver menos de 10 unidades no tanque, este restante deve ser removido com recipientes ou bombeado vazio.
[ta3_filler|image]
### TA4 Tubos(pipe)
Os tubos amarelos são usados para a transmissão de gás e líquidos.
O comprimento máximo do tubo é 100m.
[ta3_pipe|image]
### TA3 Tubos de parede (entre-blocos)
Os blocos servem como aberturas de parede para os tubos, para que não fiquem buracos abertos.
[ta3_pipe_wall_entry|image]
### TA Válvula
Existe uma válvula para os tubos amarelos, que pode ser aberta e fechada com um clique do mouse.
A válvula também pode ser controlada por comandos ligar/desligar.
[ta3_valve|image]
## Produção de Óleo
Para alimentar seus geradores e fogões com óleo, você deve primeiro procurar óleo e construir uma torre de perfuração para extrair o óleo.
Para isso, são utilizados o explorador de óleo TA3, a caixa de perfuração de óleo TA3 e o macaco de bomba de óleo TA3.
[techage_ta3|image]
### TA3 Explorador de petróleo
Você pode procurar petróleo com o explorador de petróleo. Para fazer isso, coloque o bloco no chão e clique com o botão direito para iniciar a busca. O explorador de petróleo pode ser usado tanto acima quanto abaixo do solo em todas as profundidades.
A saída do chat mostra a profundidade até a qual o petróleo foi procurado e quanto petróleo foi encontrado.
Você pode clicar várias vezes no bloco para procurar petróleo em áreas mais profundas. Os campos de petróleo variam em tamanho de 4.000 a 20.000 itens.
Se a busca não der certo, você deve mover o bloco aproximadamente 16 m para frente.
O explorador de petróleo sempre procura petróleo em todo o bloco do mapa e abaixo, no qual foi colocado. Uma nova busca no mesmo bloco do mapa (campo 16x16) portanto, não faz sentido.
Se o petróleo for encontrado, a localização para a torre de perfuração é exibida. Você precisa erguer a torre de perfuração dentro da área mostrada, é melhor marcar o local com uma placa e proteger toda a área contra jogadores estrangeiros.
Não desista de procurar petróleo muito rapidamente. Se tiver azar, pode levar muito tempo para encontrar um poço de petróleo.
Também não faz sentido procurar em uma área que outro jogador já tenha procurado. A chance de encontrar petróleo é a mesma para todos os jogadores.
O explorador de petróleo pode ser sempre usado para procurar petróleo.
[ta3_oilexplorer|image]
### TA3 Caixa de perfuração de petróleo
A caixa de perfuração de petróleo deve ser colocada na posição indicada pelo explorador de petróleo. Perfurar petróleo em outro lugar não tem sentido.
Se o botão na caixa de perfuração de petróleo for clicado, a torre de perfuração será erguida acima da caixa. Isso leva alguns segundos.
A caixa de perfuração de petróleo tem 4 lados, em IN o tubo de perfuração deve ser entregue via pusher e em OUT o material de perfuração deve ser removido. A caixa de perfuração de petróleo deve ser alimentada com eletricidade por um dos outros dois lados.
A caixa de perfuração de petróleo perfura até o campo de petróleo (1 metro em 16 s) e requer 16 ku de eletricidade.
Depois que o campo de petróleo for alcançado, a torre de perfuração pode ser desmontada e a caixa removida.
[ta3_drillbox|image]
### TA3 Bomba de petróleo
A bomba de petróleo (pumpjack) deve ser colocada no lugar da caixa de perfuração de petróleo. A bomba de petróleo também requer eletricidade (16 ku) e fornece uma unidade de petróleo a cada 8 segundos. O petróleo deve ser coletado em um tanque. Para fazer isso, a bomba de petróleo deve ser conectada ao tanque por meio de tubos amarelos.
Depois que todo o petróleo for bombeado para fora, a bomba de petróleo também pode ser removida.
[ta3_pumpjack|image]
### TA3 Haste de perfuração
A haste de perfuração é necessária para perfurar. Tantos itens de haste de perfuração são necessários quanto a profundidade especificada para o campo de petróleo. A haste de perfuração é inútil após a perfuração, mas também não pode ser desmontada e permanece no solo. No entanto, há uma ferramenta para remover os blocos de haste de perfuração (-> Ferramentas -> TA3 Alicate de haste de perfuração(drill pipe pliers)).
[ta3_drillbit|image]
### Tanque de petróleo
O tanque de petróleo é a versão grande do tanque TA3 (ver líquidos -> Tanque TA3).
O tanque grande pode armazenar 4000 unidades de petróleo, mas também qualquer outro tipo de líquido.
[oiltank|image]
## Transporte de Petróleo
### Transporte de Petróleo por Vagões Tanque
Os vagões tanque podem ser usados para transportar petróleo do poço de petróleo para a usina de processamento de petróleo. Um vagão tanque pode ser preenchido ou esvaziado diretamente usando bombas. Em ambos os casos, os tubos amarelos devem ser conectados ao vagão tanque de cima.
Os seguintes passos são necessários:
- Coloque o vagão tanque na frente do bloco para-choque da ferrovia. O bloco para-choque ainda não deve estar programado com um tempo para que o vagão tanque não comece automaticamente.
- Conecte o vagão tanque à bomba usando tubos amarelos.
- Ligue a bomba.
- Programe o para-choque com um tempo (10 - 20s).
Essa sequência deve ser observada em ambos os lados (encher / esvaziar).
[tank_cart|image]
### Oil transportation with barrels over Minecarts
Canisters and barrels can be loaded into the Minecarts. To do this, the oil must first be transferred to barrels. The oil barrels can be pushed directly into the Minecart with a pusher and tubes (see map). The empty barrels, which come back from the unloading station by Minecart, can be unloaded using a hopper, which is placed under the rail at the stop.
It is not possible with the hopper to both **unload the empty barrels and load the full barrels at a stop**. The hopper immediately unloads the full barrels. It is therefore advisable to set up 2 stations on the loading and unloading side and then program the Minecart accordingly using a recording run.
The plan shows how the oil can be pumped into a tank and filled into barrels via a liquid filler and loaded into Minecarts.
For the Minecarts to start again automatically, the bumper blocks must be configured with the station name and waiting time. 5 s are sufficient for unloading. However, since the pushers always go into standby for several seconds when there is no Minecart, a time of 15 or more seconds must be entered for loading.
[ta3_loading|plan]
### Transporte de Petróleo com Barris por Minecarts
As latas e barris podem ser carregados nos Minecarts. Para fazer isso, o petróleo deve primeiro ser transferido para os barris. Os barris de petróleo podem ser empurrados diretamente para dentro do Minecart com um empurrador e tubos (veja o mapa). Os barris vazios, que retornam da estação de descarga por Minecart, podem ser descarregados usando um funil, que é colocado sob os trilhos na parada.
Não é possível com o funil **descarregar os barris vazios e carregar os barris cheios em uma parada**. O funil descarrega imediatamente os barris cheios. Portanto, é aconselhável configurar 2 estações no lado de carregamento e descarregamento e, em seguida, programar o Minecart de acordo com uma corrida de gravação.
O plano mostra como o petróleo pode ser bombeado para um tanque, preenchido em barris via um dispositivo de enchimento de líquidos e carregado em Minecarts.
Para que os Minecarts reiniciem automaticamente, os blocos para-choque devem ser configurados com o nome da estação e o tempo de espera. 5 segundos são suficientes para descarregar. No entanto, como os empurradores sempre entram em espera por vários segundos quando não há Minecart, um tempo de 15 segundos ou mais deve ser inserido para carregar.
[ta3_loading|plan]
### Carrinho-tanque
O carrinho-tanque é usado para transportar líquidos. Assim como os tanques, ele pode ser cheio com bombas ou esvaziado. Em ambos os casos, o tubo amarelo deve ser conectado ao caminhão-tanque de cima.
Cabem 200 unidades no caminhão-tanque.
[tank_cart|image]
### Carrinho-baú
O carrinho-baú é usado para transportar itens. Assim como os baús, ele pode ser cheio ou esvaziado usando um empurrador.
Cabem 4 pilhas no carrinho de baú.
[chest_cart|image]
## Processamento de Petróleo
O petróleo é uma mistura de substâncias e consiste em muitos componentes. O petróleo pode ser decomposto em seus principais componentes, como betume, óleo combustível, nafta, gasolina e gás propano, por meio de uma torre de destilação.
O processamento adicional para produtos finais ocorre no reator químico.
[techage_ta31|image]
### Torre de Destilação
A torre de destilação deve ser montada como no plano no canto superior direito.
O betume é drenado pelo bloco de base. A saída está na parte de trás do bloco de base (observe a direção da seta).
Os blocos "torre de destilação" com os números: 1, 2, 3, 2, 3, 2, 3, 4 são colocados sobre este bloco base.
Óleo combustível, nafta e gasolina são drenados das aberturas de baixo para cima. O gás propano é capturado no topo.
Todas as aberturas na torre devem ser conectadas a tanques.
O reboiler deve ser conectado ao bloco "torre de destilação 1".
O reboiler precisa de eletricidade (não mostrado no plano)!
[ta3_distiller|plan]
#### Refervedor(Reboiler)
O reboiler aquece o petróleo para aproximadamente 400 °C. Ele evapora em grande parte e é alimentado na torre de destilação para resfriamento.
O reboiler requer 14 unidades de eletricidade e produz uma unidade de betume, óleo combustível, nafta, gasolina e propano a cada 16s.
Para isso, o reboiler deve ser alimentado com petróleo por meio de uma bomba.
[reboiler|image]
## Blocos Lógicos / de Comutação
Além dos tubos para transporte de mercadorias, bem como os tubos de gás e energia, há também um nível de comunicação sem fio através do qual os blocos podem trocar dados entre si. Não é necessário desenhar linhas para isso, a conexão entre transmissor e receptor é feita apenas através do número do bloco.
**Info:** Um número de bloco é um número único gerado pelo Techage quando muitos blocos do Techage são colocados. O número do bloco é usado para endereçamento durante a comunicação entre controladores e máquinas Techage. Todos os blocos que podem participar dessa comunicação mostram o número do bloco como texto de informações se você fixar o bloco com o cursor do mouse.
Quais comandos um bloco suporta podem ser lidos e exibidos com a TechAge Info Tool (chave inglesa ou wrench).
Os comandos mais simples suportados por quase todos os blocos são:
- `on` - para ligar o bloco / máquina / lâmpada
- `off` - para desligar o bloco / máquina / lâmpada
Com a ajuda do Terminal TA3, esses comandos podem ser testados muito facilmente. Suponha que uma lâmpada de sinalização seja o número 123.
Então com:
cmd 123 on
a lâmpada pode ser ligada e com:
cmd 123 off
a lâmpada pode ser desligada novamente. Esses comandos devem ser inseridos no campo de entrada do terminal TA3.
Comandos como `on` e `off` são enviados ao destinatário sem que uma resposta seja enviada de volta. Portanto, esses comandos podem ser enviados para vários destinatários ao mesmo tempo, por exemplo, com um botão de pressão / interruptor, se vários números forem inseridos no campo de entrada.
Um comando como `state` solicita o status de um bloco. O bloco então envia seu status de volta. Esse tipo de comando confirmado só pode ser enviado para um destinatário de cada vez.
Esse comando também pode ser testado com o terminal TA3 em um empurrador, por exemplo:
cmd 123 state
As respostas possíveis do empurrador são:
- `running` -> Estou funcionando
- `stopped` -> desligado
- `standby` -> nada a fazer porque o inventário da fonte está vazio
- `blocked` -> não pode fazer nada porque o inventário de destino está cheio
Esse status e outras informações também são exibidos quando a chave inglesa(wrench) é clicada no bloco.
[ta3_logic|image]
### TA3 Botão / Interruptor
O botão/interruptor envia comandos `on` / `off` para os blocos que foram configurados através dos números.
O botão/interruptor pode ser configurado como um botão ou um interruptor. Se for configurado como um botão, o tempo entre os comandos `on` e `off` pode ser definido. Com o modo de operação "no botão", apenas um comando `on` e nenhum comando `off` é enviado.
A caixa de seleção "público" pode ser usada para definir se o botão pode ser usado por todos (marcado) ou apenas pelo próprio proprietário (não marcado).
Nota: Com o programador, os números dos blocos podem ser facilmente coletados e configurados.
[ta3_button|image]
### TA3 Conversor de Comandos
Com o conversor de comandos TA3, os comandos `on` / `off` podem ser convertidos em outros comandos, e o encaminhamento pode ser impedido ou atrasado.
Deve-se inserir o número do bloco de destino ou os números dos blocos de destino, os comandos a serem enviados e os tempos de atraso em segundos. Se nenhum comando for inserido, nada será enviado.
Os números também podem ser programados usando o programador Techage(programmer).
[ta3_command_converter|image]
### TA3 Flip-Flop
O flip-flop TA3 muda de estado a cada comando `on` recebido. Os comandos `off` recebidos são ignorados. Dependendo da alteração de status, os comandos `on` / `off` são enviados alternadamente. Deve-se inserir o número do bloco de destino ou os números dos blocos de destino. Os números também podem ser programados usando o programador Techage.
Por exemplo, lâmpadas podem ser ligadas e desligadas com a ajuda de botões.
[ta3_flipflop|image]
### Bloco Lógico TA3
O bloco lógico TA3 pode ser programado de forma que um ou mais comandos de entrada estejam vinculados a um comando de saída e sejam enviados. Este bloco pode, portanto, substituir vários elementos lógicos, como AND, OR, NOT, XOR, etc.
Os comandos de entrada para o bloco lógico são comandos `ligar` / `desligar`.
Os comandos de entrada são referenciados pelo número, por exemplo, `1234` para o comando do remetente com o número 1234.
O mesmo se aplica aos comandos de saída.
Uma regra é estruturada da seguinte forma:
```
<output> = on/off if <expressão-de-entrada> is true
```
`<output>` é o número do bloco para o qual o comando deve ser enviado.
`<expressão-de-entrada>` é uma expressão booleana onde os números de entrada são avaliados.
**Exemplos para a expressão de entrada**
Negar sinal (NOT):
1234 == off
AND lógico:
1234 == on e 2345 == on
OR lógico:
1234 == ligar ou 2345 == ligar
Os seguintes operadores são permitidos: `and` `or` `on` `off` `me` `==` `~=` `(` `)`
Se a expressão for verdadeira, um comando é enviado para o bloco com o número `<output>`.
Até quatro regras podem ser definidas, sendo que todas as regras são sempre verificadas quando um comando é recebido.
O tempo interno de processamento para todos os comandos é de 100 ms.
Seu próprio número de nó pode ser referenciado usando a palavra-chave `me`. Isso permite que o bloco envie a si mesmo um comando (função flip-flop).
O tempo de bloqueio define uma pausa após um comando, durante a qual o bloco lógico não aceita mais comandos externos. Comandos recebidos durante o período de bloqueio são descartados. O tempo de bloqueio pode ser definido em segundos.
[ta3_logic|image]
### TA3 Repetidor
O repetidor envia o sinal recebido para todos os números configurados.
Isso pode fazer sentido, por exemplo, se você quiser controlar muitos blocos ao mesmo tempo. O repetidor pode ser configurado com o programador, o que não é possível com todos os blocos.
[ta3_repeater|image]
### TA3 Sequenciador
O sequenciador pode enviar uma série de comandos `on` / `off`, em que o intervalo entre os comandos deve ser especificado em segundos. Você pode usá-lo para fazer uma lâmpada piscar, por exemplo.
Até 8 comandos podem ser configurados, cada um com número de bloco de destino e aguardando o próximo comando.
O sequenciador repete os comandos indefinidamente quando "Run endless" está ativado.
Se nada for selecionado, apenas o tempo especificado em segundos é aguardado.
[ta3_sequencer|image]
### TA3 Temporizador
O temporizador pode enviar comandos controlados pelo tempo. O horário, o(s) número(s) de destino e o comando em si podem ser especificados para cada linha de comando. Isso significa que as lâmpadas podem ser ligadas à noite e desligadas pela manhã.
[ta3_timer|image]
### TA3 Terminal
O terminal é usado principalmente para testar a interface de comando de outros blocos (veja "Blocos lógicos / de comutação").
Você também pode atribuir comandos a teclas e usar o terminal de maneira produtiva.
set <número-do-botão> <texto-do-botão> <comando>
Com `set 1 ON cmd 123 on`, por exemplo, a tecla do usuário 1 pode ser programada com o comando `cmd 123 on`. Se a tecla for pressionada, o comando é enviado e a resposta é exibida na tela.
O terminal possui os seguintes comandos locais:
- `clear` limpa a tela
- `help` exibe uma página de ajuda
- `pub` alterna para o modo público
- `priv` alterna para o modo privado
No modo privado, o terminal só pode ser usado por jogadores que podem construir neste local, ou seja, que têm direitos de proteção.
No modo público, todos os jogadores podem usar as teclas preconfiguradas.
[ta3_terminal|image]
### Lâmpada Colorida TechAge
A lâmpada de sinalização pode ser ligada ou desligada com o comando `on` / `off`. Esta lâmpada não precisa de eletricidade e pode ser colorida com a ferramenta de aerografia do mod "Dyes Unificados" e via comandos Lua/Beduino.
Com o comando de chat `/ta_color`, a paleta de cores com os valores para os comandos Lua/Beduino é exibida e com `/ta_send color <num>` a cor pode ser alterada.
[ta3_colorlamp|image]
### Blocos de Porta/Portão
Com esses blocos, você pode criar portas e portões que podem ser abertos por meio de comandos (blocos desaparecem) e fechados novamente. Um controlador de porta é necessário para cada portão ou porta.
A aparência dos blocos pode ser ajustada por meio do menu de blocos.
Isso permite a criação de portas secretas que só se abrem para certos jogadores (com a ajuda do detector de jogadores).
[ta3_doorblock|image]
### TA3 Controlador de Porta
O controlador de porta é usado para controlar os blocos de porta/portão TA3. Com o controlador de porta, os números dos blocos de porta/portão devem ser inseridos. Se um comando `on` / `off` for enviado para o controlador de porta, isso abre/fecha a porta ou portão.
[ta3_doorcontroller|image]
### Controlador de Porta TA3 II
O Controlador de Porta II pode remover e definir todos os tipos de blocos. Para ensinar ao Controlador de Porta II, o botão "Record" deve ser pressionado. Em seguida, todos os blocos que devem fazer parte da porta/portão devem ser clicados. Depois, o botão "Done" deve ser pressionado. Até 16 blocos podem ser selecionados. Os blocos removidos são salvos no inventário do controlador. A função do controlador pode ser testada manualmente usando os botões "Remove" ou "Set". Se um comando `on` /`off` for enviado para o Controlador de Porta II, ele remove ou define os blocos também.
Com `$send_cmnd(número_do_nó, "exchange", 2)` blocos individuais podem ser definidos, removidos ou substituídos por outros blocos do inventário.
Com `$send_cmnd(número_do_nó, "set", 2)` um bloco do inventário pode ser definido explicitamente, desde que o slot do inventário não esteja vazio.
Um bloco pode ser removido novamente com `$send_cmnd(número_do_nó, "dig", 2)` se o slot do inventário estiver vazio.
O nome do bloco definido é retornado com `$send_cmnd(número_do_nó, "get", 2)`.
O número do slot do inventário (1 .. 16) deve ser passado como carga útil em todos os três casos.
Isso também pode ser usado para simular escadas extensíveis e coisas do tipo.
[ta3_doorcontroller|image]
### TA3 Bloco de Som
Diferentes sons podem ser reproduzidos com o bloco de som. Todos os sons dos Mods Techage, Signs Bot, Hyperloop, Unified Inventory, TA4 Jetpack e Minetest Game estão disponíveis.
Os sons podem ser selecionados e reproduzidos pelo menu e via comando.
- Comando `on` para reproduzir um som
- Comando `sound <índice>` para selecionar um som via o índice
- Comando `gain <volume>` para ajustar o volume via o valor `<volume>` (1 a 5).
[ta3_soundblock|image]
### TA3 Conversor Mesecons
O conversor Mesecons é utilizado para converter comandos de ligar/desligar do Techage em sinais Mesecons e vice-versa.
Para fazer isso, um ou mais números de nó devem ser inseridos e o conversor deve ser conectado a blocos Mesecons por meio de cabos Mesecons. O conversor Mesecons também pode ser configurado com o programador.
O conversor Mesecons aceita até 5 comandos por segundo; ele se desativa em cargas mais altas.
**Este nó só existe se o mod mesecons estiver ativo!**
[ta3_mesecons_converter|image]
## Detectores
Os detectores escaneiam o ambiente e enviam um comando `on` quando a busca é reconhecida.
[ta3_nodedetector|image]
### TA3 Detector
O detector é um bloco de tubo especial que detecta quando itens passam pelo tubo. Para fazer isso, ele deve ser conectado a tubos dos dois lados. Se os itens forem empurrados para o detector com um empurrador(pusher), eles são passados automaticamente.
Ele envia um comando `on` quando um item é reconhecido, seguido por um `off` um segundo depois.
Em seguida, outros comandos são bloqueados por 8 segundos.
O tempo de espera e os itens que devem acionar um comando podem ser configurados usando o menu de chave inglesa(wrench).
[ta3_detector|image]
### TA3 Cart Detector
O detector de carrinho envia um comando `on` se reconhecer um carrinho (Minecart) diretamente na frente dele. Além disso, o detector também pode reiniciar o carrinho quando recebe um comando `on`.
O detector também pode ser programado com seu próprio número. Nesse caso, ele empurra todos os vagões que param perto dele (um bloco em todas as direções).
[ta3_cartdetector|image]
### TA3 Node Detector
O detector de nó envia um comando `on` se detectar que nós (blocos) aparecem ou desaparecem na frente dele, mas deve ser configurado de acordo. Após retornar o detector ao estado padrão (bloco cinza), um comando `off` é enviado. Blocos válidos são todos os tipos de blocos e plantas, mas não animais ou jogadores. O alcance do sensor é de 3 blocos por metro na direção da seta.
[ta3_nodedetector|image]
### TA3 Detector de jogador(Player detector)
O detector de jogador envia um comando `on` se detectar um jogador dentro de 4m do bloco. Se o jogador sair da área, um comando `off` é enviado.
Se a pesquisa deve ser limitada a jogadores específicos, esses nomes de jogador também podem ser inseridos.
[ta3_playerdetector|image]
### TA3 Detector de luz(Light detector)
O detector de luz envia um comando `on` se o nível de luz do bloco acima exceder um certo nível, que pode ser definido através do menu de clique direito.
Se você tiver um Controlador Lua TA4, pode obter o nível exato de luz com $get_cmd(num, 'light_level')
[ta3_lightdetector|image]
## Máquinas TA3
TA3 possui as mesmas máquinas que o TA2, apenas estas são mais poderosas e requerem eletricidade em vez de movimento por eixo.
Portanto, abaixo são fornecidos apenas os dados técnicos diferentes.
[ta3_grinder|image]
### TA3 Pusher
A função corresponde à do TA2.
A capacidade de processamento é de 6 itens a cada 2 segundos.
[ta3_pusher|image]
### TA3 Distributor
A função do Distribuidor TA3 corresponde à do TA2.
A capacidade de processamento é de 12 itens a cada 4 segundos.
[ta3_distributor|image]
### TA3 Autocrafter
A função corresponde à do TA2.
A capacidade de processamento é de 2 itens a cada 4 segundos. O autocrafter requer 6 ku de eletricidade.
[ta3_autocrafter|image]
### TA3 Electronic Fab
A função corresponde à do TA2, apenas os chips WLAN do TA4 são produzidos aqui.
A capacidade de processamento é de um chip a cada 6 segundos. O bloco requer 12 ku de eletricidade para isso.
[ta3_electronicfab|image]
### TA3 Quarry
A função corresponde à do TA2.
A profundidade máxima é de 40 metros. A pedreira requer 12 ku de eletricidade.
[ta3_quarry|image]
### TA3 Gravel Sieve
A função corresponde à do TA2.
A capacidade de processamento é de 2 itens a cada 4 segundos. O bloco requer 4 ku de eletricidade.
[ta3_gravelsieve|image]
### TA3 Gravel Rinser
A função corresponde à do TA2.
A probabilidade também é a mesma que a do TA2. O bloco também requer 3 ku de eletricidade.
Mas, ao contrário do TA2, o status do bloco TA3 pode ser lido (controlador)
[ta3_gravelrinser|image]
### TA3 Grinder
A função corresponde à do TA2.
A capacidade de processamento é de 2 itens a cada 4 segundos. O bloco requer 6 ku de eletricidade.
[ta3_grinder|image]
### TA3 Injetor
O injetor é um TA3 pusher com propriedades especiais. Ele possui um menu para configuração. Até 8 itens podem ser configurados aqui. Ele apenas pega esses itens de um baú para passá-los para as máquinas com receitas (autocrafter, forno industrial e electronic fab).
Ao passar, apenas uma posição no inventário é usada na máquina de destino. Se, por exemplo, apenas as três primeiras entradas estiverem configuradas no injetor, apenas as três primeiras posições de armazenamento no inventário da máquina serão usadas. Isso evita o transbordamento no inventário da máquina.
O injetor também pode ser alternado para o "modo pull". Então ele apenas retira itens do baú das posições que estão definidas na configuração do injetor. Nesse caso, o tipo e a posição do item devem corresponder. Isso permite esvaziar entradas específicas do inventário de um baú.
A capacidade de processamento é de até 8 vezes um item a cada 4 segundos.
[ta3_injector|image]
## Ferramentas
### Techage Info Tool
O Techage Info Tool (chave inglesa de ponta aberta) possui várias funções. Ele mostra a hora, posição, temperatura e bioma quando um bloco desconhecido é clicado.
Se você clicar em um bloco TechAge com interface de comando, todos os dados disponíveis serão mostrados (consulte também "Blocos lógicos / de comutação").
Com Shift + clique direito, um menu estendido pode ser aberto para alguns blocos. Dependendo do bloco, dados adicionais podem ser chamados ou configurações especiais podem ser feitas aqui. No caso de um gerador, por exemplo, a curva de carga/desligamento pode ser programada.
[ta3_end_wrench|image]
### TechAge Programmer (Programador)
Com o programador, números de bloco podem ser coletados de vários blocos com um clique direito e gravados em um bloco como um botão / interruptor com um clique esquerdo.
Se você clicar no ar, a memória interna é apagada.
[ta3_programmer|image]
### TechAge Trowel / Trowel
A colher de pedreiro é usada para revestir cabos de energia. Veja também "Cabo de energia TA".
[ta3_trowel|image]
### TA3 chave de cano
Esta ferramenta pode ser usada para remover blocos de tubo se, por exemplo, um túnel precisar passar por lá.
[ta3_drill_pipe_wrench|image]
### Techage Screwdriver
A chave de fenda Techage serve como substituto da chave de fenda normal. Ela possui as seguintes funções:
- Clique esquerdo: girar o bloco para a esquerda
- Clique direito: girar a face visível do bloco para cima
- Shift + clique esquerdo: salvar o alinhamento do bloco clicado
- Shift + clique direito: aplicar o alinhamento salvo ao bloco clicado
[ta3_screwdriver|image]
### TechAge Assembly Tool
A TechAge Assembly Tool é usada para remover e reposicionar blocos Techage sem que esses blocos percam seu número de bloco ou recebam um novo número ao serem configurados. Isso é útil, por exemplo, para pedreiras, já que muitas vezes precisam ser movidas.
- Botão esquerdo: remover um bloco
- Botão direito: configurar um bloco
O bloco que foi removido anteriormente com a ferramenta de montagem e que será colocado novamente deve estar no extremo esquerdo do inventário do jogador.
[techage:assembly_tool|image]

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,177 @@
# TA5: Futuro
Máquinas para superar o espaço e o tempo, novas fontes de energia e outras conquistas moldam sua vida.
São necessários pontos de experiência para a fabricação e o uso de máquinas e blocos TA5. Eles só podem ser calculados usando o colisor do TA4.
[techage_ta5|image]
## Fontes de energia
### Reator de fusão TA5
A fusão nuclear significa a fusão de dois núcleos atômicos. Dependendo da reação, grandes quantidades de energia podem ser liberadas. As fusões nucleares, nas quais a energia é liberada, ocorrem na forma de reações em cadeia. Elas são a fonte de energia das estrelas, inclusive do nosso sol, por exemplo. Um reator de fusão converte a energia liberada durante a fusão nuclear controlada em eletricidade.
**Como funcionam os reatores de fusão?**
Um reator de fusão funciona de acordo com o princípio clássico de uma usina de energia térmica: a água é aquecida e aciona uma turbina a vapor, cuja energia cinética é convertida em eletricidade por um gerador.
Uma usina de fusão requer inicialmente uma grande quantidade de energia, pois é necessário gerar um plasma. "Plasma" é o nome dado ao quarto estado da matéria, depois do sólido, líquido e gasoso. Isso requer uma grande quantidade de eletricidade. Somente por meio dessa concentração extrema de energia é que a reação de fusão se inflama e o calor liberado é usado para gerar eletricidade por meio do trocador de calor. O gerador fornece então 800 ku de eletricidade.
A planta à direita mostra uma seção do reator de fusão.
São necessários 60 pontos de experiência para operar o reator de fusão. O reator de fusão deve ser construído inteiramente em uma área de bloco de carga.
[ta5_fusion_reactor|plan]
#### Ímã do reator de fusão TA5
Um total de 60 ímãs de reator de fusão TA5 é necessário para configurar o reator de fusão. Eles formam o anel no qual o plasma se forma. O TA5 Fusion Reactor Magnets requer energia e tem duas portas para resfriamento.
Há dois tipos de ímãs, portanto, todos os lados do ímã voltados para o anel de plasma também podem ser protegidos com um protetor térmico.
Com os ímãs de canto na parte interna do anel, um lado da conexão é coberto (energia ou resfriamento) e, portanto, não pode ser conectado. Isso não é tecnicamente viável e, portanto, não influencia a função do reator de fusão.
[ta5_magnet|image]
#### Bomba TA5
A bomba é necessária para encher o circuito de resfriamento com isobutano. São necessárias cerca de 350 unidades de isobutano.
Observação: A bomba TA5 só pode ser usada para encher o circuito de resfriamento; não é possível bombear o líquido de arrefecimento para fora. Portanto, a bomba não deve ser ligada até que os ímãs estejam corretamente posicionados e todas as linhas de alimentação e resfriamento estejam conectadas.
[ta5_pump|image]
#### Trocador de calor TA5
O trocador de calor TA5 é necessário para converter o calor gerado no reator de fusão primeiro em vapor e depois em eletricidade. O próprio trocador de calor requer 5 ku de eletricidade. A estrutura é semelhante à do trocador de calor do depósito de energia do TA4.
Observação: O trocador de calor TA5 tem duas conexões (azul e verde) para o circuito de resfriamento. O trocador de calor e todos os ímãs devem ser conectados para formar um circuito de resfriamento por meio dos tubos verde e azul.
É possível verificar se o circuito de resfriamento está completo usando o botão de partida no trocador de calor, mesmo que o líquido de arrefecimento ainda não tenha sido abastecido.
[ta5_heatexchanger|plan]
#### Controlador do reator de fusão TA5
O reator de fusão é ligado por meio do controlador do reator de fusão TA5. O resfriamento/trocador de calor deve ser ligado primeiro e depois o controlador. Leva cerca de 2 minutos para o reator iniciar e fornecer eletricidade. O reator de fusão e, portanto, o controlador requerem 400 ku de eletricidade para manter o plasma.
[ta5_fr_controller|image]
#### Carcaça do reator de fusão TA5
O reator inteiro deve ser cercado por um invólucro que absorva a enorme pressão que os ímãs exercem sobre o plasma e proteja o ambiente da radiação. Sem esse invólucro, o reator não pode ser iniciado. Com a TechAge Trowel, os cabos de energia e os tubos de resfriamento do reator de fusão também podem ser integrados à carcaça.
[ta5_fr_shell|image]
#### Núcleo do reator de fusão TA5
O núcleo deve ficar no centro do reator. Veja a ilustração em "TA5 Fusion Reactor". A espátula TechAge também é necessária para isso.
[ta5_fr_nucleus|image]
## Armazenamento de energia
### Armazenamento híbrido TA5 (planejado)
## Blocos lógicos
## Transporte e tráfego
### Controlador de voo TA5
O controlador de voo TA5 é semelhante ao controlador de movimento TA4. Ao contrário do TA4 Move Controller, vários movimentos podem ser combinados em uma rota de voo. Essa rota de voo pode ser definida no campo de entrada usando várias entradas x,y,z (um movimento por linha). A rota de voo é verificada e salva por meio de "Save" (Salvar). Em caso de erro, é emitida uma mensagem de erro.
Com o botão "Test" (Testar), a rota de voo com as coordenadas absolutas é emitida para verificação no bate-papo.
A distância máxima para toda a distância de voo é de 1.500 m. Até 32 blocos podem ser treinados.
O uso do controlador de voo TA5 requer 40 pontos de experiência.
**Modo teletransporte**
Se o "Teleport Mode" (Modo de teletransporte) estiver ativado, o jogador também poderá ser movido sem blocos. Para fazer isso, a posição inicial deve ser configurada usando o botão "Record" (Registrar). Somente uma posição pode ser configurada aqui. O jogador a ser movido deve estar nessa posição.
[ta5_flycontroller|image]
### TA5 Hyperloop Chest
O TA5 Hyperloop Chest permite que objetos sejam transportados em uma rede Hyperloop.
O Baú Hyperloop TA5 deve ser colocado em uma Junção Hyperloop. O baú tem um menu especial, com o qual você pode emparelhar dois baús. Os itens que estão no baú são teletransportados para a estação remota. O baú também pode ser preenchido/esvaziado com um empurrador.
Para fazer o emparelhamento, primeiro você precisa inserir um nome para o baú de um lado e, em seguida, selecionar esse nome para o outro baú e, assim, conectar os dois blocos.
O uso do Baú do Hyperloop TA5 requer 15 pontos de experiência.
[ta5_chest|image]
### Tanque de hyperloop TA5
O TA5 Hyperloop Tank permite o transporte de líquidos em uma rede Hyperloop.
O TA5 Hyperloop Tank deve ser colocado em um Hyperloop Junction. O tanque tem um menu especial, com o qual você pode emparelhar dois tanques. Os líquidos no tanque serão teletransportados para a estação remota. O tanque também pode ser enchido/esvaziado com uma bomba.
Para fazer o emparelhamento, primeiro é necessário inserir um nome para o tanque de um lado e, em seguida, selecionar esse nome para o outro tanque e, assim, conectar os dois blocos.
O uso do TA5 Hyperloop Tank requer 15 pontos de experiência.
[ta5_tank|image]
## Blocos de teletransporte
Os blocos de teletransporte permitem a transferência de objetos entre dois blocos de teletransporte sem a necessidade de um cano ou tubo entre eles. Para emparelhar os blocos, primeiro é preciso digitar um nome para o bloco de um lado e, em seguida, selecionar esse nome para o outro bloco e, assim, conectar os dois blocos. O emparelhamento só pode ser realizado por um jogador (o nome do jogador é verificado) e deve ser concluído antes de o servidor ser reiniciado. Caso contrário, os dados de emparelhamento serão perdidos.
O mapa à direita mostra como os blocos podem ser usados.
[ta5_teleport|plan]
### Itens do bloco de teletransporte TA5
Esses blocos de teletransporte permitem a transferência de itens e, portanto, substituem um tubo. Distâncias de até 500 blocos podem ser transpostas.
Cada bloco de teletransporte requer 12 ku de eletricidade.
São necessários 30 pontos de experiência para usar os blocos de teletransporte.
[ta5_tele_tube|image]
### Líquidos do bloco de teletransporte TA5
Esses blocos de teletransporte permitem a transferência de líquidos e, portanto, substituem um cano. Distâncias de até 500 blocos podem ser transpostas.
Cada bloco de teletransporte requer 12 ku de eletricidade.
São necessários 30 pontos de experiência para usar os blocos de teletransporte.
[ta5_tele_pipe|image]
### Blocos de teletransporte Hyperloop (planejados)
Os blocos de teletransporte Hyperloop permitem a construção de uma rede Hyperloop sem tubos Hyperloop.
O uso dos blocos de teletransporte Hyperloop requer 60 pontos de experiência.
## Mais blocos/itens TA5
### Contêiner TA5 (planejado)
O contêiner TA5 permite que os sistemas Techage sejam embalados e desembalados em outro local.
São necessários 80 pontos de experiência para usar o contêiner TA5.
### Chip TA5 AI
O chip TA5 AI é parcialmente necessário para a produção de blocos TA5. O chip de IA TA5 só pode ser fabricado na fábrica de eletrônicos TA4. Isso requer 10 pontos de experiência.
[ta5_aichip|image]
### Chip TA5 AI II
O TA5 AI Chip II é necessário para construir o Reator de Fusão TA5. O TA5 AI Chip II só pode ser fabricado na fábrica de eletrônicos TA4. Isso requer 25 pontos de experiência.
[ta5_aichip2|image]

View File

@ -216,6 +216,7 @@ m2l = MarkdownToLua()
m2l.parse_md_file("./manual_ta5_DE.md")
m2l.gen_lua_file("../doc/manual_ta5_DE.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_EN.md")
m2l.gen_lua_file("../doc/manual_EN.lua")
@ -239,3 +240,28 @@ m2l.gen_lua_file("../doc/manual_ta4_EN.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_ta5_EN.md")
m2l.gen_lua_file("../doc/manual_ta5_EN.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_pt-BR.md")
m2l.gen_lua_file("../doc/manual_pt-BR.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_ta1_pt-BR.md")
m2l.gen_lua_file("../doc/manual_ta1_pt-BR.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_ta2_pt-BR.md")
m2l.gen_lua_file("../doc/manual_ta2_pt-BR.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_ta3_pt-BR.md")
m2l.gen_lua_file("../doc/manual_ta3_pt-BR.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_ta4_pt-BR.md")
m2l.gen_lua_file("../doc/manual_ta4_pt-BR.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_ta5_pt-BR.md")
m2l.gen_lua_file("../doc/manual_ta5_pt-BR.lua")

Some files were not shown because too many files have changed in this diff Show More