diff --git a/README.md b/README.md index 1cc06d7..bd18c06 100644 --- a/README.md +++ b/README.md @@ -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: diff --git a/autobahn/mod.conf b/autobahn/mod.conf index e862427..7943ad0 100644 --- a/autobahn/mod.conf +++ b/autobahn/mod.conf @@ -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 diff --git a/basic_materials/.gitmodules b/basic_materials/.gitmodules deleted file mode 100644 index 55d4b48..0000000 --- a/basic_materials/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "sound_api_core"] - path = sound_api_core - url = https://github.com/mt-mods/sound_api_core.git diff --git a/basic_materials/.luacheckrc b/basic_materials/.luacheckrc index c1a52ae..1dabf67 100644 --- a/basic_materials/.luacheckrc +++ b/basic_materials/.luacheckrc @@ -3,5 +3,5 @@ globals = { } read_globals = { - "default", + "default", "xcompat", } \ No newline at end of file diff --git a/basic_materials/README.md b/basic_materials/README.md index faa3446..919e4f0 100644 --- a/basic_materials/README.md +++ b/basic_materials/README.md @@ -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` \ No newline at end of file +* `cd basic_materials` \ No newline at end of file diff --git a/basic_materials/crafts.lua b/basic_materials/crafts.lua index 8526c9a..0f24e11 100644 --- a/basic_materials/crafts.lua +++ b/basic_materials/crafts.lua @@ -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}, }, }) diff --git a/basic_materials/mod.conf b/basic_materials/mod.conf index 048bae0..d14197b 100644 --- a/basic_materials/mod.conf +++ b/basic_materials/mod.conf @@ -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 diff --git a/basic_materials/nodes.lua b/basic_materials/nodes.lua index ef10f43..a40d1f5 100644 --- a/basic_materials/nodes.lua +++ b/basic_materials/nodes.lua @@ -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, diff --git a/basic_materials/sound_api_core/.luacheckrc b/basic_materials/sound_api_core/.luacheckrc deleted file mode 100644 index 1bd7ddb..0000000 --- a/basic_materials/sound_api_core/.luacheckrc +++ /dev/null @@ -1,5 +0,0 @@ -read_globals = { - "minetest", "mcl_sounds", "default", "ks_sounds", - "nodes_nature", "fl_stone", "fl_topsoil", "fl_trees", - "hades_sounds", -} \ No newline at end of file diff --git a/basic_materials/sound_api_core/LICENSE b/basic_materials/sound_api_core/LICENSE deleted file mode 100644 index 50e6e01..0000000 --- a/basic_materials/sound_api_core/LICENSE +++ /dev/null @@ -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. \ No newline at end of file diff --git a/basic_materials/sound_api_core/init.lua b/basic_materials/sound_api_core/init.lua deleted file mode 100644 index a7db7dc..0000000 --- a/basic_materials/sound_api_core/init.lua +++ /dev/null @@ -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 \ No newline at end of file diff --git a/grep.py b/grep.py new file mode 100755 index 0000000..fd8acd0 --- /dev/null +++ b/grep.py @@ -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]) diff --git a/hyperloop/.github/workflows/luacheck.yml b/hyperloop/.github/workflows/luacheck.yml new file mode 100644 index 0000000..18088bc --- /dev/null +++ b/hyperloop/.github/workflows/luacheck.yml @@ -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 diff --git a/hyperloop/.luacheckrc b/hyperloop/.luacheckrc new file mode 100644 index 0000000..49fd43a --- /dev/null +++ b/hyperloop/.luacheckrc @@ -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", +} + diff --git a/hyperloop/booking.lua b/hyperloop/booking.lua index c9536f1..7096368 100644 --- a/hyperloop/booking.lua +++ b/hyperloop/booking.lua @@ -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 diff --git a/hyperloop/booking_node.lua b/hyperloop/booking_node.lua index 4f0ae13..9ae939f 100644 --- a/hyperloop/booking_node.lua +++ b/hyperloop/booking_node.lua @@ -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', diff --git a/hyperloop/data_base.lua b/hyperloop/data_base.lua index ba8e202..04710da 100644 --- a/hyperloop/data_base.lua +++ b/hyperloop/data_base.lua @@ -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")) diff --git a/hyperloop/deco.lua b/hyperloop/deco.lua index 28e7898..9749858 100644 --- a/hyperloop/deco.lua +++ b/hyperloop/deco.lua @@ -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, diff --git a/hyperloop/door.lua b/hyperloop/door.lua index e21154d..b4f2dcf 100644 --- a/hyperloop/door.lua +++ b/hyperloop/door.lua @@ -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", diff --git a/hyperloop/elevator.lua b/hyperloop/elevator.lua index 719fe3d..43919c2 100644 --- a/hyperloop/elevator.lua +++ b/hyperloop/elevator.lua @@ -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, "", {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", diff --git a/hyperloop/init.lua b/hyperloop/init.lua index 80aefd9..8def590 100644 --- a/hyperloop/init.lua +++ b/hyperloop/init.lua @@ -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 ]]-- diff --git a/hyperloop/junction.lua b/hyperloop/junction.lua index f504521..823ec40 100644 --- a/hyperloop/junction.lua +++ b/hyperloop/junction.lua @@ -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", diff --git a/hyperloop/lcd.lua b/hyperloop/lcd.lua index e717d56..3177a54 100644 --- a/hyperloop/lcd.lua +++ b/hyperloop/lcd.lua @@ -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, }) diff --git a/hyperloop/map.lua b/hyperloop/map.lua index 9c292e6..6ddbf4c 100644 --- a/hyperloop/map.lua +++ b/hyperloop/map.lua @@ -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 "" local name = dataSet.name or "" 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.. diff --git a/hyperloop/migrate.lua b/hyperloop/migrate.lua index e438e79..c41e51c 100644 --- a/hyperloop/migrate.lua +++ b/hyperloop/migrate.lua @@ -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 diff --git a/hyperloop/mod.conf b/hyperloop/mod.conf index 8407212..24f34e1 100644 --- a/hyperloop/mod.conf +++ b/hyperloop/mod.conf @@ -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 diff --git a/hyperloop/network.lua b/hyperloop/network.lua index aaa9659..ac67d64 100644 --- a/hyperloop/network.lua +++ b/hyperloop/network.lua @@ -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 diff --git a/hyperloop/recipes.lua b/hyperloop/recipes.lua index b0b1ebf..a8e62b0 100644 --- a/hyperloop/recipes.lua +++ b/hyperloop/recipes.lua @@ -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"), diff --git a/hyperloop/seat.lua b/hyperloop/seat.lua index 3d7cc94..a228af5 100644 --- a/hyperloop/seat.lua +++ b/hyperloop/seat.lua @@ -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, diff --git a/hyperloop/station.lua b/hyperloop/station.lua index 10efae2..1d95031 100644 --- a/hyperloop/station.lua +++ b/hyperloop/station.lua @@ -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, diff --git a/hyperloop/tube.lua b/hyperloop/tube.lua index b1ad8b5..c3429ac 100644 --- a/hyperloop/tube.lua +++ b/hyperloop/tube.lua @@ -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", diff --git a/hyperloop/tubecrowbar.lua b/hyperloop/tubecrowbar.lua index 2e616de..41108f3 100644 --- a/hyperloop/tubecrowbar.lua +++ b/hyperloop/tubecrowbar.lua @@ -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}) diff --git a/hyperloop/utils.lua b/hyperloop/utils.lua index 486c535..50053aa 100644 --- a/hyperloop/utils.lua +++ b/hyperloop/utils.lua @@ -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 diff --git a/hyperloop/waypoint.lua b/hyperloop/waypoint.lua index 34a9dda..849db0e 100644 --- a/hyperloop/waypoint.lua +++ b/hyperloop/waypoint.lua @@ -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, diff --git a/hyperloop/wifi.lua b/hyperloop/wifi.lua index 9e55a9e..4e4420f 100644 --- a/hyperloop/wifi.lua +++ b/hyperloop/wifi.lua @@ -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) diff --git a/lcdlib/display.lua b/lcdlib/display.lua index 882ed3b..d6c2b2a 100644 --- a/lcdlib/display.lua +++ b/lcdlib/display.lua @@ -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 diff --git a/minecart/mod.conf b/minecart/mod.conf index 73d9cb1..5c8ccb1 100644 --- a/minecart/mod.conf +++ b/minecart/mod.conf @@ -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 diff --git a/networks/hidden.lua b/networks/hidden.lua index c7780b2..dc22781 100644 --- a/networks/hidden.lua +++ b/networks/hidden.lua @@ -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 diff --git a/safer_lua/environ.lua b/safer_lua/environ.lua index b367d62..cf5360b 100644 --- a/safer_lua/environ.lua +++ b/safer_lua/environ.lua @@ -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) diff --git a/safer_lua/init.lua b/safer_lua/init.lua index e607168..aeebed5 100644 --- a/safer_lua/init.lua +++ b/safer_lua/init.lua @@ -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") diff --git a/safer_lua/readme.md b/safer_lua/readme.md index ba82e58..f4fc702 100644 --- a/safer_lua/readme.md +++ b/safer_lua/readme.md @@ -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() diff --git a/signs_bot/cmd_flowers.lua b/signs_bot/cmd_flowers.lua index 8124429..bc02317 100644 --- a/signs_bot/cmd_flowers.lua +++ b/signs_bot/cmd_flowers.lua @@ -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 diff --git a/signs_bot/cmd_move.lua b/signs_bot/cmd_move.lua index ff7ec01..3df422d 100644 --- a/signs_bot/cmd_move.lua +++ b/signs_bot/cmd_move.lua @@ -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 diff --git a/signs_bot/interpreter.lua b/signs_bot/interpreter.lua index ec9fbc6..12487d1 100644 --- a/signs_bot/interpreter.lua +++ b/signs_bot/interpreter.lua @@ -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 diff --git a/signs_bot/mod.conf b/signs_bot/mod.conf index 3a4f057..827ceca 100644 --- a/signs_bot/mod.conf +++ b/signs_bot/mod.conf @@ -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 + diff --git a/signs_bot/tool.lua b/signs_bot/tool.lua index 0971561..dc250f0 100644 --- a/signs_bot/tool.lua +++ b/signs_bot/tool.lua @@ -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 diff --git a/techage/basic_machines/electronic_fab.lua b/techage/basic_machines/electronic_fab.lua index dfeb7f4..a668880 100644 --- a/techage/basic_machines/electronic_fab.lua +++ b/techage/basic_machines/electronic_fab.lua @@ -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) diff --git a/techage/basic_machines/forceload.lua b/techage/basic_machines/forceload.lua index 8056269..f095f8c 100644 --- a/techage/basic_machines/forceload.lua +++ b/techage/basic_machines/forceload.lua @@ -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, +}) diff --git a/techage/basic_machines/foreign_nodes.lua b/techage/basic_machines/foreign_nodes.lua index c9799d3..9d909c7 100644 --- a/techage/basic_machines/foreign_nodes.lua +++ b/techage/basic_machines/foreign_nodes.lua @@ -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) diff --git a/techage/basic_machines/ta4_injector.lua b/techage/basic_machines/ta4_injector.lua index 0689461..e6a7eac 100644 --- a/techage/basic_machines/ta4_injector.lua +++ b/techage/basic_machines/ta4_injector.lua @@ -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 diff --git a/techage/basis/command.lua b/techage/basis/command.lua index 0d53d2d..edc8af3 100644 --- a/techage/basis/command.lua +++ b/techage/basis/command.lua @@ -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 diff --git a/techage/basis/conf_inv.lua b/techage/basis/conf_inv.lua index 1117ada..d738a69 100644 --- a/techage/basis/conf_inv.lua +++ b/techage/basis/conf_inv.lua @@ -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] = {} diff --git a/techage/basis/mark_lib.lua b/techage/basis/mark_lib.lua index 8f75197..40dee56 100644 --- a/techage/basis/mark_lib.lua +++ b/techage/basis/mark_lib.lua @@ -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", diff --git a/techage/basis/node_store.lua b/techage/basis/node_store.lua index f22c554..9e823e2 100644 --- a/techage/basis/node_store.lua +++ b/techage/basis/node_store.lua @@ -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 {} diff --git a/techage/basis/pack_lib.lua b/techage/basis/pack_lib.lua new file mode 100644 index 0000000..155cd3a --- /dev/null +++ b/techage/basis/pack_lib.lua @@ -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 diff --git a/techage/basis/submenu.lua b/techage/basis/submenu.lua index dba7378..46ce5da 100644 --- a/techage/basis/submenu.lua +++ b/techage/basis/submenu.lua @@ -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 diff --git a/techage/collider/cooler.lua b/techage/collider/cooler.lua index 7d4a37f..435b58f 100644 --- a/techage/collider/cooler.lua +++ b/techage/collider/cooler.lua @@ -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, diff --git a/techage/collider/detector.lua b/techage/collider/detector.lua index 326a5fd..df8f86d 100644 --- a/techage/collider/detector.lua +++ b/techage/collider/detector.lua @@ -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, diff --git a/techage/collider/inlets.lua b/techage/collider/inlets.lua index 2f60662..c8ec7fa 100644 --- a/techage/collider/inlets.lua +++ b/techage/collider/inlets.lua @@ -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, diff --git a/techage/doc/guide.lua b/techage/doc/guide.lua index 21a92d2..5d9e73b 100644 --- a/techage/doc/guide.lua +++ b/techage/doc/guide.lua @@ -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 diff --git a/techage/doc/items.lua b/techage/doc/items.lua index e7cc71a..b63bf99 100644 --- a/techage/doc/items.lua +++ b/techage/doc/items.lua @@ -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 diff --git a/techage/doc/manual_DE.lua b/techage/doc/manual_DE.lua index d986db3..399f705 100644 --- a/techage/doc/manual_DE.lua +++ b/techage/doc/manual_DE.lua @@ -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".. diff --git a/techage/doc/manual_EN.lua b/techage/doc/manual_EN.lua index 65d25d2..246392e 100644 --- a/techage/doc/manual_EN.lua +++ b/techage/doc/manual_EN.lua @@ -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", diff --git a/techage/doc/manual_pt-BR.lua b/techage/doc/manual_pt-BR.lua new file mode 100644 index 0000000..212f27d --- /dev/null +++ b/techage/doc/manual_pt-BR.lua @@ -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 = { + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } +} \ No newline at end of file diff --git a/techage/doc/manual_ta1_pt-BR.lua b/techage/doc/manual_ta1_pt-BR.lua new file mode 100644 index 0000000..e7ade68 --- /dev/null +++ b/techage/doc/manual_ta1_pt-BR.lua @@ -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", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } +} \ No newline at end of file diff --git a/techage/doc/manual_ta2_pt-BR.lua b/techage/doc/manual_ta2_pt-BR.lua new file mode 100644 index 0000000..5db2a6e --- /dev/null +++ b/techage/doc/manual_ta2_pt-BR.lua @@ -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", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } +} \ No newline at end of file diff --git a/techage/doc/manual_ta3_pt-BR.lua b/techage/doc/manual_ta3_pt-BR.lua new file mode 100644 index 0000000..ae26512 --- /dev/null +++ b/techage/doc/manual_ta3_pt-BR.lua @@ -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".. + " = on/off if is true\n".. + "\n".. + "'' é o número do bloco para o qual o comando deve ser enviado.\n".. + "'' é 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 ''.\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".. + "\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 ' 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 ' para ajustar o volume via o valor '' (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", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } +} \ No newline at end of file diff --git a/techage/doc/manual_ta4_pt-BR.lua b/techage/doc/manual_ta4_pt-BR.lua new file mode 100644 index 0000000..51ab2fe --- /dev/null +++ b/techage/doc/manual_ta4_pt-BR.lua @@ -0,0 +1,1054 @@ +return { + titles = { + "1,TA4: Presente", + "2,Turbina eólica", + "3,Turbina eólica TA4", + "3,Nacelle da turbina eólica TA4", + "3,Lâmpada de sinalização de turbina eólica TA4", + "3,Pilar TA4", + "2,Sistema Solar", + "3,Módulo solar TA4", + "3,Módulo de transporte solar TA4", + "3,Inversor solar TA4", + "3,Cabo de baixa potência TA4", + "3,Caixa de junção de baixa tensão TA4", + "3,Célula solar para lâmpadas de rua TA4", + "2,Armazenamento de energia térmica", + "3,Trocador de calor TA4", + "3,Turbina TA4", + "3,Gerador TA4", + "3,Entrada do tubo TA4", + "3,Tubo TA4", + "2,Distribuição de energia", + "3,Transformador de isolamento TA4", + "3,Medidor elétrico TA4", + "3,Laser TA4", + "2,Hidrogênio", + "3,Eletrolisador", + "3,Célula de combustível", + "2,Reator químico", + "3,Dosador TA4", + "3,Reator TA4", + "3,Tubo de enchimento TA4", + "3,Suporte do reator TA4", + "3,Base do reator TA4", + "3,Silo TA4", + "2,Controlador ICTA", + "3,Controlador TA4 ICTA", + "3,Bateria", + "3,Exibição do TA4", + "3,TA4 Display XL", + "3,Torre de sinalização TA4", + "2,Controlador TA4 Lua", + "3,Servidor TA4 Lua", + "3,Caixa do sensor TA4 / baú", + "3,Terminal do controlador TA4 Lua", + "2,Módulos de lógica/comutação TA4", + "3,Botão/interruptor TA4", + "3,Botão TA4 2x", + "3,Botão TA4 4x", + "3,Lâmpada de sinalização TA4 2x", + "3,Lâmpada de sinalização TA4 4x", + "3,Detector de jogadores TA4", + "3,Coletor de estado TA4", + "3,Detector TA4", + "3,Detector de nó TA4", + "3,Detector de carga de armazenamento de energia TA4", + "3,Sensor de olhar TA4", + "3,Sequenciador TA4", + "2,Controlador de movimento/volta", + "3,Controlador de movimento TA4", + "3,Controlador de giro TA4", + "2,Lâmpadas TA4", + "3,Luz de cultivo LED TA4", + "3,Lâmpada de rua TA4", + "3,Lâmpada industrial de LED TA4", + "2,Filtro líquido TA4", + "3,Camada de base", + "3,Camada de cascalho", + "3,Camada de enchimento", + "2,Colisor TA4 (acelerador de partículas)", + "3,Detector", + "3,Controle / Terminal TA4", + "3,Resfriamento e energia", + "3,Construção", + "2,Mais blocos TA4", + "3,Bloco de receitas TA4", + "3,TA4 Autocrafter", + "3,Tanque TA4", + "3,Bomba TA4", + "3,Aquecedor de forno TA4", + "3,Bomba d'água TA4 (obsoleta)", + "3,Entrada de água TA4", + "3,Tubo TA4", + "3,TA4 Pusher", + "3,Peito TA4", + "3,Baú TA4 8x2000", + "3,Distribuidor TA4", + "3,Distribuidor de alto desempenho TA4", + "3,Peneira de cascalho TA4", + "3,Moedor TA4", + "3,Pedreira TA4", + "3,Fab. eletrônica TA4", + "3,Injetor TA4", + "3,Reciclador TA4", + }, + texts = { + "Fontes de energia renováveis\\, 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".. + "\n".. + "\n", + "Uma turbina eólica sempre fornece eletricidade quando há vento. Não há vento no jogo\\, mas o mod simula isso girando as turbinas eólicas somente pela manhã (5:00 - 9:00) e à noite (17:00 - 21:00). Uma turbina eólica só fornece eletricidade se estiver instalada em um local adequado.\n".. + "\n".. + "As usinas eólicas da TA são usinas puramente offshore\\, o que significa que elas precisam ser construídas no mar. Isso significa que as turbinas eólicas só podem ser construídas em um bioma marinho (oceano) e que deve haver água suficiente e uma visão clara ao redor do mastro.\n".. + "\n".. + "Para encontrar um local adequado\\, clique na água com a chave inglesa (TechAge Info Tool). Uma mensagem de bate-papo mostrará se essa posição é adequada para o mastro da turbina eólica.\n".. + "\n".. + "A corrente deve ser conduzida do bloco do rotor até o mastro. Primeiro\\, puxe a linha de energia para cima e\\, em seguida\\, \"engesse\" o cabo de energia com blocos de pilar TA4. Uma plataforma de trabalho pode ser construída abaixo. A planta à direita mostra a estrutura na parte superior.\n".. + "\n".. + "A turbina eólica fornece 70 ku\\, mas apenas 8 horas por dia (veja acima).\n".. + "\n".. + "\n".. + "\n", + "O bloco da turbina eólica (rotor) é o coração da turbina eólica. Esse bloco deve ser colocado no topo do mastro. Idealmente\\, em Y = 15\\, então você fica dentro de um bloco de mapa/carga.\n".. + "Quando você inicia a turbina\\, todas as condições para a operação da turbina eólica são verificadas. Se todas as condições forem atendidas\\, as pás do rotor (asas) aparecerão automaticamente. Caso contrário\\, você receberá uma mensagem de erro.\n".. + "\n".. + "\n".. + "\n", + "Esse bloco deve ser colocado na extremidade preta do bloco da turbina eólica.\n".. + "\n".. + "\n".. + "\n", + "Essa luz intermitente serve apenas para fins decorativos e pode ser colocada na parte superior do bloco da turbina eólica.\n".. + "\n".. + "\n".. + "\n", + "Isso constrói o mastro da turbina eólica. No entanto\\, esses blocos não são fixados manualmente\\, mas devem ser fixados com a ajuda de uma espátula(trowel)\\, de modo que a linha de energia para a ponta do mastro seja substituída por esses blocos (consulte Cabo de energia TA).\n".. + "\n".. + "\n".. + "\n", + "O sistema solar só produz eletricidade quando o sol está brilhando. No jogo\\, isso ocorre todo dia de jogo\\, das 6h às 18h.\n".. + "A mesma energia está sempre disponível durante esse período. Após as 18h00\\, os módulos solares se desligam completamente.\n".. + "\n".. + "A temperatura do bioma é decisiva para o desempenho dos módulos solares. Quanto mais quente for a temperatura\\, maior será o rendimento.\n".. + "A temperatura do bioma pode ser determinada com a Techage Info Tool (chave inglesa). Normalmente\\, ela oscila entre 0 e 100:\n".. + "\n".. + " - a potência total está disponível a 100\n".. + " - a 50\\, metade da potência está disponível\n".. + " - em 0\\, não há serviço disponível\n".. + "\n".. + "Portanto\\, é aconselhável procurar estepes e desertos quentes para o sistema solar.\n".. + "As linhas aéreas estão disponíveis para o transporte de eletricidade.\n".. + "No entanto\\, também é possível produzir hidrogênio\\, que pode ser transportado e convertido novamente em eletricidade no destino.\n".. + "\n".. + "A menor unidade em um sistema solar é composta por dois módulos solares e um módulo de transporte. O módulo de transporte deve ser colocado primeiro\\, com os dois módulos solares à esquerda e à direita próximos a ele (não acima!).\n".. + "\n".. + "A planta à direita mostra 3 unidades\\, cada uma com dois módulos solares e um módulo de suporte\\, conectadas ao inversor por meio de cabos vermelhos.\n".. + "\n".. + "Os módulos solares fornecem tensão CC\\, que não pode ser alimentada diretamente na rede elétrica. Portanto\\, as unidades solares devem primeiro ser conectadas ao inversor por meio do cabo vermelho. Ele consiste em dois blocos\\, um para o cabo vermelho dos módulos solares (CC) e outro para o cabo de alimentação cinza da rede elétrica (CA).\n".. + "\n".. + "A área do mapa onde o sistema solar está localizado deve estar totalmente carregada. Isso também se aplica à posição direta acima do módulo solar\\, pois a intensidade da luz é medida regularmente nesse local. Portanto\\, é aconselhável definir primeiro um bloco de carga e depois colocar os módulos dentro dessa área.\n".. + "\n".. + "\n".. + "\n", + "O módulo solar deve ser colocado no módulo de suporte. São sempre necessários dois módulos solares.\n".. + "Em um par\\, os módulos solares têm desempenho de até 3 ku\\, dependendo da temperatura.\n".. + "Com os módulos solares\\, deve-se tomar cuidado para que eles tenham plena luz do dia e não sejam sombreados por blocos ou árvores. Isso pode ser testado com a Info Tool (wrench ou chave inglesa).\n".. + "\n".. + "\n".. + "\n", + "O módulo de suporte está disponível em duas alturas (1m e 2m). Ambos são funcionalmente idênticos.\n".. + "Os módulos portadores podem ser colocados diretamente um ao lado do outro e\\, assim\\, conectados para formar uma fileira de módulos. A conexão com o inversor ou com outras séries de módulos deve ser feita com os cabos vermelhos de baixa tensão ou com as caixas de junção de baixa tensão.\n".. + "\n".. + "\n".. + "\n", + "O inversor converte a energia solar (CC) em corrente alternada (CA) para que ela possa ser alimentada na rede elétrica.\n".. + "Um inversor pode alimentar um máximo de 100 ku de eletricidade\\, o que corresponde a 33 módulos solares ou mais.\n".. + "\n".. + "\n".. + "\n", + "O cabo de baixa tensão é usado para conectar fileiras de módulos solares ao inversor. O cabo não deve ser usado para outros fins.\n".. + "\n".. + "O comprimento máximo do cabo é de 200 m.\n".. + "\n".. + "\n".. + "\n", + "A caixa de junção deve ser colocada no chão. Ela tem apenas 4 conexões (nas 4 direções).\n".. + "\n".. + "\n".. + "\n", + "Como o nome sugere\\, a célula solar para lâmpadas de rua é usada para alimentar uma lâmpada de rua. Uma célula solar pode alimentar duas lâmpadas (1 ku). A célula solar armazena a energia do sol durante o dia e fornece a eletricidade para a lâmpada à noite. Isso significa que a lâmpada só brilha no escuro.\n".. + "\n".. + "Essa célula solar não pode ser combinada com os outros módulos solares.\n".. + "\n".. + "\n".. + "\n", + "O armazenamento de energia térmica substitui o bloco de baterias do TA3.\n".. + "\n".. + "O armazenamento de energia térmica consiste em uma concha de concreto (blocos de concreto) preenchida com cascalho. São possíveis cinco tamanhos de armazenamento:\n".. + "\n".. + " - Cobertura com blocos de concreto 5x5x5\\, preenchida com 27 cascalhos\\, capacidade de armazenamento: 22\\,5 kud\n".. + " - Cobertura com blocos de concreto 7x7x7\\, preenchidos com cascalho 125\\, capacidade de armazenamento: 104 kud\n".. + " - Cobertura com blocos de concreto 9x9x9\\, preenchida com 343 cascalhos\\, capacidade de armazenamento: 286 kud\n".. + " - Cobertura com blocos de concreto 11x11x11\\, preenchida com 729 cascalhos\\, capacidade de armazenamento: 610 kud\n".. + " - Cobertura com blocos de concreto 13x13x13\\, preenchidos com cascalho 1331\\, capacidade de armazenamento: 1112 kud\n".. + "\n".. + "Uma janela feita de um bloco de vidro de obsidiana pode ser colocada na estrutura de concreto. Ela deve ser colocada bem no meio da parede. Por essa janela\\, é possível ver se o armazenamento está carregado em mais de 80%. Na planta à direita\\, você pode ver a estrutura do trocador de calor TA4\\, que consiste em 3 blocos\\, a turbina TA4 e o gerador TA4. Preste atenção ao alinhamento do trocador de calor (a seta no bloco 1 deve apontar para a turbina).\n".. + "\n".. + "Ao contrário da planta à direita\\, as conexões no bloco de armazenamento devem estar no mesmo nível (dispostas horizontalmente\\, ou seja\\, não abaixo e acima). As entradas de tubulação (TA4 Pipe Inlet) devem estar exatamente no meio da parede e de frente uma para a outra. Os tubos TA4 amarelos são usados como tubos de vapor. Os tubos de vapor TA3 não podem ser usados aqui.\n".. + "Tanto o gerador quanto o trocador de calor têm uma conexão de energia e devem ser conectados à rede elétrica.\n".. + "\n".. + "Em princípio\\, o sistema de armazenamento de calor funciona exatamente da mesma forma que as baterias\\, só que com muito mais capacidade de armazenamento.\n".. + "\n".. + "Para que o sistema de armazenamento de calor funcione\\, todos os blocos (também a casca de concreto e o cascalho) devem ser carregados usando um bloco forceload.\n".. + "\n".. + "\n".. + "\n", + "O trocador de calor consiste em três partes que devem ser colocadas umas sobre as outras\\, com a seta do primeiro bloco apontando para a turbina. Os tubos devem ser construídos com os tubos TA4 amarelos.\n".. + "O trocador de calor deve ser conectado à rede elétrica. O dispositivo de armazenamento de energia é recarregado por meio do trocador de calor\\, desde que haja eletricidade suficiente disponível. \n".. + "\n".. + "\n".. + "\n", + "A turbina faz parte do armazenamento de energia. Ela deve ser colocada ao lado do gerador e conectada ao trocador de calor por meio de tubos TA4\\, conforme mostrado na planta.\n".. + "\n".. + "\n".. + "\n", + "O gerador é usado para gerar eletricidade. Portanto\\, o gerador também deve ser conectado à rede elétrica.\n".. + "O gerador faz parte do armazenamento de energia. Ele é usado para gerar eletricidade e\\, assim\\, liberar a energia da unidade de armazenamento de energia. Portanto\\, o gerador também deve ser conectado à rede elétrica.\n".. + "\n".. + "Importante: Tanto o trocador de calor quanto o gerador devem estar conectados à mesma rede elétrica! \n".. + "\n".. + "\n".. + "\n", + "Um bloco de entrada de tubo deve ser instalado em cada um dos dois lados do bloco de armazenamento. Os blocos devem estar exatamente de frente um para o outro.\n".. + "\n".. + "Os blocos de entrada de tubo *não* podem ser usados como aberturas normais de parede\\; em vez disso\\, use os blocos de entrada de tubo TA3 na parede.\n".. + "\n".. + "\n".. + "\n", + "Com o TA4\\, os tubos amarelos são usados para a transmissão de gás e líquidos.\n".. + "O comprimento máximo do cabo é de 100 m.\n".. + "\n".. + "\n".. + "\n", + "Com a ajuda de cabos de energia e caixas de junção\\, é possível configurar redes de energia de até 1.000 blocos/nós. Entretanto\\, deve-se observar que as caixas de distribuição também devem ser contadas. Isso significa que até 500 geradores/sistemas de armazenamento/máquinas/lâmpadas podem ser conectados a uma rede elétrica.\n".. + "\n".. + "Com a ajuda de um transformador de isolamento e de um medidor de eletricidade\\, as redes podem ser conectadas para formar estruturas ainda maiores.\n".. + "\n".. + "\n".. + "\n", + "Com a ajuda de um transformador de isolamento\\, duas redes de energia podem ser conectadas para formar uma rede maior. O transformador de isolamento pode transmitir eletricidade em ambas as direções.\n".. + "\n".. + "O transformador de isolamento pode transmitir até 300 ku. O valor máximo é ajustável por meio do menu da chave inglesa.\n".. + "\n".. + "\n".. + "\n", + "Com a ajuda de um medidor de eletricidade\\, duas redes de eletricidade podem ser conectadas para formar uma rede maior. O medidor de eletricidade transmite eletricidade somente em uma direção (observe a seta). A quantidade de energia elétrica transmitida (em kud) é medida e exibida. Esse valor também pode ser consultado por um controlador Lua usando o comando 'consumption'. A corrente atual pode ser consultada por meio do comando 'current'.\n".. + "\n".. + "O medidor de eletricidade pode passar até 200 ku. O valor máximo é ajustável por meio do menu da chave inglesa.\n".. + "\n".. + "Uma contagem regressiva da potência de saída também pode ser inserida por meio do menu da chave inglesa. Quando essa contagem regressiva chega a zero\\, o medidor de eletricidade é desligado. A contagem regressiva pode ser consultada com o comando 'countdown'.\n".. + "\n".. + "\n".. + "\n", + "O laser TA4 é usado para transmissão de energia sem fio. Para isso\\, são necessários dois blocos: Emissor de feixe de laser TA4 e Receptor de feixe de laser TA4. Deve haver um espaço de ar entre os dois blocos para que o feixe de laser possa ser construído a partir do emissor até o receptor. Primeiro\\, o emissor deve ser colocado. Isso liga imediatamente o feixe de laser e mostra as possíveis posições do receptor. As possíveis posições do receptor também são exibidas por meio de uma mensagem de bate-papo. \n".. + "\n".. + "Com o laser\\, distâncias de até 96 blocos podem ser superadas. Depois que a conexão é estabelecida (não é necessário haver fluxo de corrente)\\, isso é indicado por meio do texto informativo do emissor e também do receptor. \n".. + "\n".. + "Os blocos de laser em si não requerem eletricidade.\n".. + "\n".. + "\n".. + "\n", + "A eletrólise pode ser usada para dividir a eletricidade em hidrogênio e oxigênio. Por outro lado\\, o hidrogênio pode ser convertido novamente em eletricidade com o oxigênio do ar usando uma célula de combustível.\n".. + "Isso permite que os picos de corrente ou um excesso de fornecimento de eletricidade sejam convertidos em hidrogênio e\\, portanto\\, armazenados.\n".. + "\n".. + "No jogo\\, a eletricidade pode ser convertida novamente em eletricidade por meio da célula de combustível usando o eletrolisador em hidrogênio e hidrogênio.\n".. + "Isso significa que a eletricidade (na forma de hidrogênio) pode não apenas ser armazenada em tanques\\, mas também transportada por meio do carrinho-tanque.\n".. + "\n".. + "No entanto\\, a conversão de eletricidade em hidrogênio e vice-versa é deficitária. De 100 unidades de eletricidade\\, apenas 95 unidades de eletricidade saem após a conversão em hidrogênio e vice-versa.\n".. + "\n".. + "\n".. + "\n", + "O eletrolisador converte eletricidade em hidrogênio.\n".. + "Ele deve ser alimentado pela esquerda. À direita\\, o hidrogênio pode ser extraído por meio de tubos e bombas.\n".. + "\n".. + "O eletrolisador pode consumir até 35 ku de eletricidade e\\, em seguida\\, gera um item de hidrogênio a cada 4 s.\n".. + "200 unidades de hidrogênio cabem no eletrolisador.\n".. + "\n".. + "O eletrolisador tem um menu de chave inglesa para definir o consumo de corrente e o ponto de desligamento.\n".. + "\n".. + "Se a energia armazenada na rede elétrica cair abaixo do valor especificado do ponto de desligamento\\, o eletrolisador se desliga automaticamente. Isso evita que os sistemas de armazenamento fiquem vazios.\n".. + "\n".. + "\n".. + "\n", + "A célula de combustível converte hidrogênio em eletricidade.\n".. + "Ele deve ser abastecido com hidrogênio pela esquerda por meio de uma bomba. A conexão de energia está à direita.\n".. + "\n".. + "A célula de combustível pode fornecer até 34 ku de eletricidade e precisa de um item de hidrogênio a cada 4 s.\n".. + "\n".. + "Normalmente\\, a célula de combustível funciona como um gerador de categoria 2 (como outros sistemas de armazenamento). \n".. + "Nesse caso\\, nenhum outro bloco de categoria 2\\, como o bloco de bateria\\, pode ser carregado. No entanto\\, a célula de combustível também pode ser usada como um gerador de categoria 1 por meio da caixa de seleção.\n".. + "\n".. + "\n".. + "\n", + "O reator é usado para processar os ingredientes obtidos da torre de destilação ou de outras receitas em novos produtos.\n".. + "A planta à esquerda mostra apenas uma variante possível\\, pois a disposição dos silos e tanques depende da receita.\n".. + "\n".. + "O produto primário de saída é sempre descarregado na lateral do suporte do reator\\, independentemente de ser um pó ou um líquido. O produto residual (secundário) é sempre descarregado na parte inferior do suporte do reator.\n".. + "\n".. + "Um reator consiste em:\n".. + "\n".. + " - Vários tanques e silos com os ingredientes que são conectados ao dosador por meio de tubos\n".. + " - opcionalmente\\, uma base do reator\\, que descarrega os resíduos do reator (necessário apenas para receitas com dois produtos de saída)\n".. + " - o suporte do reator\\, que deve ser colocado na base (se disponível). O suporte tem uma conexão de energia e consome 8 ku durante a operação.\n".. + " - O vaso do reator que deve ser colocado no suporte do reator\n".. + " - O tubo de enchimento que deve ser colocado no vaso do reator\n".. + " - O dispositivo de dosagem\\, que deve ser conectado aos tanques ou silos e ao tubo de enchimento por meio de tubos\n".. + "\n".. + "Observação 1: Os líquidos são armazenados somente em tanques e os sólidos e substâncias em pó somente em silos. Isso se aplica a ingredientes e produtos finais.\n".. + "\n".. + "Observação 2: Os tanques ou silos com conteúdos diferentes não devem ser conectados a um sistema de tubulação. Por outro lado\\, vários tanques ou silos com o mesmo conteúdo podem ser pendurados em paralelo em uma linha.\n".. + "\n".. + "O craqueamento quebra cadeias longas de hidrocarbonetos em cadeias curtas usando um catalisador.\n".. + "O pó de gibbsita serve como catalisador (não é consumido). Ele pode ser usado para converter betume em óleo combustível\\, óleo combustível em nafta e nafta em gasolina.\n".. + "\n".. + "Na hidrogenação\\, pares de átomos de hidrogênio são adicionados a uma molécula para converter hidrocarbonetos de cadeia curta em longa.\n".. + "Aqui\\, o pó de ferro é necessário como catalisador (não é consumido). Ele pode ser usado para converter gás (propano) em isobutano\\,\n".. + "isobutano em gasolina\\, gasolina em nafta\\, nafta em óleo combustível e óleo combustível em betume.\n".. + "\n".. + "\n".. + "\n", + "Parte do reator químico.\n".. + "As tubulações para materiais de entrada podem ser conectadas em todos os quatro lados do dosador. Os materiais para o reator são descarregados para cima.\n".. + "\n".. + "A receita pode ser definida e o reator pode ser iniciado por meio do dosador.\n".. + "\n".. + "Como em outras máquinas:\n".. + "\n".. + " - se o dosador estiver no modo de espera\\, um ou mais ingredientes estão faltando\n".. + " - se o dosador estiver no estado bloqueado\\, o tanque ou silo de saída está cheio\\, com defeito ou conectado incorretamente\n".. + "\n".. + "O dosador não precisa de eletricidade. Uma receita é processada a cada 10 s.\n".. + "\n".. + "\n".. + "\n", + "Parte do reator químico. O reator tem um inventário para os itens de catalisador (para receitas de craqueamento e hidrogenação).\n".. + "\n".. + "\n".. + "\n", + "Parte do reator químico. Deve ser colocado no reator. Se isso não funcionar\\, remova o tubo na posição acima e coloque-o novamente.\n".. + "\n".. + "\n".. + "\n", + "Parte do reator químico. Aqui também está a conexão de energia para o reator. O reator requer 8 ku de eletricidade.\n".. + "\n".. + "O suporte tem duas conexões de tubulação\\, à direita para o produto inicial e abaixo para os resíduos\\, como a lama vermelha na produção de alumínio.\n".. + "\n".. + "\n".. + "\n", + "Parte do reator químico. É necessário para a drenagem do produto residual.\n".. + "\n".. + "\n".. + "\n", + "Parte do reator químico. É necessário para armazenar substâncias em forma de pó ou grânulos.\n".. + "\n".. + "\n".. + "\n", + "O controlador ICTA (ICTA significa \"If Condition Then Action\") é usado para monitorar e controlar máquinas. O controlador pode ser usado para ler dados de máquinas e outros blocos e\\, dependendo disso\\, ligar/desligar outras máquinas e blocos.\n".. + "\n".. + "Os dados da máquina são lidos e os blocos e máquinas são controlados por meio de comandos. O capítulo TA3 -> Blocos lógicos/comutação é importante para entender como os comandos funcionam.\n".. + "\n".. + "O controlador requer uma bateria para funcionar. O visor é usado para emitir dados\\, a torre de sinalização para exibir erros.\n".. + "\n".. + "\n".. + "\n", + "O controlador funciona com base nas regras 'IF THEN '. Podem ser criadas até 8 regras por controlador.\n".. + "\n".. + "Exemplos de regras são:\n".. + "\n".. + " - Se um distribuidor estiver \"bloqueado\"\\, o empurrador na frente dele deve ser desligado\n".. + " - Se uma máquina apresentar um erro\\, isso deverá ser mostrado no visor\n".. + "\n".. + "O controlador verifica essas regras ciclicamente. Para fazer isso\\, um tempo de ciclo em segundos (`` Cycle / s '') deve ser especificado para cada regra (1...1000).\n".. + "\n".. + "Para regras que avaliam uma entrada ligada/desligada\\, por exemplo\\, de um interruptor ou detector\\, o tempo de ciclo 0 deve ser especificado. O valor 0 significa que essa regra deve ser sempre executada quando o sinal de entrada for alterado\\, por exemplo\\, quando o botão enviar um novo valor.\n".. + "\n".. + "Todas as regras devem ser executadas apenas com a frequência necessária. Isso tem duas vantagens:\n".. + "\n".. + " - a bateria do controlador dura mais (cada controlador precisa de uma bateria)\n".. + " - a carga do servidor é menor (portanto\\, menos atrasos)\n".. + "\n".. + "Você deve definir um tempo de atraso ('depois/s') para cada ação. Se a ação tiver que ser executada imediatamente\\, deve-se inserir 0.\n".. + "\n".. + "O controlador tem sua própria ajuda e informações sobre todos os comandos por meio do menu do controlador.\n".. + "\n".. + "\n".. + "\n", + "A bateria deve ser colocada bem próxima ao controlador\\, ou seja\\, em uma das 26 posições ao redor do controlador.\n".. + "\n".. + "\n".. + "\n", + "O display mostra seu número após a colocação. O display pode ser endereçado por meio desse número. Os textos podem ser exibidos no visor\\, sendo que o visor pode exibir 5 linhas e\\, portanto\\, 5 textos diferentes.\n".. + "\n".. + "As linhas de texto são sempre alinhadas à esquerda. Se o texto tiver que ser centralizado horizontalmente\\, deverá ser precedido pelo caractere \"t\" (tabulador).\n".. + "\n".. + "O visor é atualizado no máximo uma vez por segundo.\n".. + "\n".. + "\n".. + "\n", + "O TA4 Display XL tem o dobro do tamanho do display TA4.\n".. + "\n".. + "As linhas de texto são sempre alinhadas à esquerda. Se o texto tiver que ser centralizado horizontalmente\\, deverá ser precedido pelo caractere \"t\" (tabulador).\n".. + "\n".. + "O visor é atualizado a cada dois segundos\\, no máximo.\n".. + "\n".. + "\n".. + "\n", + "A torre de sinalização pode exibir vermelho\\, verde e laranja. Não é possível uma combinação das três cores.\n".. + "\n".. + "\n".. + "\n", + "Como o nome sugere\\, o controlador Lua deve ser programado na linguagem de programação Lua. O manual em inglês está disponível aqui:\n".. + "\n".. + "https://github.com/joe7575/techage/blob/master/manuals/ta4_lua_controller_EN.md\n".. + "\n".. + "O controlador Lua também requer uma bateria. A bateria deve ser colocada bem próxima ao controlador\\, ou seja\\, em uma das 26 posições ao redor do controlador.\n".. + "\n".. + "\n".. + "\n", + "O servidor é usado para o armazenamento central de dados de vários controladores Lua. Ele também salva os dados após a reinicialização do servidor.\n".. + "\n".. + "\n".. + "\n", + "A caixa de sensores TA4 é usada para configurar armazéns automáticos ou máquinas de venda automática em conjunto com o controlador Lua.\n".. + "Se algo for colocado na caixa ou removido\\, ou se uma das teclas \"F1\"/\"F2\" for pressionada\\, um sinal de evento será enviado ao controlador Lua.\n".. + "A caixa do sensor suporta os seguintes comandos:\n".. + "\n".. + " - O status da caixa pode ser consultado por meio de 'state = $send_cmnd(\\, \"state\")'. As respostas possíveis são: \"empty\" (vazio)\\, \"loaded\" (carregado)\\, \"full\" (cheio)\n".. + " - A última ação do jogador pode ser consultada por meio de 'name\\, action = $send_cmnd(\\, \"action\")'. 'name' é o nome do jogador. Uma das seguintes opções é retornada como 'action': \"put\"\\, \"take\"\\, \"f1\"\\, \"f2\".\n".. + " - O conteúdo da caixa pode ser lido por meio de 'stacks = $send_cmnd(\\, \"stacks\")'. Consulte: https://github.com/joe7575/techage/blob/master/manuals/ta4_lua_controller_EN.md#sensor-chest\n".. + " - Por meio de '$send_cmnd(\\, \"text\"\\, \"pressione ambos os botões e coloque algo no peito\")'\\, o texto pode ser definido no menu da caixa do sensor.\n".. + "\n".. + "A caixa de seleção \"Allow public chest access\" (Permitir acesso público ao baú) pode ser usada para definir se a caixa pode ser usada por todos ou somente por jogadores que tenham direitos de acesso/proteção aqui.\n".. + "\n".. + "\n".. + "\n", + "O terminal é usado para entrada/saída do controlador Lua.\n".. + "\n".. + "\n".. + "\n", + "", + "Apenas a aparência do botão/chave TA4 foi alterada. A funcionalidade é a mesma do botão/chave TA3. No entanto\\, com o menu da chave inglesa\\, os dados podem ser alterados posteriormente.\n".. + "\n".. + "\n".. + "\n", + "Esse bloco tem dois botões que podem ser configurados individualmente por meio do menu de chave inglesa. A rotulagem e o endereço do bloco de destino podem ser configurados para cada botão. Além disso\\, o comando a ser enviado pode ser configurado para cada botão. \n".. + "\n".. + "\n".. + "\n", + "Esse bloco tem quatro botões que podem ser configurados individualmente por meio do menu de chave inglesa. A rotulagem e o endereço do bloco de destino podem ser configurados para cada botão. Além disso\\, o comando a ser enviado pode ser configurado para cada botão. \n".. + "\n".. + "\n".. + "\n", + "Esse bloco tem duas lâmpadas que podem ser controladas individualmente. Cada lâmpada pode exibir as cores \"vermelho\"\\, \"verde\" e \"âmbar\". A rotulagem de ambas as lâmpadas pode ser configurada por meio do menu de chave inglesa. As lâmpadas podem ser controladas usando os seguintes comandos:\n".. + "\n".. + " - Mudar a lâmpada 1 para vermelho: '$send_cmnd(1234\\, \"red\"\\, 1)'\n".. + " - Mude a lâmpada 2 para verde: '$send_cmnd(1234\\, \"green \"\\, 2)'\n".. + " - Mudar a lâmpada 1 para laranja: '$send_cmnd(1234\\, \"amber\"\\, 1)'\n".. + " - Desligar a lâmpada 2: '$send_cmnd(1234\\, \"off\"\\, 2)'\n".. + "\n".. + "\n".. + "\n", + "Esse bloco tem quatro lâmpadas que podem ser controladas individualmente. Cada lâmpada pode exibir as cores \"vermelho\"\\, \"verde\" e \"âmbar\". A rotulagem de todas as lâmpadas pode ser configurada por meio do menu de chave inglesa. As lâmpadas podem ser controladas usando os seguintes comandos:\n".. + "\n".. + " - Mudar a lâmpada 1 para vermelho: '$send_cmnd(1234\\, \"red\"\\, 1)'\n".. + " - Mude a lâmpada 2 para verde: '$send_cmnd(1234\\, \"green \"\\, 2)'\n".. + " - Mudar a lâmpada 3 para laranja: '$send_cmnd(1234\\, \"amber\"\\, 3)'\n".. + " - Desligar a lâmpada 4: '$send_cmnd(1234\\, \"off\"\\, 4)'\n".. + "\n".. + "\n".. + "\n", + "Apenas a aparência do detector de player TA4 foi alterada. A funcionalidade é a mesma do detector de player TA3.\n".. + "\n".. + "\n".. + "\n", + "\n".. + "\n".. + "O coletor de status consulta todas as máquinas configuradas para obter o status. Se uma das máquinas tiver atingido ou excedido um status pré-configurado\\, um comando \"on\" será enviado. Por exemplo\\, muitas máquinas podem ser facilmente monitoradas quanto a falhas a partir de um controlador Lua.\n".. + "\n", + "A funcionalidade é a mesma do detector TA3. Além disso\\, o detector conta os itens passados adiante.\n".. + "Esse contador pode ser consultado com o comando \"count\" e redefinido com \"reset\".\n".. + "\n".. + "\n".. + "\n", + "A funcionalidade é a mesma do TA3 Node Detector.\n".. + "\n".. + "Ao contrário do detector de nós TA3\\, as posições a serem monitoradas podem ser configuradas individualmente aqui. Para fazer isso\\, o botão \"Record\" (Registrar) deve ser pressionado. Em seguida\\, todos os blocos devem ser clicados\\, cuja posição deve ser verificada. Em seguida\\, o botão \"Done\" (Concluído) deve ser pressionado.\n".. + "\n".. + "Podem ser selecionados até 4 blocos.\n".. + "\n".. + "\n".. + "\n", + "O detector de carga mede o estado de carga do armazenamento de energia da rede elétrica a cada 8 s.\n".. + "\n".. + "Se o valor ficar abaixo de um limite configurável (ponto de comutação)\\, um comando (padrão: \"off\") será enviado. Se o valor subir novamente acima desse ponto de comutação\\, um segundo comando (padrão: \"on\") será enviado. Isso permite que os consumidores sejam desconectados da rede quando o nível de carga do dispositivo de armazenamento de energia cair abaixo do ponto de comutação especificado.\n".. + "\n".. + "Para fazer isso\\, o detector de carga deve ser conectado à rede por meio de uma caixa de junção. O detector de carga é configurado por meio do menu da chave de boca.\n".. + "\n".. + "\n".. + "\n", + "O sensor de olhar TA4 gera um comando quando o bloco é visto/focado pelo proprietário ou por outros jogadores configurados e envia um segundo comando quando o bloco não é mais focalizado. Assim\\, ele substitui os botões/interruptores\\, por exemplo\\, para abrir/fechar portas.\n".. + "\n".. + "O TA4 Gaze Sensor só pode ser programado usando o menu da chave de boca. Se você tiver uma chave de boca na mão\\, o sensor não será acionado\\, mesmo que esteja focalizado.\n".. + "\n".. + "\n".. + "\n", + "Processos inteiros podem ser programados usando o sequenciador TA4. Veja um exemplo:\n".. + "\n".. + " -- este é um comentário\n".. + " \\[1\\] send 1234 a2b\n".. + " \\[30\\] send 1234 b2a\n".. + " \\[60\\] goto 1\n".. + "\n".. + " - Cada linha começa com um número que corresponde a um ponto no tempo '\\[\\]'\n".. + " - São permitidos valores de 1 a 50000 para os tempos\n".. + " - 1 corresponde a 100 ms\\, 50000 corresponde a cerca de 4 dias de jogo\n".. + " - Linhas vazias ou comentários são permitidos ('-- comment')\n".. + " - Com 'send '\\, você pode enviar um comando para um bloco\n".. + " - Com 'goto ' você pode pular para outra linha/ponto no tempo\n".. + " - Com 'stop' você pode parar o sequenciador com um atraso para que ele não receba um novo comando\naceita de um botão ou outro bloco (para concluir um movimento)\nSem 'stop'\\, o sequenciador entra no modo parado imediatamente após o último comando.\n".. + "\n".. + "O sequenciador TA4 suporta os seguintes comandos de tecnologia:\n".. + "\n".. + " - 'goto ' Salta para uma linha de comando e inicia o sequenciador\n".. + " - 'stop' Parar o sequenciador\n".. + " - 'on' e 'off' como aliases para 'goto 1' e 'stop'\n".. + "\n".. + "O comando 'goto' só é aceito quando o sequenciador está parado.\n".. + "\n".. + "O tempo de ciclo (padrão: 100 ms) pode ser alterado para o sequenciador por meio do menu da chave de boca.\n".. + "\n".. + "\n".. + "\n", + "", + "O TA4 Move Controller é semelhante ao \"Door Controller 2\"\\, mas os blocos selecionados não são removidos\\, mas podem ser movidos.\n".. + "Como os blocos móveis podem levar consigo os jogadores e as multidões que estão no bloco\\, é possível construir elevadores e sistemas de transporte semelhantes com eles.\n".. + "\n".. + "Instruções:\n".. + "\n".. + " - Defina o controlador e treine os blocos a serem movidos por meio do menu (até 16 blocos podem ser treinados)\n".. + " - A \"rota de voo\" deve ser inserida por meio de uma especificação x\\, y\\, z (relativa) (a distância máxima (x+y+z) é de 200 m)\n".. + " - O movimento pode ser testado com os botões de menu \"Move A-B\" e \"Move B-A\"\n".. + " - Você também pode voar através de paredes ou outros blocos\n".. + " - A posição de destino dos blocos também pode ser ocupada. Nesse caso\\, os blocos são salvos de forma \"invisível\". Isso se destina a portas deslizantes e similares\n".. + "\n".. + "O Move Controller é compatível com os seguintes comandos de tecnologia:\n".. + "\n".. + " - 'a2b' Mover o bloco de A para B.\n".. + " - 'b2a' Mover o bloco de B para A.\n".. + " - 'move' Mover o bloco para o outro lado\n".. + "\n".. + "Você pode alternar para o modo de operação 'move xyz' por meio do menu de chave inglesa. Após a mudança\\, os seguintes comandos técnicos são suportados: \n".. + "\n".. + " - 'move2' Com o comando\\, a rota de voo também deve ser especificada como um vetor x\\,y\\,z.\nExemplo de controlador Lua: '$send_cmnd(MOVE_CTLR\\, \"move2\"\\, \"0\\,12\\,0\")'\n".. + " - 'reset' move o(s) bloco(s) de volta à posição inicial\n".. + "\n".. + "*Instruções importantes:*\n".. + "\n".. + " - Se vários blocos tiverem de ser movidos\\, o bloco que levará os jogadores/mobs deverá ser clicado primeiro durante o treinamento.\n".. + " - Se o bloco que deve levar os jogadores/móbile tiver uma altura reduzida\\, a altura deverá ser definida no controlador usando o menu de chave de boca aberto (por exemplo\\, altura = 0\\,5). Caso contrário\\, o jogador/móbile não será \"encontrado\" e não será levado embora.\n".. + "\n".. + "\n".. + "\n", + "O controlador de giro do TA4 é semelhante ao \"Move Controller\"\\, mas os blocos selecionados não são movidos\\, mas girados em torno de seu centro para a direita ou para a esquerda.\n".. + "\n".. + "Instruções:\n".. + "\n".. + " - Defina o controlador e treine os blocos a serem movidos por meio do menu (até 16 blocos podem ser treinados)\n".. + " - O movimento pode ser testado com os botões de menu \"Turn left\" (Virar à esquerda) e \"Turn right\" (Virar à direita)\n".. + "\n".. + "O controlador de giro suporta os seguintes comandos de tecnologia:\n".. + "\n".. + " - 'left' Vire à esquerda\n".. + " - 'direita' Vire à direita\n".. + " - 'uturn' Girar 180 graus\n".. + "\n".. + "\n".. + "\n", + "O TA4 contém uma série de lâmpadas potentes que permitem uma melhor iluminação ou a realização de tarefas especiais.\n".. + "\n", + "A lâmpada de cultivo TA4 LED permite o crescimento rápido e vigoroso de todas as plantas do modo 'farming'. A lâmpada ilumina um campo de 3x3\\, de modo que as plantas também podem ser cultivadas no subsolo.\n".. + "A lâmpada deve ser colocada um bloco acima do solo no meio do campo 3x3.\n".. + "\n".. + "A lâmpada também pode ser usada para cultivar flores. Se a lâmpada for colocada sobre um canteiro de flores 3x3 feito de \"Garden Soil\" (Mod 'compost')\\, as flores crescerão automaticamente (acima e abaixo do solo).\n".. + "\n".. + "Você pode colher as flores com o Signs Bot\\, que também tem uma placa correspondente que deve ser colocada na frente do campo de flores.\n".. + "\n".. + "A lâmpada requer 1 ku de eletricidade.\n".. + "\n".. + "\n".. + "\n", + "A lâmpada de rua de LED TA4 é uma lâmpada com iluminação particularmente forte. A lâmpada consiste no compartimento da lâmpada\\, no braço da lâmpada e nos blocos do poste da lâmpada.\n".. + "\n".. + "A corrente deve ser conduzida de baixo para cima\\, através do mastro\\, até o compartimento da lâmpada. Primeiro\\, puxe o cabo de alimentação para cima e\\, em seguida\\, \"engesse\" o cabo de alimentação com blocos de postes de iluminação.\n".. + "\n".. + "A lâmpada requer 1 ku de eletricidade.\n".. + "\n".. + "\n".. + "\n", + "A lâmpada industrial de LED TA4 é uma lâmpada com iluminação particularmente forte. A lâmpada deve ser alimentada por cima.\n".. + "\n".. + "A lâmpada requer 1 ku de eletricidade.\n".. + "\n".. + "\n".. + "\n", + "O filtro de líquidos filtra a lama vermelha.\n".. + "Uma parte da lama vermelha se transforma em soda cáustica\\, que pode ser coletada no fundo de um tanque.\n".. + "A outra parte se transforma em um paralelepípedo do deserto e obstrui o material do filtro.\n".. + "Se o filtro estiver muito entupido\\, ele deverá ser limpo e enchido novamente.\n".. + "O filtro consiste em uma camada de base\\, 7 camadas de filtro idênticas e uma camada de enchimento na parte superior.\n".. + "\n".. + "\n".. + "\n", + "Você pode ver a estrutura dessa camada no plano.\n".. + "\n".. + "A soda cáustica é coletada no tanque.\n".. + "\n".. + "\n".. + "\n", + "Essa camada deve ser preenchida com cascalho\\, conforme mostrado no plano.\n".. + "No total\\, deve haver sete camadas de cascalho.\n".. + "O filtro ficará obstruído com o tempo\\, de modo que precisará ser limpo e preenchido novamente.\n".. + "\n".. + "\n".. + "\n", + "Essa camada é usada para preencher o filtro com lama vermelha.\n".. + "A lama vermelha deve ser bombeada para o tubo de enchimento.\n".. + "\n".. + "\n".. + "\n", + "O Collider é uma instalação de pesquisa que realiza pesquisas básicas. É possível coletar pontos de experiência aqui\\, que são necessários para o TA5 (Future Age).\n".. + "\n".. + "Como seu original no CERN em Genebra\\, o colisor deve ser construído no subsolo. A configuração padrão aqui é Y <= -28. O valor pode\\, no entanto\\, ser alterado pela equipe do servidor por meio da configuração. Pergunte ou tente o bloco \"TA4 Collider Detector Worker\".\n".. + "\n".. + "Somente um colisor pode ser operado por jogador. Portanto\\, não faz sentido configurar dois ou mais colisores. Os pontos de experiência são creditados ao jogador que possui o colisor. Os pontos de experiência não podem ser transferidos.\n".. + "\n".. + "Um colisor consiste em um \"anel\" feito de tubos e ímãs\\, além de um detector com um sistema de resfriamento.\n".. + "\n".. + " - O detector é o coração do sistema. É nele que os experimentos científicos são realizados. O detector tem o tamanho de 3x3x7 blocos.\n".. + " - 22 ímãs do colisor TA4 (não os ímãs do detector do colisor TA4!) devem ser conectados uns aos outros por meio de 5 blocos do tubo de vácuo TA4. Cada ímã também requer eletricidade e uma conexão de gás para resfriamento. O conjunto forma (como mostrado na planta à direita) um quadrado com um comprimento de borda de 37 metros.\n".. + "\n".. + "A planta mostra a instalação vista de cima:\n".. + "\n".. + " - O bloco cinza é o detector com o bloco de trabalho no meio\n".. + " - Os blocos vermelhos são os ímãs\\, os azuis são os tubos de vácuo\n".. + "\n".. + "\n".. + "\n", + "O detector é configurado automaticamente com a ajuda do bloco \"TA4 Collider Detector Worker\" (semelhante à torre). Todos os materiais necessários para isso devem ser colocados primeiro no bloco do trabalhador. O detector é mostrado simbolicamente no bloco do trabalhador. O detector é montado no bloco de trabalho.\n".. + "\n".. + "O detector também pode ser desmontado novamente com a ajuda do bloco de trabalho.\n".. + "\n".. + "As conexões para eletricidade\\, gás e tubos de vácuo estão localizadas nos dois lados frontais do detector. Uma bomba TA4 deve ser conectada na parte superior para sugar o tubo vazio/criar o vácuo.\n".. + "\n".. + "O sistema de resfriamento deve ser conectado à parte traseira do detector. O sistema de resfriamento é mostrado na planta à direita. Além do trocador de calor TA4 da unidade de armazenamento de energia (que é usado aqui para resfriamento)\\, também é necessário um bloco resfriador TA4.\n".. + "\n".. + "Observação: A seta no trocador de calor deve apontar para longe do detector. O trocador de calor também deve ser alimentado com eletricidade.\n".. + "\n".. + "\n".. + "\n".. + " - Além disso\\, é necessário resfriamento\\, que também deve ser instalado no detector. O isobutano é necessário para o resfriamento.\n".. + " - O sistema requer uma quantidade considerável de eletricidade. Portanto\\, faz sentido ter sua própria fonte de alimentação.\n".. + "\n", + "O colisor é controlado por meio de um terminal TA4 (não por meio do terminal do controlador TA4 Lua).\n".. + "\n".. + "Esse terminal deve ser conectado ao detector. O número do detector é exibido como texto informativo no bloco de trabalho.\n".. + "\n".. + "O terminal suporta os seguintes comandos:\n".. + "\n".. + " - 'connect ' (conectar-se ao detector)\n".. + " - 'start' (iniciar o detector)\n".. + " - 'stop' (parar o detector)\n".. + " - 'test ' (verificação de um ímã)\n".. + " - 'points' (consulta dos pontos de experiência já obtidos)\n".. + "\n".. + "Se ocorrer um erro em um ímã durante o 'start'\\, o número do ímã será exibido. O comando 'test' pode ser usado para solicitar mais informações sobre o erro do ímã.\n".. + "\n".. + "\n".. + "\n", + "Cada ímã do Colisor TA4 também deve ser abastecido com eletricidade (conforme mostrado à direita na planta) e com isobutano para resfriamento:\n".. + "\n".. + " - A conexão para a alimentação está na parte superior do ímã.\n".. + " - A conexão para o resfriamento está na parte frontal do ímã.\n".. + " - Uma bomba TA4 e um tanque TA4 com pelo menos 250 unidades de isobutano também são necessários para resfriar todo o sistema.\n".. + " - O sistema também requer muita eletricidade. Portanto\\, faz sentido ter sua própria fonte de alimentação com pelo menos 145 ku.\n".. + "\n".. + "\n".. + "\n", + "A sequência a seguir é recomendada ao configurar o colisor:\n".. + "\n".. + " - Coloque um bloco de carga forçada. Somente o detector com o sistema de resfriamento deve estar na área do bloco de carga forçada.\n".. + " - Defina o bloco de trabalho\\, preencha-o com itens e configure o detector por meio do menu\n".. + " - Construa o anel com tubos e ímãs\n".. + " - Conecte todos os ímãs e o detector com os cabos de alimentação\n".. + " - Conecte todos os ímãs e o detector com os tubos amarelos e bombeie o isobutano no sistema de tubos com uma bomba\n".. + " - Instale uma bomba TA4 como uma bomba de vácuo no detector e ligue-a (não é necessário nenhum tanque adicional). Se a bomba entrar em \"standby\"\\, o vácuo será estabelecido. Isso levará alguns segundos\n".. + " - Monte o resfriador (trocador de calor) e conecte-o ao cabo de alimentação\n".. + " - Coloque o terminal TA4 na frente do detector e conecte-o ao detector por meio de 'connect '\n".. + " - Ligar/conectar a fonte de alimentação\n".. + " - ligar o resfriador (trocador de calor)\n".. + " - Ligue o detector por meio de 'start' no terminal TA4. Após algumas etapas de teste\\, o detector entra em operação normal ou emite um erro.\n".. + " - O colisor precisa ser executado continuamente e\\, em seguida\\, fornece gradualmente pontos de experiência. Para obter 10 pontos\\, o colisor precisa funcionar por algumas horas\n".. + "\n".. + "\n".. + "\n", + "", + "Até 10 receitas podem ser salvas no bloco de receitas. Essas receitas podem então ser chamadas por meio de um comando do TA4 Autocrafter. Isso permite que a receita do autocrafter seja configurada por meio de um comando. As receitas no bloco de receitas também podem ser consultadas diretamente por meio de um comando.\n".. + "\n".. + "'input ' lê uma receita do bloco de receitas do TA4. '' é o número da receita. O bloco retorna uma lista de ingredientes da receita.\n".. + "\n".. + "Exemplo: '$send_cmnd(1234\\, \"input\"\\, 1)'\n".. + "\n".. + " \n".. + "\n", + "A função corresponde à do TA3.\n".. + "\n".. + "A capacidade de processamento é de 4 itens a cada 4 s. O autocrafter requer 9 ku de eletricidade para isso.\n".. + "\n".. + "Além disso\\, o TA4 Autocrafter suporta a seleção de diferentes receitas usando os seguintes comandos:\n".. + "\n".. + "'recipe \".\"' muda o autocrafter para uma receita do bloco de receitas TA4. '' é o número do bloco de receitas\\, '' é o número da receita. Exemplo: '$send_cmnd(1234\\, \"recipe\"\\, \"5467.1\")'\n".. + "\n".. + "Como alternativa\\, uma receita também pode ser selecionada por meio da lista de ingredientes\\, por exemplo:\n".. + "'$send_cmnd(1234\\, \"recipe\"\\, \"default:coal_lump\\,\\,\\,default:stick\")'\n".. + "Todos os nomes técnicos de uma receita devem ser especificados aqui\\, separados por vírgulas. Consulte também o comando 'input' no bloco de receitas do TA4.\n".. + "\n".. + "O comando 'flush' move todos os itens do inventário de entrada para o inventário de saída. O comando retorna 'true' se o inventário de entrada tiver sido completamente esvaziado. Se 'false' for retornado (inventário de saída cheio)\\, o comando deverá ser repetido em um momento posterior.\n".. + "\n".. + " \n".. + "\n", + "Consulte o tanque TA3.\n".. + "\n".. + "Um tanque TA4 pode conter 2.000 unidades ou 200 barris de líquido.\n".. + "\n".. + "\n".. + "\n", + "Consulte a bomba TA3.\n".. + "\n".. + "A bomba TA4 bombeia 8 unidades de líquido a cada dois segundos. \n".. + "\n".. + "No modo \"Flow limiter\" (Limitador de fluxo)\\, o número de unidades bombeadas pela bomba pode ser limitado. O modo de limitador de fluxo pode ser ativado por meio do menu da chave de boca\\, configurando o número de unidades no menu. Quando o número configurado de unidades tiver sido bombeado\\, a bomba será desligada. Quando a bomba for ligada novamente\\, ela bombeará o número configurado de unidades novamente e\\, em seguida\\, será desligada.\n".. + "\n".. + "O limitador de fluxo também pode ser configurado e iniciado usando um controlador Lua ou Beduino.\n".. + "\n".. + "A bomba também é compatível com o comando 'flowrate'. Isso permite que a taxa de fluxo total através da bomba seja consultada.\n".. + "\n".. + "\n".. + "\n", + "Com o TA4\\, o forno industrial também tem seu aquecimento elétrico. O queimador de óleo e o soprador podem ser substituídos pelo aquecedor.\n".. + "\n".. + "O aquecedor requer 14 ku de eletricidade.\n".. + "\n".. + "\n".. + "\n", + "Esse bloco não poderá mais ser fabricado e será substituído pelo bloco de entrada de água TA4. \n".. + "\n", + "Algumas receitas requerem água. A água deve ser bombeada do mar com uma bomba (água em y = 1). Uma \"piscina\" composta de alguns blocos de água não é suficiente para isso! \n".. + "\n".. + "Para fazer isso\\, o bloco de entrada de água deve ser colocado na água e conectado à bomba por meio de tubos. Se o bloco for colocado na água\\, é preciso garantir que haja água sob o bloco (a água deve ter pelo menos 2 blocos de profundidade). \n".. + "\n".. + "\n".. + "\n", + "O TA4 também tem seus próprios tubos no design do TA4. Eles podem ser usados como os tubos padrão.\n".. + "Mas: Os empurradores e distribuidores TA4 só atingem seu desempenho total quando usados com tubos TA4.\n".. + "\n".. + "\n".. + "\n", + "A função corresponde basicamente à do TA2 / TA3. Além disso\\, um menu pode ser usado para configurar quais objetos devem ser retirados de um baú TA4 e transportados posteriormente.\n".. + "A capacidade de processamento é de 12 itens a cada 2 s\\, se forem usados tubos TA4 em ambos os lados. Caso contrário\\, haverá apenas 6 itens a cada 2 s.\n".. + "\n".. + "No modo \"limitador de fluxo\"\\, o número de itens que são movidos pelo empurrador pode ser limitado. O modo limitador de fluxo pode ser ativado por meio do menu da chave de boca\\, configurando o número de itens no menu. Assim que o número configurado de itens tiver sido movido\\, o empurrador se desliga. Se o empurrador for ligado novamente\\, ele moverá o número configurado de itens novamente e depois se desligará.\n".. + "\n".. + "O empurrador TA4 também pode ser configurado e iniciado usando um controlador Lua ou Beduino.\n".. + "\n".. + "Aqui estão os comandos adicionais para o controlador Lua:\n".. + "\n".. + " - O 'config' é usado para configurar o empurrador\\, de forma análoga à configuração manual por meio do menu.\n Exemplo: '$send_cmnd(1234\\, \"config\"\\, \"default:dirt\")'\n Com '$send_cmnd(1234\\, \"config\"\\, \"\")'\\, a configuração é excluída\n".. + " - 'limit' é usado para definir o número de itens para o modo de limitador de fluxo:\n Exemplo: '$send_cmnd(1234\\, \"init\"\\, 7)'\n".. + "\n".. + "\n".. + "\n", + "A função corresponde à do TA3. O baú pode conter mais conteúdo.\n".. + "\n".. + "Além disso\\, o baú do TA4 tem um shadow inventory para configuração. Aqui\\, determinados locais de pilha podem ser pré-atribuídos a um item. As pilhas de inventário pré-atribuídas só são preenchidas com esses itens durante o preenchimento. É necessário um empurrador ou injetor TA4 com a configuração apropriada para esvaziar as pilhas de inventário pré-atribuídas.\n".. + "\n".. + "\n".. + "\n", + "O baú TA4 8x2000 não tem um inventário normal como os outros baús\\, mas tem 8 lojas\\, sendo que cada loja pode armazenar até 2.000 itens de um tipo. Os botões laranja podem ser usados para mover itens de ou para a loja. A caixa também pode ser preenchida ou esvaziada com um empurrador (TA2\\, TA3 ou TA4) como de costume.\n".. + "\n".. + "Se o baú for preenchido com um empurrador\\, todos os depósitos serão preenchidos da esquerda para a direita. Se todos os 8 depósitos estiverem cheios e nenhum outro item puder ser adicionado\\, os itens adicionais serão rejeitados.\n".. + "\n".. + "*Função de linha*\n".. + "\n".. + "Vários baús TA4 8x2000 podem ser conectados a um baú grande com mais conteúdo. Para fazer isso\\, os baús devem ser colocados em uma fileira\\, um após o outro.\n".. + "\n".. + "Primeiro\\, o baú da frente deve ser colocado e\\, em seguida\\, os baús empilhados são colocados atrás com a mesma direção de visão (todas as caixas têm a frente voltada para o jogador). Com 2 baús em uma fileira\\, o tamanho aumenta para 8x4000\\, etc.\n".. + "\n".. + "As fileiras de baús não podem mais ser removidas. Há duas maneiras de desmontar os baús:\n".. + "\n".. + " - Esvazie e remova o baú da frente. Isso desbloqueia o próximo baú e pode ser removido.\n".. + " - Esvazie o baú da frente até o ponto em que todas as lojas contenham no máximo 2.000 itens. Isso desbloqueia o próximo baú e pode ser removido.\n".. + "\n".. + "Os baús têm uma caixa de seleção de \"pedido\". Se essa caixa de seleção for ativada\\, os depósitos não serão mais completamente esvaziados por um empurrador. O último item permanece no depósito como padrão. Isso resulta em uma atribuição fixa de itens aos locais de armazenamento.\n".. + "\n".. + "O baú só pode ser usado por jogadores que podem construir nesse local\\, ou seja\\, que têm direitos de proteção. Não importa quem coloca o baú.\n".. + "\n".. + "O baú tem um comando adicional para o controlador Lua:\n".. + "\n".. + " - 'count' é usado para solicitar quantos itens estão no baú.\nExemplo 1: '$send_cmnd(CHEST\\, \"count\")' -> Soma dos itens em todas as 8 lojas\nExemplo 2: '$send_cmnd(CHEST\\, \"count\"\\, 2)' -> número de itens na loja 2 (segunda a partir da esquerda)\n".. + " - 'storesize' é usado para ler o tamanho de um dos oito armazenamentos:\nExemplo: '$send_cmnd(CHEST\\, \"storesize\")' -> a função retorna\\, por exemplo\\, 6000\n".. + "\n".. + "\n".. + "\n", + "A função corresponde à do TA2.\n".. + "A capacidade de processamento é de 24 itens a cada 4 s\\, desde que os tubos TA4 sejam usados em todos os lados. Caso contrário\\, haverá apenas 12 itens a cada 4 s.\n".. + "\n".. + "\n".. + "\n", + "A função corresponde à do distribuidor TA4 normal\\, com duas diferenças:\n".. + "A capacidade de processamento é de 36 itens a cada 4 s\\, desde que os tubos TA4 sejam usados em todos os lados. Caso contrário\\, haverá apenas 18 itens a cada 4 s.\n".. + "Além disso\\, até 8 itens podem ser configurados por direção.\n".. + "\n".. + "\n".. + "\n", + "A função corresponde à do TA2.\n".. + "A capacidade de processamento é de 4 itens a cada 4 s. O bloco requer 5 ku de eletricidade.\n".. + "\n".. + "\n".. + "\n", + "A função corresponde à do TA2.\n".. + "A capacidade de processamento é de 4 itens a cada 4 s. O bloco requer 9 ku de eletricidade.\n".. + "\n".. + "\n".. + "\n", + "A função corresponde em grande parte à do TA2.\n".. + "\n".. + "Além disso\\, o tamanho do furo pode ser definido entre blocos de 3x3 e 11x11.\n".. + "A profundidade máxima é de 80 metros. A pedreira requer 14 ku de eletricidade.\n".. + "\n".. + "\n".. + "\n", + "A função corresponde à do TA2\\, apenas chips diferentes são produzidos aqui.\n".. + "A capacidade de processamento é de um chip a cada 6 s. O bloco requer 12 ku de eletricidade para isso.\n".. + "\n".. + "\n".. + "\n", + "A função corresponde à do TA3.\n".. + "\n".. + "O poder de processamento é de até 8 vezes quatro itens a cada 4 segundos.\n".. + "\n".. + "\n".. + "\n", + "O reciclador é uma máquina que processa todas as receitas de Techage de trás para frente\\, ou seja\\, pode desmontar máquinas e blocos e transformá-los em seus componentes. \n".. + "\n".. + "A máquina pode desmontar praticamente todos os blocos da Techage e do Hyperloop. Mas nem todos os itens/materiais da receita podem ser reciclados:\n".. + "\n".. + " - A madeira se transforma em gravetos\n".. + " - A pedra se transforma em areia ou cascalho\n".. + " - Os semicondutores/chips não podem ser reciclados\n".. + " - As ferramentas não podem ser recicladas\n".. + "\n".. + "A capacidade de processamento é de um item a cada 8 s. O bloco requer 16 ku de eletricidade para isso.\n".. + "\n".. + " \n".. + "\n", + }, + images = { + "techage_ta4", + "", + "ta4_windturbine", + "ta4_nacelle", + "ta4_blinklamp", + "ta4_pillar", + "", + "ta4_solarmodule", + "ta4_solarcarrier", + "ta4_solar_inverter", + "ta4_powercable", + "ta4_powerbox", + "ta4_minicell", + "", + "ta4_heatexchanger", + "ta4_turbine", + "ta4_generator", + "ta4_pipeinlet", + "ta4_pipe", + "ta4_transformer", + "ta4_transformer", + "ta4_electricmeter", + "ta4_laser", + "ta4_hydrogen", + "ta4_electrolyzer", + "ta4_fuelcell", + "", + "ta4_doser", + "ta4_reactor", + "ta4_fillerpipe", + "ta4_reactorstand", + "ta4_reactorbase", + "ta4_silo", + "ta4_icta_controller", + "ta4_icta_controller", + "ta4_battery", + "ta4_display", + "ta4_displayXL", + "ta4_signaltower", + "ta4_lua_controller", + "ta4_lua_server", + "ta4_sensor_chest", + "ta4_terminal", + "", + "ta4_button", + "ta4_button_2x", + "ta4_button_4x", + "ta4_signallamp_2x", + "ta4_signallamp_4x", + "ta4_playerdetector", + "ta4_collector", + "ta4_detector", + "ta4_nodedetector", + "ta4_chargedetector", + "ta4_gaze_sensor", + "ta4_sequencer", + "", + "ta4_movecontroller", + "ta4_turncontroller", + "", + "ta4_growlight", + "ta4_streetlamp", + "ta4_industriallamp", + "ta4_liquid_filter", + "", + "", + "", + "", + "", + "ta4_terminal", + "", + "techage_ta4c", + "", + "ta4_recipeblock", + "ta4_autocrafter", + "ta4_tank", + "ta4_pump", + "ta4_furnaceheater", + "", + "ta4_waterinlet", + "ta4_tube", + "ta4_pusher", + "ta4_chest", + "ta4_8x2000_chest", + "ta4_distributor", + "ta4_high_performance_distributor", + "ta4_gravelsieve", + "ta4_grinder", + "ta4_quarry", + "ta4_electronicfab", + "ta4_injector", + "ta4_recycler", + }, + plans = { + "", + "ta4_windturbine", + "", + "", + "", + "", + "ta4_solarplant", + "", + "", + "", + "", + "", + "", + "ta4_storagesystem", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "ta4_reactor", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "ta4_liquid_filter_base", + "ta4_liquid_filter_gravel", + "ta4_liquid_filter_top", + "techage_collider_plan", + "ta4_cooler", + "", + "techage_collider_plan2", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } +} \ No newline at end of file diff --git a/techage/doc/manual_ta5_pt-BR.lua b/techage/doc/manual_ta5_pt-BR.lua new file mode 100644 index 0000000..a46e082 --- /dev/null +++ b/techage/doc/manual_ta5_pt-BR.lua @@ -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", + "", + "", + "", + "", + "", + "", + "", + } +} \ No newline at end of file diff --git a/techage/doc/plans.lua b/techage/doc/plans.lua index 4a4991e..c242541 100644 --- a/techage/doc/plans.lua +++ b/techage/doc/plans.lua @@ -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 diff --git a/techage/energy_storage/heatexchanger2.lua b/techage/energy_storage/heatexchanger2.lua index 4aee1a9..cfa854e 100644 --- a/techage/energy_storage/heatexchanger2.lua +++ b/techage/energy_storage/heatexchanger2.lua @@ -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") diff --git a/techage/furnace/firebox.lua b/techage/furnace/firebox.lua index f4d54b6..608df67 100644 --- a/techage/furnace/firebox.lua +++ b/techage/furnace/firebox.lua @@ -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") diff --git a/techage/furnace/furnace_top.lua b/techage/furnace/furnace_top.lua index b1c8aff..1838088 100644 --- a/techage/furnace/furnace_top.lua +++ b/techage/furnace/furnace_top.lua @@ -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}, diff --git a/techage/fusion_reactor/ta5_pump.lua b/techage/fusion_reactor/ta5_pump.lua index f054f5c..9a8a299 100644 --- a/techage/fusion_reactor/ta5_pump.lua +++ b/techage/fusion_reactor/ta5_pump.lua @@ -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 diff --git a/techage/icta_controller/controller.lua b/techage/icta_controller/controller.lua index 6c75af8..e076354 100644 --- a/techage/icta_controller/controller.lua +++ b/techage/icta_controller/controller.lua @@ -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, diff --git a/techage/init.lua b/techage/init.lua index b0d2009..1dfd234 100644 --- a/techage/init.lua +++ b/techage/init.lua @@ -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") diff --git a/techage/items/aluminium.lua b/techage/items/aluminium.lua index c75381b..0c34069 100644 --- a/techage/items/aluminium.lua +++ b/techage/items/aluminium.lua @@ -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 diff --git a/techage/items/salt.lua b/techage/items/salt.lua new file mode 100644 index 0000000..7a401fa --- /dev/null +++ b/techage/items/salt.lua @@ -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) diff --git a/techage/lamps/growlight.lua b/techage/lamps/growlight.lua index 23b938f..c592eb6 100644 --- a/techage/lamps/growlight.lua +++ b/techage/lamps/growlight.lua @@ -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) diff --git a/techage/liquids/silo.lua b/techage/liquids/silo.lua index 254b246..b18c367 100644 --- a/techage/liquids/silo.lua +++ b/techage/liquids/silo.lua @@ -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) diff --git a/techage/locale/techage.de.tr b/techage/locale/techage.de.tr index 877eb37..b2cb77d 100644 --- a/techage/locale/techage.de.tr +++ b/techage/locale/techage.de.tr @@ -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 diff --git a/techage/locale/techage.fr.tr b/techage/locale/techage.fr.tr new file mode 100644 index 0000000..d4ad8fa --- /dev/null +++ b/techage/locale/techage.fr.tr @@ -0,0 +1,1602 @@ +# textdomain: techage + + + +### akkubox.lua ### + +TA3 Accu Box=TA3 Boite Accu + +### aluminium.lua ### + +Aluminum=Aluminium +Gibbsite Powder=Poudre Gibbsite +Red Mud=Boue rouge +Red Mud Barrel=Baril de boue rouge +Red Mud Canister=Bidon de boue rouge + +### assemble.lua ### +### firebox_lib.lua ### + +[TA] Area is protected!=[TA] La zone est protégée! +[TA] Not enough space!=[TA] Pas assez de place! + +### assembly_tool.lua ### + +TechAge Assembly Tool= + +### autocrafter.lua ### + +Autocrafter=Crafteur Automatique + +### axle2power.lua ### + +TA2 Power Generator=Générateur d'électricité TA2 + +### baborium.lua ### + +Baborium Ingot=Lingot de Baborium +Baborium Lump=Morceau de Baborium +Baborium Ore=Minerai de Baborium + +### barrel.lua ### + +Gas Cylinder Large=Cylindre à gaz de grande taille +Gas Cylinder Small=Cylindre à gaz de petite taille +River Water Barrel=Baril d'eau de rivière +TA Empty Barrel=TA Baril vide +TA3 Canister=TA3 Bidon +Water=Eau +Water Barrel=Baril d'eau +empty=vide + +### basalt.lua ### + +Basalt Cobble=Pavé de basalte +Basalt Glass=Verre de basalte +Basalt Glass 2=Verre de basalte 2 +Basalt Glass Thin=Verre de basalte mince +Basalt Glass Thin 2=Verre de basalte mince 2 +Basalt Glass Thin XL=Verre de basalte mince XL +Basalt Glass Thin XL 2=Verre de basalte mince XL 2 +Basalt Gravel=Gravier de basalte +Basalt Stone=Pierre de basalte +Basalt Stone Block=Bloc de pierre de basalte +Basalt Stone Brick=Brique de pierre de basalte +Sieved Basalt Gravel=Gravier de basalte tamisé + +### battery.lua ### + +Battery=Batterie +Coal Equivalents=Équivalents charbon +Digtron Battery=Batterie de Digtron + +### battery.lua ### +### storage.lua ### + +Load=Charger + +### bauxit.lua ### + +Bauxite Cobblestone=Pavé de bauxite +Bauxite Gravel=Gravier de bauxite +Bauxite Powder=Poudre de bauxite +Bauxite Stone=Pierre de bauxite + +### blackhole.lua ### + +TechAge Black Hole=TechAge Trou Noir +TechAge Black Hole (let items and liquids disappear)=TechAge Trou Noir ( laissez les objets et les liquides disparaître) + +### boiler.lua ### + +TA2 Boiler Base=TA2 Base de chaudière +TA2 Boiler Top=TA2 Chaudière du haut + +### boiler_base.lua ### + +TA3 Boiler Base=TA3 Base de chaudière + +### boiler_lib.lua ### + +To add water punch@nthe boiler@nwith a water bucket=Pour ajouter de l'eau percuter@la chaudière@avec un seau d'eau +Water Boiler=Chaudière à eau + +### boiler_lib.lua ### +### heatexchanger2.lua ### + +water temperature=température de l'eau + +### boiler_top.lua ### + +TA3 Boiler Top=TA3 Chaudière du haut + +### booster.lua ### + +TA3 Booster=TA3 Amplificateur + +### button.lua ### + +Access:= +Button or switch= +Change the block name (infotext)= +Command to be sent= +Infotext= +TA3 Button/Switch=Bouton/interrupteur TA3 +TA4 Button/Switch=Bouton/interrupteur TA4 + +### button.lua ### +### button_2x.lua ### +### button_4x.lua ### + +Access= +Button protection= +Type= + +### button.lua ### +### button_2x.lua ### +### button_4x.lua ### +### charge_detector.lua ### +### gaze_sensor.lua ### +### player_detector.lua ### + +Command= +Number= + +### button.lua ### +### cart_detector.lua ### +### command_converter.lua ### +### detector.lua ### +### flipflop.lua ### +### light_detector.lua ### +### lua_logic.lua ### +### mesecons_converter.lua ### +### node_detector.lua ### +### player_detector.lua ### +### repeater.lua ### + +Insert destination node number(s)=Insérer le numéro de destination du nœud (s) + +### button.lua ### +### chest.lua ### +### command_converter.lua ### +### detector.lua ### +### doorcontroller.lua ### +### flipflop.lua ### +### mesecons_converter.lua ### +### repeater.lua ### +### sequencer2.lua ### +### submenu.lua ### + +Save=Sauvegarder + +### button.lua ### +### gaze_sensor.lua ### + +Destination block number(s)= + +### button_2x.lua ### + +TA4 2x Button= + +### button_2x.lua ### +### button_4x.lua ### + +Command to be sent (ignored for switches)= +Label for the button= +Momentary button or on/off switch= + +### button_2x.lua ### +### button_4x.lua ### +### charge_detector.lua ### +### player_detector.lua ### + +Destination block number= + +### button_2x.lua ### +### button_4x.lua ### +### signallamp_2x.lua ### +### signallamp_4x.lua ### + +Label= + +### button_4x.lua ### + +TA4 4x Button= + +### cart_detector.lua ### + +TA3 Cart Detector=Détecteur de chariot TA3 + +### cart_detector.lua ### +### light_detector.lua ### +### node_detector.lua ### + +accept=accepter + +### cart_detector.lua ### +### player_detector.lua ### + +TA3 Player Detector=Détecteur de joueur TA3 + +### ceilinglamp.lua ### + +TA Ceiling Lamp=TA Lampe de plafond + +### cement.lua ### + +Cement Block=Bloc de ciment +Cement Powder=Poudre de ciment + +### ceramic.lua ### + +TA4 Ceramic Material= +TA4 Furnace Ceramic= +TA4 Round Ceramic= +TA5 Ceramic Turbine= + +### charcoalpile.lua ### + +Dirt with Ash=Saleté avec cendre +TA1 Charcoal=TA1 Charbon de bois + +### charge_detector.lua ### + +Command to send when the energy storage charge@nlevel falls below the specified switch point= +Command to send when the energy storage charge@nlevel rises above the specified switch point= +Storage charge level switch point= +Switch point= +TA4 Energy Storage Charge Detector= + +### chest.lua ### + +Allow public access to the chest=Autoriser l'accès public au coffre +Inventory,Pre-Assignment,Config=Inventaire, Présélection, Configuration +Node label:=Étiquette du nœud : +TA2 Protected Chest=TA2 Coffre protégé +TA3 Protected Chest=TA3 Coffre protégé +TA4 Protected Chest=TA4 Coffre protégé + +### chest_cart.lua ### + +TA Chest Cart=TA Coffre de chariot + +### coalburner.lua ### + +Ash=Cendres + +### collector.lua ### + +Node number to send the events to=numéro de nœud pour envoyer les événements à +Node numbers to read the states from=numéros de noeud à lire les états de +Send an event if state is equal or larger than=Envoyer un événement si l'état est égal ou supérieur à +TA4 State Collector=Collecteur d'état TA4 + +### command_converter.lua ### + +Receive= +Send delay (s)= +Sent command= +TA3 Command Converter= + +### concentrator.lua ### + +TA4 Tube Concentrator= +Tube Concentrator= + +### controller.lua ### + +Cooling failed= +Magnet detection error@n(@1% found / 100% expected)= +Nucleus detection error= +Plasma ring shape error= +Shell shape error@n(@1% found / 100% expected)= +TA5 Fusion Reactor Controller= + +### controller.lua ### +### heatexchanger2.lua ### + +No power= + +### cooking.lua ### + +TA3 Melting=TA3 Fonte + +### cooler.lua ### + +TA3 Cooler=TA3 Refroidisseur +TA4 Collider Cooler= + +### counting.lua ### + +Your current value is= +[techage] The limit for 'number of commands per minute' has been exceeded.= +is allowed= +is allowed. Current value is= +per minute= + +### cylinder.lua ### + +TA2 Cylinder=Cylindre TA2 + +### detector.lua ### + +Counts down the number of items passed through@nand only triggers an 'on' command when it reaches zero.= +Current countdown= +Current countdown value.= +TA4 Collider Detector= +TA4 Collider Detector Core= +TA4 Detector=Détecteur TA4 + +### detector.lua ### +### electricmeter.lua ### + +Countdown= + +### detector.lua ### +### logic_block.lua ### +### tele.lua ### + +Blocking Time= + +### detector.lua ### +### tele.lua ### + +Configured Items= +Items which generate an 'on' command.@nIf empty, all passed items generate an 'on' command.= +On Time= +TA3 Detector=Détecteur TA3 +The time after the 'off' command@nuntil the next 'on' command is accepted.= +The time between the 'on' and 'off' commands.= + +### display.lua ### + +Display no: =Afficher n° : +TA4 Display=Affichage TA4 +TA4 Display XL=Affichage TA4 XL + +### distiller.lua ### + +TA3 Distillation Tower 1=TA3 Tour de distillation 1 +TA3 Distillation Tower 2=TA3 Tour de distillation 2 +TA3 Distillation Tower 3=TA3 Tour de distillation 3 +TA3 Distillation Tower 4=TA3 Tour de distillation 4 +TA3 Distillation Tower Base=Base de la tour de distillation TA3 + +### distributor.lua ### + +Block configured items for open ports=Bloquer les éléments configurés pour les ports ouverts +Distributor=Distributeur +High Performance Distributor=Distributeur haute performance +Input=Entrée +blocking mode=mode de blocage + +### doorblock.lua ### + +TechAge Door Block=Bloc de porte TechAge + +### doorcontroller.lua ### + +Insert door/gate block number(s)=Insérer le numéro de porte(s) +TA3 Door Controller=TA3 Contrôleur de porte + +### doorcontroller2.lua ### + +Blocks exchanged= +Blocks reset= +Click on all the blocks that are part of the door/gate=Cliquez sur tous les blocs qui font partie de la porte/du portail +Ctrl,Inv=Ctrl,Inv +Exchange= +TA3 Door Controller II=TA3 Contrôleur de porte II +with door sound= + +### doorcontroller2.lua ### +### flycontroller.lua ### +### movecontroller.lua ### +### node_detector.lua ### +### turncontroller.lua ### + +Done=Terminé +Record=Enregistrer +block positions are stored.=Les positions des blocs sont enregistrées. + +### doorcontroller2.lua ### +### flycontroller.lua ### +### movecontroller.lua ### +### turncontroller.lua ### + +Recording...=Enregistrement... + +### doorcontroller2.lua ### +### movecontroller.lua ### + +Reset= + +### drillbox.lua ### + +Build derrick=Construire le derrick +Depth=Profondeur +Drill Bit=Mèche de forage +Drill area is protected=La zone de forage est protégée +Drill bits missing=Mèches de forage manquantes +Oil Drill Box=Boîte de forage pétrolier +Remove derrick=Retirer le derrick +item output blocked=sortie d'article bloquée + +### drive_axle.lua ### + +TA2 Drive Axle=Axe d'entraînement TA2 + +### electric_cable.lua ### + +TA Electric Cable=TA Câble électrique + +### electricmeter.lua ### + +Amount of power to be provided before the device turns off= +Consumption= +Power countdown= +TA4 Electric Meter= + +### electricmeter.lua ### +### formspecs.lua ### +### transformer.lua ### + +Power= + +### electricmeter.lua ### +### transformer.lua ### + +Max. power= +Maximum power passed through= + +### electrolyzer.lua ### + +Configurable value@nfor the current limit= +Current limitation= +Electrolyzer=Électrolyseur +If the charge of the storage@nsystem falls below the configured value,@nthe block switches off= +Maximum possible@ncurrent consumption= +Maximum power consumption [ku]= +Storage full= +TA4 Electrolyzer= +Turnoff point= +Turnoff point reached= + +### electrolyzer.lua ### +### fuelcell.lua ### +### tiny_generator.lua ### + +Electricity=Électricité + +### electronic.lua ### + +TA3 Vacuum Tube=Tube à vide TA3 +TA4 LEDs=TA4 DEL +TA4 RAM Chip=Puce RAM TA4 +TA4 WLAN Chip=Puce WLAN TA4 +TA5 AI Chip= +TA5 AI Chip II= +WLAN Chip=Puce WLAN + +### electronic_fab.lua ### + +Electronic Fab=Fab électronique +TA2 Ele Fab= +TA3 Ele Fab= +TA4 Ele Fab= + +### end_wrench.lua ### + +Biome= +Node owner= +Position= +Position temperature= +Pump connected to no/empty tank(s).= +Pump connected to tank(s) with: @1= +TechAge Info Tool (use @= read status info)= + +### end_wrench.lua ### +### meltingpot.lua ### + +Time= + +### epoxy.lua ### + +Epoxide Resin=Résine d'époxyde +Epoxide Resin Barrel=Baril de résine d'époxyde +Epoxide Resin Canister=Résine époxyde en bidon + +### explore.lua ### + +Oil=Pétrole +TA3 Oil Explorer=TA3 Explorateur de pétrole +TA3 Oil Storage=TA3 Entreposage du pétrole +depth= + +### filler.lua ### + +Liquid Filler= +TA Liquid Filler=TA Remplisseur liquide + +### firebox.lua ### + +TA2 Firebox= +TA3 Coal Power Station Firebox= +TA3 Furnace Oil Burner= +TA3 Power Station Firebox= + +### firebox_lib.lua ### + +Firebox= + +### flipflop.lua ### + +TA3 Flip-Flop= + +### fly_lib.lua ### + +Destination position is protected= +Error: Max. length of the flight route exceeded by @1 blocks !!= +No valid destination position= +No valid node at the start position= +No valid start position= +Running= +Start position is protected= +Stopped= + +### fly_lib.lua ### +### flycontroller.lua ### + +Error: Invalid path !!= + +### flycontroller.lua ### + +Error: Recording is missing !!= +Flight route (A to B)= +Move a player without moving blocks= +See chat output= +TA5 Fly Controller= +Teleport mode= +Test= +[TA4 Fly Controller] Invalid path!= +[TA4 Fly Controller] Recording is missing!= + +### flycontroller.lua ### +### logic_block.lua ### +### lua_logic.lua ### +### movecontroller.lua ### + +Store= + +### flycontroller.lua ### +### movecontroller.lua ### + +Click on all blocks that shall be moved= +Maximum Speed= +Maximum speed for moving blocks= +Move= +Move A-B= +Move B-A= +Move block height= +Object offset= +Stored= +Value in the range of 0.0 to 1.0= +Y-offset for non-player objects like vehicles (-0.5 to 0.5)= + +### flywheel.lua ### + +Flywheel=La roue motrice +TA2 Flywheel=La roue motrice TA2 + +### forceload.lua ### + +Area already loaded or max. number of Forceload Blocks reached!=Zone déjà chargée ou nombre maximum de Forceload atteint! +Area from= +Area to= +Block at pos= +List of your Forceload Blocks:=Liste de vos blocs de forceload : +Punch the block to make the area visible.=Frappez le bloc pour rendre la zone visible. +Show all forceload blocks in a 64x64x64 range=Afficher tous les blocs de forceload dans une zone de 64x64x64 +Techage Forceload Block=Bloc de Forceload Techage +Techage Forceload Tile=Tuile de Forceload Techage +loaded=chargé + +### formspecs.lua ### + +Block has a wrench menu= +Charge termination= +Current output [ku]= +Maximum output [ku]= +Range in which the generator reduces its power= +The current power the generator provides= +The maximum power the generator can provide= + +### formspecs.lua ### +### power_terminal2.lua ### + +Charging= + +### formspecs.lua ### +### power_terminal2.lua ### +### storage.lua ### +### transformer.lua ### + +Storage= + +### fuel_lib.lua ### + +Fuel Menu=Menu Carburant +To add fuel punch@nthis block@nwith a fuel container= + +### fuelcell.lua ### + +Fuel Cell=Cellules à combustible +TA4 Fuel Cell=Cellules à combustible TA4 +no hydrogen= + +### fuelcellstack.lua ### + +TA4 Fuel Cell Stack=Empilement de cellules à combustible TA4 + +### furnace_top.lua ### + +Furnace Top=Haut du fourneau +Outp= +no fuel or no power=pas de carburant ou pas d'électricité + +### gas_pipe.lua ### + +TA5 Junction Pipe= +TA5 Pipe= + +### gateblock.lua ### + +TechAge Gate Block=Bloc de porte TechAge + +### gaze_sensor.lua ### + +Command to send when sensor is no longer viewed= +Command to send when sensor is viewed= +Input the player name(s) separated by blanks.@nIf empty, only the owner is accepted.= +Player Names= +TA4 Gaze Sensor= + +### gearbox.lua ### + +TA2 Gearbox=Boîte de vitesses TA2 + +### generator.lua ### + +TA3 Generator=Générateur TA3 +TA4 Generator=Générateur TA4 +TA5 Generator= +no steam= + +### generator.lua ### +### power_terminal2.lua ### + +Generator=Générateur + +### gravelrinser.lua ### + +Gravel Rinser=Rinceur de gravier +Rinsing=Rinçage + +### gravelsieve.lua ### + +Compressed Gravel=Gravier compressé +Gravel Sieve=Tamis à gravier +Sieved Gravel=Gravier tamisé +TA1 Gravel Sieve=Tamis à gravier TA1 +TA2 Gravel Sieve=Tamis à gravier TA2 +TA3 Gravel Sieve=Tamis à gravier TA3 +TA4 Gravel Sieve=Tamis à gravier TA4 + +### grinder.lua ### + +Grinder=Broyeur +Grinding=Broyage +Milling= +TA1 Mill Base= + +### growlight.lua ### + +TA4 LED Grow Light=Lumière a DEL pour culture TA4 + +### hammer.lua ### + +TA1 Bronze Hammer (smash stone to gravel)= +TA1 Diamond Hammer (smash stone to gravel)= +TA1 Meridium Hammer (smash stone to gravel)= +TA1 Mese Hammer (smash stone to gravel)= +TA1 Steel Hammer (smash stone to gravel)= +TA1 Stone Hammer (smash stone to gravel)= + +### heater.lua ### + +TA4 Furnace Heater= + +### heatexchanger1.lua ### + +TA4 Heat Exchanger 1= +TA5 Heat Exchanger 1= + +### heatexchanger2.lua ### + + Error!= +Blue pipe connection error@n(@1 found / @2 expected)= +Blue pipe coolant missing@n(@1 found / @2 expected)= +Cooler error= +Green pipe connection error@n(@1 found / @2 expected)= +Green pipe coolant missing@n(@1 found / @2 expected)= +Power network connection error= +TA4 Heat Exchanger= +TA4 Heat Exchanger 2= +TA5 Heat Exchanger 2= +Turbine error= +did you check the plan?= +inlet/pipe error= +wrong storage diameter= + +### heatexchanger3.lua ### + +TA4 Heat Exchanger 3= +TA5 Heat Exchanger 3= + +### hydrogen.lua ### + +Hydrogen Cylinder Large= +Hydrogen Cylinder Small= +TA4 Hydrogen= + +### hyperloop.lua ### +### sensorchest.lua ### +### teleport.lua ### + +not connected= + +### hyperloop.lua ### +### teleport.lua ### + +Block name= +Connection name for this block= +Connection name of the remote block= +Enter a block name or select an existing one= +Remote name= +connected to= + +### industriallamp1.lua ### + +TA Industrial Lamp 1= + +### industriallamp2.lua ### + +TA Industrial Lamp 2= + +### industriallamp3.lua ### + +TA Industrial Lamp 3= + +### industriallamp4.lua ### + +TA4 LED Industrial Lamp= + +### inlet.lua ### + +TA4 Pipe Inlet= +one window maximum= +wrong diameter (should be 5, 7, or 9)= +wrong number of gravel nodes= +wrong number of shell nodes= + +### inlets.lua ### + +TA4 Collider Cable Input= +TA4 Collider Pipe Input= +TA4 Collider Pipe Output= +TA4 Collider Tube Input= + +### inverter.lua ### + +Inverter= +Power AC= +Power DC= +TA4 Solar Inverter= +no solar power= +solar network error= + +### junctionbox.lua ### + +TA Electric Junction Box= + +### lampholder.lua ### + +TA Lamp Holder Acacia= +TA Lamp Holder Apple= +TA Lamp Holder Aspen= +TA Lamp Holder Copper= +TA Lamp Holder Gold= +TA Lamp Holder White= + +### laser.lua ### + +Laser beam error!= +TA4 Laser Beam Emitter= +TA4 Laser Beam Receiver= +Valid destination positions:= +to= + +### lib.lua ### + +Block has an@nadditional wrench menu= + +### lib.lua ### +### sensorchest.lua ### + +connected with= + +### light_detector.lua ### + +Send signal if light level is above:= +TA3 Light Detector= + +### lighter.lua ### + +TA1 Lighter= + +### liquid_lib.lua ### + +Allow public access to the tank= +Liquid Tank= +To add liquids punch@nthe tank@nwith a liquid container= + +### liquid_lib.lua ### +### ta4_chest.lua ### + +keep assignment=garder l'affectation + +### liquid_pipe.lua ### + +TA Junction Pipe= +TA Pipe= + +### liquidsampler.lua ### + +Liquid Sampler= + +### liquidsampler.lua ### +### waterpump.lua ### + +no usable water= + +### logic_block.lua ### + +'me' has to be used for the own block number.@n= +'~@=' means: not equal@n= +@n is a boolean expression@nwhere input numbers are evaluated.@n= +@n is the block number to which the@ncommand should be sent.@n= +@nAll rules are checked with each received@ncommand.= +@nExamples:@n1234 @=@= on@n1234 @=@= off@n1234 @=@= on and 2345 @=@= off@n2345 ~@= 3456@n= +@nRule:@n @= on/off if is true@n= +@nThe internal processing time for all@ncommands is 100 ms.= +@nValid operators:@nand or on off me @=@= ~@= ( )@n= +Clear= +Debug= +Inputs= +Outputs= +Rules= +Send an 'on'/'off' command if the@nexpression becomes true.@n= +Syntax= + +### logic_block.lua ### +### lua_logic.lua ### + +TA3 Logic Block= +Update= + +### logic_block.lua ### +### sequencer2.lua ### + +Help= + +### lye.lua ### + +Lye= +Lye Barrel= +Lye Canister= + +### magnet.lua ### + +TA4 Collider Detector Magnet= +TA4 Collider Magnet= +TA4 Collider Magnet Base= +TA4 Collider Steel Block= +TA5 Fusion Reactor Magnet 1= +TA5 Fusion Reactor Magnet 2= +TA5 Fusion Reactor Magnet Blank= +TA5 Fusion Reactor Magnet Shield= + +### mba_detector.lua ### + +TA4 Mapblock Active Detector= + +### meltingpot.lua ### + +Heat= +Melting Guide= +Melting Pot active (heat@== +Melting Pot inactive (heat@== +Melting Pot inactive (heat@=0)= +Menu= +Menu,Recipes= +TA1 Burning= +TA1 Melting= +TA1 Melting Pot= + +### meridium.lua ### + +Meridium Axe= +Meridium Pickaxe= +Meridium Shovel= +Meridium Sword= + +### mesecons_converter.lua ### + +TA3 Mesecons Converter= + +### mill.lua ### + +TA1 Mill= +TA1 Mill Gear= + +### millboard.lua ### + +TA1 Acacia Millrace Board= +TA1 Acacia Wood Board= +TA1 Apple Millrace Board= +TA1 Apple Wood Board= +TA1 Aspen Millrace Board= +TA1 Aspen Wood Board= +TA1 Jungle Millrace Board= +TA1 Jungle Wood Board= +TA1 Pine Millrace Board= +TA1 Pine Wood Board= + +### minicell.lua ### + +TA4 Streetlamp Solar Cell= + +### minichest.lua ### + +Test Chest= + +### minitank.lua ### + +Test Mini Tank= + +### movecontroller.lua ### + +Error: Invalid distance !!= +Move distance= +Move distance (A to B)= +Operational mode= +Switch to the remote controlled 'move xyz' mode= +TA Rack and Pinion= +TA4 Move Controller= + +### node_detector.lua ### + +Click on all blocks whose positions should be checked= +Send signal if nodes have been:= +TA3 Node Detector= +TA4 Node Detector= +added= +added or removed= +removed= + +### nodes.lua ### + +TechAge Gravel= + +### oil.lua ### + +Flowing Oil= +Oil Source= +TA3 Oil Barrel= +TA3 Oil Canister= + +### oilfirebox.lua ### + +TA3 Power Station Oil Burner= + +### petroleum.lua ### + +Isobutane Cylinder Large= +Isobutane Cylinder Small= +Propane Cylinder Large= +Propane Cylinder Small= +TA3 Bitumen= +TA3 Bitumen Barrel= +TA3 Bitumen Canister= +TA3 Fuel Oil= +TA3 Fuel Oil Barrel= +TA3 Fuel Oil Canister= +TA3 Gasoline= +TA3 Gasoline Barrel= +TA3 Gasoline Canister= +TA3 Naphtha= +TA3 Naphtha Barrel= +TA3 Naphtha Canister= +TA3 Propane= +TA4 Isobutane= + +### pillar.lua ### + +TA4 Pillar= + +### pipe_wall_entry.lua ### + +TA3 Pipe Wall Entry= + +### pipe_wrench.lua ### + +TA3 Drill Pipe Wrench= + +### plastic.lua ### + +Plastic Granules= + +### player_detector.lua ### + +Command to send when player is detected= +Command to send when player moves away= +Radius= +Search radius= +TA4 Player Detector= + +### powder.lua ### + +Aluminum Powder= +Clay Powder= +Graphite Powder= +Iron Powder= +Leave Powder= +Needle Powder= +Silver Sandstone Powder= + +### power2axle.lua ### + +TA3 Electric Motor= + +### power_line.lua ### + +TA Power Line= +TA Power Pole= +TA Power Pole Top (for up to 6 connections)= +TA Power Pole Top 2 (for landlines)= + +### power_terminal2.lua ### + +Commands@nhelp . . . print this text@ncls . . . . clear screen@ngen . . print generators@nsto . . print storage systems@ncon1 . . print consumers with power consumption between 1 and 10 ku@ncon2 . . print consumers with power consumption with 10 ku or above@n= +Consumer= +Network Data= +Number of consumers:= +Number of generators:= +Number of network nodes:= +Number of storage systems:= +TA3 Power Terminal= + +### power_terminal2.lua ### +### terminal.lua ### + +Enter=Saisir + +### powerswitch.lua ### + +TA Power Switch= +TA Power Switch Small= + +### powerswitchbox.lua ### +### powerswitchbox_legacy.lua ### + +TA Power Switch Box= + +### programmer.lua ### + +TechAge Programmer (right @= read number, left @= write numbers)= +[TechAge Programmer] Error: invalid numbers!= +[TechAge Programmer] Error: programmer not supported!= +[TechAge Programmer] Unknown node on= +[TechAge Programmer] foreign or unknown node!= +[TechAge Programmer] node programmed!= +[TechAge Programmer] number= +[TechAge Programmer] programmer reset= + +### protection.lua ### + +Allow to dig/place Techage power lines nearby power poles= + +### pump.lua ### + +Number of liquid units that are allowed to be pumped= +Number of units= +TA3 Pump= +TA4 Pump= + +### pump.lua ### +### ta5_pump.lua ### + +Total flow rate= +Total flow rate in liquid units= + +### pumpjack.lua ### + +Oil Pumpjack= +Oil amount= +Pumpjack= +needs power= +no oil= + +### pusher.lua ### + +Number of items= +Number of items that are allowed to be pushed= +Optionally configure@nthe pusher with one item= +Pusher= + +### quarry.lua ### + +Digging depth= +Hole size= +Quarry= +Start level= +Start level @= 0@nmeans the same level@nas the quarry is placed= +area is protected= +finished= +inventory full= + +### reboiler.lua ### + +TA3 Oil Reboiler= + +### recipe_lib.lua ### +### recipeblock.lua ### + +Recipe= + +### recipe_lib.lua ### +### ta4_reactor.lua ### + +Catalyst= + +### recipeblock.lua ### + +TA4 Recipe Block= + +### recipes.lua ### + +Flint and Iron= +TA1 Iron Ingot= +[Bucket] Lava can only be placed below sea level!= + +### recycler.lua ### + +Recycler= + +### redstone.lua ### + +Red Stone= +Red Stone Block= +Red Stone Brick= + +### repeater.lua ### + +TA3 Repeater= + +### rotor.lua ### + +Nacelle is missing= +TA4 Carbon Fiber= +TA4 Rotor Blade= +TA4 Wind Turbine= +TA4 Wind Turbine Nacelle= + +### screwdriver.lua ### + +Block alignment stored!= +Techage Screwdriver@n(See: TA3 > Tools)= + +### sensorchest.lua ### + +Allow public chest access= +TA4 Sensor Chest= + +### sequencer.lua ### + +TA3 Sequencer= + +### sequencer.lua ### +### sequencer2.lua ### + +stopped= + +### sequencer2.lua ### + + - 'goto ' (jump to another line)@n= + - 'nop' (do nothing)@n= + - 'send ' (techage command)@n= + - 'stop' (stop the execution)@n= + - 1 corresponds to 100 ms@n= + - 50000 corresponds to 4 game days@n= +'[] '@n= + is one of the following:@n= + is a number from 1 to 50000 and is@n= +@n= +Commands= +Cycle time= +Example:@n= +If 'yes' a received OFF command won't stop the sequencer= +Ignore OFF command= +Invalid command!= +Start= +Stop= +Syntax:@n= +TA4 Sequencer= +Timer cycle time (default: 100 ms)= +running= +the timeslot when the command is executed.@n= + +### sequencer2.lua ### +### submenu.lua ### + +Cancel= + +### shell.lua ### + +TA5 Fusion Reactor Nucleus= +TA5 Fusion Reactor Shell= + +### signallamp.lua ### + +TA4 Wind Turbine Signal Lamp= +TechAge Color Lamp= +TechAge Color Lamp 2= + +### signallamp_2x.lua ### + +TA4 2x Signal Lamp= + +### signallamp_2x.lua ### +### signallamp_4x.lua ### + +Label for the lamp= + +### signallamp_4x.lua ### + +TA4 4x Signal Lamp= + +### silicon.lua ### + +TA4 Silicon Wafer= + +### silo.lua ### + +TA3 Silo= +TA4 Silo= + +### simplelamp.lua ### + +TA Lamp= + +### sluice.lua ### + +TA1 Sluice Gate= +TA1 Sluice Handle= + +### solarcell.lua ### + +TA4 Solar Carrier Module= +TA4 Solar Carrier Module B= +TA4 Solar Carrier Module T= +TA4 Solar Module= +light= + +### solarcell.lua ### +### source.lua ### + +power=alimentation + +### soundblock.lua ### + +Play= +TA3 Sound Block= + +### source.lua ### + +Axle Power Source= +Ele Power Source= +Power Source= +Test Generator= + +### steam_pipe.lua ### + +TA2 Steam Pipe= + +### steelmat.lua ### + +TechAge Steel Mat= + +### storage.lua ### + +Test Storage= + +### streetlamp.lua ### + +TA Street Lamp= + +### streetlamp2.lua ### + +TA4 LED Street Lamp= +TA4 LED Street Lamp Arm= +TA4 LED Street Lamp Pole= + +### submenu.lua ### + +Note: You can't change any values while the block is running!= +Refresh= + +### ta1_axle.lua ### + +TA1 Axle= +TA1 Axle Bearing= + +### ta2_clutch.lua ### + +TA2 Clutch= + +### ta2_weight_chest.lua ### + +TA2 Weight Chest= + +### ta2_winch.lua ### + +TA2 Winch= + +### ta4_cable.lua ### + +TA4 Low Power Box= +TA4 Low Power Cable= + +### ta4_cable_wall_entry.lua ### + +TA4 Cable Wall Entry= + +### ta4_chest.lua ### + +Empty the slots always @nfrom right to left= +Never completely empty the slots@nwith the pusher to keep the item assignment=Ne jamais vider complètement les slots@n avec le pousseur pour conserver l'affectation des articles +Size=Taille +TA4 8x2000 Chest=TA4 Coffre 8x2000 +Unlock=Déverrouiller +Unlock connected chest@nif all slots are below 2000=Déverrouiller le coffre connecté@n si tous les emplacements sont inférieurs à 2000 +right to left=de droite à gauche + +### ta4_doser.lua ### + +Doser=Doseur +TA4 Doser=TA4 Doseur +catalyst missing=catalyseur manquant +reactor defect=défaut du réacteur +reactor defect or no power=défaut du réacteur ou absence de courant +reactor has no power=Le réacteur n'a pas de courant +wrong catalyst=mauvais catalyseur + +### ta4_doser.lua ### +### ta4_reactor.lua ### + +TA4 Reactor=Réacteur TA4 + +### ta4_injector.lua ### + +Configure up to 8 items @nto be pushed by the injector= +Injector=Injecteur +Switch to pull mode @nto pull items out of inventory slots @naccording the injector configuration= +pull mode= + +### ta4_liquid_filter.lua ### + +TA4 Liquid Filter Filler=TA4 Remplisseur de liquide filtrer +TA4 Liquid Filter Sink=TA4 Évier de filtre à liquide + +### ta4_reactor.lua ### + +TA4 Reactor Filler Pipe=Tuyau de remplissage du réacteur TA4 + +### ta4_stand.lua ### + +TA4 Reactor Base=Base du réacteur TA4 +TA4 Reactor Stand=Support du réacteur TA4 +off=fermer +on=allumer + +### ta4_stand.lua ### +### waterpump.lua ### + +no power=pas de courant + +### ta5_chest.lua ### + +TA5 Hyperloop Chest= + +### ta5_pump.lua ### + +TA5 Pump= + +### ta5_tank.lua ### + +TA5 Hyperloop Tank= + +### tank.lua ### + +Oil Tank=Citerne de pétrole +TA3 Tank=Citerne TA3 +TA4 Tank=Citerne TA4 + +### tank_cart.lua ### + +TA Tank Cart=Chariot-citerne TA + +### teleport.lua ### + +Connected= +Connection status= +Distance > @1 blocks= +Ex-points missing (@1 < @2)= +Status= +server not connected= + +### teleport_pipe.lua ### + +TA5 Teleport Block Liquids= + +### teleport_pipe.lua ### +### teleport_tube.lua ### + +Remote block error= + +### teleport_tube.lua ### + +TA5 Teleport Block Items= + +### terminal.lua ### + +Syntax error, try help=Erreur de syntaxe, essayez l'aide +TA3 Terminal=Terminal TA3 +TA4 Terminal= +commands like: help=commandes comme: aide + +### timer.lua ### + +TA3 Timer=TA3 Minuteur + +### tiny_generator.lua ### + +TA3 Tiny Power Generator=TA3 Petit générateur d'électricité +Tiny Generator=Petit générateur +no fuel=pas de carburant + +### tower.lua ### + +TA3 Derrick=TA3 Derrick +TA3 Drill Pipe=Tuyau de forage TA3 +TA4 Derrick=TA4 Derrick +[TA] Derrick is being built!=[TA] Le derrick est en cours de construction! +[TA] Derrick is being removed!=[TA] Le derrick est retiré! + +### transformer.lua ### + +TA4 Isolation Transformer= + +### trowel.lua ### + +TechAge Trowel=Truelle TechAge + +### tube_wall_entry.lua ### + +Tube Wall Entry=Entrée murale du tube + +### tubes.lua ### + +TechAge Tube= + +### tubes_ta4.lua ### + +TA4 Tube= + +### turbine.lua ### + +TA3 Turbine=Turbine TA3 +TA4 Turbine=Turbine TA4 +TA5 Turbine= + +### turncontroller.lua ### + +Click on all blocks that shall be turned= +TA4 Turn Controller= +Turn left= +Turn right= + +### usmium.lua ### + +Usmium Nuggets=Pépites d'Usmium +Usmium Powder=Poudre d'Usmium + +### vacuumtube.lua ### + +TA4 Vacuum Tube= + +### valve.lua ### + +TA Valve=TA Valve +TA3 Valve= + +### waterinlet.lua ### + +Error: No natural water!= +Error: No water available!= +Error: Not on sea level!= +Operational= +TA4 Water Inlet= + +### watermill.lua ### + +TA1 Watermill= + +### waterpump.lua ### + +TA4 Water Pump=TA4 Pompe à eau +Water Pump=Pompe à eau + +### windturbine_lib.lua ### + +Here is not enough water (41x41 m)!=Ici, il n'y a pas assez d'eau (41x41 m)! +Here is not enough wind@n(A free air space of 41x41x21 m is necessary)!= +The next wind turbines is too close!=La prochaine éolienne est trop proche! +This is a=Il s'agit d'un +This is no ocean water!=Ce n'est pas de l'eau de mer! +This is not the surface of the ocean!=Ce n'est pas la surface de l'océan! +[TA4 Wind Turbine]=[TA4 Éolienne] +biome and no ocean!=un biome et pas d'océan! +is a suitable place for a wind turbine!=est un endroit approprié pour une éolienne! + +### worker.lua ### + +Build detector= +Item list= +Remove detector= +TA4 Collider Detector Worker= +[TA4] Detector is being built!= +[TA4] Detector is being removed!= + + +##### not used anymore ##### + +TA3 Akku Box=TA3 Boite Akku +No plan available=Aucun plan disponible +Side view=Vue de côté +Top view=Vue de dessus +Blocks are back=Les blocs sont de retour +Blocks are disappeared=Les blocs ont disparu +Remove=Retirer +Set=Configurer +Priv missing=Priv manquant +Switched to private use!=Passage à l'usage privé! +Switched to public use!=Passage à l'usage public! +TA2 Power Generator: Overload fault?@n(restart with right-click)=Générateur de puissance TA2 : Défaut de surcharge ?@n(redémarrage avec le clic droit) +Error: Inventory already in use=Erreur : Inventaire déjà utilisé +full=plein +storage empty?=stockage vide? +Use a trowel to remove the node.=Utilisez une truelle pour enlever le noeud. +TA3 Valve closed=TA3 Valve fermée +TA3 Valve open=TA3 Valve ouverte +Here is not enough wind (A free air space of 41x41x21 m is necessary)!=Ici, il n'y a pas assez de vent (un espace libre de 41x41x21 m est nécessaire)! diff --git a/techage/locale/techage.ru.tr b/techage/locale/techage.ru.tr new file mode 100644 index 0000000..1bdf22e --- /dev/null +++ b/techage/locale/techage.ru.tr @@ -0,0 +1,1576 @@ +# textdomain: techage + + + +### akkubox.lua ### + +TA3 Accu Box=TA3 Блок питания + +### aluminium.lua ### + +Aluminum=Алюминий +Gibbsite Powder=Гидраргиллитовый порошок +Red Mud=Красная грязь +Red Mud Barrel=Бочка красной грязи +Red Mud Canister=Канистра красной грязи + +### assemble.lua ### +### firebox_lib.lua ### + +[TA] Area is protected!=[TA] Зона защищена! +[TA] Not enough space!=[TA] Недостаточно пространства! + +### assembly_tool.lua ### + +TechAge Assembly Tool=TechAge Сборочный инструмент + +### autocrafter.lua ### + +Autocrafter=Автокрафтер + +### axle2power.lua ### + +TA2 Power Generator=TA2 Генератор + +### baborium.lua ### + +Baborium Ingot=Бабориемувый слиток +Baborium Lump=Кусок бабориума +Baborium Ore=Кусок бабориемувой руды + +### barrel.lua ### + +Gas Cylinder Large=Большой газовый баллон +Gas Cylinder Small=Маленький газовый баллон +River Water Barrel=Бочка речной воды +TA Empty Barrel=TA Пустая бочка +TA3 Canister=TA3 Канистра +Water=Вода +Water Barrel=Бочка с водой +empty=пустой + +### basalt.lua ### + +Basalt Cobble=Базальтовый булыжник +Basalt Glass=Базальтовое стекло +Basalt Glass 2=Базальтовое стекло 2 +Basalt Glass Thin=Тонкое базальтовое стекло +Basalt Glass Thin 2=Тонкое базальтовое стекло 2 +Basalt Glass Thin XL=Тонкое базальтовое стекло XL +Basalt Glass Thin XL 2=Тонкое базальтовое стекло XL 2 +Basalt Gravel=Базальтовый гравий +Basalt Stone=Базальтовый камень +Basalt Stone Block=Блок базальтового камня +Basalt Stone Brick=Базальтовый кирпич +Sieved Basalt Gravel=Просеянный базальтовый камень + +### battery.lua ### + +Battery=Батарея +Coal Equivalents=В угольном эквиваленте +Digtron Battery=Батарея дигтрона + +### battery.lua ### +### storage.lua ### + +Load=Загрузка + +### bauxit.lua ### + +Bauxite Cobblestone=Бокситовый булыжник +Bauxite Gravel=Бокситовый гравий +Bauxite Powder=Бокситовая порошок +Bauxite Stone=Бокситовый камень + +### blackhole.lua ### + +TechAge Black Hole=TechAge Черная дыра +TechAge Black Hole (let items and liquids disappear)=Techage Черная дыра (позвольте предметам и жидкостям исчезнуть) + +### boiler.lua ### + +TA2 Boiler Base=TA2 Нижняя часть водонагревателя +TA2 Boiler Top=TA2 Верхняя часть водонагревателя + +### boiler_base.lua ### + +TA3 Boiler Base=TA3 Нижняя часть водонагревателя + +### boiler_lib.lua ### + +To add water punch@nthe boiler@nwith a water bucket=Что бы добавить воду ударьте @nводонагреватель@n ведром воды +Water Boiler=Водонагреватель + +### boiler_lib.lua ### +### heatexchanger2.lua ### + +water temperature=температура воды + +### boiler_top.lua ### + +TA3 Boiler Top=TA3 Верхняя часть бойлера + +### booster.lua ### + +TA3 Booster=TA3 Усилитель + +### button.lua ### + +Access:=Доступ: +Button or switch=Кнопка или выключатель +Change the block name (infotext)=Измените имя блока (информационный текст) +Command to be sent=Команда для отправки +Infotext=Информационный текст +TA3 Button/Switch=TA3 Кнопка/Выключатель +TA4 Button/Switch=TA4 Кнопка/Выключатель + +### button.lua ### +### button_2x.lua ### +### button_4x.lua ### + +Access=Доступ +Button protection=Защита кнопки +Type=Тип + +### button.lua ### +### button_2x.lua ### +### button_4x.lua ### +### charge_detector.lua ### +### gaze_sensor.lua ### +### player_detector.lua ### + +Command=Команда +Number=Номер + +### button.lua ### +### cart_detector.lua ### +### command_converter.lua ### +### detector.lua ### +### flipflop.lua ### +### light_detector.lua ### +### lua_logic.lua ### +### mesecons_converter.lua ### +### node_detector.lua ### +### player_detector.lua ### +### repeater.lua ### + +Insert destination node number(s)=Введите номер(а) блок(а/ов) назначения + +### button.lua ### +### chest.lua ### +### command_converter.lua ### +### detector.lua ### +### doorcontroller.lua ### +### flipflop.lua ### +### mesecons_converter.lua ### +### repeater.lua ### +### sequencer2.lua ### +### submenu.lua ### + +Save=Сохранить + +### button.lua ### +### gaze_sensor.lua ### + +Destination block number(s)=Номер(а) блок(а/ов) назначения + +### button_2x.lua ### + +TA4 2x Button=TA4 2x Кнопка + +### button_2x.lua ### +### button_4x.lua ### + +Command to be sent (ignored for switches)=Команда для отправки (игнорируется для выключателей) +Label for the button=Ярлык для кнопки +Momentary button or on/off switch=Мгновенная кнопка или выключатель + +### button_2x.lua ### +### button_4x.lua ### +### charge_detector.lua ### +### player_detector.lua ### + +Destination block number=Номер блока назначения + +### button_2x.lua ### +### button_4x.lua ### +### signallamp_2x.lua ### +### signallamp_4x.lua ### + +Label=Ярлык + +### button_4x.lua ### + +TA4 4x Button=TA4 4x Кнопка + +### cart_detector.lua ### + +TA3 Cart Detector=TA3 Детектор вагонетки + +### cart_detector.lua ### +### light_detector.lua ### +### node_detector.lua ### + +accept=принять + +### cart_detector.lua ### +### player_detector.lua ### + +TA3 Player Detector=TA3 Детектор игрока + +### ceilinglamp.lua ### + +TA Ceiling Lamp=TA Люстра + +### cement.lua ### + +Cement Block=Блок цемента +Cement Powder=Порошок из цемента + +### ceramic.lua ### + +TA4 Ceramic Material=TA4 Керамика +TA4 Furnace Ceramic=TA4 Керамика для печи +TA4 Round Ceramic=TA4 Круглая керамика +TA5 Ceramic Turbine=TA5 Керамическая турбина + +### charcoalpile.lua ### + +Dirt with Ash=Грязь с пеплом +TA1 Charcoal=TA1 Древесный уголь + +### charge_detector.lua ### + +Command to send when the energy storage charge@nlevel falls below the specified switch point=Команда, которая отправится когда @nуровень энергии будет ниже указанной точки +Command to send when the energy storage charge@nlevel rises above the specified switch point=Команда, которая отправится когда @nуровень энергии будет выше указанной точки +Storage charge level switch point=Точка переключения уровня заряда источника энергии +Switch point=Точка переключения +TA4 Energy Storage Charge Detector=TA4 Детектор количества энергии в хранилище + +### chest.lua ### + +Allow public access to the chest=Разрешить публичный доступ к сундуку +Inventory,Pre-Assignment,Config=Инвентарь,Пред задание,Настройка +Node label:=Ярлык ноды: +TA2 Protected Chest=TA2 Защищенный сундук +TA3 Protected Chest=TA3 Защищенный сундук +TA4 Protected Chest=TA4 Защищенный сундук + +### chest_cart.lua ### + +TA Chest Cart=TA Вагонетка с сундуком + +### coalburner.lua ### + +Ash=Пепел + +### collector.lua ### + +Node number to send the events to=Номер ноды в которую будут отправляться события +Node numbers to read the states from=Номера нод из которых будут считываться состояния +Send an event if state is equal or larger than=Отправить событие если состояние больше или равно чем +TA4 State Collector=TA4 Считыватель состояния + +### command_converter.lua ### + +Receive=Получить +Send delay (s)=Отправить через (с) +Sent command=Отправить команду +TA3 Command Converter=TA3 Конвертер команд + +### concentrator.lua ### + +TA4 Tube Concentrator=TA4 Соединитель труб +Tube Concentrator=Соединитель труб + +### controller.lua ### + +Cooling failed=Охлаждение не удалось +Magnet detection error@n(@1% found / 100% expected)=Ошибка обнаружения магнита(@1 найден / 100% ожидается) +Nucleus detection error=Ошибка обнаружения ядра +Plasma ring shape error=Ошибка формы плазмового кольца +Shell shape error@n(@1% found / 100% expected)=Ошибка формы оболочки@n(@1% найдено / 100% ожидается) +TA5 Fusion Reactor Controller=TA5 Контроллер ядерного реактора + +### controller.lua ### +### heatexchanger2.lua ### + +No power=Нет энергии + +### cooking.lua ### + +TA3 Melting=TA3 Плавление + +### cooler.lua ### + +TA3 Cooler=TA3 Охладитель +TA4 Collider Cooler=TA4 Охладитель коллайдера + +### counting.lua ### + +Your current value is=Ваше текущее значение +[techage] The limit for 'number of commands per minute' has been exceeded.=[techage] Предел для 'количество команд в минуту' был исчерпан. +is allowed=разрешен +is allowed. Current value is=разрешен. Ваше текущее значение +per minute=в минуту + +### cylinder.lua ### + +TA2 Cylinder=TA2 Цилиндр + +### detector.lua ### + +Counts down the number of items passed through@nand only triggers an 'on' command when it reaches zero.=Считает количество проходящих предметов@nи включается когда количество достигает нуля. +Current countdown=Кол-во предметов которое должно пройти +Current countdown value.=Кол-во прошедших предметов +TA4 Collider Detector=TA4 Детектор коллайдера +TA4 Collider Detector Core=TA4 Ядро детектора коллайдера +TA4 Detector=TA4 Детектор + +### detector.lua ### +### electricmeter.lua ### + +Countdown=Кол-во электроэнергии которое должно передаться + +### detector.lua ### +### logic_block.lua ### +### tele.lua ### + +Blocking Time=Время блокировки + +### detector.lua ### +### tele.lua ### + +Configured Items=Настроенные предметы +Items which generate an 'on' command.@nIf empty, all passed items generate an 'on' command.=Предметы, которые генерируют команду 'on' (включить).@nЕсли пусто, все прошедшие предметы генерируют команду 'on'. +On Time=Вовремя +TA3 Detector=TA3 Детектор +The time after the 'off' command@nuntil the next 'on' command is accepted.=Время после команды 'off' до приема следующей команды 'on'. +The time between the 'on' and 'off' commands.=Промежуток времени между командами 'on' (включить) и 'off' (выключить). + +### display.lua ### + +Display no: =Номер дисплея: +TA4 Display=TA4 Экран +TA4 Display XL=TA4 Экран XL + +### distiller.lua ### + +TA3 Distillation Tower 1=TA3 Дистилляционная башня 1 +TA3 Distillation Tower 2=TA3 Дистилляционная башня 2 +TA3 Distillation Tower 3=TA3 Дистилляционная башня 3 +TA3 Distillation Tower 4=TA3 Дистилляционная башня 4 +TA3 Distillation Tower Base=TA3 Основание дистилляционной башни + +### distributor.lua ### + +Block configured items for open ports=Заблокировать предметы настроенные для открытых портов +Distributor=Распределитель +High Performance Distributor=Высокопроизводительный распределитель +Input=Ввод +blocking mode=блокирующий режим + +### doorblock.lua ### + +TechAge Door Block=Techage Блок двери + +### doorcontroller.lua ### + +Insert door/gate block number(s)=Введите номер(а) блок(а/ов) двер(и/ей)/ворот +TA3 Door Controller=TA3 Контроллер двери + +### doorcontroller2.lua ### + +Blocks exchanged=Блоки перемещены +Blocks reset=Переустановить блоки +Click on all the blocks that are part of the door/gate=Нажмите на все блоки которые являются частью двери/ворот +Ctrl,Inv=Контроль,Инвентарь +Exchange=Обмен +TA3 Door Controller II=TA3 Контроллер двери +with door sound=с звуком двери + +### doorcontroller2.lua ### +### flycontroller.lua ### +### movecontroller.lua ### +### node_detector.lua ### +### turncontroller.lua ### + +Done=Готово +Record=Записать +block positions are stored.=позиции блоков сохранены. + +### doorcontroller2.lua ### +### flycontroller.lua ### +### movecontroller.lua ### +### turncontroller.lua ### + +Recording...=Запись... + +### doorcontroller2.lua ### +### movecontroller.lua ### + +Reset=Переустановить + +### drillbox.lua ### + +Build derrick=Построить буровую вышку +Depth=Глубина +Drill Bit=Сверло для бурения +Drill area is protected=Зона бурения защищена +Drill bits missing=Сверла для бурения отсутствуют +Oil Drill Box=Коробка для бурения нефтяных скважин +Remove derrick=Удалить буровую вышку +item output blocked=выход предмета заблокирован + +### drive_axle.lua ### + +TA2 Drive Axle=TA2 Вал + +### electric_cable.lua ### + +TA Electric Cable=TA Кабель + +### electricmeter.lua ### + +Amount of power to be provided before the device turns off=Количество энергии которое должно быть подано до выключения устройства +Consumption=Потребление +Power countdown=Кол-во электроэнергии которое должно пройти +TA4 Electric Meter=TA4 Счетчик электроэнергии + +### electricmeter.lua ### +### formspecs.lua ### +### transformer.lua ### + +Power=Энергия + +### electricmeter.lua ### +### transformer.lua ### + +Max. power=Максимальная мощность +Maximum power passed through=Максимальная мощность прошедшая через + +### electrolyzer.lua ### + +Configurable value@nfor the current limit=Настраиваемое значение@nдля текущего лимита +Current limitation=Текущие ограничения +Electrolyzer=Электролизер +If the charge of the storage@nsystem falls below the configured value,@nthe block switches off=Если заряд в хранилище@nпадает ниже указанной точки то@nблок выключается +Maximum possible@ncurrent consumption=Максимально возможное@nпотребление тока +Maximum power consumption [ku]=Максимальное потребление энергии [кВт] +Storage full=Хранилище заполнено +TA4 Electrolyzer=TA4 Электролизер +Turnoff point=Точка выключения +Turnoff point reached=Достигнута точка выключения + +### electrolyzer.lua ### +### fuelcell.lua ### +### tiny_generator.lua ### + +Electricity=Электричество + +### electronic.lua ### + +TA3 Vacuum Tube=TA3 Вакуумная труба +TA4 LEDs=TA4 Светодиоды +TA4 RAM Chip=TA4 ОЗУ-микросхема +TA4 WLAN Chip=TA4 WLAN-микросхема +TA5 AI Chip=TA5 ИИ-микросхема +TA5 AI Chip II=TA5 ИИ-микросхема II +WLAN Chip=WLAN-микросхема + +### electronic_fab.lua ### + +Electronic Fab=Фабрика электроники +TA2 Ele Fab=TA2 Фабрика электроники +TA3 Ele Fab=TA3 Фабрика электроники +TA4 Ele Fab=TA4 Фабрика электроники + +### end_wrench.lua ### + +Biome=Биом +Node owner=Владелец ноды +Position=Местоположение +Position temperature=Температура местоположения +Pump connected to no/empty tank(s).=Насос (не) присоединен к пустому резервуар(у/ам). +Pump connected to tank(s) with: @1=Насос присоединен к резервуар(у/ам) с: @1 +TechAge Info Tool (use @= read status info)=Techage Информационный инструмент(используй @= чтобы прочитать информацию о статусе) + +### end_wrench.lua ### +### meltingpot.lua ### + +Time=Время + +### epoxy.lua ### + +Epoxide Resin=Эпоксидная смола +Epoxide Resin Barrel=Бочка эпоксидной смолы +Epoxide Resin Canister=Канистра эпоксидной смолы + +### explore.lua ### + +Oil=Нефть +TA3 Oil Explorer=TA3 Нефтяной радар +TA3 Oil Storage=TA3 Хранилище нефти +depth=глубина + +### filler.lua ### + +Liquid Filler=Заполнитель жидкостью +TA Liquid Filler=TA Заполнитель жидкостью + +### firebox.lua ### + +TA2 Firebox=TA5 Топка +TA3 Coal Power Station Firebox=TA3 Топка использующая уголь для генерации электроэнергии +TA3 Furnace Oil Burner=TA3 Масляная горелка печи +TA3 Power Station Firebox=TA3 Топка для генерации электроэнергии + +### firebox_lib.lua ### + +Firebox=Топка + +### flipflop.lua ### + +TA3 Flip-Flop=TA3 Триггер + +### fly_lib.lua ### + +Destination position is protected=Пункт назначения защищен +Error: Max. length of the flight route exceeded by @1 blocks !!=Ошибка: Максимальная длина траектории полета ограничена @1 блоками !! +No valid destination position=Нет правильного пункта назначения +No valid node at the start position=Неправильная нода на начальном местоположении +No valid start position=Неправильное начальное местоположение +Running=Работает +Start position is protected=Начальное местоположение защищено +Stopped=Остановлено + +### fly_lib.lua ### +### flycontroller.lua ### + +Error: Invalid path !!=Ошибка: неверный путь !! + +### flycontroller.lua ### + +Error: Recording is missing !!=Ошибка: Запись отсутствует!! +Flight route (A to B)=Траектория полета (из A в Б) +Move a player without moving blocks=Сдвинуть игрока не сдвигая блоки +See chat output=Выводить чат +TA5 Fly Controller=TA5 Контроллер полета +Teleport mode=Режим телепорта +Test=Протестировать +[TA4 Fly Controller] Invalid path!=[TA4 Контроллер полета] Неправильный путь! +[TA4 Fly Controller] Recording is missing!=[TA4 Контроллер полета] Запись отсутствует! + +### flycontroller.lua ### +### logic_block.lua ### +### lua_logic.lua ### +### movecontroller.lua ### + +Store=Записать + +### flycontroller.lua ### +### movecontroller.lua ### + +Click on all blocks that shall be moved=Нажмите на все блоки которые должны быть передвинуты +Maximum Speed=Максимальная скорость +Maximum speed for moving blocks=Максимальная скорость движущихся блоков +Move=Переместить +Move A-B=Переместить из А в Б +Move B-A=Переместить из Б в А +Move block height=Высота перемещения блока +Object offset=Смещение объекта +Stored=Записано +Value in the range of 0.0 to 1.0=Число в диапазоне от 0.0 до 1.0 +Y-offset for non-player objects like vehicles (-0.5 to 0.5)=Смещение по оси Y для не игровых объектов таких как велосипед (от -0.5 до 0.5) + +### flywheel.lua ### + +Flywheel=Маховик +TA2 Flywheel=TA2 Маховик + +### forceload.lua ### + +Area already loaded or max. number of Forceload Blocks reached!=Зона уже загружена или достигнуто максимальное количество блоков загрузки! +List of your Forceload Blocks:=Список ваших блоков загрузки: +Punch the block to make the area visible.=Ударьте блок, что бы сделать зону видимой. +Show all forceload blocks in a 64x64x64 range=Показать все блоки загрузки в диапазоне 64x64x64. +Techage Forceload Block=Techage Блок загрузки +Techage Forceload Tile=Techage Плитка загрузки +loaded=загружено + +### formspecs.lua ### + +Block has a wrench menu=У блока есть меню для гаечного ключа +Charge termination=Прекращение зарядки +Current output [ku]=Текущий выходной ток [кВт] +Maximum output [ku]=Максимальный выходной ток [кВт] +Range in which the generator reduces its power=Диапазон в котором генератор уменьшает свою мощность +The current power the generator provides=Текущая мощность генератора позволяет +The maximum power the generator can provide=Максимальная мощность генератора может позволить + +### formspecs.lua ### +### power_terminal2.lua ### + +Charging=Зарядка + +### formspecs.lua ### +### power_terminal2.lua ### +### storage.lua ### +### transformer.lua ### + +Storage=Хранилище + +### fuel_lib.lua ### + +Fuel Menu=Меню топлива +To add fuel punch@nthis block@nwith a fuel container=Что бы добавить топливо ударьте@nэтот блок@nконтейнером с топливом + +### fuelcell.lua ### + +Fuel Cell=Ячейка с топливом +TA4 Fuel Cell=TA4 Ячейка с топливом +no hydrogen=нет водорода + +### fuelcellstack.lua ### + +TA4 Fuel Cell Stack=TA4 Блок топливных элементов + +### furnace_top.lua ### + +Furnace Top=Верхняя часть печи +Outp=Результат +no fuel or no power=нет топлива или нет энергии + +### gas_pipe.lua ### + +TA5 Junction Pipe=TA5 Распределительная труба +TA5 Pipe=TA5 Труба + +### gateblock.lua ### + +TechAge Gate Block=TechAge блок ворот + +### gaze_sensor.lua ### + +Command to send when sensor is no longer viewed=Команда, которая будет отправлена когда сенсор окажется вне зоны видимости +Command to send when sensor is viewed=Команда, которая отправится когда сенсор будет в зоне видимости +Input the player name(s) separated by blanks.@nIf empty, only the owner is accepted.=Введите им(я/ена) игроков разделенные пробелами.@nЕсли пусто, то только владельцу сервера разрешено. +Player Names=Имена игроков +TA4 Gaze Sensor=TA4 Сенсор взгляда + +### gearbox.lua ### + +TA2 Gearbox=TA2 Коробка передач + +### generator.lua ### + +TA3 Generator=TA3 Генератор +TA4 Generator=TA4 Генератор +TA5 Generator=TA5 Генератор +no steam=нет пара + +### generator.lua ### +### power_terminal2.lua ### + +Generator=Генератор + +### gravelrinser.lua ### + +Gravel Rinser=Промыватель гравия +Rinsing=Промывание + +### gravelsieve.lua ### + +Compressed Gravel=Сжатый гравий +Gravel Sieve=Сито для гравия +Sieved Gravel=Просеянный гравий +TA1 Gravel Sieve=TA1 Сито для гравия +TA2 Gravel Sieve=TA2 Сито для гравия +TA3 Gravel Sieve=TA3 Сито для гравия +TA4 Gravel Sieve=TA4 Сито для гравия + +### grinder.lua ### + +Grinder=Измельчитель +Grinding=Измельчение +Milling=Помол +TA1 Mill Base=TA1 Основание мельницы + +### growlight.lua ### + +TA4 LED Grow Light=TA4 Светодиодная лампа для выращивания + +### hammer.lua ### + +TA1 Bronze Hammer (smash stone to gravel)=TA1 Бронзовый молот (переделывает камень в гравий) +TA1 Diamond Hammer (smash stone to gravel)=TA1 Алмазный молот (переделывает камень в гравий) +TA1 Meridium Hammer (smash stone to gravel)=TA1 Меридиемувый молот (переделывает камень в гравий) +TA1 Mese Hammer (smash stone to gravel)=TA1 Месеиевый молот (переделывает камень в гравий) +TA1 Steel Hammer (smash stone to gravel)=TA1 Стальной молот (переделывает камень в гравий) +TA1 Stone Hammer (smash stone to gravel)=TA1 Каменный молот (переделывает камень в гравий) + +### heater.lua ### + +TA4 Furnace Heater=TA4 Нагреватель печи + +### heatexchanger1.lua ### + +TA4 Heat Exchanger 1=TA4 Теплообменник 1 +TA5 Heat Exchanger 1=TA5 Теплообменник 1 + +### heatexchanger2.lua ### + + Error!= Ошибка! +Blue pipe connection error@n(@1 found / @2 expected)=Ошибка соединения синей трубы @n (@1 найдено из @2) +Blue pipe coolant missing@n(@1 found / @2 expected)=Отсутствует охладитель синей трубы @n (@1 найдено из @2) +Cooler error=Ошибка охладителя +Green pipe connection error@n(@1 found / @2 expected)=Ошибка соединения зеленой трубы @n (@1 найдено из @2) +Green pipe coolant missing@n(@1 found / @2 expected)=Отсутствует охладитель зеленой трубы @n (@1 найдено из @2) +Power network connection error=Ошибка соединения электрической сети +TA4 Heat Exchanger=TA4 Теплообменник +TA4 Heat Exchanger 2=TA4 Теплообменник 2 +TA5 Heat Exchanger 2=TA5 Теплообменник 2 +Turbine error=Ошибка турбины +did you check the plan?=вы проверили чертеж? +inlet/pipe error=ошибка входной/обычной трубы +wrong storage diameter=неправильный диаметр хранилища + +### heatexchanger3.lua ### + +TA4 Heat Exchanger 3=TA4 Теплообменник 3 +TA5 Heat Exchanger 3=TA5 Теплообменник 3 + +### hydrogen.lua ### + +Hydrogen Cylinder Large=Большой цилиндр с водородом +Hydrogen Cylinder Small=Маленький цилиндр с водородом +TA4 Hydrogen=TA4 Водород + +### hyperloop.lua ### +### sensorchest.lua ### +### teleport.lua ### + +not connected=не соединен + +### hyperloop.lua ### +### teleport.lua ### + +Block name=Название блока +Connection name for this block=Имя соединения для этого блока +Connection name of the remote block=Имя соединения для этого удаленного блока +Enter a block name or select an existing one=Введите имя блока или выберите уже существующий +Remote name=Удаленное имя +connected to=соединен к + +### industriallamp1.lua ### + +TA Industrial Lamp 1=TA Промышленный светильник 1 + +### industriallamp2.lua ### + +TA Industrial Lamp 2=TA Промышленный светильник 2 + +### industriallamp3.lua ### + +TA Industrial Lamp 3=TA Промышленный светильник 3 + +### industriallamp4.lua ### + +TA4 LED Industrial Lamp=TA4 Светодиодный промышленный светильник + +### inlet.lua ### + +TA4 Pipe Inlet=TA4 Входная труба +one window maximum=одно окно максимум +wrong diameter (should be 5, 7, or 9)=неправильный диаметр (должен быть 5, 7, или 9) +wrong number of gravel nodes=неправильное количество блоков гравия +wrong number of shell nodes=неправильное количество блоков оболочки + +### inlets.lua ### + +TA4 Collider Cable Input=TA4 Входной кабель коллайдера +TA4 Collider Pipe Input=TA4 Входная труба коллайдера +TA4 Collider Pipe Output=TA4 Выходная труба коллайдера +TA4 Collider Tube Input=TA4 Большая входная труба + +### inverter.lua ### + +Inverter=Инвертор +Power AC=Энергия переменного тока +Power DC=Энергия постоянного тока +TA4 Solar Inverter=TA4 Солнечный инвертор +no solar power=нет солнечной энергии +solar network error=ошибка электрической сети солнечной энергии + +### junctionbox.lua ### + +TA Electric Junction Box=TA Электрическая распределительная коробка + +### lampholder.lua ### + +TA Lamp Holder Acacia=TA Акациевый держатель для лампы +TA Lamp Holder Apple=TA Яблоневый держатель для лампы +TA Lamp Holder Aspen=TA Осиновый держатель для лампы +TA Lamp Holder Copper=TA Медный держатель для лампы +TA Lamp Holder Gold=TA Золотой держатель для лампы +TA Lamp Holder White=TA Белый держатель для лампы + +### laser.lua ### + +Laser beam error!=Ошибка лазерного луча! +TA4 Laser Beam Emitter=TA4 Излучатель лазера +TA4 Laser Beam Receiver=TA4 Приемник лазерного луча +Valid destination positions:=Правильные места назначения: +to=в + +### lib.lua ### + +Block has an@nadditional wrench menu=У блока есть@nдополнительное меню для гаечного ключа + +### lib.lua ### +### sensorchest.lua ### + +connected with=соединен с + +### light_detector.lua ### + +Send signal if light level is above:=Отправить сигнал если уровень света выше: +TA3 Light Detector=TA3 Детектор света + +### lighter.lua ### + +TA1 Lighter=TA1 Заготовка для розжига + +### liquid_lib.lua ### + +Allow public access to the tank=Разрешить публичный доступ к резервуару +Liquid Tank=Резервур для жидкости +To add liquids punch@nthe tank@nwith a liquid container=Чтобы добавить жидкость, ударьте@nрезервуар@nс резервуаром + +### liquid_lib.lua ### +### ta4_chest.lua ### + +keep assignment=сохранить расположение + +### liquid_pipe.lua ### + +TA Junction Pipe=TA Распределительная труба +TA Pipe=TA Труба + +### liquidsampler.lua ### + +Liquid Sampler=Сборщик воды + +### liquidsampler.lua ### +### waterpump.lua ### + +no usable water=нет используемой воды + +### logic_block.lua ### + +'me' has to be used for the own block number.@n='me' должно быть использовано для собственного номера блока.@n +'~@=' means: not equal@n='~@=' означает: не равно +@n is a boolean expression@nwhere input numbers are evaluated.@n=@n<введенное-выражение> это булево выражение@nв котором проверяются выражение с числами. +@n is the block number to which the@ncommand should be sent.@n=@n<вывод> это номер блока в который@nкоманда должна быть отправлена. +@nAll rules are checked with each received@ncommand.=@nВсе правила проверяются у каждой введенной@nкоманды. +@nExamples:@n1234 @=@= on@n1234 @=@= off@n1234 @=@= on and 2345 @=@= off@n2345 ~@= 3456@n=@nПримеры: @n1234 @=@= on@n1234 @=@= off@n1234 on and 2345 @=@= off@n2345 ~@= 3456@n=@n +@nRule:@n @= on/off if is true@n=@nПравило:@n<вывод> @= on/off если <введенное-выражение> истинно=@n +@nThe internal processing time for all@ncommands is 100 ms.=@nВнутреннее время обработки всех@nкоманд это 100 миллисекунд. +@nValid operators:@nand or on off me @=@= ~@= ( )@n=@nКорректные операторы:@nand or on off me @=@= ~@= ()@n +Clear=Очистить +Debug=Отладить +Inputs=Вводы +Outputs=Выводы +Rules=Правила +Send an 'on'/'off' command if the@nexpression becomes true.@n=Отправить 'on'/'off' команды если@nвыражение истинно.@n +Syntax=Синтаксис + +### logic_block.lua ### +### lua_logic.lua ### + +TA3 Logic Block=TA3 Логический блок +Update=Обновить + +### logic_block.lua ### +### sequencer2.lua ### + +Help=Помощь + +### lye.lua ### + +Lye=Щелочь +Lye Barrel=Бочка с щелочью +Lye Canister=Канистра с щелочью + +### magnet.lua ### + +TA4 Collider Detector Magnet=TA4 Детектор магнита коллайдера +TA4 Collider Magnet=TA4 Магнит коллайдера +TA4 Collider Magnet Base=TA4 Основание магнита коллайдера +TA4 Collider Steel Block=TA4 Стальной блок коллайдера +TA5 Fusion Reactor Magnet 1=TA5 Магнит ядерного реактора 1 +TA5 Fusion Reactor Magnet 2=TA5 Магнит ядерного реактора 2 +TA5 Fusion Reactor Magnet Blank=TA5 Пустой магнит ядерного реактора +TA5 Fusion Reactor Magnet Shield=TA5 Щит магнита ядерного реактора + +### mba_detector.lua ### + +TA4 Mapblock Active Detector=TA4 Активный детектор блоков карты + +### meltingpot.lua ### + +Heat=Тепло +Melting Guide=Руководство по плавке +Melting Pot active (heat@==Тигель активный (тепло@== +Melting Pot inactive (heat@==Тигель неактивный (тепло@== +Melting Pot inactive (heat@=0)=Тигель неактивный (тепло@=0) +Menu=Меню +Menu,Recipes=Меню,Рецепты +TA1 Burning=TA1 Горение +TA1 Melting=TA1 Плавление +TA1 Melting Pot=TA1 Тигель + +### meridium.lua ### + +Meridium Axe=Меридиемувый топор +Meridium Pickaxe=Меридиемувая кирка +Meridium Shovel=Меридиемувая лопата +Meridium Sword=Меридиемувый меч + +### mesecons_converter.lua ### + +TA3 Mesecons Converter=TA3 Mesecons конвертер + +### mill.lua ### + +TA1 Mill=TA1 Мельница +TA1 Mill Gear=TA1 Шестеренка Мельницы + +### millboard.lua ### + +TA1 Acacia Millrace Board=TA1 Акациевая доска для мельницы +TA1 Acacia Wood Board=TA1 Акациевая доска +TA1 Apple Millrace Board=TA1 Яблоневая доска для мельницы +TA1 Apple Wood Board=TA1 Яблоневая доска +TA1 Aspen Millrace Board=TA1 Осиновая доска для мельницы +TA1 Aspen Wood Board=TA1 Осиновая доска +TA1 Jungle Millrace Board=TA1 Доска для мельницы из тропического дерева +TA1 Jungle Wood Board=TA1 Доска тропического дерева +TA1 Pine Millrace Board=TA1 Сосновая доска для мельницы +TA1 Pine Wood Board=TA1 Сосновая доска + +### minicell.lua ### + +TA4 Streetlamp Solar Cell=TA4 Солнечная панель для уличного светильника + +### minichest.lua ### + +Test Chest=Тестовый сундук + +### minitank.lua ### + +Test Mini Tank=Тестовый мини резервуар + +### movecontroller.lua ### + +Error: Invalid distance !!=Ошибка: Неправильное расстояние!! +Move distance=Расстояние перемещения +Move distance (A to B)=Расстояние перемещения (из А в Б) +Operational mode=Рабочий режим +Switch to the remote controlled 'move xyz' mode=Переключиться в режим 'move xyz' +TA Rack and Pinion=TA Реечная передача +TA4 Move Controller=TA4 Контроллер движения + +### node_detector.lua ### + +Click on all blocks whose positions should be checked=Нажмите на все блоки позиция которых должна быть проверена +Send signal if nodes have been:=Отправьте сигнал если: +TA3 Node Detector=TA3 Детектор нод +TA4 Node Detector=TA4 Детектор нод +added=добавлено +added or removed=добавлено или удалено +removed=удалено + +### nodes.lua ### + +TechAge Gravel=TechAge Гравий + +### oil.lua ### + +Flowing Oil=Текущая нефть +Oil Source=Источник нефти +TA3 Oil Barrel=TA3 Бочка нефти +TA3 Oil Canister=TA3 Канистра нефти + +### oilfirebox.lua ### + +TA3 Power Station Oil Burner=TA3 Нефтяная горелка для электростанции + +### petroleum.lua ### + +Isobutane Cylinder Large=Большой баллон с изобутаном +Isobutane Cylinder Small=Маленький баллон с изобутаном +Propane Cylinder Large=Большой баллон с пропаном +Propane Cylinder Small=Маленький баллон с пропаном +TA3 Bitumen=TA3 Битум +TA3 Bitumen Barrel=TA3 Бочка с битумом +TA3 Bitumen Canister=TA3 Канистра с битумом +TA3 Fuel Oil=TA3 Мазут +TA3 Fuel Oil Barrel=TA3 Бочка с мазутом +TA3 Fuel Oil Canister=TA3 Канистра с мазутом +TA3 Gasoline=TA3 Бензин +TA3 Gasoline Barrel=TA3 Бочка с бензином +TA3 Gasoline Canister=TA3 Канистра с бензином +TA3 Naphtha=TA3 Лигроин +TA3 Naphtha Barrel=TA3 Бочка с лигроином +TA3 Naphtha Canister=TA3 Канистра с лигроином +TA3 Propane=TA3 Пропан +TA4 Isobutane=TA3 Изобутан + +### pillar.lua ### + +TA4 Pillar=TA4 Колонна + +### pipe_wall_entry.lua ### + +TA3 Pipe Wall Entry=TA3 Входная стена с трубой + +### pipe_wrench.lua ### + +TA3 Drill Pipe Wrench=TA3 Гаечный ключ для сверла для бурения + +### plastic.lua ### + +Plastic Granules=Пластиковые гранулы + +### player_detector.lua ### + +Command to send when player is detected=Команда, которая отправится когда игрок будет замечен +Command to send when player moves away=Команда, которая отправится когда игрок будет двигаться +Radius=Радиус +Search radius=Радиус поиска +TA4 Player Detector=TA4 Детектор игрока + +### powder.lua ### + +Aluminum Powder=Алюминиевый порошок +Clay Powder=Глиняный порошок +Graphite Powder=Графитовый порошок +Iron Powder=Железный порошок +Leave Powder=Порошок из листьев +Needle Powder=Хвойный порошок +Silver Sandstone Powder=Порошок из серебряного песка + +### power2axle.lua ### + +TA3 Electric Motor=TA3 Мотор + +### power_line.lua ### + +TA Power Line=TA Линия электропередач +TA Power Pole=TA Опора ЛЭП +TA Power Pole Top (for up to 6 connections)=TA Верхняя часть опоры ЛЭП (больше 6 соединений) +TA Power Pole Top 2 (for landlines)=TA Верхняя часть опоры ЛЭП (для воздушных линий) + +### power_terminal2.lua ### + +Commands@nhelp . . . print this text@ncls . . . . clear screen@ngen . . print generators@nsto . . print storage systems@ncon1 . . print consumers with power consumption between 1 and 10 ku@ncon2 . . print consumers with power consumption with 10 ku or above@n=Команды@nhelp печатает этот текст@ncls очищает экран@ngen выводит генераторы источников энергии@nsto выводит системы хранения@ncon1 выводит потребителей электроэнергии потребляющих от 1 до 10 кВт@ncon2 выводит потребителей электроэнергии потребляющих 10 кВт или больше@n +Consumer=Потребитель +Network Data=Информация о электрической сети +Number of consumers:=Количество потребителей: +Number of generators:=Количество генераторов: +Number of network nodes:=Количество нод электрической сети: +Number of storage systems:=Количество хранилищ: +TA3 Power Terminal=TA3 Терминал электроэнергии + +### power_terminal2.lua ### +### terminal.lua ### + +Enter=Ввести + +### powerswitch.lua ### + +TA Power Switch=TA Выключатель +TA Power Switch Small=TA Маленький выключатель + +### powerswitchbox.lua ### +### powerswitchbox_legacy.lua ### + +TA Power Switch Box=TA Коробка выключателей + +### programmer.lua ### + +TechAge Programmer (right @= read number, left @= write numbers)=TechAge Программист (ПКМ @= прочитать число, ЛКМ написать числа) +[TechAge Programmer] Error: invalid numbers!=[TechAge Программист] Ошибка: неправильные числа! +[TechAge Programmer] Error: programmer not supported!=[TechAge Программист] Ошибка: программист не поддерживается! +[TechAge Programmer] Unknown node on=[TechAge Программист] Неизвестная нода включена +[TechAge Programmer] foreign or unknown node!=[TechAge Программст] незнакомая или неизвестная нода! +[TechAge Programmer] node programmed!=[TechAge Программист] нода запрограммирована! +[TechAge Programmer] number=[TechAge Программист] номер +[TechAge Programmer] programmer reset=[TechAge Программист] сбросить настройки программиста + +### protection.lua ### + +Allow to dig/place Techage power lines nearby power poles=Разрешить копать/ставить Techage линии электропередач недалеко от опор ЛЭП + +### pump.lua ### + +Number of liquid units that are allowed to be pumped=Количество жидкости которое можно высосать +Number of units=Количество единиц +TA3 Pump=TA3 Насос +TA4 Pump=TA4 Насос + +### pump.lua ### +### ta5_pump.lua ### + +Total flow rate=Общая скорость потока +Total flow rate in liquid units=Общая скорость потока в единицах измерения жидкости + +### pumpjack.lua ### + +Oil Pumpjack=Нефтяной +Oil amount=Количество нефти +Pumpjack=Насос +needs power=Нуждается в электроэнергии +no oil=нет нефти + +### pusher.lua ### + +Number of items=Количество предметов +Number of items that are allowed to be pushed=Количество предметов которое можно вытолкать +Optionally configure@nthe pusher with one item=Опционально настроить@nтолкатель на один предмет +Pusher=Толкатель + +### quarry.lua ### + +Digging depth=Глубина копания +Hole size=Глубина дыры +Quarry=Карьер +Start level=Начальный высота +Start level @= 0@nmeans the same level@nas the quarry is placed=Начальная высота @= 0@nозначает ту же высоту, что имеется у карьера +area is protected=зона защищена +finished=готово +inventory full=инвентарь заполнен + +### reboiler.lua ### + +TA3 Oil Reboiler=TA3 Нефтяной ребойлер + +### recipe_lib.lua ### +### recipeblock.lua ### + +Recipe=Рецепт + +### recipe_lib.lua ### +### ta4_reactor.lua ### + +Catalyst=Катализатор + +### recipeblock.lua ### + +TA4 Recipe Block=TA4 Блок рецепта + +### recipes.lua ### + +Flint and Iron=Кремень и железо +TA1 Iron Ingot=TA1 Железный слиток +[Bucket] Lava can only be placed below sea level!=[Ведро] Лава может быть расположена только ниже уровня моря! + +### recycler.lua ### + +Recycler=Переработчик + +### redstone.lua ### + +Red Stone=Красный камень +Red Stone Block=Блок красного камня +Red Stone Brick=Кирпич из красного камня + +### repeater.lua ### + +TA3 Repeater=TA3 Повторитель + +### rotor.lua ### + +Nacelle is missing=Гондола отсутствует +TA4 Carbon Fiber=TA4 Карбоновое волокно +TA4 Rotor Blade=TA4 Лопасти турбины +TA4 Wind Turbine=TA4 Ветряная турбина +TA4 Wind Turbine Nacelle=TA4 Гондола ветряной турбины отсутствует + +### screwdriver.lua ### + +Block alignment stored!=Расположение блока сохранено! +Techage Screwdriver@n(See: TA3 > Tools)=Techage отвертка@n(Посмотри TA3 > Инструменты) + +### sensorchest.lua ### + +Allow public chest access=Разрешить публичный доступ к сундуку +TA4 Sensor Chest=TA4 Сенсорный сундук + +### sequencer.lua ### + +TA3 Sequencer=TA3 Секвенсор + +### sequencer.lua ### +### sequencer2.lua ### + +stopped=остановлено + +### sequencer2.lua ### + + - 'goto ' (jump to another line)@n= - 'goto <номер>' (перепрыгнуть на другую строчку)@n + - 'nop' (do nothing)@n= - 'nop' (ничего не делать) + - 'send ' (techage command)@n= - 'send <номер ноды> + - 'stop' (stop the execution)@n= - 'stop' (останавливает выражение) + - 1 corresponds to 100 ms@n= - 1 соответствует 100 миллисекундам@n + - 50000 corresponds to 4 game days@n= - 50000 соответствует 4 игровым дням @n +'[] '@n='[<номер>] <команда>'@n + is one of the following:@n=<команда> что-то из следующего: + is a number from 1 to 50000 and is@n=<номер> это число в диапазоне от 1 до 50000 и это@n +@n=@n +Commands=Команды +Cycle time=Время цикла +Example:@n=Пример:@n +If 'yes' a received OFF command won't stop the sequencer=Если 'yes', то полученная OFF команда не остановит секвенсор +Ignore OFF command=Игнорировать команду OFF +Invalid command!=Неправильная команда +Start=Начать +Stop=Остановить +Syntax:@n=Синтаксис:@n +TA4 Sequencer=TA4 Секвенсор +Timer cycle time (default: 100 ms)=Таймер времени цикла (по умолчанию: 100 миллисекунд) +running=работает +the timeslot when the command is executed.@n=Временной интервал в течении которого выполняется команда.@n + +### sequencer2.lua ### +### submenu.lua ### + +Cancel=Отменить + +### shell.lua ### + +TA5 Fusion Reactor Nucleus=TA5 Ядро термоядерного реактора +TA5 Fusion Reactor Shell=TA5 Оболочка термоядерного реактора + +### signallamp.lua ### + +TA4 Wind Turbine Signal Lamp=TA4 Сигнальная лампа ветряной турбины +TechAge Color Lamp=TechAge Цветная лампа +TechAge Color Lamp 2=TechAge Цветная лампа 2 + +### signallamp_2x.lua ### + +TA4 2x Signal Lamp=TA4 2x Сигнальная лампа + +### signallamp_2x.lua ### +### signallamp_4x.lua ### + +Label for the lamp=Ярлык для лампы + +### signallamp_4x.lua ### + +TA4 4x Signal Lamp=TA4 4x Сигнальная лампа + +### silicon.lua ### + +TA4 Silicon Wafer=TA4 Кремниевая пластина + +### silo.lua ### + +TA3 Silo=TA3 Хранилище сыпучих материалов +TA4 Silo=TA4 Хранилище сыпучих материалов + +### simplelamp.lua ### + +TA Lamp=TA Лампа + +### sluice.lua ### + +TA1 Sluice Gate=TA1 Ворота шлюза +TA1 Sluice Handle=TA1 Ручка для шлюза + +### solarcell.lua ### + +TA4 Solar Carrier Module=TA4 Держатель солнечной панели +TA4 Solar Carrier Module B=TA4 Держатель солнечной панели B +TA4 Solar Carrier Module T=TA4 Держатель солнечной панели T +TA4 Solar Module=TA4 Солнечная панель +light=свет + +### solarcell.lua ### +### source.lua ### + +power=энергия + +### soundblock.lua ### + +Play=играть +TA3 Sound Block=TA3 Нотный блок + +### source.lua ### + +Axle Power Source=Источник механической энергии +Ele Power Source=Источник электроэнергии +Power Source=Источник энергии +Test Generator=Тестовый генератор + +### steam_pipe.lua ### + +TA2 Steam Pipe=TA2 Труба для пара + +### steelmat.lua ### + +TechAge Steel Mat=Techage Сталь + +### storage.lua ### + +Test Storage=Тестовое хранилище + +### streetlamp.lua ### + +TA Street Lamp=TA Уличная лампа + +### streetlamp2.lua ### + +TA4 LED Street Lamp=TA4 Уличная светодиодная лампа +TA4 LED Street Lamp Arm=TA4 Кронштейн для уличной светодиодной лампы +TA4 LED Street Lamp Pole=TA4 Столб для уличной светодиодной лампы + +### submenu.lua ### + +Note: You can't change any values while the block is running!=Примечание: Вы не можете изменять какие-либо числа пока блок работает! +Refresh=Обновить + +### ta1_axle.lua ### + +TA1 Axle=TA1 Вал +TA1 Axle Bearing=TA1 Подшипник с валом + +### ta2_clutch.lua ### + +TA2 Clutch=TA2 Сцепление + +### ta2_weight_chest.lua ### + +TA2 Weight Chest=TA2 Сундук с грузом + +### ta2_winch.lua ### + +TA2 Winch=TA2 Лебедка + +### ta4_cable.lua ### + +TA4 Low Power Box=TA4 Распределительная коробка низкого напряжения +TA4 Low Power Cable=TA4 Кабель низкого напряжения + +### ta4_cable_wall_entry.lua ### + +TA4 Cable Wall Entry=TA4 Входная стена с кабелем + +### ta4_chest.lua ### + +Empty the slots always @nfrom right to left=Опустошайте слоты@nсправа налево +Never completely empty the slots@nwith the pusher to keep the item assignment=Никогда полностью не опустошайте слоты с помощью толкателя, чтобы не сбить расположение предметов +Size=Размер +TA4 8x2000 Chest=TA4 8x2000 Сундук +Unlock=Разблокировать +Unlock connected chest@nif all slots are below 2000=Разблокировать соединенный сундук@nесли во всех слотах меньше 2000 +right to left=справа налево + +### ta4_doser.lua ### + +Doser=Дозатор +TA4 Doser=TA4 Дозатор +catalyst missing=отсутствует катализатор +reactor defect=дефект реактора +reactor defect or no power=дефект реактора или нет энергии +reactor has no power=у реактора нет энергии +wrong catalyst=неправильный катализатор + +### ta4_doser.lua ### +### ta4_reactor.lua ### + +TA4 Reactor=TA4 Реактор + +### ta4_injector.lua ### + +Configure up to 8 items @nto be pushed by the injector=Выберите 8 предметов которые должен толкать инжектор +Injector=Инжектор +Switch to pull mode @nto pull items out of inventory slots @naccording the injector configuration=Переключитесь в режим извлечения,@nчто бы извлекать предметы из инвентаря в@nсоответствии настройками инжектора +pull mode=режим извлечения + +### ta4_liquid_filter.lua ### + +TA4 Liquid Filter Filler=TA4 Наполнитель жидкостных фильтров +TA4 Liquid Filter Sink=TA4 Жидкостный фильтр с формой раковины + +### ta4_reactor.lua ### + +TA4 Reactor Filler Pipe=TA4 Труба-наполнитель реактора + +### ta4_stand.lua ### + +TA4 Reactor Base=TA4 Основание реактора +TA4 Reactor Stand=TA4 Стенд для реактора +off=выключить +on=включить + +### ta4_stand.lua ### +### waterpump.lua ### + +no power=нет энергии + +### ta5_chest.lua ### + +TA5 Hyperloop Chest=TA5 Hyperloop сундук + +### ta5_pump.lua ### + +TA5 Pump=TA5 Насос + +### ta5_tank.lua ### + +TA5 Hyperloop Tank=TA5 Hyperloop Резервуар + +### tank.lua ### + +Oil Tank=Нефтяной резервуар +TA3 Tank=TA3 Резервуар +TA4 Tank=TA4 Резервуар + +### tank_cart.lua ### + +TA Tank Cart=TA Вагонетка с резервуаром + +### teleport.lua ### + +Connected=Соединен +Connection status=Статус соединения +Distance > @1 blocks=Расстояние > @1 блоков +Ex-points missing (@1 < @2)=Очки опыта отсутствуют (@1 < @2) +Status=Статус +server not connected=сервер не соединен + +### teleport_pipe.lua ### + +TA5 Teleport Block Liquids=TA5 Блок для телепортирования жидкостей + +### teleport_pipe.lua ### +### teleport_tube.lua ### + +Remote block error=Ошибка удаленного блока + +### teleport_tube.lua ### + +TA5 Teleport Block Items=TA5 Блок для телепортирования предметов + +### terminal.lua ### + +Syntax error, try help=Синтаксическая ошибка, попробуйте написать help +TA3 Terminal=TA3 Терминал +TA4 Terminal=TA4 Терминал +commands like: help=команды как: help + +### timer.lua ### + +TA3 Timer=TA3 Таймер + +### tiny_generator.lua ### + +TA3 Tiny Power Generator=TA3 Небольшой генератор энергии +Tiny Generator=Небольшой генератор +no fuel=нет топлива + +### tower.lua ### + +TA3 Derrick=TA3 Буровая вышка +TA3 Drill Pipe=TA3 Буровая труба +TA4 Derrick=TA4 Буровая вышка +[TA] Derrick is being built!=[TA] Буровая вышка построена! +[TA] Derrick is being removed!=[TA] Буровая вышка удалена! + +### transformer.lua ### + +TA4 Isolation Transformer=TA4 Изолирующий трансформатор + +### trowel.lua ### + +TechAge Trowel=TechAge Мастерок + +### tube_wall_entry.lua ### + +Tube Wall Entry=Входная стена с трубой + +### tubes.lua ### + +TechAge Tube=TechAge Труба + +### tubes_ta4.lua ### + +TA4 Tube=TA4 Труба + +### turbine.lua ### + +TA3 Turbine=TA3 Турбина +TA4 Turbine=TA4 Турбина +TA5 Turbine=TA5 Турбина + +### turncontroller.lua ### + +Click on all blocks that shall be turned=Нажмите на все блоки которые должны быть повернуты +TA4 Turn Controller=TA4 Контроллер движения +Turn left=Повернуть налево +Turn right=Повернуть направо + +### usmium.lua ### + +Usmium Nuggets=Усмиевые самородки +Usmium Powder=Усмиевый порошок + +### vacuumtube.lua ### + +TA4 Vacuum Tube=TA4 Вакуумная труба + +### valve.lua ### + +TA Valve=TA Вентиль +TA3 Valve=TA3 Вентиль + +### waterinlet.lua ### + +Error: No natural water!=Ошибка: Нет природной воды! +Error: No water available!=Ошибка: Нет доступной воды! +Error: Not on sea level!=Ошибка: Не на уровне моря! +Operational=Готов к работе +TA4 Water Inlet=TA4 Водозабор + +### watermill.lua ### + +TA1 Watermill=TA1 Водяное колесо + +### waterpump.lua ### + +TA4 Water Pump=TA4 Водяной насос +Water Pump=Водяной насос + +### windturbine_lib.lua ### + +Here is not enough water (41x41 m)!=Здесь недостаточно воды (41x41 м)! +Here is not enough wind@n(A free air space of 41x41x21 m is necessary)!=Здесь недостаточно ветра@n(необходимо 41x41x21 м свободного воздушного пространства)! +The next wind turbines is too close!=Следующая ветряная турбина слишком близко! +This is a=Это +This is no ocean water!=Это не океанская вода! +This is not the surface of the ocean!=Это не поверхность океана! +[TA4 Wind Turbine]=[TA4 Ветряная турбина] +biome and no ocean!=биом и не океан! +is a suitable place for a wind turbine!=подходящее место для ветряной турбины! + +### worker.lua ### + +Build detector=Детектор строительства +Item list=Список предметов +Remove detector=Детектор удаления +TA4 Collider Detector Worker=TA4 Построитель детектора коллайдера +[TA4] Detector is being built!=[TA4] Детектор был построен! +[TA4] Detector is being removed!=[TA4] Детектор был удален! diff --git a/techage/locale/template.txt b/techage/locale/template.txt index 49e05cc..2b6be2c 100644 --- a/techage/locale/template.txt +++ b/techage/locale/template.txt @@ -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= diff --git a/techage/logic/button.lua b/techage/logic/button.lua index 07b6d2f..3a26194 100644 --- a/techage/logic/button.lua +++ b/techage/logic/button.lua @@ -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 diff --git a/techage/logic/button_2x.lua b/techage/logic/button_2x.lua index e38244d..a016f7a 100644 --- a/techage/logic/button_2x.lua +++ b/techage/logic/button_2x.lua @@ -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", diff --git a/techage/logic/button_4x.lua b/techage/logic/button_4x.lua index 5a73c9a..7c30107 100644 --- a/techage/logic/button_4x.lua +++ b/techage/logic/button_4x.lua @@ -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", diff --git a/techage/logic/detector.lua b/techage/logic/detector.lua index d7985ba..2dbde0e 100644 --- a/techage/logic/detector.lua +++ b/techage/logic/detector.lua @@ -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 diff --git a/techage/logic/programmer.lua b/techage/logic/programmer.lua index c119720..0c02947 100644 --- a/techage/logic/programmer.lua +++ b/techage/logic/programmer.lua @@ -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!")) diff --git a/techage/logic/terminal.lua b/techage/logic/terminal.lua index c8776f6..1008ac3 100644 --- a/techage/logic/terminal.lua +++ b/techage/logic/terminal.lua @@ -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, }) diff --git a/techage/manuals/description.md b/techage/manuals/description.md new file mode 100644 index 0000000..08c39ff --- /dev/null +++ b/techage/manuals/description.md @@ -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] + +Image + +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. + +Image + +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! diff --git a/techage/manuals/manual_DE.md b/techage/manuals/manual_DE.md index 866c80d..929b7de 100644 --- a/techage/manuals/manual_DE.md +++ b/techage/manuals/manual_DE.md @@ -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. diff --git a/techage/manuals/manual_EN.md b/techage/manuals/manual_EN.md index b68952e..ae79e23 100644 --- a/techage/manuals/manual_EN.md +++ b/techage/manuals/manual_EN.md @@ -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] diff --git a/techage/manuals/manual_pt-BR.md b/techage/manuals/manual_pt-BR.md new file mode 100644 index 0000000..6cabb8a --- /dev/null +++ b/techage/manuals/manual_pt-BR.md @@ -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 diff --git a/techage/manuals/manual_ta1_pt-BR.md b/techage/manuals/manual_ta1_pt-BR.md new file mode 100644 index 0000000..4fa4a73 --- /dev/null +++ b/techage/manuals/manual_ta1_pt-BR.md @@ -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. diff --git a/techage/manuals/manual_ta2_pt-BR.md b/techage/manuals/manual_ta2_pt-BR.md new file mode 100644 index 0000000..da50b1b --- /dev/null +++ b/techage/manuals/manual_ta2_pt-BR.md @@ -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] + + + + + + + + + + + + + + + + + diff --git a/techage/manuals/manual_ta3_pt-BR.md b/techage/manuals/manual_ta3_pt-BR.md new file mode 100644 index 0000000..e4d2851 --- /dev/null +++ b/techage/manuals/manual_ta3_pt-BR.md @@ -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: + +``` + = on/off if is true +``` + +`` é o número do bloco para o qual o comando deve ser enviado. +`` é 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 ``. +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 + +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 ` 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 ` para ajustar o volume via o valor `` (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] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/techage/manuals/manual_ta4_pt-BR.md b/techage/manuals/manual_ta4_pt-BR.md new file mode 100644 index 0000000..8930b47 --- /dev/null +++ b/techage/manuals/manual_ta4_pt-BR.md @@ -0,0 +1,1017 @@ +# TA4: Presente + +Fontes de energia renováveis, 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. + +[techage_ta4|image] + + +## Turbina eólica + +Uma turbina eólica sempre fornece eletricidade quando há vento. Não há vento no jogo, mas o mod simula isso girando as turbinas eólicas somente pela manhã (5:00 - 9:00) e à noite (17:00 - 21:00). Uma turbina eólica só fornece eletricidade se estiver instalada em um local adequado. + +As usinas eólicas da TA são usinas puramente offshore, o que significa que elas precisam ser construídas no mar. Isso significa que as turbinas eólicas só podem ser construídas em um bioma marinho (oceano) e que deve haver água suficiente e uma visão clara ao redor do mastro. + +Para encontrar um local adequado, clique na água com a chave inglesa (TechAge Info Tool). Uma mensagem de bate-papo mostrará se essa posição é adequada para o mastro da turbina eólica. + +A corrente deve ser conduzida do bloco do rotor até o mastro. Primeiro, puxe a linha de energia para cima e, em seguida, "engesse" o cabo de energia com blocos de pilar TA4. Uma plataforma de trabalho pode ser construída abaixo. A planta à direita mostra a estrutura na parte superior. + +A turbina eólica fornece 70 ku, mas apenas 8 horas por dia (veja acima). + +[ta4_windturbine|plan] + + +### Turbina eólica TA4 + +O bloco da turbina eólica (rotor) é o coração da turbina eólica. Esse bloco deve ser colocado no topo do mastro. Idealmente, em Y = 15, então você fica dentro de um bloco de mapa/carga. +Quando você inicia a turbina, todas as condições para a operação da turbina eólica são verificadas. Se todas as condições forem atendidas, as pás do rotor (asas) aparecerão automaticamente. Caso contrário, você receberá uma mensagem de erro. + +[ta4_windturbine|image] + + +### Nacelle da turbina eólica TA4 + +Esse bloco deve ser colocado na extremidade preta do bloco da turbina eólica. + +[ta4_nacelle|image] + + +### Lâmpada de sinalização de turbina eólica TA4 + +Essa luz intermitente serve apenas para fins decorativos e pode ser colocada na parte superior do bloco da turbina eólica. + +[ta4_blinklamp|image] + + +### Pilar TA4 + +Isso constrói o mastro da turbina eólica. No entanto, esses blocos não são fixados manualmente, mas devem ser fixados com a ajuda de uma espátula(trowel), de modo que a linha de energia para a ponta do mastro seja substituída por esses blocos (consulte Cabo de energia TA). + +[ta4_pillar|image] + + +## Sistema Solar + +O sistema solar só produz eletricidade quando o sol está brilhando. No jogo, isso ocorre todo dia de jogo, das 6h às 18h. +A mesma energia está sempre disponível durante esse período. Após as 18h00, os módulos solares se desligam completamente. + +A temperatura do bioma é decisiva para o desempenho dos módulos solares. Quanto mais quente for a temperatura, maior será o rendimento. +A temperatura do bioma pode ser determinada com a Techage Info Tool (chave inglesa). Normalmente, ela oscila entre 0 e 100: + +- a potência total está disponível a 100 +- a 50, metade da potência está disponível +- em 0, não há serviço disponível + +Portanto, é aconselhável procurar estepes e desertos quentes para o sistema solar. +As linhas aéreas estão disponíveis para o transporte de eletricidade. +No entanto, também é possível produzir hidrogênio, que pode ser transportado e convertido novamente em eletricidade no destino. + +A menor unidade em um sistema solar é composta por dois módulos solares e um módulo de transporte. O módulo de transporte deve ser colocado primeiro, com os dois módulos solares à esquerda e à direita próximos a ele (não acima!). + +A planta à direita mostra 3 unidades, cada uma com dois módulos solares e um módulo de suporte, conectadas ao inversor por meio de cabos vermelhos. + +Os módulos solares fornecem tensão CC, que não pode ser alimentada diretamente na rede elétrica. Portanto, as unidades solares devem primeiro ser conectadas ao inversor por meio do cabo vermelho. Ele consiste em dois blocos, um para o cabo vermelho dos módulos solares (CC) e outro para o cabo de alimentação cinza da rede elétrica (CA). + +A área do mapa onde o sistema solar está localizado deve estar totalmente carregada. Isso também se aplica à posição direta acima do módulo solar, pois a intensidade da luz é medida regularmente nesse local. Portanto, é aconselhável definir primeiro um bloco de carga e depois colocar os módulos dentro dessa área. + +[ta4_solarplant|plan] + + +### Módulo solar TA4 + +O módulo solar deve ser colocado no módulo de suporte. São sempre necessários dois módulos solares. +Em um par, os módulos solares têm desempenho de até 3 ku, dependendo da temperatura. +Com os módulos solares, deve-se tomar cuidado para que eles tenham plena luz do dia e não sejam sombreados por blocos ou árvores. Isso pode ser testado com a Info Tool (wrench ou chave inglesa). + +[ta4_solarmodule|image] + + +### Módulo de transporte solar TA4 + +O módulo de suporte está disponível em duas alturas (1m e 2m). Ambos são funcionalmente idênticos. +Os módulos portadores podem ser colocados diretamente um ao lado do outro e, assim, conectados para formar uma fileira de módulos. A conexão com o inversor ou com outras séries de módulos deve ser feita com os cabos vermelhos de baixa tensão ou com as caixas de junção de baixa tensão. + +[ta4_solarcarrier|image] + + +### Inversor solar TA4 + +O inversor converte a energia solar (CC) em corrente alternada (CA) para que ela possa ser alimentada na rede elétrica. +Um inversor pode alimentar um máximo de 100 ku de eletricidade, o que corresponde a 33 módulos solares ou mais. + +[ta4_solar_inverter|image] + + +### Cabo de baixa potência TA4 + +O cabo de baixa tensão é usado para conectar fileiras de módulos solares ao inversor. O cabo não deve ser usado para outros fins. + +O comprimento máximo do cabo é de 200 m. + +[ta4_powercable|image] + + +### Caixa de junção de baixa tensão TA4 + +A caixa de junção deve ser colocada no chão. Ela tem apenas 4 conexões (nas 4 direções). + +[ta4_powerbox|image] + + +### Célula solar para lâmpadas de rua TA4 + +Como o nome sugere, a célula solar para lâmpadas de rua é usada para alimentar uma lâmpada de rua. Uma célula solar pode alimentar duas lâmpadas (1 ku). A célula solar armazena a energia do sol durante o dia e fornece a eletricidade para a lâmpada à noite. Isso significa que a lâmpada só brilha no escuro. + +Essa célula solar não pode ser combinada com os outros módulos solares. + +[ta4_minicell|image] + + + +## Armazenamento de energia térmica + +O armazenamento de energia térmica substitui o bloco de baterias do TA3. + +O armazenamento de energia térmica consiste em uma concha de concreto (blocos de concreto) preenchida com cascalho. São possíveis cinco tamanhos de armazenamento: + +- Cobertura com blocos de concreto 5x5x5, preenchida com 27 cascalhos, capacidade de armazenamento: 22,5 kud +- Cobertura com blocos de concreto 7x7x7, preenchidos com cascalho 125, capacidade de armazenamento: 104 kud +- Cobertura com blocos de concreto 9x9x9, preenchida com 343 cascalhos, capacidade de armazenamento: 286 kud +- Cobertura com blocos de concreto 11x11x11, preenchida com 729 cascalhos, capacidade de armazenamento: 610 kud +- Cobertura com blocos de concreto 13x13x13, preenchidos com cascalho 1331, capacidade de armazenamento: 1112 kud + +Uma janela feita de um bloco de vidro de obsidiana pode ser colocada na estrutura de concreto. Ela deve ser colocada bem no meio da parede. Por essa janela, é possível ver se o armazenamento está carregado em mais de 80%. Na planta à direita, você pode ver a estrutura do trocador de calor TA4, que consiste em 3 blocos, a turbina TA4 e o gerador TA4. Preste atenção ao alinhamento do trocador de calor (a seta no bloco 1 deve apontar para a turbina). + +Ao contrário da planta à direita, as conexões no bloco de armazenamento devem estar no mesmo nível (dispostas horizontalmente, ou seja, não abaixo e acima). As entradas de tubulação (TA4 Pipe Inlet) devem estar exatamente no meio da parede e de frente uma para a outra. Os tubos TA4 amarelos são usados como tubos de vapor. Os tubos de vapor TA3 não podem ser usados aqui. +Tanto o gerador quanto o trocador de calor têm uma conexão de energia e devem ser conectados à rede elétrica. + +Em princípio, o sistema de armazenamento de calor funciona exatamente da mesma forma que as baterias, só que com muito mais capacidade de armazenamento. + +Para que o sistema de armazenamento de calor funcione, todos os blocos (também a casca de concreto e o cascalho) devem ser carregados usando um bloco forceload. + +[ta4_storagesystem|plan] + + +### Trocador de calor TA4 + +O trocador de calor consiste em três partes que devem ser colocadas umas sobre as outras, com a seta do primeiro bloco apontando para a turbina. Os tubos devem ser construídos com os tubos TA4 amarelos. +O trocador de calor deve ser conectado à rede elétrica. O dispositivo de armazenamento de energia é recarregado por meio do trocador de calor, desde que haja eletricidade suficiente disponível. + +[ta4_heatexchanger|image] + + +### Turbina TA4 + +A turbina faz parte do armazenamento de energia. Ela deve ser colocada ao lado do gerador e conectada ao trocador de calor por meio de tubos TA4, conforme mostrado na planta. + +[ta4_turbine|image] + + +### Gerador TA4 + +O gerador é usado para gerar eletricidade. Portanto, o gerador também deve ser conectado à rede elétrica. +O gerador faz parte do armazenamento de energia. Ele é usado para gerar eletricidade e, assim, liberar a energia da unidade de armazenamento de energia. Portanto, o gerador também deve ser conectado à rede elétrica. + +Importante: Tanto o trocador de calor quanto o gerador devem estar conectados à mesma rede elétrica! + +[ta4_generator|image] + + +### Entrada do tubo TA4 + +Um bloco de entrada de tubo deve ser instalado em cada um dos dois lados do bloco de armazenamento. Os blocos devem estar exatamente de frente um para o outro. + +Os blocos de entrada de tubo **não** podem ser usados como aberturas normais de parede; em vez disso, use os blocos de entrada de tubo TA3 na parede. + +[ta4_pipeinlet|image] + + +### Tubo TA4 + +Com o TA4, os tubos amarelos são usados para a transmissão de gás e líquidos. +O comprimento máximo do cabo é de 100 m. + +[ta4_pipe|image] + + + +## Distribuição de energia + +Com a ajuda de cabos de energia e caixas de junção, é possível configurar redes de energia de até 1.000 blocos/nós. Entretanto, deve-se observar que as caixas de distribuição também devem ser contadas. Isso significa que até 500 geradores/sistemas de armazenamento/máquinas/lâmpadas podem ser conectados a uma rede elétrica. + +Com a ajuda de um transformador de isolamento e de um medidor de eletricidade, as redes podem ser conectadas para formar estruturas ainda maiores. + +[ta4_transformer|image] + +### Transformador de isolamento TA4 + +Com a ajuda de um transformador de isolamento, duas redes de energia podem ser conectadas para formar uma rede maior. O transformador de isolamento pode transmitir eletricidade em ambas as direções. + +O transformador de isolamento pode transmitir até 300 ku. O valor máximo é ajustável por meio do menu da chave inglesa. + +[ta4_transformer|image] + +### Medidor elétrico TA4 + +Com a ajuda de um medidor de eletricidade, duas redes de eletricidade podem ser conectadas para formar uma rede maior. O medidor de eletricidade transmite eletricidade somente em uma direção (observe a seta). A quantidade de energia elétrica transmitida (em kud) é medida e exibida. Esse valor também pode ser consultado por um controlador Lua usando o comando `consumption`. A corrente atual pode ser consultada por meio do comando `current`. + +O medidor de eletricidade pode passar até 200 ku. O valor máximo é ajustável por meio do menu da chave inglesa. + +Uma contagem regressiva da potência de saída também pode ser inserida por meio do menu da chave inglesa. Quando essa contagem regressiva chega a zero, o medidor de eletricidade é desligado. A contagem regressiva pode ser consultada com o comando `countdown`. + +[ta4_electricmeter|image] + +### Laser TA4 + +O laser TA4 é usado para transmissão de energia sem fio. Para isso, são necessários dois blocos: Emissor de feixe de laser TA4 e Receptor de feixe de laser TA4. Deve haver um espaço de ar entre os dois blocos para que o feixe de laser possa ser construído a partir do emissor até o receptor. Primeiro, o emissor deve ser colocado. Isso liga imediatamente o feixe de laser e mostra as possíveis posições do receptor. As possíveis posições do receptor também são exibidas por meio de uma mensagem de bate-papo. + +Com o laser, distâncias de até 96 blocos podem ser superadas. Depois que a conexão é estabelecida (não é necessário haver fluxo de corrente), isso é indicado por meio do texto informativo do emissor e também do receptor. + +Os blocos de laser em si não requerem eletricidade. + +[ta4_laser|image] + + + +## Hidrogênio + +A eletrólise pode ser usada para dividir a eletricidade em hidrogênio e oxigênio. Por outro lado, o hidrogênio pode ser convertido novamente em eletricidade com o oxigênio do ar usando uma célula de combustível. +Isso permite que os picos de corrente ou um excesso de fornecimento de eletricidade sejam convertidos em hidrogênio e, portanto, armazenados. + +No jogo, a eletricidade pode ser convertida novamente em eletricidade por meio da célula de combustível usando o eletrolisador em hidrogênio e hidrogênio. +Isso significa que a eletricidade (na forma de hidrogênio) pode não apenas ser armazenada em tanques, mas também transportada por meio do carrinho-tanque. + +No entanto, a conversão de eletricidade em hidrogênio e vice-versa é deficitária. De 100 unidades de eletricidade, apenas 95 unidades de eletricidade saem após a conversão em hidrogênio e vice-versa. + +[ta4_hydrogen|image] + + +### Eletrolisador + +O eletrolisador converte eletricidade em hidrogênio. +Ele deve ser alimentado pela esquerda. À direita, o hidrogênio pode ser extraído por meio de tubos e bombas. + +O eletrolisador pode consumir até 35 ku de eletricidade e, em seguida, gera um item de hidrogênio a cada 4 s. +200 unidades de hidrogênio cabem no eletrolisador. + +O eletrolisador tem um menu de chave inglesa para definir o consumo de corrente e o ponto de desligamento. + +Se a energia armazenada na rede elétrica cair abaixo do valor especificado do ponto de desligamento, o eletrolisador se desliga automaticamente. Isso evita que os sistemas de armazenamento fiquem vazios. + +[ta4_electrolyzer|image] + + +### Célula de combustível + +A célula de combustível converte hidrogênio em eletricidade. +Ele deve ser abastecido com hidrogênio pela esquerda por meio de uma bomba. A conexão de energia está à direita. + +A célula de combustível pode fornecer até 34 ku de eletricidade e precisa de um item de hidrogênio a cada 4 s. + +Normalmente, a célula de combustível funciona como um gerador de categoria 2 (como outros sistemas de armazenamento). +Nesse caso, nenhum outro bloco de categoria 2, como o bloco de bateria, pode ser carregado. No entanto, a célula de combustível também pode ser usada como um gerador de categoria 1 por meio da caixa de seleção. + +[ta4_fuelcell|image] + + +## Reator químico + +O reator é usado para processar os ingredientes obtidos da torre de destilação ou de outras receitas em novos produtos. +A planta à esquerda mostra apenas uma variante possível, pois a disposição dos silos e tanques depende da receita. + +O produto primário de saída é sempre descarregado na lateral do suporte do reator, independentemente de ser um pó ou um líquido. O produto residual (secundário) é sempre descarregado na parte inferior do suporte do reator. + +Um reator consiste em: +- Vários tanques e silos com os ingredientes que são conectados ao dosador por meio de tubos +- opcionalmente, uma base do reator, que descarrega os resíduos do reator (necessário apenas para receitas com dois produtos de saída) +- o suporte do reator, que deve ser colocado na base (se disponível). O suporte tem uma conexão de energia e consome 8 ku durante a operação. +- O vaso do reator que deve ser colocado no suporte do reator +- O tubo de enchimento que deve ser colocado no vaso do reator +- O dispositivo de dosagem, que deve ser conectado aos tanques ou silos e ao tubo de enchimento por meio de tubos + +Observação 1: Os líquidos são armazenados somente em tanques e os sólidos e substâncias em pó somente em silos. Isso se aplica a ingredientes e produtos finais. + +Observação 2: Os tanques ou silos com conteúdos diferentes não devem ser conectados a um sistema de tubulação. Por outro lado, vários tanques ou silos com o mesmo conteúdo podem ser pendurados em paralelo em uma linha. + +O craqueamento quebra cadeias longas de hidrocarbonetos em cadeias curtas usando um catalisador. +O pó de gibbsita serve como catalisador (não é consumido). Ele pode ser usado para converter betume em óleo combustível, óleo combustível em nafta e nafta em gasolina. + +Na hidrogenação, pares de átomos de hidrogênio são adicionados a uma molécula para converter hidrocarbonetos de cadeia curta em longa. +Aqui, o pó de ferro é necessário como catalisador (não é consumido). Ele pode ser usado para converter gás (propano) em isobutano, +isobutano em gasolina, gasolina em nafta, nafta em óleo combustível e óleo combustível em betume. + + +[ta4_reactor|plan] + + +### Dosador TA4 + +Parte do reator químico. +As tubulações para materiais de entrada podem ser conectadas em todos os quatro lados do dosador. Os materiais para o reator são descarregados para cima. + +A receita pode ser definida e o reator pode ser iniciado por meio do dosador. + +Como em outras máquinas: +- se o dosador estiver no modo de espera, um ou mais ingredientes estão faltando +- se o dosador estiver no estado bloqueado, o tanque ou silo de saída está cheio, com defeito ou conectado incorretamente + +O dosador não precisa de eletricidade. Uma receita é processada a cada 10 s. + +[ta4_doser|image] + +### Reator TA4 + +Parte do reator químico. O reator tem um inventário para os itens de catalisador (para receitas de craqueamento e hidrogenação). + +[ta4_reactor|image] + + +### Tubo de enchimento TA4 + +Parte do reator químico. Deve ser colocado no reator. Se isso não funcionar, remova o tubo na posição acima e coloque-o novamente. + +[ta4_fillerpipe|image] + + +### Suporte do reator TA4 + +Parte do reator químico. Aqui também está a conexão de energia para o reator. O reator requer 8 ku de eletricidade. + +O suporte tem duas conexões de tubulação, à direita para o produto inicial e abaixo para os resíduos, como a lama vermelha na produção de alumínio. + +[ta4_reactorstand|image] + + +### Base do reator TA4 + +Parte do reator químico. É necessário para a drenagem do produto residual. + +[ta4_reactorbase|image] + + +### Silo TA4 + +Parte do reator químico. É necessário para armazenar substâncias em forma de pó ou grânulos. + +[ta4_silo|image] + + + + +## Controlador ICTA + +O controlador ICTA (ICTA significa "If Condition Then Action") é usado para monitorar e controlar máquinas. O controlador pode ser usado para ler dados de máquinas e outros blocos e, dependendo disso, ligar/desligar outras máquinas e blocos. + +Os dados da máquina são lidos e os blocos e máquinas são controlados por meio de comandos. O capítulo TA3 -> Blocos lógicos/comutação é importante para entender como os comandos funcionam. + +O controlador requer uma bateria para funcionar. O visor é usado para emitir dados, a torre de sinalização para exibir erros. + +[ta4_icta_controller|image] + + + +### Controlador TA4 ICTA + +O controlador funciona com base nas regras `IF THEN `. Podem ser criadas até 8 regras por controlador. + +Exemplos de regras são: + +- Se um distribuidor estiver "bloqueado", o empurrador na frente dele deve ser desligado +- Se uma máquina apresentar um erro, isso deverá ser mostrado no visor + +O controlador verifica essas regras ciclicamente. Para fazer isso, um tempo de ciclo em segundos (`` Cycle / s '') deve ser especificado para cada regra (1...1000). + +Para regras que avaliam uma entrada ligada/desligada, por exemplo, de um interruptor ou detector, o tempo de ciclo 0 deve ser especificado. O valor 0 significa que essa regra deve ser sempre executada quando o sinal de entrada for alterado, por exemplo, quando o botão enviar um novo valor. + +Todas as regras devem ser executadas apenas com a frequência necessária. Isso tem duas vantagens: + +- a bateria do controlador dura mais (cada controlador precisa de uma bateria) +- a carga do servidor é menor (portanto, menos atrasos) + +Você deve definir um tempo de atraso (`depois/s`) para cada ação. Se a ação tiver que ser executada imediatamente, deve-se inserir 0. + +O controlador tem sua própria ajuda e informações sobre todos os comandos por meio do menu do controlador. + +[ta4_icta_controller|image] + +### Bateria + +A bateria deve ser colocada bem próxima ao controlador, ou seja, em uma das 26 posições ao redor do controlador. + +[ta4_battery|image] + +### Exibição do TA4 + +O display mostra seu número após a colocação. O display pode ser endereçado por meio desse número. Os textos podem ser exibidos no visor, sendo que o visor pode exibir 5 linhas e, portanto, 5 textos diferentes. + +As linhas de texto são sempre alinhadas à esquerda. Se o texto tiver que ser centralizado horizontalmente, deverá ser precedido pelo caractere "\t" (tabulador). + +O visor é atualizado no máximo uma vez por segundo. + +[ta4_display|image] + +### TA4 Display XL + +O TA4 Display XL tem o dobro do tamanho do display TA4. + +As linhas de texto são sempre alinhadas à esquerda. Se o texto tiver que ser centralizado horizontalmente, deverá ser precedido pelo caractere "\t" (tabulador). + +O visor é atualizado a cada dois segundos, no máximo. + +[ta4_displayXL|image] + + +### Torre de sinalização TA4 + +A torre de sinalização pode exibir vermelho, verde e laranja. Não é possível uma combinação das três cores. + +[ta4_signaltower|image] + + + +## Controlador TA4 Lua + +Como o nome sugere, o controlador Lua deve ser programado na linguagem de programação Lua. O manual em inglês está disponível aqui: + +https://github.com/joe7575/techage/blob/master/manuals/ta4_lua_controller_EN.md + +O controlador Lua também requer uma bateria. A bateria deve ser colocada bem próxima ao controlador, ou seja, em uma das 26 posições ao redor do controlador. + +[ta4_lua_controller|image] + +### Servidor TA4 Lua + +O servidor é usado para o armazenamento central de dados de vários controladores Lua. Ele também salva os dados após a reinicialização do servidor. + +[ta4_lua_server|image] + +### Caixa do sensor TA4 / baú + +A caixa de sensores TA4 é usada para configurar armazéns automáticos ou máquinas de venda automática em conjunto com o controlador Lua. +Se algo for colocado na caixa ou removido, ou se uma das teclas "F1"/"F2" for pressionada, um sinal de evento será enviado ao controlador Lua. +A caixa do sensor suporta os seguintes comandos: + +- O status da caixa pode ser consultado por meio de `state = $send_cmnd(, "state")`. As respostas possíveis são: "empty" (vazio), "loaded" (carregado), "full" (cheio) +- A última ação do jogador pode ser consultada por meio de `name, action = $send_cmnd(, "action")`. `name` é o nome do jogador. Uma das seguintes opções é retornada como `action`: "put", "take", "f1", "f2". +- O conteúdo da caixa pode ser lido por meio de `stacks = $send_cmnd(, "stacks")`. Consulte: https://github.com/joe7575/techage/blob/master/manuals/ta4_lua_controller_EN.md#sensor-chest +- Por meio de `$send_cmnd(, "text", "pressione ambos os botões e coloque algo no peito")`, o texto pode ser definido no menu da caixa do sensor. + +A caixa de seleção "Allow public chest access" (Permitir acesso público ao baú) pode ser usada para definir se a caixa pode ser usada por todos ou somente por jogadores que tenham direitos de acesso/proteção aqui. + +[ta4_sensor_chest|image] + +### Terminal do controlador TA4 Lua + +O terminal é usado para entrada/saída do controlador Lua. + +[ta4_terminal|image] + + + +## Módulos de lógica/comutação TA4 + +### Botão/interruptor TA4 + +Apenas a aparência do botão/chave TA4 foi alterada. A funcionalidade é a mesma do botão/chave TA3. No entanto, com o menu da chave inglesa, os dados podem ser alterados posteriormente. + +[ta4_button|image] + +### Botão TA4 2x + +Esse bloco tem dois botões que podem ser configurados individualmente por meio do menu de chave inglesa. A rotulagem e o endereço do bloco de destino podem ser configurados para cada botão. Além disso, o comando a ser enviado pode ser configurado para cada botão. + +[ta4_button_2x|image] + + +### Botão TA4 4x + +Esse bloco tem quatro botões que podem ser configurados individualmente por meio do menu de chave inglesa. A rotulagem e o endereço do bloco de destino podem ser configurados para cada botão. Além disso, o comando a ser enviado pode ser configurado para cada botão. + +[ta4_button_4x|image] + +### Lâmpada de sinalização TA4 2x + +Esse bloco tem duas lâmpadas que podem ser controladas individualmente. Cada lâmpada pode exibir as cores "vermelho", "verde" e "âmbar". A rotulagem de ambas as lâmpadas pode ser configurada por meio do menu de chave inglesa. As lâmpadas podem ser controladas usando os seguintes comandos: + +- Mudar a lâmpada 1 para vermelho: `$send_cmnd(1234, "red", 1)` +- Mude a lâmpada 2 para verde: `$send_cmnd(1234, "green ", 2)` +- Mudar a lâmpada 1 para laranja: `$send_cmnd(1234, "amber", 1)` +- Desligar a lâmpada 2: `$send_cmnd(1234, "off", 2)` + +[ta4_signallamp_2x|image] + +### Lâmpada de sinalização TA4 4x + +Esse bloco tem quatro lâmpadas que podem ser controladas individualmente. Cada lâmpada pode exibir as cores "vermelho", "verde" e "âmbar". A rotulagem de todas as lâmpadas pode ser configurada por meio do menu de chave inglesa. As lâmpadas podem ser controladas usando os seguintes comandos: + +- Mudar a lâmpada 1 para vermelho: `$send_cmnd(1234, "red", 1)` +- Mude a lâmpada 2 para verde: `$send_cmnd(1234, "green ", 2)` +- Mudar a lâmpada 3 para laranja: `$send_cmnd(1234, "amber", 3)` +- Desligar a lâmpada 4: `$send_cmnd(1234, "off", 4)` + +[ta4_signallamp_4x|image] + +### Detector de jogadores TA4 + +Apenas a aparência do detector de player TA4 foi alterada. A funcionalidade é a mesma do detector de player TA3. + +[ta4_playerdetector|image] + +### Coletor de estado TA4 + +[ta4_collector|image] + +O coletor de status consulta todas as máquinas configuradas para obter o status. Se uma das máquinas tiver atingido ou excedido um status pré-configurado, um comando "on" será enviado. Por exemplo, muitas máquinas podem ser facilmente monitoradas quanto a falhas a partir de um controlador Lua. + +### Detector TA4 + +A funcionalidade é a mesma do detector TA3. Além disso, o detector conta os itens passados adiante. +Esse contador pode ser consultado com o comando "count" e redefinido com "reset". + +[ta4_detector|image] + +### Detector de nó TA4 + +A funcionalidade é a mesma do TA3 Node Detector. + +Ao contrário do detector de nós TA3, as posições a serem monitoradas podem ser configuradas individualmente aqui. Para fazer isso, o botão "Record" (Registrar) deve ser pressionado. Em seguida, todos os blocos devem ser clicados, cuja posição deve ser verificada. Em seguida, o botão "Done" (Concluído) deve ser pressionado. + +Podem ser selecionados até 4 blocos. + +[ta4_nodedetector|image] + +### Detector de carga de armazenamento de energia TA4 + +O detector de carga mede o estado de carga do armazenamento de energia da rede elétrica a cada 8 s. + +Se o valor ficar abaixo de um limite configurável (ponto de comutação), um comando (padrão: "off") será enviado. Se o valor subir novamente acima desse ponto de comutação, um segundo comando (padrão: "on") será enviado. Isso permite que os consumidores sejam desconectados da rede quando o nível de carga do dispositivo de armazenamento de energia cair abaixo do ponto de comutação especificado. + +Para fazer isso, o detector de carga deve ser conectado à rede por meio de uma caixa de junção. O detector de carga é configurado por meio do menu da chave de boca. + +[ta4_chargedetector|image] + +### Sensor de olhar TA4 + +O sensor de olhar TA4 gera um comando quando o bloco é visto/focado pelo proprietário ou por outros jogadores configurados e envia um segundo comando quando o bloco não é mais focalizado. Assim, ele substitui os botões/interruptores, por exemplo, para abrir/fechar portas. + +O TA4 Gaze Sensor só pode ser programado usando o menu da chave de boca. Se você tiver uma chave de boca na mão, o sensor não será acionado, mesmo que esteja focalizado. + +[ta4_gaze_sensor|image] + +### Sequenciador TA4 + +Processos inteiros podem ser programados usando o sequenciador TA4. Veja um exemplo: + +``` +-- este é um comentário +[1] send 1234 a2b +[30] send 1234 b2a +[60] goto 1 +``` + +- Cada linha começa com um número que corresponde a um ponto no tempo `[]` +- São permitidos valores de 1 a 50000 para os tempos +- 1 corresponde a 100 ms, 50000 corresponde a cerca de 4 dias de jogo +- Linhas vazias ou comentários são permitidos (`-- comment`) +- Com `send `, você pode enviar um comando para um bloco +- Com `goto ` você pode pular para outra linha/ponto no tempo +- Com `stop` você pode parar o sequenciador com um atraso para que ele não receba um novo comando + aceita de um botão ou outro bloco (para concluir um movimento) + Sem `stop`, o sequenciador entra no modo parado imediatamente após o último comando. + +O sequenciador TA4 suporta os seguintes comandos de tecnologia: + +- `goto ` Salta para uma linha de comando e inicia o sequenciador +- `stop` Parar o sequenciador +- `on` e `off` como aliases para `goto 1` e `stop` + +O comando `goto` só é aceito quando o sequenciador está parado. + +O tempo de ciclo (padrão: 100 ms) pode ser alterado para o sequenciador por meio do menu da chave de boca. + +[ta4_sequencer|image] + + + +## Controlador de movimento/volta + +### Controlador de movimento TA4 + +O TA4 Move Controller é semelhante ao "Door Controller 2", mas os blocos selecionados não são removidos, mas podem ser movidos. +Como os blocos móveis podem levar consigo os jogadores e as multidões que estão no bloco, é possível construir elevadores e sistemas de transporte semelhantes com eles. + +Instruções: + +- Defina o controlador e treine os blocos a serem movidos por meio do menu (até 16 blocos podem ser treinados) +- A "rota de voo" deve ser inserida por meio de uma especificação x, y, z (relativa) (a distância máxima (x+y+z) é de 200 m) +- O movimento pode ser testado com os botões de menu "Move A-B" e "Move B-A" +- Você também pode voar através de paredes ou outros blocos +- A posição de destino dos blocos também pode ser ocupada. Nesse caso, os blocos são salvos de forma "invisível". Isso se destina a portas deslizantes e similares + +O Move Controller é compatível com os seguintes comandos de tecnologia: + +- `a2b` Mover o bloco de A para B. +- `b2a` Mover o bloco de B para A. +- `move` Mover o bloco para o outro lado + +Você pode alternar para o modo de operação `move xyz` por meio do menu de chave inglesa. Após a mudança, os seguintes comandos técnicos são suportados: + +- `move2` Com o comando, a rota de voo também deve ser especificada como um vetor x,y,z. + Exemplo de controlador Lua: `$send_cmnd(MOVE_CTLR, "move2", "0,12,0")` +- `reset` move o(s) bloco(s) de volta à posição inicial + +**Instruções importantes:** + +- Se vários blocos tiverem de ser movidos, o bloco que levará os jogadores/mobs deverá ser clicado primeiro durante o treinamento. +- Se o bloco que deve levar os jogadores/móbile tiver uma altura reduzida, a altura deverá ser definida no controlador usando o menu de chave de boca aberto (por exemplo, altura = 0,5). Caso contrário, o jogador/móbile não será "encontrado" e não será levado embora. + +[ta4_movecontroller|image] + +### Controlador de giro TA4 + +O controlador de giro do TA4 é semelhante ao "Move Controller", mas os blocos selecionados não são movidos, mas girados em torno de seu centro para a direita ou para a esquerda. + +Instruções: + +- Defina o controlador e treine os blocos a serem movidos por meio do menu (até 16 blocos podem ser treinados) +- O movimento pode ser testado com os botões de menu "Turn left" (Virar à esquerda) e "Turn right" (Virar à direita) + +O controlador de giro suporta os seguintes comandos de tecnologia: + +- `left` Vire à esquerda +- `direita` Vire à direita +- `uturn` Girar 180 graus + +[ta4_turncontroller|image] + + + + +## Lâmpadas TA4 + +O TA4 contém uma série de lâmpadas potentes que permitem uma melhor iluminação ou a realização de tarefas especiais. + +### Luz de cultivo LED TA4 + +A lâmpada de cultivo TA4 LED permite o crescimento rápido e vigoroso de todas as plantas do modo `farming`. A lâmpada ilumina um campo de 3x3, de modo que as plantas também podem ser cultivadas no subsolo. +A lâmpada deve ser colocada um bloco acima do solo no meio do campo 3x3. + +A lâmpada também pode ser usada para cultivar flores. Se a lâmpada for colocada sobre um canteiro de flores 3x3 feito de "Garden Soil" (Mod `compost`), as flores crescerão automaticamente (acima e abaixo do solo). + +Você pode colher as flores com o Signs Bot, que também tem uma placa correspondente que deve ser colocada na frente do campo de flores. + +A lâmpada requer 1 ku de eletricidade. + +[ta4_growlight|image] + +### Lâmpada de rua TA4 + +A lâmpada de rua de LED TA4 é uma lâmpada com iluminação particularmente forte. A lâmpada consiste no compartimento da lâmpada, no braço da lâmpada e nos blocos do poste da lâmpada. + +A corrente deve ser conduzida de baixo para cima, através do mastro, até o compartimento da lâmpada. Primeiro, puxe o cabo de alimentação para cima e, em seguida, "engesse" o cabo de alimentação com blocos de postes de iluminação. + +A lâmpada requer 1 ku de eletricidade. + +[ta4_streetlamp|image] + +### Lâmpada industrial de LED TA4 + +A lâmpada industrial de LED TA4 é uma lâmpada com iluminação particularmente forte. A lâmpada deve ser alimentada por cima. + +A lâmpada requer 1 ku de eletricidade. + +[ta4_industriallamp|image] + + + + +## Filtro líquido TA4 + +O filtro de líquidos filtra a lama vermelha. +Uma parte da lama vermelha se transforma em soda cáustica, que pode ser coletada no fundo de um tanque. +A outra parte se transforma em um paralelepípedo do deserto e obstrui o material do filtro. +Se o filtro estiver muito entupido, ele deverá ser limpo e enchido novamente. +O filtro consiste em uma camada de base, 7 camadas de filtro idênticas e uma camada de enchimento na parte superior. + +[ta4_liquid_filter|image] + +### Camada de base + +Você pode ver a estrutura dessa camada no plano. + +A soda cáustica é coletada no tanque. + +[ta4_liquid_filter_base|plan] + +### Camada de cascalho + +Essa camada deve ser preenchida com cascalho, conforme mostrado no plano. +No total, deve haver sete camadas de cascalho. +O filtro ficará obstruído com o tempo, de modo que precisará ser limpo e preenchido novamente. + +[ta4_liquid_filter_gravel|plan] + +### Camada de enchimento + +Essa camada é usada para preencher o filtro com lama vermelha. +A lama vermelha deve ser bombeada para o tubo de enchimento. + +[ta4_liquid_filter_top|plan] + + + + +## Colisor TA4 (acelerador de partículas) + +O Collider é uma instalação de pesquisa que realiza pesquisas básicas. É possível coletar pontos de experiência aqui, que são necessários para o TA5 (Future Age). + +Como seu original no CERN em Genebra, o colisor deve ser construído no subsolo. A configuração padrão aqui é Y <= -28. O valor pode, no entanto, ser alterado pela equipe do servidor por meio da configuração. Pergunte ou tente o bloco "TA4 Collider Detector Worker". + +Somente um colisor pode ser operado por jogador. Portanto, não faz sentido configurar dois ou mais colisores. Os pontos de experiência são creditados ao jogador que possui o colisor. Os pontos de experiência não podem ser transferidos. + +Um colisor consiste em um "anel" feito de tubos e ímãs, além de um detector com um sistema de resfriamento. + +- O detector é o coração do sistema. É nele que os experimentos científicos são realizados. O detector tem o tamanho de 3x3x7 blocos. +- 22 ímãs do colisor TA4 (não os ímãs do detector do colisor TA4!) devem ser conectados uns aos outros por meio de 5 blocos do tubo de vácuo TA4. Cada ímã também requer eletricidade e uma conexão de gás para resfriamento. O conjunto forma (como mostrado na planta à direita) um quadrado com um comprimento de borda de 37 metros. + +A planta mostra a instalação vista de cima: + +- O bloco cinza é o detector com o bloco de trabalho no meio +- Os blocos vermelhos são os ímãs, os azuis são os tubos de vácuo + +[techage_collider_plan|plan] + +### Detector + +O detector é configurado automaticamente com a ajuda do bloco "TA4 Collider Detector Worker" (semelhante à torre). Todos os materiais necessários para isso devem ser colocados primeiro no bloco do trabalhador. O detector é mostrado simbolicamente no bloco do trabalhador. O detector é montado no bloco de trabalho. + +O detector também pode ser desmontado novamente com a ajuda do bloco de trabalho. + +As conexões para eletricidade, gás e tubos de vácuo estão localizadas nos dois lados frontais do detector. Uma bomba TA4 deve ser conectada na parte superior para sugar o tubo vazio/criar o vácuo. + +O sistema de resfriamento deve ser conectado à parte traseira do detector. O sistema de resfriamento é mostrado na planta à direita. Além do trocador de calor TA4 da unidade de armazenamento de energia (que é usado aqui para resfriamento), também é necessário um bloco resfriador TA4. + +Observação: A seta no trocador de calor deve apontar para longe do detector. O trocador de calor também deve ser alimentado com eletricidade. + +[ta4_cooler|plan] + + +- Além disso, é necessário resfriamento, que também deve ser instalado no detector. O isobutano é necessário para o resfriamento. +- O sistema requer uma quantidade considerável de eletricidade. Portanto, faz sentido ter sua própria fonte de alimentação. + +### Controle / Terminal TA4 + +O colisor é controlado por meio de um terminal TA4 (não por meio do terminal do controlador TA4 Lua). + +Esse terminal deve ser conectado ao detector. O número do detector é exibido como texto informativo no bloco de trabalho. + +O terminal suporta os seguintes comandos: + +- `connect ` (conectar-se ao detector) +- `start` (iniciar o detector) +- `stop` (parar o detector) +- `test ` (verificação de um ímã) +- `points` (consulta dos pontos de experiência já obtidos) + +Se ocorrer um erro em um ímã durante o `start`, o número do ímã será exibido. O comando `test` pode ser usado para solicitar mais informações sobre o erro do ímã. + +[ta4_terminal|image] + +### Resfriamento e energia + +Cada ímã do Colisor TA4 também deve ser abastecido com eletricidade (conforme mostrado à direita na planta) e com isobutano para resfriamento: + +- A conexão para a alimentação está na parte superior do ímã. +- A conexão para o resfriamento está na parte frontal do ímã. +- Uma bomba TA4 e um tanque TA4 com pelo menos 250 unidades de isobutano também são necessários para resfriar todo o sistema. +- O sistema também requer muita eletricidade. Portanto, faz sentido ter sua própria fonte de alimentação com pelo menos 145 ku. + +[techage_collider_plan2|plan] + +### Construção + +A sequência a seguir é recomendada ao configurar o colisor: + +- Coloque um bloco de carga forçada. Somente o detector com o sistema de resfriamento deve estar na área do bloco de carga forçada. +- Defina o bloco de trabalho, preencha-o com itens e configure o detector por meio do menu +- Construa o anel com tubos e ímãs +- Conecte todos os ímãs e o detector com os cabos de alimentação +- Conecte todos os ímãs e o detector com os tubos amarelos e bombeie o isobutano no sistema de tubos com uma bomba +- Instale uma bomba TA4 como uma bomba de vácuo no detector e ligue-a (não é necessário nenhum tanque adicional). Se a bomba entrar em "standby", o vácuo será estabelecido. Isso levará alguns segundos +- Monte o resfriador (trocador de calor) e conecte-o ao cabo de alimentação +- Coloque o terminal TA4 na frente do detector e conecte-o ao detector por meio de `connect ` +- Ligar/conectar a fonte de alimentação +- ligar o resfriador (trocador de calor) +- Ligue o detector por meio de `start` no terminal TA4. Após algumas etapas de teste, o detector entra em operação normal ou emite um erro. +- O colisor precisa ser executado continuamente e, em seguida, fornece gradualmente pontos de experiência. Para obter 10 pontos, o colisor precisa funcionar por algumas horas + +[techage_ta4c|image] + + + + +## Mais blocos TA4 + +### Bloco de receitas TA4 + +Até 10 receitas podem ser salvas no bloco de receitas. Essas receitas podem então ser chamadas por meio de um comando do TA4 Autocrafter. Isso permite que a receita do autocrafter seja configurada por meio de um comando. As receitas no bloco de receitas também podem ser consultadas diretamente por meio de um comando. + +`input ` lê uma receita do bloco de receitas do TA4. `` é o número da receita. O bloco retorna uma lista de ingredientes da receita. + +Exemplo: `$send_cmnd(1234, "input", 1)` + +[ta4_recipeblock|image] + +### TA4 Autocrafter + +A função corresponde à do TA3. + +A capacidade de processamento é de 4 itens a cada 4 s. O autocrafter requer 9 ku de eletricidade para isso. + +Além disso, o TA4 Autocrafter suporta a seleção de diferentes receitas usando os seguintes comandos: + +`recipe "."` muda o autocrafter para uma receita do bloco de receitas TA4. `` é o número do bloco de receitas, `` é o número da receita. Exemplo: `$send_cmnd(1234, "recipe", "5467.1")` + +Como alternativa, uma receita também pode ser selecionada por meio da lista de ingredientes, por exemplo: +`$send_cmnd(1234, "recipe", "default:coal_lump,,,default:stick")` +Todos os nomes técnicos de uma receita devem ser especificados aqui, separados por vírgulas. Consulte também o comando `input` no bloco de receitas do TA4. + +O comando `flush` move todos os itens do inventário de entrada para o inventário de saída. O comando retorna `true` se o inventário de entrada tiver sido completamente esvaziado. Se `false` for retornado (inventário de saída cheio), o comando deverá ser repetido em um momento posterior. + +[ta4_autocrafter|image] + +### Tanque TA4 + +Consulte o tanque TA3. + +Um tanque TA4 pode conter 2.000 unidades ou 200 barris de líquido. + +[ta4_tank|image] + +### Bomba TA4 + +Consulte a bomba TA3. + +A bomba TA4 bombeia 8 unidades de líquido a cada dois segundos. + +No modo "Flow limiter" (Limitador de fluxo), o número de unidades bombeadas pela bomba pode ser limitado. O modo de limitador de fluxo pode ser ativado por meio do menu da chave de boca, configurando o número de unidades no menu. Quando o número configurado de unidades tiver sido bombeado, a bomba será desligada. Quando a bomba for ligada novamente, ela bombeará o número configurado de unidades novamente e, em seguida, será desligada. + +O limitador de fluxo também pode ser configurado e iniciado usando um controlador Lua ou Beduino. + +A bomba também é compatível com o comando `flowrate`. Isso permite que a taxa de fluxo total através da bomba seja consultada. + +[ta4_pump|image] + +### Aquecedor de forno TA4 + +Com o TA4, o forno industrial também tem seu aquecimento elétrico. O queimador de óleo e o soprador podem ser substituídos pelo aquecedor. + +O aquecedor requer 14 ku de eletricidade. + +[ta4_furnaceheater|image] + +### Bomba d'água TA4 (obsoleta) + +Esse bloco não poderá mais ser fabricado e será substituído pelo bloco de entrada de água TA4. + +### Entrada de água TA4 + +Algumas receitas requerem água. A água deve ser bombeada do mar com uma bomba (água em y = 1). Uma "piscina" composta de alguns blocos de água não é suficiente para isso! + +Para fazer isso, o bloco de entrada de água deve ser colocado na água e conectado à bomba por meio de tubos. Se o bloco for colocado na água, é preciso garantir que haja água sob o bloco (a água deve ter pelo menos 2 blocos de profundidade). + +[ta4_waterinlet|image] + +### Tubo TA4 + +O TA4 também tem seus próprios tubos no design do TA4. Eles podem ser usados como os tubos padrão. +Mas: Os empurradores e distribuidores TA4 só atingem seu desempenho total quando usados com tubos TA4. + +[ta4_tube|image] + +### TA4 Pusher + +A função corresponde basicamente à do TA2 / TA3. Além disso, um menu pode ser usado para configurar quais objetos devem ser retirados de um baú TA4 e transportados posteriormente. +A capacidade de processamento é de 12 itens a cada 2 s, se forem usados tubos TA4 em ambos os lados. Caso contrário, haverá apenas 6 itens a cada 2 s. + +No modo "limitador de fluxo", o número de itens que são movidos pelo empurrador pode ser limitado. O modo limitador de fluxo pode ser ativado por meio do menu da chave de boca, configurando o número de itens no menu. Assim que o número configurado de itens tiver sido movido, o empurrador se desliga. Se o empurrador for ligado novamente, ele moverá o número configurado de itens novamente e depois se desligará. + +O empurrador TA4 também pode ser configurado e iniciado usando um controlador Lua ou Beduino. + +Aqui estão os comandos adicionais para o controlador Lua: + +- O `config` é usado para configurar o empurrador, de forma análoga à configuração manual por meio do menu. + Exemplo: `$send_cmnd(1234, "config", "default:dirt")` + Com `$send_cmnd(1234, "config", "")`, a configuração é excluída +- `limit` é usado para definir o número de itens para o modo de limitador de fluxo: + Exemplo: `$send_cmnd(1234, "init", 7)` + +[ta4_pusher|image] + +### Peito TA4 + +A função corresponde à do TA3. O baú pode conter mais conteúdo. + +Além disso, o baú do TA4 tem um shadow inventory para configuração. Aqui, determinados locais de pilha podem ser pré-atribuídos a um item. As pilhas de inventário pré-atribuídas só são preenchidas com esses itens durante o preenchimento. É necessário um empurrador ou injetor TA4 com a configuração apropriada para esvaziar as pilhas de inventário pré-atribuídas. + +[ta4_chest|image] + +### Baú TA4 8x2000 + +O baú TA4 8x2000 não tem um inventário normal como os outros baús, mas tem 8 lojas, sendo que cada loja pode armazenar até 2.000 itens de um tipo. Os botões laranja podem ser usados para mover itens de ou para a loja. A caixa também pode ser preenchida ou esvaziada com um empurrador (TA2, TA3 ou TA4) como de costume. + +Se o baú for preenchido com um empurrador, todos os depósitos serão preenchidos da esquerda para a direita. Se todos os 8 depósitos estiverem cheios e nenhum outro item puder ser adicionado, os itens adicionais serão rejeitados. + +**Função de linha** + +Vários baús TA4 8x2000 podem ser conectados a um baú grande com mais conteúdo. Para fazer isso, os baús devem ser colocados em uma fileira, um após o outro. + +Primeiro, o baú da frente deve ser colocado e, em seguida, os baús empilhados são colocados atrás com a mesma direção de visão (todas as caixas têm a frente voltada para o jogador). Com 2 baús em uma fileira, o tamanho aumenta para 8x4000, etc. + +As fileiras de baús não podem mais ser removidas. Há duas maneiras de desmontar os baús: + +- Esvazie e remova o baú da frente. Isso desbloqueia o próximo baú e pode ser removido. +- Esvazie o baú da frente até o ponto em que todas as lojas contenham no máximo 2.000 itens. Isso desbloqueia o próximo baú e pode ser removido. + +Os baús têm uma caixa de seleção de "pedido". Se essa caixa de seleção for ativada, os depósitos não serão mais completamente esvaziados por um empurrador. O último item permanece no depósito como padrão. Isso resulta em uma atribuição fixa de itens aos locais de armazenamento. + +O baú só pode ser usado por jogadores que podem construir nesse local, ou seja, que têm direitos de proteção. Não importa quem coloca o baú. + +O baú tem um comando adicional para o controlador Lua: + +- `count` é usado para solicitar quantos itens estão no baú. + Exemplo 1: `$send_cmnd(CHEST, "count")` -> Soma dos itens em todas as 8 lojas + Exemplo 2: `$send_cmnd(CHEST, "count", 2)` -> número de itens na loja 2 (segunda a partir da esquerda) +- `storesize` é usado para ler o tamanho de um dos oito armazenamentos: + Exemplo: `$send_cmnd(CHEST, "storesize")` -> a função retorna, por exemplo, 6000 + +[ta4_8x2000_chest|image] + + + +### Distribuidor TA4 + +A função corresponde à do TA2. +A capacidade de processamento é de 24 itens a cada 4 s, desde que os tubos TA4 sejam usados em todos os lados. Caso contrário, haverá apenas 12 itens a cada 4 s. + +[ta4_distributor|image] + +### Distribuidor de alto desempenho TA4 + +A função corresponde à do distribuidor TA4 normal, com duas diferenças: +A capacidade de processamento é de 36 itens a cada 4 s, desde que os tubos TA4 sejam usados em todos os lados. Caso contrário, haverá apenas 18 itens a cada 4 s. +Além disso, até 8 itens podem ser configurados por direção. + +[ta4_high_performance_distributor|image] + +### Peneira de cascalho TA4 + +A função corresponde à do TA2. +A capacidade de processamento é de 4 itens a cada 4 s. O bloco requer 5 ku de eletricidade. + +[ta4_gravelsieve|image] + +### Moedor TA4 + +A função corresponde à do TA2. +A capacidade de processamento é de 4 itens a cada 4 s. O bloco requer 9 ku de eletricidade. + +[ta4_grinder|image] + +### Pedreira TA4 + +A função corresponde em grande parte à do TA2. + +Além disso, o tamanho do furo pode ser definido entre blocos de 3x3 e 11x11. +A profundidade máxima é de 80 metros. A pedreira requer 14 ku de eletricidade. + +[ta4_quarry|image] + +### Fab. eletrônica TA4 + +A função corresponde à do TA2, apenas chips diferentes são produzidos aqui. +A capacidade de processamento é de um chip a cada 6 s. O bloco requer 12 ku de eletricidade para isso. + +[ta4_electronicfab|image] + +### Injetor TA4 + +A função corresponde à do TA3. + +O poder de processamento é de até 8 vezes quatro itens a cada 4 segundos. + +[ta4_injector|image] + +### Reciclador TA4 + +O reciclador é uma máquina que processa todas as receitas de Techage de trás para frente, ou seja, pode desmontar máquinas e blocos e transformá-los em seus componentes. + +A máquina pode desmontar praticamente todos os blocos da Techage e do Hyperloop. Mas nem todos os itens/materiais da receita podem ser reciclados: + +- A madeira se transforma em gravetos +- A pedra se transforma em areia ou cascalho +- Os semicondutores/chips não podem ser reciclados +- As ferramentas não podem ser recicladas + +A capacidade de processamento é de um item a cada 8 s. O bloco requer 16 ku de eletricidade para isso. + +[ta4_recycler|image] \ No newline at end of file diff --git a/techage/manuals/manual_ta5_pt-BR.md b/techage/manuals/manual_ta5_pt-BR.md new file mode 100644 index 0000000..dc90ca8 --- /dev/null +++ b/techage/manuals/manual_ta5_pt-BR.md @@ -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] \ No newline at end of file diff --git a/techage/manuals/markdown_to_lua.py b/techage/manuals/markdown_to_lua.py index 04a1ca3..05ba32c 100644 --- a/techage/manuals/markdown_to_lua.py +++ b/techage/manuals/markdown_to_lua.py @@ -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") diff --git a/techage/mod.conf b/techage/mod.conf index ef5299e..8f76061 100644 --- a/techage/mod.conf +++ b/techage/mod.conf @@ -2,3 +2,4 @@ name = techage depends = default,doors,flowers,tubelib2,networks,basic_materials,bucket,stairs,screwdriver,minecart,lcdlib,safer_lua,doclib optional_depends = unified_inventory,wielded_light,unifieddyes,moreores,ethereal,mesecons,mesecons_materials,mesecons_mvps,digtron,bakedclay,moreblocks,i3,creative,craftguide,farming description = Techage, go through 5 tech ages in search of wealth and power! +supported_games = minetest_game diff --git a/techage/move_controller/doorblock.lua b/techage/move_controller/doorblock.lua index f0b215b..6874479 100644 --- a/techage/move_controller/doorblock.lua +++ b/techage/move_controller/doorblock.lua @@ -75,7 +75,7 @@ for idx,pgn in ipairs(tPgns) do minetest.swap_node(pos, node) end if fields.exit then - meta:set_string("formspec", nil) + meta:set_string("formspec", "") local number = techage.add_node(pos, node.name) meta:set_string("infotext", S("TechAge Door Block").." "..number) end diff --git a/techage/move_controller/flycontroller.lua b/techage/move_controller/flycontroller.lua index 837c948..70a21b3 100644 --- a/techage/move_controller/flycontroller.lua +++ b/techage/move_controller/flycontroller.lua @@ -79,7 +79,6 @@ local function formspec(nvm, meta) "label[0.3,6.3;" .. status .. "]" end - minetest.register_node("techage:ta5_flycontroller", { description = S("TA5 Fly Controller"), tiles = { @@ -258,8 +257,7 @@ techage.register_node({"techage:ta5_flycontroller"}, { return 2, "" end, on_node_load = function(pos, node) - local nvm = techage.get_nvm(pos) - nvm.running = false + M(pos):set_string("status", "") end, }) diff --git a/techage/move_controller/gateblock.lua b/techage/move_controller/gateblock.lua index e0a764c..57f6826 100644 --- a/techage/move_controller/gateblock.lua +++ b/techage/move_controller/gateblock.lua @@ -61,7 +61,7 @@ for idx,pgn in ipairs(tPgns) do minetest.swap_node(pos, node) end if fields.exit then - meta:set_string("formspec", nil) + meta:set_string("formspec", "") local number = techage.add_node(pos, node.name) meta:set_string("infotext", S("TechAge Gate Block").." "..number) end diff --git a/techage/move_controller/movecontroller.lua b/techage/move_controller/movecontroller.lua index 4aa2b6e..5f7ce00 100644 --- a/techage/move_controller/movecontroller.lua +++ b/techage/move_controller/movecontroller.lua @@ -261,9 +261,8 @@ techage.register_node({"techage:ta4_movecontroller"}, { return 2, "" end, on_node_load = function(pos, node) - local nvm = techage.get_nvm(pos) - M(pos):set_string("teleport_mode", "") -- delete not working op mode - nvm.running = false + M(pos):set_string("teleport_mode", "") -- delete not working (legacy) op mode + M(pos):set_string("status", "") end, }) @@ -299,7 +298,7 @@ minetest.register_node("techage:moveblock", { description = "Techage Invisible Move Block", drawtype = "glasslike_framed_optional", inventory_image = 'techage_inv_invisible.png', - tiles = {"techage_invisible.png"}, + tiles = {"blank.png"}, selection_box = { type = "fixed", fixed = { diff --git a/techage/move_controller/turncontroller.lua b/techage/move_controller/turncontroller.lua index 2dc9588..10fb4cb 100644 --- a/techage/move_controller/turncontroller.lua +++ b/techage/move_controller/turncontroller.lua @@ -38,7 +38,6 @@ local function formspec(nvm, meta) "label[0.3,2.5;" .. status .. "]" end - minetest.register_node("techage:ta4_turncontroller", { description = S("TA4 Turn Controller"), tiles = { @@ -193,6 +192,9 @@ techage.register_node({"techage:ta4_turncontroller"}, { return 2 end end, + on_node_load = function(pos, node) + M(pos):set_string("status", "") + end, }) minetest.register_craft({ diff --git a/techage/oil/explore.lua b/techage/oil/explore.lua index 0047225..bc2407f 100644 --- a/techage/oil/explore.lua +++ b/techage/oil/explore.lua @@ -51,6 +51,8 @@ local function oil_amount(pos) local amount = math.random(OIL_MIN, OIL_MAX) return amount end + -- Generate new randomseed after use + math.randomseed(os.time()) return 0 end diff --git a/techage/power/ta4_cable.lua b/techage/power/ta4_cable.lua index 7a69915..40ef060 100644 --- a/techage/power/ta4_cable.lua +++ b/techage/power/ta4_cable.lua @@ -135,7 +135,7 @@ minetest.register_node("techage:ta4_power_box", { type = "connected", fixed = { { -3/16, -3/16, -3/16, 3/16, 3/16, 3/16}, -- box - { -1/16, -7/16, -1/16, 1/16, -4/16, 1/16}, -- post + { -1/16, -7/16, -1/16, 1/16, -3/16, 1/16}, -- post { -3/16, -8/16, -3/16, 3/16, -7/16, 3/16}, -- base }, diff --git a/techage/steam_engine/boiler.lua b/techage/steam_engine/boiler.lua index ce3ea79..dbb0bf1 100644 --- a/techage/steam_engine/boiler.lua +++ b/techage/steam_engine/boiler.lua @@ -41,10 +41,9 @@ end local function after_place_node(pos) local node = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) - if node.name == "techage:boiler1" then - local nvm = techage.get_nvm(pos) - M(pos):set_string("formspec", boiler.formspec(pos, nvm)) - Pipe:after_place_node(pos) + if node.name ~= "techage:boiler1" then + minetest.remove_node(pos) + return true end end @@ -83,6 +82,9 @@ Pipe:add_secondary_node_names({"techage:boiler2"}) techage.register_node({"techage:boiler2"}, { on_transfer = function(pos, in_dir, topic, payload) if topic == "trigger" then + if minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name ~= "techage:boiler1" then + return 0 + end local nvm = techage.get_nvm(pos) nvm.fire_trigger = true if not minetest.get_node_timer(pos):is_started() then diff --git a/techage/ta1_watermill/watermill.lua b/techage/ta1_watermill/watermill.lua index e546f4b..e1673a4 100644 --- a/techage/ta1_watermill/watermill.lua +++ b/techage/ta1_watermill/watermill.lua @@ -293,7 +293,7 @@ minetest.register_entity("techage:ta1_watermill_entity", { minetest.register_node("techage:water_stop", { description = "Water Stop", drawtype = "glasslike_framed_optional", - tiles = {"techage_invisible.png"}, + tiles = {"blank.png"}, inventory_image = 'techage_invisible_inv.png', use_texture_alpha = "blend", diff --git a/techage/ta4_power/electricmeter.lua b/techage/ta4_power/electricmeter.lua index ec808cf..7951ff0 100644 --- a/techage/ta4_power/electricmeter.lua +++ b/techage/ta4_power/electricmeter.lua @@ -251,4 +251,5 @@ minetest.register_craft({ {"techage:electric_cableS", "basic_materials:gold_wire", "techage:electric_cableS"}, {"default:steel_ingot", "techage:ta4_wlanchip", "default:steel_ingot"}, }, + replacements = { {"basic_materials:gold_wire", "basic_materials:empty_spool"}, }, }) diff --git a/techage/textures/techage_invisible.png b/techage/textures/techage_invisible.png deleted file mode 100644 index d06b83f..0000000 Binary files a/techage/textures/techage_invisible.png and /dev/null differ diff --git a/techage/tools/assembly_tool.lua b/techage/tools/assembly_tool.lua index f878c72..7378d9d 100644 --- a/techage/tools/assembly_tool.lua +++ b/techage/tools/assembly_tool.lua @@ -72,8 +72,27 @@ local function remove_node(pos, digger) if InvalidBlocks[node.name] then return end - - if number ~= "" and ndef and ndef.after_dig_node then + + if ndef.can_dig and not ndef.can_dig(pos, digger) then + return + end + + if ndef and ndef.preserve_nodedata then + local s = ndef.preserve_nodedata(pos, node) + imeta:set_string("node_data", s) + minetest.remove_node(pos) + if ndef.after_dig_node then + ndef.after_dig_node(pos, node, oldmetadata, digger) + end + if number ~= "" then + techage.post_remove_node(pos) + imeta:set_string("node_number", number) + imeta:set_string("description", ndef.description .. " : " .. number) + else + imeta:set_string("description", ndef.description .. " (preserved)") + end + return item + elseif number ~= "" and ndef and ndef.after_dig_node then minetest.remove_node(pos) ndef.after_dig_node(pos, node, oldmetadata, digger) techage.post_remove_node(pos) @@ -89,8 +108,16 @@ local function place_node(pos, item, placer, pointed_thing) local name = item:get_name() local param2 = minetest.dir_to_facedir(placer:get_look_dir()) local ndef = minetest.registered_nodes[name] - - if number ~= "" and ndef and ndef.after_place_node then + + if ndef and ndef.restore_nodedata then + if number ~= "" then + techage.pre_add_node(pos, number) + end + minetest.add_node(pos, {name = name, param2 = param2}) + local s = imeta:get_string("node_data") + ndef.restore_nodedata(pos, s) + return true + elseif number ~= "" and ndef and ndef.after_place_node then techage.pre_add_node(pos, number) minetest.add_node(pos, {name = name, param2 = param2}) ndef.after_place_node(pos, placer, item, pointed_thing) diff --git a/techage/tools/end_wrench.lua b/techage/tools/end_wrench.lua index cd5c6de..23e683c 100644 --- a/techage/tools/end_wrench.lua +++ b/techage/tools/end_wrench.lua @@ -193,7 +193,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local number = techage.get_node_number(pos) local node = minetest.get_node(pos) local ndef = minetest.registered_nodes[node.name] - local form_def = ndef and (ndef.ta3_formspec or ndef.ta4_formspec or ndef.ta5_formspec.menu) + local form_def = ndef and (ndef.ta3_formspec or ndef.ta4_formspec or (ndef.ta5_formspec and ndef.ta5_formspec.menu)) if form_def then if menu.eval_input(pos, form_def, fields, playername) then diff --git a/techage/tools/screwdriver.lua b/techage/tools/screwdriver.lua index 26f0929..47a3639 100644 --- a/techage/tools/screwdriver.lua +++ b/techage/tools/screwdriver.lua @@ -113,6 +113,11 @@ end local function on_place(itemstack, user, pointed_thing) local res, pos, player_name, facedir, node, ndef = base_checks(user, pointed_thing) if res then + -- Support for anvil + if node.name == "anvil:anvil" then + return screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, USES) + end + if ndef.paramtype2 == "facedir" then if ndef.on_rotate ~= screwdriver.rotate_simple then if user:get_player_control().sneak then diff --git a/tips_and_tricks.md b/tips_and_tricks.md index e3ef418..8d971d9 100644 --- a/tips_and_tricks.md +++ b/tips_and_tricks.md @@ -4,7 +4,7 @@ - All kinds of machines only run when the world is loaded at this point, i.e. a player is nearby. With forceload blocks you can force the area around the forceload block to stay loaded as long as you are 'on'. - With the TA1 Gravel Sieve ores can be sieved from gravel. You can collect gravel in caves or make it out of stone with the TA1 hammer. - The hopper is suitable for simple automation tasks. Please note that the hopper only sucks in the items from the left or above and passes them to the right (marking visible above) in chests or similar blocks. -- You can find the instructions for Minecart in the player inventory via the Help (question mark) button. +- You can find the instructions for Minecart in the Techage construction board. - Lava and water become basalt (not stone), a Cobble generator for endless ore mining does not exist at Techage. - In order to make steel, you need not only iron but also coal. - Build the burner tower high enough (at least for 10 coal blocks) so that you can also bake obsidian, you will need it later. diff --git a/towercrane/control.lua b/towercrane/control.lua index b100c02..fabb340 100644 --- a/towercrane/control.lua +++ b/towercrane/control.lua @@ -103,7 +103,7 @@ end local function reset_operator_privs(player) local privs = minetest.get_player_privs(player:get_player_name()) local meta = player:get_meta() - if meta and privs then + if meta and privs and meta:get_int("towercrane_isoperator") ~= 0 then meta:set_string("towercrane_pos", "") -- restore the player privs default values meta:set_int("towercrane_isoperator", 0) @@ -270,6 +270,7 @@ minetest.register_node("towercrane:mast_ctrl_on", { meta:set_string("infotext", S("Switch crane on/off")) end, + drop = "", paramtype = "light", paramtype2 = "facedir", light_source = 3, @@ -295,8 +296,14 @@ minetest.register_node("towercrane:mast_ctrl_off", { if set_operator_privs(clicker, pos) then start_crane(pos, clicker) local pos1, pos2 = calc_construction_area(pos) - -- control player every second - minetest.after(1, control_player, pos, pos1, pos2, clicker:get_player_name()) + if pos1 and pos2 then + -- control player every second + minetest.after(1, control_player, pos, pos1, pos2, clicker:get_player_name()) + else + -- Something weird happened, restore privileges + stop_crane(pos, clicker) + reset_operator_privs(clicker) + end end end end, @@ -307,6 +314,7 @@ minetest.register_node("towercrane:mast_ctrl_off", { meta:set_string("infotext", S("Switch crane on/off")) end, + drop = "", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -317,9 +325,10 @@ minetest.register_node("towercrane:mast_ctrl_off", { minetest.register_on_joinplayer(function(player) local pos = get_my_crane_pos(player) if pos then - reset_operator_privs(player) stop_crane(pos, player) end + -- To recover from a crash, this must be done unconditionally + reset_operator_privs(player) end) minetest.register_on_leaveplayer(function(player) diff --git a/tubelib2/description.txt b/tubelib2/description.txt deleted file mode 100644 index ad31204..0000000 --- a/tubelib2/description.txt +++ /dev/null @@ -1,2 +0,0 @@ -A library for mods which need connecting tubes / pipes / cables or similar. - diff --git a/tubelib2/internal1.lua b/tubelib2/internal1.lua index 7fcd603..f4d03f6 100644 --- a/tubelib2/internal1.lua +++ b/tubelib2/internal1.lua @@ -135,8 +135,8 @@ end function Tube:store_teleport_data(pos, peer_pos) local meta = M(pos) meta:set_string("tele_pos", P2S(peer_pos)) - meta:set_string("channel", nil) - meta:set_string("formspec", nil) + meta:set_string("channel", "") + meta:set_string("formspec", "") meta:set_string("infotext", S("Paired with @1", P2S(peer_pos))) return meta:get_int("tube_dir") end diff --git a/tubelib2/internal2.lua b/tubelib2/internal2.lua index 69f97a2..9389cc3 100644 --- a/tubelib2/internal2.lua +++ b/tubelib2/internal2.lua @@ -385,8 +385,8 @@ end function Tube:store_teleport_data(pos, peer_pos) local meta = M(pos) meta:set_string("tele_pos", P2S(peer_pos)) - meta:set_string("channel", nil) - meta:set_string("formspec", nil) + meta:set_string("channel", "") + meta:set_string("formspec", "") meta:set_string("infotext", S("Connected to @1", P2S(peer_pos))) return meta:get_int("tube_dir") end diff --git a/tubelib2/tube_api.lua b/tubelib2/tube_api.lua index 5358e54..7f29b6c 100644 --- a/tubelib2/tube_api.lua +++ b/tubelib2/tube_api.lua @@ -455,7 +455,7 @@ function Tube:prepare_pairing(pos, tube_dir, sFormspec) meta:set_int("tube_dir", tube_dir) elseif tube_dir then meta:set_int("tube_dir", tube_dir) - meta:set_string("channel", nil) + meta:set_string("channel", "") meta:set_string("infotext", S("Pairing is missing")) meta:set_string("formspec", sFormspec) else @@ -489,8 +489,8 @@ function Tube:stop_pairing(pos, oldmetadata, sFormspec) local peer_meta = M(tele_pos) if peer_meta then self:after_dig_node(tele_pos, {peer_meta:get_int("tube_dir")}) - peer_meta:set_string("channel", nil) - peer_meta:set_string("tele_pos", nil) + peer_meta:set_string("channel", "") + peer_meta:set_string("tele_pos", "") peer_meta:set_string("formspec", sFormspec) peer_meta:set_string("infotext", S("Pairing is missing")) end diff --git a/unified_inventory/.luacheckrc b/unified_inventory/.luacheckrc index e6fec97..a951e48 100644 --- a/unified_inventory/.luacheckrc +++ b/unified_inventory/.luacheckrc @@ -10,6 +10,7 @@ read_globals = { string = {fields = {"split", "trim"}}, table = {fields = {"copy", "getn"}}, + "dump", "minetest", "vector", "ItemStack", "datastorage", diff --git a/unified_inventory/api.lua b/unified_inventory/api.lua index 1c756d9..604d49e 100644 --- a/unified_inventory/api.lua +++ b/unified_inventory/api.lua @@ -51,6 +51,7 @@ minetest.after(0.01, function() end end end + table.sort(ui.items_list) ui.items_list_size = #ui.items_list print("Unified Inventory. Inventory size: "..ui.items_list_size) @@ -183,6 +184,37 @@ minetest.after(0.01, function() ui.crafts_for.recipe[outputitemname] = new_recipe_list end + -- Remove unknown items from all categories + local total_removed = 0 + for cat_name, cat_def in pairs(ui.registered_category_items) do + for itemname, _ in pairs(cat_def) do + local idef = minetest.registered_items[itemname] + if not idef then + total_removed = total_removed + 1 + --[[ + -- For analysis + minetest.log("warning", "[unified_inventory] Removed item '" + .. itemname .. "' from category '" .. cat_name + .. "'. Reason: item not registered") + ]] + cat_def[itemname] = nil + elseif not ui.is_itemdef_listable(idef) then + total_removed = total_removed + 1 + --[[ + -- For analysis + minetest.log("warning", "[unified_inventory] Removed item '" + .. itemname .. "' from category '" .. cat_name + .. "'. Reason: item is in 'not_in_creative_inventory' group") + ]] + cat_def[itemname] = nil + end + end + end + if total_removed > 0 then + minetest.log("info", "[unified_inventory] Removed " .. total_removed .. + " items from the categories.") + end + for _, callback in ipairs(ui.initialized_callbacks) do callback() end diff --git a/unified_inventory/bags.lua b/unified_inventory/bags.lua index f6d4da6..8563c2f 100644 --- a/unified_inventory/bags.lua +++ b/unified_inventory/bags.lua @@ -144,7 +144,7 @@ local function save_bags_metadata(player, bags_inv) end local meta = player:get_meta() if is_empty then - meta:set_string("unified_inventory:bags", nil) + meta:set_string("unified_inventory:bags", "") else meta:set_string("unified_inventory:bags", minetest.serialize(bags)) diff --git a/unified_inventory/category.lua b/unified_inventory/category.lua index 46b3e02..f32a947 100644 --- a/unified_inventory/category.lua +++ b/unified_inventory/category.lua @@ -115,6 +115,11 @@ function unified_inventory.set_category_index(category_name, index) update_category_list() end function unified_inventory.add_category_item(category_name, item) + if type(item) ~= "string" then + minetest.log("warning", "[unified_inventory] Cannot register category item: " .. dump(item)) + return + end + ensure_category_exists(category_name) unified_inventory.registered_category_items[category_name][item] = true end diff --git a/unified_inventory/default-categories.lua b/unified_inventory/default-categories.lua index 57d3e88..1982527 100644 --- a/unified_inventory/default-categories.lua +++ b/unified_inventory/default-categories.lua @@ -1,4 +1,5 @@ local S = minetest.get_translator("unified_inventory") +local ui = unified_inventory unified_inventory.register_category('plants', { symbol = "flowers:tulip", @@ -25,71 +26,87 @@ unified_inventory.register_category('lighting', { label = S("Lighting") }) - -if unified_inventory.automatic_categorization then - minetest.register_on_mods_loaded(function() - - -- Add biome nodes to environment category - for _,def in pairs(minetest.registered_biomes) do - local env_nodes = { - def.node_riverbed, def.node_top, def.node_filler, def.node_dust, - } - for i,node in pairs(env_nodes) do - if node then - unified_inventory.add_category_item('environment', node) - end +local function register_automatic_categorization() + -- Add biome nodes to environment category + for _,def in pairs(minetest.registered_biomes) do + local env_nodes = { + def.node_riverbed, def.node_top, def.node_filler, def.node_dust, + } + for i,node in pairs(env_nodes) do + if node then + unified_inventory.add_category_item('environment', node) end end + end - -- Add minable ores to minerals and everything else (pockets of stone & sand variations) to environment - for _,item in pairs(minetest.registered_ores) do - if item.ore_type == "scatter" then - local drop = minetest.registered_nodes[item.ore].drop - if drop and drop ~= "" then - unified_inventory.add_category_item('minerals', item.ore) - unified_inventory.add_category_item('minerals', drop) - else - unified_inventory.add_category_item('environment', item.ore) + -- Preparation for ore registration: find all possible drops (digging) + local possible_node_dig_drops = { + -- ["default:stone_with_coal"] = { "default:coal_lump", "mymod:raregem" } + -- Ores may be contained multiple times, depending on drop chances. + } + for itemname, recipes in pairs(ui.crafts_for.usage) do + for _, recipe in ipairs(recipes) do + if recipe.type == "digging" or recipe.type == "digging_chance" then + if not possible_node_dig_drops[itemname] then + possible_node_dig_drops[itemname] = {} end - else - unified_inventory.add_category_item('environment', item.ore) + local stack = ItemStack(recipe.output) + table.insert(possible_node_dig_drops[itemname], stack:get_name()) end end + end - -- Add items by item definition - for name, def in pairs(minetest.registered_items) do - local group = def.groups or {} - if not group.not_in_creative_inventory then - if group.stair or - group.slab or - group.wall or - group.fence then - unified_inventory.add_category_item('building', name) - elseif group.flora or - group.flower or - group.seed or - group.leaves or - group.sapling or - group.tree then - unified_inventory.add_category_item('plants', name) - elseif def.type == 'tool' then - unified_inventory.add_category_item('tools', name) - elseif def.liquidtype == 'source' then - unified_inventory.add_category_item('environment', name) - elseif def.light_source and def.light_source > 0 then - unified_inventory.add_category_item('lighting', name) - elseif group.door or - minetest.global_exists("doors") and ( - doors.registered_doors and doors.registered_doors[name..'_a'] or - doors.registered_trapdoors and doors.registered_trapdoors[name] - ) then - unified_inventory.add_category_item('building', name) - end + -- Add minable ores to minerals and everything else (pockets of stone & sand variations) to environment + for _, odef in pairs(minetest.registered_ores) do + local drops = possible_node_dig_drops[odef.ore] + if drops and odef.ore_type == "scatter" then + ui.add_category_item('minerals', odef.ore) + -- Register all possible drops as "minerals" + ui.add_category_items('minerals', drops) + possible_node_dig_drops[odef.ore] = {} -- mask as handled + else + ui.add_category_item('environment', odef.ore) + end + end + + -- Add items by item definition + for name, def in pairs(minetest.registered_items) do + local group = def.groups or {} + if not group.not_in_creative_inventory then + if group.stair or + group.slab or + group.wall or + group.fence then + unified_inventory.add_category_item('building', name) + elseif group.flora or + group.flower or + group.seed or + group.leaves or + group.sapling or + group.tree then + unified_inventory.add_category_item('plants', name) + elseif def.type == 'tool' then + unified_inventory.add_category_item('tools', name) + elseif def.liquidtype == 'source' then + unified_inventory.add_category_item('environment', name) + elseif def.light_source and def.light_source > 0 then + unified_inventory.add_category_item('lighting', name) + elseif group.door or + minetest.global_exists("doors") and ( + doors.registered_doors and doors.registered_doors[name..'_a'] or + doors.registered_trapdoors and doors.registered_trapdoors[name] + ) then + unified_inventory.add_category_item('building', name) end end - end) + end end +if ui.automatic_categorization then + ui.register_on_initialized(register_automatic_categorization) +end + + -- [[ unified_inventory.add_category_items('plants', { "default:dry_grass_5", @@ -256,23 +273,6 @@ unified_inventory.add_category_items('minerals', { "default:coal_lump", "default:bronzeblock", "default:goldblock", - - "stairs:slab_bronzeblock", - "stairs:slab_copperblock", - "stairs:slab_steelblock", - "stairs:slab_tinblock", - "stairs:stair_bronzeblock", - "stairs:stair_copperblock", - "stairs:stair_inner_bronzeblock", - "stairs:stair_inner_copperblock", - "stairs:stair_inner_steelblock", - "stairs:stair_inner_tinblock", - "stairs:stair_outer_bronzeblock", - "stairs:stair_outer_copperblock", - "stairs:stair_outer_steelblock", - "stairs:stair_outer_tinblock", - "stairs:stair_steelblock", - "stairs:stair_tinblock", }) unified_inventory.add_category_items('building', { diff --git a/unified_inventory/init.lua b/unified_inventory/init.lua index 35a2e83..9c8ec35 100644 --- a/unified_inventory/init.lua +++ b/unified_inventory/init.lua @@ -53,8 +53,9 @@ unified_inventory = { standard_background = "bgcolor[#0000]background9[0,0;1,1;ui_formbg_9_sliced.png;true;16]", hide_disabled_buttons = minetest.settings:get_bool("unified_inventory_hide_disabled_buttons", false), + hide_uncraftable_items = minetest.settings:get_bool("unified_inventory_hide_uncraftable_items", false), - version = 4 + version = 5 } local ui = unified_inventory diff --git a/unified_inventory/internal.lua b/unified_inventory/internal.lua index 0903d86..3caa43a 100644 --- a/unified_inventory/internal.lua +++ b/unified_inventory/internal.lua @@ -270,8 +270,8 @@ local function formspec_add_item_browser(player, formspec, ui_peruser) button_name, minetest.formspec_escape(tooltip) ) n = n + 2 - list_index = list_index + 1 end + list_index = list_index + 1 end end formspec[n] = "style[page_number;content_offset=0]" @@ -349,12 +349,29 @@ function ui.apply_filter(player, filter, search_dir) end local player_name = player:get_player_name() + -- Whether to show uncraftable items + local fprefilter = function(_) + return true + end + if ui.hide_uncraftable_items and not ui.is_creative(player_name) then + fprefilter = function(name) + return ui.get_recipe_list(name) + end + end + + local registered_items = minetest.registered_items local lfilter = string.lower(filter) local ffilter + if lfilter:sub(1, 6) == "group:" then -- Group filter: all groups of the item must match local groups = lfilter:sub(7):split(",") - ffilter = function(name, def) + ffilter = function(name) + local def = registered_items[name] + if not def then + return false + end + for _, group in ipairs(groups) do if not def.groups[group] or def.groups[group] <= 0 then @@ -368,7 +385,12 @@ function ui.apply_filter(player, filter, search_dir) local player_info = minetest.get_player_information(player_name) local lang = player_info and player_info.lang_code or "" - ffilter = function(name, def) + ffilter = function(name) + local def = registered_items[name] + if not def then + return false + end + local lname = string.lower(name) local ldesc = string.lower(def.description) local llocaldesc = minetest.get_translated_string @@ -378,32 +400,29 @@ function ui.apply_filter(player, filter, search_dir) end end - local is_itemdef_listable = ui.is_itemdef_listable local filtered_items = {} local category = ui.current_category[player_name] or 'all' if category == 'all' then - for name, def in pairs(minetest.registered_items) do - if is_itemdef_listable(def) - and ffilter(name, def) then + for _, name in ipairs(ui.items_list) do + if fprefilter(name) and ffilter(name) then table.insert(filtered_items, name) end end elseif category == 'uncategorized' then - for name, def in pairs(minetest.registered_items) do - if is_itemdef_listable(def) - and not ui.find_category(name) - and ffilter(name, def) then + for _, name in ipairs(ui.items_list) do + if not ui.find_category(name) + and fprefilter(name) + and ffilter(name) then table.insert(filtered_items, name) end end else -- Any other category is selected for name, exists in pairs(ui.registered_category_items[category]) do - local def = minetest.registered_items[name] - if exists and def - and is_itemdef_listable(def) - and ffilter(name, def) then + if exists + and fprefilter(name) + and ffilter(name) then table.insert(filtered_items, name) end end diff --git a/unified_inventory/item_names.lua b/unified_inventory/item_names.lua index cb9f2a3..5eb0e40 100644 --- a/unified_inventory/item_names.lua +++ b/unified_inventory/item_names.lua @@ -18,7 +18,8 @@ local function set_hud(player) item_names[player_name] = { hud = player:hud_add({ - hud_elem_type = "text", + -- TODO: remove compatibility code when 5.8.0 is no longer used + [minetest.features.hud_def_type_field and "type" or "hud_elem_type"] = "text", position = {x=0.5, y=1}, offset = off, alignment = {x=0, y=-1}, diff --git a/unified_inventory/register.lua b/unified_inventory/register.lua index 225a861..f802a71 100644 --- a/unified_inventory/register.lua +++ b/unified_inventory/register.lua @@ -215,7 +215,7 @@ local function stack_image_button(x, y, w, h, buttonname_prefix, item) local group_name = name:sub(7) local group_item = ui.get_group_item(group_name) show_is_group = not group_item.sole - displayitem = group_item.item or "unknown" + displayitem = group_item.item or name selectitem = group_item.sole and displayitem or name end local label = show_is_group and "G" or "" @@ -298,11 +298,10 @@ ui.register_page("craftguide", { local n = 4 + local item_def = minetest.registered_items[item_name] local item_name_shown - if minetest.registered_items[item_name] - and minetest.registered_items[item_name].description then - item_name_shown = S("@1 (@2)", - minetest.registered_items[item_name].description, item_name) + if item_def and item_def.description then + item_name_shown = S("@1 (@2)", item_def.description, item_name) else item_name_shown = item_name end @@ -327,12 +326,14 @@ ui.register_page("craftguide", { F(role_text[dir]), item_name_shown) n = n + 2 - local giveme_form = table.concat({ - "label[".. (give_x+0.1)..",".. (craftguidey + 2.7) .. ";" .. F(S("Give me:")) .. "]", - "button["..(give_x)..",".. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_1;1]", - "button["..(give_x+0.8)..",".. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_10;10]", - "button["..(give_x+1.6)..",".. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_99;99]" - }) + local giveme_form = + "label[" .. (give_x + 0.1) .. "," .. (craftguidey + 2.7) .. ";" .. F(S("Give me:")) .. "]" .. + "button[" .. (give_x) .. "," .. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_1;1]" + if item_def.type ~= "tool" then + giveme_form = giveme_form .. + "button[" .. (give_x + 0.8) .. "," .. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_10;10]" .. + "button[" .. (give_x + 1.6) .. "," .. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_99;99]" + end if not craft then -- No craft recipes available for this item. diff --git a/unified_inventory/settingtypes.txt b/unified_inventory/settingtypes.txt index 4fabbe5..6f04aea 100644 --- a/unified_inventory/settingtypes.txt +++ b/unified_inventory/settingtypes.txt @@ -16,6 +16,10 @@ unified_inventory_waypoints (Enable waypoints) bool true # If enabled, disabled buttons will be hidden instead of grayed out. unified_inventory_hide_disabled_buttons (Hide disabled buttons) bool false +# Hides items with no known craft recipe from the category "all" (default). +# This setting has no effect on players in creative mode. +unified_inventory_hide_uncraftable_items (Hide uncraftable items) bool false + # Automatically categorizes registered items based on their # groups. This is based on a fuzzy match, thus is not 100% accurate. unified_inventory_automatic_categorization (Categories: add items automatically) bool true diff --git a/unified_inventory/waypoints.lua b/unified_inventory/waypoints.lua index 8dbb175..8fdd801 100644 --- a/unified_inventory/waypoints.lua +++ b/unified_inventory/waypoints.lua @@ -103,7 +103,7 @@ local function get_waypoint_data(player) end ui.register_page("waypoints", { - get_formspec = function(player) + get_formspec = function(player, perplayer_formspec) local player_name = player:get_player_name() local wp_info_x = ui.style_full.form_header_x + 1.25 local wp_info_y = ui.style_full.form_header_y + 0.5 @@ -115,12 +115,16 @@ ui.register_page("waypoints", { local sel = waypoints.selected or 1 local formspec = { - ui.style_full.standard_inv_bg, string.format("label[%f,%f;%s]", ui.style_full.form_header_x, ui.style_full.form_header_y, F(S("Waypoints"))), "image["..wp_info_x..","..wp_info_y..";1,1;ui_waypoints_icon.png]" } - local n=4 + local n=3 + + if not perplayer_formspec.is_lite_mode then + formspec[n] = ui.style_full.standard_inv_bg + n = n + 1 + end -- Tabs buttons: for i = 1, COUNT do @@ -212,7 +216,10 @@ ui.register_page("waypoints", { formspec[n+2] = string.format("label[%f,%f;%s: %s]", wp_info_x, wp_info_y+2.60, F(S("HUD text color")), hud_colors[waypoint.color or 1][3]) - return {formspec=table.concat(formspec)} + return { + formspec = table.concat(formspec), + draw_inventory = not perplayer_formspec.is_lite_mode, + } end, }) @@ -220,7 +227,6 @@ ui.register_button("waypoints", { type = "image", image = "ui_waypoints_icon.png", tooltip = S("Waypoints"), - hide_lite=true }) local function update_hud(player, waypoints, temp, i)