Compare commits

..

1 Commits

Author SHA1 Message Date
Joachim Stolberg
72e633bc74 built on 25/08/2024 19:49:57 2024-08-25 19:49:57 +02:00
161 changed files with 9880 additions and 5821 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -21,10 +21,3 @@ mod that adds basic material nodes and items
* `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`

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

29
grep.py Executable file
View File

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

View File

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

28
hyperloop/.luacheckrc Normal file
View File

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

View File

@ -13,11 +13,11 @@
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
--local P = minetest.string_to_pos
--local M = minetest.get_meta
local S = hyperloop.S
local NS = hyperloop.NS
--local NS = hyperloop.NS
local tBlockingTime = {}
local tBookings = {} -- open bookings: tBookings[SP(departure_pos)] = arrival_pos

View File

@ -18,7 +18,6 @@ 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:
-- tStationList[SP(pos)] = {pos1, pos2, ...}
@ -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]"
@ -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)

View File

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

View File

@ -15,13 +15,12 @@
-- 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

View File

@ -11,13 +11,12 @@
]]--
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
--local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
--local P = minetest.string_to_pos
local M = minetest.get_meta
--- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
-- Open the door for an emergency
local function door_on_punch(pos, node, puncher, pointed_thing)
@ -40,7 +39,6 @@ local function door_command(door_pos1, facedir, cmnd)
local node1 = minetest.get_node(door_pos1)
local node2 = minetest.get_node(door_pos2)
local meta = minetest.get_meta(door_pos1)
if cmnd == "open" then
minetest.sound_play("door", {
pos = door_pos1,

View File

@ -17,7 +17,6 @@ local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
-- To store elevator floors and formspecs
local Cache = {}
@ -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
@ -463,11 +462,11 @@ minetest.register_node("hyperloop:elevator_bottom", {
-- 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

View File

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

View File

@ -11,13 +11,12 @@
]]--
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
--local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
--local P = minetest.string_to_pos
local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Tube = hyperloop.Tube
local Stations = hyperloop.Stations

View File

@ -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

View File

@ -1,142 +0,0 @@
# textdomain: hyperloop
### booking.lua ###
Station data is corrupted. Please rebuild the station!=Данные станции повреждены. Пожалуйста, постройте станцию заново!
Station is still blocked. Please try again in a few seconds!=Станция ещё заблокирована. Пожалуйста, попробуйте через несколько секунд!
### booking_node.lua ###
Please enter the station name to@nwhich this booking machine belongs.=Пожалуйста, введите название станции к@nкоторой относится эта билетная касса.
Station name=Название станции
Additional station information=Дополнительная информация о станции
Station has already a booking machine!=У станции уже есть билетная касса!
Invalid station name!=Недопустимое имя станции!
Hyperloop Booking Machine=Билетная касса Гиперпетли
### booking_node.lua ###
### elevator.lua ###
Select your destination=Выберите пункт назначения
### booking_node.lua ###
### migrate.lua ###
<unknown>=<неизвестное>
### deco.lua ###
Hyperloop Promo Poster =Промо-плакат Гиперпетли
Hyperloop Station Sign=Вывеска станции Гиперпетли
Hyperloop Station Sign Right=Вывеска - вправо станция Гиперпетли
Hyperloop Station Sign Left=Вывеска - влево станция Гиперпетли
### door.lua ###
The Booking Machine for this station is missing!=У этой станции отсутствует билетная касса!
Hyperloop Door Top=Верх двери Гиперпетли
Hyperloop Door Bottom=Низ двери Гиперпетли
### elevator.lua ###
Hyperloop Elevator Shaft=Шахта лифта Гиперпетли
Destination=Назначение
Floor=Этаж
(current position)=(текущее положение)
Hyperloop Elevator=Лифт Гиперпетли
Please insert floor name=Пожалуйста, введите название этажа
Floor name=Название этажа
Base=База
### elevator.lua ###
### wifi.lua ###
Save=Сохранить
### junction.lua ###
Station connected with =Станция соединена с
Junction connected with =Развязка соединена с
Hyperloop Junction Block=Блок - развязка Гиперпетли
Hyperloop Pillar=Колонна Гиперпетли
### junction.lua ###
### migrate.lua ###
Junction=Развязка
### lcd.lua ###
Hyperloop Display=Дисплей Гиперпетли
### map.lua ###
Dist.=Расстояние
Station/Junction=Станция/Развязка
Position=Положение
Owner=Владелец
Conn. with=Соедин. с
Close=Закрыт
Hyperloop Station Book=Реестр станций Гиперпетли
### migrate.lua ###
Hyperloop Legacy Tube=Трубка наследования Гиперпетли
unknown=неизвестно
### recipes.lua ###
### station.lua ###
Hypersteel Ingot=Слиток гиперстали
### seat.lua ###
[Hyperloop] No booking entered!=[Hyperloop] Не введен билет!
Hyperloop Pod Seat=Сиденье кабины Гиперпетли
### station.lua ###
Station completed. Now place the Booking Machine!=Станция готова! Теперь разместите билетную кассу!
Area is protected!=Территория защищена!
Not enough space to build the station!=Недостаточно места для строительства станции!
Hyperloop Station Pod Builder=Возводитель кабины станции Гиперпетли
Hyperloop Pod Shell=Ячейка кабины Гиперпетли
Blue Wool=Голубая шерсть
Glass=Стекло
Not enough inventory items to build the station!=Недостаточно предметов в инвентаре для строительства станции!
Destroy Station=Разобрать станцию
Build Station=Построить станцию
Hyperloop Station Block=Блок станции Гиперпетли
Station=Станция
### tube.lua ###
Junction at =Развязка у
Station '=Станция '
Station at =Станция у
Open end at =Открытый конец у
There is no station/junction on this level. =На этом уровне нет станции/развязки.
Do you really want to start a new network?!=Вы действительно хотите начать новую сеть?!
Hyperloop Tube=Труба Гиперпетли
### tubecrowbar.lua ###
[Hyperloop] Error: Tube is too long!=[Hyperloop] Ошибка: Труба слишком длинная!
[Crowbar Help]@n=[Помощь ломика]@n
left: remove node@n= влево: удалить ноду@n
right: repair tube/shaft line@n= вправо: починить трубу/линию шахты@n
You don't have the necessary privs!=У вас нет нужных привилегий!
Hyperloop Tube Crowbar=Ломик трубы Гиперпетли
Rights to remove tube nodes by means of the crowbar=Права на удаление нод трубы посредством ломика
Repair via WorldEdit placed Hyperloop tubes by reusing WorldEdit pos1/pos2=Почините с помощью WorldEdit трубы Гиперпетли, используя повторно pos1/pos2
### waypoint.lua ###
Hyperloop Waypoint=Дорожная метка Гиперпетли
### wifi.lua ###
Enter channel string=Введите строку канала
Hyperloop WiFi Tube=WiFi-труба Гиперпетли

View File

@ -12,12 +12,11 @@
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
--local P = minetest.string_to_pos
--local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Stations = hyperloop.Stations

View File

@ -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
@ -126,7 +125,7 @@ local function convert_legary_nodes(self, pos, dir)
end
local function convert_line(self, pos, dir)
local fpos,fdir = convert_legary_nodes(self, pos, dir)
convert_legary_nodes(self, pos, dir)
self:tool_repair_tube(pos)
end
@ -139,8 +138,8 @@ 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
@ -220,7 +219,7 @@ 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

View File

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

View File

@ -14,7 +14,7 @@
-- 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)

View File

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

View File

@ -11,16 +11,14 @@
]]--
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
--local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
--local P = minetest.string_to_pos
local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local I, _ = dofile( minetest.get_modpath("hyperloop").."/intllib.lua")
local Stations = hyperloop.Stations
local PlayerNameTags = {}
local function enter_display(tStation, text)
@ -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

View File

@ -12,12 +12,11 @@
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
--local P = minetest.string_to_pos
local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Tube = hyperloop.Tube
local Stations = hyperloop.Stations
@ -111,7 +110,7 @@ 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!"))
@ -229,7 +228,7 @@ local function destroy_station(pos, player_name)
-- 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

View File

@ -11,27 +11,11 @@
]]--
-- for lazy programmers
local S = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
--local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local function station_name(pos)
local dataSet = hyperloop.get_station(pos)
if dataSet then
if dataSet.junction == true then
return S("Junction at ")..SP(pos)
elseif dataSet.name ~= nil then
return S("Station '")..dataSet.name.."' at "..SP(pos)
else
return S("Station at ")..SP(pos)
end
end
return S("Open end at ")..minetest.pos_to_string(pos)
end
function hyperloop.check_network_level(pos, player)
if hyperloop.free_tube_placement_enabled then

View File

@ -12,12 +12,11 @@
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
--local P = minetest.string_to_pos
--local M = minetest.get_meta
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Shaft = hyperloop.Shaft
local Tube = hyperloop.Tube
@ -52,7 +51,7 @@ 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
@ -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"),

View File

@ -14,7 +14,7 @@
local PI = 3.1415926
-- for lazy programmers
local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
--local SP = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta

View File

@ -17,7 +17,6 @@ local Waypoints = {}
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
minetest.register_node("hyperloop:waypoint", {
description = S("Hyperloop Waypoint"),

View File

@ -12,7 +12,6 @@
-- Load support for intllib.
local S = hyperloop.S
local NS = hyperloop.NS
local Tube = hyperloop.Tube

View File

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

View File

@ -1,61 +0,0 @@
# textdomain: minecart
Station name=Название станции
Waiting time/sec=Время ожидания, сек.
connected to=соединена с
Not connected!=Нет соединения!
Minecart Railway Buffer=Железнодорожный буфер вагонетки
Summary=Резюме
1. Place your rails and build a route with two endpoints. Junctions are allowed as long as each route has its own start and endpoint.=1. Размещайте рельсы и постройте маршрут с двумя концами. Развязки допускаются, если у каждого маршрута есть свой начальный и конечный пункты.
2. Place a Railway Buffer at both endpoints (buffers are always needed, they store the route and timing information).=1. Разместите Железнодорожный буфер вагонетки на каждом конце маршрута (буферы нужны всегда, в них хранится информация о маршруте и времени).
3. Give both Railway Buffers unique station names, like Oxford and Cambridge.=Дайте каждому буферу уникальное название станции, например Оксфорд и Кембридж.
4. Place a Minecart at a buffer and give it a cart number (1..999)=Поместите вагонетку возле буфера и присвойте ей номер (1...999)
5. Drive from buffer to buffer in both directions using the Minecart(!) to record the routes (use 'right-left' keys to control the Minecart).=Проедьте от буфера до буфера в обе стороны на Вагонетке(!), чтобы записать маршрут (используйте клавиши влево-вправо для управления вагонеткой).
6. Punch the buffers to check the connection data (e.g. 'Oxford: connected to Cambridge').=Ударьте буферы, чтобы проверить сведения о соединении (например 'Оксфорд: соединен с Кембриджем').
7. Optional: Configure the Minecart waiting time in both buffers. The Minecart will then start automatically after the configured time.=Опционально: Настойте вагонетке время ожидания на каждом буфере. Вагонетка отъедет автоматически по прошествии указанного времени.
8. Optional: Protect your rail network with the Protection Landmarks (one Landmark at least every 16 nodes/meters).=Опционально: Защитите свою железную дорогу Защитными Вешками (минимум одна вешка на каждый 16 нод/метров).
9. Place a Minecart in front of the buffer and check whether it starts after the configured time.=Поставьте вагонетку перед буфером и проверьте как она стартует про прошествии установленного времени.
10. Check the cart state via the chat command: /mycart <num>@n '<num>' is the cart number=Проверяйте состояние вагонетки командой чата: /mycart <num>@n '<num>' - это номер вагонетки.
11. Drop items into the Minecart and punch the cart to start it.=Кладите предметы в вагонетку и ударьте её, чтобы поехала.
12. Dig the cart with 'sneak+click' (as usual). The items will be drop down.=Выкапывайте из вагонетки Красться+клик (как обычно). Предметы выпадут.
13. To retrieve lost carts, use the chat command: /stopcart <num>=Чтобы вернуть потерянные вагонетки, используйте команду чата: /stopcart <num>
Primary used to transport items. You can drop items into the Minecart and punch the cart to get started. Sneak+click the cart to get cart and items back=Первоначально используется для перевозки предметов. Предметы можно бросать в вагонетку и ударять её чтобы поехала. Красться+клик на вагонетку, чтобы взять её и предметы.
Used as buffer on both rail ends. Needed to be able to record the cart routes=Используется как буфер на обоих концах рельсов. Необходимо для записи маршрутов вагонетки.
Protect your rails with the Landmarks (one Landmark at least every 16 blocks near the rail)=Защитите свои рельсы Вешками (минимум 1 вешка на 16 блоков возле рельс)
Used to load/unload Minecart. The Hopper can push/pull items to/from chests and drop/pickup items to/from Minecarts. To unload a Minecart place the hopper below the rail. To load the Minecart, place the hopper right next to the Minecart.=Используется для загрузки/разгрузки вагонетки. Хоппер может толкать/тянуть предметы из сундуков/в сундуки и ронять/подбирать предметы в вагонетку/из вагонетки. Чтобы разгрузить вагонетку, поместите хоппер ниже рельс. Чтобы загрузить вагонетку, разместите хоппер рядом с вагонеткой.
Minecart=Вагонетка
Minecart, the lean railway transportation automation system=Вагонетка, опорная система железнодорожного транспорта
Minecart Cart=Вагонетка
Minecart Speed Signs=Указатели скорости вагонетки
If several carts are running on one route,@nit can happen that a buffer position is already occupied and one cart therefore stops earlier.@nIn this case, the cart pusher is used to push the cart towards the buffer again.@nThis block must be placed under the rail at a distance of 2 m in front of the buffer.=Если на маршруте несколько вагонеток,@nто место возле буфера может быть занято и тогда одна из вагонеток остановится раньше.@nДля этого случая Толкатель нужен чтобы подтолкнуть вагонетку в сторону буфера.@nЭтот блок должен быть размещён под рельсами на расстоянии 2 м спереди от буфера.
Limit the cart speed with speed limit signs.@n@nAs before, the speed of the carts is also influenced by power rails.@nBrake rails are irrelevant, the cart does not brake here.@nThe maximum speed is 8 m/s. This assumes a ratio of power rails@nto normal rails of 1 to 4 on a flat section of rail. A rail section is a@nseries of rail nodes without a change of direction. After every curve / kink,@nthe speed for the next section of the route is newly determined,@ntaking into account the swing of the cart. This means that a cart can@nroll over short rail sections without power rails.@n@nIn order to additionally brake the cart at certain points@n(at switches or in front of a buffer), speed limit signs can be placed@non the track. With these signs the speed can be reduced to 4, 2, or 1 m / s.@nThe "No speed limit" sign can be used to remove the speed limit.@n@nThe speed limit signs must be placed next to the track so that they can@nbe read from the cart. This allows different speeds in each direction of travel.=Ограничьте скорость вагонетки ограничительными указателями.@n@nКак и раньше, на скорость вагонетки также влияет мощьность рельс.@nТормозящие рельсы не принимаются во внимание, здесь вагонетка не затормозит.@nМаксимальная скорость 8 м/с. Здесь устанавливается коэффициент мощности рельс@nк нормальным рельсам от 1 до 4 на плоской части пути. Секция пути - это последовательность нод-рельсов без изменения направления. После каждого изгиба,@nскорость для следующей секции пути выставляется заново,@nс учётом раскачки вагонетки. Это значит, что вагонетка может@прокатиться недолгую секцию пути без силовых рельс.@n@nЧтобы дополнительно притормозить вагонетку на отдельных точках@n(на переключателях или перед буфером), можно ставить указатели ограничения скорости@nна пути. Знаками можно снизить скорость до 4, 2 или 1 м/с.@nУказатель "Без ограничения скорости" можно использовать, чтобы снять ограничения.@n@nУказатели ограничения скорости должны быть размещены рядом с путями так, чтобы их было@nвидно с вагонетки. Так достигается разная скорость на каждом направлении путешествия.
Minecart Hopper=Хоппер
Minecart (Sneak+Click to pick up)=Вагонетка (Красться+клик чтобы взять)
Output cart state and position, or a list of carts, if no cart number is given.=Выдается состояние и положение вагонетки, или список вагонеток, если номер на задан.
List of carts=Список вагонеток
Stop and return/drop a missing/running cart.=Остановить и вернуть/бросить потерянную/движущуюся вагонетку.
Cart=Вагонетка
dropped=сброшено
is not existing!=не существует"
Enter cart number=Введите номер вагонетки
Save=Сохранить
[minecart] Area is protected!=[minecart] Территория защищена!
Allow to dig/place rails in Minecart Landmark areas=Позволяет выкапывать/размещать рельсы в зоне действия Железнодорожных Вешек.
Minecart Landmark=Железнодорожная Вешка
Cart Pusher=Толкатель
left=лево
right=право
straight=прямо
Recording=Запись
speed=скорость
next junction=следующая развязка
Travel time=Время в пути
[minecart] Recording canceled!=[minecart] Запись прервана"
[minecart] Route stored!=[minecart] Маршрут сохранён!
[minecart] Speed @= %u m/s, Time @= %u s, Route length @= %u m=[minecart] Скорость @= %u м/с, время @= %u с, длина маршрута @= %u м=
[minecart] Your route is too short to record!=[minecart] Ваш маршрут слишком короткий для записи!
Speed "1"=Скорость "1"
Speed "2"=Скорость "2"
Speed "4"=Скорость "4"
No speed limit=Без ограничения скорости
Cart List=Список вагонеток
Cart Terminal=Вокзал

View File

@ -14,7 +14,7 @@
local MP = minetest.get_modpath("minecart")
--[[if not minetest.get_modpath("techage") and
if not minetest.get_modpath("techage") and
minetest.get_modpath("doclib") then
minetest.register_node("minecart:manual", {
@ -119,7 +119,7 @@ local MP = minetest.get_modpath("minecart")
output = "minecart:manual",
recipe = {"minecart:handbuch"},
})
end]]--
end
minetest.register_on_mods_loaded(function()
if minetest.get_modpath("techage") then
@ -129,8 +129,6 @@ minetest.register_on_mods_loaded(function()
doclib.add_to_manual("techage", "EN", content)
local content = dofile(MP.."/manual_DE.lua")
doclib.add_to_manual("techage", "DE", content)
local content = dofile(MP.."/manual_RU.lua")
doclib.add_to_manual("techage", "RU", content)
elseif minetest.get_modpath("doclib") then
@ -147,9 +145,5 @@ minetest.register_on_mods_loaded(function()
local content = dofile(MP.."/manual_DE.lua")
doclib.add_to_manual("minecart", "DE", content)
doclib.create_manual("minecart", "RU", settings)
local content = dofile(MP.."/manual_RU.lua")
doclib.add_to_manual("minecart", "RU", content)
end
end)

View File

@ -1,118 +0,0 @@
return {
titles = {
"1,Шахтная тележка",
"2,Краткое руководство по эксплуатации",
"2,Блоки Minecart",
"3,Тележка",
"3,Буфер",
"3,Ориентир",
"3,Бункер",
"3,Толкатель тележек",
"3,Знаки ограничения скорости",
"2,Команды чата",
"2,Онлайн-руководство",
},
texts = {
"Мод Minecart имеет свои собственные тележки (называемые Minecart) в дополнение к стандартным тележкам.\n"..
"Minecart используются для автоматизированной транспортировки предметов по частным и общественным железнодорожным сетям.\n"..
"Основные возможности:\n"..
"\n"..
" - Перевозка предметов от станции к станции\n"..
" - Тележки могут проезжать через незагруженные участки (только обе станции должны быть загружены)\n"..
" - Автоматизированная погрузка/разгрузка вагонов Minecarts с помощью бункера Minecart Hopper\n"..
" - Рельсы могут быть защищены с помощью ориентиров\n"..
"\n"..
"Если доступен мод Techage\\, то:\n"..
"\n"..
" - Доступны две дополнительные тележки для перевозки предметов и жидкостей\n"..
" - Тележки можно загружать/разгружать с помощью толкателей и насосов Techage\n"..
"\n"..
"Вы можете:\n"..
"\n"..
" - Войти в тележку\\, щелкнув правой кнопкой мыши\n"..
" - Покинуть тележку с помощью прыжка или щелчка правой кнопкой мыши\n"..
" - Толкать/запускать тележку левым щелчком мыши.\n"..
"\n"..
"Но тележки имеют своего владельца\\, и вы не можете запускать\\, останавливать или удалять чужие тележки.\n"..
"Тележки можно запускать только в буфере. Если тележка остановится по дороге\\, удалите ее и поставьте на место в буфере.\n"..
"\n"..
"\n"..
"\n",
" - Разместите рельсы и постройте маршрут с двумя конечными точками.\nПересечения разрешены\\, если у каждого маршрута есть своя начальная и конечная точка.\n"..
" - Разместите железнодорожный буфер в обеих конечных точках (буферы всегда нужны\\,\nв них хранится информация о маршруте и времени).\n"..
" - Дайте обоим железнодорожным буферам уникальные названия станций\\, например Оксфорд и Кембридж.\n"..
" - Поместите тележку в буфер и присвойте ей номер (1..999).\n"..
" - Проедьте от буфера к буферу в обоих направлениях\\, используя Minecart(!)\\, чтобы\nзаписать маршруты (используйте клавиши \"вправо-влево\" для управления Minecart).\n"..
" - Пробейте буферы\\, чтобы проверить данные о соединениях.\n(например\\, \"Оксфорд: соединен с Кембриджем\").\n"..
" - Дополнительно: Настройте время ожидания Minecart в обоих буферах.\nMinecart будет автоматически запускаться по истечении заданного времени.\n"..
" - Поместите тележку перед буфером и проверьте\\, запускается ли она\nпо истечении заданного времени.\n"..
" - Бросьте предметы в тележку и ударьте по ней\\, чтобы запустить ее.\n"..
" - Откопайте тележку с помощью 'sneak+click' (как обычно). Предметы будут падать вниз.\n"..
"\n"..
"\n"..
"\n",
"\n"..
"\n",
"Используется для транспортировки предметов. Вы можете положить предметы в тележку и ударить по ней\\, чтобы начать движение. \n"..
"Нажмите на тележку\\, чтобы вернуть тележку и предметы обратно.\n"..
"\n"..
"\n"..
"\n",
"Используется в качестве буфера на обоих концах рельс. Необходим для записи маршрутов тележек.\n"..
"\n"..
"\n"..
"\n",
"Защитите свои рельсы с помощью ориентиров (по одному ориентиру не реже\\, чем через каждые 16 блоков рядом с рельсами.\n"..
"\n"..
"\n"..
"\n",
"Используется для загрузки/разгрузки тележки. Бункер может толкать/тянуть предметы в/из сундуков\n"..
"и сбрасывать/поднимать предметы в/из тележки. Чтобы разгрузить тележку\\, поместите бункер \n"..
"под рельсы. Чтобы загрузить тележку\\, поместите бункер прямо рядом с тележкой.\n"..
"\n"..
"\n"..
"\n",
"Если несколько тележек движутся по одному маршруту\\, может случиться так\\, что буферная позиция уже занята\\, и поэтому одна тележка останавливается раньше.\n"..
"В этом случае толкатель тележки используется для того\\, чтобы снова подтолкнуть тележку к буферу.\n"..
"Этот блок должен быть размещен под рельсом на расстоянии 2 м перед буфером.\n"..
"\n"..
"\n"..
"\n",
"Ограничьте скорость тележки с помощью знаков ограничения скорости.\n"..
"\n"..
"\n"..
"\n",
" - Команда '/mycart <num>' для вывода состояния и местоположения тележки\n"..
" - Команда '/stopcart <num>' для возврата потерянных тележек\n"..
"\n",
"Полное руководство доступно онлайн.\n"..
"Смотрите: https://github.com/joe7575/minecart/wiki\n"..
"\n",
},
images = {
"minecart_manual_image.png",
"minecart_manual_image.png",
"minecart:cart",
"minecart:cart",
"minecart:buffer",
"minecart:landmark",
"minecart:hopper",
"minecart:cart_pusher",
"minecart:speed2",
"",
"",
},
plans = {
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
}

View File

@ -1,112 +0,0 @@
# Шахтная тележка
Мод Minecart имеет свои собственные тележки (называемые Minecart) в дополнение к стандартным тележкам.
Minecart используются для автоматизированной транспортировки предметов по частным и общественным железнодорожным сетям.
Основные возможности:
- Перевозка предметов от станции к станции
- Тележки могут проезжать через незагруженные участки (только обе станции должны быть загружены)
- Автоматизированная погрузка/разгрузка вагонов Minecarts с помощью бункера Minecart Hopper
- Рельсы могут быть защищены с помощью ориентиров
Если доступен мод Techage, то:
- Доступны две дополнительные тележки для перевозки предметов и жидкостей
- Тележки можно загружать/разгружать с помощью толкателей и насосов Techage
Вы можете:
- Войти в тележку, щелкнув правой кнопкой мыши
- Покинуть тележку с помощью прыжка или щелчка правой кнопкой мыши
- Толкать/запускать тележку левым щелчком мыши.
Но тележки имеют своего владельца, и вы не можете запускать, останавливать или удалять чужие тележки.
Тележки можно запускать только в буфере. Если тележка остановится по дороге, удалите ее и поставьте на место в буфере.
[minecart_manual_image.png|image]
## Краткое руководство по эксплуатации
1. Разместите рельсы и постройте маршрут с двумя конечными точками.
Пересечения разрешены, если у каждого маршрута есть своя начальная и конечная точка.
2. Разместите железнодорожный буфер в обеих конечных точках (буферы всегда нужны,
в них хранится информация о маршруте и времени).
3. Дайте обоим железнодорожным буферам уникальные названия станций, например Оксфорд и Кембридж.
4. Поместите минитележку в буфер и присвойте ей номер (1..999).
5. Проедьте от буфера к буферу в обоих направлениях, используя Minecart(!), чтобы
записать маршруты (используйте клавиши "вправо-влево" для управления Minecart).
6. Пробейте буферы, чтобы проверить данные о соединениях.
(например, "Оксфорд: соединен с Кембриджем").
7. Дополнительно: Настройте время ожидания Minecart в обоих буферах.
Minecart будет автоматически запускаться по истечении заданного времени.
9. Поместите минитележку перед буфером и проверьте, запускается ли она
по истечении заданного времени.
10. Бросьте предметы в мини-тележку и ударьте по ней, чтобы запустить ее.
11. Откопайте тележку с помощью 'sneak+click' (как обычно). Предметы будут падать вниз.
[minecart_manual_image.png|image]
## Блоки Minecart
[minecart:cart|image]
### Тележка
Используется для транспортировки предметов. Вы можете положить предметы в минитележку и ударить по ней, чтобы начать движение.
Нажмите на тележку, чтобы вернуть тележку и предметы обратно.
[minecart:cart|image]
### Буфер
Используется в качестве буфера на обоих концах рельс. Необходим для записи маршрутов тележек.
[minecart:buffer|image]
### Ориентир
Защитите свои рельсы с помощью ориентиров (по одному ориентиру не реже, чем через каждые 16 блоков рядом с рельсами.
[minecart:landmark|image]
### Бункер
Используется для загрузки/разгрузки минитележки. Бункер может толкать/тянуть предметы в/из сундуков
и сбрасывать/поднимать предметы в/из минитележки. Чтобы разгрузить минитележку, поместите бункер
под рельсы. Чтобы загрузить минитележку, поместите бункер прямо рядом с минитележкой.
[minecart:hopper|image]
### Толкатель тележек
Если несколько тележек движутся по одному маршруту, может случиться так, что буферная позиция уже занята, и поэтому одна тележка останавливается раньше.
В этом случае толкатель тележки используется для того, чтобы снова подтолкнуть тележку к буферу.
Этот блок должен быть размещен под рельсом на расстоянии 2 м перед буфером.
[minecart:cart_pusher|image]
### Знаки ограничения скорости
Ограничьте скорость тележки с помощью знаков ограничения скорости.
[minecart:speed2|image]
## Команды чата
- Команда `/mycart <num>` для вывода состояния и местоположения тележки
- Команда `/stopcart <num>` для возврата потерянных тележек
## Онлайн-руководство
Полное руководство доступно онлайн.
Смотрите: https://github.com/joe7575/minecart/wiki

View File

@ -199,7 +199,3 @@ m2l.gen_lua_file("./manual_EN.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_DE.md")
m2l.gen_lua_file("./manual_DE.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_RU.md")
m2l.gen_lua_file("./manual_RU.lua")

View File

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

View File

@ -288,39 +288,37 @@ minetest.register_chatcommand("mycart", {
minetest.register_chatcommand("stopcart", {
params = "<cart-num>",
description = S("Stop and return/drop a missing/running cart."),
func = function(owner, param)
if player~=nil then
local userID = tonumber(param)
local player_pos = minetest.get_player_by_name(owner):get_pos()
if userID then
local data = minecart.get_cart_monitoring_data(owner, userID)
if data and data.objID then
local entity = minetest.luaentities[data.objID]
--print("stopcart", userID, data.pos, data.objID, entity)
if data.objID == 0 then
-- Cart as node
if data.pos then
local meta = M(data.pos)
if owner == meta:get_string("owner") and userID == meta:get_int("userID") then
minecart.remove_nodecart(data.pos)
end
func = function(owner, param)
local userID = tonumber(param)
local player_pos = minetest.get_player_by_name(owner):get_pos()
if userID then
local data = minecart.get_cart_monitoring_data(owner, userID)
if data and data.objID then
local entity = minetest.luaentities[data.objID]
--print("stopcart", userID, data.pos, data.objID, entity)
if data.objID == 0 then
-- Cart as node
if data.pos then
local meta = M(data.pos)
if owner == meta:get_string("owner") and userID == meta:get_int("userID") then
minecart.remove_nodecart(data.pos)
end
elseif entity then
-- Cart as entity
minecart.remove_entity(entity, data.pos)
else
-- Cart as zombie/invalid/corrupted
minetest.log("warning", "[Minecart] data.objID ~= 0, but no entity available!")
end
minetest.add_item(player_pos, ItemStack({name = data.node_name}))
minecart.monitoring_remove_cart(owner, userID)
return true, S("Cart") .. " " .. userID .. " " .. S("dropped")
elseif entity then
-- Cart as entity
minecart.remove_entity(entity, data.pos)
else
return false, S("Cart") .. " " .. userID .. " " .. S("is not existing!")
-- Cart as zombie/invalid/corrupted
minetest.log("warning", "[Minecart] data.objID ~= 0, but no entity available!")
end
minetest.add_item(player_pos, ItemStack({name = data.node_name}))
minecart.monitoring_remove_cart(owner, userID)
return true, S("Cart") .. " " .. userID .. " " .. S("dropped")
else
return false
return false, S("Cart") .. " " .. userID .. " " .. S("is not existing!")
end
else
return false
end
end
})

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -21,8 +21,6 @@ if minetest.global_exists("techage") then
doclib.add_to_manual("techage", "EN", content)
local content = dofile(MP.."/manual_DE.lua")
doclib.add_to_manual("techage", "DE", content)
local content = dofile(MP.."/manual_RU.lua")
doclib.add_to_manual("techage", "RU", content)
elseif minetest.global_exists("doclib") then

View File

@ -1,590 +0,0 @@
return {
titles = {
"1,Управляемый бот",
"2,Первые шаги",
"2,Знаки",
"2,Датчики и приводы",
"2,Инструмент подключения датчиков",
"2,Инвентарь",
"2,Узлы / Блоки",
"3,Бокс бота",
"3,Заслонка бота",
"3,Дубликатор знаков",
"3,Датчик ботов",
"3,Датчик узла",
"3,Датчик урожая",
"3,Сундук бота",
"3,Таймер бота",
"3,Блок управления ботом",
"3,Расширитель датчиков",
"3,Сигнал И",
"3,Задержка сигнала",
"3,Знак 'farming'",
"3,Знак 'pattern'",
"3,Знак 'copy3x3x3'",
"3,Знак 'flowers'",
"3,Знак 'aspen'",
"3,Знак 'command'",
"3,Знак \"turn right\"",
"3,Знак \"turn left\"",
"3,Знак \"take item\"",
"3,Знак \"add item\"",
"3,Знак \"stop\"",
"3,Знак \"add to cart\" (minecart)",
"3,Знак \"взять из тележки\" (minecart)",
"3,Знак \"take water\" (xdecor)",
"3,Знак 'cook soup' (xdecor)",
"2,Команды бота",
"3,Techage специальные команды",
"3,Команды управления потоком",
"3,Дополнительные команды перехода",
"3,Управление потоком Примеры",
"4,Пример с функцией в начале:",
"4,Пример с функцией в конце:",
},
texts = {
"Робот\\, управляемый знаками.\n"..
"\n"..
"В сети: https://github.com/joe7575/signs_bot/blob/master/manual_EN.md\n"..
"\n"..
"\n"..
"\n",
"После того как вы разместили бокс с управляемым роботом\\, вы можете запустить бота \n"..
"с помощью кнопки 'On' в меню бокса. Если бот сразу же вернется в свою коробку\\,\n"..
"вам нужно будет сначала зарядить его электрической энергией (techage).\n"..
"Затем бот бежит прямо вперед\\, пока не достигнет препятствия\n"..
"(ступенька с двумя или более блоками вверх или вниз или знак).\n"..
"\n"..
"Управлять ботом можно только с помощью знаков\\, которые расположены на его пути.\n"..
"\n"..
"Если бот первым достигнет знака\\, он выполнит команды\\, указанные на нем.\n"..
"Если первой командой на знаке будет\\, например\\, 'turn_around'\\, бот повернет и пойдет обратно.\n"..
"В этом случае бот снова дойдет до своего ящика и выключится.\n"..
"\n"..
"Если бот первым достигнет препятствия\\, он остановится или\\, если есть возможность\\, \n"..
"выполнит следующие команды\\, начиная с последнего знака.\n"..
"\n"..
"У бота есть инвентарь с 6 стеками для знаков и 8 стеками для других предметов \n"..
"(которые размещаются/добываются ботом). Этот инвентарь имитирует внутренний инвентарь. \n"..
"Это означает\\, что вы будете иметь доступ к инвентарю только в том случае\\, \n"..
"если бот выключен (\"сидит\" в своем боксе).\n"..
"\n"..
"Также есть следующие блоки:\n"..
"\n"..
" - Датчики: Они могут посылать сигнал на исполнительный механизм\\, если подключены к нему.\n"..
" - Актуаторы: Они выполняют действие\\, когда получают сигнал от датчика.\n"..
"\n"..
"\n"..
"\n",
"Вы управляете направлением движения бота с помощью знаков \"turn left\" и\n"..
"\"turn right\" (знаки со стрелкой). Бот может преодолевать ступеньки\n"..
"(один блок вверх/вниз). Но есть и команды\\, позволяющие перемещать бота вверх и вниз.\n"..
"\n"..
"Не обязательно отмечать путь обратно к коробке. С помощью команды 'turn_off'\n"..
"бот выключится и вернется в свой бокс из любого положения. То же самое касается\n"..
"если вы выключите бота через меню бокса. Если бот достигнет знака в неправильном\n"..
"направлении (сзади или сбоку)\\, то знак будет проигнорирован.\n"..
"Бот просто перешагнет через знак.\n"..
"\n"..
"Все предопределенные знаки имеют меню со списком команд бота. Эти знаки \n"..
"не могут быть изменены\\, но вы можете создавать и программировать свои собственные знаки. \n"..
"Для этого нужно использовать знак \"command\". В этом знаке есть поле для редактирования команд \n"..
"и страница помощи со всеми доступными командами. На странице помощи есть кнопка копирования \n"..
"чтобы упростить программирование.\n"..
"\n"..
"Также для ваших собственных знаков важно знать: После выполнения последней\n"..
"команды знака\\, бот возвращается к своему поведению по умолчанию и бежит в\n"..
"выбранном направлении.\n"..
"\n"..
"Стандартным заданием для бота является перемещение предметов из одного сундука в другой сундук\n"..
"(или узел с сундуком\\, похожим на инвентарь). Это можно сделать с помощью двух знаков\n"..
"'взять предмет' и 'добавить предмет'. Эти знаки должны быть размещены над узлами сундуков.\n"..
"\n"..
"\n"..
"\n",
"В дополнение к знакам бот может управляться с помощью датчиков. \n"..
"Датчики\\, такие как датчик бота\\, имеют два состояния: включено и выключено. \n"..
"Если датчик бота обнаруживает бота он переключится в состояние \"включено\" \n"..
"и пошлёт сигнал подключённому блоку\\, называемому исполнительным механизмом.\n"..
"\n"..
"Датчиками являются:\n"..
"\n"..
" - Датчик бота: Посылает сигнал\\, когда мимо проезжает робот.\n"..
" - Датчик узла: Посылает сигнал\\, когда обнаруживает любой (новый) узел.\n"..
" - Датчик урожая: Посылает сигнал\\, когда\\, например\\, пшеница полностью выросла\n"..
" - Сундук бота: Посылает сигнал в зависимости от состояния сундука (пустой\\, полный)\n"..
"\n"..
"Приводы:\n"..
"\n"..
" - Знаки Bot Box: Может выключать и включать бота\n"..
" - Блок управления: Может использоваться для смены знака\\, чтобы управлять ботом.\n"..
"\n"..
"Датчики должны быть соединены (спарены) с исполнительными механизмами. Для этого используется\n"..
"\"Инструмент подключения датчиков\".\n"..
"\n"..
"\n"..
"\n",
"Чтобы отправить сигнал от датчика к приводу\\, датчик должен быть соединен\n"..
"(сопряжен) с исполнительным механизмом. Чтобы соединить датчик и исполнительный механизм\\, \n"..
"необходимо использовать инструмент Sensor Connection Tool. Просто нажмите инструментом на оба блока\\, и \n"..
"датчик будет соединен с исполнительным механизмом. Об успешном подключении сигнализирует звук ping/pong.\n"..
"\n"..
"Прежде чем соединить датчик с приводом\\, убедитесь\\, что привод находится в\n"..
"требуемом состоянии. Например: Если вы хотите запустить бота с помощью датчика\\, подключите\n"..
"датчик с блоком бота\\, когда бот находится в состоянии \"включено\". В противном случае \n"..
"сигнал датчика остановит Бота\\, вместо того чтобы запустить его.\n"..
"\n"..
"\n"..
"\n",
"Следующее относится ко всем командам\\, которые помещают предметы/элементы в инвентарь бота\\, например:\n"..
"\n"..
" - 'take_item <num> <slot>'\n"..
" - 'pickup_items <slot>'\n"..
" - 'trash_sign <slot>'\n"..
" - 'harvest <slot>'\n"..
" - 'dig_front <slot> <lvl>'\n"..
"\n"..
"Если в команде не был указан слот или слот 0 (случай A)\\, то все 8 слотов инвентаря бота\n"..
"проверяются один за другим. Если был указан слот (случай B)\\,\n"..
"проверяется только этот слот. \n"..
"В обоих случаях действует следующее: \n"..
"\n"..
"Если слот предварительно сконфигурирован и соответствует предмету\\, или если слот не сконфигурирован\n"..
"и пуст\\, или только частично заполнен типом добавляемого элемента\\, \n"..
"то элемент(ы) будет(ут) добавлен(ы).\n"..
"Если не все предметы могут быть добавлены\\, то в случае A пробуются оставшиеся слоты. \n"..
"Все\\, что не удалось добавить в инвентарь\\, вернется обратно или будет сброшено.\n"..
"\n"..
"Сказанное ниже относится ко всем командам\\, которые используются для взятия предметов из инвентаря бота\\, например:\n"..
"\n"..
" - 'add_item <num> <slot>'.\n"..
"\n"..
"Не имеет значения\\, настроен слот или нет. Бот берет первый стек\n"..
"который он может найти в своем инвентаре\\, и пытается его использовать. Если указан слот\\,\n"..
"он берет только его\\, если слот не указан\\, он проверяет все слоты по очереди\n"..
"если слот не указан\\, то проверяет все слоты по очереди\\, начиная со слота 1\\, пока не найдет что-нибудь. Если найденное число\n"..
"меньше запрошенного\\, он пытается взять остаток из любого другого слота.\n"..
"\n"..
"\n"..
"\n",
"",
"Бокс - это корпус бота. Разместите бокс и запустите бота с помощью кнопки\n"..
"'On'. Если установлен мод techage\\, боту требуется электричество.\n"..
"Бот выходит из коробки с правой стороны. Он не запустится\\, если эта позиция заблокирована.\n"..
"\n"..
"Чтобы остановить и удалить бота\\, нажмите кнопку \"Off\".\n"..
"Инвентарь коробки имитирует инвентарь бота.\n"..
"Вы не сможете получить доступ к инвентарю\\, если бот запущен.\n"..
"Бот может носить с собой до 8 стаков и 6 знаков.\n"..
"\n"..
"\n"..
"\n",
"Заслонка - это простой блок\\, используемый в качестве двери для бота. Поместите заслонку в любую стену\\,\n"..
"и бот будет автоматически открывать и закрывать заслонку\\, проходя через нее.\n"..
"\n"..
"\n"..
"\n",
"Дубликатор можно использовать для создания копий знаков:\n"..
"\n"..
" - Положите один знак 'cmnd'\\, который будет использоваться в качестве шаблона\\, в инвентарь 'Template'.\n"..
" - Добавьте один или несколько 'blank signs' в инвентарь 'In'.\n"..
" - Возьмите копии из инвентаря 'Output'.\n"..
"\n"..
"В качестве шаблона можно также использовать написанные книги \\[default:book_written\\].\n"..
"Уже написанные знаки тоже можно использовать в качестве входных.\n"..
"\n"..
"\n"..
"\n",
"Датчик ботов обнаруживает любого бота и посылает сигнал\\, если бот находится поблизости.\n"..
"Радиус действия датчика - один узел/метр\". Направление датчика не имеет значения.\n"..
"\n"..
"\n"..
"\n",
"Датчик узлов посылает циклические сигналы\\, когда обнаруживает\\, что узлы появились\n"..
"или исчезновения\\, но должен быть настроен соответствующим образом. Действительными узлами являются все виды\n"..
"блоки и растения. Радиус действия датчика - 3 узла/метра в одном направлении.\n"..
"У датчика есть активная сторона (красная)\\, которая должна указывать на наблюдаемую область.\n"..
"\n"..
"\n"..
"\n",
"Датчик сельскохозяйственных культур посылает циклические сигналы\\, когда\\, например\\, пшеница полностью выросла.\n"..
"Радиус действия датчика составляет один узел/метр. Датчик имеет активную сторону (красную)\\, которая\n"..
"должна быть направлена на культуру/поле.\n"..
"\n"..
"\n"..
"\n",
"Сундук бота - это специальный сундук с функцией датчика. Он посылает сигнал\n"..
"в зависимости от состояния сундука. Возможные состояния: 'empty'\\, 'not empty'\\, 'almost full'\n"..
"\n"..
"Типичный вариант использования - выключить бота\\, когда сундук почти полон или пуст.\n"..
"\n"..
"\n"..
"\n",
"Это особый вид датчиков. Может быть запрограммирован на время в секундах\\,\n"..
"например\\, для циклического запуска бота.\n"..
"\n"..
"\n"..
"\n",
"Блок управления ботом используется для управления ботом с помощью знаков. Блок может быть\n"..
"загружено до 4 различных знаков и может быть запрограммировано с помощью датчиков.\n"..
"\n"..
"Чтобы загрузить блок\\, поместите знак на красную сторону блока и нажмите на блок.\n"..
"Знак исчезает / перемещается в инвентарь блока.\n"..
"Эту операцию можно повторить 3 раза.\n"..
"\n"..
"Используйте инструмент подключения\\, чтобы соединить до 4 датчиков с блоком управления ботом.\n"..
"\n"..
"\n"..
"\n",
"С помощью расширителя датчиков сигналы датчиков можно передавать на несколько исполнительных механизмов.\n"..
"Поместите один или несколько удлинителей рядом с датчиком и соедините каждый удлинитель с одним\n"..
"одним исполнительным механизмом с помощью инструмента подключения.\n"..
"\n"..
"\n"..
"\n",
"Сигнал посылается\\, если получены все входные сигналы.\n"..
"\n"..
"\n"..
"\n",
"Сигналы пересылаются с задержкой. Последующие сигналы ставятся в очередь. \n"..
"Время задержки может быть настроено.\n"..
"\n"..
"\n"..
"\n",
"Используется для сбора урожая и засева поля 3x3. Поместите знак перед полем.\n"..
"Используемое семя должно находиться в первом слоте инвентаря бота.\n"..
"Когда бот закончит\\, он повернется и пойдет обратно.\n"..
"\n"..
"\n"..
"\n",
"Используется для создания копии куба 3x3x3. Поместите знак перед деталью\n"..
"который нужно скопировать. Используйте знак копирования\\, чтобы сделать копию этой детали на другом\n"..
"месте. Бот должен сначала добраться до знака детали\\, а затем до знака копии.\n"..
"\n"..
"Используется для создания копии куба 3x3x3. Поместите щит перед блоками\n"..
"которые нужно скопировать. Используйте знак копирования\\, чтобы сделать копию этих блоков в другом\n"..
"месте. Сначала бот должен обработать знак \"pattern\"\\, только после этого он может\n"..
"направить его к знаку копирования.\n"..
"\n"..
"\n"..
"\n",
"Используется для создания копии куба 3x3x3. Поместите знак перед тем местом\\, где вы хотите\n"..
"чтобы была сделана копия. См. также знак \"шаблон\".\n"..
"\n"..
"\n"..
"\n",
"Используется для срезания цветов на поле 3x3. Поместите знак перед полем.\n"..
"По окончании бот поворачивается.\n"..
"\n"..
"\n"..
"\n",
"Используется для заготовки ствола осины или сосны.\n"..
"\n"..
" - Поместите знак перед деревом.\n"..
" - Поставьте сундук справа от знака.\n"..
" - Положите в сундук стопку грязи (минимум 10 предметов).\n"..
" - Предварительно настройте слот 1 инвентаря бота на грязь\n"..
" - Заранее настройте слот 2 инвентаря бота с саженцами\n"..
"\n"..
"\n"..
"\n",
"Знак 'command' может быть запрограммирован игроком. Поместите знак перед собой\n"..
"перед собой и используйте меню узла\\, чтобы запрограммировать последовательность команд бота.\n"..
"В меню есть поле для редактирования команд и страница помощи со всеми\n"..
"доступными командами. На странице помощи есть кнопка копирования\\, чтобы упростить программирование.\n"..
"\n"..
"\n"..
"\n",
"Бот поворачивает направо\\, когда обнаруживает перед собой этот знак.\n"..
"\n"..
"\n"..
"\n",
"Бот поворачивает налево\\, когда обнаруживает этот знак перед собой.\n"..
"\n"..
"\n"..
"\n",
"Бот берет предметы из сундука перед собой\\, а затем поворачивается.\n"..
"Этот знак должен быть помещен на верхнюю часть сундука.\n"..
"\n"..
"\n"..
"\n",
"Бот кладет предметы в стоящий перед ним сундук\\, а затем разворачивается.\n"..
"Этот знак должен быть размещен поверх сундука.\n"..
"\n"..
"\n"..
"\n",
"Бот будет останавливаться перед этим знаком до тех пор\\, пока знак не будет убран или\n"..
"пока бот не будет выключен.\n"..
"\n"..
"\n"..
"\n",
"Бот кладет товары в стоящую перед ним мини-тележку\\, толкает тележку\\, а затем разворачивается\n"..
"разворачивается. Этот знак должен быть размещен на рельсе в конечном положении тележки.\n"..
"\n"..
"\n"..
"\n",
"Бот берет предметы из стоящей перед ним мини-тележки\\, толкает тележку и затем\n"..
"поворачивается. Этот знак должен быть размещен на рельсе в конечном положении тележки.\n"..
"\n"..
"\n"..
"\n",
"Используется для набирания воды в ведро. Поместите знак на берегу\\, перед бассейном с неподвижной водой. \n"..
"\n"..
"Предметы в слотах:\n"..
"\n"..
" 1 - пустое ведро\n"..
"\n"..
"В результате в выбранном слоте инвентаря появится одно ведро с водой. По окончании\\,\n"..
"бот поворачивается.\n"..
"\n"..
"\n"..
"\n",
"Используется для приготовления овощного супа в котелке. Котелок должен быть пустым и находиться\n"..
"над легковоспламеняющимися материалами. Поместите знак перед казаном с одним полем\n"..
"чтобы предотвратить возгорание деревянной вывески.\n"..
"\n"..
"Предметы в слотах:\n"..
"\n"..
" 1 - ведро с водой\"\n"..
" 2 - овощ № 1 (например\\, помидор)\n"..
" 3 - овощ № 2 (например\\, морковь)\n"..
" 4 - пустая миска (из модов farming или xdecor).\n"..
"\n"..
" В результате в выбранном слоте инвентаря окажется одна миска с овощным супом.\n"..
"Закончив\\, бот разворачивается.\n"..
"\n"..
"\n"..
"\n",
"Все команды также описаны в виде помощи в узле \"Команда знака\".\n"..
"Все блоки или знаки\\, которые устанавливаются\\, берутся из инвентаря бота.\n"..
"Все удаленные блоки или знаки будут добавлены обратно в инвентарь бота.\n"..
"'<слот>' - это всегда внутренний стек инвентаря бота (1..8).\n"..
"\n"..
" move <steps> - перейти на один или несколько шагов вперед\n"..
" cond_move - перейти к ближайшему препятствию или знаку\n"..
" turn_left - повернуть налево\n"..
" turn_right - повернуть направо\n"..
" turn_around - повернуться\n"..
" backward - сделать шаг назад\n"..
" turn_off - выключить робота / вернуться в коробку\n"..
" pause <sec> - подождать одну или несколько секунд\n"..
" move_up - двигаться вверх (не более 2 раз)\n"..
" move_down - двигаться вниз\n"..
" fall_down - упасть в яму/пропасть (до 10 блоков)\n"..
" take_item <num> <slot> - взять один или несколько предметов из ящика\n"..
" add_item <num> <slot> - положить один или несколько предметов в ящик\n"..
" add_fuel <num> <slot> - положить топливо в печь\n"..
" place_front <slot> <lvl> - поместить блок перед ботом\n"..
" place_left <slot> <lvl> - поместить блок слева от бота\n"..
" place_right <slot> <lvl> - поместить блок справа от бота\n"..
" place_below <slot> - поднять робота и поместить блок под него\n"..
" place_above <slot> - установить блок над роботом\n"..
" dig_front <slot> <lvl> - убрать блок перед роботом\n"..
" dig_left <slot> <lvl> - удалить блок слева\n"..
" dig_right <slot> <lvl> - удалить блок справа\n"..
" dig_below <slot> - удалить блок под роботом\n"..
" dig_above <slot> - удалить блок над роботом\n"..
" rotate_item <lvl> <шаги> - повернуть блок перед роботом\n"..
" set_param2 <lvl> <param2> - установить параметр2 блока перед роботом\n"..
" place_sign <slot> - установить знак\n"..
" place_sign_behind <slot> - поставить знак позади робота\n"..
" dig_sign <slot> - удалить знак\n"..
" trash_sign <slot> - удалить знак\\, очистить данные и добавить в инвентарь.\n"..
" stop - бот остановится\\, пока не будет убран щит\n"..
" pickup_items <slot> - забрать предметы (в поле 3x3)\n"..
" drop_items <num> <slot> - сбросить предметы\n"..
" harvest - собирать урожай на поле 3x3 (фермерство)\n"..
" cutting - срезать цветы на поле 3x3\n"..
" sow_seed <слот> - увидеть/посадить поле 3x3\n"..
" plant_sapling <слот> - посадить саженец перед роботом\n"..
" pattern - сохранить свойства блока за знаком (куб 3x3x3) в качестве шаблона\n"..
" copy <size> - сделать копию сохраненного шаблона размером 3x3x3\n"..
" punch_cart - сбить тележку с шахтой\n"..
" add_compost <slot> - положить 2 листа в компостную бочку\n"..
" take_compost <slot> - взять компостный элемент из бочки\n"..
" print <text> - Вывести сообщение чата для отладки\n"..
" take_water <slot> - Взять воду из пустого ведра\n"..
" fill_cauldron <slot> - Наполнить котел xdecor для супа\n"..
" take_soup <slot> - Взять кипящий суп в пустую миску из котла\n"..
" flame_on - Развести огонь\n"..
" flame_off - Погасить огонь\n"..
"\n"..
"\n"..
"\n",
" ignite - Зажечь угольную зажигалку techage\n"..
" low_batt <percent> - Выключить бот\\, если заряд батареи ниже \n"..
" заданного значения в процентах (1..99)\n"..
" jump_low_batt <percent> <label> - Переход к <ярлыку>\\, если заряд батареи ниже\n"..
" заданного значения в процентах (1..99)\n"..
" (см. раздел \"Команды управления потоком\".)\n"..
" send_cmnd <receiver> <command> - Отправка команды techage на заданный узел. \n"..
" Получатель адресуется по номеру узла.\n"..
" Для команд\\, состоящих из двух или более слов\\, \n"..
" используйте символ '*' вместо пробелов\\, например: \n"..
" send_cmnd 3465 pull*default:dirt*2\n"..
"\n"..
"\n"..
"\n",
" -- команда перехода\\, <label> - слово из символов a-z или A-Z\n"..
" jump <label>\n"..
" \n"..
" -- метка перехода / начало функции\n"..
" <label>:\n"..
" \n"..
" -- возврат из функции\n"..
" return\n"..
" \n"..
" -- начало блока цикла\\, <num> - число 1..999\n"..
" repeat <num>\n"..
" \n"..
" -- конец блока цикла\n"..
" end\n"..
" \n"..
" -- вызов функции (с возвратом через команду 'return')\n"..
" call <label>\n"..
"\n"..
"\n"..
"\n",
" -- Проверьте\\, есть ли в сундуке <num> предметов\\, как в узле.\n"..
" -- Если нет\\, перейдите к <метке>.\n"..
" -- <slot> - это слот инвентаря бота (1..8)\n"..
" -- укажите элемент\\, или 0 для любого элемента.\n"..
" jump_check_item <num> <slot> <label>\n"..
" \n"..
" -- См. раздел \"Специальные команды Techage\".\n"..
" jump_low_batt <percent> <label>\n"..
"\n"..
"\n"..
"\n",
"",
" -- перейти к метке 'main'\n"..
" jump main\n"..
" \n"..
" -- начальная точка функции с именем 'foo'\n"..
" foo:\n"..
" cmnd ...\n"..
" cmnd ...\n"..
" -- конец 'foo'. Перейти назад\n"..
" return\n"..
" \n"..
" -- основная программа\n"..
" main:\n"..
" cmnd ...\n"..
" -- повторите все команды до 'end' 10 раз\n"..
" repeat 10\n"..
" cmnd ...\n"..
" -- вызвать подфункцию 'foo'\n"..
" call foo\n"..
" cmnd ...\n"..
" -- конец цикла 'repeat'\n"..
" end\n"..
" -- конец программы\n"..
" exit\n"..
"\n",
" cmnd ...\n"..
" -- повторите все команды до 'end' 10 раз\n"..
" repeat 10\n"..
" cmnd ...\n"..
" -- вызвать подфункцию 'foo'\n"..
" call foo\n"..
" cmnd ...\n"..
" -- конец цикла 'repeat'\n"..
" end\n"..
" -- конец программы\n"..
" exit\n"..
" \n"..
" -- начальная точка функции с именем'foo'\n"..
" foo:\n"..
" cmnd ...\n"..
" cmnd ...\n"..
" -- конец 'foo'. Перейти назад\n"..
" return\n"..
"\n",
},
images = {
"signs_bot_bot_inv.png",
"signs_bot_bot_inv.png",
"signs_bot_sign_left.png",
"signs_bot_sensor_crop_inv.png",
"signs_bot_tool.png",
"signs_bot:box",
"",
"signs_bot:box",
"signs_bot:bot_flap",
"signs_bot:duplicator",
"signs_bot:bot_sensor",
"signs_bot:node_sensor",
"signs_bot:crop_sensor",
"signs_bot:chest",
"signs_bot:timer",
"signs_bot:changer1",
"signs_bot:sensor_extender",
"signs_bot:and1",
"signs_bot:delayer",
"signs_bot:farming",
"signs_bot:pattern",
"signs_bot:copy3x3x3",
"signs_bot:flowers",
"signs_bot:aspen",
"signs_bot:sign_cmnd",
"signs_bot:sign_right",
"signs_bot:sign_left",
"signs_bot:sign_take",
"signs_bot:sign_add",
"signs_bot:sign_stop",
"signs_bot:sign_add_cart",
"signs_bot:sign_take_cart",
"signs_bot:water",
"signs_bot:soup",
"signs_bot_bot_inv.png",
"signs_bot_bot_inv.png",
"signs_bot_bot_inv.png",
"signs_bot_bot_inv.png",
"",
"",
"",
},
plans = {
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
}

View File

@ -1,542 +0,0 @@
# Управляемый бот
Робот, управляемый знаками.
В сети: https://github.com/joe7575/signs_bot/blob/master/manual_EN.md
[signs_bot_bot_inv.png|image]
## Первые шаги
После того как вы разместили бокс с управляемым роботом, вы можете запустить бота
с помощью кнопки 'On' в меню бокса. Если бот сразу же вернется в свою коробку,
вам нужно будет сначала зарядить его электрической энергией (techage).
Затем бот бежит прямо вперед, пока не достигнет препятствия
(ступенька с двумя или более блоками вверх или вниз или знак).
Управлять ботом можно только с помощью знаков, которые расположены на его пути.
Если бот первым достигнет знака, он выполнит команды, указанные на нем.
Если первой командой на знаке будет, например, 'turn_around', бот повернет и пойдет обратно.
В этом случае бот снова дойдет до своего ящика и выключится.
Если бот первым достигнет препятствия, он остановится или, если есть возможность,
выполнит следующие команды, начиная с последнего знака.
У бота есть инвентарь с 6 стеками для знаков и 8 стеками для других предметов
(которые размещаются/добываются ботом). Этот инвентарь имитирует внутренний инвентарь.
Это означает, что вы будете иметь доступ к инвентарю только в том случае,
если бот выключен ("сидит" в своем боксе).
Также есть следующие блоки:
- Датчики: Они могут посылать сигнал на исполнительный механизм, если подключены к нему.
- Актуаторы: Они выполняют действие, когда получают сигнал от датчика.
[signs_bot_bot_inv.png|image]
## Знаки
Вы управляете направлением движения бота с помощью знаков "turn left" и
"turn right" (знаки со стрелкой). Бот может преодолевать ступеньки
(один блок вверх/вниз). Но есть и команды, позволяющие перемещать бота вверх и вниз.
Не обязательно отмечать путь обратно к коробке. С помощью команды 'turn_off'
бот выключится и вернется в свой бокс из любого положения. То же самое касается
если вы выключите бота через меню бокса. Если бот достигнет знака в неправильном
направлении (сзади или сбоку), то знак будет проигнорирован.
Бот просто перешагнет через знак.
Все предопределенные знаки имеют меню со списком команд бота. Эти знаки
не могут быть изменены, но вы можете создавать и программировать свои собственные знаки.
Для этого нужно использовать знак "command". В этом знаке есть поле для редактирования команд
и страница помощи со всеми доступными командами. На странице помощи есть кнопка копирования
чтобы упростить программирование.
Также для ваших собственных знаков важно знать: После выполнения последней
команды знака, бот возвращается к своему поведению по умолчанию и бежит в
выбранном направлении.
Стандартным заданием для бота является перемещение предметов из одного сундука в другой сундук
(или узел с сундуком, похожим на инвентарь). Это можно сделать с помощью двух знаков
'взять предмет' и 'добавить предмет'. Эти знаки должны быть размещены над узлами сундуков.
[signs_bot_sign_left.png|image]
## Датчики и приводы
В дополнение к знакам бот может управляться с помощью датчиков.
Датчики, такие как датчик бота, имеют два состояния: включено и выключено.
Если датчик бота обнаруживает бота он переключится в состояние "включено"
и пошлёт сигнал подключённому блоку, называемому исполнительным механизмом.
Датчиками являются:
- Датчик бота: Посылает сигнал, когда мимо проезжает робот.
- Датчик узла: Посылает сигнал, когда обнаруживает любой (новый) узел.
- Датчик урожая: Посылает сигнал, когда, например, пшеница полностью выросла
- Сундук бота: Посылает сигнал в зависимости от состояния сундука (пустой, полный)
Приводы:
- Знаки Bot Box: Может выключать и включать бота
- Блок управления: Может использоваться для смены знака, чтобы управлять ботом.
Датчики должны быть соединены (спарены) с исполнительными механизмами. Для этого используется
"Инструмент подключения датчиков".
[signs_bot_sensor_crop_inv.png|image]
## Инструмент подключения датчиков
Чтобы отправить сигнал от датчика к приводу, датчик должен быть соединен
(сопряжен) с исполнительным механизмом. Чтобы соединить датчик и исполнительный механизм,
необходимо использовать инструмент Sensor Connection Tool. Просто нажмите инструментом на оба блока, и
датчик будет соединен с исполнительным механизмом. Об успешном подключении сигнализирует звук ping/pong.
Прежде чем соединить датчик с приводом, убедитесь, что привод находится в
требуемом состоянии. Например: Если вы хотите запустить бота с помощью датчика, подключите
датчик с блоком бота, когда бот находится в состоянии "включено". В противном случае
сигнал датчика остановит Бота, вместо того чтобы запустить его.
[signs_bot_tool.png|image]
## Инвентарь
Следующее относится ко всем командам, которые помещают предметы/элементы в инвентарь бота, например:
- `take_item <num> <slot>`
- `pickup_items <slot>`
- `trash_sign <slot>`
- `harvest <slot>`
- `dig_front <slot> <lvl>`
Если в команде не был указан слот или слот 0 (случай A), то все 8 слотов инвентаря бота
проверяются один за другим. Если был указан слот (случай B),
проверяется только этот слот.
В обоих случаях действует следующее:
Если слот предварительно сконфигурирован и соответствует предмету, или если слот не сконфигурирован
и пуст, или только частично заполнен типом добавляемого элемента,
то элемент(ы) будет(ут) добавлен(ы).
Если не все предметы могут быть добавлены, то в случае A пробуются оставшиеся слоты.
Все, что не удалось добавить в инвентарь, вернется обратно или будет сброшено.
Сказанное ниже относится ко всем командам, которые используются для взятия предметов из инвентаря бота, например:
- `add_item <num> <slot>`.
Не имеет значения, настроен слот или нет. Бот берет первый стек
который он может найти в своем инвентаре, и пытается его использовать. Если указан слот,
он берет только его, если слот не указан, он проверяет все слоты по очереди
если слот не указан, то проверяет все слоты по очереди, начиная со слота 1, пока не найдет что-нибудь. Если найденное число
меньше запрошенного, он пытается взять остаток из любого другого слота.
[signs_bot:box|image]
## Узлы / Блоки
### Бокс бота
Бокс - это корпус бота. Разместите бокс и запустите бота с помощью кнопки
'On'. Если установлен мод techage, боту требуется электричество.
Бот выходит из коробки с правой стороны. Он не запустится, если эта позиция заблокирована.
Чтобы остановить и удалить бота, нажмите кнопку "Off".
Инвентарь коробки имитирует инвентарь бота.
Вы не сможете получить доступ к инвентарю, если бот запущен.
Бот может носить с собой до 8 стаков и 6 знаков.
[signs_bot:box|image]
### Заслонка бота
Заслонка - это простой блок, используемый в качестве двери для бота. Поместите заслонку в любую стену,
и бот будет автоматически открывать и закрывать заслонку, проходя через нее.
[signs_bot:bot_flap|image]
### Дубликатор знаков
Дубликатор можно использовать для создания копий знаков:
1. Положите один знак 'cmnd', который будет использоваться в качестве шаблона, в инвентарь 'Template'.
2. Добавьте один или несколько 'blank signs' в инвентарь 'In'.
3. Возьмите копии из инвентаря 'Output'.
В качестве шаблона можно также использовать написанные книги [default:book_written].
Уже написанные знаки тоже можно использовать в качестве входных.
[signs_bot:duplicator|image]
### Датчик ботов
Датчик ботов обнаруживает любого бота и посылает сигнал, если бот находится поблизости.
Радиус действия датчика - один узел/метр". Направление датчика не имеет значения.
[signs_bot:bot_sensor|image]
### Датчик узла
Датчик узлов посылает циклические сигналы, когда обнаруживает, что узлы появились
или исчезновения, но должен быть настроен соответствующим образом. Действительными узлами являются все виды
блоки и растения. Радиус действия датчика - 3 узла/метра в одном направлении.
У датчика есть активная сторона (красная), которая должна указывать на наблюдаемую область.
[signs_bot:node_sensor|image]
### Датчик урожая
Датчик сельскохозяйственных культур посылает циклические сигналы, когда, например, пшеница полностью выросла.
Радиус действия датчика составляет один узел/метр. Датчик имеет активную сторону (красную), которая
должна быть направлена на культуру/поле.
[signs_bot:crop_sensor|image]
### Сундук бота
Сундук бота - это специальный сундук с функцией датчика. Он посылает сигнал
в зависимости от состояния сундука. Возможные состояния: 'empty', 'not empty', 'almost full'
Типичный вариант использования - выключить бота, когда сундук почти полон или пуст.
[signs_bot:chest|image]
### Таймер бота
Это особый вид датчиков. Может быть запрограммирован на время в секундах,
например, для циклического запуска бота.
[signs_bot:timer|image]
### Блок управления ботом
Блок управления ботом используется для управления ботом с помощью знаков. Блок может быть
загружено до 4 различных знаков и может быть запрограммировано с помощью датчиков.
Чтобы загрузить блок, поместите знак на красную сторону блока и нажмите на блок.
Знак исчезает / перемещается в инвентарь блока.
Эту операцию можно повторить 3 раза.
Используйте инструмент подключения, чтобы соединить до 4 датчиков с блоком управления ботом.
[signs_bot:changer1|image]
### Расширитель датчиков
С помощью расширителя датчиков сигналы датчиков можно передавать на несколько исполнительных механизмов.
Поместите один или несколько удлинителей рядом с датчиком и соедините каждый удлинитель с одним
одним исполнительным механизмом с помощью инструмента подключения.
[signs_bot:sensor_extender|image]
### Сигнал И
Сигнал посылается, если получены все входные сигналы.
[signs_bot:and1|image]
### Задержка сигнала
Сигналы пересылаются с задержкой. Последующие сигналы ставятся в очередь.
Время задержки может быть настроено.
[signs_bot:delayer|image]
### Знак 'farming'
Используется для сбора урожая и засева поля 3x3. Поместите знак перед полем.
Используемое семя должно находиться в первом слоте инвентаря бота.
Когда бот закончит, он повернется и пойдет обратно.
[signs_bot:farming|image]
### Знак 'pattern'
Используется для создания копии куба 3x3x3. Поместите знак перед деталью
который нужно скопировать. Используйте знак копирования, чтобы сделать копию этой детали на другом
месте. Бот должен сначала добраться до знака детали, а затем до знака копии.
Используется для создания копии куба 3x3x3. Поместите щит перед блоками
которые нужно скопировать. Используйте знак копирования, чтобы сделать копию этих блоков в другом
месте. Сначала бот должен обработать знак "pattern", только после этого он может
направить его к знаку копирования.
[signs_bot:pattern|image]
### Знак 'copy3x3x3'
Используется для создания копии куба 3x3x3. Поместите знак перед тем местом, где вы хотите
чтобы была сделана копия. См. также знак "шаблон".
[signs_bot:copy3x3x3|image]
### Знак 'flowers'
Используется для срезания цветов на поле 3x3. Поместите знак перед полем.
По окончании бот поворачивается.
[signs_bot:flowers|image]
### Знак 'aspen'
Используется для заготовки ствола осины или сосны.
- Поместите знак перед деревом.
- Поставьте сундук справа от знака.
- Положите в сундук стопку грязи (минимум 10 предметов).
- Предварительно настройте слот 1 инвентаря бота на грязь
- Заранее настройте слот 2 инвентаря бота с саженцами
[signs_bot:aspen|image]
### Знак 'command'
Знак 'command' может быть запрограммирован игроком. Поместите знак перед собой
перед собой и используйте меню узла, чтобы запрограммировать последовательность команд бота.
В меню есть поле для редактирования команд и страница помощи со всеми
доступными командами. На странице помощи есть кнопка копирования, чтобы упростить программирование.
[signs_bot:sign_cmnd|image]
### Знак "turn right"
Бот поворачивает направо, когда обнаруживает перед собой этот знак.
[signs_bot:sign_right|image]
### Знак "turn left"
Бот поворачивает налево, когда обнаруживает этот знак перед собой.
[signs_bot:sign_left|image]
### Знак "take item"
Бот берет предметы из сундука перед собой, а затем поворачивается.
Этот знак должен быть помещен на верхнюю часть сундука.
[signs_bot:sign_take|image]
### Знак "add item"
Бот кладет предметы в стоящий перед ним сундук, а затем разворачивается.
Этот знак должен быть размещен поверх сундука.
[signs_bot:sign_add|image]
### Знак "stop"
Бот будет останавливаться перед этим знаком до тех пор, пока знак не будет убран или
пока бот не будет выключен.
[signs_bot:sign_stop|image]
### Знак "add to cart" (minecart)
Бот кладет товары в стоящую перед ним мини-тележку, толкает тележку, а затем разворачивается
разворачивается. Этот знак должен быть размещен на рельсе в конечном положении тележки.
[signs_bot:sign_add_cart|image]
### Знак "взять из тележки" (minecart)
Бот берет предметы из стоящей перед ним мини-тележки, толкает тележку и затем
поворачивается. Этот знак должен быть размещен на рельсе в конечном положении тележки.
[signs_bot:sign_take_cart|image]
### Знак "take water" (xdecor)
Используется для набирания воды в ведро. Поместите знак на берегу, перед бассейном с неподвижной водой.
Предметы в слотах:
1 - пустое ведро
В результате в выбранном слоте инвентаря появится одно ведро с водой. По окончании,
бот поворачивается.
[signs_bot:water|image]
### Знак 'cook soup' (xdecor)
Используется для приготовления овощного супа в котелке. Котелок должен быть пустым и находиться
над легковоспламеняющимися материалами. Поместите знак перед казаном с одним полем
чтобы предотвратить возгорание деревянной вывески.
Предметы в слотах:
1 - ведро с водой"
2 - овощ № 1 (например, помидор)
3 - овощ № 2 (например, морковь)
4 - пустая миска (из модов farming или xdecor).
В результате в выбранном слоте инвентаря окажется одна миска с овощным супом.
Закончив, бот разворачивается.
[signs_bot:soup|image]
## Команды бота
Все команды также описаны в виде помощи в узле "Команда знака".
Все блоки или знаки, которые устанавливаются, берутся из инвентаря бота.
Все удаленные блоки или знаки будут добавлены обратно в инвентарь бота.
'<слот>' - это всегда внутренний стек инвентаря бота (1..8).
move <steps> - перейти на один или несколько шагов вперед
cond_move - перейти к ближайшему препятствию или знаку
turn_left - повернуть налево
turn_right - повернуть направо
turn_around - повернуться
backward - сделать шаг назад
turn_off - выключить робота / вернуться в коробку
pause <sec> - подождать одну или несколько секунд
move_up - двигаться вверх (не более 2 раз)
move_down - двигаться вниз
fall_down - упасть в яму/пропасть (до 10 блоков)
take_item <num> <slot> - взять один или несколько предметов из ящика
add_item <num> <slot> - положить один или несколько предметов в ящик
add_fuel <num> <slot> - положить топливо в печь
place_front <slot> <lvl> - поместить блок перед ботом
place_left <slot> <lvl> - поместить блок слева от бота
place_right <slot> <lvl> - поместить блок справа от бота
place_below <slot> - поднять робота и поместить блок под него
place_above <slot> - установить блок над роботом
dig_front <slot> <lvl> - убрать блок перед роботом
dig_left <slot> <lvl> - удалить блок слева
dig_right <slot> <lvl> - удалить блок справа
dig_below <slot> - удалить блок под роботом
dig_above <slot> - удалить блок над роботом
rotate_item <lvl> <шаги> - повернуть блок перед роботом
set_param2 <lvl> <param2> - установить параметр2 блока перед роботом
place_sign <slot> - установить знак
place_sign_behind <slot> - поставить знак позади робота
dig_sign <slot> - удалить знак
trash_sign <slot> - удалить знак, очистить данные и добавить в инвентарь.
stop - бот остановится, пока не будет убран щит
pickup_items <slot> - забрать предметы (в поле 3x3)
drop_items <num> <slot> - сбросить предметы
harvest - собирать урожай на поле 3x3 (фермерство)
cutting - срезать цветы на поле 3x3
sow_seed <слот> - увидеть/посадить поле 3x3
plant_sapling <слот> - посадить саженец перед роботом
pattern - сохранить свойства блока за знаком (куб 3x3x3) в качестве шаблона
copy <size> - сделать копию сохраненного шаблона размером 3x3x3
punch_cart - сбить тележку с шахтой
add_compost <slot> - положить 2 листа в компостную бочку
take_compost <slot> - взять компостный элемент из бочки
print <text> - Вывести сообщение чата для отладки
take_water <slot> - Взять воду из пустого ведра
fill_cauldron <slot> - Наполнить котел xdecor для супа
take_soup <slot> - Взять кипящий суп в пустую миску из котла
flame_on - Развести огонь
flame_off - Погасить огонь
[signs_bot_bot_inv.png|image]
### Techage специальные команды
ignite - Зажечь угольную зажигалку techage
low_batt <percent> - Выключить бот, если заряд батареи ниже
заданного значения в процентах (1..99)
jump_low_batt <percent> <label> - Переход к <ярлыку>, если заряд батареи ниже
заданного значения в процентах (1..99)
(см. раздел "Команды управления потоком".)
send_cmnd <receiver> <command> - Отправка команды techage на заданный узел.
Получатель адресуется по номеру узла.
Для команд, состоящих из двух или более слов,
используйте символ '*' вместо пробелов, например:
send_cmnd 3465 pull*default:dirt*2
[signs_bot_bot_inv.png|image]
### Команды управления потоком
-- команда перехода, <label> - слово из символов a-z или A-Z
jump <label>
-- метка перехода / начало функции
<label>:
-- возврат из функции
return
-- начало блока цикла, <num> - число 1..999
repeat <num>
-- конец блока цикла
end
-- вызов функции (с возвратом через команду 'return')
call <label>
[signs_bot_bot_inv.png|image]
### Дополнительные команды перехода
-- Проверьте, есть ли в сундуке <num> предметов, как в узле.
-- Если нет, перейдите к <метке>.
-- <slot> - это слот инвентаря бота (1..8)
-- укажите элемент, или 0 для любого элемента.
jump_check_item <num> <slot> <label>
-- См. раздел "Специальные команды Techage".
jump_low_batt <percent> <label>
[signs_bot_bot_inv.png|image]
### Управление потоком Примеры
#### Пример с функцией в начале:
-- перейти к метке 'main'
jump main
-- начальная точка функции с именем 'foo'
foo:
cmnd ...
cmnd ...
-- конец 'foo'. Перейти назад
return
-- основная программа
main:
cmnd ...
-- повторите все команды до 'end' 10 раз
repeat 10
cmnd ...
-- вызвать подфункцию 'foo'
call foo
cmnd ...
-- конец цикла 'repeat'
end
-- конец программы
exit
#### Пример с функцией в конце:
cmnd ...
-- повторите все команды до 'end' 10 раз
repeat 10
cmnd ...
-- вызвать подфункцию 'foo'
call foo
cmnd ...
-- конец цикла 'repeat'
end
-- конец программы
exit
-- начальная точка функции с именем'foo'
foo:
cmnd ...
cmnd ...
-- конец 'foo'. Перейти назад
return

View File

@ -199,7 +199,3 @@ m2l.gen_lua_file("./manual_EN.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_DE.md")
m2l.gen_lua_file("./manual_DE.lua")
m2l = MarkdownToLua()
m2l.parse_md_file("./manual_RU.md")
m2l.gen_lua_file("./manual_RU.lua")

View File

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

View File

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

View File

@ -26,7 +26,6 @@ dofile(MP.."/matrix_screen/main.lua") -- Matrix Screen
dofile(MP.."/manual_DE.lua") -- Techage Manual DE
dofile(MP.."/manual_EN.lua") -- Techage Manual EN
dofile(MP.."/manual_RU.lua") -- Techage Manual RU
techage.add_manual_items({ta4_addons_touchscreen = "ta4_addons_touchscreen_inventory.png"})

View File

@ -1,95 +0,0 @@
techage.add_to_manual('RU', {
"1,Дополнения к TA4",
"2,Сенсорный экран",
"3,Поддерживаемые элементы и их свойства",
"3,Пример",
"2,Матричный экран",
}, {
"В настоящее время доступны следующие расширения для TA4:\n"..
"\n"..
" - Сенсорный экран\n"..
"\n",
"\n"..
"\n"..
"Сенсорный экран может использоваться как обычный дисплей TA4.\n"..
"Кроме того\\, он поддерживает следующие команды\\, которые позволяют создавать форму\\, открываемую щелчком правой кнопкой мыши по сенсорному экрану:\n"..
"\n"..
" - add_content: Пытается добавить элемент в форму сенсорного экрана. Принимает определение элемента в качестве полезной нагрузки. При успешном выполнении возвращает ID только что созданного элемента.\n"..
" - update_content: Пытается изменить уже существующий элемент формы сенсорного экрана. Принимает определение элемента с дополнительным полем id\\, которое можно использовать для выбора элемента\\, который нужно обновить. При успешном выполнении возвращает true.\n"..
" - remove_content: Пытается удалить существующий элемент из формы сенсорного экрана. Принимает хранилище в качестве полезной нагрузки. Единственным полем в этом хранилище должно быть поле id. При успешном выполнении возвращает true.\n"..
" - private: Делает сенсорный экран частным. Форму могут отправлять только игроки с доступом к защите.\n"..
" - public: Делает сенсорный экран общедоступным. Все игроки могут отправлять форму.\n"..
"\n"..
"Определение элемента представляет собой структуру данных хранилища. Вы можете установить тип элемента в поле \"type\" этого хранилища.\n"..
"Вы можете устанавливать свойства элемента в качестве дополнительных полей в этом хранилище.\n"..
"Всегда предоставляются более или менее разумные значения по умолчанию для этих дополнительных свойств\\,\n"..
"но настоятельно рекомендуется всегда предоставлять значения самостоятельно\\, поскольку значения по умолчанию не задокументированы и могут измениться.\n"..
"\n"..
"При отправке формы в контроллер возвращается хранилище в качестве сообщения.\n"..
"Поля\\, доступные в обратных вызовах Minetest on_receive_fields\\, устанавливаются в этом хранилище.\n"..
"Поле \"_sent_by\" содержит имя отправителя.\n"..
"Вы можете получить доступ к этому хранилищу\\, используя функцию $get_msg(true) контроллера Lua.\n"..
"Пожалуйста\\, не забудьте о \"true\" в качестве первого параметра\\; в противном случае вы получите доступ только к строковому представлению сообщения.\n"..
"\n"..
"Форма отображается с использованием формы версии 3 (включены реальные координаты)\\, поэтому используйте последнюю версию клиента Minetest.\n"..
"\n"..
"Когда кто-то открывает сенсорный экран\\, сообщение будет отправлено контроллеру.\n"..
"Это сообщение содержит хранилище\\, в котором поле \"_touchscreen_opened_by\" устанавливается в соответствующее имя игрока.\n"..
"\n",
"\n"..
"\n"..
"Обратите внимание: Этот список может быть изменен.\n"..
"\n"..
"button: x\\, y\\, w\\, h\\, name\\, label\n"..
"label: x\\, y\\, label\n"..
"image: x\\, y\\, w\\, h\\, texture_name\n"..
"animated_image: x\\, y\\, w\\, h\\, name\\, texture_name\\, frame_count\\, frame_duration\\, frame_start\n"..
"item_image: x\\, y\\, w\\, h\\, item_name\n"..
"pwdfield: x\\, y\\, w\\, h\\, name\\, label\n"..
"field: x\\, y\\, w\\, h\\, name\\, label\\, default\n"..
"field_close_on_enter: name\\, close_on_enter\n"..
"textarea: x\\, y\\, w\\, h\\, name\\, label\\, default\n"..
"image_button: x\\, y\\, w\\, h\\, texture_name\\, name\\, label\n"..
"item_image_button: x\\, y\\, w\\, h\\, item_name\\, name\\, label\n"..
"button_exit: x\\, y\\, w\\, h\\, name\\, label\n"..
"image_button_exit: x\\, y\\, w\\, h\\, texture_name\\, name\\, label\n"..
"box: x\\, y\\, w\\, h\\, color\n"..
"checkbox: x\\, y\\, name\\, label\\, selected\n"..
"\n"..
"Для получения дополнительной информации о значении этих элементов рекомендуется обратиться к файлу lua_api.txt в документации Minetest.\n"..
"\n",
"\n"..
"\n"..
"*Init:*\n"..
"\n"..
" $events(true)\n$loopcycle(0)\n\nTOUCHSCREEN_NUM = 338\n\ncounter = 1\n\n$send_cmnd(TOUCHSCREEN_NUM\\, \"remove_content\")\n\nres = $send_cmnd(TOUCHSCREEN_NUM\\, \"add_content\"\\, Store(\"type\"\\, \"button\"\\, \"w\"\\, 5\\, \"label\"\\, counter))\nres2 = $send_cmnd(TOUCHSCREEN_NUM\\, \"add_content\"\\, Store(\"type\"\\, \"button\"\\, \"w\"\\, 5\\, \"y\"\\, 2\\, \"label\"\\, counter))\n\n$print(\"ID: \"..res)\n"..
"\n"..
"*Loop:*\n"..
"\n"..
" local num\\,msg = $get_msg(true)\n\nif num == tostring(TOUCHSCREEN_NUM) and msg.next then\n for k\\,v in msg.next() do\n if k == \"button\" then\n counter = counter + 1\n $print(res)\n $send_cmnd(TOUCHSCREEN_NUM\\, \"update_content\"\\, Store(\"type\"\\, \"button\"\\, \"w\"\\, \"5\"\\, \"label\"\\, counter\\, \"id\"\\, res))\n if counter > 10 then\n $send_cmnd(TOUCHSCREEN_NUM\\, \"remove_content\"\\, Store(\"id\"\\, res2))\n else\n $send_cmnd(TOUCHSCREEN_NUM\\, \"update_content\"\\, Store(\"type\"\\, \"button\"\\, \"w\"\\, \"5\"\\, \"y\"\\, 2\\, \"label\"\\, counter\\, \"id\"\\, res2))\n end\n end\n $print(k..\": \"..v)\n $display(TOUCHSCREEN_NUM\\, 0\\, k)\n $display(TOUCHSCREEN_NUM\\, 0\\, v)\n end\nend\n"..
"\n",
"\n"..
"\n"..
"Экран Matrix имеет разрешение 16x16 пикселей.\n"..
"Доступны различные палитры с 64 цветами каждая.\n"..
"\n"..
"Для программирования экрана вы можете отправить строку\\, закодированную в формате base64\\, в качестве данных для команды \"pixels\".\n"..
"Эта строка должна содержать 256 символов. Каждый символ соответствует одному пикселю\\, построчно от верхнего левого угла до нижнего правого угла.\n"..
"\n"..
"Рекомендуется использовать программу TA4 Matrix Screen Programmer для удобного создания таких строк.\n"..
"\n"..
"Палитру цветов можно изменить с помощью команды \"palette\".\n"..
"\n",
}, {
"",
"ta4_addons_touchscreen",
"ta4_addons_touchscreen",
"ta4_addons_touchscreen",
"ta4_addons_matrix_screen",
}, {
"",
"",
"",
"",
"",
})

View File

@ -1,117 +0,0 @@
# Дополнения к TA4
В настоящее время доступны следующие расширения для TA4:
- Сенсорный экран
## Сенсорный экран
[ta4_addons_touchscreen|image]
Сенсорный экран может использоваться как обычный дисплей TA4.
Кроме того, он поддерживает следующие команды, которые позволяют создавать форму, открываемую щелчком правой кнопкой мыши по сенсорному экрану:
- add_content: Пытается добавить элемент в форму сенсорного экрана. Принимает определение элемента в качестве полезной нагрузки. При успешном выполнении возвращает ID только что созданного элемента.
- update_content: Пытается изменить уже существующий элемент формы сенсорного экрана. Принимает определение элемента с дополнительным полем id, которое можно использовать для выбора элемента, который нужно обновить. При успешном выполнении возвращает true.
- remove_content: Пытается удалить существующий элемент из формы сенсорного экрана. Принимает хранилище в качестве полезной нагрузки. Единственным полем в этом хранилище должно быть поле id. При успешном выполнении возвращает true.
- private: Делает сенсорный экран частным. Форму могут отправлять только игроки с доступом к защите.
- public: Делает сенсорный экран общедоступным. Все игроки могут отправлять форму.
Определение элемента представляет собой структуру данных хранилища. Вы можете установить тип элемента в поле "type" этого хранилища.
Вы можете устанавливать свойства элемента в качестве дополнительных полей в этом хранилище.
Всегда предоставляются более или менее разумные значения по умолчанию для этих дополнительных свойств,
но настоятельно рекомендуется всегда предоставлять значения самостоятельно, поскольку значения по умолчанию не задокументированы и могут измениться.
При отправке формы в контроллер возвращается хранилище в качестве сообщения.
Поля, доступные в обратных вызовах Minetest on_receive_fields, устанавливаются в этом хранилище.
Поле "_sent_by" содержит имя отправителя.
Вы можете получить доступ к этому хранилищу, используя функцию $get_msg(true) контроллера Lua.
Пожалуйста, не забудьте о "true" в качестве первого параметра; в противном случае вы получите доступ только к строковому представлению сообщения.
Форма отображается с использованием формы версии 3 (включены реальные координаты), поэтому используйте последнюю версию клиента Minetest.
Когда кто-то открывает сенсорный экран, сообщение будет отправлено контроллеру.
Это сообщение содержит хранилище, в котором поле "_touchscreen_opened_by" устанавливается в соответствующее имя игрока.
### Поддерживаемые элементы и их свойства
[ta4_addons_touchscreen|image]
Обратите внимание: Этот список может быть изменен.
button: x, y, w, h, name, label
label: x, y, label
image: x, y, w, h, texture_name
animated_image: x, y, w, h, name, texture_name, frame_count, frame_duration, frame_start
item_image: x, y, w, h, item_name
pwdfield: x, y, w, h, name, label
field: x, y, w, h, name, label, default
field_close_on_enter: name, close_on_enter
textarea: x, y, w, h, name, label, default
image_button: x, y, w, h, texture_name, name, label
item_image_button: x, y, w, h, item_name, name, label
button_exit: x, y, w, h, name, label
image_button_exit: x, y, w, h, texture_name, name, label
box: x, y, w, h, color
checkbox: x, y, name, label, selected
Для получения дополнительной информации о значении этих элементов рекомендуется обратиться к файлу lua_api.txt в документации Minetest.
### Пример
[ta4_addons_touchscreen|image]
**Init:**
```lua
$events(true)
$loopcycle(0)
TOUCHSCREEN_NUM = 338
counter = 1
$send_cmnd(TOUCHSCREEN_NUM, "remove_content")
res = $send_cmnd(TOUCHSCREEN_NUM, "add_content", Store("type", "button", "w", 5, "label", counter))
res2 = $send_cmnd(TOUCHSCREEN_NUM, "add_content", Store("type", "button", "w", 5, "y", 2, "label", counter))
$print("ID: "..res)
```
**Loop:**
```lua
local num,msg = $get_msg(true)
if num == tostring(TOUCHSCREEN_NUM) and msg.next then
for k,v in msg.next() do
if k == "button" then
counter = counter + 1
$print(res)
$send_cmnd(TOUCHSCREEN_NUM, "update_content", Store("type", "button", "w", "5", "label", counter, "id", res))
if counter > 10 then
$send_cmnd(TOUCHSCREEN_NUM, "remove_content", Store("id", res2))
else
$send_cmnd(TOUCHSCREEN_NUM, "update_content", Store("type", "button", "w", "5", "y", 2, "label", counter, "id", res2))
end
end
$print(k..": "..v)
$display(TOUCHSCREEN_NUM, 0, k)
$display(TOUCHSCREEN_NUM, 0, v)
end
end
```
## Матричный экран
[ta4_addons_matrix_screen|image]
Экран Matrix имеет разрешение 16x16 пикселей.
Доступны различные палитры с 64 цветами каждая.
Для программирования экрана вы можете отправить строку, закодированную в формате base64, в качестве данных для команды "pixels".
Эта строка должна содержать 256 символов. Каждый символ соответствует одному пикселю, построчно от верхнего левого угла до нижнего правого угла.
Рекомендуется использовать программу TA4 Matrix Screen Programmer для удобного создания таких строк.
Палитру цветов можно изменить с помощью команды "palette".

View File

@ -550,7 +550,6 @@ minetest.register_craft({
dofile(minetest.get_modpath("ta4_jetpack") .. "/manual_DE.lua")
dofile(minetest.get_modpath("ta4_jetpack") .. "/manual_EN.lua")
dofile(minetest.get_modpath("ta4_jetpack") .. "/manual_RU.lua")
techage.add_manual_items({
ta4_jetpack = "ta4_jetpack.png",

View File

@ -1,13 +0,0 @@
# textdomain: ta4_jetpack
You are too heavy: Check your bags!=Вы слишко много весите: Проверьте свои сумки!
You are too heavy: Check your crafting menu!=Вы слишко много весите: Проверьте меню крафта!
You are too heavy: Check your inventory!=Вы слишко много весите: Проверьте инвентарь!
You may not transport @1 with a jetpack!=Нельзя перевозить @1 на джетпаке!
[Jetpack] You don't have your jetpack on your back!=[Jetpack] У вас на спине нет джетпака!
[Jetpack]=[Jetpack]
[Jetpack] Your tank is empty!=[Jetpack] Ваш бак пуст!
Use the controller (left click) to fill the tank with hydrogen=Используйте контроллер (левый клик) чтобы заполнить бак водородом
TA4 Jetpack Controller On=ТА4 контроллер джетпака ВКЛ
TA4 Jetpack Controller Off=ТА4 контроллер джетпака ВЫКЛ
TA4 Jetpack=ТА4 джетпак
Jetpack Training Mat=Тренировочный мат для джетпака

View File

@ -1,35 +0,0 @@
techage.add_to_manual('RU', {
"1,TA4 Реактивный ранец",
"2,Инструкции",
"2,Важно знать",
}, {
"Реактивный ранец вдохновлен реактивным ранцем от spirit689 (https://github.com/spirit689/jetpack)\n"..
"и исторической игрой Lunar Lander.\n"..
"\n"..
"\n"..
"\n",
" - Создайте TA4 Реактивный ранец, Реактивный контроллер и Тренировочный коврик\n"..
" - Используйте слот брони (3d_armor) в меню инвентаря, чтобы пристегнуть Реактивный ранец на спину\n"..
" - Что-бы заправить реактивный ранец, возьмите контроллер и щелкните им, левой кнопкой мыши по цистерне с водородом\n"..
" - Включите контроллер, щелкнув правой кнопкой мыши, и проверьте уровень топлива в баке (маленькая цветная полоска под значком контроллера)\n"..
" - Используйте пробел для активации Реактивного ранца и клавиши WASD для управления направлением\n"..
" - Перед первым полетом рекомендуется провести несколько тренировочных взлетов и посадок на Тренировочном коврике\n(Реактивный ранец немного упрямый, для удержания его в воздухе требуется некоторая практика)\n"..
"\n"..
"\n"..
"\n",
" - 12 единиц водорода достаточно для полета продолжительностью 6 минут\n"..
" - Максимум 99 предметов в вашем инвентаре разрешено, включая контроллер.\nИначе вы будете слишком тяжелыми :-)\n"..
" - Реактивный ранец также изнашивается и может использоваться примерно для 10 полетов\n"..
" - Во время полета всегда держите контроллер в руках, иначе он выключится :)\n"..
"\n"..
"\n"..
"\n",
}, {
"ta4_jetpack",
"ta4_jetpack_controller",
"ta4_jetpack_controller",
}, {
"",
"",
"",
})

View File

@ -1,30 +0,0 @@
# TA4 Jetpack
The Jetpack is inspired by the jetpack from spirit689 (https://github.com/spirit689/jetpack)
and by the historical game Lunar Lander.
[ta4_jetpack|image]
## Instructions
- Craft TA4 Jetpack, Jetpack Controller and Training Mat
- Use the armor extension (3d_armor) of the player menu to strap the Jetpack on your back
- You can refuel the jetpack by left-clicking with the controller on a TA3/TA4 tank previously charged with hydrogen
- Turn the controller on by right-click and check the fuel tank level (the small colored bar below the controller icon)
- Use the space bar to activate the Jetpack and the WASD keys to control the direction
- Before your first flight you should do some training starts and landings on the Training Mat
(The Jetpack is a bit stubborn, it takes some practice to keep the JetPack in the air)
[ta4_jetpack_controller|image]
## Important to know
- 12 units of hydrogen are sufficient for a flight of 6 minutes
- Maximum 99 items in your inventory are allowed including the controller.
Otherwise you would be too heavy :-)
- The Jetpack also wears out and can be used for approximately 10 flights
- Always hold the controller tight during the flight, otherwise it will switch off :)
[ta4_jetpack_controller|image]

View File

@ -1,5 +0,0 @@
# textdomain: ta4_paraglider
Paraglider=Параплан
First jump from a hill and then use the paraglider=Сначала прыгните с холма, а затем воспользуйтесь парапланом.
##### not used anymore #####

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -7,12 +7,12 @@ local M = minetest.get_meta
local MP = minetest.get_modpath("techage")
local settings = {
symbol_item = "techage:construction_board_EN",
symbol_item = "techage:construction_board",
}
doclib.create_manual("techage", "DE", settings)
doclib.create_manual("techage", "EN", settings)
doclib.create_manual("techage", "RU", settings)
doclib.create_manual("techage", "pt-BR", settings)
local content
content = dofile(MP.."/doc/manual_DE.lua")
@ -41,18 +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_RU.lua")
doclib.add_to_manual("techage", "RU", content)
content = dofile(MP.."/doc/manual_ta1_RU.lua")
doclib.add_to_manual("techage", "RU", content)
content = dofile(MP.."/doc/manual_ta2_RU.lua")
doclib.add_to_manual("techage", "RU", content)
content = dofile(MP.."/doc/manual_ta3_RU.lua")
doclib.add_to_manual("techage", "RU", content)
content = dofile(MP.."/doc/manual_ta4_RU.lua")
doclib.add_to_manual("techage", "RU", content)
content = dofile(MP.."/doc/manual_ta5_RU.lua")
doclib.add_to_manual("techage", "RU", 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",
@ -61,8 +61,8 @@ local board_box = {
minetest.register_node("techage:construction_board", {
description = "TA Konstruktionsplan (DE)",
inventory_image = 'techage_constr_plan_inv_de.png',
tiles = {"techage_constr_plan_de.png"},
inventory_image = 'techage_constr_plan_inv.png',
tiles = {"techage_constr_plan.png"},
drawtype = "nodebox",
node_box = board_box,
selection_box = board_box,
@ -107,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,
@ -137,17 +137,17 @@ minetest.register_craft({
},
})
minetest.register_node("techage:construction_board_RU", {
description = "TA Construction Board (RU)",
inventory_image = 'techage_constr_plan_inv_ru.png',
tiles = {"techage_constr_plan_ru.png"},
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", "План строительства ТА (RU)")
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "RU"))
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)
@ -155,7 +155,7 @@ minetest.register_node("techage:construction_board_RU", {
if minetest.is_protected(pos, player_name) then
return
end
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "RU", fields))
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "pt-BR", fields))
end,
paramtype2 = "wallmounted",
@ -168,9 +168,9 @@ minetest.register_node("techage:construction_board_RU", {
})
minetest.register_craft({
output = "techage:construction_board_RU",
output = "techage:construction_board_pt_BR",
recipe = {
{"default:paper", "default:paper", "default:paper"},
{"default:stick", "default:stick", "default:paper"},
{"default:paper", "default:paper", "default:paper"},
{"default:paper", "default:paper", "default:paper"},
},
@ -183,18 +183,17 @@ minetest.register_craft({
})
minetest.register_craft({
type = "shapeless",
output = "techage:construction_board_RU",
recipe = { "techage:construction_board_EN" },
type = "shapeless",
output = "techage:construction_board",
recipe = {"techage:construction_board_pt_BR"},
})
minetest.register_craft({
type = "shapeless",
output = "techage:construction_board",
recipe = {"techage:construction_board_RU"},
output = "techage:construction_board_pt_BR",
recipe = {"techage:construction_board_EN"},
})
--
-- Legacy API functions
--
@ -207,7 +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", "RU", name, image)
doclib.add_manual_image("techage", "pt-BR", name, image)
end
end
@ -215,6 +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", "RU", name, plan)
doclib.add_manual_plan("techage", "pt-BR", name, plan)
end
end

View File

@ -117,6 +117,7 @@ local items = {
ta3_terminal = "techage:terminal2",
ta3_colorlamp = "techage:color_lamp_off",
ta3_doorblock = "techage:doorblock20",
ta3_soundblock = "techage:ta3_soundblock",
ta3_programmer = "techage:programmer",
ta3_doorcontroller = "techage:ta3_doorcontroller",
ta3_drill_pipe_wrench = "techage:ta3_drill_pipe_wrench",
@ -228,5 +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", "RU", name, image)
doclib.add_manual_image("techage", "pt-BR", name, image)
end

View File

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

View File

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

View File

@ -1,144 +0,0 @@
return {
titles = {
"1,Tech Age Mod",
"2,Подсказки",
"2,Изменения по сравнению с версией 1.0",
"3,Советы по переключению",
"2,Руды и минералы",
"3,Меридий",
"3,Усмий",
"3,Баборий",
"3,Нефть",
"3,Боксит",
"3,Базальт",
"2,History",
},
texts = {
"Tech Age - это технологический мод с 5 стадиями развития:\n"..
"\n"..
"TA1: Железный век\n"..
"Используйте инструменты и приспособления\\, такие как угольные горелки\\, угольные горелки\\, гравийные сита\\, молоты и бункеры\\, чтобы добывать и обрабатывать необходимые руды и металлы.\n"..
"\n"..
"TA2: Паровой век\n"..
"Постройте паровой двигатель с ведущими осями и используйте его для работы своих первых машин по переработке руды.\n"..
"\n"..
"TA3: Нефтяной век\n"..
"Найдите и добывайте нефть\\, постройте железные дороги для транспортировки нефти. Электростанция дает необходимое электричество для ваших машин. Электрический свет освещает ваши промышленные предприятия.\n"..
"\n"..
"TA4: Настоящее время\n"..
"Возобновляемые источники энергии\\, такие как ветер\\, солнце и биотопливо\\, помогают вам покинуть нефтяной век. С помощью современных технологий и умных машин вы отправляетесь в будущее.\n"..
"\n"..
"TA5: Будущее\n"..
"Машины\\, преодолевающие пространство и время\\, новые источники энергии и другие достижения определяют вашу жизнь.\n"..
"\n"..
"Примечание: Нажав на знак \"плюс\"\\, вы попадаете в подразделы этого руководства.\n"..
"\n"..
"\n"..
"\n",
"Эта документация доступна как \"в игре\" (план строительства блоков)\\, так и на GitHub в виде MD-файлов.\n"..
"\n"..
" - Ссылка: https://github.com/joe7575/techage/wiki\n"..
"\n"..
"Строительные планы (схемы) для постройки машин и картинки доступны только в игре.\n"..
"\n"..
"В Tech Age вам придется начинать все сначала. Вы можете создавать блоки TA2 только с помощью предметов из TA1\\, для TA3 вам нужны результаты из TA2 и т.д.\n"..
"\n"..
"В TA2 машины работают только с приводными осями.\n"..
"\n"..
"В TA3 машины работают от электричества и имеют коммуникационный интерфейс для дистанционного управления.\n"..
"\n"..
"TA4 добавляет больше источников энергии\\, но также и более сложные логистические задачи (линии электропередач\\, транспортировка изделий).\n"..
"\n",
"С версии 1.0 (07/17/2021) изменилось следующее:\n"..
"\n"..
" - Изменился алгоритм расчета распределения энергии. Это делает системы хранения энергии более важными. Они компенсируют колебания\\, что важно для больших сетей с несколькими генераторами.\n"..
" - По этой причине TA2 обзавелась собственным накопителем энергии.\n"..
" - Аккумуляторные блоки из TA3 также служат в качестве накопителей энергии. Их функциональность была соответствующим образом адаптирована.\n"..
" - Система хранения TA4 была пересмотрена. Теплообменник получил новый номер\\, поскольку его функциональность была перенесена с нижнего на средний блок. Если они управлялись дистанционно\\, номер узла должен быть адаптирован. Генераторы больше не имеют собственного меню\\, а включаются/выключаются только через теплообменник. Теплообменник и генератор теперь должны быть подключены к одной сети!\n"..
" - Несколько электросетей теперь могут быть соединены через трансформаторные блоки TA4.\n"..
" - Также появился блок счетчиков электроэнергии TA4 для подсетей.\n"..
" - Как минимум один блок аккумуляторов или система хранения в каждой сети\n"..
"\n",
"Многие другие блоки получили незначительные изменения. Поэтому возможно\\, что машины или системы не будут запускаться сразу после переключения. В случае неполадок помогут следующие советы:\n"..
"\n"..
" - выключите и снова включите машины\n"..
" - снимите блок силовых кабелей и установите его на место\n"..
" - полностью снимите блок и установите его на место\n"..
"\n",
"Techage добавляет в игру несколько новых предметов:\n"..
"\n"..
" - Меридий - сплав для производства светящихся инструментов в TA1\n"..
" - Усмий - руда\\, которая добывается в TA2 и необходима для TA3\n"..
" - Бабориум - металл\\, необходимый для рецептов в TA3\n"..
" - Нефть - необходима в TA3\n"..
" - Боксит - алюминиевая руда\\, которая необходима в TA4 для производства алюминия\n"..
" - Базальт - возникает при соприкосновении воды и лав\n"..
"\n",
"Меридий - это сплав стали и кристаллов мезекона. Слитки меридиума можно изготовить с помощью угольной горелки из стали и кристаллов мезекона. Меридий светится в темноте. Инструменты из меридиума также светятся и поэтому очень полезны при подземной добыче.\n"..
"\n"..
"\n"..
"\n",
"Усмий встречается только в виде самородков и может быть получен только при промывке гравия с помощью системы промывки гравия TA2/TA3.\n"..
"\n"..
"\n"..
"\n",
"Барборий можно получить только при подземной добыче. Это вещество можно найти только на глубине от -250 до -340 метров.\n"..
"\n"..
"Бабориум можно переплавить только в промышленной печи TA3.\n"..
"\n"..
"\n"..
"\n",
"Нефть можно найти только с помощью Исследователя и добыть с помощью соответствующих машин TA3. См. TA3.\n"..
"\n"..
"\n"..
"\n",
"Боксит можно добыть только в подземной шахте. Боксит можно найти только в камне на высоте от -50 до -500 метров.\n"..
"Он необходим для производства алюминия\\, который в основном используется в TA4.\n"..
"\n"..
"\n"..
"\n",
"Базальт образуется только при соединении лавы и воды.\n"..
"Лучше всего создать систему\\, в которой лава и вода будут течь вместе.\n"..
"Базальт образуется там\\, где встречаются обе жидкости.\n"..
"Вы можете создать автоматический генератор базальта с помощью Sign Bot.\n"..
"\n"..
"\n"..
"\n",
" - 28.09.2019: Solar system added\n"..
" - 05.10.2019: Data on the solar system and description of the inverter and the power terminal changed\n"..
" - 18.11.2019: Chapter for ores\\, reactor\\, aluminum\\, silo\\, bauxite\\, furnace heating\\, gravel washing system added\n"..
" - 22.02.2020: corrections and chapters on the update\n"..
" - 29.02.2020: ICTA controller added and further corrections\n"..
" - 14.03.2020 Lua controller added and further corrections\n"..
" - 22.03.2020 More TA4 blocks added\n"..
"\n",
},
images = {
"techage_ta4",
"",
"",
"",
"",
"meridium",
"usmium",
"baborium",
"oil",
"bauxite",
"basalt",
"",
},
plans = {
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
}

View File

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

View File

@ -1,170 +0,0 @@
return {
titles = {
"1,TA1: Эпоха железа",
"2,Углевыжигательная куча (древесноугольная печь)",
"2,Плавильная печь",
"2,Водяная мельница",
"3,TA1 мельница",
"3,TA1 шлюзовой затвор",
"3,TA1 шлюзовой рычаг",
"3,TA1 яблоневая доска",
"3,TA1 яблоневая мельничная доска",
"2,Руды и инструменты",
"3,Молот",
"3,Гравийное сито",
"3,Хоппер",
"3,Просеивание гравия и хоппер",
"3,Меридий",
},
texts = {
"TA1 - про добычу необходимейших руд и изготовление древесного угля простейшими инструментами и оборудованием\\, чтобы ТА2 машины можно было построить и запустить.\n"..
"\n"..
"Конечно\\, для Эпохи железа потребуется также железо и не только сталь\\, как в ванильной \"Minetest Game\". В результате\\, некоторые рецепты были изменены, и теперь сперва нужно произвести железо, а сталь - позже.\n"..
"\n"..
"Долговечность инструментов зависит от эпохи и поэтому не соответствует оригинальной игре Майнтест.\n"..
"Долговечность / прочность топора\\, например:\n"..
"\n"..
" - Бронза: 20\n"..
" - Сталь: 30\n"..
"\n"..
"\n"..
"\n",
"Для изготовления древесного угля потребуется Углевыжигательная Куча. Древесный уголь используется в плавильной печи\\, но также\\, например\\, в TA2 для парового двигателя.\n"..
"\n"..
"Для жжения угля понадобится:\n"..
"\n"..
" - блок-поджигатель ('techage:lighter')\n"..
" - 26 деревянный блоков досок, составленных в кучу. Тип дерева не важен.\n"..
" - Земля для покрытия кучи дерева.\n"..
" - Огниво (техническое наименование: 'fire:flint_and_steel') чтобы зажечь блок-поджигатель\n"..
"\n"..
"Инструкция по строительству (см. также чертёж):\n"..
"\n"..
" - Соорудите площадку из земли 5х5\n"..
" - Поставьте 7 досок вокруг поджигателя но оставьте отверстие для доступа к поджигателю\n"..
" - Постройте ещё 2 слоя досок вверх\\, формируя деревянный куб 3х3х3\n"..
" - Покройте всё слоем земли, формируя земляной куб 5х5х5\\, но оставьте отверстие для доступа к поджигателю\n"..
" - Воспламените поджигатель и немедленно закройте отверстие блоком досок и блоком земли.\n"..
" - Если всё сделано верно\\, углесжигательная куча начнёт пускать дым вверх через несколько секунд\n"..
" - Вскрывайте кучу только тогда, когда дым исчезнет! (примерно 20 минут)\n"..
"\n"..
"Теперь можно забрать 9 блоков древесного угля и заполнить Кучу снова.\n"..
"\n"..
"\n"..
"\n",
"Плавильная печь понадобится\\, например\\, чтобы выплавлять железо и другие руды в плавильном тигеле. Для разных рецептов требуется разная температура. Чем выше плавильная башня\\, тем горячее пламя. Высота 11 блоков приемлема для всех рецептов\\, однако и потребляет больше всего древесного угля.\n"..
"\n"..
"Инструкция по строительству (см. также чертёж):\n"..
"\n"..
" - Соорудите каменную башню (булыжник) с основанием 3х3 высотой 7-11 блоков.\n"..
" - Оставьте отверстие внизу с одной стороны.\n"..
" - Поместите поджигатель в отверстие.\n"..
" - Заполните башню древесным углем до краёв, сбрасывая древесный уголь сверху в шахту.\n"..
" - Воспламените поджигатель через отверстие.\n"..
" - Установите плавильный тигель наверху башни\n(на один блок выше пламени)\n"..
" - Чтобы временно прервать горение\\, закройте отверстие блоком земли\\, например.\n"..
"\n"..
"У плавильного тигеля есть своё меню рецептов и инвентарь, куда помещать руды.\n"..
"\n"..
"\n"..
"\n",
"Мельница используется для перемалывания пшеницы и других зёрен в муку, затем муку испекают в печи для получения хлеба.\n"..
"Мельница крутится силой воды. Для этого\\, к мельнице нужно подвести водный поток каналом.\n"..
"Поток воды и мельничное колесо можно контролировать шлюзом. Шлюз состоит из шлюзового замка и шлюзового рычага.\n"..
"\n"..
"Картинка справа (кликните на \"Plan\") иллюстрирует устройство мельницы. \n"..
"\n"..
"\n"..
"\n",
"Мельница используется для перемалывания пшеницы и других зёрен в муку, затем муку испекают в печи для получения хлеба. Мельница должна быть соединена с мельничным колесом посредством ТА1 оси. Мощности мельничного колеса хватает только для одной мельницы.\n"..
"\n"..
"Автоматизировать мельницу можно Железнодорожным хоппером\\, так что мука\\, например\\, будет перевозиться от мельницы до печи для дальнейшей выпечки.\n"..
"\n"..
"\n"..
"\n",
"Шлюзовой затвор нужно размещать непосредственно рядом с водоёмом или в потоке, на том же уровне что и поверхность воды.\n"..
"Когда шлюзовой затвор открыт\\, вода стекает вниз. Эта вода напирает на мельничное колесо.\\, и крутит мельницу.\n"..
"\n"..
"\n"..
"\n",
"TA1 шлюзовой рычаг размещается на шлюзовом затворе. Затвор можно открывать рычагом (правый клик).\n"..
"\n"..
"\n"..
"\n",
"Блок любого типа дерева для строительства мельничного водоканала. Впрочем\\, можно использовать любой другой материал.\n"..
"\n"..
"\n"..
"\n",
"Блок любого типа дерева для строительства мельничного водоканала. Этот блок оптимально подходит для соединения.\n"..
"со столбами деревянного забора, для строительства опор канала.\n"..
"\n"..
"\n"..
"\n",
"TA1 содержит собственные инструменты, такие как молот и гравийное сито\\, но также можно использовать Железнодорожный хоппер.\n"..
"\n"..
"\n"..
"\n",
"TA1 молот используется для разбивания/выкапывания камня\\, а также для раздробления булыжника в гравий. Молот доступен в разных исполнениях с разными свойствами: бронза\\, сталь\\, латунь и алмаз.\n"..
"\n"..
"\n"..
"\n",
"Руды можно высеивать из гравия через гравийное сито. Для этого\\, кликайте гравием на сито. Просеянный гравий и руды выпадут снизу.\n"..
"\n"..
"Чтобы не стоять возле сита часами\\, процесс можно автоматизировать хоппером.\n"..
"\n"..
"\n"..
"\n",
"Хоппер из мода \"Minecart\" (Вагонетка) задуман для погрузки-разгрузки вагонеток. Хоппер втягивает предметы сверху от себя и выгружает направо от себя. Так\\, располагая хоппер\\, обращайте внимание на направление выгрузки.\n"..
"\n"..
"Хоппер также может вытягивать предметы из коробок (сундуков)\\, при условии что коробка расположена рядом или над хоппером.\n"..
"\n"..
"Хоппер также может помещать предметы в коробки, при условии что коробка расположена рядом с хоппером.\n"..
"\n"..
"\n"..
"\n",
"С помощью двух коробок\\, двух хопперов и гравийного сита\\, процесс просеивания может быть автоматизирован. Чертёж справа иллюстрирует механизм.\n"..
"\n"..
"Убедитесь, что коробки \"chest_locked\"\\ (защищённые), иначе кто-нибудь похитит ценные руды из верхней коробки.\n"..
"\n"..
"\n"..
"\n",
"TA1 отркрывает собственный сплав - меридий. Меридиевые слитки изготавливаются в плавильном тигеле из стали и месекон кристаллов. Меридий светится в темноте. Меридиевые инструменты тоже светятся, становясь хорошей поддержкой в подземных раскопках.\n"..
"\n"..
"\n"..
"\n",
},
images = {
"techage_ta1",
"",
"",
"",
"",
"ta1_sluice",
"ta1_sluice_handle",
"ta1_board1",
"ta1_board2",
"ta1_gravelsieve",
"hammer",
"ta1_gravelsieve",
"ta1_hopper",
"",
"meridium",
},
plans = {
"",
"coalpile",
"coalburner",
"watermill1",
"watermill2",
"",
"",
"",
"",
"",
"",
"",
"",
"hoppersieve",
"",
}
}

View File

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

View File

@ -1,308 +0,0 @@
return {
titles = {
"1,TA2: Эпоха пара",
"2,Паровой двигатель",
"3,TA2 Топка",
"3,TA2 Котел",
"3,TA2 Поршень",
"3,TA2 Маховик",
"3,TA2 Паровые трубы",
"3,TA2 Приводная ось / TA2 редуктор",
"3,TA2 Энергогенератор",
"2,TA2 Энергохранилище",
"3,TA2 Лебедка",
"3,TA2 Ящик-груз",
"3,TA2 Муфта",
"2,Двигаем и сортируем предметы",
"3,ТА труба",
"3,Трубосборник",
"3,TA2 Толкатель",
"3,TA2 Распределитель",
"2,Промывание гравия",
"3,TA2 Гравийная мойка",
"2,Копаем камень\\, дробим и просеиваем",
"3,TA2 Карьер",
"3,TA2 Дробилка",
"3,TA2 Гравийное сито",
"2,Производим предметы",
"3,TA2 Автокрафтер",
"3,TA2 Электронная фабрика",
"2,Другие блоки",
"3,TA2 Заборник жидкостей",
"3,TA2 Защищенный сундук",
"3,ТА Загрузочный блок",
},
texts = {
"TA2 - про сооружение и запуск первых рудоперерабатывающих машин. Некоторые машины приводятся в движение приводными осями. Для этого\\, нужно построить паровой двигатель и разогреть его углем или древесным углем.\n"..
"\n"..
"В TA2 ещё есть гравийная мойка, которая применяется для намывания редких руд, в частности усмиевых самородков. Эти самородки понадобятся в будущих рецептах.\n"..
"\n"..
"\n"..
"\n",
"Паровой двигатель состоит из нескольких блоков и должен быть собран так, как показано на чертеже справа. Понадобятся блоки ТА2 Топка\\, TA2 котёл навершие\\, TA2 котёл основание\\, TA2 поршень\\, TA2 маховик и паровые трубы.\n"..
"\n"..
"Кроме того\\, приводные оси и редуктор(ы) необходимы для изменения направления. Маховик должен быть соединен со всеми машинами, которые требуют привода от осей.\n"..
"\n"..
"Всегда обращайте внимание на направление ориентации блока, который размещаете:\n"..
"\n"..
" - Поршень слева\\, маховик справа\n"..
" - Подключайте паровые трубы в местах, где есть соответствующее отверстие\n"..
" - Приводная ось к маховику только справа\n"..
" - Для всех машин\\, приводная ось может быть присоединена к любой стороне\\, не занятой другой функцией\\, такой как отверстия ВХОД (IN) и ВЫХОД (OUT) у дробилки и сита.\n"..
"\n"..
"Котёл должен быть заполнен водой. Наливайте до 10 вёдер.\n"..
"Топка должна быть заполнена углём или древесным углём.\n"..
"Когда вода достаточно нагрелась (градусник наверху)\\, паровой двигатель начнет вращать маховик.\n"..
"\n"..
"Мощность парового двигателя 25 кю (ku, kilo unit, условных килоединиц)\\, он может питать несколько машин одновременно.\n"..
"\n"..
"\n"..
"\n",
"Часть парового двигателя.\n"..
"\n"..
"Топка должна быть заполнена углём или древесным углём. Время горения зависит от мощности, вырабатываемой паровым двигателем. Уголь горит 32 с, древесный уголь 86 с при полной нагрузке.\n"..
"\n"..
"\n"..
"\n",
"Часть парового двигателя. Должен быть заполнен водой. Кликать на котёл ведром с водой. Если вода закончится или температура упадёт слишком низко\\, паровой двигатель отключится.\n"..
"\n"..
"\n"..
"\n",
"Часть парового двигателя.\n"..
"\n"..
"\n"..
"\n",
"Приводная часть парового двигателя. Маховик должен быть соединен с машинами через приводные оси.\n"..
"\n"..
"\n"..
"\n",
"Часть парового двигателя. Котел должен быть соединен с поршнем посредством паровых труб. Паровая труба не может иметь ответвлений\\, максимальная длина 12 м (блоков).\n"..
"\n"..
"\n"..
"\n",
"Приводные оси нужны для передачи мощности от парового двигателя к остальным машинам. Максимальная длина приводной оси 10 блоков. С помощью ТА2 редукторов\\, можно увеличивать расстояния\\, а также организовать ветвления и повороты.\n"..
"\n"..
"\n"..
"\n",
"TA2 Электрогенератор требуется для активации ламп или других потребителей на паровом двигателе. ТА2 Электрогенератор должен быть присоединен к приводной оси с одной стороны, тогда он выдаёт электричество с другой стороны.\n"..
"\n"..
"Если Электрогенератор не получает достаточно мощности\\, он переходит в состояние ошибки и должен быть повторно активирован правым кликом.\n"..
"\n"..
"Электрогенератор потребляет максимум 25 кю с приводной оси и выдаёт на другой стороне максимум 24 кю в виде электричества. Одна кю потребляется на преобразование.\n"..
"\n"..
"\n"..
"\n",
"Для более крупных систем с несколькими паровыми двигателями или множеством машин\\, рекомендуется энергохранилище. Энергохранилище в ТА2 работает от позиционной энергии. Для этого\\, балласт (камни\\, гравий\\, песок) подтягивается вверх в сундуке кабельной лебёдкой. Если в осевой сети избыток энергии\\, сундук тянется вверх. Если потребление энергии превышает возможости парового двигателя\\, хранилище выпускает энергию, и грузовой сундук движется вниз. \n"..
"Энергохранилище состоит из нескольких блоков и собирается как показано на чертеже справа. \n"..
"Чтобы получить максимальную ёмкость хранения\\, сундук должен быть польностью заполнен грузом, а мачта вместе с двумя редукторами должна быть 12 блоков в высоту. Меньшие конструкции допускаются.\n"..
"\n"..
"\n"..
"\n",
"Лебедка должна быть подключена к редуктору и может поглощать избыточную энергию и, таким образом, подтягивать ящик-груз вверх. \n"..
"При сборке лебедки\\ убедитесь, что стрелка в верхней части блока указывает на редуктор.\n"..
"Максимальная длина веревки составляет 10 блоков. \n"..
"\n"..
"\n"..
"\n",
"Этот сундук должен быть размещён под лебедкой на расстоянии до 10 блоков и заполнен булыжником,\\, гравием или песком. Если минимальный вес стака (99+ штук) достигнут и имеется избыточная энергия\\, коробка автоматически присоединится к лебедке тросом и будет утянута вверх. \n"..
"\n"..
"\n"..
"\n",
"С помощью муфты\\ можно отделить оси и машины от накопителя энергии. Это означает, что оси после сцепления останавливаются, а системы машин могут быть восстановлены. При сборке сцепления\\ убедитесь, что стрелка на верхней части блока направлена на накопитель энергии.\n"..
"\n"..
"\n"..
"\n",
"Для транспортировки предметов от одного пункта переработки к другому\\, использудтся толкатели и трубы. См. план.\n"..
"\n"..
"\n"..
"\n",
"Две машины можно соединить толкателем и трубой. У труб нет ответвлений. Максимальная длина 200 м (блоков).\n"..
"\n"..
"Альтернативно\\, трубы можно размещать с применением клавиши Shift. Это позволитs\\, например\\, уложить трубы параллельно без их случайного соединения.\n"..
"\n"..
"Пропускная способность трубы неограниченна, ограничение имеет только толкатель.\n"..
"\n"..
"\n"..
"\n",
"Несколько труб можно собрать в одну посредством концентратора. Стрелкой обозначено направление, в котором будут передаваться предметы.\n"..
"\n"..
"\n"..
"\n",
"Толкатель способен вынимать предметы из сундуков или из машине и толкать их в другие сундуки или машины. Иными словами\\, между двумя блоками с инвентарем должен один и только один толкатель. Несколько толкателей в ряд поставить нельзя.\n"..
"В обратном направлении\\, однако\\, толькатель проницаем для предметов\\, так что сундук может заполняться через трубу и в то же время обучен (чё?).\n"..
"\n"..
"Толкатель переходит в режим \"standby\" ожидания, если нет предметов для толкания. Если выход заблокирован или инвентарь получателя переполнен\\, толкатель переходит в состояние \"blocked\" заблокирован. Толкатель автоматически выходит из обоих состояний через несколько секунд после изменения обстановки.\n"..
"\n"..
"Перерабатывающая мощность ТА2 толкателя составляет 2 предмета каждые 2 с.\n"..
"\n"..
"\n"..
"\n",
"Распределитель может передавать предметы из своего инвентаря, сортируя их по направлениям, до 4 направлений. Для этого\\, распределитель нужно соответственно сконфигурировать.\n"..
"\n"..
"У распределителя в меню 4 фильтра разных цветов.\\, соответствующих 4 выходам. Если выход будет использоваться\\, соответствующий фильтр нужно активировать галочкой \"on\". Все предметы, на которые этот фильтр настроен, двинутся через начначенный выход. Если фильтр активирован без назначенных предметов\\, мы говорим о несконфигурированном \"unconfigured\"\\, открытом выходе.\n"..
"\n"..
"*Внимание: Распределитель является толкателем на своих выходных сторонах. Поэтому\\, никогда не вытягивайте предметы из распределителя толкателем!*\n"..
"\n"..
"Для несконфигурированного выхода есть два режима работы:\n"..
"\n"..
"1) Выпускать все предметы, которые не могут выйти через другие стороны\\, даже если они заблокированы.\n"..
"\n"..
"2) Выпускать только те предметы, которые не были сконфигурированы для какого-либо из остальных фильтров.\n"..
"\n"..
"В первом случае\\, все предметы всегда пересылаются и распределитель не наполняется. Во втором случае\\, предметы удерживаются и распределитель может переполниться и заблокироваться.\n"..
"\n"..
"Операционный режим устанавливается галочкой в \"blocking mode\".\n"..
"\n"..
"Производительность ТА2 распределителя составляет 4 штуки каждые 2 секунды\\, он пытается распределить 4 штуки в открытые выходы.\n"..
"\n"..
"Если один предмет сконфигурирован несколько раз в один фильтр\\, то соответственно увеличится долгосрочный темп распределения.\n"..
"\n"..
"Обратите вннимание: распределение это вероятностный процесс. Это значит, что темп распределения соблюдается не в точности\\, но сохраняется при длительной работе.\n"..
"\n"..
"Максимальный размер стека в фильтре - 12\\; в сумме\\, можно сконфигурировать не более 36 позиций.\n"..
"\n"..
"\n"..
"\n",
"Гравийная мойка это достаточно сложная машина предназначенная для вымывания усмиевых самородоков из просеянного гравия. ТА2 мойка с осевым приводом\\, хопром\\, сундуком и текущей водой требуются для запуска.\n"..
"\n"..
"Структура слева направо (также см. план):\n"..
"\n"..
" - Блок земли\\, сверху него источник воды\\, с трех сторон окружен блоками, например стекла\n"..
" - следом гравийная мойка\\, по желанию с трубными соединениями для поступления и удаления гравия\n"..
" - затем хопер с сундуком\n"..
"\n"..
"Вся конструкция окружена блоками стекла\\, так что вода течет над мойкой и хопром и вымытые самородки собираются в хопер.\n"..
"\n"..
"\n"..
"\n",
"Гравийнай мойка вымывает усмий и медь из гравия который был ранее просеян\\, предполагая что это обеспечивается водными потоком.\n"..
"\n"..
"Правильную работоспособность мойки можно проверить палками, помещенными в инвентарь мойки. Они должны поочередно вымываться и собираться в хопер.\n"..
"\n"..
"Производительность гравийной мойки 1 гравий каждые 2 секунды. Потребление энергии 2 ku.\n"..
"\n"..
"\n"..
"\n",
"Дробление\\, перемалывание и просеивание булыжника применяется для извлечения руд. Просеянный гравий также может быть использован в других процессах. Карьер\\, дробилка и сито требуют привода и поэтому ставятся поблизости от парового двигателя.\n"..
"\n"..
"\n"..
"\n",
"Карьер используют для извлечения камней и иных материалов из-под земли. Карьер копает шахту размером 5х5 блоков. Глубину можно настраивать.\n"..
"Производительность карьера 1 блок каждые 4 секунды. Потребляет 10 ku энергии. Максимальная глубина 20 метров. Для больших глубин переходите к ТА3 / ТА4.\n"..
"\n"..
"\n"..
"\n",
"Дробилка может дробить различные породы\\, а также дерево и некторые другие предметы.\n"..
"Производительность 1 штука каждые 4 секунды. Потребление 4 ku.\n"..
"\n"..
"\n"..
"\n",
"Гравийное сито может просеивать гравий для извлечения руд. На выходе также образуется просеянный гравий \"sieved gravel\"\\, который можно просеивать повторно.\n"..
"Производительность гравийного сита 1 штука каждые 4 секунды. Потребление 3 ku.\n"..
"\n"..
"\n"..
"\n",
"ТА2 машины могут не только извлекать руды\\, но также и производить объекты.\n"..
"\n",
"Автокрафтер используется для автоматического производства изделий. Все что игрок может создать на решетке крафта \"Crafting Grid\" может быть выполнено автокрафтером. Для этого\\, рецепт нужно ввести в меню автокрафтера и вложить нужные ингредиенты.\n"..
"\n"..
"Ингредиенты и произведенные изделия можно транспортировать внутрь и наружу автокрафтера через трубы и толкатели.\n"..
"\n"..
"Производительность автокрафтера 1 предмет каждые 4 секунды. Потребление 4 ku.\n"..
"\n"..
"\n"..
"\n",
"Электронная фабрика это отдельная машина которая используется только для производства радиоламп. Радиолампы требуются для ТА3 машин и блоков.\n"..
"\n"..
"Производительность электронной фабрики 1 радиолампа каждые 6 секунд. Потребление 8 ku.\n"..
"\n"..
"\n"..
"\n",
"",
"Некоторые рецепты требуют воды. Такие рецепты также могут быть обработаны автокрафтером\\, вода должна поступать в ведрах. Для этого нужен водозаборник. В него нужно поместить пустые ведра, а его - в воду.\n"..
"\n"..
"Производительность водозаборника 1 ведро каждые 8 секунд. Потребление 3 ku.\n"..
"\n"..
"\n"..
"\n",
"Защищенный сундук могут использовать только игроки с правами строительства на этой территории\\, т.е. с правами привата. Неважно, кто поставил сундук.\n"..
"\n"..
"\n"..
"\n",
"Майнтест делит карту на блоки - так называемые чанки. Это кубы с гранью 16 блоков. Такой чанк всегда загружается сервером целиком\\, но загружаются только блоки вокруг игрока, примерно 2-3 чанка во всех направлениях. В направлении взгляда игрока\\, загружается больше чанков. Только эта часть мира активна и только в ней растения растут и машины работают.\n"..
"\n"..
"Блоком принудительной загрузки (БПЗ) вы можете заставить чанк, в котором размещен такой блок, оставаться активным все время пока вы находитесь на сервере. Если все ваши фермы и фабрики покрыты БлокамиПЗ\\, всё работает непрерывно.\n"..
"\n"..
"Блоки карты - чанки предопределены в своих координатах\\, например (0\\,0\\,0) до (15\\,15\\,15)\\, или (16\\,16\\,16) до (31\\,31\\,31).\n"..
"БлокПЗ можно ставить в любом месте чанка\\, тогда как положение чанка всегда неизменно.\n"..
"\n"..
"\n"..
"\n",
},
images = {
"techage_ta2",
"",
"ta2_firebox",
"ta2_boiler",
"ta2_cylinder",
"ta2_flywheel",
"ta2_steampipe",
"ta2_driveaxle",
"ta2_generator",
"",
"ta2_winch",
"ta2_weight_chest",
"techage:ta2_clutch_off",
"",
"tube",
"concentrator",
"ta2_pusher",
"ta2_distributor",
"",
"ta2_rinser",
"ta2_grinder",
"ta2_quarry",
"ta2_grinder",
"ta2_gravelsieve",
"",
"ta2_autocrafter",
"ta2_electronicfab",
"",
"ta2_liquidsampler",
"ta2_chest",
"ta2_forceload",
},
plans = {
"",
"steamengine",
"",
"",
"",
"",
"",
"",
"",
"ta2_storage",
"",
"",
"",
"itemtransport",
"",
"",
"",
"",
"gravelrinser",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
}

View File

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

View File

@ -1,931 +0,0 @@
return {
titles = {
"1,TA3: Эпоха нефти",
"2,Угольная электростанция / Нефтяная электростанция",
"3,TA3 топка электростанции",
"3,TA3 нефтяная топка электростанции",
"3,TA3 котел основание / навершие",
"3,TA3 турбина",
"3,TA3 генератор",
"3,TA3 охладитель",
"2,Электрический ток",
"3,Значимость хранилищ энергии",
"3,TA Электрический кабель",
"3,TA Электрическая распред.коробка",
"3,TA Электролиния",
"3,TA Электростолб",
"3,TA Электростолб навершие",
"3,TA Электростолб навершие 2",
"3,TA Электрический переключатель",
"3,TA Электрический переключатель малый",
"3,TA Электрощиток",
"3,TA3 Малый электрогенератор",
"3,TA3 Батарейный пакет",
"3,TA3 Электотерминал",
"3,TA3 Электромотор",
"2,TA3 Промышленная печь",
"3,TA3 Нефтяная печная топка",
"3,TA3 Печь навершие",
"3,TA3 Нагнетатель",
"2,Жидкости",
"3,TA3 Цистерна",
"3,TA3 Насос",
"3,TA Жидкостный нагнетатель",
"3,TA4 Труба",
"3,TA3 Трубно-стеновой проходной блок",
"3,TA Клапана",
"2,Нефтедобыча",
"3,TA3 Нефтеразведчик",
"3,TA3 Нефтяная буровая вышка",
"3,TA3 Скважинный насос",
"3,TA3 Буровая труба",
"3,Нефтяная цистерна",
"2,Транспортировка нефти",
"3,Транспортировка нефти железнодорожными цистернами",
"3,Транспортировка нефти бочками на вагонетках",
"3,Железнодорожная цистерна",
"3,Вагонетки-сундуки",
"2,Нефтепереработка",
"3,Ректификационная колонна",
"4,Ребойлер",
"2,Логика / Блоки-переключатели",
"3,TA3 Кнопка / Переключатель",
"3,TA3 Command Converter",
"3,TA3 Flip-Flop",
"3,TA3 Логический блок",
"3,TA3 Повторитель",
"3,TA3 Секвенсер",
"3,TA3 Таймер",
"3,TA3 Терминал",
"3,ТА цветная лампа",
"3,Блоки дверей/ворот",
"3,TA3 контроллер дверей",
"3,TA3 контроллер дверей II",
"3,TA3 Звуковой блок",
"3,TA3 Преобразователь месекон",
"2,Датчики",
"3,TA3 Датчик",
"3,TA3 Определитель вагонетки",
"3,TA3 Определитель блока",
"3,TA3 Определитель игрока",
"3,TA3 Определитель света",
"2,TA3 Машины",
"3,TA3 Толкатель",
"3,TA3 Распределитель",
"3,TA3 Автокрафтер",
"3,TA3 Электронная фабрика",
"3,TA3 Карьер",
"3,TA3 Гравийное сито",
"3,TA3 Гравийная мойка",
"3,TA3 Дробилка",
"3,TA3 Внедритель",
"2,Инструменты",
"3,ТА инфо-инструмент",
"3,ТА программатор",
"3,ТА шпатель / Шпатель",
"3,TA3 буротрубный ключ",
"3,ТА отвертка",
"3,TechAge Монтажный инструмент",
},
texts = {
"В ТА3 происходит замещение паровых машин более мощными машинами с электроприводом.\n"..
"\n"..
"Для этого\\, нужно построить угольную электростанции и генераторы. Постепенно вы обнаружите, что потребности в электроэнергии могут быть покрыты только электростанциями на нефтепродуктах. Отправляемся на поиски нефти. Буровые вышки и нефтяные насосы выдадут нефть. Железные дороги будут использованы для доставки нефти на электростанции.\n"..
"\n"..
"Индустриальная эпоха в разгаре.\n"..
"\n"..
"\n"..
"\n",
"Угольная электростанция состоит из нескольких блоков и собирается как показано на чертеже справа. Требуемые блоки: ТА3 топка электростанции\\, TA3 навершие котла\\, TA3 основа котла\\, TA3 турбина\\, TA3 генератор и TA3 теплообменник.\n"..
"\n"..
"Котел нужно заполнить водой в количестве до 10 ведер. Клик левой кнопкой мыши ведром на котел.\n"..
"Топку нужно заполнить углем или ТА древесным углем. Прим. переводчика: Древесный уголь из других модов не подходит!\n"..
"Как только вода вскипит\\, генератор можно запускать.\n"..
"\n"..
"Альтернативная топка\\, которой заменить угольную - нефтяная.\n"..
"Нефть можно подавать в топку с помощью насоса и нефтяной трубы.\n"..
"\n"..
"Электростанция выдает мощность до 80 ku.\n"..
"\n"..
"\n"..
"\n",
"Часть электростанции.\n"..
"Топку нужно заполнить углем или ТА древесным углем. Длительность горения зависит от мощности потребителей электростанции. Уголь сгорает 20 секунд, древесный уголь 60 секунд под полной нагрузкой. Под частичной загрузкой пропорционально дольше (50% нагрузка = вдвое дольше).\n"..
"\n"..
"\n"..
"\n",
"Часть электростанции.\n"..
"\n"..
"Нефтяная топка может быть наполнена сырой нефтью\\, печным топливом\\, нафтой или бензином. Длительность горения зависит от мощности потребителей электростанции. Под полной нагрузкой\\, сырая нефть сгорает 15 секунд\\, печное топливо 20 секунд\\, нафта 22 секунды и бензин 25 секунд\n"..
"\n"..
"Под частичной загрузкой пропорционально дольше (50% нагрузка = вдвое дольше).\n"..
"\n"..
"Нефтяная топка вмещает только 50 единиц топлива. Поэтому рекомендуется дополнительный топливный бак и насос.\n"..
"\n"..
"\n"..
"\n",
"Часть электростанции. Нужно заполнять водой. Если воды больше нет или температура снизилась\\, электростанция отключится.\n"..
"\n"..
"Расход воды в котле TA3 намного меньше, чем в паровом двигателе, благодаря замкнутому паровому контуру.\n"..
"В паровом двигателе\\, часть воды теряется в виде пара при каждом ходе поршня.\n"..
"\n"..
"\n"..
"\n",
"Турбина - часть электростанции. Должна быть размещена рядом с генератором и соединена с котлом и теплообменником паровыми трубами, как показано на чертеже.\n"..
"\n"..
"\n"..
"\n",
"Генератор использутся для выработки электричества. Должен быть соединен с машинами-потребителями электропроводами и электрораспределительными коробками.\n"..
"\n"..
"\n"..
"\n",
"Нужен для охлаждения пара выходящего из турбины. Должен быть присоединен к котлу и к турбине паровыми трубами, как показано на чертеже.\n"..
"\n"..
"\n"..
"\n",
"В ТА3 (и ТА4) машины приводятся в движение электричеством. Для этого\\, машины\\, хранилища\\, и генераторы должны быть соединены силовыми кабелями.\n"..
"В ТА3 есть 2 типа силовых кабелей:\n"..
"\n"..
" - Изолированные кабели (ТА силовые кабели) для местной проводки на этажах зданий. Эти кабели можно прятать внутрь строительных блоков - заштукатуривать \"plastered\" шпателем.\n"..
" - Магистральные линии (ТА силовые линии) для уличной проводки на дальние дистанции. Эти кабели защищены и не могут быть удалены другими игроками.\n"..
"\n"..
"Несколько потребителей\\, хранилищ\\, и генераторов могут работать совместно в силовой сети. Сети настраиваются распределительными коробками.\n"..
"Если поступает недостаточно электричества\\, потребители начинают отключаться.\n"..
"В такой ситуации\\, важно понимать принцип действия Блока принудительной загрузки\\, поскольку генераторы\\, например\\, поставляют электричество только когда чанк их размещения загружен. Загрузку можно гарантировать размещением БлокаПЗ.\n"..
"\n"..
"In TA4 there is also a cable for the solar system.\n"..
"\n"..
"\n"..
"\n",
"Storage systems in the power grid fulfill two tasks:\n"..
"\n"..
" - To cope with peaks in demand: All generators always deliver just as much power as is needed. However\\, if consumers are switched on/off or there are fluctuations in demand for other reasons\\, consumers can fail for a short time. To prevent this\\, there should always be at least one battery block in every network. This serves as a buffer and compensates for these fluctuations in the seconds range.\n"..
" - To store regenerative energy: Solar and wind are not available 24 hours a day. So that the power supply does not fail when no electricity is produced\\, one or more storage systems must be installed in the network. Alternatively\\, the gaps can also be bridged with oil/coal electricity.\n"..
"\n"..
"A storage system indicates its capacity in kud\\, i.e. ku per day. For example\\, a storage system with 100 kud delivers 100 ku for one game day\\, or 10 ku for 10 game days.\n"..
"\n"..
"All TA3/TA4 energy sources have adjustable charging characteristics. By default this is set to \"80% - 100%\". This means that when the storage system is 80% full\\, the output is reduced further and further until it switches off completely at 100%. If electricity is required in the network\\, 100% will never be reached\\, since the power of the generator has at some point dropped to the electricity demand in the network and the storage system is no longer charged\\, but only the consumers are served.\n"..
"\n"..
"This has several advantages:\n"..
"\n"..
" - The charging characteristics are adjustable. This means\\, for example\\, that oil/coal energy sources can be reduced at 60% and regenerative energy sources only at 80%. This means that oil/coal is only burned if there are not enough renewable energy sources available.\n"..
" - Several energy sources can be operated in parallel and are loaded almost evenly\\, because all energy sources work\\, for example\\, up to 80% of the storage system's charging capacity at their full capacity and then reduce their capacity at the same time.\n"..
" - All storage systems in a network form a large buffer. The charging capacity and the filling level of the entire storage system can always be read in percent on every storage system\\, but also on the electricity terminal.\n"..
"\n"..
" \n"..
"\n",
"For local wiring in the floor or in buildings.\n"..
"Branches can be realized using junction boxes. The maximum cable length between machines or junction boxes is 1000 m. A maximum of 1000 nodes can be connected in a power network. All blocks with power connection\\, including junction boxes\\, count as nodes.\n"..
"\n"..
"Since the power cables are not automatically protected\\, the land lines (TA power line) are recommended for longer distances.\n"..
"\n"..
"Power cables can be plastered with the trowel so they can be hidden in the wall or in the floor. All stone\\, clay and other blocks without \"intelligence\" can be used as plastering material. Dirt does not work because dirt can be converted to grass or the like\\, which would destroy the line.\n"..
"\n"..
"For plastering\\, the cable must be clicked on with the trowel. The material with which the cable is to be plastered must be on the far left in the player inventory.\n"..
"The cables can be made visible again by clicking on the block with the trowel.\n"..
"\n"..
"In addition to cables\\, the TA junction box and the TA power switch box can also be plastered.\n"..
"\n"..
"\n"..
"\n",
"With the junction box\\, electricity can be distributed in up to 6 directions. Junction boxes can also be plastered (hidden) with a trowel and made visible again.\n"..
"\n"..
"\n"..
"\n",
"With the TA power line and the electricity poles\\, reasonably realistic overhead lines can be realized. The power pole heads also serve to protect the power line (protection). A pole must be set every 16 m or less. The protection only applies to the power line and the poles\\, however\\, all other blocks in this area are not protected.\n"..
"\n"..
"\n"..
"\n",
"Used to build electricity poles. Is protected from destruction by the electricity pole head and can only be removed by the owner.\n"..
"\n"..
"\n"..
"\n",
"Has up to four arms and thus allows electricity to be distributed in up to 6 directions.\n"..
"The electricity pole head protects power lines and poles within a radius of 8 m.\n"..
"\n"..
"\n"..
"\n",
"This electricity pole head has two fixed arms and is used for the overhead lines. However\\, it can also transmit current downwards and upwards.\n"..
"The electricity pole head protects power lines and poles within a radius of 8 m.\n"..
"\n"..
"\n"..
"\n",
"The switch can be used to switch the power on and off. To do this\\, the switch must be placed on a power switch box. The power switch box must be connected to the power cable on both sides.\n"..
"\n"..
"\n"..
"\n",
"The switch can be used to switch the power on and off. To do this\\, the switch must be placed on a power switch box. The power switch box must be connected to the power cable on both sides.\n"..
"\n"..
"\n"..
"\n",
"see TA power switch.\n"..
"\n"..
"\n"..
"\n",
"The small power generator runs on gasoline and can be used for small consumers with up to 12 ku. Gasoline burns for 150 s under full load. Correspondingly longer under partial load (50% load = double time).\n"..
"\n"..
"The power generator can only hold 50 units of gasoline. An additional tank and a pump are therefore advisable.\n"..
"\n"..
"\n"..
"\n",
"The accu block (rechargeable battery) is used to store excess energy and automatically delivers power in the event of a power failure (if available).\n"..
"Several accu blocks together form a TA3 energy storage system. Each accu block has a display for the charging state and for the stored load.\n"..
"The values for the entire network are always displayed here. The stored load is displayed in \"kud\" or \"ku-days\" (analogous to kWh) 5 kud thus corresponds\\, for example\\, to 5 ku for a game day (20 min) or 1 ku for 5 game days.\n"..
"\n"..
"A accu block has 3.33 kud\n"..
"\n"..
"\n"..
"\n",
"The power terminal must be connected to the power grid. It shows data from the power grid.\n"..
"\n"..
"The most important figures are displayed in the upper half:\n"..
"\n"..
" - current/maximum generator power\n"..
" - current power consumption of all consumers\n"..
" - current charging current in/from the storage system\n"..
" - Current state of charge of the storage system in percent\n"..
"\n"..
"The number of network blocks is output in the lower half.\n"..
"\n"..
"Additional data on the generators and storage systems can be queried via the \"console\" tab.\n"..
"\n"..
"\n"..
"\n",
"The TA3 Electric Motor is required in order to be able to operate TA2 machines via the power grid. The TA3 Electric Motor converts electricity into axle power.\n"..
"If the electric motor is not supplied with sufficient power\\, it goes into an fault state and must be reactivated with a right-click.\n"..
"\n"..
"The electric motor takes max. 40 ku of electricity and provides on the other side max. 39 ku as axle power. So he consumes one ku for the conversion.\n"..
"\n"..
"\n"..
"\n",
"The TA3 industrial furnace serves as a supplement to normal furnaces. This means that all goods can be produced with \"cooking\" recipes\\, even in an industrial furnace. But there are also special recipes that can only be made in an industrial furnace.\n"..
"The industrial furnace has its own menu for recipe selection. Depending on the goods in the industrial furnace inventory on the left\\, the output product can be selected on the right.\n"..
"\n"..
"The industrial furnace requires electricity (for the booster) and fuel oil / gasoline for the burner. The industrial furnace must be assembled as shown in the plan on the right.\n"..
"\n"..
"See also TA4 heater.\n"..
"\n"..
"\n"..
"\n",
"Is part of the TA3 industrial furnace.\n"..
"\n"..
"The oil burner can be operated with crude oil\\, fuel oil\\, naphtha or gasoline. The burning time is 64 s for crude oil\\, 80 s for fuel oil\\, 90 s for naphtha and 100 s for gasoline.\n"..
"\n"..
"The oil burner can only hold 50 units of fuel. An additional tank and a pump are therefore advisable.\n"..
"\n"..
"\n"..
"\n",
"Is part of the TA3 industrial furnace. See TA3 industrial furnace.\n"..
"\n"..
"\n"..
"\n",
"Is part of the TA3 industrial furnace. See TA3 industrial furnace.\n"..
"\n"..
"\n"..
"\n",
"Liquids such as water or oil can only be pumped through the special pipes and stored in tanks. As with water\\, there are containers (canisters\\, barrels) in which the liquid can be stored and transported.\n"..
"\n"..
"It is also possible to connect several tanks using the yellow pipes and connectors. However\\, the tanks must have the same content and there must always be at least one yellow pipe between the tank\\, pump and distributor pipe.\n"..
"\n"..
"E.g. It is not possible to connect two tanks directly to a distributor pipe.\n"..
"\n"..
"The liquid filler is used to transfer liquids from containers to tanks. The plan shows how canisters or barrels with liquids are pushed into a liquid filler via pushers. The container is emptied in the liquid filler and the liquid is led down into the tank.\n"..
"\n"..
"The liquid filler can also be placed under a tank to empty the tank.\n"..
"\n"..
"\n"..
"\n",
"Liquids can be stored in a tank. A tank can be filled or emptied using a pump. To do this\\, the pump must be connected to the tank via a pipe (yellow pipes).\n"..
"\n"..
"A tank can also be filled or emptied manually by clicking on the tank with a full or empty liquid container (barrel\\, canister). It should be noted that barrels can only be completely filled or emptied. If\\, for example\\, there are less than 10 units in the tank\\, this remainder must be removed with canisters or pumped empty.\n"..
"\n"..
"A TA3 tank can hold 1000 units or 100 barrels of liquid.\n"..
"\n"..
"\n"..
"\n",
"The pump can be used to pump liquids from tanks or containers to other tanks or containers. The pump direction (arrow) must be observed for the pump. The yellow lines and connectors also make it possible to arrange several tanks on each side of the pump. However\\, the tanks must have the same content.\n"..
"\n"..
"The TA3 pump pumps 4 units of liquid every two seconds.\n"..
"\n"..
"Note 1: The pump must not be placed directly next to the tank. There must always be at least a piece of yellow pipe between them.\n"..
"\n"..
"\n"..
"\n",
"The liquid filler is used to transfer liquids between containers and tanks.\n"..
"\n"..
" - If the liquid filler is placed under a tank and empty barrels are put into the liquid filler with a pusher or by hand\\, the contents of the tank are transferred to the barrels and the barrels can be removed from the outlet\n"..
" - If the liquid filler is placed on a tank and if full containers are put into the liquid filler with a pusher or by hand\\, the content is transferred to the tank and the empty containers can be removed on the exit side\n"..
"\n"..
"It should be noted that barrels can only be completely filled or emptied. If\\, for example\\, there are less than 10 units in the tank\\, this remainder must be removed with canisters or pumped empty.\n"..
"\n"..
"\n"..
"\n",
"The yellow pipes are used for the transmission of gas and liquids.\n"..
"The maximum pipe length is 100 m.\n"..
"\n"..
"\n"..
"\n",
"The blocks serve as wall openings for tubes\\, so that no holes remain open.\n"..
"\n"..
"\n"..
"\n",
"There is a valve for the yellow pipes\\, which can be opened and closed with a click of the mouse.\n"..
"The valve can also be controlled via on/off commands.\n"..
"\n"..
"\n"..
"\n",
"In order to run your generators and stoves with oil\\, you must first look for oil and build a derrick and then extract the oil.\n"..
"TA3 oil explorer\\, TA3 oil drilling box and TA3 pump jack are used for this.\n"..
"\n"..
"\n"..
"\n",
"You can search for oil with the oil explorer. To do this\\, place the block on the floor and right-click to start the search. The oil explorer can be used above ground and underground at all depths.\n"..
"The chat output shows you the depth to which oil was searched and how much oil (petroleum) was found.\n"..
"You can click the block multiple times to search for oil in deeper areas. Oil fields range in size from 4\\,000 to 20\\,000 items.\n"..
"\n"..
"If the search was unsuccessful\\, you have to move the block approx. 16 m further.\n"..
"The oil explorer always searches for oil in the whole map block and below\\, in which it was set. A new search in the same map block (16x16 field) therefore makes no sense.\n"..
"\n"..
"If oil is found\\, the location for the derrick is displayed. You have to erect the derrick within the area shown\\, it is best to mark the spot with a sign and protect the entire area against foreign players.\n"..
"\n"..
"Don't give up looking for oil too quickly. If you're unlucky\\, it can take a long time to find an oil well.\n"..
"It also makes no sense to search an area that another player has already searched. The chance of finding oil anywhere is the same for all players.\n"..
"\n"..
"The oil explorer can always be used to search for oil.\n"..
"\n"..
"\n"..
"\n",
"The oil drill box must be placed in the position indicated by the oil explorer. Drilling for oil elsewhere is pointless.\n"..
"If the button on the oil drilling box is clicked\\, the derrick is erected above the box. This takes a few seconds.\n"..
"The oil drilling box has 4 sides\\, at IN the drill pipe has to be delivered via pusher and at OUT the drilling material has to be removed. The oil drilling box must be supplied with power via one of the other two sides.\n"..
"\n"..
"The oil drilling box drills to the oil field (1 meter in 16 s) and requires 16 ku of electricity.\n"..
"Once the oil field has been reached\\, the derrick can be dismantled and the box removed.\n"..
"\n"..
"\n"..
"\n",
"The oil pump (pump-jack) must now be placed in the place of the oil drilling box. The oil pump also requires electricity (16 ku) and supplies one unit of oil every 8 s. The oil must be collected in a tank. To do this\\, the oil pump must be connected to the tank via yellow pipes.\n"..
"Once all the oil has been pumped out\\, the oil pump can also be removed.\n"..
"\n"..
"\n"..
"\n",
"The drill pipe is required for drilling. As many drill pipe items are required as the depth specified for the oil field. The drill pipe is useless after drilling\\, but it also cannot be dismantled and remains in the ground. However\\, there is a tool to remove the drill pipe blocks (-> Tools -> TA3 drill pipe pliers).\n"..
"\n"..
"\n"..
"\n",
"The oil tank is the large version of the TA3 tank (see liquids -> TA3 tank).\n"..
"\n"..
"The large tank can hold 4000 units of oil\\, but also any other type of liquid.\n"..
"\n"..
"\n"..
"\n",
"",
"Tank carts can be used to transport oil from the oil well to the oil processing plant. A tank cart can be filled or emptied directly using pumps. In both cases\\, the yellow pipes must be connected to the tank cart from above.\n"..
"\n"..
"The following steps are necessary:\n"..
"\n"..
" - Place the tank cart in front of the rail bumper block. The bumper block must not yet be programmed with a time so that the tank cart does not start automatically\n"..
" - Connect the tank cart to the pump using yellow pipes\n"..
" - Switch on the pump\n"..
" - Program the bumper with a time (10 - 20 s)\n"..
"\n"..
"This sequence must be observed on both sides (fill / empty).\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",
"The tank truck is used to transport liquids. Like tanks\\, it can be filled with pumps or emptied. In both cases\\, the yellow tube must be connected to the tank truck from above.\n"..
"\n"..
"200 units fit in the tank truck.\n"..
"\n"..
"\n"..
"\n",
"The chest cart is used to transport items. Like chests\\, it can be filled or emptied using a pusher.\n"..
"\n"..
"4 stacks fit in the chest cart.\n"..
"\n"..
"\n"..
"\n",
"Oil is a mixture of substances and consists of many components. The oil can be broken down into its main components such as bitumen\\, fuel oil\\, naphtha\\, gasoline and propane gas via a distillation tower.\n"..
"Further processing to end products takes place in the chemical reactor.\n"..
"\n"..
"\n"..
"\n",
"The distillation tower must be set up as in the plan at the top right.\n"..
"The bitumen is drained off via the base block. The exit is on the back of the base block (note the direction of the arrow).\n"..
"The \"distillation tower\" blocks with the numbers: 1\\, 2\\, 3\\, 2\\, 3\\, 2\\, 3\\, 4 are placed on this basic block\n"..
"Fuel oil\\, naphtha and gasoline are drained from the openings from bottom to top. The propane gas is caught at the top.\n"..
"All openings on the tower must be connected to tanks.\n"..
"The reboiler must be connected to the \"distillation tower 1\" block.\n"..
"\n"..
"The reboiler needs electricity (not shown in the plan)!\n"..
"\n"..
"\n"..
"\n",
"The reboiler heats the oil to approx. 400 ° C. It largely evaporates and is fed into the distillation tower for cooling.\n"..
"\n"..
"The reboiler requires 14 units of electricity and produces one unit of bitumen\\, fuel oil\\, naphtha\\, gasoline and propane every 16 s.\n"..
"To do this\\, the reboiler must be supplied with oil via a pump.\n"..
"\n"..
"\n"..
"\n",
"In addition to the tubes for goods transport\\, as well as the gas and power pipes\\, there is also a wireless communication level through which blocks can exchange data with each other. No lines have to be drawn for this\\, the connection between transmitter and receiver is only made via the block number. \n"..
"\n"..
"*Info:* A block number is a unique number that is generated by Techage when many Techage blocks are placed. The block number is used for addressing during communication between Techage controllers and machines. All blocks that can participate in this communication show the block number as info text if you fix the block with the mouse cursor.\n"..
"\n"..
"Which commands a block supports can be read out and displayed with the TechAge Info Tool (wrench).\n"..
"The simplest commands supported by almost all blocks are:\n"..
"\n"..
" - 'on' - to turn on block / machine / lamp\n"..
" - 'off' - to turn off the block / machine / lamp\n"..
"\n"..
"With the help of the TA3 Terminal\\, these commands can be tried out very easily. Suppose a signal lamp is number 123.\n"..
"Then with:\n"..
"\n"..
" cmd 123 on\n"..
"\n"..
"the lamp can be turned on and with:\n"..
"\n"..
" cmd 123 off\n"..
"\n"..
"the lamp can be turned off again. These commands must be entered in the input field of the TA3 terminal.\n"..
"\n"..
"Commands such as 'on' and'off' are sent to the recipient without a response coming back. These commands can therefore be sent to several receivers at the same time\\, for example with a push button / switch\\, if several numbers are entered in the input field.\n"..
"\n"..
"A command like 'state' requests the status of a block. The block then sends its status back. This type of confirmed command can only be sent to one recipient at a time.\n"..
"This command can also be tested with the TA3 terminal on a pusher\\, for example:\n"..
"\n"..
" cmd 123 state\n"..
"\n"..
"Possible responses from the pusher are:\n"..
"\n"..
" - 'running' -> I'm working\n"..
" - 'stopped' -> switched off\n"..
" - 'standby' -> nothing to do because source inventory is empty\n"..
" - 'blocked' -> can't do anything because target inventory is full\n"..
"\n"..
"This status and other information is also output when the wrench is clicked on the block.\n"..
"\n"..
"\n"..
"\n",
"The button/switch sends 'on' / 'off' commands to the blocks that have been configured via the numbers.\n"..
"The button/switch can be configured as a button or a switch. If it is configured as a button\\, the time between the 'on' and 'off' commands can be set. With the operating mode \"on button\" only an 'on' and no 'off' command is sent.\n"..
"\n"..
"The checkbox \"public\" can be used to set whether the button can be used by everyone (set) or only by the owner himself (not set).\n"..
"\n"..
"Note: With the programmer\\, block numbers can be easily collected and configured.\n"..
"\n"..
"\n"..
"\n",
"With the TA3 command converter\\, 'on' / 'off' commands can be converted into other commands\\, and forwarding can be prevented or delayed.\n"..
"The number of the target block or the numbers of the target blocks\\, the commands to be sent and the delay times in seconds must be entered. If no command is entered\\, nothing is sent.\n"..
"\n"..
"The numbers can also be programmed using the Techage programmer.\n"..
"\n"..
"\n"..
"\n",
"The TA3 flip-flop changes its state with each received 'on' command. Received 'off' commands are ignored. Depending on the status change\\, 'on' / 'off' commands are sent alternately. The number of the target block or the numbers of the target blocks must be entered. The numbers can also be programmed using the Techage programmer.\n"..
"\n"..
"For example\\, lamps can be switched on and off with the help of buttons.\n"..
"\n"..
"\n"..
"\n",
"The TA3 logic block can be programmed in such a way that one or more input commands are linked to one output command and sent. This block can therefore replace various logic elements such as AND\\, OR\\, NOT\\, XOR etc. \n"..
"Input commands for the logic block are 'on' /'off' commands.\n"..
"Input commands are referenced via the number\\, e.g. '1234' for the command from the sender with the number 1234. \n"..
"The same applies to output commands.\n"..
"\n"..
"A rule is structured as follows: \n"..
"\n"..
" <output> = on/off if <input-expression> is true\n"..
"\n"..
"'<output>' is the block number to which the command should be sent.\n"..
"'<input-expression>' is a boolean expression where input numbers are evaluated.\n"..
"\n"..
"*Examples for the input expression*\n"..
"\n"..
"Negate signal (NOT):\n"..
"\n"..
" 1234 == off\n"..
"\n"..
"Logical AND:\n"..
"\n"..
" 1234 == on and 2345 == on\n"..
"\n"..
"Logical OR:\n"..
"\n"..
" 1234 == on or 2345 == on\n"..
"\n"..
"The following operators are allowed: 'and' 'or' 'on' 'off' 'me' '==' '~=' '(' ')'\n"..
"\n"..
"If the expression is true\\, a command is sent to the block with the '<output>' number. \n"..
"Up to four rules can be defined\\, whereby all rules are always checked when a command is received. \n"..
"The internal processing time for all commands is 100 ms. \n"..
"\n"..
"Your own node number can be referenced using the keyword 'me'. This makes it possible for the block to send itself a command (flip-flop function). \n"..
"\n"..
"The blocking time defines a pause after a command\\, during which the logic block does not accept any further external commands. Commands received during the blocking period are thus discarded. The blocking time can be defined in seconds. \n"..
"\n"..
"\n"..
"\n",
"The repeater sends the received signal to all configured numbers.\n"..
"This can make sense\\, for example\\, if you want to control many blocks at the same time. The repeater can be configured with the programmer\\, which is not possible with all blocks.\n"..
"\n"..
"\n"..
"\n",
"The sequencer can send a series of 'on' / 'off' commands\\, whereby the interval between the commands must be specified in seconds. You can use it to make a lamp blink\\, for example.\n"..
"Up to 8 commands can be configured\\, each with target block number and pending the next command.\n"..
"The sequencer repeats the commands endlessly when \"Run endless\" is set.\n"..
"If nothing is selected\\, only the specified time in seconds is waited for.\n"..
"\n"..
"\n"..
"\n",
"The timer can send commands time-controlled. The time\\, the target number(s) and the command itself can be specified for each command line. This means that lamps can be switched on in the evening and switched off again in the morning.\n"..
"\n"..
"\n"..
"\n",
"The terminal is primarily used to test the command interface of other blocks (see \"Logic / switching blocks\").\n"..
"You can also assign commands to keys and use the terminal productively.\n"..
"\n"..
" set <button-num> <button-text> <command>\n"..
"\n"..
"With 'set 1 ON cmd 123 on'\\, for example\\, user key 1 can be programmed with the command 'cmd 123 on'. If the key is pressed\\, the command is sent and the response is output on the screen.\n"..
"\n"..
"The terminal has the following local commands:\n"..
"\n"..
" - 'clear' clear screen\n"..
" - 'help' output a help page\n"..
" - 'pub' switch to public mode\n"..
" - 'priv' switch to private mode\n"..
"\n"..
"In private mode\\, the terminal can only be used by players who can build at this location\\, i.e. who have protection rights.\n"..
"\n"..
"In public mode\\, all players can use the preconfigured keys.\n"..
"\n"..
"\n"..
"\n",
"The signal lamp can be switched on or off with the 'on' / 'off' command. This lamp does not need electricity and can be colored with the airbrush tool from the mod Unified Dyes\" and via Lua/Beduino commands.\n"..
"\n"..
"With the chat command '/ta_color' the color palette with the values for the Lua/Beduino commands is displayed and with '/ta_send color <num>' the color can be changed.\n"..
"\n"..
"\n"..
"\n",
"With these blocks you can realize doors and gates that can be opened via commands (blocks disappear) and closed again. One door controller is required for each gate or door.\n"..
"\n"..
"The appearance of the blocks can be adjusted via the block menu.\n"..
"This makes it possible to realize secret doors that only open for certain players (with the help of the player detector).\n"..
"\n"..
"\n"..
"\n",
"The door controller is used to control the TA3 door/gate blocks. With the door controller\\, the numbers of the door/gate blocks must be entered. If an 'on' / 'off' command is sent to the door controller\\, this opens/closes the door or gate.\n"..
"\n"..
"\n"..
"\n",
"The Door Controller II can remove and set all types of blocks. To teach in the Door Controller II\\, the \"Record\" button must be pressed. Then all blocks that should be part of the door / gate must be clicked. Then the \"Done\" button must be pressed. Up to 16 blocks can be selected. The removed blocks are saved in the controller's inventory. The function of the controller can be tested manually using the \"Remove\" or \"Set\" buttons. If an 'on' /'off' command is sent to the Door Controller II\\, it removes or sets the blocks as well.\n"..
"\n"..
"With '$send_cmnd(node_number\\, \"exchange\"\\, 2)' individual blocks can be set\\, removed or replaced by other blocks from the inventory. \n"..
"\n"..
"With '$send_cmnd(node_number\\, \"set\"\\, 2)' a block from the inventory can be set explicitly\\, as long as the inventory slot is not empty.\n"..
"\n"..
"A block can be removed again with '$send_cmnd(node_number\\, \"dig\"\\, 2)' if the inventory slot is empty. \n"..
"\n"..
"The name of the set block is returned with '$send_cmnd(node_number\\, \"get\"\\, 2)'.\n"..
"\n"..
"The slot number of the inventory (1 .. 16) must be passed as payload in all three cases.\n"..
"\n"..
"This can also be used to simulate extendable stairs and the like. \n"..
"\n"..
"\n"..
"\n",
"Different sounds can be played with the sound block. All sounds of the Mods Techage\\, Signs Bot\\, Hyperloop\\, Unified Inventory\\, TA4 Jetpack and Minetest Game are available.\n"..
"\n"..
"The sounds can be selected and played via the menu and via command.\n"..
"\n"..
" - Command 'on' to play a sound\n"..
" - Command 'sound <idx>' to select a sound via the index\n"..
" - Command 'gain <volume>' to adjust the volume via the '<volume>' value (1 to 5).\n"..
"\n"..
"\n"..
"\n",
"The Mesecons converter is used to convert Techage on/off commands into Mesecons signals and vice versa.\n"..
"To do this\\, one or more node numbers must be entered and the converter with Mesecons blocks\n"..
"has to be connected via Mesecons cables. The Mesecons converter can also be configured with the programmer.\n"..
"The Mesecons converter accepts up to 5 commands per second\\; it switches itself off at higher loads.\n"..
"\n"..
"*This node only exists if the mod mesecons is active!*\n"..
"\n"..
"\n"..
"\n",
"Detectors scan their surroundings and send an 'on' command when the search is recognized.\n"..
"\n"..
"\n"..
"\n",
"The detector is a special tube block that detects when items are passed on through the tube. To do this\\, it must be connected to tubes on both sides. If items are pushed into the detector with a pusher\\, they are automatically passed on.\n"..
"It sends an 'on' when an item is recognized\\, followed by an 'off' a second later.\n"..
"Then further commands are blocked for 8 seconds.\n"..
"The waiting time and the items that should trigger a command can be configured using the open-ended wrench menu. \n"..
"\n"..
"\n"..
"\n",
"The cart detector sends an 'on' command if it has recognized a cart (Minecart) directly in front of it. In addition\\, the detector can also restart the cart when an 'on' command is received.\n"..
"\n"..
"The detector can also be programmed with its own number. In this case\\, he pushes all the wagons that stop near him (one block in all directions).\n"..
"\n"..
"\n"..
"\n",
"The node detector sends an 'on' command if it detects that nodes (blocks) appear or disappear in front of it\\, but must be configured accordingly. After switching the detector back to the standard state (gray block)\\, an 'off' command is sent. Valid blocks are all types of blocks and plants\\, but not animals or players. The sensor range is 3 blocks / meter in the direction of the arrow.\n"..
"\n"..
"\n"..
"\n",
"The player detector sends an 'on' command if it detects a player within 4 m of the block. If the player leaves the area again\\, an 'off' command is sent.\n"..
"If the search should be limited to specific players\\, these player names can also be entered.\n"..
"\n"..
"\n"..
"\n",
"The light detector sends an 'on' command if the light level of the block above exceeds a certain level\\, which can be set through the right-click menu.\n"..
"If you have a TA4 Lua Controller\\, you can get the exact light level with $get_cmd(num\\, 'light_level')\n"..
"\n"..
"\n"..
"\n",
"TA3 has the same machines as TA2\\, only these are more powerful and require electricity instead of axis drive.\n"..
"Therefore\\, only the different technical data are given below.\n"..
"\n"..
"\n"..
"\n",
"The function corresponds to that of TA2.\n"..
"The processing power is 6 items every 2 s.\n"..
"\n"..
"\n"..
"\n",
"The function of the TA3 distributor corresponds to that of TA2.\n"..
"The processing power is 12 items every 4 s.\n"..
"\n"..
"\n"..
"\n",
"The function corresponds to that of TA2.\n"..
"The processing power is 2 items every 4 s. The autocrafter requires 6 ku of electricity.\n"..
"\n"..
"\n"..
"\n",
"The function corresponds to that of TA2\\, only TA4 WLAN chips are produced here.\n"..
"The processing power is one chip every 6 s. The block requires 12 ku of electricity for this.\n"..
"\n"..
"\n"..
"\n",
"The function corresponds to that of TA2.\n"..
"The maximum depth is 40 meters. The quarry requires 12 ku of electricity.\n"..
"\n"..
"\n"..
"\n",
"The function corresponds to that of TA2.\n"..
"The processing power is 2 items every 4 s. The block requires 4 ku of electricity.\n"..
"\n"..
"\n"..
"\n",
"The function corresponds to that of TA2.\n"..
"The probability is also the same as for TA2. The block also requires 3 ku of electricity.\n"..
"But in contrast to TA2\\, the status of the TA3 block can be read (controller)\n"..
"\n"..
"\n"..
"\n",
"The function corresponds to that of TA2.\n"..
"The processing power is 2 items every 4 s. The block requires 6 ku of electricity.\n"..
"\n"..
"\n"..
"\n",
"The injector is a TA3 pusher with special properties. It has a menu for configuration. Up to 8 items can be configured here. He only takes these items from a chest to pass them on to machines with recipes (autocrafter\\, industrial furnace and electronic fab).\n"..
"\n"..
"When passing on\\, only one position in the inventory is used in the target machine. If\\, for example\\, only the first three entries are configured in the injector\\, only the first three storage locations in the machine's inventory are used. So that an overflow in the machine inventory is prevented.\n"..
"\n"..
"The injector can also be switched to \"pull mode\". Then he only pulls items out of the chest from the positions that are defined in the configuration of the injector. In this case\\, item type and position must match. This allows to empty specific inventory entries of a chest. \n"..
"\n"..
"The processing power is up to 8 times one item every 4 seconds.\n"..
"\n"..
"\n"..
"\n",
"",
"The Techage Info Tool (open-ended wrench) has several functions. It shows the time\\, position\\, temperature and biome when an unknown block is clicked on.\n"..
"If you click on a TechAge block with command interface\\, all available data will be shown (see also \"Logic / switching blocks\").\n"..
"\n"..
"With Shift + right click an extended menu can be opened for some blocks. Depending on the block\\, further data can be called up or special settings can be made here. In the case of a generator\\, for example\\, the charging curve/switch-off can be programmed. \n"..
"\n"..
"\n"..
"\n",
"With the programmer\\, block numbers can be collected from several blocks with a right click and written into a block like a button / switch with a left click.\n"..
"If you click in the air\\, the internal memory is deleted.\n"..
"\n"..
"\n"..
"\n",
"The trowel is used for plastering power cables. See also \"TA power cable\".\n"..
"\n"..
"\n"..
"\n",
"This tool can be used to remove the drill pipe blocks if\\, for example\\, a tunnel is to pass through there.\n"..
"\n"..
"\n"..
"\n",
"The Techage Screwdriver serves as a replacement for the normal screwdriver. It has the following functions:\n"..
"\n"..
" - Left click: turn the block to the left\n"..
" - Right click: turn the visible side of the block upwards\n"..
" - Shift + left click: save the alignment of the clicked block\n"..
" - Shift + right click: apply the saved alignment to the clicked block\n"..
"\n"..
" \n"..
"\n",
"The TechAge Assembly Tool is used to remove and reposition Techage blocks without these blocks losing their block number or being assigned a new number when setting. This is helpful\\, for example\\, for quarries\\, as they often have to be moved.\n"..
"\n"..
" - Left button: Remove a block\n"..
" - Right button: Set a block\n"..
"\n"..
"The block that was previously removed with the assembly tool and is to be placed again must be on the far left of the player inventory.\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",
"",
"",
"",
"",
"",
"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_distiller",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
}

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,214 +0,0 @@
return {
titles = {
"1,TA5: Future",
"2,Energy Sources",
"3,TA5 Fusion Reactor",
"4,TA5 Fusion Reactor Magnet",
"4,TA5 Pump",
"4,TA5 Heat Exchanger",
"4,TA5 Fusion Reactor Controller",
"4,TA5 Fusion Reactor Shell",
"4,TA5 Fusion Reactor Core",
"2,Energy Storage",
"3,TA5 Hybrid Storage (planned)",
"2,Logic blocks",
"2,Transport and Traffic",
"3,TA5 Flight Controller",
"3,TA5 Hyperloop Chest",
"3,TA5 Hyperloop Tank",
"2,Teleport Blocks",
"3,TA5 Teleport Block Items",
"3,TA5 Teleport Block Liquids",
"3,Hyperloop Teleport Blocks (planned)",
"2,More TA5 Blocks/Items",
"3,TA5 Container (planned)",
"3,TA5 AI Chip",
"3,TA5 AI Chip II",
},
texts = {
"Machines to overcome space and time\\, new sources of energy and other achievements shape your life.\n"..
"\n"..
"Experience points are required for the manufacture and use of TA5 machines and blocks. These can only be worked out using the collider from TA4.\n"..
"\n"..
"\n"..
"\n",
"",
"Nuclear fusion means the fusing of two atomic nuclei. Depending on the reaction\\, large amounts of energy can be released. Nuclear fusions\\, in which energy is released\\, take place in the form of chain reactions. They are the source of the energy of the stars\\, including our sun\\, for example. A fusion reactor converts the energy released during controlled nuclear fusion into electricity.\n"..
"\n"..
"*How do fusion reactors work?*\n"..
"\n"..
"A fusion reactor works according to the classic principle of a thermal power plant: water is heated and drives a steam turbine\\, whose kinetic energy is converted into electricity by a generator.\n"..
"\n"..
"A fusion power plant initially requires a large amount of energy\\, since a plasma has to be generated. \"Plasma\" is the name given to the fourth state of matter\\, after solid\\, liquid and gaseous. This requires a lot of electricity. Only through this extreme concentration of energy does the fusion reaction ignite and the heat given off is used to generate electricity via the heat exchanger. The generator then delivers 800 ku of electricity.\n"..
"\n"..
"The plan on the right shows a section through the fusion reactor.\n"..
"\n"..
"60 experience points are required to operate the fusion reactor. The fusion reactor must be built entirely in a forceload block area.\n"..
"\n"..
"\n"..
"\n",
"A total of 60 TA5 Fusion Reactor Magnets are required to set up the fusion reactor. These form the ring in which the plasma forms. The TA5 Fusion Reactor Magnets requires power and has two ports for cooling.\n"..
"\n"..
"There are two types of magnets\\, so all sides of the magnet that face the plasma ring can also be protected with a heat shield.\n"..
"\n"..
"With the corner magnets on the inside of the ring\\, one connection side is covered (power or cooling) and can therefore not be connected. This is technically not feasible and therefore has no influence on the function of the fusion reactor. \n"..
"\n"..
"\n"..
"\n",
"The pump is required to fill the cooling circuit with isobutane. About 350 units of isobutane are required.\n"..
"\n"..
"Note: The TA5 pump can only be used to fill the cooling circuit\\, pumping out the coolant is not possible. Therefore\\, the pump should not be switched on until the magnets are correctly placed and all power and cooling lines are connected.\n"..
"\n"..
"\n"..
"\n",
"The TA5 Heat Exchanger is required to convert the heat generated in the fusion reactor first to steam and then to electricity. The Heat Exchanger itself requires 5 ku electricity. The structure is similar to the Heat Exchanger of the energy store from TA4.\n"..
"\n"..
"Note: The TA5 Heat Exchanger has two connections (blue and green) for the cooling circuit. The heat exchanger and all magnets must be connected to form a cooling circuit via the green and blue pipes.\n"..
"\n"..
"The cooling circuit can be checked for completeness using the start button on the heat exchanger\\, even if no coolant has yet been filled in.\n"..
"\n"..
"\n"..
"\n",
"The fusion reactor is switched on via the TA5 Fusion Reactor Controller. The cooling/Heat Exchanger must be switched on first and then the controller. It takes about 2 minutes for the reactor to start up and supply electricity. The fusion reactor and thus the controller requires 400 ku of electricity to maintain the plasma.\n"..
"\n"..
"\n"..
"\n",
"The entire reactor must be surrounded by a shell that absorbs the enormous pressure that the magnets exert on the plasma and protects the environment from radiation. Without this shell\\, the reactor cannot be started. With the TechAge Trowel\\, power cables and cooling pipes of the fusion reactor can also be integrated into the shell.\n"..
"\n"..
"\n"..
"\n",
"The core must sit in the center of the reactor. See illustration under \"TA5 Fusion Reactor\". The TechAge Trowel is also required for this.\n"..
"\n"..
"\n"..
"\n",
"",
"",
"",
"",
"The TA5 Flight Controller is similar to the TA4 Move Controller. In contrast to the TA4 Move Controller\\, several movements can be combined into one flight route. This flight route can be defined in the input field using several x\\,y\\,z entries (one movement per line). The flight route is checked and saved via \"Save\". In the event of an error\\, an error message is issued.\n"..
"\n"..
"With the \"Test\" button\\, the flight route with the absolute coordinates is output for checking in the chat.\n"..
"\n"..
"The maximum distance for the entire flight distance is 1500 m. Up to 32 blocks can be trained.\n"..
"\n"..
"The use of the TA5 Flight Controller requires 40 experience points.\n"..
"\n"..
"*Teleport mode*\n"..
"\n"..
"If the 'Teleport Mode' is enabled\\, a player can also be moved without blocks. To do this\\, the start position must be configured using the \"Record\" button. Only one position can be configured here. The player to be moved must be in that position.\n"..
"\n"..
"\n"..
"\n",
"The TA5 Hyperloop Chest allows objects to be transported over a Hyperloop network.\n"..
"\n"..
"The TA5 Hyperloop Chest has to be placed on a Hyperloop Junction. The chest has a special menu\\, with which you can pair two chests. Things that are in the chest are teleported to the remote station. The chest can also be filled/emptied with a pusher.\n"..
"\n"..
"For pairing you first have to enter a name for the chest on one side\\, then you can select this name for the other chest and thus connect the two blocks.\n"..
"\n"..
"The use of the TA5 Hyperloop Chest requires 15 experience points.\n"..
"\n"..
"\n"..
"\n",
"The TA5 Hyperloop Tank allows liquids to be transported over a Hyperloop network.\n"..
"\n"..
"The TA5 Hyperloop Tank has to be placed on a Hyperloop Junction.The tank has a special menu\\, with which you can pair two tanks. Liquids in the tank will be teleported to the remote station. The tank can also be filled/emptied with a pump.\n"..
"\n"..
"For pairing you first have to enter a name for the tank on one side\\, then you can select this name for the other tank and thus connect the two blocks.\n"..
"\n"..
"The use of the TA5 Hyperloop Tank requires 15 experience points.\n"..
"\n"..
"\n"..
"\n",
"Teleport blocks allow things to be transferred between two teleport blocks without the need for a pipe or tube in between. To pair the blocks\\, you first have to enter a name for the block on one side\\, then you can select this name for the other block and thus connect the two blocks. Pairing can only be carried out by one player (player name is checked) and must be completed before the server is restarted. Otherwise the pairing data will be lost.\n"..
"\n"..
"The map on the right shows how the blocks can be used. \n"..
"\n"..
"\n"..
"\n",
"These teleport blocks allow the transfer of items and thus replace a tube. Distances of up to 500 blocks can be bridged.\n"..
"\n"..
"Each Teleport blocks requires 12 ku of electricity.\n"..
"\n"..
"30 experience points are required to use the teleport blocks. \n"..
"\n"..
"\n"..
"\n",
"These teleport blocks allow the transfer of liquids and thus replace a pipe. Distances of up to 500 blocks can be bridged.\n"..
"\n"..
"Each Teleport blocks requires 12 ku of electricity.\n"..
"\n"..
"30 experience points are required to use the teleport blocks. \n"..
"\n"..
"\n"..
"\n",
"The Hyperloop Teleport Blocks allow the construction of a Hyperloop network without Hyperloop tubes.\n"..
"\n"..
"The use of the Hyperloop Teleport Blocks requires 60 experience points.\n"..
"\n",
"",
"The TA5 container allows Techage systems to be packed and unpacked at another location.\n"..
"\n"..
"80 experience points are required to use the TA5 container.\n"..
"\n",
"The TA5 AI Chip is partly required for the production of TA5 blocks. The TA5 AI Chip can only be manufactured at the TA4 Electronics Fab. This requires 10 experience points.\n"..
"\n"..
"\n"..
"\n",
"The TA5 AI Chip II is required to build the TA5 Fusion Reactor. The TA5 AI Chip II can only be manufactured at the TA4 Electronics Fab. This requires 25 experience points.\n"..
"\n"..
"\n"..
"\n",
},
images = {
"techage_ta5",
"",
"",
"ta5_magnet",
"ta5_pump",
"",
"ta5_fr_controller",
"ta5_fr_shell",
"ta5_fr_nucleus",
"",
"",
"",
"",
"ta5_flycontroller",
"ta5_chest",
"ta5_tank",
"",
"ta5_tele_tube",
"ta5_tele_pipe",
"",
"",
"",
"ta5_aichip",
"ta5_aichip2",
},
plans = {
"",
"",
"ta5_fusion_reactor",
"",
"",
"ta5_heatexchanger",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"ta5_teleport",
"",
"",
"",
"",
"",
"",
"",
}
}

View File

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

View File

@ -603,5 +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", "RU", name, plan2)
doclib.add_manual_plan("techage", "pt-BR", name, plan2)
end

View File

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

View File

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

View File

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

View File

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

View File

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

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