Compare commits
382 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
8183b05675 | ||
|
009ea6f3fd | ||
|
46b176805d | ||
|
d7be11a8aa | ||
|
8f255ec545 | ||
|
ec982b0de0 | ||
|
9a699a361f | ||
|
a1485b6eab | ||
|
895b7895e6 | ||
|
3453392c56 | ||
|
25b087232d | ||
|
885d25a4a9 | ||
|
abd945d5bc | ||
|
b1a338c8d4 | ||
|
d7c31f9865 | ||
|
c98b9a3b79 | ||
|
923164c17c | ||
|
ee3b19dd10 | ||
|
11585b2f86 | ||
|
a3d77f5ff1 | ||
|
46cd8b111d | ||
|
0b84d478d7 | ||
|
33c045fafb | ||
|
747bd7bfac | ||
|
653e76c165 | ||
|
a62f883d36 | ||
|
bf5c5bb919 | ||
|
9eb8e75efb | ||
|
1489fc26f3 | ||
|
eed4d46d87 | ||
|
ac286776e3 | ||
|
c2c0686d07 | ||
|
ab66660b32 | ||
|
5f0ddb211c | ||
|
bd7368a412 | ||
|
a181f9524f | ||
|
db28d18137 | ||
|
368544046f | ||
|
064e9d0f26 | ||
|
69cc7bff27 | ||
|
65c6d0adbc | ||
|
6bfc943b01 | ||
|
0b50136116 | ||
|
aa7cdfba6e | ||
|
8b80ddab24 | ||
|
66a3977c9f | ||
|
77ee9928b7 | ||
|
ad2fa9d756 | ||
|
8ab2835141 | ||
|
6b07399bf3 | ||
|
ccd017b665 | ||
|
eea5c1a4ef | ||
|
bb749c5eb2 | ||
|
4e4445ff4e | ||
|
a9c842897c | ||
|
44720ca6ae | ||
|
63310ed33d | ||
|
7bb16c6a73 | ||
|
fad059c1bf | ||
|
11c3dea912 | ||
|
4e77cfab70 | ||
|
a5634c7a75 | ||
|
f5becb1eb8 | ||
|
2a157dc825 | ||
|
2c16b9d01f | ||
|
c81f62fd39 | ||
|
6042a9d30a | ||
|
4ed5d7494f | ||
|
d0e9d0b656 | ||
|
1838507521 | ||
|
7a99d7c0ad | ||
|
a347405150 | ||
|
5b94e40243 | ||
|
ae9458aa45 | ||
|
bc6697a8cc | ||
|
cb11941f30 | ||
|
ae52a9242d | ||
|
908678e840 | ||
|
5a0aadc063 | ||
|
18bd475a5d | ||
|
38946d6d84 | ||
|
957466f2e1 | ||
|
b32d22b0c8 | ||
|
4f4c370358 | ||
|
a946658b3b | ||
|
73fadb4fc3 | ||
|
7871b81c2a | ||
|
14440f0cad | ||
|
aee918d025 | ||
|
9111d7287c | ||
|
92039b3a83 | ||
|
ae8d2d3d09 | ||
|
c7ac277d40 | ||
|
b258057317 | ||
|
a740837b30 | ||
|
fffc542ac6 | ||
|
4a5ad68054 | ||
|
d6157087f1 | ||
|
2dc3f24f1c | ||
|
6b77916afa | ||
|
56b8e2bef6 | ||
|
6189fde452 | ||
|
56197d229b | ||
|
366913ac58 | ||
|
e12ba852cf | ||
|
f737be9a38 | ||
|
7947d23719 | ||
|
0f8846d6f6 | ||
|
ec34c87b97 | ||
|
a2cba47c63 | ||
|
cf3b525529 | ||
|
f68260310b | ||
|
d85de971a7 | ||
|
cbd8b0ca52 | ||
|
39d13286d9 | ||
|
5b0be32db3 | ||
|
4206875f23 | ||
|
3b51e1d557 | ||
|
e262cccdfe | ||
|
b1efedb55f | ||
|
356e8310d8 | ||
|
780b39d23c | ||
|
af5038387a | ||
|
99645642c2 | ||
|
f9035e4aea | ||
|
f602a502bb | ||
|
f7863333d5 | ||
|
947a31f350 | ||
|
4d33f5f034 | ||
|
d6be0812c4 | ||
|
9210bce637 | ||
|
e9ddfee834 | ||
|
a7449c86ab | ||
|
7872915be3 | ||
|
d758751ee0 | ||
|
4b164afca3 | ||
|
84971f05b3 | ||
|
97936102c3 | ||
|
301d20aaf1 | ||
|
6a92a72e14 | ||
|
1e007f2f0e | ||
|
9d48746093 | ||
|
3669ef0f96 | ||
|
0f7814034d | ||
|
dac5872e8c | ||
|
3cc2a01779 | ||
|
11944f7aba | ||
|
14136ff363 | ||
|
37a3e1398e | ||
|
240ab79203 | ||
|
6e2ed8071b | ||
|
d5c63a8e56 | ||
|
d8caf09cf7 | ||
|
125e5ad689 | ||
|
2d39171b1f | ||
|
5b5d5b57ac | ||
|
d2cd7fff27 | ||
|
6ee7306e90 | ||
|
65852f2035 | ||
|
a7cbf6924d | ||
|
a93ef1db2c | ||
|
1c86092894 | ||
|
dabccff9b0 | ||
|
9de42a5a66 | ||
|
86ff66684c | ||
|
9ebb3a9f6f | ||
|
dbae9bd8e4 | ||
|
7bdd00c019 | ||
|
09e48c4084 | ||
|
fc80a90ff2 | ||
|
05670352c6 | ||
|
9e1ae22bf4 | ||
|
9e226d6d8a | ||
|
66a4c3ae7f | ||
|
a3079dae78 | ||
|
f0c0ee3d75 | ||
|
109c5c371e | ||
|
a932296420 | ||
|
b2ad9f3058 | ||
|
bf33f47b2c | ||
|
7051da903e | ||
|
e5fc8a4b8a | ||
|
062b3f5fef | ||
|
2e24ccbdcd | ||
|
1fcadc9ff7 | ||
|
c3a492cb89 | ||
|
6159ccaa96 | ||
|
d92c2a7b91 | ||
|
774d0d2e42 | ||
|
f84b040346 | ||
|
15e021e2ed | ||
|
279b876087 | ||
|
45357e2980 | ||
|
41b82454c4 | ||
|
37f6462673 | ||
|
e95949ae04 | ||
|
6e193f57ae | ||
|
b40447ed95 | ||
|
57f5a3594b | ||
|
4c3e73b3f9 | ||
|
460cc7eefd | ||
|
1a861c7f15 | ||
|
71a024649a | ||
|
93c004132f | ||
|
30b0a51209 | ||
|
82d9d6de55 | ||
|
e068a39c4d | ||
|
2826423e5b | ||
|
a53ab04ca2 | ||
|
354dcf2684 | ||
|
6d9c9bb51f | ||
|
66937f5743 | ||
|
77181cbc3b | ||
|
633e1e987d | ||
|
c7c61d05fb | ||
|
68a8555825 | ||
|
83b2bd483f | ||
|
d82ae0c86e | ||
|
b8009dd2ab | ||
|
b759386016 | ||
|
228b2d39cc | ||
|
8fcd4ef70b | ||
|
50d9816fa7 | ||
|
7ac25a098d | ||
|
f8e47ed4b1 | ||
|
4a09dc785f | ||
|
b85e325cd5 | ||
|
8c5adfdd50 | ||
|
f141588818 | ||
|
078069baf6 | ||
|
07fcfafedf | ||
|
c95e3e7b50 | ||
|
46d2ae91aa | ||
|
39cbeea15e | ||
|
7cfc5c3840 | ||
|
baea3f137f | ||
|
14f7c8718c | ||
|
8bb62a4abc | ||
|
9a03cd86d2 | ||
|
d8d655e516 | ||
|
436fec17d2 | ||
|
2d71d06dc5 | ||
|
80d4edb99c | ||
|
11f4cf6eeb | ||
|
29a2e404ed | ||
|
aa466d3827 | ||
|
8592d65589 | ||
|
ab9e7040d5 | ||
|
39b7ca719d | ||
|
26558ce1eb | ||
|
71d0d6f012 | ||
|
a88a07e421 | ||
|
c858c56ec9 | ||
|
b92e746e18 | ||
|
7b2f10e915 | ||
|
c042115cbb | ||
|
51c71d499f | ||
|
4d73d3fdf2 | ||
|
638993b49b | ||
|
b59567aab1 | ||
|
8b1a4f8dcf | ||
|
74593fa150 | ||
|
c69cb294a0 | ||
|
c1645fc9b9 | ||
|
d78004cef3 | ||
|
b9072c7940 | ||
|
4cb7ffe718 | ||
|
ac01df763d | ||
|
dc899e1bd1 | ||
|
c6afb4a173 | ||
|
446de79704 | ||
|
902fabd148 | ||
|
29e542eb74 | ||
|
2b541d0197 | ||
|
c83da97df5 | ||
|
7a4a446d82 | ||
|
c98258238b | ||
|
c47c6aa54c | ||
|
fca2faaeef | ||
|
c127297254 | ||
|
f14e93e17a | ||
|
99b2f8f0c5 | ||
|
41c4492ca6 | ||
|
554d79b740 | ||
|
75dca89737 | ||
|
18d06994bc | ||
|
f70c58d356 | ||
|
f9a582af5e | ||
|
e849077e52 | ||
|
416126f80c | ||
|
2dedba04b1 | ||
|
7e7642a96f | ||
|
6bebc47f84 | ||
|
6cc1f75d15 | ||
|
4469dd128c | ||
|
742fc51dc0 | ||
|
90f4e4da3f | ||
|
0305ab20f4 | ||
|
e2f72ca57e | ||
|
d3126bff70 | ||
|
79cf2ba7af | ||
|
3ce0af9a3d | ||
|
c57724dbd0 | ||
|
2ea430d054 | ||
|
9f38cef427 | ||
|
680f411e04 | ||
|
70febea204 | ||
|
4f0cacb224 | ||
|
4702f46b07 | ||
|
4378e42ef1 | ||
|
2b43e8a913 | ||
|
713f3675ab | ||
|
69aac18dc5 | ||
|
873a51e3db | ||
|
15a4765b6f | ||
|
3426712006 | ||
|
1182912724 | ||
|
e997fe797d | ||
|
ede42eefbd | ||
|
22495ad741 | ||
|
65e951a7ee | ||
|
25d5ca0a02 | ||
|
16c152e475 | ||
|
71380ffdf8 | ||
|
0c3f1f56a4 | ||
|
c78ea7eb66 | ||
|
c0a11e2477 | ||
|
1652b154b4 | ||
|
493422fb1b | ||
|
d61517ee3c | ||
|
87dfe8e651 | ||
|
79ad815ed6 | ||
|
1219deb83d | ||
|
904d6559d3 | ||
|
7082e1ab0d | ||
|
df6a526a99 | ||
|
137e61b6ce | ||
|
b936024113 | ||
|
998689aafd | ||
|
3a593ff56f | ||
|
ce839fead3 | ||
|
07a7f2fffa | ||
|
e69e30bad8 | ||
|
5056a4a4fb | ||
|
f7d12dd79a | ||
|
deb9678b54 | ||
|
6a71892799 | ||
|
ff7e30a1c0 | ||
|
acb54d7e8d | ||
|
e2bd472408 | ||
|
7bc1221249 | ||
|
24e91edc7e | ||
|
a0b637e4e9 | ||
|
abac1cce98 | ||
|
b6eeef358a | ||
|
ac33080404 | ||
|
90dd1c3bbe | ||
|
54ed4e60c5 | ||
|
4570a10241 | ||
|
192d46c682 | ||
|
806af873b4 | ||
|
47c391c679 | ||
|
3309316b18 | ||
|
094d448386 | ||
|
2df3d3a523 | ||
|
8b0d340344 | ||
|
e0269da493 | ||
|
3488bdfed1 | ||
|
622a26d575 | ||
|
e3cdb47f9e | ||
|
dfa9f2c7cb | ||
|
598b0b9b11 | ||
|
93deeb33d6 | ||
|
1306c9a0ba | ||
|
155d926479 | ||
|
39cb0e150a | ||
|
a5ca593b02 | ||
|
877d754c6a | ||
|
3837e5a22b | ||
|
94389990ed | ||
|
bdc6074790 | ||
|
7281ec7af7 |
43
.test/testblock.lua
Normal file
43
.test/testblock.lua
Normal file
@ -0,0 +1,43 @@
|
||||
local M = minetest.get_meta
|
||||
|
||||
minetest.register_node("techage:testblock", {
|
||||
description = "Testblock",
|
||||
tiles = {
|
||||
"techage_top_ta4.png",
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png",
|
||||
},
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=2, crumbly=2, choppy=2},
|
||||
is_ground_content = false,
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.test_val = 1
|
||||
M(pos):set_int("test_val", 1)
|
||||
M(pos):set_string("infotext", "Value = " .. 1)
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_lbm({
|
||||
label = "Update testblock",
|
||||
name = "techage:update_testblock",
|
||||
|
||||
nodenames = {
|
||||
"techage:testblock",
|
||||
},
|
||||
|
||||
run_at_every_load = true,
|
||||
|
||||
action = function(pos, node)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if M(pos):get_int("test_val") == nvm.test_val then
|
||||
nvm.test_val = nvm.test_val + 1
|
||||
M(pos):set_int("test_val", nvm.test_val)
|
||||
M(pos):set_string("infotext", "Value = " .. nvm.test_val)
|
||||
else
|
||||
minetest.log("error", "[techage] Memory error at " .. minetest.pos_to_string(pos))
|
||||
M(pos):set_string("infotext", "Error")
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
@ -629,8 +629,8 @@ to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
TechAge, a mod to go through 5 tech ages in search of wealth and power.
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
|
159
README.md
159
README.md
@ -2,12 +2,9 @@
|
||||
|
||||
Tech Age, a mod to go through 5 tech ages in search of wealth and power.
|
||||
|
||||
**Tech Age (techage) is the successor to TechPack V2, at first glance similar and yet completely different!**
|
||||
|
||||
![screenshot](https://github.com/joe7575/techage/blob/master/screenshot.png)
|
||||
|
||||
|
||||
|
||||
Important facts:
|
||||
- techage is not backwards compatible and cannot be installed on a server together with TechPack
|
||||
- techage is significantly more extensive, since additional mods are integrated
|
||||
@ -22,22 +19,26 @@ Important facts:
|
||||
In contrast to TechPack, the resources are more limited and it is much more difficult to pass all levels.
|
||||
(no endless ore generation by means of cobble generators)
|
||||
|
||||
**Techage blocks store information outside of the block. This is for performance reasons.
|
||||
If you move, place, or remove blocks with any tool, at best, only the information is lost.
|
||||
In the worst case, the server crashes.**
|
||||
|
||||
[Manuals](https://github.com/joe7575/techage/wiki)
|
||||
|
||||
|
||||
### License
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
Code: Licensed under the GNU AGPL version 3 or later. See LICENSE.txt
|
||||
Textures: CC BY-SA 3.0
|
||||
|
||||
The TA1 mill sound is from https://freesound.org/people/JustinBW/sounds/70200/
|
||||
The TA1 watermill sound is from https://freesound.org/people/bmoreno/sounds/164182/
|
||||
|
||||
Many thanks to Thomas-S and others for their contributions
|
||||
Many thanks to Thomas-S, niklp09, and others for their contributions
|
||||
|
||||
|
||||
### Dependencies
|
||||
Required: default, doors, bucket, stairs, screwdriver, basic_materials, tubelib2, networks, minecart, lcdlib, safer_lua
|
||||
Required: default, doors, bucket, stairs, screwdriver, basic_materials, tubelib2, networks, minecart, lcdlib, safer_lua, doclib
|
||||
Recommended: signs_bot, hyperloop, compost, techpack_stairway, autobahn
|
||||
Optional: unified_inventory, wielded_light, unifieddyes, lua-mashal, lsqlite3, moreores, ethereal, mesecon
|
||||
|
||||
@ -52,6 +53,7 @@ The following mods in the newest version have to be downloaded directly from Git
|
||||
* [minecart](https://github.com/joe7575/minecart)
|
||||
* [lcdlib](https://github.com/joe7575/lcdlib)
|
||||
* [safer_lua](https://github.com/joe7575/safer_lua)
|
||||
* [doclib](https://github.com/joe7575/doclib)
|
||||
|
||||
It is highly recommended that you install the following mods, too:
|
||||
|
||||
@ -60,26 +62,153 @@ It is highly recommended that you install the following mods, too:
|
||||
* [compost](https://github.com/joe7575/compost): The garden soil is needed for the TA4 LED Grow Light based flower bed
|
||||
* [techpack_stairway](https://github.com/joe7575/techpack_stairway): Ladders, stairways, and bridges for your machines
|
||||
* [autobahn](https://github.com/joe7575/autobahn): Street blocks and slopes with stripes for faster traveling
|
||||
* [[ta4_jetpack](https://github.com/joe7575/ta4_jetpack): A Jetpack with hydrogen as fuel and TA4 recipe
|
||||
* [ta4_jetpack](https://github.com/joe7575/ta4_jetpack): A Jetpack with hydrogen as fuel and TA4 recipe
|
||||
|
||||
For large servers with many player `lsqlite3` is recommended.
|
||||
The package has to be installed via [luarocks](https://luarocks.org/):
|
||||
More recommended Techage related mods by other authors:
|
||||
|
||||
luarocks install lsqlite3
|
||||
* [ta4_addons](https://github.com/Thomas--S/ta4_addons) from Thomas--S: A Touchscreen for the Lua controller
|
||||
* [ts_vehicles](https://github.com/Thomas--S/ts_vehicles) from Thomas--S: A mod to provide cars and other vehicles for Minetest.
|
||||
* [ta_apiary](https://gitlab.com/lesya_minetest_mods/ta_apiary) from Olesya Sibidanova: TechAge Machines for beekeeping
|
||||
|
||||
To enable this `unsafe` package, add 'techage' to the list of trusted mods in minetest.conf:
|
||||
For large servers with many players, the following packages are recommended:
|
||||
|
||||
secure.trusted_mods = techage
|
||||
* lua-mashal for faster serialization/deserialization of data
|
||||
* lsqlite3 for storing node and network data
|
||||
|
||||
For the installation of 'luarocks' (if not already available), see [luarocks](https://luarocks.org/)
|
||||
The packages have to be installed via [luarocks](https://luarocks.org/):
|
||||
|
||||
luarocks --lua-version 5.1 install lsqlite3
|
||||
luarocks --lua-version 5.1 install lua-marshal
|
||||
|
||||
To enable these `unsafe` packages, add 'techage' and 'lua-marshal'
|
||||
to the list of trusted mods in `minetest.conf`:
|
||||
|
||||
secure.trusted_mods = techage,lua-marshal
|
||||
|
||||
and add the following line to your `world.mt` or `minetest.conf`:
|
||||
|
||||
techage_use_sqlite = true
|
||||
|
||||
Available worlds will be converted to 'lsqlite3', but there is no way back, so:
|
||||
|
||||
** Never disable 'lsqlite3' for a world that has already been used!**
|
||||
|
||||
**Never disable 'lsqlite3' for a world that has already been used!**
|
||||
|
||||
### History
|
||||
|
||||
**2023-11-05 V1.18**
|
||||
|
||||
- Add TA2 clutch
|
||||
- TA5 Generator: Add generator menu
|
||||
- TA4 Injector: Allow rotation with a screwdriver
|
||||
- Escape equal sign in german translation (Niklp09)
|
||||
- Autocrafter: Add Beduino command interface
|
||||
- Autocrafter: Add flush command
|
||||
- Fix converter stores mesecon signals (Niklp09)
|
||||
- TA1 Gravel Sieve: Use proper player creative check (Niklp09)
|
||||
- TA4 Chest: Add storesize command
|
||||
- Improve Assembly Tool
|
||||
- Furnace: Fix burn time issue
|
||||
- Allow further types of cobblestone for the coalburner
|
||||
- Fix water mill river water bug (alwayshopeless)
|
||||
- Improve manual
|
||||
- Further improvements
|
||||
|
||||
**2023-08-25 V1.17**
|
||||
|
||||
- Add support for doclib / remove techage internal doc support
|
||||
**The mod doclib is a new hard depenency !**
|
||||
- Fix LICENCSE file bug
|
||||
- Add beduino support for TA3 repeater (realmicu)
|
||||
- Add inv_name_prefix to `techage.register_consumer` (debiankaios)
|
||||
- Add generator menu to TA5 generator (fusion reactor)
|
||||
- Adapt mod to the new lcdlib mod
|
||||
- Fix some bugs
|
||||
|
||||
**2023-06-30 V1.16**
|
||||
|
||||
- Add TA4 node detector
|
||||
- Add wrench menu to TA3 button
|
||||
- Add arrows to the pump bottom and allow to turn the pump with the Techage Screwdriver
|
||||
- Fix bug with configurred TA4 chest and TA5 teleport tubes
|
||||
- Add gaze sensor
|
||||
- Many bugfixes and improvements
|
||||
|
||||
**2023-05-05 V1.15**
|
||||
|
||||
- Allow energy storage with up to 13x13x13 concrete blocks
|
||||
- Allow registration of other buckets
|
||||
- Add hyperloop chest only if the hyperloop mod is available
|
||||
- Add missing 'minetest.formspec_escape' #131
|
||||
- Fix bug "Trouble with flycontroller #130"
|
||||
- Add optional dependency on farming mod (orwell96)
|
||||
- Fix forceload formspec receiver (Niklp09)
|
||||
|
||||
**2023-04-16 V1.14**
|
||||
|
||||
- Add file "api.md"
|
||||
- Add API function `register_ore_for_gravelsieve`
|
||||
- Add support for the game Asuna
|
||||
- Merge pull request #124 from Niklp09/drops
|
||||
- Fix keep node number issue
|
||||
- Fix manual issue #123
|
||||
|
||||
**2023-04-10 V1.13**
|
||||
|
||||
- Add "Teleport mode" to the ta5 fly controller
|
||||
|
||||
**2023-04-01 V1.12**
|
||||
|
||||
- Improve Transformer:
|
||||
- add wrench menu for 'max. power passed through'
|
||||
- Increase max. power passed through from 100 to 300 ku
|
||||
- Improve Electricmeter:
|
||||
- add wrench menu for 'max. power passed through' and 'power countdown' 2458
|
||||
- add commands to read the countdown value (Lua and Beduino controller)
|
||||
- Improve TA3 Mesecons Converter:
|
||||
- fix overload bug
|
||||
- fix missing dominant 'on' issue
|
||||
- Add version command to TA3/TA4 Terminal
|
||||
- TA5 Hyperloop Chest: Disable inventory access on client side due to minetest core issues
|
||||
|
||||
**2023-03-05 V1.11**
|
||||
|
||||
- Reduce the number of necessary exp points for TA5 Hyperloop Chest,
|
||||
TA5 Hyperloop Tank, and TA5 AI Chip II
|
||||
- Fix possible kernel crashes with TA5 Hyperloop Chest and autocrafter
|
||||
- Rework doorcontroller (menu changed)
|
||||
- Increase tank cart storage size to 200 units
|
||||
- Fix several paramtype/use_texture_alpha issues
|
||||
- Add command 'load' to the TA4 power terminal
|
||||
- Add beduino tank commands
|
||||
- Fix power consumption bug for a stopped collider
|
||||
- Fix electrolyzer formspec bug
|
||||
- Add Rack and pinion node
|
||||
- Expand ta4 sequencer wrench menu
|
||||
- Accept mincart carts for the move controller
|
||||
- movecontroller: Allow to move objects 'without' a move block
|
||||
- Add empty_spool as fab output
|
||||
- Fix doser goes blocked bug
|
||||
|
||||
**2023-02-04 V1.10**
|
||||
- Improve flycontroller
|
||||
- Remove handover for movecontroller
|
||||
- Rename "techage:signal_lamp" to "techage:color_lamp"
|
||||
- Rename "techage:signal_lamp2" to "techage:color_lamp2"
|
||||
- Add countdown mode to TA4 Detector
|
||||
- Adapt to new beduino and minecart versions
|
||||
- Improve manuals
|
||||
- flycontroller/movecontroller: Allow moving blocks through unloaded areas
|
||||
- playerdetector: Add wrench menu to configure search radius
|
||||
- Default furnace: Don't use items filled from the top as fuel
|
||||
- Many further improvements and bug fixes from joe7575 and Niklp09
|
||||
|
||||
**2022-09-03 V1.09**
|
||||
- Change the way items are pushed
|
||||
- Add "Flow Limiter" mode to TA4 pump and TA4 pusher
|
||||
|
||||
**2022-06-06 V1.08**
|
||||
- Native support for the mod Beduino added
|
||||
|
||||
**2022-01-22 V1.07**
|
||||
- TA5 fusion reactor added
|
||||
|
||||
|
225
api.md
Normal file
225
api.md
Normal file
@ -0,0 +1,225 @@
|
||||
# Techage API Functions
|
||||
|
||||
Techage API function to adapt/prepare techage for other mods/games.
|
||||
|
||||
|
||||
|
||||
## Move/Fly Controller
|
||||
|
||||
Register node names for nodes allowed to be moved by fly/move controllers.
|
||||
|
||||
This is only necessary for undiggable/intelligent nodes with one of the following attributes:
|
||||
|
||||
- ```drop = ""```
|
||||
- ```diggable = false```
|
||||
- ```after_dig_node ~= nil```
|
||||
|
||||
```lua
|
||||
techage.register_simple_nodes(node_names, is_valid)
|
||||
```
|
||||
|
||||
- `is_valid = true` - Add node to the list of simple nodes
|
||||
- `is_valid = false` - Remove node from the list of simple nodes
|
||||
|
||||
Example:
|
||||
|
||||
```lua
|
||||
techage.register_simple_nodes({"techage:power_lineS"}, true)
|
||||
```
|
||||
|
||||
For door nodes used as sliding doors by means of the move controller, call in addition:
|
||||
|
||||
```lua
|
||||
techage.flylib.protect_door_from_being_opened(node_name)
|
||||
```
|
||||
|
||||
|
||||
|
||||
## TA1 Hammer
|
||||
|
||||
Register stone/gravel name pair for the hammer blow:
|
||||
|
||||
```lua
|
||||
techage.register_stone_gravel_pair(stone_name, gravel_name)
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```lua
|
||||
techage.register_stone_gravel_pair("default:stone", "default:gravel")
|
||||
```
|
||||
|
||||
|
||||
|
||||
## TA1 Melting Pot
|
||||
|
||||
Register a pot recipe:
|
||||
|
||||
```lua
|
||||
techage.ironage_register_recipe(recipe)
|
||||
```
|
||||
|
||||
Examples:
|
||||
|
||||
```lua
|
||||
techage.ironage_register_recipe({
|
||||
output = "default:obsidian",
|
||||
recipe = {"default:cobble"},
|
||||
heat = 10, -- Corresponds to the tower height
|
||||
time = 8, -- Cooking time in seconds
|
||||
})
|
||||
techage.ironage_register_recipe({
|
||||
output = "default:bronze_ingot 4",
|
||||
recipe = {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot", "default:tin_ingot"},
|
||||
heat = 4, -- Corresponds to the tower height
|
||||
time = 8, -- Cooking time in seconds
|
||||
})
|
||||
```
|
||||
|
||||
|
||||
|
||||
## TA2/TA3/TA4 Autocrafter
|
||||
|
||||
Register any nodes/items that should not be crafted via the autocrafter.
|
||||
|
||||
```lua
|
||||
techage.register_uncraftable_items(item_name)
|
||||
```
|
||||
|
||||
|
||||
|
||||
## TA2/TA3/TA4 Gravel Sieve
|
||||
|
||||
Change the probability of ores or register new ores for sieving.
|
||||
|
||||
```lua
|
||||
techage.register_ore_for_gravelsieve(ore_name, probability)
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```lua
|
||||
techage.register_ore_for_gravelsieve("default:iron_lump", 30)
|
||||
```
|
||||
|
||||
Default values for MTG are:
|
||||
|
||||
```lua
|
||||
-- higher value means less frequent occurrence
|
||||
techage:baborium_lump 100000 -- hardly ever
|
||||
default:mese_crystal 548 -- every 548th time
|
||||
default:gold_lump 439
|
||||
default:tin_lump 60
|
||||
default:diamond 843
|
||||
default:copper_lump 145
|
||||
default:coal_lump 11
|
||||
default:iron_lump 15
|
||||
```
|
||||
|
||||
|
||||
|
||||
## TA2/TA3/TA4 Gravel Rinser
|
||||
|
||||
Add a rinser recipe.
|
||||
|
||||
```lua
|
||||
techage.add_rinser_recipe(recipe)
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```lua
|
||||
techage.add_rinser_recipe({input = "techage:sieved_gravel", output = "techage:usmium_nuggets", probability = 30})
|
||||
```
|
||||
|
||||
|
||||
|
||||
## TA2/TA3/TA4 Grinder
|
||||
|
||||
Add a grinder recipe.
|
||||
|
||||
```lua
|
||||
techage.add_grinder_recipe(recipe, ta1_permitted)
|
||||
```
|
||||
|
||||
Examples:
|
||||
|
||||
```lua
|
||||
echage.add_grinder_recipe({input = "default:cobble", output = "default:gravel"})
|
||||
techage.add_grinder_recipe({input = "default:sandstone", output = "default:sand 4"})
|
||||
```
|
||||
|
||||
|
||||
|
||||
## TA3/TA4 Electronic Fab, TA4 Doser
|
||||
|
||||
Add recipes to an electronic fab or doser (chemical reactor):
|
||||
|
||||
|
||||
```lua
|
||||
techage.recipes.add(rtype, recipe)
|
||||
```
|
||||
|
||||
`rtype` is one of: `ta2_electronic_fab` , `ta4_doser`
|
||||
|
||||
A recipe look like:
|
||||
|
||||
```
|
||||
{
|
||||
output = "<item-name> <units>", -- units = 1..n
|
||||
waste = "<item-name> <units>", -- units = 1..n
|
||||
input = { -- up to 4 items
|
||||
"<item-name> <units>",
|
||||
"<item-name> <units>",
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Examples:
|
||||
|
||||
```lua
|
||||
techage.recipes.add("ta2_electronic_fab", {
|
||||
output = "techage:vacuum_tube 2",
|
||||
waste = "basic_materials:empty_spool 1",
|
||||
input = {"default:glass 1", "basic_materials:copper_wire 1", "basic_materials:plastic_sheet 1", "techage:usmium_nuggets 1"}
|
||||
})
|
||||
|
||||
techage.recipes.add("ta4_doser", {
|
||||
output = "techage:naphtha 1",
|
||||
input = {
|
||||
"techage:fueloil 1",
|
||||
},
|
||||
catalyst = "techage:gibbsite_powder",
|
||||
})
|
||||
```
|
||||
|
||||
|
||||
|
||||
## TA3 Furnace
|
||||
|
||||
Register recipe:
|
||||
|
||||
```lua
|
||||
techage.furnace.register_recipe(recipe)
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```lua
|
||||
techage.furnace.register_recipe({
|
||||
output = "default:bronze_ingot 4",
|
||||
recipe = {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot", "default:tin_ingot"},
|
||||
time = 2, -- in seconds
|
||||
})
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Assembly Tool
|
||||
|
||||
Disable a block from being removed by the assembly tool:
|
||||
|
||||
```lua
|
||||
techage.disable_block_for_assembly_tool(block_name)
|
||||
```
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -68,6 +68,21 @@ local function count_index(invlist)
|
||||
return index
|
||||
end
|
||||
|
||||
local function flush_input_inventory(pos)
|
||||
local inv = M(pos):get_inventory()
|
||||
if not inv:is_empty("src") then
|
||||
for idx = 1, 16 do
|
||||
local stack = inv:get_stack("src", idx)
|
||||
if not inv:room_for_item("dst", stack) then
|
||||
return false
|
||||
end
|
||||
inv:add_item("dst", stack)
|
||||
inv:set_stack("src", idx, nil)
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- caches some recipe data
|
||||
local autocrafterCache = {}
|
||||
|
||||
@ -224,13 +239,18 @@ local function on_output_change(pos, inventory, stack)
|
||||
end
|
||||
|
||||
local function determine_recipe_items(pos, input)
|
||||
if input and type(input) == "string" then
|
||||
-- Test if "<node-number>.<recipe-number>" input
|
||||
local num, idx = unpack(string.split(input, ".", false, 1))
|
||||
if num and idx then
|
||||
input = get_input_from_recipeblock(pos, num, idx)
|
||||
end
|
||||
local num, idx
|
||||
|
||||
if input and type(input) == "string" then -- Lua controller
|
||||
-- Test if "<node-number>.<recipe-number>" input
|
||||
num, idx = unpack(string.split(input, ".", false, 1))
|
||||
elseif input and type(input) == "table" then -- Beduino
|
||||
num = tostring(input[1] * 65536 + input[2])
|
||||
idx = tostring(input[3])
|
||||
end
|
||||
|
||||
if num and idx then
|
||||
input = get_input_from_recipeblock(pos, num, idx)
|
||||
if input then
|
||||
-- "<item>,<item>,..." input
|
||||
local items = string.split(input, ",", true, 8)
|
||||
@ -243,29 +263,28 @@ end
|
||||
|
||||
local function on_new_recipe(pos, input)
|
||||
local items = determine_recipe_items(pos, input)
|
||||
local inv = M(pos):get_inventory()
|
||||
if items then
|
||||
input = {
|
||||
method = "normal",
|
||||
width = 3,
|
||||
items = items,
|
||||
}
|
||||
local output, _ = minetest.get_craft_result(input)
|
||||
if output.item:get_name() ~= "" then
|
||||
local inv = M(pos):get_inventory()
|
||||
for i = 1, 9 do
|
||||
inv:set_stack("recipe", i, input.items[i])
|
||||
end
|
||||
after_recipe_change(pos, inv)
|
||||
for i = 1, 9 do
|
||||
inv:set_stack("recipe", i, items[i])
|
||||
end
|
||||
else
|
||||
local inv = M(pos):get_inventory()
|
||||
inv:set_list("recipe", {})
|
||||
after_recipe_change(pos, inv)
|
||||
end
|
||||
local hash = minetest.hash_node_position(pos)
|
||||
autocrafterCache[hash] = nil
|
||||
local craft = get_craft(pos, inv, hash)
|
||||
if craft.output and craft.output.item then
|
||||
inv:set_stack("output", 1, craft.output.item)
|
||||
else
|
||||
inv:set_stack("output", 1, nil)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if listname == "output" then
|
||||
return 0
|
||||
end
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
@ -285,6 +304,9 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_take(pos, listname, index, stack, player)
|
||||
if listname == "output" then
|
||||
return 0
|
||||
end
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
@ -302,6 +324,9 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
if from_list == "output" or "to_list" == "output" then
|
||||
return 0
|
||||
end
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
@ -364,7 +389,7 @@ tiles.pas = {
|
||||
tiles.act = {
|
||||
-- up, down, right, left, back, front
|
||||
{
|
||||
image = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#_top.png",
|
||||
name = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#_top.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -377,7 +402,7 @@ tiles.act = {
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png",
|
||||
{
|
||||
image = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#.png",
|
||||
name = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -387,7 +412,7 @@ tiles.act = {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#.png",
|
||||
name = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -434,19 +459,36 @@ local tubing = {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
if topic == "recipe" and CRD(pos).stage == 4 then
|
||||
if payload and payload ~= "" then
|
||||
local inv = M(pos):get_inventory()
|
||||
on_new_recipe(pos, payload)
|
||||
return true
|
||||
else
|
||||
local inv = M(pos):get_inventory()
|
||||
return inv:get_stack("output", 1):get_name()
|
||||
end
|
||||
elseif topic == "flush" and CRD(pos).stage == 4 then
|
||||
return flush_input_inventory(pos)
|
||||
elseif topic == "info" and CRD(pos).stage == 4 then
|
||||
return INFO
|
||||
else
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
if topic == 10 and CRD(pos).stage == 4 then
|
||||
on_new_recipe(pos, payload)
|
||||
return 1, ""
|
||||
elseif topic == 11 and CRD(pos).stage == 4 then
|
||||
if flush_input_inventory(pos) then
|
||||
return 1, ""
|
||||
else
|
||||
return 0, ""
|
||||
end
|
||||
end
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
on_node_load = function(pos)
|
||||
CRD(pos).State:on_node_load(pos)
|
||||
end,
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -180,6 +180,15 @@ techage.register_node({"techage:chest_ta2", "techage:chest_ta3"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
if topic == 131 then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return 0, {techage.get_inv_state_num(inv, "main")}
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
@ -412,6 +421,15 @@ techage.register_node({"techage:chest_ta4"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
if topic == 131 then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return 0, {techage.get_inv_state_num(inv, "main")}
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -65,10 +65,18 @@ local names = networks.register_junction("techage:concentrator", 2/8, Boxes, Tub
|
||||
end,
|
||||
}, 27)
|
||||
|
||||
for _, name in ipairs(names) do
|
||||
Tube:set_valid_sides(name, {"B", "R", "F", "L", "D", "U"})
|
||||
end
|
||||
|
||||
techage.register_node(names, {
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
local push_dir = M(pos):get_int("push_dir")
|
||||
return techage.safe_push_items(pos, push_dir, stack)
|
||||
if networks.Flip[push_dir] ~= in_dir then
|
||||
return techage.safe_push_items(pos, push_dir, stack)
|
||||
else
|
||||
return stack
|
||||
end
|
||||
end,
|
||||
is_pusher = true, -- is a pulling/pushing node
|
||||
})
|
||||
@ -110,10 +118,18 @@ names = networks.register_junction("techage:ta4_concentrator", 2/8, Boxes, Tube,
|
||||
end,
|
||||
}, 27)
|
||||
|
||||
for _, name in ipairs(names) do
|
||||
Tube:set_valid_sides(name, {"B", "R", "F", "L", "D", "U"})
|
||||
end
|
||||
|
||||
techage.register_node(names, {
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
local push_dir = M(pos):get_int("push_dir")
|
||||
return techage.safe_push_items(pos, push_dir, stack)
|
||||
if networks.Flip[push_dir] ~= in_dir then
|
||||
return techage.safe_push_items(pos, push_dir, stack)
|
||||
else
|
||||
return stack
|
||||
end
|
||||
end,
|
||||
is_pusher = true, -- is a pulling/pushing node
|
||||
})
|
||||
|
@ -104,7 +104,7 @@ local function prepare_tiles(tiles, stage, power_png)
|
||||
tbl[#tbl+1] = item:gsub("#", stage):gsub("{power}", power_png):gsub("@@", '#')
|
||||
else
|
||||
local temp = table.copy(item)
|
||||
temp.image = temp.image:gsub("#", stage):gsub("{power}", power_png):gsub("@@", '#')
|
||||
temp.name = temp.name:gsub("#", stage):gsub("{power}", power_png):gsub("@@", '#')
|
||||
tbl[#tbl+1] = temp
|
||||
end
|
||||
end
|
||||
@ -113,16 +113,21 @@ end
|
||||
|
||||
-- 'validStates' is optional and can be used to e.g. enable
|
||||
-- only one TA2 node {false, true, false, false}
|
||||
function techage.register_consumer(base_name, inv_name, tiles, tNode, validStates, node_name_prefix)
|
||||
function techage.register_consumer(base_name, inv_name, tiles, tNode, validStates, node_name_prefix, inv_name_prefix)
|
||||
local names = {}
|
||||
validStates = validStates or {true, true, true, true}
|
||||
if not node_name_prefix then
|
||||
node_name_prefix = "techage:ta"
|
||||
|
||||
node_name_prefix = node_name_prefix or "techage:ta"
|
||||
if inv_name_prefix then
|
||||
inv_name_prefix = inv_name_prefix.." "
|
||||
else
|
||||
inv_name_prefix = ""
|
||||
end
|
||||
|
||||
for stage = 2,5 do
|
||||
local name_pas = node_name_prefix..stage.."_"..base_name.."_pas"
|
||||
local name_act = node_name_prefix..stage.."_"..base_name.."_act"
|
||||
local name_inv = "TA"..stage.." "..inv_name
|
||||
local name_inv = inv_name_prefix.."TA"..stage.." "..inv_name
|
||||
names[#names+1] = name_pas
|
||||
|
||||
if validStates[stage] then
|
||||
@ -230,6 +235,8 @@ function techage.register_consumer(base_name, inv_name, tiles, tNode, validState
|
||||
on_metadata_inventory_put = tNode.on_metadata_inventory_put,
|
||||
on_metadata_inventory_take = tNode.on_metadata_inventory_take,
|
||||
ta_rotate_node = tNode.ta_rotate_node,
|
||||
ta3_formspec = stage == 3 and tNode.ta3_formspec,
|
||||
ta4_formspec = stage == 4 and tNode.ta4_formspec,
|
||||
|
||||
paramtype = tNode.paramtype,
|
||||
paramtype2 = "facedir",
|
||||
@ -271,6 +278,8 @@ function techage.register_consumer(base_name, inv_name, tiles, tNode, validState
|
||||
on_metadata_inventory_put = tNode.on_metadata_inventory_put,
|
||||
on_metadata_inventory_take = tNode.on_metadata_inventory_take,
|
||||
ta_rotate_node = tNode.ta_rotate_node,
|
||||
ta3_formspec = stage == 3 and tNode.ta3_formspec,
|
||||
ta4_formspec = stage == 4 and tNode.ta4_formspec,
|
||||
|
||||
paramtype = tNode.paramtype,
|
||||
paramtype2 = "facedir",
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -34,6 +34,7 @@ local INFO = [[Turn port on/off or read its state: command = 'port', payload = r
|
||||
|
||||
--local Side2Color = {B="red", L="green", F="blue", R="yellow"}
|
||||
local SlotColors = {"red", "green", "blue", "yellow"}
|
||||
local SlotNumbers = {red = 1, green = 2, blue = 3, yellow = 4}
|
||||
local Num2Ascii = {"B", "L", "F", "R"}
|
||||
local FilterCache = {} -- local cache for filter settings
|
||||
|
||||
@ -276,10 +277,17 @@ local function push_item(pos, base_filter, itemstack, num_items, nvm)
|
||||
num_of_trials = num_of_trials + 1
|
||||
local push_dir = filter[idx]
|
||||
local num_to_push = math.min(amount, num_items - num_pushed)
|
||||
if techage.push_items(pos, push_dir, itemstack:peek_item(num_to_push)) then
|
||||
num_pushed = num_pushed + num_to_push
|
||||
nvm.port_counter[push_dir] = (nvm.port_counter[push_dir] or 0) + num_to_push
|
||||
local leftover = techage.push_items(pos, push_dir, itemstack:peek_item(num_to_push))
|
||||
local pushed
|
||||
if not leftover then
|
||||
pushed = 0
|
||||
elseif leftover ~= true then
|
||||
pushed = num_to_push - leftover:get_count()
|
||||
else -- leftover == true
|
||||
pushed = num_to_push
|
||||
end
|
||||
num_pushed = num_pushed + pushed
|
||||
nvm.port_counter[push_dir] = (nvm.port_counter[push_dir] or 0) + pushed
|
||||
-- filter start offset
|
||||
idx = idx + 1
|
||||
if idx > num_ports then
|
||||
@ -383,16 +391,16 @@ end
|
||||
|
||||
-- techage command to turn on/off filter channels
|
||||
local function change_filter_settings(pos, slot, val)
|
||||
local slots = {["red"] = 1, ["green"] = 2, ["blue"] = 3, ["yellow"] = 4}
|
||||
local meta = M(pos)
|
||||
local filter = minetest.deserialize(meta:get_string("filter")) or {false,false,false,false}
|
||||
local num = slots[slot] or 1
|
||||
local num = SlotNumbers[slot] or 1
|
||||
if num >= 1 and num <= 4 then
|
||||
filter[num] = val == "on"
|
||||
end
|
||||
meta:set_string("filter", minetest.serialize(filter))
|
||||
|
||||
filter_settings(pos)
|
||||
local hash = minetest.hash_node_position(pos)
|
||||
FilterCache[hash] = nil
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
meta:set_string("formspec", formspec(CRD(pos).State, pos, nvm))
|
||||
@ -401,9 +409,45 @@ end
|
||||
|
||||
-- techage command to read filter channel status (on/off)
|
||||
local function read_filter_settings(pos, slot)
|
||||
local slots = {["red"] = 1, ["green"] = 2, ["blue"] = 3, ["yellow"] = 4}
|
||||
local filter = minetest.deserialize(M(pos):get_string("filter")) or {false,false,false,false}
|
||||
return filter[slots[slot]] and "on" or "off"
|
||||
return filter[SlotNumbers[slot]] and "on" or "off"
|
||||
end
|
||||
|
||||
local function get_payload_values(payload)
|
||||
local color
|
||||
local idx = 0
|
||||
local items = {ItemStack(""), ItemStack(""), ItemStack(""), ItemStack(""), ItemStack(""), ItemStack("")}
|
||||
for s in payload:gmatch("[^%s]+") do --- white spaces
|
||||
if not color then
|
||||
if SlotNumbers[s] then
|
||||
color = s
|
||||
else
|
||||
return "red", {}
|
||||
end
|
||||
else
|
||||
idx = idx + 1
|
||||
if idx <= 6 then
|
||||
items[idx] = ItemStack(s)
|
||||
end
|
||||
end
|
||||
end
|
||||
return color, items
|
||||
end
|
||||
|
||||
local function str_of_inv_items(pos, color)
|
||||
color = SlotColors[color] or color
|
||||
if SlotNumbers[color] then
|
||||
local inv = M(pos):get_inventory()
|
||||
local t = {}
|
||||
for idx = 1, 6 do
|
||||
local item = inv:get_stack(color, idx)
|
||||
if item:get_count() > 0 then
|
||||
t[#t + 1] = item:get_name()
|
||||
end
|
||||
end
|
||||
return table.concat(t, " ")
|
||||
end
|
||||
return ""
|
||||
end
|
||||
|
||||
local function can_dig(pos, player)
|
||||
@ -431,7 +475,7 @@ local get_tiles = function(is_hp)
|
||||
tiles.act = {
|
||||
-- up, down, right, left, back, front
|
||||
{
|
||||
image = "techage_filling4_ta#.png^techage_appl_distri4.png^techage_frame4_ta#_top"..variant..".png^techage_appl_color_top4.png",
|
||||
name = "techage_filling4_ta#.png^techage_appl_distri4.png^techage_frame4_ta#_top"..variant..".png^techage_appl_color_top4.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -474,10 +518,47 @@ local tubing = {
|
||||
else
|
||||
return change_filter_settings(pos, slot, val)
|
||||
end
|
||||
elseif topic == "config" then
|
||||
local color, items = get_payload_values(payload)
|
||||
local inv = M(pos):get_inventory()
|
||||
for idx,item in ipairs(items) do
|
||||
inv:set_stack(color, idx, item)
|
||||
end
|
||||
local hash = minetest.hash_node_position(pos)
|
||||
FilterCache[hash] = nil
|
||||
return true
|
||||
elseif topic == "get" then
|
||||
return str_of_inv_items(pos, payload)
|
||||
else
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
if topic == 4 then
|
||||
local slot = SlotColors[payload[1]]
|
||||
local state = payload[2] == 1 and "on" or "off"
|
||||
change_filter_settings(pos, slot, state)
|
||||
return 0
|
||||
elseif topic == 67 then
|
||||
local color, items = get_payload_values(payload)
|
||||
local inv = M(pos):get_inventory()
|
||||
for idx,item in ipairs(items) do
|
||||
inv:set_stack(color, idx, item)
|
||||
end
|
||||
local hash = minetest.hash_node_position(pos)
|
||||
FilterCache[hash] = nil
|
||||
return 0
|
||||
else
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
if topic == 148 then
|
||||
return 0, str_of_inv_items(pos, payload[1])
|
||||
else
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_node_load = function(pos)
|
||||
CRD(pos).State:on_node_load(pos)
|
||||
end,
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -26,7 +26,7 @@ local recipes = techage.recipes
|
||||
|
||||
local RecipeType = {
|
||||
[2] = "ta2_electronic_fab",
|
||||
[3] = "ta3_electronic_fab",
|
||||
[3] = "ta3_electronic_fab",
|
||||
[4] = "ta4_electronic_fab",
|
||||
}
|
||||
|
||||
@ -73,11 +73,26 @@ 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]
|
||||
local recipe = recipes.get(nvm, rtype)
|
||||
local output = ItemStack(recipe.output.name.." "..recipe.output.num)
|
||||
if inv:room_for_item("dst", output) then
|
||||
local recipe = recipes.get(nvm, rtype, owner)
|
||||
local output = ItemStack(recipe.output.name .. " " .. recipe.output.num)
|
||||
local waste = recipe.waste and ItemStack(recipe.waste.name .. " " .. recipe.waste.num)
|
||||
if inv:room_for_item("dst", output) and (not waste or inv:room_for_item("dst", waste)) then
|
||||
for _,item in ipairs(recipe.input) do
|
||||
local input = ItemStack(item.name.." "..item.num)
|
||||
if not inv:contains_item("src", input) then
|
||||
@ -85,11 +100,25 @@ 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)
|
||||
end
|
||||
inv:add_item("dst", output)
|
||||
if waste then
|
||||
inv:add_item("dst", waste)
|
||||
end
|
||||
crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS)
|
||||
return
|
||||
end
|
||||
@ -147,7 +176,7 @@ tiles.act = {
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png",
|
||||
{
|
||||
image = "techage_filling4_ta#.png^techage_appl_electronic_fab4.png^techage_frame4_ta#.png",
|
||||
name = "techage_filling4_ta#.png^techage_appl_electronic_fab4.png^techage_frame4_ta#.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -157,7 +186,7 @@ tiles.act = {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta#.png^techage_appl_electronic_fab4.png^techage_frame4_ta#.png",
|
||||
name = "techage_filling4_ta#.png^techage_appl_electronic_fab4.png^techage_frame4_ta#.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -202,6 +231,12 @@ local tubing = {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
on_node_load = function(pos)
|
||||
CRD(pos).State:on_node_load(pos)
|
||||
end,
|
||||
|
@ -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,16 +92,20 @@ 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 shoe_flbs(pos, name, range)
|
||||
local function show_flbs(pos, name, range)
|
||||
local pos1 = {x=pos.x-range, y=pos.y-range, z=pos.z-range}
|
||||
local pos2 = {x=pos.x+range, y=pos.y+range, z=pos.z+range}
|
||||
for _,npos in ipairs(minetest.find_nodes_in_area(pos1, pos2, {"techage:forceload", "techage:forceloadtile"})) do
|
||||
local _pos1, _pos2 = calc_area(npos)
|
||||
local owner = M(npos):get_string("owner")
|
||||
techage.mark_region(name, _pos1, _pos2, owner)
|
||||
techage.mark_region(name, _pos1, _pos2, owner .. " " .. P2S(npos))
|
||||
end
|
||||
end
|
||||
|
||||
@ -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
|
||||
|
||||
@ -169,7 +183,7 @@ local function on_rightclick(pos, node, clicker, itemstack, pointed_thing)
|
||||
if name == owner or minetest.check_player_privs(name, "server") then
|
||||
local s = formspec(owner)
|
||||
if s then
|
||||
minetest.show_formspec(owner, "techage:forceload", s)
|
||||
minetest.show_formspec(name, "techage:forceload", s)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -186,7 +200,7 @@ minetest.register_node("techage:forceload", {
|
||||
'techage_filling_ta2.png^techage_frame_ta2_top.png',
|
||||
'techage_filling_ta2.png^techage_frame_ta2_top.png',
|
||||
{
|
||||
image = "techage_filling_ta2.png^techage_frame_ta2_top.png^techage_appl_forceload.png",
|
||||
name = "techage_filling_ta2.png^techage_frame_ta2_top.png^techage_appl_forceload.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -204,6 +218,7 @@ minetest.register_node("techage:forceload", {
|
||||
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
use_texture_alpha = techage.CLIP,
|
||||
groups = {choppy=2, cracky=2, crumbly=2,
|
||||
digtron_protected = 1,
|
||||
not_in_creative_inventory = techage.max_num_forceload_blocks == 0 and 1 or 0},
|
||||
@ -216,7 +231,7 @@ minetest.register_node("techage:forceloadtile", {
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
{
|
||||
image = "techage_filling_ta2.png^techage_frame_ta2_top.png^techage_appl_forceload.png",
|
||||
name = "techage_filling_ta2.png^techage_frame_ta2_top.png^techage_appl_forceload.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -265,6 +280,11 @@ if techage.max_num_forceload_blocks > 0 then
|
||||
output = "techage:forceloadtile",
|
||||
recipe = {"techage:forceload"},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "techage:forceload",
|
||||
recipe = {"techage:forceloadtile"},
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
@ -292,15 +312,29 @@ minetest.register_chatcommand("forceload", {
|
||||
params = "",
|
||||
description = S("Show all forceload blocks in a 64x64x64 range"),
|
||||
func = function(name, param)
|
||||
if minetest.check_player_privs(name, "superminer") then
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if player then
|
||||
local pos = player:get_pos()
|
||||
pos = vector.round(pos)
|
||||
shoe_flbs(pos, name, 64)
|
||||
end
|
||||
else
|
||||
return false, S("Priv missing")
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if player then
|
||||
local pos = player:get_pos()
|
||||
pos = vector.round(pos)
|
||||
show_flbs(pos, name, 64)
|
||||
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,
|
||||
})
|
||||
|
@ -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)
|
||||
@ -109,17 +113,19 @@ techage.register_node({"default:furnace", "default:furnace_active"}, {
|
||||
local inv = meta:get_inventory()
|
||||
return techage.get_items(pos, inv, "dst", num)
|
||||
end,
|
||||
on_push_item = function(pos, side, stack)
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||
if in_dir == 5 then
|
||||
return techage.put_items(inv, "src", stack)
|
||||
elseif minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||
return techage.put_items(inv, "fuel", stack)
|
||||
else
|
||||
return techage.put_items(inv, "src", stack)
|
||||
end
|
||||
end,
|
||||
on_unpull_item = function(pos, side, stack)
|
||||
on_unpull_item = function(pos, in_dir, stack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "dst", stack)
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -207,7 +207,7 @@ tiles.pas = {
|
||||
tiles.act = {
|
||||
-- up, down, right, left, back, front
|
||||
{
|
||||
image = "techage_appl_rinser4_top.png^techage_frame4_ta#_top.png",
|
||||
name = "techage_appl_rinser4_top.png^techage_frame4_ta#_top.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -249,6 +249,12 @@ local tubing = {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
on_node_load = function(pos)
|
||||
remove_objects({x=pos.x, y=pos.y+1, z=pos.z})
|
||||
CRD(pos).State:on_node_load(pos)
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -133,7 +133,7 @@ tiles.pas = {
|
||||
tiles.act = {
|
||||
-- up, down, right, left, back, front
|
||||
{
|
||||
image = "techage_appl_sieve4_top.png^techage_frame4_ta#_top.png",
|
||||
name = "techage_appl_sieve4_top.png^techage_frame4_ta#_top.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -174,6 +174,12 @@ local tubing = {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
on_node_load = function(pos)
|
||||
CRD(pos).State:on_node_load(pos)
|
||||
end,
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -17,7 +17,7 @@ local M = minetest.get_meta
|
||||
local S = techage.S
|
||||
|
||||
-- Consumer Related Data
|
||||
local CRD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm(pos).name] or {}).consumer end
|
||||
local CRD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm(pos).name] or {}).consumer or {} end
|
||||
|
||||
local STANDBY_TICKS = 3
|
||||
local COUNTDOWN_TICKS = 4
|
||||
@ -56,7 +56,10 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
return 0
|
||||
end
|
||||
if listname == "src" then
|
||||
CRD(pos).State:start_if_standby(pos)
|
||||
local state = CRD(pos).State
|
||||
if state then
|
||||
state:start_if_standby(pos)
|
||||
end
|
||||
end
|
||||
return stack:get_count()
|
||||
end
|
||||
@ -164,7 +167,7 @@ tiles.pas = {
|
||||
tiles.act = {
|
||||
-- up, down, right, left, back, front
|
||||
{
|
||||
image = "techage_appl_grinder4.png^techage_frame4_ta#_top.png",
|
||||
name = "techage_appl_grinder4.png^techage_frame4_ta#_top.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -206,6 +209,12 @@ local tubing = {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
on_node_load = function(pos)
|
||||
CRD(pos).State:on_node_load(pos)
|
||||
end,
|
||||
@ -422,4 +431,5 @@ if minetest.global_exists("farming") then
|
||||
techage.add_grinder_recipe({input="farming:seed_rice 6", output="farming:rice_flour"}, true)
|
||||
techage.add_grinder_recipe({input="farming:oat 3", output="farming:flour"}, true)
|
||||
techage.add_grinder_recipe({input="farming:seed_oat 6", output="farming:flour"}, true)
|
||||
techage.add_grinder_recipe({input="farming:seed_cotton 3", output="basic_materials:oil_extract"}, true)
|
||||
end
|
||||
|
@ -73,11 +73,17 @@ minetest.register_node("techage:itemsource", {
|
||||
local stack = inv:get_stack('main', 1)
|
||||
if stack:get_count() > 0 then
|
||||
local push_dir = meta:get_int("push_dir")
|
||||
if techage.push_items(pos, push_dir, stack) then
|
||||
local cnt = meta:get_int("counter") + stack:get_count()
|
||||
meta:set_int("counter", cnt)
|
||||
meta:set_string("infotext", "Techage Item Source: "..cnt)
|
||||
local leftover = techage.push_items(pos, push_dir, stack)
|
||||
local pushed
|
||||
if not leftover then
|
||||
pushed = 0
|
||||
elseif leftover ~= true then
|
||||
pushed = stack:get_count() - leftover:get_count()
|
||||
else -- leftover == true
|
||||
pushed = stack:get_count()
|
||||
end
|
||||
meta:set_int("counter", pushed)
|
||||
meta:set_string("infotext", "Techage Item Source: "..pushed)
|
||||
end
|
||||
return true
|
||||
end,
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -136,7 +136,7 @@ tiles.act = {
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png",
|
||||
{
|
||||
image = "techage_filling4_ta#.png^techage_liquidsampler4.png^techage_frame4_ta#.png",
|
||||
name = "techage_filling4_ta#.png^techage_liquidsampler4.png^techage_frame4_ta#.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -173,6 +173,12 @@ local tubing = {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
}
|
||||
|
||||
local node_name_ta2, node_name_ta3, _ =
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -34,6 +34,16 @@ local STANDBY_TICKS = 2
|
||||
local COUNTDOWN_TICKS = 4
|
||||
local CYCLE_TIME = 2
|
||||
|
||||
local WRENCH_MENU = {
|
||||
{
|
||||
type = "number",
|
||||
name = "limit",
|
||||
label = S("Number of items"),
|
||||
tooltip = S("Number of items that are allowed to be pushed"),
|
||||
default = "0",
|
||||
},
|
||||
}
|
||||
|
||||
local function ta4_formspec(self, pos, nvm)
|
||||
if CRD(pos).stage == 4 then -- TA4 node?
|
||||
return "size[8,7.2]"..
|
||||
@ -42,7 +52,8 @@ local function ta4_formspec(self, pos, nvm)
|
||||
default.gui_slots..
|
||||
"box[0,-0.1;7.8,0.5;#c6e8ff]"..
|
||||
"label[3,-0.1;"..minetest.colorize("#000000", S("Pusher")).."]"..
|
||||
techage.question_mark_help(8, S("Optionally configure\nthe pusher with one item"))..
|
||||
techage.question_mark_help(7.5, S("Optionally configure\nthe pusher with one item"))..
|
||||
techage.wrench_image(7.4, -0.05) ..
|
||||
"list[context;main;3.5,0.8;1,1;]"..
|
||||
"image_button[3.5,2;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"..
|
||||
"tooltip[3.5,2;1,1;"..self:get_state_tooltip(nvm).."]"..
|
||||
@ -87,30 +98,72 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
||||
return 0
|
||||
end
|
||||
|
||||
local function pushing(pos, crd, meta, nvm)
|
||||
local pull_dir = meta:get_int("pull_dir")
|
||||
local push_dir = meta:get_int("push_dir")
|
||||
local num = nvm.item_count or nvm.num_items or crd.num_items
|
||||
local function set_limit(pos, nvm, val)
|
||||
val = tonumber(val) or 0
|
||||
if val > 0 then
|
||||
nvm.limit = val
|
||||
nvm.num_items = 0
|
||||
M(pos):set_int("limit", val)
|
||||
else
|
||||
nvm.limit = nil
|
||||
nvm.num_items = nil
|
||||
M(pos):set_string("limit", "")
|
||||
end
|
||||
end
|
||||
|
||||
-- Function returns the number of pushed items
|
||||
local function push(pos, crd, meta, nvm, pull_dir, push_dir, num)
|
||||
local items = techage.pull_items(pos, pull_dir, num, nvm.item_name)
|
||||
if items ~= nil then
|
||||
if techage.push_items(pos, push_dir, items) ~= true then
|
||||
local taken = items:get_count()
|
||||
local leftover = techage.push_items(pos, push_dir, items)
|
||||
if not leftover then
|
||||
-- place item back
|
||||
techage.unpull_items(pos, pull_dir, items)
|
||||
crd.State:blocked(pos, nvm)
|
||||
return
|
||||
return 0
|
||||
elseif leftover ~= true then
|
||||
-- place item back
|
||||
taken = taken - leftover:get_count()
|
||||
techage.unpull_items(pos, pull_dir, leftover)
|
||||
crd.State:blocked(pos, nvm)
|
||||
return taken
|
||||
end
|
||||
if nvm.item_count then -- remote job?
|
||||
nvm.item_count = nil
|
||||
nvm.item_name = nil
|
||||
crd.State:stop(pos, nvm)
|
||||
local number = M(pos):get_string("node_number")
|
||||
techage.send_single(number, nvm.rmt_num, "off")
|
||||
else
|
||||
crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS)
|
||||
end
|
||||
return
|
||||
return taken
|
||||
end
|
||||
crd.State:idle(pos, nvm)
|
||||
return 0
|
||||
end
|
||||
|
||||
local function pushing(pos, crd, meta, nvm)
|
||||
local pull_dir = meta:get_int("pull_dir")
|
||||
local push_dir = meta:get_int("push_dir")
|
||||
|
||||
if not nvm.limit then
|
||||
local num = nvm.item_count or nvm.num_items or crd.num_items
|
||||
num = push(pos, crd, meta, nvm, pull_dir, push_dir, num)
|
||||
if num > 0 then
|
||||
if nvm.item_count then
|
||||
nvm.item_count = nvm.item_count - num
|
||||
if nvm.item_count <= 0 then
|
||||
crd.State:stop(pos, nvm)
|
||||
nvm.item_count = nil
|
||||
end
|
||||
end
|
||||
crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS)
|
||||
end
|
||||
elseif nvm.num_items < nvm.limit then
|
||||
local num = math.min(crd.num_items, nvm.limit - nvm.num_items)
|
||||
num = push(pos, crd, meta, nvm, pull_dir, push_dir, num)
|
||||
if num > 0 then
|
||||
nvm.num_items = nvm.num_items + num
|
||||
if nvm.num_items >= nvm.limit then
|
||||
crd.State:stop(pos, nvm)
|
||||
else
|
||||
crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function keep_running(pos, elapsed)
|
||||
@ -180,14 +233,34 @@ local function can_start(pos, nvm, state)
|
||||
return true
|
||||
end
|
||||
|
||||
local function ta_after_formspec(pos, fields, playername)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
set_limit(pos, nvm, fields.limit)
|
||||
end
|
||||
|
||||
local function on_state_change(pos, old_state, new_state)
|
||||
if old_state == techage.STOPPED and new_state == techage.RUNNING then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
set_limit(pos, nvm, M(pos):get_int("limit"))
|
||||
end
|
||||
end
|
||||
|
||||
local function config_item(pos, payload)
|
||||
local name, count = unpack(payload:split(" "))
|
||||
if name and (minetest.registered_nodes[name] or minetest.registered_items[name]
|
||||
or minetest.registered_craftitems[name]) then
|
||||
count = tonumber(count) or 1
|
||||
local inv = M(pos):get_inventory()
|
||||
inv:set_stack("main", 1, {name = name, count = 1})
|
||||
return count
|
||||
if type(payload) == "string" then
|
||||
if payload == "" then
|
||||
local inv = M(pos):get_inventory()
|
||||
inv:set_stack("main", 1, nil)
|
||||
return 0
|
||||
else
|
||||
local name, count = unpack(payload:split(" "))
|
||||
if name and (minetest.registered_nodes[name] or minetest.registered_items[name]
|
||||
or minetest.registered_craftitems[name]) then
|
||||
count = tonumber(count) or 1
|
||||
local inv = M(pos):get_inventory()
|
||||
inv:set_stack("main", 1, {name = name, count = 1})
|
||||
return count
|
||||
end
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
@ -210,7 +283,7 @@ tiles.act = {
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png",
|
||||
{
|
||||
image = "techage_appl_pusher14.png^[transformR180]^techage_frame14_ta#.png",
|
||||
name = "techage_appl_pusher14.png^[transformR180]^techage_frame14_ta#.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -220,7 +293,7 @@ tiles.act = {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_appl_pusher14.png^techage_frame14_ta#.png",
|
||||
name = "techage_appl_pusher14.png^techage_frame14_ta#.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -239,23 +312,57 @@ local tubing = {
|
||||
is_pusher = true, -- is a pulling/pushing node
|
||||
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
if topic == "pull" then
|
||||
if topic == "pull" then -- Deprecated command, use config/limit/start instead
|
||||
local nvm = techage.get_nvm(pos)
|
||||
CRD(pos).State:stop(pos, nvm)
|
||||
nvm.item_count = math.min(config_item(pos, payload), 12)
|
||||
nvm.rmt_num = src
|
||||
CRD(pos).State:start(pos, nvm)
|
||||
return true
|
||||
elseif topic == "config" then
|
||||
elseif topic == "config" then -- Set item type
|
||||
local nvm = techage.get_nvm(pos)
|
||||
CRD(pos).State:stop(pos, nvm)
|
||||
config_item(pos, payload)
|
||||
CRD(pos).State:start(pos, nvm)
|
||||
return true
|
||||
elseif topic == "limit" then -- Set push limit
|
||||
local nvm = techage.get_nvm(pos)
|
||||
CRD(pos).State:stop(pos, nvm)
|
||||
set_limit(pos, nvm, payload)
|
||||
return true
|
||||
elseif topic == "count" then -- Get number of push items
|
||||
local nvm = techage.get_nvm(pos)
|
||||
return nvm.num_items or 0
|
||||
else
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
if topic == 65 then -- Set item type
|
||||
local nvm = techage.get_nvm(pos)
|
||||
CRD(pos).State:stop(pos, nvm)
|
||||
config_item(pos, payload)
|
||||
return 0
|
||||
elseif topic == 68 or topic == 20 then -- Set push limit
|
||||
local nvm = techage.get_nvm(pos)
|
||||
CRD(pos).State:stop(pos, nvm)
|
||||
set_limit(pos, nvm, payload[1])
|
||||
return 0
|
||||
else
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if nvm.limit then
|
||||
nvm.num_items = 0
|
||||
end
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
if topic == 150 then -- Get number of pushed items
|
||||
local nvm = techage.get_nvm(pos)
|
||||
return 0, {nvm.num_items or 0}
|
||||
else
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
@ -265,6 +372,7 @@ local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
formspec = ta4_formspec,
|
||||
tubing = tubing,
|
||||
can_start = can_start,
|
||||
on_state_change = on_state_change,
|
||||
after_place_node = function(pos, placer)
|
||||
local meta = M(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
@ -292,6 +400,8 @@ local node_name_ta2, node_name_ta3, node_name_ta4 =
|
||||
node_timer = keep_running,
|
||||
on_rotate = screwdriver.disallow,
|
||||
tubelib2_on_update2 = tubelib2_on_update2,
|
||||
ta4_formspec = WRENCH_MENU,
|
||||
ta_after_formspec = ta_after_formspec,
|
||||
|
||||
groups = {choppy=2, cracky=2, crumbly=2},
|
||||
is_ground_content = false,
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -26,16 +26,16 @@ local CRD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm
|
||||
|
||||
local S = techage.S
|
||||
|
||||
local CYCLE_TIME = 3
|
||||
local CYCLE_TIME = 4
|
||||
local STANDBY_TICKS = 4
|
||||
local COUNTDOWN_TICKS = 4
|
||||
|
||||
local Side2Facedir = {F=0, R=1, B=2, L=3, D=4, U=5}
|
||||
local Depth2Idx = {[1]=1 ,[2]=2, [3]=3, [5]=4, [10]=5, [15]=6, [20]=7, [25]=8, [40]=9, [60]=10, [80]=11}
|
||||
local Depth2Idx = {[1]=1 ,[2]=2, [3]=3, [5]=4, [7]=5, [10]=6, [15]=7, [20]=8, [25]=9, [40]=10, [60]=11, [80]=12}
|
||||
local Holesize2Idx = {["3x3"] = 1, ["5x5"] = 2, ["7x7"] = 3, ["9x9"] = 4, ["11x11"] = 5}
|
||||
local Holesize2Diameter = {["3x3"] = 3, ["5x5"] = 5, ["7x7"] = 7, ["9x9"] = 9, ["11x11"] = 11}
|
||||
local Level2Idx = {[2]=1, [1]=2, [0]=3, [-1]=4, [-2]=5, [-3]=6,
|
||||
[-5]=7, [-10]=8, [-15]=9, [-20]=10}
|
||||
[-5]=7, [-10]=8, [-15]=9, [-20]=10}
|
||||
|
||||
local function formspec(self, pos, nvm)
|
||||
local tooltip = S("Start level = 0\nmeans the same level\nas the quarry is placed")
|
||||
@ -46,12 +46,14 @@ local function formspec(self, pos, nvm)
|
||||
local hsize_list = "5x5"
|
||||
if CRD(pos).stage == 4 then
|
||||
hsize_list = "3x3,5x5,7x7,9x9,11x11"
|
||||
elseif CRD(pos).stage == 3 then
|
||||
hsize_list = "3x3,5x5,7x7"
|
||||
end
|
||||
local depth_list = "1,2,3,5,10,15,20,25,40,60,80"
|
||||
local depth_list = "1,2,3,5,7,10,15,20,25,40,60,80"
|
||||
if CRD(pos).stage == 3 then
|
||||
depth_list = "1,2,3,5,10,15,20,25,40"
|
||||
depth_list = "1,2,3,5,7,10,15,20,25,40"
|
||||
elseif CRD(pos).stage == 2 then
|
||||
depth_list = "1,2,3,5,10,15,20"
|
||||
depth_list = "1,2,3,5,7,10,15,20"
|
||||
end
|
||||
|
||||
return "size[8,8]"..
|
||||
@ -196,6 +198,9 @@ local function quarry_task(pos, crd, nvm)
|
||||
pos1.y = y_curr
|
||||
pos2.y = y_curr
|
||||
|
||||
-- Restarting the server can detach the coroutine data.
|
||||
-- Therefore, read nvm again.
|
||||
nvm = techage.get_nvm(pos)
|
||||
nvm.level = y_first - y_curr
|
||||
|
||||
if minetest.is_area_protected(pos1, pos2, owner, 5) then
|
||||
@ -205,6 +210,7 @@ local function quarry_task(pos, crd, nvm)
|
||||
|
||||
if not is_air_level(pos1, pos2, nvm.hole_diameter) then
|
||||
mark_area(pos1, pos2, owner)
|
||||
M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm))
|
||||
coroutine.yield()
|
||||
|
||||
for zoffs = 1, nvm.hole_diameter do
|
||||
@ -237,7 +243,7 @@ local function keep_running(pos, elapsed)
|
||||
local crd = CRD(pos)
|
||||
local _, err = coroutine.resume(mem.co, pos, crd, nvm)
|
||||
if err then
|
||||
minetest.log("error", "[TA4 Quarry Coroutine Error]" .. err)
|
||||
minetest.log("error", "[TA4 Quarry Coroutine Error] at pos " .. minetest.pos_to_string(pos) .. " " .. err)
|
||||
end
|
||||
|
||||
if techage.is_activeformspec(pos) then
|
||||
@ -298,6 +304,13 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
mem.co = nil
|
||||
CRD(pos).State:stop(pos, nvm)
|
||||
end
|
||||
elseif CRD(pos).stage == 3 then
|
||||
if fields.hole_size ~= nvm.hole_size then
|
||||
nvm.hole_size = fields.hole_size
|
||||
nvm.hole_diameter = Holesize2Diameter[fields.hole_size or "7x7"] or 7
|
||||
mem.co = nil
|
||||
CRD(pos).State:stop(pos, nvm)
|
||||
end
|
||||
else
|
||||
nvm.hole_size = "5x5"
|
||||
nvm.hole_diameter = 5
|
||||
@ -324,7 +337,7 @@ tiles.act = {
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png",
|
||||
{
|
||||
image = "techage_frame14_ta#.png^techage_quarry_left14.png",
|
||||
name = "techage_frame14_ta#.png^techage_quarry_left14.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -368,8 +381,24 @@ local tubing = {
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
if topic == 133 then -- Quarry Depth
|
||||
local nvm = techage.get_nvm(pos)
|
||||
return 0, {nvm.level or 0}
|
||||
else
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_node_load = function(pos)
|
||||
CRD(pos).State:on_node_load(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if nvm.techage_state == techage.RUNNING then
|
||||
stop_sound(pos)
|
||||
play_sound(pos)
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -45,7 +45,7 @@ local SpecialItems = {
|
||||
["dye:black"] = "",
|
||||
["techage:basalt_glass_thin"] = "",
|
||||
["group:stone"] = "techage:sieved_gravel",
|
||||
["basic_materials:plastic_sheet"] = "",
|
||||
--["basic_materials:plastic_sheet"] = "",
|
||||
["group:wood"] = "default:stick 5",
|
||||
["techage:basalt_glass"] = "",
|
||||
["default:junglewood"] = "default:stick 5",
|
||||
@ -115,7 +115,7 @@ end
|
||||
local function cook_reverse(stack, inv, idx, recipe)
|
||||
-- check space
|
||||
for _,item in ipairs(recipe.items) do
|
||||
if not inv:room_for_item("dst", stack) then
|
||||
if not inv:room_for_item("dst", item) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
@ -193,7 +193,7 @@ tiles.pas = {
|
||||
tiles.act = {
|
||||
-- up, down, right, left, back, front
|
||||
{
|
||||
image = "techage_appl_grinder4.png^[colorize:@@000000:100^techage_frame4_ta#_top.png",
|
||||
name = "techage_appl_grinder4.png^[colorize:@@000000:100^techage_frame4_ta#_top.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -235,6 +235,12 @@ local tubing = {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
on_node_load = function(pos)
|
||||
CRD(pos).State:on_node_load(pos)
|
||||
end,
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -22,6 +22,7 @@ local STACK_SIZE = 2000
|
||||
|
||||
local function gen_stack(inv, idx)
|
||||
inv[idx] = {name = "", count = 0}
|
||||
return inv[idx]
|
||||
end
|
||||
|
||||
local function gen_inv(nvm)
|
||||
@ -92,6 +93,18 @@ local function inv_state(nvm)
|
||||
return "loaded"
|
||||
end
|
||||
|
||||
local function inv_state_num(nvm)
|
||||
local num = 0
|
||||
for _,item in ipairs(nvm.inventory or {}) do
|
||||
if item.count and item.count > 0 then
|
||||
num = num + 1
|
||||
end
|
||||
end
|
||||
if num == 0 then return 0 end
|
||||
if num == 8 then return 2 end
|
||||
return 1
|
||||
end
|
||||
|
||||
local function max_stacksize(item_name)
|
||||
-- It is sufficient to use minetest.registered_items as all registration
|
||||
-- functions (node, craftitems, tools) add the definitions there.
|
||||
@ -121,7 +134,7 @@ local function doesItemStackMatchNvmStack(itemstack, nvmstack)
|
||||
|
||||
-- The following seems to be the most reliable approach to compare meta.
|
||||
local nvm_meta = ItemStack():get_meta()
|
||||
nvm_meta:from_table(minetest.deserialize(nvmstack.meta))
|
||||
nvm_meta:from_table(minetest.deserialize(nvmstack.meta or ""))
|
||||
if not nvm_meta:equals(itemstack:get_meta()) then
|
||||
return false, "Mismatching meta"
|
||||
end
|
||||
@ -185,7 +198,7 @@ local function take_from_chest(pos, idx, output_stack, max_total_count, keep_ass
|
||||
count = count,
|
||||
wear = nvm_stack.wear,
|
||||
}))
|
||||
output_stack:get_meta():from_table(minetest.deserialize(nvm_stack.meta))
|
||||
output_stack:get_meta():from_table(minetest.deserialize(nvm_stack.meta or ""))
|
||||
nvm_stack.count = nvm_stack.count - count
|
||||
if nvm_stack.count == 0 then
|
||||
gen_stack(nvm.inventory or {}, idx)
|
||||
@ -198,21 +211,14 @@ local function tube_add_to_chest(pos, input_stack)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.inventory = nvm.inventory or {}
|
||||
|
||||
-- Backup some values needed for restoring the old
|
||||
-- state if items can't fully be added to chest.
|
||||
local orig_count = input_stack:get_count()
|
||||
local backup = table.copy(nvm.inventory)
|
||||
|
||||
for idx = 1,8 do
|
||||
input_stack:take_item(add_to_chest(pos, input_stack, idx))
|
||||
end
|
||||
|
||||
if input_stack:get_count() > 0 then
|
||||
nvm.inventory = backup -- Restore old nvm inventory
|
||||
input_stack:set_count(orig_count) -- Restore input_stack
|
||||
return false -- No items were added to chest
|
||||
return input_stack -- Not all items were added to chest
|
||||
else
|
||||
return true -- Items were added successfully
|
||||
return true -- All items were added
|
||||
end
|
||||
end
|
||||
|
||||
@ -324,31 +330,55 @@ local function count_number_of_chests(pos)
|
||||
local node = techage.get_node_lvm(pos)
|
||||
local dir = techage.side_to_outdir("B", node.param2)
|
||||
local pos1 = tubelib2.get_pos(pos, dir)
|
||||
local param2 = node.param2
|
||||
local cnt = 1
|
||||
while cnt < 50 do
|
||||
node = techage.get_node_lvm(pos1)
|
||||
if node.name ~= "techage:ta4_chest_dummy" then
|
||||
break
|
||||
end
|
||||
local meta = M(pos1)
|
||||
if meta:contains("param2") and meta:get_int("param2") ~= param2 then
|
||||
break
|
||||
end
|
||||
pos1 = tubelib2.get_pos(pos1, dir)
|
||||
cnt = cnt + 1
|
||||
end
|
||||
M(pos):set_int("stacksize", STACK_SIZE * cnt)
|
||||
end
|
||||
|
||||
local function dummy_chest_behind(pos, node)
|
||||
local dir = techage.side_to_outdir("B", node.param2)
|
||||
local pos1 = tubelib2.get_pos(pos, dir)
|
||||
node = techage.get_node_lvm(pos1)
|
||||
return node.name == "techage:ta4_chest_dummy"
|
||||
end
|
||||
|
||||
local function part_of_a_chain(pos, node)
|
||||
local dir = techage.side_to_outdir("F", node.param2)
|
||||
local pos1 = tubelib2.get_pos(pos, dir)
|
||||
node = techage.get_node_lvm(pos1)
|
||||
return node.name == "techage:ta4_chest_dummy" or node.name == "techage:ta4_chest"
|
||||
end
|
||||
|
||||
local function search_chest_in_front(pos, node)
|
||||
local dir = techage.side_to_outdir("F", node.param2)
|
||||
local pos1 = tubelib2.get_pos(pos, dir)
|
||||
local param2 = node.param2
|
||||
local cnt = 1
|
||||
while cnt < 50 do
|
||||
node = techage.get_node_lvm(pos1)
|
||||
if node.name ~= "techage:ta4_chest_dummy" then
|
||||
break
|
||||
end
|
||||
local meta = M(pos1)
|
||||
if meta:contains("param2") and meta:get_int("param2") ~= param2 then
|
||||
break
|
||||
end
|
||||
pos1 = tubelib2.get_pos(pos1, dir)
|
||||
cnt = cnt + 1
|
||||
end
|
||||
if node.name == "techage:ta4_chest" then
|
||||
if node.name == "techage:ta4_chest" and node.param2 == param2 then
|
||||
minetest.after(1, count_number_of_chests, pos1)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.front_chest_pos = pos1
|
||||
@ -514,9 +544,14 @@ minetest.register_node("techage:ta4_chest", {
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local node = minetest.get_node(pos)
|
||||
if dummy_chest_behind(pos, node) then
|
||||
minetest.remove_node(pos)
|
||||
return true
|
||||
end
|
||||
if search_chest_in_front(pos, node) then
|
||||
node.name = "techage:ta4_chest_dummy"
|
||||
minetest.swap_node(pos, node)
|
||||
M(pos):set_int("param2", node.param2)
|
||||
else
|
||||
local nvm = techage.get_nvm(pos)
|
||||
gen_inv(nvm)
|
||||
@ -597,10 +632,12 @@ techage.register_node({"techage:ta4_chest"}, {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
if topic == "count" then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
return get_count(nvm, tonumber(payload) or 0)
|
||||
return get_count(nvm, tonumber(payload or 0) or 0)
|
||||
elseif topic == "itemstring" then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
return get_itemstring(nvm, tonumber(payload) or 0)
|
||||
return get_itemstring(nvm, tonumber(payload or 0) or 0)
|
||||
elseif topic == "storesize" then
|
||||
return get_stacksize(pos)
|
||||
elseif topic == "state" then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
return inv_state(nvm)
|
||||
@ -608,6 +645,22 @@ techage.register_node({"techage:ta4_chest"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
if topic == 140 and payload[1] == 1 then -- Inventory Item Count
|
||||
local nvm = techage.get_nvm(pos)
|
||||
return 0, {get_count(nvm, tonumber(payload[2] or 0) or 0)}
|
||||
elseif topic == 140 and payload[1] == 2 then -- Inventory Item Name
|
||||
local nvm = techage.get_nvm(pos)
|
||||
return 0, get_itemstring(nvm, tonumber(payload[2] or 0) or 0)
|
||||
elseif topic == 140 and payload[1] == 3 then -- storesize
|
||||
return 0, {get_stacksize(pos)}
|
||||
elseif topic == 131 then -- Chest State
|
||||
local nvm = techage.get_nvm(pos)
|
||||
return 0, {inv_state_num(nvm)}
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
techage.register_node({"techage:ta4_chest_dummy"}, {
|
||||
@ -637,6 +690,18 @@ techage.register_node({"techage:ta4_chest_dummy"}, {
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_lbm({
|
||||
label = "Repair Dummy Chests",
|
||||
name = "techage:chest_dummy",
|
||||
nodenames = {"techage:ta4_chest_dummy"},
|
||||
run_at_every_load = true,
|
||||
action = function(pos, node)
|
||||
if not part_of_a_chain(pos, node) then
|
||||
minetest.swap_node(pos, {name = "techage:ta4_chest", param2 = node.param2})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "techage:ta4_chest",
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -19,6 +19,7 @@ local S = techage.S
|
||||
-- Consumer Related Data
|
||||
local CRD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm(pos).name] or {}).consumer end
|
||||
local tooltip = S("Switch to pull mode \nto pull items out of inventory slots \naccording the injector configuration")
|
||||
local Tube = techage.Tube
|
||||
|
||||
local STANDBY_TICKS = 2
|
||||
local COUNTDOWN_TICKS = 3
|
||||
@ -121,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
|
||||
|
||||
@ -198,7 +214,7 @@ local tiles = {}
|
||||
-- '{power}' will be replaced by the power PNG
|
||||
tiles.pas = {
|
||||
"techage_filling_ta#.png^techage_frame_ta#_top.png^techage_appl_arrow.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_arrow.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png",
|
||||
"techage_appl_pusher.png^[transformR180]^techage_frame_ta#.png^techage_appl_injector.png",
|
||||
@ -207,11 +223,11 @@ tiles.pas = {
|
||||
tiles.act = {
|
||||
-- up, down, right, left, back, front
|
||||
"techage_filling_ta#.png^techage_frame_ta#_top.png^techage_appl_arrow.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_arrow.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png",
|
||||
"techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png",
|
||||
{
|
||||
image = "techage_appl_pusher14.png^[transformR180]^techage_frame14_ta#.png^techage_appl_injector14.png",
|
||||
name = "techage_appl_pusher14.png^[transformR180]^techage_frame14_ta#.png^techage_appl_injector14.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -221,7 +237,7 @@ tiles.act = {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_appl_pusher14.png^techage_frame14_ta#.png^techage_appl_injector14.png",
|
||||
name = "techage_appl_pusher14.png^techage_frame14_ta#.png^techage_appl_injector14.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -242,6 +258,12 @@ local tubing = {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
on_node_load = function(pos)
|
||||
CRD(pos).State:on_node_load(pos)
|
||||
end,
|
||||
@ -264,6 +286,18 @@ local _, node_name_ta3, node_name_ta4 =
|
||||
local nvm = techage.get_nvm(pos)
|
||||
M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm))
|
||||
end,
|
||||
ta_rotate_node = function(pos, node, new_param2)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if CRD(pos).State:get_state(nvm) == techage.STOPPED then
|
||||
Tube:after_dig_node(pos)
|
||||
minetest.swap_node(pos, {name = node.name, param2 = new_param2})
|
||||
Tube:after_place_node(pos)
|
||||
local meta = M(pos)
|
||||
meta:set_int("pull_dir", techage.side_to_outdir("L", new_param2))
|
||||
meta:set_int("push_dir", techage.side_to_outdir("R", new_param2))
|
||||
M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm))
|
||||
end
|
||||
end,
|
||||
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -19,7 +19,7 @@ local M = minetest.get_meta
|
||||
local S = techage.S
|
||||
|
||||
local TA4_INV_SIZE = 32
|
||||
local EX_POINTS = 20
|
||||
local EX_POINTS = 15
|
||||
|
||||
local hyperloop = techage.hyperloop
|
||||
local remote_pos = techage.hyperloop.remote_pos
|
||||
@ -29,7 +29,7 @@ local menu = techage.menu
|
||||
local function formspec(pos)
|
||||
local ndef = minetest.registered_nodes["techage:ta5_hl_chest"]
|
||||
local status = M(pos):get_string("conn_status")
|
||||
if hyperloop.is_client(pos) or hyperloop.is_server(pos) then
|
||||
if hyperloop.is_server(pos) then
|
||||
local title = ndef.description .. " " .. status
|
||||
return "size[8,9]"..
|
||||
"box[0,-0.1;7.8,0.5;#c6e8ff]" ..
|
||||
@ -38,6 +38,13 @@ local function formspec(pos)
|
||||
"list[current_player;main;0,5.3;8,4;]"..
|
||||
"listring[context;main]"..
|
||||
"listring[current_player;main]"
|
||||
elseif hyperloop.is_client(pos) then
|
||||
local title = ndef.description .. " " .. status
|
||||
return "size[8,9]"..
|
||||
"box[0,-0.1;7.8,0.5;#c6e8ff]" ..
|
||||
"label[0.2,-0.1;" .. minetest.colorize( "#000000", title) .. "]" ..
|
||||
"label[0.2,2;Inventory access on this node is disabled\ndue to minetest engine issues!]" ..
|
||||
"list[current_player;main;0,5.3;8,4;]"
|
||||
else
|
||||
return menu.generate_formspec(pos, ndef, hyperloop.SUBMENU)
|
||||
end
|
||||
@ -47,9 +54,12 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
if techage.hyperloop.is_client(pos) then
|
||||
return 0
|
||||
end
|
||||
shared_inv.before_inv_access(pos, listname)
|
||||
local inv = minetest.get_inventory({type="node", pos=pos})
|
||||
if inv:room_for_item(listname, stack) then
|
||||
if inv and inv:room_for_item(listname, stack) then
|
||||
return stack:get_count()
|
||||
end
|
||||
return 0
|
||||
@ -59,9 +69,12 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
if techage.hyperloop.is_client(pos) then
|
||||
return 0
|
||||
end
|
||||
shared_inv.before_inv_access(pos, listname)
|
||||
local inv = minetest.get_inventory({type="node", pos=pos})
|
||||
if inv:contains_item(listname, stack) then
|
||||
if inv and inv:contains_item(listname, stack) then
|
||||
return stack:get_count()
|
||||
end
|
||||
return 0
|
||||
@ -71,6 +84,9 @@ local function allow_metadata_inventory_move(pos, from_list, from_index, to_list
|
||||
if shared_inv.before_inv_access(pos, "main") then
|
||||
return 0
|
||||
end
|
||||
if techage.hyperloop.is_client(pos) then
|
||||
return 0
|
||||
end
|
||||
return count
|
||||
end
|
||||
|
||||
@ -141,40 +157,81 @@ minetest.register_node("techage:ta5_hl_chest", {
|
||||
techage.register_node({"techage:ta5_hl_chest"}, {
|
||||
on_inv_request = function(pos, in_dir, access_type)
|
||||
pos = remote_pos(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
return meta:get_inventory(), "main"
|
||||
if pos then
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta then
|
||||
return meta:get_inventory(), "main"
|
||||
end
|
||||
end
|
||||
end,
|
||||
on_pull_item = function(pos, in_dir, num, item_name)
|
||||
pos = remote_pos(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return techage.get_items(pos, inv, "main", num)
|
||||
if pos then
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta then
|
||||
local inv = meta:get_inventory()
|
||||
if inv then
|
||||
return techage.get_items(pos, inv, "main", num)
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end,
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
if techage.hyperloop.is_paired(pos) then
|
||||
pos = remote_pos(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
if pos then
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta then
|
||||
local inv = meta:get_inventory()
|
||||
if inv then
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end,
|
||||
on_unpull_item = function(pos, in_dir, stack)
|
||||
pos = remote_pos(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
if pos then
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta then
|
||||
local inv = meta:get_inventory()
|
||||
if inv then
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end,
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
if topic == "state" then
|
||||
pos = remote_pos(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return techage.get_inv_state(inv, "main")
|
||||
if meta then
|
||||
local inv = meta:get_inventory()
|
||||
if inv then
|
||||
return techage.get_inv_state(inv, "main")
|
||||
end
|
||||
end
|
||||
return "error"
|
||||
else
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
if topic == 131 then -- Chest State
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta then
|
||||
local inv = meta:get_inventory()
|
||||
if inv then
|
||||
return 0, {techage.get_inv_state_num(inv, "main")}
|
||||
end
|
||||
end
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
@ -183,3 +240,9 @@ minetest.register_craft({
|
||||
output = "techage:ta5_hl_chest",
|
||||
recipe = {"techage:chest_ta4", "techage:ta5_aichip"}
|
||||
})
|
||||
|
||||
minetest.register_on_mods_loaded(function()
|
||||
if not minetest.global_exists("hyperloop") then
|
||||
minetest.clear_craft({output = "techage:ta5_hl_chest"})
|
||||
end
|
||||
end)
|
||||
|
@ -173,13 +173,14 @@ local function remove_inv(pos, inv, param2, AssemblyPlan, player_name, idx)
|
||||
if inv:room_for_item("src", stack) then
|
||||
local node = minetest.get_node(pos1)
|
||||
if node.name == node_name then
|
||||
local meta = M(pos1):to_table()
|
||||
minetest.remove_node(pos1)
|
||||
inv:add_item("src", stack)
|
||||
play_sound(pos, "default_dig_cracky")
|
||||
local ndef = minetest.registered_nodes[node_name]
|
||||
if ndef and ndef.after_dig_node then
|
||||
local digger = minetest.get_player_by_name(player_name)
|
||||
ndef.after_dig_node(pos1, pos, ItemStack(node_name), {}, digger)
|
||||
ndef.after_dig_node(pos1, node, meta, digger)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -24,13 +24,10 @@ local BLOCKING_TIME = 0.3 -- 300ms
|
||||
techage.boiler = {}
|
||||
|
||||
local IsWater = {
|
||||
["bucket:bucket_river_water"] = true,
|
||||
["bucket:bucket_water"] = true,
|
||||
["bucket:bucket_river_water"] = "bucket:bucket_empty",
|
||||
}
|
||||
|
||||
local IsBucket = {
|
||||
["bucket:bucket_empty"] = true,
|
||||
}
|
||||
local IsBucket = {}
|
||||
|
||||
local function node_description(name)
|
||||
name = string.split(name, " ")[1]
|
||||
@ -126,12 +123,12 @@ function techage.boiler.on_punch(pos, node, puncher, pointed_thing)
|
||||
if IsWater[wielded_item] and nvm.num_water < MAX_WATER then
|
||||
mem.blocking_time = techage.SystemTime + BLOCKING_TIME
|
||||
nvm.num_water = nvm.num_water + 1
|
||||
puncher:set_wielded_item(ItemStack("bucket:bucket_empty"))
|
||||
puncher:set_wielded_item(ItemStack(IsWater[wielded_item]))
|
||||
M(pos):set_string("formspec", techage.boiler.formspec(pos, nvm))
|
||||
elseif IsBucket[wielded_item] and nvm.num_water > 0 then
|
||||
if item_count > 1 then
|
||||
local inv = puncher:get_inventory()
|
||||
local item = ItemStack("bucket:bucket_water")
|
||||
local item = ItemStack(IsBucket[wielded_item])
|
||||
if inv:room_for_item("main", item) then
|
||||
inv:add_item("main", item)
|
||||
puncher:set_wielded_item({name=wielded_item, count = item_count - 1})
|
||||
@ -141,8 +138,13 @@ function techage.boiler.on_punch(pos, node, puncher, pointed_thing)
|
||||
else
|
||||
mem.blocking_time = techage.SystemTime + BLOCKING_TIME
|
||||
nvm.num_water = nvm.num_water - 1
|
||||
puncher:set_wielded_item(ItemStack("bucket:bucket_water"))
|
||||
puncher:set_wielded_item(ItemStack(IsBucket[wielded_item]))
|
||||
end
|
||||
M(pos):set_string("formspec", techage.boiler.formspec(pos, nvm))
|
||||
end
|
||||
end
|
||||
|
||||
function techage.register_water_bucket(empty_bucket, full_bucket)
|
||||
IsWater[full_bucket] = empty_bucket
|
||||
IsBucket[empty_bucket] = full_bucket
|
||||
end
|
||||
|
@ -16,6 +16,7 @@
|
||||
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 has_mesecons = minetest.global_exists("mesecon")
|
||||
|
||||
local NodeInfoCache = {}
|
||||
local NumbersToBeRecycled = {}
|
||||
@ -171,7 +172,7 @@ end)
|
||||
techage.dug_node = {}
|
||||
minetest.register_on_dignode(function(pos, oldnode, digger)
|
||||
if not digger then return end
|
||||
-- store pos for tools without own 'register_on_dignode'
|
||||
-- store the position of the dug block for tools like the TA1 hammer
|
||||
techage.dug_node[digger:get_player_name()] = pos
|
||||
end)
|
||||
|
||||
@ -179,6 +180,14 @@ end)
|
||||
-- API helper functions
|
||||
-------------------------------------------------------------------
|
||||
|
||||
-- Check if both strings are the same or one string starts with the other string.
|
||||
function techage.string_compare(s1, s2)
|
||||
if s1 and s2 then
|
||||
local minLength = math.min(#s1, #s2)
|
||||
return string.sub(s1, 1, minLength) == string.sub(s2, 1, minLength)
|
||||
end
|
||||
end
|
||||
|
||||
-- Function returns { pos, name } for the node referenced by number
|
||||
function techage.get_node_info(dest_num)
|
||||
return NodeInfoCache[dest_num] or update_nodeinfo(dest_num)
|
||||
@ -230,6 +239,7 @@ function techage.add_node(pos, name, is_ta2)
|
||||
local key = minetest.hash_node_position(pos)
|
||||
local num = NumbersToBeRecycled[key]
|
||||
if num then
|
||||
NodeInfoCache[num] = nil
|
||||
backend.set_nodepos(num, pos)
|
||||
NumbersToBeRecycled[key] = nil
|
||||
return num
|
||||
@ -281,6 +291,18 @@ function techage.pack_node(pos, oldnode, number)
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- Used by the assembly tool
|
||||
-------------------------------------------------------------------
|
||||
function techage.pre_add_node(pos, number)
|
||||
local key = minetest.hash_node_position(pos)
|
||||
NumbersToBeRecycled[key] = number
|
||||
end
|
||||
|
||||
function techage.post_remove_node(pos)
|
||||
local key = minetest.hash_node_position(pos)
|
||||
NumbersToBeRecycled[key] = nil
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- Node register function
|
||||
@ -316,6 +338,13 @@ function techage.register_node(names, node_definition)
|
||||
if node_definition.on_node_load then
|
||||
register_lbm(names[1], names)
|
||||
end
|
||||
|
||||
-- register mvps stopper
|
||||
if has_mesecons then
|
||||
for _, name in ipairs(names) do
|
||||
mesecon.register_mvps_stopper(name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
@ -330,6 +359,19 @@ function techage.not_protected(number, placer_name, clicker_name)
|
||||
return false
|
||||
end
|
||||
|
||||
-- Check the given number value.
|
||||
-- Returns true if the number is valid, point to real node and
|
||||
-- and the node is not protected for the given player_name.
|
||||
function techage.check_number(number, placer_name)
|
||||
if number then
|
||||
if not techage.not_protected(number, placer_name, nil) then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Check the given list of numbers.
|
||||
-- Returns true if number(s) is/are valid, point to real nodes and
|
||||
-- and the nodes are not protected for the given player_name.
|
||||
@ -406,6 +448,35 @@ function techage.transfer(pos, outdir, topic, payload, network, nodenames)
|
||||
return false
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- Beduino functions (see "bep-005_ta_cmnd.md")
|
||||
-------------------------------------------------------------------
|
||||
function techage.beduino_send_cmnd(src, number, topic, payload)
|
||||
--print("beduino_send_cmnd", src, number, topic)
|
||||
local ninfo = NodeInfoCache[number] or update_nodeinfo(number)
|
||||
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
|
||||
return 1, ""
|
||||
end
|
||||
|
||||
function techage.beduino_request_data(src, number, topic, payload)
|
||||
--print("beduino_request_data", src, number, topic)
|
||||
local ninfo = NodeInfoCache[number] or update_nodeinfo(number)
|
||||
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
|
||||
return 1, ""
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- Client side Push/Pull item functions
|
||||
-------------------------------------------------------------------
|
||||
@ -432,7 +503,7 @@ function techage.push_items(pos, out_dir, stack, idx)
|
||||
minetest.add_item(npos, stack)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
return stack
|
||||
end
|
||||
|
||||
-- Check for recursion and too long distances
|
||||
@ -457,7 +528,7 @@ function techage.safe_push_items(pos, out_dir, stack, idx)
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
return stack
|
||||
end
|
||||
|
||||
function techage.unpull_items(pos, out_dir, stack)
|
||||
@ -468,37 +539,6 @@ function techage.unpull_items(pos, out_dir, stack)
|
||||
return false
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- Client side Push/Pull item functions for hopper like nodes
|
||||
-- (nodes with no tube support)
|
||||
-------------------------------------------------------------------
|
||||
|
||||
function techage.neighbour_pull_items(pos, out_dir, num)
|
||||
local res, npos, in_dir, name = get_next_node(pos, out_dir)
|
||||
if res and NodeDef[name] and NodeDef[name].on_pull_item then
|
||||
return NodeDef[name].on_pull_item(npos, in_dir, num)
|
||||
end
|
||||
end
|
||||
|
||||
function techage.neighbour_push_items(pos, out_dir, stack)
|
||||
local res, npos, in_dir, name = get_next_node(pos, out_dir)
|
||||
if res and NodeDef[name] and NodeDef[name].on_push_item then
|
||||
return NodeDef[name].on_push_item(npos, in_dir, stack)
|
||||
elseif name == "air" then
|
||||
minetest.add_item(npos, stack)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function techage.neighbour_unpull_items(pos, out_dir, stack)
|
||||
local res, npos, in_dir, name = get_next_node(pos, out_dir)
|
||||
if res and NodeDef[name] and NodeDef[name].on_unpull_item then
|
||||
return NodeDef[name].on_unpull_item(npos, in_dir, stack)
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- Server side helper functions
|
||||
-------------------------------------------------------------------
|
||||
@ -526,23 +566,33 @@ function techage.get_items(pos, inv, listname, num)
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Put the given stack into the given ItemList.
|
||||
-- Function returns false if ItemList is full.
|
||||
-- Put the given stack into the given ItemList/inventory.
|
||||
-- Function returns:
|
||||
-- - true, if all items are moved
|
||||
-- - false, if no item is moved
|
||||
-- - leftover, if less than all items are moved
|
||||
-- (true/false is the legacy mode and can't be removed)
|
||||
function techage.put_items(inv, listname, item, idx)
|
||||
local leftover
|
||||
if idx and inv and idx <= inv:get_size(listname) then
|
||||
local stack = inv:get_stack(listname, idx)
|
||||
if stack:item_fits(item) then
|
||||
stack:add_item(item)
|
||||
inv:set_stack(listname, idx, stack)
|
||||
return true
|
||||
end
|
||||
leftover = stack:add_item(item)
|
||||
inv:set_stack(listname, idx, stack)
|
||||
elseif inv then
|
||||
leftover = inv:add_item(listname, item)
|
||||
else
|
||||
if inv and inv:room_for_item(listname, item) then
|
||||
inv:add_item(listname, item)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
return false
|
||||
|
||||
local cnt = leftover:get_count()
|
||||
if cnt == item:get_count() then
|
||||
return false
|
||||
elseif cnt == 0 then
|
||||
return true
|
||||
else
|
||||
return leftover
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
-- Return "full", "loaded", or "empty" depending
|
||||
@ -564,6 +614,23 @@ function techage.get_inv_state(inv, listname)
|
||||
return state
|
||||
end
|
||||
|
||||
-- Beduino variant
|
||||
function techage.get_inv_state_num(inv, listname)
|
||||
local state
|
||||
if inv:is_empty(listname) then
|
||||
state = 0
|
||||
else
|
||||
local list = inv:get_list(listname)
|
||||
state = 2
|
||||
for _, item in ipairs(list) do
|
||||
if item:is_empty() then
|
||||
return 1
|
||||
end
|
||||
end
|
||||
end
|
||||
return state
|
||||
end
|
||||
|
||||
minetest.register_chatcommand("ta_send", {
|
||||
description = minetest.formspec_escape(
|
||||
"Send a techage command to the block with the number given: /ta_send <number> <command> [<data>]"),
|
||||
|
@ -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] = {}
|
||||
@ -76,16 +79,22 @@ function inv_lib.allow_conf_inv_move(pos, from_list, from_index, to_list, to_ind
|
||||
end
|
||||
|
||||
function inv_lib.put_items(pos, inv, listname, item, stacks, idx)
|
||||
local name = item:get_name()
|
||||
local count = item:get_count()
|
||||
for _, i in ipairs(stacks or {}) do
|
||||
if not idx or idx == i then
|
||||
local stack = inv:get_stack(listname, i)
|
||||
if stack:item_fits(item) then
|
||||
stack:add_item(item)
|
||||
inv:set_stack(listname, i, stack)
|
||||
local leftover = stack:add_item({name = name, count = count})
|
||||
count = leftover:get_count()
|
||||
inv:set_stack(listname, i, stack)
|
||||
if count == 0 then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
if count > 0 then
|
||||
return ItemStack({name = name, count = count})
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
@ -20,14 +20,14 @@ local S = techage.S
|
||||
techage.firebox = {}
|
||||
|
||||
techage.firebox.Burntime = {
|
||||
["techage:charcoal"] = true, -- will be replaced by burntime
|
||||
["default:coal_lump"] = true,
|
||||
["default:coalblock"] = true,
|
||||
["techage:oil_source"] = true,
|
||||
["techage:gas"] = true,
|
||||
["techage:gasoline"] = true,
|
||||
["techage:naphtha"] = true,
|
||||
["techage:fueloil"] = true,
|
||||
["techage:charcoal"] = 1, -- will be replaced by burntime
|
||||
["default:coal_lump"] = 1,
|
||||
["default:coalblock"] = 1,
|
||||
["techage:oil_source"] = 1,
|
||||
["techage:gas"] = 1,
|
||||
["techage:gasoline"] = 1,
|
||||
["techage:naphtha"] = 1,
|
||||
["techage:fueloil"] = 1,
|
||||
}
|
||||
|
||||
techage.firebox.ValidOilFuels = {
|
||||
@ -44,7 +44,7 @@ local function determine_burntimes()
|
||||
techage.firebox.Burntime[k] = fuel.time
|
||||
end
|
||||
end
|
||||
minetest.after(1, determine_burntimes)
|
||||
minetest.register_on_mods_loaded(determine_burntimes)
|
||||
|
||||
function techage.firebox.formspec(nvm)
|
||||
local fuel_percent = 0
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -29,7 +29,7 @@ local ProbabilityCorrections = {
|
||||
-- collect all registered ores and calculate the probability
|
||||
local function add_ores()
|
||||
for _,item in pairs(minetest.registered_ores) do
|
||||
if minetest.registered_nodes[item.ore] then
|
||||
if not ore_probability[item.ore] and minetest.registered_nodes[item.ore] then
|
||||
local drop = minetest.registered_nodes[item.ore].drop
|
||||
if type(drop) == "string"
|
||||
and drop ~= item.ore
|
||||
@ -66,8 +66,14 @@ local function add_ores()
|
||||
minetest.log("info", string.format("[techage] Overall probability %g", overall_probability))
|
||||
end
|
||||
|
||||
minetest.after(1, add_ores)
|
||||
minetest.register_on_mods_loaded(add_ores)
|
||||
|
||||
--
|
||||
-- Change the probability of ores or register new ores for sieving
|
||||
--
|
||||
function techage.register_ore_for_gravelsieve(ore_name, probability)
|
||||
ore_probability[ore_name] = probability
|
||||
end
|
||||
|
||||
-- determine ore based on the calculated probability
|
||||
function techage.gravelsieve_get_random_gravel_ore()
|
||||
|
@ -57,16 +57,19 @@ local function get_remote_pos(pos, rmt_name)
|
||||
end
|
||||
|
||||
local function get_free_server_list(pos, owner)
|
||||
local tbl = {M(pos):get_string("remote_name")}
|
||||
for key,item in pairs(Stations:get_node_table(pos)) do
|
||||
if item.single and item.owner == owner then
|
||||
if M(pos):get_string("node_type") == M(S2P(key)):get_string("node_type") then
|
||||
tbl[#tbl+1] = item.conn_name
|
||||
if Stations and Stations.get_node_table then
|
||||
local tbl = {M(pos):get_string("remote_name")}
|
||||
for key,item in pairs(Stations:get_node_table(pos) or {}) do
|
||||
if item.single and item.owner == owner then
|
||||
if M(pos):get_string("node_type") == M(S2P(key)):get_string("node_type") then
|
||||
tbl[#tbl+1] = item.conn_name
|
||||
end
|
||||
end
|
||||
end
|
||||
tbl[#tbl+1] = ""
|
||||
return tbl
|
||||
end
|
||||
tbl[#tbl+1] = ""
|
||||
return tbl
|
||||
return {}
|
||||
end
|
||||
|
||||
local function on_lose_connection(pos, node_type)
|
||||
@ -78,8 +81,11 @@ local function on_lose_connection(pos, node_type)
|
||||
end
|
||||
|
||||
local function on_dropdown(pos)
|
||||
local owner = M(pos):get_string("owner")
|
||||
return table.concat(get_free_server_list(pos, owner), ",")
|
||||
if pos then
|
||||
local owner = M(pos):get_string("owner")
|
||||
return table.concat(get_free_server_list(pos, owner), ",") or ""
|
||||
end
|
||||
return ""
|
||||
end
|
||||
|
||||
local function update_node_data(pos, state, conn_name, remote_name, rmt_pos)
|
||||
@ -178,7 +184,7 @@ function techage.hyperloop.remote_pos(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if Stations:get(nvm.rmt_pos) then
|
||||
if M(pos):contains("remote_name") then
|
||||
return nvm.rmt_pos
|
||||
return nvm.rmt_pos or pos
|
||||
end
|
||||
end
|
||||
end
|
||||
|
127
basis/lib.lua
127
basis/lib.lua
@ -76,7 +76,7 @@ for _,row in ipairs(ROTATION) do
|
||||
end
|
||||
|
||||
function techage.facedir_to_rotation(facedir)
|
||||
return FACEDIR_TO_ROT[facedir]
|
||||
return FACEDIR_TO_ROT[facedir] or FACEDIR_TO_ROT[0]
|
||||
end
|
||||
|
||||
function techage.param2_turn_left(param2)
|
||||
@ -129,7 +129,6 @@ function techage.param2_turn_up(facedir, param2)
|
||||
end
|
||||
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Rotate nodes around the center
|
||||
-------------------------------------------------------------------------------
|
||||
@ -181,12 +180,12 @@ function techage.rotate_around_center(nodes1, turn, cpos)
|
||||
return nodes2
|
||||
end
|
||||
|
||||
-- allowed for digging
|
||||
local RegisteredNodesToBeDug = {}
|
||||
|
||||
function techage.register_node_to_be_dug(name)
|
||||
RegisteredNodesToBeDug[name] = true
|
||||
end
|
||||
-------------------------------------------------------------------------------
|
||||
-- Helper functions
|
||||
-------------------------------------------------------------------------------
|
||||
-- allowed for digging
|
||||
local SimpleNodes = {}
|
||||
|
||||
-- translation from param2 to dir (out of the node upwards)
|
||||
local Param2Dir = {}
|
||||
@ -244,6 +243,17 @@ function techage.add_to_set(set, x)
|
||||
end
|
||||
end
|
||||
|
||||
-- techage.tbl_filter({"a", "b", "c", "d"}, function(v, k, t) return v >= "c" end) --> {"c","d"}
|
||||
techage.tbl_filter = function(t, filterIter)
|
||||
local out = {}
|
||||
|
||||
for k, v in pairs(t) do
|
||||
if filterIter(v, k, t) then out[k] = v end
|
||||
end
|
||||
|
||||
return out
|
||||
end
|
||||
|
||||
function techage.get_node_lvm(pos)
|
||||
local node = minetest.get_node_or_nil(pos)
|
||||
if node then
|
||||
@ -273,21 +283,54 @@ function techage.is_air_like(name)
|
||||
end
|
||||
|
||||
-- returns true, if node can be dug, otherwise false
|
||||
function techage.can_node_dig(node, ndef)
|
||||
if RegisteredNodesToBeDug[node.name] then
|
||||
function techage.can_dig_node(name, ndef)
|
||||
if not ndef then return false end
|
||||
if SimpleNodes[name] ~= nil then
|
||||
return SimpleNodes[name]
|
||||
end
|
||||
|
||||
if ndef.groups and ndef.groups.techage_door == 1 then
|
||||
SimpleNodes[name] = true
|
||||
return true
|
||||
end
|
||||
if not ndef then return false end
|
||||
if node.name == "ignore" then return false end
|
||||
if node.name == "air" then return true end
|
||||
if ndef.buildable_to == true then return true end
|
||||
if ndef.diggable == false then return false end
|
||||
if ndef.after_dig_node then return false end
|
||||
if name == "ignore" then
|
||||
SimpleNodes[name] = false
|
||||
return false
|
||||
end
|
||||
if name == "air" then
|
||||
SimpleNodes[name] = true
|
||||
return true
|
||||
end
|
||||
if ndef.buildable_to == true then
|
||||
SimpleNodes[name] = true
|
||||
return true
|
||||
end
|
||||
-- don't remove nodes with some intelligence or undiggable nodes
|
||||
if ndef.drop == "" then
|
||||
SimpleNodes[name] = false
|
||||
return false
|
||||
end
|
||||
if ndef.diggable == false then
|
||||
SimpleNodes[name] = false
|
||||
return false
|
||||
end
|
||||
if ndef.after_dig_node then
|
||||
SimpleNodes[name] = false
|
||||
return false
|
||||
end
|
||||
-- add it to the white list
|
||||
RegisteredNodesToBeDug[node.name] = true
|
||||
SimpleNodes[name] = true
|
||||
return true
|
||||
end
|
||||
|
||||
-- Simple nodes
|
||||
function techage.register_simple_nodes(node_names, is_valid)
|
||||
if is_valid == nil then is_valid = true end
|
||||
for _,name in ipairs(node_names or {}) do
|
||||
SimpleNodes[name] = is_valid
|
||||
end
|
||||
end
|
||||
|
||||
techage.dig_states = {
|
||||
NOT_DIGGABLE = 1,
|
||||
INV_FULL = 2,
|
||||
@ -421,50 +464,6 @@ function techage.item_image_small(x, y, itemname, tooltip_prefix)
|
||||
tooltip
|
||||
end
|
||||
|
||||
function techage.mydump(o, indent, nested, level)
|
||||
local t = type(o)
|
||||
if not level and t == "userdata" then
|
||||
-- when userdata (e.g. player) is passed directly, print its metatable:
|
||||
return "userdata metatable: " .. techage.mydump(getmetatable(o))
|
||||
end
|
||||
if t ~= "table" then
|
||||
return basic_dump(o)
|
||||
end
|
||||
-- Contains table -> true/nil of currently nested tables
|
||||
nested = nested or {}
|
||||
if nested[o] then
|
||||
return "<circular reference>"
|
||||
end
|
||||
nested[o] = true
|
||||
indent = " "
|
||||
level = level or 1
|
||||
local t = {}
|
||||
local dumped_indexes = {}
|
||||
for i, v in ipairs(o) do
|
||||
t[#t + 1] = techage.mydump(v, indent, nested, level + 1)
|
||||
dumped_indexes[i] = true
|
||||
end
|
||||
for k, v in pairs(o) do
|
||||
if not dumped_indexes[k] then
|
||||
if type(k) ~= "string" or not is_valid_identifier(k) then
|
||||
k = "["..techage.mydump(k, indent, nested, level + 1).."]"
|
||||
end
|
||||
v = techage.mydump(v, indent, nested, level + 1)
|
||||
t[#t + 1] = k.." = "..v
|
||||
end
|
||||
end
|
||||
nested[o] = nil
|
||||
if indent ~= "" then
|
||||
local indent_str = string.rep(indent, level)
|
||||
local end_indent_str = string.rep(indent, level - 1)
|
||||
return string.format("{%s%s%s}",
|
||||
indent_str,
|
||||
table.concat(t, ","..indent_str),
|
||||
end_indent_str)
|
||||
end
|
||||
return "{"..table.concat(t, ", ").."}"
|
||||
end
|
||||
|
||||
function techage.vector_dump(posses)
|
||||
local t = {}
|
||||
for _,pos in ipairs(posses) do
|
||||
@ -482,7 +481,7 @@ end
|
||||
|
||||
function techage.wrench_tooltip(x, y)
|
||||
local tooltip = S("Block has an\nadditional wrench menu")
|
||||
return "label["..x..","..y..";"..minetest.colorize("#000000", minetest.formspec_escape("[?]")).."]"..
|
||||
return "image["..x.."," .. y .. ";0.5,0.5;techage_inv_wrench.png]" ..
|
||||
"tooltip["..x..","..y..";0.5,0.5;"..tooltip..";#0C3D32;#FFFFFF]"
|
||||
end
|
||||
|
||||
@ -493,6 +492,10 @@ function techage.register_mobs_mods(mod)
|
||||
techage.RegisteredMobsMods[mod] = true
|
||||
end
|
||||
|
||||
function techage.beduino_signed_var(val)
|
||||
val = val or 0
|
||||
return val >= 32768 and val - 0x10000 or val
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Terminal history buffer
|
||||
@ -561,6 +564,8 @@ function techage.add_expoint(player, number)
|
||||
end
|
||||
end
|
||||
|
||||
-- Delete number with: `//lua minetest.get_player_by_name("<name>"):get_meta():set_string("techage_collider_number", "")`
|
||||
|
||||
function techage.on_remove_collider(player)
|
||||
if player and player.get_meta then
|
||||
local meta = player:get_meta()
|
||||
|
@ -75,6 +75,24 @@ techage.liquid.recv_message = {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 128 then
|
||||
return 0, techage.get_node_lvm(pos).name
|
||||
elseif topic == 134 then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.liquid = nvm.liquid or {}
|
||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
||||
if payload[1] == 1 then
|
||||
local value = techage.power.percent(LQD(pos).capa, nvm.liquid.amount)
|
||||
return 0, {math.floor(value + 0.5)}
|
||||
else
|
||||
return 0, {nvm.liquid.amount}
|
||||
end
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
-- like: register_liquid("techage:ta3_barrel_oil", "techage:ta3_barrel_empty", 10, "techage:oil")
|
||||
@ -83,6 +101,9 @@ function techage.register_liquid(full_container, empty_container, container_size
|
||||
ContainerDef[empty_container] = ContainerDef[empty_container] or {}
|
||||
ContainerDef[empty_container][inv_item] = full_container
|
||||
IsLiquid[inv_item] = true
|
||||
if inv_item == "techage:water" and container_size == 1 then
|
||||
techage.register_water_bucket(empty_container, full_container)
|
||||
end
|
||||
end
|
||||
|
||||
local function get_liquid_def(full_container)
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
]]--
|
||||
|
||||
local MAX_NUM = 128
|
||||
local marker = {}
|
||||
|
||||
local MarkedNodes = {} -- t[player] = {{entity, pos},...}
|
||||
@ -59,7 +60,7 @@ function marker.get_poslist(name)
|
||||
for _,item in ipairs(MarkedNodes[name] or {}) do
|
||||
table.insert(lst, item.pos)
|
||||
idx = idx + 1
|
||||
if idx >= 16 then break end
|
||||
if idx >= MAX_NUM then break end
|
||||
end
|
||||
return lst
|
||||
end
|
||||
@ -86,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",
|
||||
@ -97,7 +106,6 @@ minetest.register_entity(":techage:block_marker", {
|
||||
"techage_cube_mark.png",
|
||||
"techage_cube_mark.png",
|
||||
},
|
||||
--use_texture_alpha = true,
|
||||
physical = false,
|
||||
visual_size = {x=1.1, y=1.1},
|
||||
collisionbox = {-0.55,-0.55,-0.55, 0.55,0.55,0.55},
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -62,16 +62,20 @@ local P = minetest.string_to_pos
|
||||
local M = minetest.get_meta
|
||||
local N = techage.get_node_lvm
|
||||
|
||||
local MAX_CYCLE_TIME = 20
|
||||
|
||||
--
|
||||
-- TechAge machine states
|
||||
--
|
||||
|
||||
techage.RUNNING = 1 -- in normal operation/turned on
|
||||
techage.BLOCKED = 2 -- a pushing node is blocked due to a full destination inventory
|
||||
techage.STANDBY = 3 -- nothing to do (e.g. no input items), or node (world) not loaded
|
||||
techage.NOPOWER = 4 -- only for power consuming nodes, no operation
|
||||
techage.FAULT = 5 -- any fault state (e.g. wrong source items), which can be fixed by the player
|
||||
techage.STOPPED = 6 -- not operational/turned off
|
||||
techage.RUNNING = 1 -- in normal operation/turned on
|
||||
techage.BLOCKED = 2 -- a pushing node is blocked due to a full destination inventory
|
||||
techage.STANDBY = 3 -- nothing to do (e.g. no input items), or node (world) not loaded
|
||||
techage.NOPOWER = 4 -- only for power consuming nodes, no operation
|
||||
techage.FAULT = 5 -- any fault state (e.g. wrong source items), which can be fixed by the player
|
||||
techage.STOPPED = 6 -- not operational/turned off
|
||||
techage.UNLOADED = 7 -- Map block unloaded
|
||||
techage.INACTIVE = 8 -- Map block loaded but node is not actively working
|
||||
|
||||
techage.StatesImg = {
|
||||
"techage_inv_button_on.png",
|
||||
@ -133,13 +137,15 @@ local function has_power(pos, nvm)
|
||||
return true
|
||||
end
|
||||
|
||||
local function swap_node(pos, name)
|
||||
local function swap_node(pos, new_name, old_name)
|
||||
local node = techage.get_node_lvm(pos)
|
||||
if node.name == name then
|
||||
if node.name == new_name then
|
||||
return
|
||||
end
|
||||
node.name = name
|
||||
minetest.swap_node(pos, node)
|
||||
if node.name == old_name then
|
||||
node.name = new_name
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
end
|
||||
|
||||
-- true if node_timer should be executed
|
||||
@ -174,7 +180,7 @@ function NodeStates:new(attr)
|
||||
cycle_time = attr.cycle_time, -- for running state
|
||||
standby_ticks = attr.standby_ticks, -- for standby state
|
||||
-- optional
|
||||
countdown_ticks = attr.countdown_ticks or 1,
|
||||
countdown_ticks = attr.countdown_ticks or 1,
|
||||
node_name_passive = attr.node_name_passive,
|
||||
node_name_active = attr.node_name_active,
|
||||
infotext_name = attr.infotext_name,
|
||||
@ -220,7 +226,7 @@ function NodeStates:stop(pos, nvm)
|
||||
self.stop_node(pos, nvm, state)
|
||||
end
|
||||
if self.node_name_passive then
|
||||
swap_node(pos, self.node_name_passive)
|
||||
swap_node(pos, self.node_name_passive, self.node_name_active)
|
||||
end
|
||||
if self.infotext_name then
|
||||
local number = M(pos):get_string("node_number")
|
||||
@ -257,7 +263,7 @@ function NodeStates:start(pos, nvm)
|
||||
end
|
||||
nvm.techage_countdown = self.countdown_ticks
|
||||
if self.node_name_active then
|
||||
swap_node(pos, self.node_name_active)
|
||||
swap_node(pos, self.node_name_active, self.node_name_passive)
|
||||
end
|
||||
if self.infotext_name then
|
||||
local number = M(pos):get_string("node_number")
|
||||
@ -278,6 +284,7 @@ function NodeStates:start(pos, nvm)
|
||||
if self.quick_start and state == STOPPED then
|
||||
self.quick_start(pos, 0)
|
||||
end
|
||||
self:trigger_state(pos, nvm)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
@ -288,7 +295,7 @@ function NodeStates:standby(pos, nvm, err_string)
|
||||
if state == RUNNING or state == BLOCKED then
|
||||
nvm.techage_state = STANDBY
|
||||
if self.node_name_passive then
|
||||
swap_node(pos, self.node_name_passive)
|
||||
swap_node(pos, self.node_name_passive, self.node_name_active)
|
||||
end
|
||||
if self.infotext_name then
|
||||
local number = M(pos):get_string("node_number")
|
||||
@ -313,7 +320,7 @@ function NodeStates:blocked(pos, nvm, err_string)
|
||||
if state == RUNNING then
|
||||
nvm.techage_state = BLOCKED
|
||||
if self.node_name_passive then
|
||||
swap_node(pos, self.node_name_passive)
|
||||
swap_node(pos, self.node_name_passive, self.node_name_active)
|
||||
end
|
||||
if self.infotext_name then
|
||||
local number = M(pos):get_string("node_number")
|
||||
@ -337,7 +344,7 @@ function NodeStates:nopower(pos, nvm, err_string)
|
||||
if state ~= NOPOWER then
|
||||
nvm.techage_state = NOPOWER
|
||||
if self.node_name_passive then
|
||||
swap_node(pos, self.node_name_passive)
|
||||
swap_node(pos, self.node_name_passive, self.node_name_active)
|
||||
end
|
||||
if self.infotext_name then
|
||||
local number = M(pos):get_string("node_number")
|
||||
@ -362,7 +369,7 @@ function NodeStates:fault(pos, nvm, err_string)
|
||||
if state == RUNNING or state == STOPPED then
|
||||
nvm.techage_state = FAULT
|
||||
if self.node_name_passive then
|
||||
swap_node(pos, self.node_name_passive)
|
||||
swap_node(pos, self.node_name_passive, self.node_name_active)
|
||||
end
|
||||
if self.infotext_name then
|
||||
local number = M(pos):get_string("node_number")
|
||||
@ -464,7 +471,7 @@ function NodeStates:on_receive_message(pos, topic, payload)
|
||||
if node.name == "ignore" then -- unloaded node?
|
||||
return "unloaded"
|
||||
elseif nvm.techage_state == RUNNING then
|
||||
local ttl = (nvm.last_active or 0) + 2 * (self.cycle_time or 0)
|
||||
local ttl = (nvm.last_active or 0) + MAX_CYCLE_TIME
|
||||
if ttl < minetest.get_gametime() then
|
||||
return "inactive"
|
||||
end
|
||||
@ -479,6 +486,54 @@ function NodeStates:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end
|
||||
|
||||
function NodeStates:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
if topic == 1 then
|
||||
if payload[1] == 0 then
|
||||
self:stop(pos, techage.get_nvm(pos))
|
||||
return 0
|
||||
else
|
||||
self:start(pos, techage.get_nvm(pos))
|
||||
return 0
|
||||
end
|
||||
else
|
||||
return 2 -- unknown or invalid topic
|
||||
end
|
||||
end
|
||||
|
||||
function NodeStates:on_beduino_request_data(pos, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 128 then
|
||||
return 0, techage.get_node_lvm(pos).name
|
||||
elseif topic == 129 then
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name == "ignore" then -- unloaded node?
|
||||
return 0, {techage.UNLOADED}
|
||||
elseif nvm.techage_state == RUNNING then
|
||||
local ttl = (nvm.last_active or 0) + MAX_CYCLE_TIME
|
||||
if ttl < minetest.get_gametime() then
|
||||
return 0, {techage.INACTIVE}
|
||||
end
|
||||
end
|
||||
return 0, {nvm.techage_state or STOPPED}
|
||||
else
|
||||
return 2, "" -- topic is unknown or invalid
|
||||
end
|
||||
end
|
||||
|
||||
function NodeStates.get_beduino_state(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if node.name == "ignore" then -- unloaded node?
|
||||
return 0, {techage.UNLOADED}
|
||||
elseif nvm.techage_state == RUNNING then
|
||||
local ttl = (nvm.last_active or 0) + MAX_CYCLE_TIME
|
||||
if ttl < minetest.get_gametime() then
|
||||
return 0, {techage.INACTIVE}
|
||||
end
|
||||
end
|
||||
return 0, {nvm.techage_state or STOPPED}
|
||||
end
|
||||
|
||||
-- restart timer
|
||||
function NodeStates:on_node_load(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
|
@ -71,7 +71,7 @@ end
|
||||
-------------------------------------------------------------------
|
||||
-- Storage scheduler
|
||||
-------------------------------------------------------------------
|
||||
local CYCLE_TIME = 900 -- store data every 15 min
|
||||
local CYCLE_TIME = 600 -- store data every 10 min
|
||||
local JobQueue = {}
|
||||
local first = 0
|
||||
local last = -1
|
||||
@ -97,7 +97,9 @@ minetest.register_globalstep(function(dtime)
|
||||
SystemTime = SystemTime + dtime
|
||||
local key = pop()
|
||||
if key and NvmStore[key] then
|
||||
--debug(key, NvmStore[key])
|
||||
-- minetest.log("warning",
|
||||
-- string.format("[TA Storage] SystemTime = %.3f, #JobQueue = %d, in_use = %s",
|
||||
-- SystemTime, last - first, NvmStore[key].in_use))
|
||||
local t = minetest.get_us_time()
|
||||
if NvmStore[key].in_use then
|
||||
NvmStore[key].in_use = nil
|
||||
@ -151,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 {}
|
||||
|
@ -65,6 +65,7 @@ function api.store_mapblock_data(key, mapblock_data)
|
||||
if pos then
|
||||
item._POS_ = nil
|
||||
local data = serialize(item)
|
||||
item._POS_ = pos
|
||||
local meta = M(pos)
|
||||
meta:set_string("ta_data", data)
|
||||
meta:mark_as_private("ta_data")
|
||||
|
@ -20,6 +20,7 @@ local M = minetest.get_meta
|
||||
-------------------------------------------------------------------
|
||||
local MN = minetest.get_current_modname()
|
||||
local WP = minetest.get_worldpath()
|
||||
local use_marshal = minetest.settings:get_bool('techage_use_marshal', false)
|
||||
local MAR_MAGIC = 0x8e
|
||||
|
||||
if not techage.IE then
|
||||
@ -55,7 +56,6 @@ local function set_block(key, data)
|
||||
set:bind(1, key)
|
||||
set:bind_blob(2, data)
|
||||
set:step()
|
||||
return true
|
||||
end
|
||||
|
||||
local function get_block(key)
|
||||
@ -72,10 +72,14 @@ end
|
||||
local api = {}
|
||||
|
||||
function api.store_mapblock_data(key, mapblock_data)
|
||||
-- deactivated due to weird server crashes without error logs
|
||||
--local s = marshal.encode(mapblock_data)
|
||||
local s = minetest.serialize(mapblock_data)
|
||||
return set_block(key, s)
|
||||
if use_marshal and mapblock_data then
|
||||
local data = marshal.encode(mapblock_data)
|
||||
if data then
|
||||
set_block(key, data)
|
||||
end
|
||||
else
|
||||
set_block(key, minetest.serialize(mapblock_data))
|
||||
end
|
||||
end
|
||||
|
||||
function api.get_mapblock_data(key)
|
||||
|
88
basis/pack_lib.lua
Normal file
88
basis/pack_lib.lua
Normal 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
|
@ -74,9 +74,12 @@ local function input_string(recipe)
|
||||
return table.concat(tbl, "")
|
||||
end
|
||||
|
||||
function techage.recipes.get(nvm, rtype)
|
||||
function techage.recipes.get(nvm, rtype, owner)
|
||||
local recipes = Recipes[rtype] or {}
|
||||
return recipes[nvm.recipe_idx or 1]
|
||||
if owner then
|
||||
recipes = filter_recipes_based_on_points(recipes, owner)
|
||||
end
|
||||
return recipes[nvm.recipe_idx or 1] or recipes[1]
|
||||
end
|
||||
|
||||
-- Add 4 input/output/waste recipe
|
||||
@ -156,8 +159,10 @@ function techage.recipes.on_receive_fields(pos, formname, fields, player)
|
||||
if not nvm.running then
|
||||
if fields.next == ">>" then
|
||||
nvm.recipe_idx = nvm.recipe_idx + 1
|
||||
return true
|
||||
elseif fields.priv == "<<" then
|
||||
nvm.recipe_idx = nvm.recipe_idx - 1
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -166,6 +171,14 @@ function techage.recipes.get_recipe(name)
|
||||
return NormalizedRecipes[name]
|
||||
end
|
||||
|
||||
function techage.recipes.set_recipe(pos, rtype, idx)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if not nvm.running then
|
||||
local recipes = Recipes[rtype] or {}
|
||||
idx = tonumber(idx) or 1
|
||||
nvm.recipe_idx = range(idx, 1, #recipes)
|
||||
end
|
||||
end
|
||||
|
||||
function techage.recipes.get_default_group_item_name(item_name)
|
||||
if item_name and item_name:sub(1, 6) == "group:" then
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -31,7 +31,7 @@ end
|
||||
|
||||
function techage.shared_inv.node_timer(pos, elapsed)
|
||||
local rmt_pos = remote_pos(pos)
|
||||
if techage.is_activeformspec(pos) then
|
||||
if rmt_pos and techage.is_activeformspec(pos) then
|
||||
copy_inventory_list(rmt_pos, pos, "main")
|
||||
return true
|
||||
end
|
||||
@ -42,8 +42,10 @@ end
|
||||
function techage.shared_inv.before_inv_access(pos, listname)
|
||||
if hyperloop.is_client(pos) then
|
||||
local rmt_pos = remote_pos(pos)
|
||||
copy_inventory_list(rmt_pos, pos, listname)
|
||||
return true
|
||||
if rmt_pos then
|
||||
copy_inventory_list(rmt_pos, pos, listname)
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
@ -52,8 +54,10 @@ end
|
||||
function techage.shared_inv.after_inv_access(pos, listname)
|
||||
if hyperloop.is_client(pos) then
|
||||
local rmt_pos = remote_pos(pos)
|
||||
copy_inventory_list(pos, rmt_pos, listname)
|
||||
return true
|
||||
if rmt_pos then
|
||||
copy_inventory_list(pos, rmt_pos, listname)
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
@ -61,8 +65,10 @@ end
|
||||
function techage.shared_inv.on_rightclick(pos, clicker, listname)
|
||||
if hyperloop.is_client(pos) then
|
||||
local rmt_pos = remote_pos(pos)
|
||||
copy_inventory_list(rmt_pos, pos, listname)
|
||||
techage.set_activeformspec(pos, clicker)
|
||||
minetest.get_node_timer(pos):start(2)
|
||||
if rmt_pos then
|
||||
copy_inventory_list(rmt_pos, pos, listname)
|
||||
techage.set_activeformspec(pos, clicker)
|
||||
minetest.get_node_timer(pos):start(2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -16,8 +16,8 @@ local S = techage.S
|
||||
techage.menu = {}
|
||||
|
||||
local function index(list, x)
|
||||
for idx, v in ipairs(list) do
|
||||
if v == x then return idx end
|
||||
for idx, v in ipairs(list or {}) do
|
||||
if tostring(v) == x then return idx end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
@ -99,9 +99,8 @@ local function generate_formspec_substring(pos, meta, form_def, player_name)
|
||||
end
|
||||
tbl[#tbl+1] = "label[4.75," .. offs .. ";" .. val .. "]"
|
||||
elseif elem.type == "dropdown" then
|
||||
local l = elem.choices:split(",")
|
||||
if nvm.running or techage.is_running(nvm) then
|
||||
local val = elem.default
|
||||
local val = elem.default or ""
|
||||
if meta:contains(elem.name) then
|
||||
val = meta:get_string(elem.name) or ""
|
||||
end
|
||||
@ -120,11 +119,21 @@ local function generate_formspec_substring(pos, meta, form_def, player_name)
|
||||
if meta:contains(elem.name) then
|
||||
val = meta:get_string(elem.name) or ""
|
||||
end
|
||||
local idx = index(l, val) or 1
|
||||
local idx
|
||||
if elem.values then
|
||||
idx = index(elem.values, val) or 1
|
||||
else
|
||||
local l = elem.choices:split(",")
|
||||
idx = index(l, val) or 1
|
||||
end
|
||||
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
|
||||
@ -137,9 +146,9 @@ local function generate_formspec_substring(pos, meta, form_def, player_name)
|
||||
return player_inv_needed, table.concat(tbl, "")
|
||||
end
|
||||
|
||||
local function value_check(elem, value)
|
||||
local function value_check(elem, value, player_name)
|
||||
if elem.check then
|
||||
return elem.check(value)
|
||||
return elem.check(value, player_name)
|
||||
end
|
||||
return value ~= nil
|
||||
end
|
||||
@ -159,7 +168,7 @@ local function evaluate_data(pos, meta, form_def, fields, player_name)
|
||||
meta:set_string(elem.name, "")
|
||||
elseif fields[elem.name]:find("^[%d ]+$") then
|
||||
local val = tonumber(fields[elem.name])
|
||||
if value_check(elem, val) then
|
||||
if value_check(elem, val, player_name) then
|
||||
meta:set_int(elem.name, val)
|
||||
--print("set_int", elem.name, val)
|
||||
else
|
||||
@ -173,7 +182,8 @@ local function evaluate_data(pos, meta, form_def, fields, player_name)
|
||||
if fields[elem.name] then
|
||||
if fields[elem.name] == "" then
|
||||
meta:set_string(elem.name, "")
|
||||
elseif fields[elem.name]:find("^[%d ]+$") and value_check(elem, fields[elem.name]) then
|
||||
elseif fields[elem.name]:find("^[%d ]+$") and
|
||||
value_check(elem, fields[elem.name], player_name) then
|
||||
meta:set_string(elem.name, fields[elem.name])
|
||||
else
|
||||
res = false
|
||||
@ -184,7 +194,7 @@ local function evaluate_data(pos, meta, form_def, fields, player_name)
|
||||
meta:set_string(elem.name, "")
|
||||
elseif fields[elem.name] then
|
||||
local val = tonumber(fields[elem.name])
|
||||
if val and value_check(elem, val) then
|
||||
if val and value_check(elem, val, player_name) then
|
||||
meta:set_string(elem.name, val)
|
||||
else
|
||||
res = false
|
||||
@ -194,7 +204,7 @@ local function evaluate_data(pos, meta, form_def, fields, player_name)
|
||||
if fields[elem.name] == ""then
|
||||
meta:set_string(elem.name, "")
|
||||
elseif fields[elem.name] then
|
||||
if value_check(elem, fields[elem.name]) then
|
||||
if value_check(elem, fields[elem.name], player_name) then
|
||||
meta:set_string(elem.name, fields[elem.name])
|
||||
else
|
||||
res = false
|
||||
@ -202,7 +212,14 @@ local function evaluate_data(pos, meta, form_def, fields, player_name)
|
||||
end
|
||||
elseif elem.type == "dropdown" then
|
||||
if fields[elem.name] ~= nil then
|
||||
meta:set_string(elem.name, fields[elem.name])
|
||||
if elem.values then
|
||||
local l = elem.choices:split(",")
|
||||
local idx = index(l, fields[elem.name]) or 1
|
||||
local text = elem.values[idx]
|
||||
meta:set_string(elem.name, text)
|
||||
else
|
||||
meta:set_string(elem.name, fields[elem.name])
|
||||
end
|
||||
end
|
||||
elseif elem.type == "items" and player_name then
|
||||
local inv_name = minetest.formspec_escape(player_name) .. "_techage_wrench_menu"
|
||||
@ -294,3 +311,8 @@ function techage.menu.eval_input(pos, form_def, fields, player_name)
|
||||
end
|
||||
return fields.refresh or fields.save or fields.key_enter_field
|
||||
end
|
||||
|
||||
function techage.dropdown_index(sChoices, selected_value)
|
||||
local l = sChoices:split(",")
|
||||
return index(l, selected_value) or 1
|
||||
end
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -16,6 +16,12 @@ local S = techage.S
|
||||
local P = minetest.string_to_pos
|
||||
local M = minetest.get_meta
|
||||
|
||||
local OCEAN = "ocean"
|
||||
|
||||
if minetest.global_exists("asuna") then
|
||||
OCEAN = "below"
|
||||
end
|
||||
|
||||
local function chat_message(player_name, msg)
|
||||
if player_name then
|
||||
minetest.chat_send_player(player_name, S("[TA4 Wind Turbine]").." "..msg)
|
||||
@ -39,7 +45,7 @@ function techage.valid_place_for_windturbine(pos, player_name, num_turbines)
|
||||
local data = minetest.get_biome_data({x=pos.x, y=-2, z=pos.z})
|
||||
if data then
|
||||
local name = minetest.get_biome_name(data.biome)
|
||||
if not string.find(name, "ocean") then
|
||||
if not string.find(name, OCEAN) then
|
||||
return chat_message(player_name, S("This is a").." "..name.." "..S("biome and no ocean!"))
|
||||
end
|
||||
end
|
||||
|
60
beduino/kv_store.lua
Normal file
60
beduino/kv_store.lua
Normal file
@ -0,0 +1,60 @@
|
||||
--[[
|
||||
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
K/V Store for the Beduino controller
|
||||
|
||||
]]--
|
||||
|
||||
local COSTS = 400
|
||||
|
||||
local function ta_kv_init(cpu_pos, address, regA, regB, regC)
|
||||
local nvm = techage.get_nvm(cpu_pos)
|
||||
nvm.kv_store = {}
|
||||
return 1, COSTS
|
||||
end
|
||||
|
||||
local function ta_kv_add(cpu_pos, address, regA, regB, regC)
|
||||
local nvm = techage.get_nvm(cpu_pos)
|
||||
local text = vm16.read_ascii(cpu_pos, regA, 32)
|
||||
nvm.kv_store[text] = regB
|
||||
return 1, COSTS
|
||||
end
|
||||
|
||||
local function ta_kv_get(cpu_pos, address, regA, regB, regC)
|
||||
local nvm = techage.get_nvm(cpu_pos)
|
||||
local text = vm16.read_ascii(cpu_pos, regA, 32)
|
||||
return nvm.kv_store[text] or 0, COSTS
|
||||
end
|
||||
|
||||
local kvstore_c = [[
|
||||
// Initialize the key/value store
|
||||
func ta_kv_init() {
|
||||
return system(0x140, 0);
|
||||
}
|
||||
|
||||
// Add a key/value pair to the store
|
||||
func ta_kv_add(key_str, value) {
|
||||
return system(0x141, key_str, value);
|
||||
}
|
||||
|
||||
// Returns the value for the given key string
|
||||
func ta_kv_get(key_str) {
|
||||
return system(0x142, key_str);
|
||||
}
|
||||
]]
|
||||
|
||||
minetest.register_on_mods_loaded(function()
|
||||
if minetest.global_exists("beduino") and minetest.global_exists("vm16") then
|
||||
beduino.lib.register_SystemHandler(0x140, ta_kv_init)
|
||||
beduino.lib.register_SystemHandler(0x141, ta_kv_add)
|
||||
beduino.lib.register_SystemHandler(0x142, ta_kv_get)
|
||||
vm16.register_ro_file("beduino", "lib/ta_kvstore.c", kvstore_c)
|
||||
end
|
||||
end)
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -159,6 +159,15 @@ techage.register_node({"techage:chest_cart"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
if topic == 131 then -- Chest State
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return 0, {techage.get_inv_state_num(inv, "main")}
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
Tube:set_valid_sides("techage:chest_cart", {"L", "R", "F", "B"})
|
||||
|
@ -21,7 +21,7 @@ local Pipe = techage.LiquidPipe
|
||||
local MP = minetest.get_modpath("minecart")
|
||||
|
||||
local liquid = networks.liquid
|
||||
local CAPACITY = 100
|
||||
local CAPACITY = 200
|
||||
|
||||
local function on_rightclick(pos, node, clicker)
|
||||
if clicker and clicker:is_player() then
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -272,7 +272,11 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if not nvm.running then
|
||||
recipes.on_receive_fields(pos, formname, fields, player)
|
||||
if recipes.on_receive_fields(pos, formname, fields, player) then
|
||||
local mem = techage.get_mem(pos)
|
||||
mem.waste_leftover = nil
|
||||
mem.output_leftover = nil
|
||||
end
|
||||
end
|
||||
local mem = techage.get_mem(pos)
|
||||
mem.dbg_cycles = 5
|
||||
@ -327,7 +331,7 @@ minetest.register_node("techage:ta4_doser_on", {
|
||||
"techage_filling_ta4.png^techage_frame_ta4_top.png^techage_appl_hole_pipe.png",
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png",
|
||||
{
|
||||
image = "techage_filling8_ta4.png^techage_frame8_ta4.png^techage_appl_pump_up8.png",
|
||||
name = "techage_filling8_ta4.png^techage_frame8_ta4.png^techage_appl_pump_up8.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -358,7 +362,18 @@ liquid.register_nodes({"techage:ta4_doser", "techage:ta4_doser_on"}, Pipe, "pump
|
||||
|
||||
techage.register_node({"techage:ta4_doser", "techage:ta4_doser_on"}, {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return State:on_receive_message(pos, topic, payload)
|
||||
if topic == "recipe" then
|
||||
techage.recipes.set_recipe(pos, "ta4_doser", payload)
|
||||
return true
|
||||
else
|
||||
return State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
})
|
||||
|
||||
|
@ -168,6 +168,28 @@ minetest.register_node("techage:ta4_reactor", {
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
techage.register_node({"techage:ta4_reactor"}, {
|
||||
on_inv_request = function(pos, in_dir, access_type)
|
||||
local meta = minetest.get_meta(pos)
|
||||
return meta:get_inventory(), "main"
|
||||
end,
|
||||
on_pull_item = function(pos, in_dir, num, item_name)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return techage.get_items(pos, inv, "main", num)
|
||||
end,
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end,
|
||||
on_unpull_item = function(pos, in_dir, stack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return techage.put_items(inv, "main", stack)
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'techage:ta4_reactor',
|
||||
recipe = {
|
||||
|
@ -37,7 +37,7 @@ minetest.register_node("techage:cooler", {
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
{
|
||||
image = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png",
|
||||
name = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -47,7 +47,7 @@ minetest.register_node("techage:cooler", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png",
|
||||
name = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -78,7 +78,7 @@ minetest.register_node("techage:cooler_on", {
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
{
|
||||
image = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png",
|
||||
name = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -88,7 +88,7 @@ minetest.register_node("techage:cooler_on", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png",
|
||||
name = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -86,7 +86,7 @@ minetest.register_node("techage:coalfirebox", {
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
if firebox.is_free_position(pos, placer:get_player_name()) then
|
||||
techage.add_node(pos, "techage:coalfirebox")
|
||||
techage.add_node(pos, "techage:coalfirebox", true)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.running = false
|
||||
nvm.burn_cycles = 0
|
||||
@ -149,7 +149,7 @@ minetest.register_node("techage:coalfirehole_on", {
|
||||
"techage_coal_boiler.png^[colorize:black:80",
|
||||
"techage_coal_boiler.png^[colorize:black:80",
|
||||
{
|
||||
image = "techage_coal_boiler4.png^[colorize:black:80^techage_appl_firehole4.png",
|
||||
name = "techage_coal_boiler4.png^[colorize:black:80^techage_appl_firehole4.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -207,6 +207,18 @@ techage.register_node({"techage:coalfirebox"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 128 then
|
||||
return 0, techage.get_node_lvm(pos).name
|
||||
elseif topic == 129 then
|
||||
return 0, {nvm.running and techage.RUNNING or techage.STOPPED}
|
||||
elseif topic == 132 then
|
||||
return 0, {techage.fuel.get_fuel_amount(nvm)}
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -170,7 +170,7 @@ minetest.register_node("techage:generator_on", {
|
||||
"techage_filling_ta3.png^techage_appl_hole_electric.png^techage_frame_ta3.png",
|
||||
"techage_filling_ta3.png^techage_appl_open.png^techage_frame_ta3.png",
|
||||
{
|
||||
image = "techage_filling4_ta3.png^techage_appl_generator4.png^techage_frame4_ta3.png",
|
||||
name = "techage_filling4_ta3.png^techage_appl_generator4.png^techage_frame4_ta3.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -180,7 +180,7 @@ minetest.register_node("techage:generator_on", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta3.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta3.png",
|
||||
name = "techage_filling4_ta3.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta3.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -231,6 +231,17 @@ techage.register_node({"techage:generator", "techage:generator_on"}, {
|
||||
return State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 135 then -- Delivered Power
|
||||
return 0, {math.floor((nvm.provided or 0) + 0.5)}
|
||||
else
|
||||
return State:on_beduino_request_data(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- used by power terminal
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -88,7 +88,7 @@ minetest.register_node("techage:oilfirebox", {
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
if firebox.is_free_position(pos, placer:get_player_name()) then
|
||||
techage.add_node(pos, "techage:oilfirebox")
|
||||
techage.add_node(pos, "techage:oilfirebox", true)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.running = false
|
||||
nvm.burn_cycles = 0
|
||||
@ -132,6 +132,18 @@ techage.register_node({"techage:oilfirebox"}, {
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 128 then
|
||||
return 0, techage.get_node_lvm(pos).name
|
||||
elseif topic == 129 then
|
||||
return 0, {nvm.running and techage.RUNNING or techage.STOPPED}
|
||||
elseif topic == 132 then
|
||||
return 0, {fuel.get_fuel_amount(nvm)}
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -82,7 +82,7 @@ minetest.register_node("techage:turbine", {
|
||||
"techage_filling_ta3.png^techage_frame_ta3.png",
|
||||
"techage_filling_ta3.png^techage_appl_open.png^techage_frame_ta3.png",
|
||||
"techage_filling_ta3.png^techage_frame_ta3.png^techage_steam_hole.png",
|
||||
"techage_filling_ta3.png^techage_appl_turbine.png^techage_frame_ta3.png",
|
||||
"techage_filling_ta3.png^techage_appl_turbine.png^techage_frame_ta3.png^[transformFX",
|
||||
"techage_filling_ta3.png^techage_appl_turbine.png^techage_frame_ta3.png",
|
||||
},
|
||||
|
||||
@ -105,7 +105,7 @@ minetest.register_node("techage:turbine_on", {
|
||||
"techage_filling_ta3.png^techage_appl_open.png^techage_frame_ta3.png",
|
||||
"techage_filling_ta3.png^techage_frame_ta3.png^techage_steam_hole.png",
|
||||
{
|
||||
image = "techage_filling4_ta3.png^techage_appl_turbine4.png^techage_frame4_ta3.png",
|
||||
name = "techage_filling4_ta3.png^techage_appl_turbine4.png^techage_frame4_ta3.png^[transformFX",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -115,7 +115,7 @@ minetest.register_node("techage:turbine_on", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta3.png^techage_appl_turbine4.png^techage_frame4_ta3.png",
|
||||
name = "techage_filling4_ta3.png^techage_appl_turbine4.png^techage_frame4_ta3.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
|
@ -23,7 +23,7 @@ minetest.register_node("techage:ta4_collider_cooler", {
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
{
|
||||
image = "techage_appl_cooler4.png^techage_frame4_ta4_top.png",
|
||||
name = "techage_appl_cooler4.png^techage_frame4_ta4_top.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -33,7 +33,7 @@ minetest.register_node("techage:ta4_collider_cooler", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_appl_cooler4.png^techage_frame4_ta4_top.png",
|
||||
name = "techage_appl_cooler4.png^techage_frame4_ta4_top.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -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,
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -21,7 +21,9 @@ local getpos = techage.assemble.get_pos
|
||||
|
||||
local CYCLE_TIME = 2
|
||||
local TNO_MAGNETS = 22
|
||||
local PROBABILITY = 180 -- check every 20 s => 20 * 180 * 50% = 30 min
|
||||
local IMPROBABILITY = 40 -- every 40 min
|
||||
-- one point per 40 min: check every 20 s => factor = 40 * 3 = 120
|
||||
IMPROBABILITY = (minetest.settings:get("techage_expoint_rate_in_min") or 40) * 3
|
||||
|
||||
local TIME_SLOTS = 10
|
||||
local Schedule = {[0] =
|
||||
@ -59,7 +61,7 @@ local function terminal_message(pos, msg)
|
||||
end
|
||||
|
||||
local function experience_points(pos)
|
||||
if math.random(PROBABILITY) == 1 then
|
||||
if math.random(IMPROBABILITY) == 1 then
|
||||
local owner = M(pos):get_string("owner")
|
||||
local own_num = M(pos):get_string("node_number")
|
||||
local player = minetest.get_player_by_name(owner)
|
||||
@ -155,7 +157,7 @@ local function create_task(pos, task)
|
||||
end
|
||||
|
||||
-- Call on_cyclic_check of all magents so that the magnets don't need a FLB.
|
||||
local function magnet_on_cyclic_check(pos, nvm)
|
||||
local function magnets_on_cyclic_check(pos, nvm)
|
||||
local ndef = minetest.registered_nodes["techage:ta4_magnet"]
|
||||
for idx,pos2 in ipairs(nvm.magnet_positions or {}) do
|
||||
local res = ndef.on_cyclic_check(pos2)
|
||||
@ -171,6 +173,29 @@ local function magnet_on_cyclic_check(pos, nvm)
|
||||
return true
|
||||
end
|
||||
|
||||
-- Turn off all magnets so that they don't consume power
|
||||
local function magnets_turn_off(pos, nvm)
|
||||
local ndef = minetest.registered_nodes["techage:ta4_magnet"]
|
||||
for idx,pos2 in ipairs(nvm.magnet_positions or {}) do
|
||||
ndef.on_turn_off(pos2)
|
||||
end
|
||||
end
|
||||
|
||||
local function cable_inlets_turn_on_off(pos, on)
|
||||
local turn_on_off = function(pos, param2, item)
|
||||
local pos2 = getpos(pos, param2, item.route, item.yoffs)
|
||||
local node2 = minetest.get_node(pos2)
|
||||
if item.name == node2.name then
|
||||
local nvm = techage.get_nvm(pos2)
|
||||
techage.power_inlet_turn_on_off(pos2, nvm, on)
|
||||
end
|
||||
end
|
||||
|
||||
local param2 = minetest.get_node(pos).param2
|
||||
turn_on_off(pos, param2, Schedule[2])
|
||||
turn_on_off(pos, param2, Schedule[3])
|
||||
end
|
||||
|
||||
minetest.register_node("techage:ta4_detector_core", {
|
||||
description = S("TA4 Collider Detector Core"),
|
||||
tiles = {
|
||||
@ -182,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,
|
||||
@ -200,29 +224,33 @@ minetest.register_node("techage:ta4_detector_core", {
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if not magnet_on_cyclic_check(pos, nvm) then
|
||||
techage.del_laser(pos)
|
||||
if nvm.running then
|
||||
terminal_message(pos, "Detector stopped.")
|
||||
nvm.running = false
|
||||
end
|
||||
nvm.magnet_positions = nil
|
||||
elseif nvm.running then
|
||||
local res = check_state(pos)
|
||||
if res == true then
|
||||
experience_points(pos)
|
||||
add_laser(pos)
|
||||
if nvm.ticks <= TIME_SLOTS then -- only once
|
||||
terminal_message(pos, "Detector running.")
|
||||
end
|
||||
elseif res == false then
|
||||
if nvm.running then
|
||||
if not magnets_on_cyclic_check(pos, nvm) then
|
||||
techage.del_laser(pos)
|
||||
terminal_message(pos, "Detector stopped.")
|
||||
magnets_turn_off(pos, nvm)
|
||||
cable_inlets_turn_on_off(pos, false)
|
||||
nvm.running = false
|
||||
nvm.magnet_positions = nil
|
||||
terminal_message(pos, "Detector stopped.")
|
||||
end
|
||||
if nvm.running then
|
||||
play_sound(pos)
|
||||
else
|
||||
local res = check_state(pos)
|
||||
if res == true then
|
||||
experience_points(pos)
|
||||
add_laser(pos)
|
||||
if nvm.ticks <= TIME_SLOTS then -- only once
|
||||
terminal_message(pos, "Detector running.")
|
||||
end
|
||||
elseif res == false then
|
||||
techage.del_laser(pos)
|
||||
magnets_turn_off(pos, nvm)
|
||||
cable_inlets_turn_on_off(pos, false)
|
||||
nvm.running = false
|
||||
nvm.magnet_positions = nil
|
||||
terminal_message(pos, "Detector stopped.")
|
||||
end
|
||||
if nvm.running then
|
||||
play_sound(pos)
|
||||
end
|
||||
end
|
||||
end
|
||||
return true
|
||||
@ -285,6 +313,7 @@ local function start_task(pos)
|
||||
end
|
||||
nvm.magnet_positions = t
|
||||
techage.send_single(own_num, term_num, "append", "ok")
|
||||
cable_inlets_turn_on_off(pos, true)
|
||||
|
||||
coroutine.yield()
|
||||
techage.send_single(own_num, term_num, "text", "- Check magnets...")
|
||||
@ -308,6 +337,7 @@ local function start_task(pos)
|
||||
techage.send_single(own_num, term_num, "append", err .. "!!!")
|
||||
nvm.magnet_positions = nil
|
||||
nvm.locked = false
|
||||
cable_inlets_turn_on_off(pos, false)
|
||||
return
|
||||
end
|
||||
else
|
||||
@ -321,12 +351,14 @@ local function start_task(pos)
|
||||
techage.send_single(own_num, term_num, "append", err .. "!!!")
|
||||
nvm.magnet_positions = nil
|
||||
nvm.locked = false
|
||||
cable_inlets_turn_on_off(pos, false)
|
||||
return
|
||||
end
|
||||
else
|
||||
techage.send_single(own_num, term_num, "append", "defect!!!")
|
||||
nvm.magnet_positions = nil
|
||||
nvm.locked = false
|
||||
cable_inlets_turn_on_off(pos, false)
|
||||
return
|
||||
end
|
||||
coroutine.yield()
|
||||
@ -335,7 +367,7 @@ local function start_task(pos)
|
||||
techage.send_single(own_num, term_num, "append", "ok")
|
||||
|
||||
coroutine.yield()
|
||||
techage.send_single(own_num, term_num, "text", "Collider started.")
|
||||
techage.send_single(own_num, term_num, "text", "Collider starting...")
|
||||
nvm.ticks = 0
|
||||
nvm.running = true
|
||||
end
|
||||
@ -370,6 +402,9 @@ techage.register_node({"techage:ta4_detector_core"}, {
|
||||
nvm.running = false
|
||||
techage.del_laser(pos)
|
||||
nvm.locked = false
|
||||
magnets_turn_off(pos, nvm)
|
||||
cable_inlets_turn_on_off(pos, false)
|
||||
nvm.magnet_positions = nil
|
||||
return "Detector stopped."
|
||||
elseif topic == "status" then
|
||||
if nvm.running == true then
|
||||
|
@ -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,
|
||||
@ -328,7 +330,11 @@ minetest.register_node("techage:ta4_collider_cable_inlet", {
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.consumed = power.consume_power(pos, Cable, nil, PWR_NEEDED)
|
||||
if nvm.running then
|
||||
nvm.consumed = power.consume_power(pos, Cable, nil, PWR_NEEDED)
|
||||
else
|
||||
nvm.consumed = 0
|
||||
end
|
||||
return true
|
||||
end,
|
||||
|
||||
@ -346,6 +352,11 @@ function techage.power_inlet_check(pos, node, meta, nvm)
|
||||
return false, "no power"
|
||||
end
|
||||
|
||||
-- Used by the detector to turn on/off the node
|
||||
function techage.power_inlet_turn_on_off(pos, nvm, on)
|
||||
nvm.running = on
|
||||
end
|
||||
|
||||
power.register_nodes({"techage:ta4_collider_cable_inlet"}, Cable, "con", {"F"})
|
||||
|
||||
techage.register_node({"techage:ta4_collider_cable_inlet"}, {
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -28,6 +28,23 @@ local VTube = techage.VTube
|
||||
local power = networks.power
|
||||
local liquid = networks.liquid
|
||||
|
||||
local function is_junction(pos, side)
|
||||
local node = techage.get_node_lvm(techage.get_pos(pos, side))
|
||||
return node and techage.string_compare(node.name, "techage:ta3_junction")
|
||||
end
|
||||
|
||||
-- Turn the magnet to the right direction
|
||||
local function handle_legacy_magnet(pos)
|
||||
if M(pos):get_string("version") ~= "V2" then
|
||||
if is_junction(pos, "B") and not is_junction(pos, "F") then
|
||||
local node = techage.get_node_lvm(pos)
|
||||
node.param2 = (node.param2 + 2) % 4
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
end
|
||||
M(pos):set_string("version", "V2")
|
||||
end
|
||||
|
||||
minetest.register_node("techage:ta4_colliderblock", {
|
||||
description = S("TA4 Collider Steel Block"),
|
||||
tiles = {
|
||||
@ -50,7 +67,6 @@ minetest.register_node("techage:ta4_detector_magnet", {
|
||||
"techage_collider_magnet.png^techage_collider_magnet_appl.png",
|
||||
"techage_collider_magnet.png^techage_collider_magnet_appl.png",
|
||||
},
|
||||
drawtype = "nodebox",
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky = 1},
|
||||
is_ground_content = false,
|
||||
@ -61,7 +77,7 @@ minetest.register_node("techage:ta4_magnet", {
|
||||
description = S("TA4 Collider Magnet"),
|
||||
inventory_image = minetest.inventorycube(
|
||||
"techage_collider_magnet.png^techage_appl_hole_electric.png",
|
||||
"techage_collider_magnet.png^techage_appl_hole_pipe.png",
|
||||
"techage_collider_magnet.png^techage_collider_magnet_appl.png^techage_appl_hole_pipe.png^techage_collider_magnet_sign.png",
|
||||
"techage_collider_magnet.png^techage_collider_magnet_tube.png"),
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
@ -69,7 +85,7 @@ minetest.register_node("techage:ta4_magnet", {
|
||||
"techage_collider_magnet.png",
|
||||
"techage_collider_magnet.png^techage_collider_magnet_tube.png",
|
||||
"techage_collider_magnet.png^techage_collider_magnet_tube.png",
|
||||
"techage_collider_magnet.png^techage_collider_magnet_appl.png^techage_appl_hole_pipe.png^techage_collider_magnet_sign.png",
|
||||
"techage_collider_magnet.png^techage_collider_magnet_appl.png^techage_collider_magnet_sign.png",
|
||||
"techage_collider_magnet.png^techage_collider_magnet_appl.png^techage_appl_hole_pipe.png^techage_collider_magnet_sign.png",
|
||||
},
|
||||
drawtype = "nodebox",
|
||||
@ -93,6 +109,8 @@ minetest.register_node("techage:ta4_magnet", {
|
||||
},
|
||||
wield_scale = {x = 0.8, y = 0.8, z = 0.8},
|
||||
paramtype2 = "facedir",
|
||||
paramtype = "light",
|
||||
use_texture_alpha = techage.CLIP,
|
||||
groups = {cracky = 1},
|
||||
on_rotate = screwdriver.disallow,
|
||||
is_ground_content = false,
|
||||
@ -110,6 +128,7 @@ minetest.register_node("techage:ta4_magnet", {
|
||||
Cable:after_place_node(pos)
|
||||
VTube:after_place_node(pos)
|
||||
M(pos):set_string("infotext", S("TA4 Collider Magnet") .. " #0")
|
||||
M(pos):set_string("version", "V2")
|
||||
end,
|
||||
|
||||
-- To be called by the detector
|
||||
@ -119,15 +138,23 @@ minetest.register_node("techage:ta4_magnet", {
|
||||
nvm.consumed = power.consume_power(pos, Cable, 6, PWR_NEEDED)
|
||||
if nvm.tube_damage then
|
||||
nvm.tube_damage = nil
|
||||
nvm.running = nil
|
||||
return -1
|
||||
elseif nvm.liquid.amount == CAPACITY and
|
||||
nvm.liquid.name == "techage:isobutane" and
|
||||
nvm.consumed == PWR_NEEDED then
|
||||
nvm.running = true
|
||||
return 0
|
||||
end
|
||||
nvm.running = nil
|
||||
return -2
|
||||
end,
|
||||
|
||||
on_turn_off = function(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
nvm.running = nil
|
||||
end,
|
||||
|
||||
tubelib2_on_update2 = function(pos, outdir, tlib2, node)
|
||||
if tlib2.tube_type == "vtube" then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
@ -148,7 +175,7 @@ minetest.register_node("techage:ta4_magnet", {
|
||||
})
|
||||
|
||||
power.register_nodes({"techage:ta4_magnet"}, Cable, "con", {"U"})
|
||||
liquid.register_nodes({"techage:ta4_magnet"}, Pipe, "tank", {"F", "B"}, {
|
||||
liquid.register_nodes({"techage:ta4_magnet"}, Pipe, "tank", {"F"}, {
|
||||
capa = CAPACITY,
|
||||
peek = function(pos, indir)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
@ -202,6 +229,7 @@ techage.register_node({"techage:ta4_magnet"}, {
|
||||
return pos2
|
||||
end
|
||||
elseif topic == "enumerate" and payload then
|
||||
handle_legacy_magnet(pos)
|
||||
payload = tonumber(payload) or 1
|
||||
nvm.number = payload
|
||||
M(pos):set_string("infotext", S("TA4 Collider Magnet") .. " #" .. payload)
|
||||
|
@ -1,208 +0,0 @@
|
||||
--[[
|
||||
|
||||
Techage
|
||||
=======
|
||||
|
||||
Copyright (C) 2020-2021 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
TA4 Terminal
|
||||
|
||||
]]--
|
||||
|
||||
local M = minetest.get_meta
|
||||
local S = techage.S
|
||||
|
||||
local STR_LEN = 80
|
||||
local HELP = [[#### TA4 Terminal ####
|
||||
|
||||
Send commands to the connected machine
|
||||
and output text messages from the
|
||||
machine.
|
||||
|
||||
Commands can have up to 80 characters.
|
||||
Local commands:
|
||||
- clear = clear screen
|
||||
- help = this message
|
||||
- pub = switch to public use
|
||||
- priv = switch to private use
|
||||
- connect <num> = connect the machine
|
||||
|
||||
All other commands are machine dependent.
|
||||
]]
|
||||
|
||||
local function get_string(meta, num, default)
|
||||
local s = meta:get_string("bttn_text"..num)
|
||||
if not s or s == "" then
|
||||
return default
|
||||
end
|
||||
return s
|
||||
end
|
||||
|
||||
local function formspec2(mem)
|
||||
mem.command = mem.command or ""
|
||||
mem.output = mem.output or ""
|
||||
local output = minetest.formspec_escape(mem.output)
|
||||
output = output:gsub("\n", ",")
|
||||
local command = minetest.formspec_escape(mem.command)
|
||||
local bttn_text1 = get_string(meta, 1, "User1")
|
||||
local bttn_text2 = get_string(meta, 2, "User2")
|
||||
local bttn_text3 = get_string(meta, 3, "User3")
|
||||
local bttn_text4 = get_string(meta, 4, "User4")
|
||||
local bttn_text5 = get_string(meta, 5, "User5")
|
||||
local bttn_text6 = get_string(meta, 6, "User6")
|
||||
local bttn_text7 = get_string(meta, 7, "User7")
|
||||
local bttn_text8 = get_string(meta, 8, "User8")
|
||||
local bttn_text9 = get_string(meta, 9, "User9")
|
||||
return "size[10,8]"..
|
||||
"style_type[table,field;font=mono]"..
|
||||
"button[0,0;3.3,1;bttn1;"..bttn_text1.."]button[3.3,0;3.3,1;bttn2;"..bttn_text2.."]button[6.6,0;3.3,1;bttn3;"..bttn_text3.."]"..
|
||||
"button[0,0.8;3.3,1;bttn4;"..bttn_text4.."]button[3.3,0.8;3.3,1;bttn5;"..bttn_text5.."]button[6.6,0.8;3.3,1;bttn6;"..bttn_text6.."]"..
|
||||
"button[0,1.6;3.3,1;bttn7;"..bttn_text7.."]button[3.3,1.6;3.3,1;bttn8;"..bttn_text8.."]button[6.6,1.6;3.3,1;bttn9;"..bttn_text9.."]"..
|
||||
"table[0,2.5;9.8,4.7;output;"..output..";200]"..
|
||||
"field[0.4,7.7;7.6,1;cmnd;;"..mem.command.."]" ..
|
||||
"field_close_on_enter[cmnd;false]"..
|
||||
"button[7.9,7.4;2,1;enter;"..S("Enter").."]"
|
||||
end
|
||||
|
||||
local function output(pos, text)
|
||||
local mem = techage.get_mem(pos)
|
||||
mem.output = mem.output .. "\n" .. (text or "")
|
||||
mem.output = mem.output:sub(-500,-1)
|
||||
M(pos):set_string("formspec", formspec2(mem))
|
||||
end
|
||||
|
||||
local function command(pos, mem, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("owner")
|
||||
|
||||
if mem.command == "clear" then
|
||||
mem.output = ""
|
||||
mem.command = ""
|
||||
meta:set_string("formspec", formspec2(mem))
|
||||
elseif mem.command == "" then
|
||||
output(pos, ">")
|
||||
mem.command = ""
|
||||
meta:set_string("formspec", formspec2(mem))
|
||||
elseif mem.command == "help" then
|
||||
local meta = minetest.get_meta(pos)
|
||||
mem.output = HELP
|
||||
mem.command = ""
|
||||
meta:set_string("formspec", formspec2(mem))
|
||||
elseif mem.command == "pub" and owner == player then
|
||||
meta:set_int("public", 1)
|
||||
output(pos, "> "..mem.command)
|
||||
mem.command = ""
|
||||
output(pos, "Switched to public use!")
|
||||
elseif mem.command == "priv" and owner == player then
|
||||
meta:set_int("public", 0)
|
||||
output(pos, "> "..mem.command)
|
||||
mem.command = ""
|
||||
output(pos, "Switched to private use!")
|
||||
elseif meta:get_int("public") == 1 or owner == player then
|
||||
if mem.command == "clear" then
|
||||
mem.output =
|
||||
mem.command = ""
|
||||
meta:set_string("formspec", formspec2(mem))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("techage:ta4_terminal", {
|
||||
description = "TA4 Collider Terminal",
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
'techage_terminal1_top.png',
|
||||
'techage_terminal1_bottom.png',
|
||||
'techage_terminal1_side.png',
|
||||
'techage_terminal1_side.png',
|
||||
'techage_terminal1_bottom.png',
|
||||
"techage_terminal1_front.png",
|
||||
},
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-12/32, -16/32, -8/32, 12/32, -14/32, 12/32},
|
||||
{-12/32, -14/32, 12/32, 12/32, 6/32, 14/32},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-12/32, -16/32, -8/32, 12/32, -14/32, 12/32},
|
||||
{-12/32, -14/32, 12/32, 12/32, 6/32, 14/32},
|
||||
},
|
||||
},
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local number = techage.add_node(pos, minetest.get_node(pos).name)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", formspec1())
|
||||
meta:set_string("owner", placer:get_player_name())
|
||||
meta:set_string("infotext", S("TA4 Collider Terminal") .. ": " .. S("not connected")
|
||||
end,
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local mem = techage.get_mem(pos)
|
||||
if fields.number and fields.number ~= "" then
|
||||
local owner = meta:get_string("owner")
|
||||
if techage.check_numbers(fields.number, owner) then
|
||||
local own_number = meta:get_string("own_number")
|
||||
if techage.send_single(own_number, fields.number, "connect") == true then
|
||||
meta:set_string("number", fields.number)
|
||||
meta:set_string("infotext", S("TA4 Collider Terminal") .. ": " .. S("connected with") .. " " .. fields.number)
|
||||
meta:set_string("formspec", formspec2(mem))
|
||||
end
|
||||
end
|
||||
elseif (fields.enter or fields.key_enter_field) and fields.cmnd then
|
||||
mem.command = string.sub(fields.cmnd, 1, STR_LEN)
|
||||
command(pos, mem, player:get_player_name())
|
||||
elseif fields.key_up then
|
||||
mem.command = pdp13.historybuffer_priv(pos)
|
||||
meta:set_string("formspec", formspec2(mem))
|
||||
elseif fields.key_down then
|
||||
mem.command = pdp13.historybuffer_next(pos)
|
||||
meta:set_string("formspec", formspec2(mem))
|
||||
end
|
||||
end,
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata)
|
||||
techage.remove_node(pos, oldnode, oldmetadata)
|
||||
end,
|
||||
|
||||
paramtype = "light",
|
||||
use_texture_alpha = techage.CLIP,
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy=2, cracky=2, crumbly=2},
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:ta4_terminal",
|
||||
recipe = {
|
||||
{"", "techage:ta4_display", ""},
|
||||
{"dye:black", "techage:ta4_wlanchip", "default:copper_ingot"},
|
||||
{"", "techage:aluminum", ""},
|
||||
},
|
||||
})
|
||||
|
||||
techage.register_node({"techage:ta4_terminal"}, {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
if topic == "term" then
|
||||
output(pos, payload)
|
||||
return true
|
||||
elseif topic == "clear" then
|
||||
local mem = techage.get_mem(pos)
|
||||
mem.output = ""
|
||||
mem.command = ""
|
||||
M(pos):set_string("formspec", formspec2(mem))
|
||||
return true
|
||||
end
|
||||
end,
|
||||
})
|
@ -139,7 +139,6 @@ minetest.register_node("techage:ta4_collider_detector_worker", {
|
||||
"default_steel_block.png^techage_collider_detector_banner.png",
|
||||
"default_steel_block.png^techage_collider_detector_appl.png^techage_collider_detector_banner.png",
|
||||
},
|
||||
drawtype = "nodebox",
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky = 1},
|
||||
on_rotate = screwdriver.disallow,
|
||||
|
@ -30,7 +30,7 @@ local TOTAL_MAX = INV_SIZE * FUEL_STACK_MAX
|
||||
|
||||
local function count_coal(metadata)
|
||||
local total = 0
|
||||
for _,stack in pairs(metadata.inventory.fuel) do
|
||||
for _,stack in pairs(metadata.inventory.fuel or {}) do
|
||||
total = total + stack:get_count()
|
||||
end
|
||||
return total
|
||||
|
261
doc/guide.lua
261
doc/guide.lua
@ -3,123 +3,59 @@
|
||||
]]--
|
||||
|
||||
local S = techage.S
|
||||
local M = minetest.get_meta
|
||||
local MP = minetest.get_modpath("techage")
|
||||
|
||||
local tItems = techage.Items -- k/v table with item definitions
|
||||
local tPlans = techage.ConstructionPlans -- k/v table with plan definitions
|
||||
local settings = {
|
||||
symbol_item = "techage:construction_board",
|
||||
}
|
||||
|
||||
doclib.create_manual("techage", "DE", settings)
|
||||
doclib.create_manual("techage", "EN", settings)
|
||||
doclib.create_manual("techage", "pt-BR", settings)
|
||||
|
||||
local function tooltip(item)
|
||||
if type(item) == "table" then
|
||||
local img, name = item[1], item[2]
|
||||
if img == "" then -- larger image for the plan?
|
||||
return "", name
|
||||
elseif img == "10x10" then -- huge image for the plan?
|
||||
return "10x10", name
|
||||
elseif img == "5x4" then -- huge image for the plan?
|
||||
return "5x4", name
|
||||
end
|
||||
local ndef = minetest.registered_nodes[name]
|
||||
if ndef and ndef.description then
|
||||
return img, minetest.formspec_escape(ndef.description)
|
||||
end
|
||||
return img
|
||||
end
|
||||
return item
|
||||
end
|
||||
local content
|
||||
content = dofile(MP.."/doc/manual_DE.lua")
|
||||
doclib.add_to_manual("techage", "DE", content)
|
||||
content = dofile(MP.."/doc/manual_ta1_DE.lua")
|
||||
doclib.add_to_manual("techage", "DE", content)
|
||||
content = dofile(MP.."/doc/manual_ta2_DE.lua")
|
||||
doclib.add_to_manual("techage", "DE", content)
|
||||
content = dofile(MP.."/doc/manual_ta3_DE.lua")
|
||||
doclib.add_to_manual("techage", "DE", content)
|
||||
content = dofile(MP.."/doc/manual_ta4_DE.lua")
|
||||
doclib.add_to_manual("techage", "DE", content)
|
||||
content = dofile(MP.."/doc/manual_ta5_DE.lua")
|
||||
doclib.add_to_manual("techage", "DE", content)
|
||||
|
||||
content = dofile(MP.."/doc/manual_EN.lua")
|
||||
doclib.add_to_manual("techage", "EN", content)
|
||||
content = dofile(MP.."/doc/manual_ta1_EN.lua")
|
||||
doclib.add_to_manual("techage", "EN", content)
|
||||
content = dofile(MP.."/doc/manual_ta2_EN.lua")
|
||||
doclib.add_to_manual("techage", "EN", content)
|
||||
content = dofile(MP.."/doc/manual_ta3_EN.lua")
|
||||
doclib.add_to_manual("techage", "EN", content)
|
||||
content = dofile(MP.."/doc/manual_ta4_EN.lua")
|
||||
doclib.add_to_manual("techage", "EN", content)
|
||||
content = dofile(MP.."/doc/manual_ta5_EN.lua")
|
||||
doclib.add_to_manual("techage", "EN", content)
|
||||
|
||||
-- formspec images
|
||||
local function plan(images)
|
||||
local tbl = {}
|
||||
if images == "none" then return "label[1,3;"..S("No plan available") .."]" end
|
||||
for y=1,#images do
|
||||
for x=1,#images[1] do
|
||||
local item = images[y][x] or false
|
||||
if item ~= false then
|
||||
local img, tooltip = tooltip(item)
|
||||
local x_offs, y_offs = (x-1) * 0.9, (y-1) * 0.9 + 0.8
|
||||
if img == "top_view" then
|
||||
tbl[#tbl+1] = "label["..x_offs..","..y_offs..";"..S("Top view").."]"
|
||||
elseif img == "side_view" then
|
||||
tbl[#tbl+1] = "label["..x_offs..","..y_offs..";"..S("Side view").."]"
|
||||
elseif img == "sectional_view" then
|
||||
tbl[#tbl+1] = "label["..x_offs..","..y_offs..";"..S("Sectional view").."]"
|
||||
elseif img == "" then
|
||||
img = tooltip -- use tooltip for bigger image
|
||||
tbl[#tbl+1] = "image["..x_offs..","..y_offs..";2.2,2.2;"..img.."]"
|
||||
elseif img == "10x10" then
|
||||
img = tooltip -- use tooltip for bigger image
|
||||
tbl[#tbl+1] = "image["..x_offs..","..y_offs..";10,10;"..img.."]"
|
||||
elseif img == "5x4" then
|
||||
img = tooltip -- use tooltip for bigger image
|
||||
tbl[#tbl+1] = "image["..x_offs..","..y_offs..";5,4;"..img.."]"
|
||||
elseif string.find(img, ":") then
|
||||
tbl[#tbl+1] = "item_image["..x_offs..","..y_offs..";1,1;"..img.."]"
|
||||
else
|
||||
tbl[#tbl+1] = "image["..x_offs..","..y_offs..";1,1;"..img.."]"
|
||||
end
|
||||
if tooltip then
|
||||
tbl[#tbl+1] = "tooltip["..x_offs..","..y_offs..";1,1;"..tooltip..";#0C3D32;#FFFFFF]"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return table.concat(tbl)
|
||||
end
|
||||
|
||||
local function formspec_help(meta, manual)
|
||||
local bttn
|
||||
local idx = meta:get_int("index")
|
||||
local box = "box[9.5,0.9;1,1.1;#BBBBBB]"
|
||||
local aTitel = manual.aTitel
|
||||
local aText = manual.aText
|
||||
local aItemName = manual.aItemName -- item identifier as key
|
||||
local aPlanTable = manual.aPlanTable -- plan identifier as key
|
||||
|
||||
if aPlanTable[idx] ~= "" then
|
||||
bttn = "button[9.6,1;1,1;plan;"..S("Plan").."]"
|
||||
elseif aItemName[idx] ~= "" then
|
||||
local item = tItems[aItemName[idx]] or ""
|
||||
if string.find(item, ":") then
|
||||
bttn = box.."item_image[9.6,1;1,1;"..item.."]"
|
||||
else
|
||||
bttn = "image[9.3,1;2,2;"..item.."]"
|
||||
end
|
||||
else
|
||||
bttn = box
|
||||
end
|
||||
return "size[11,10]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"item_image[9.6,0;1,1;techage:construction_board]"..
|
||||
"tablecolumns[tree,width=1;text,width=10,align=inline]"..
|
||||
"tableoptions[opendepth=1]"..
|
||||
"table[0.1,0;9,5;page;"..table.concat(aTitel, ",")..";"..idx.."]"..
|
||||
bttn..
|
||||
"style_type[textarea;textcolor=#FFFFFF]"..
|
||||
"textarea[0.3,5.7;11,5.3;;"..(aText[idx] or "")..";]"..
|
||||
"box[0,5.75;10.775,4.45;#000000]"
|
||||
end
|
||||
|
||||
local function formspec_plan(meta, manual)
|
||||
local idx = meta:get_int("index")
|
||||
local images = tPlans[manual.aPlanTable[idx]] or "none"
|
||||
local titel = string.sub(manual.aTitel[idx], 3) or "unknown"
|
||||
|
||||
return "size[11,10]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"label[0,0;"..titel..":]"..
|
||||
"button[10,0;1,0.8;back;<<]"..
|
||||
plan(images)
|
||||
end
|
||||
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",
|
||||
--wall_top = {-8/16, 15/32, -6/16, 8/16, 8/16, 6/16},
|
||||
--wall_bottom = {-8/16, 15/32, -6/16, 8/16, 8/16, 6/16},
|
||||
wall_side = {-16/32, -11/32, -16/32, -15/32, 6/16, 8/16},
|
||||
}
|
||||
|
||||
@ -132,9 +68,8 @@ minetest.register_node("techage:construction_board", {
|
||||
selection_box = board_box,
|
||||
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("index", 1)
|
||||
meta:set_string("formspec", formspec_help(meta, techage.manual_DE))
|
||||
M(pos):set_string("infotext", "TA Konstruktionsplan (DE)")
|
||||
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "DE"))
|
||||
end,
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
@ -142,19 +77,7 @@ minetest.register_node("techage:construction_board", {
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
if fields.plan then
|
||||
meta:set_string("formspec", formspec_plan(meta, techage.manual_DE))
|
||||
elseif fields.back then
|
||||
meta:set_string("formspec", formspec_help(meta, techage.manual_DE))
|
||||
elseif fields.page then
|
||||
local evt = minetest.explode_table_event(fields.page)
|
||||
if evt.type == "CHG" then
|
||||
local idx = tonumber(evt.row)
|
||||
meta:set_int("index", idx)
|
||||
meta:set_string("formspec", formspec_help(meta, techage.manual_DE))
|
||||
end
|
||||
end
|
||||
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "DE", fields))
|
||||
end,
|
||||
|
||||
paramtype2 = "wallmounted",
|
||||
@ -184,9 +107,8 @@ minetest.register_node("techage:construction_board_EN", {
|
||||
selection_box = board_box,
|
||||
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("index", 1)
|
||||
meta:set_string("formspec", formspec_help(meta, techage.manual_EN))
|
||||
M(pos):set_string("infotext", "TA Construction Board (EN)")
|
||||
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "EN"))
|
||||
end,
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
@ -194,19 +116,7 @@ minetest.register_node("techage:construction_board_EN", {
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
if fields.plan then
|
||||
meta:set_string("formspec", formspec_plan(meta, techage.manual_EN))
|
||||
elseif fields.back then
|
||||
meta:set_string("formspec", formspec_help(meta, techage.manual_EN))
|
||||
elseif fields.page then
|
||||
local evt = minetest.explode_table_event(fields.page)
|
||||
if evt.type == "CHG" then
|
||||
local idx = tonumber(evt.row)
|
||||
meta:set_int("index", idx)
|
||||
meta:set_string("formspec", formspec_help(meta, techage.manual_EN))
|
||||
end
|
||||
end
|
||||
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "EN", fields))
|
||||
end,
|
||||
|
||||
paramtype2 = "wallmounted",
|
||||
@ -227,6 +137,45 @@ minetest.register_craft({
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("techage:construction_board_pt_BR", {
|
||||
description = "TA Placa de construção (pt-BR)",
|
||||
inventory_image = 'techage_constr_plan_inv.png',
|
||||
tiles = {"techage_constr_plan.png"},
|
||||
drawtype = "nodebox",
|
||||
node_box = board_box,
|
||||
selection_box = board_box,
|
||||
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
M(pos):set_string("infotext", "TA Placa de construção (pt-BR)")
|
||||
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "pt-BR"))
|
||||
end,
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
local player_name = player:get_player_name()
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
return
|
||||
end
|
||||
M(pos):set_string("formspec", doclib.formspec(pos, "techage", "pt-BR", fields))
|
||||
end,
|
||||
|
||||
paramtype2 = "wallmounted",
|
||||
paramtype = "light",
|
||||
use_texture_alpha = techage.CLIP,
|
||||
sunlight_propagates = true,
|
||||
is_ground_content = false,
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:construction_board_pt_BR",
|
||||
recipe = {
|
||||
{"default:stick", "default:stick", "default:paper"},
|
||||
{"default:paper", "default:paper", "default:paper"},
|
||||
{"default:paper", "default:paper", "default:paper"},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "techage:construction_board_EN",
|
||||
@ -236,5 +185,35 @@ minetest.register_craft({
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "techage:construction_board",
|
||||
recipe = {"techage:construction_board_pt_BR"},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "techage:construction_board_pt_BR",
|
||||
recipe = {"techage:construction_board_EN"},
|
||||
})
|
||||
|
||||
--
|
||||
-- Legacy API functions
|
||||
--
|
||||
function techage.add_to_manual(language, titles, texts, items, plans)
|
||||
local content = {titles = titles, texts = texts, images = items or {}, plans = plans or {}}
|
||||
doclib.add_to_manual("techage", language, content)
|
||||
end
|
||||
|
||||
function techage.add_manual_items(table_with_items)
|
||||
for name, image in pairs(table_with_items) do
|
||||
doclib.add_manual_image("techage", "EN", name, image)
|
||||
doclib.add_manual_image("techage", "DE", name, image)
|
||||
doclib.add_manual_image("techage", "pt-BR", name, image)
|
||||
end
|
||||
end
|
||||
|
||||
function techage.add_manual_plans(table_with_plans)
|
||||
for name, plan in pairs(table_with_plans) do
|
||||
doclib.add_manual_plan("techage", "EN", name, plan)
|
||||
doclib.add_manual_plan("techage", "DE", name, plan)
|
||||
doclib.add_manual_plan("techage", "pt-BR", name, plan)
|
||||
end
|
||||
end
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
]]--
|
||||
|
||||
techage.Items = {
|
||||
local items = {
|
||||
techage_ta1 = "techage_ta1.png",
|
||||
iron = "techage:iron_ingot",
|
||||
charcoal = "techage:charcoal",
|
||||
@ -54,8 +54,8 @@ techage.Items = {
|
||||
ta2_forceload = "techage:forceload",
|
||||
ta2_driveaxle = "techage:axle",
|
||||
ta2_generator = "techage:ta2_generator_off",
|
||||
ta2_winch = "techage:ta2_winch",
|
||||
ta2_weight_chest = "techage:ta2_weight_chest",
|
||||
ta2_winch = "techage:ta2_winch",
|
||||
ta2_weight_chest = "techage:ta2_weight_chest",
|
||||
---------------------
|
||||
techage_ta3 = "techage_ta3.png",
|
||||
techage_ta31 = "techage_ta3b.png",
|
||||
@ -110,12 +110,14 @@ techage.Items = {
|
||||
ta3_logic = "techage:ta3_logic",
|
||||
ta3_nodedetector = "techage:ta3_nodedetector_off",
|
||||
ta3_playerdetector = "techage:ta3_playerdetector_off",
|
||||
ta3_lightdetector = "techage:ta3_lightdetector_off",
|
||||
ta3_repeater = "techage:ta3_repeater",
|
||||
ta3_sequencer = "techage:ta3_sequencer",
|
||||
ta3_timer = "techage:ta3_timer",
|
||||
ta3_terminal = "techage:terminal2",
|
||||
ta3_signallamp = "techage:signal_lamp_off",
|
||||
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",
|
||||
@ -125,6 +127,8 @@ techage.Items = {
|
||||
ta3_valve = "techage:ta3_valve_closed",
|
||||
ta3_motor = "techage:ta3_motor_off",
|
||||
ta3_injector = "techage:ta3_injector_pas",
|
||||
ta3_command_converter = "techage:ta3_command_converter_off",
|
||||
ta3_flipflop = "techage:ta3_flipflop_off",
|
||||
----------------------------
|
||||
techage_ta4 = "techage_ta4.png",
|
||||
techage_ta4c = "techage_ta4c.png",
|
||||
@ -203,10 +207,14 @@ techage.Items = {
|
||||
ta4_terminal = "techage:terminal3",
|
||||
ta4_autocrafter = "techage:ta4_autocrafter_pas",
|
||||
ta4_recipeblock = "techage:ta4_recipeblock",
|
||||
ta4_chargedetector = "techage:ta4_chargedetector_off",
|
||||
ta4_gaze_sensor = "techage:ta4_gaze_sensor_off",
|
||||
ta4_nodedetector = "techage:ta4_nodedetector_off",
|
||||
----------------------------
|
||||
techage_ta5 = "techage:ta5_fr_nucleus",
|
||||
ta5_flycontroller = "techage:ta5_flycontroller",
|
||||
ta5_aichip = "techage:ta5_aichip",
|
||||
ta5_aichip2 = "techage:ta5_aichip2",
|
||||
ta5_tele_pipe = "techage:ta5_tele_pipe",
|
||||
ta5_tele_tube = "techage:ta5_tele_tube",
|
||||
ta5_chest = "techage:ta5_hl_chest",
|
||||
@ -218,8 +226,8 @@ techage.Items = {
|
||||
ta5_fr_controller = "techage:ta5_fr_controller_pas",
|
||||
}
|
||||
|
||||
function techage.add_manual_items(table_with_items)
|
||||
for name, tbl in pairs(table_with_items) do
|
||||
techage.Items[name] = tbl
|
||||
end
|
||||
for name, image in pairs(items) do
|
||||
doclib.add_manual_image("techage", "DE", name, image)
|
||||
doclib.add_manual_image("techage", "EN", name, image)
|
||||
doclib.add_manual_image("techage", "pt-BR", name, image)
|
||||
end
|
||||
|
2758
doc/manual_DE.lua
2758
doc/manual_DE.lua
File diff suppressed because it is too large
Load Diff
2763
doc/manual_EN.lua
2763
doc/manual_EN.lua
File diff suppressed because it is too large
Load Diff
@ -1,39 +0,0 @@
|
||||
--[[
|
||||
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
API to add further chapters to the manuals
|
||||
|
||||
]]--
|
||||
|
||||
function techage.add_to_manual(language, titles, texts, items, plans)
|
||||
local tbl
|
||||
|
||||
if language == "DE" then
|
||||
tbl = techage.manual_DE
|
||||
elseif language == "EN" then
|
||||
tbl = techage.manual_EN
|
||||
else
|
||||
minetest.log("error", "[techage] Invalid manual language provided for 'techage.add_to_manual'!")
|
||||
return
|
||||
end
|
||||
|
||||
for _, item in ipairs(titles) do
|
||||
tbl.aTitel[#tbl.aTitel + 1] = item
|
||||
end
|
||||
for _, item in ipairs(texts) do
|
||||
tbl.aText[#tbl.aText + 1] = item
|
||||
end
|
||||
for _, item in ipairs(items) do
|
||||
tbl.aItemName[#tbl.aItemName + 1] = item
|
||||
end
|
||||
for _, item in ipairs(plans) do
|
||||
tbl.aPlanTable[#tbl.aPlanTable + 1] = item
|
||||
end
|
||||
end
|
152
doc/manual_pt-BR.lua
Normal file
152
doc/manual_pt-BR.lua
Normal 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 = {
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
172
doc/manual_ta1_DE.lua
Normal file
172
doc/manual_ta1_DE.lua
Normal file
@ -0,0 +1,172 @@
|
||||
return {
|
||||
titles = {
|
||||
"1,TA1: Eisenzeitalter",
|
||||
"2,Köhler / Coal Pile",
|
||||
"2,Kohlebrenner / Coal Burner",
|
||||
"2,Wassermühle",
|
||||
"3,TA1 Mühle",
|
||||
"3,TA1 Schleusenschieber / TA1 Sluice Gate",
|
||||
"3,TA1 Schleusengriff / TA1 Sluice Handle",
|
||||
"3,TA1 Apfelholzbrett / TA1 Apple Wood Board",
|
||||
"3,TA1 Apfel Mühlbachbrett / TA1 Apple Millrace Board",
|
||||
"2,Erze und Werkzeuge",
|
||||
"3,Hammer",
|
||||
"3,Kiessieb / Gravel Sieve",
|
||||
"3,Trichter / Hopper",
|
||||
"3,Kies sieben mit dem Trichter",
|
||||
"3,Meridium",
|
||||
},
|
||||
texts = {
|
||||
"In TA1 geht es darum\\, mit einfachen Werkzeugen und Gerätschaften ausreichend Erze zu schürfen und Holzkohle herzustellen\\, so dass damit TA2 Maschinen hergestellt und betrieben werden können.\n"..
|
||||
"\n"..
|
||||
"Natürlich muss es für ein Eisenzeitalter auch Eisen geben und nicht nur Stahl (steel)\\, wie in \"Minetest Game\". Daher wurden einige Rezepte geändert\\, so dass zuerst Eisen hergestellt werden muss und erst später dann Stahl.\n"..
|
||||
"\n"..
|
||||
"Auch ist die Haltbarkeit der Werkzeuge an die Zeitalter angelehnt und entspricht damit nicht dem Minetest Originalspiel.\n"..
|
||||
"Die Haltbarkeit/Härte bspw. für eine Axt ist:\n"..
|
||||
"\n"..
|
||||
" - Bronze: 20\n"..
|
||||
" - Stahl: 30\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Den Köhler brauchst du\\, um Holzkohle herzustellen. Holzkohle wird für den Brenner\\, aber auch bspw. in TA2 für die Dampfmaschine benötigt.\n"..
|
||||
"\n"..
|
||||
"Für den Köhler brauchst du:\n"..
|
||||
"\n"..
|
||||
" - einen Anzünderblock ('techage:lighter')\n"..
|
||||
" - 26 Hölzblöcke (wood)\\, die zu einem Würfen aufgeschichtet werden. Die Holzsorte spielt keine Rolle.\n"..
|
||||
" - Erde (dirt) um den Holzhaufen abzudecken.\n"..
|
||||
" - Feuerstein und Eisen (technischer Name: 'fire:flint_and_steel') um den Anzünderblock anzuzünden.\n"..
|
||||
"\n"..
|
||||
"Bauanleitung (siehe auch Plan):\n"..
|
||||
"\n"..
|
||||
" - Baue eine 5x5 große Fläche aus Erde (dirt)\n"..
|
||||
" - Platziere in die Mitte einen Anzünder (lighter)\n"..
|
||||
" - Platziere rund um den Anzünder 7 Holz (wood)\\, aber lasse ein Loch zum Anzünder frei\n"..
|
||||
" - Baue weitere 2 Schichten Holz darüber\\, so dass ein 3x3x3 großer Holzwürfel entsteht\n"..
|
||||
" - Überdecke alles mit einer Schicht Erde zu einem 5x5x5 großen Würfel\\, aber lasse das Loch zum Anzünder frei\n"..
|
||||
" - Entzünde den Anzünder und verschließe das Loch sofort mit jeweils einem Block Holz und Erde\n"..
|
||||
" - Wenn du alles richtig gemacht hast\\, fängt der Köhler nach wenigen Sekunden an zu rauchen\n"..
|
||||
" - Öffne den Köhler erst\\, wenn der Rauch verschwunden ist (ca. 20 min)\n"..
|
||||
"\n"..
|
||||
"Dann kannst du die 9 Holzkohleblöcke entnehmen und den Köhler erneut füllen.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Den Kohlebrenner benötigst du bspw. um Eisen und andere Erze im Schmelztiegel zu schmelzen. Es gibt verschiedene Rezepte\\, welche verschiedene Temperaturen benötigen. Je höher der Turm\\, um so heißer ist die Flamme. Eine Höhe von 11 Blöcken über der Bodenplatte ist für alle Rezepte ausreichend\\, ein Brenner mit dieser Höhe verbraucht aber auch mehr Holzkohle.\n"..
|
||||
"\n"..
|
||||
"Bauanleitung (siehe auch Plan):\n"..
|
||||
"\n"..
|
||||
" - Baue einen Turm aus Stein (cobble) mit einer 3x3 Grundfläche (7-11 Blöcke hoch)\n"..
|
||||
" - Lasse unten ein Loch an einer Seite offen\n"..
|
||||
" - Lege einen Anzünder (lighter) hinein\n"..
|
||||
" - Fülle den Turm bis zum Rand mit Holzkohle\\, in dem du die Holzkohle von oben in das Loch fallen lässt\n"..
|
||||
" - Entzünde den Anzünder durch das Loch\n"..
|
||||
" - Platziere den Schmelztiegel oben auf dem Turm direkt in die Flamme\\, einen Block über dem Turmrand\n"..
|
||||
" - Um den Brenner anzuhalten\\, schließe das Loch vorübergehend bspw. mit einem Erdblock.\n"..
|
||||
"\n"..
|
||||
"Der Schmelztiegel hat ein eigenes Menü mit Rezepten und ein Inventar\\, wo du die Erze hinein legst.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit der Wassermühle können Weizen und andere Getreide zu Mehl gemahlen und dann im Ofen zu Brot gebacken werden. Die Mühle wird mit\n"..
|
||||
"Wasserkraft angetrieben. Dazu muss ein Mühlbach über einen Kanal zum Mühlrad geführt werden.\n"..
|
||||
"Über eine Schleuse kann der Wasserfluss und damit das Mühlrad gesteuert werden.\n"..
|
||||
"Die Schleuse besteht aus Schleusenschieber und Schleusengriff.\n"..
|
||||
"\n"..
|
||||
"Die Abbildung rechts (auf \"Plan\" klicken) zeigt den Aufbau der Wassermühle.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit der Wassermühle können Weizen und andere Getreide zu Mehl gemahlen und dann im Ofen zu Brot gebacken werden.\n"..
|
||||
"Die Mühle muss mit einer TA1 Achse mit dem Mühlrad verbunden werden. Die Kraft des Mühlrades reicht nur für eine Mühle.\n"..
|
||||
"\n"..
|
||||
"Die Mühle kann mit Hilfe eines Minecart Hoppers automatisiert werden\\, so dass das Mehl bspw. direkt von der Mühle in einen Ofen befördert wird\\, um daraus Brot zu backen.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Schleusenschieber muss auf gleicher Höhe wie die Wasseroberfläche direkt an einen Teich oder in einen Bach gesetzt werden.\n"..
|
||||
"Wird die Schleuse geöffnet\\, so fließt Wasser durch den Schieber. Dieses Wasser muss dann zum Mühlrad geleitet werden und treibt dort die Mühle an.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der TA1 Schleusengriff muss auf den Schleusenschieber gesetzt werden. Mit Hilfe des Schleusengriffs (Rechtsklick) kann der Schieber geöffnet werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Block in verschiedenen Holzsorten zum Bauen des Mühlbachkanals. Es kann aber auch jedes andere Material verwendet werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Block in verschiedenen Holzsorten zum Bauen des Mühlbachkanals. Dieser Block eignet sich speziell in Verbindung mit den Pfosten des Holzzauns um eine Stütze für den Kanal zu bauen.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"TA1 hat seine eigenen Werkzeuge wie Hammer und Kiessieb\\, aber auch der Minecart Hopper kann genutzt werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit dem TA1 Hammer können Steine (stone) und Kopfsteinpflaster-Steine (cobble) zu Kies (gravel) zertrümmert werden. Der Hammer ist in verschiedenen Ausführungen und damit verschiedenen Eigenschaften verfügbar: Bronze\\, Stahl\\, Mese und Diamant.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit dem Kiessieb können Erze aus dem Kies gesiebt werden. Dazu mit dem Kies (gravel) auf das Sieb klicken. Der gesiebte Kies und die Erze fallen unten heraus.\n"..
|
||||
"\n"..
|
||||
"Um hier nicht stundenlang am Sieb zu stehen\\, kann das Sieben mit dem Trichter (hopper) automatisiert werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Hopper aus der Mod \"Minecart\" dient in erster Linie zum Be- und Entladen von Minecarts. Er saugt Gegenstände (items) von oben ein und gibt diese nach rechts weiter. Beim Platzieren des Trichters muss daher auf die Ausgaberichtung geachtet werden.\n"..
|
||||
"\n"..
|
||||
"Der Trichter kann aber auch Items aus Kisten (chest) ziehen\\, sofern die Kiste neben oder auf dem Trichter steht. \n"..
|
||||
"\n"..
|
||||
"Der Trichter kann auch Items in Kisten legen\\, sofern die Kiste neben dem Trichter steht.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit Hilfe von zwei Kisten\\, zwei Trichtern und einem Kiessieb kann der Siebevorgang automatisiert werden. Der Plan rechts zeigt den Aufbau.\n"..
|
||||
"\n"..
|
||||
"Bei den Kisten darauf achten\\, dass es die \"chest_locked\" ist\\, sonst klaut dir jemand die wertvollen Erze aus der Kiste unten.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"TA1 hat seine eigene Metalllegierung Meridium. Meridium Ingots können mit dem Kohlebrenner aus Stahl und Mesesplittern hergestellt werden. Meridium leuchtet im Dunkeln. Auch Werkzeuge aus Meridium leuchten und sind daher im Untertagebau sehr hilfreich.\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",
|
||||
"",
|
||||
}
|
||||
}
|
170
doc/manual_ta1_EN.lua
Normal file
170
doc/manual_ta1_EN.lua
Normal file
@ -0,0 +1,170 @@
|
||||
return {
|
||||
titles = {
|
||||
"1,TA1: Iron Age",
|
||||
"2,Charcoal Pile (charcoal burner)",
|
||||
"2,Melting Furnace",
|
||||
"2,Watermill",
|
||||
"3,TA1 mill",
|
||||
"3,TA1 sluice gate",
|
||||
"3,TA1 sluice handle",
|
||||
"3,TA1 Apple Wood Board",
|
||||
"3,TA1 Apple Millrace Board",
|
||||
"2,Ores and Tools",
|
||||
"3,Hammer",
|
||||
"3,Gravel Sieve",
|
||||
"3,Hopper",
|
||||
"3,Gravel seven with the hopper",
|
||||
"3,Meridium",
|
||||
},
|
||||
texts = {
|
||||
"TA1 is about mining sufficient ores and producing charcoal with simple tools and equipment\\, so that TA2 machines can be manufactured and operated.\n"..
|
||||
"\n"..
|
||||
"Of course\\, for an iron age there must also be iron and not just steel\\, as in \"Minetest Game\". As a result\\, some recipes have been changed so that iron has to be produced first and then steel later.\n"..
|
||||
"\n"..
|
||||
"The durability of the tools is based on the ages and therefore does not correspond to the original Minetest game.\n"..
|
||||
"The durability / hardness for an axe\\, for example:\n"..
|
||||
"\n"..
|
||||
" - Bronze: 20\n"..
|
||||
" - Steel: 30\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"You need the Charcoal Pile to make charcoal. Charcoal is required for the melting furnace\\, but also\\, for example\\, in TA2 for the steam engine.\n"..
|
||||
"\n"..
|
||||
"For the charcoal burner you need:\n"..
|
||||
"\n"..
|
||||
" - a lighter block ('techage:lighter')\n"..
|
||||
" - 26 wooden blocks that are stacked into a pile of wood. The type of wood is irrelevant\n"..
|
||||
" - Dirt to cover the pile of wood\n"..
|
||||
" - Flint and Iron (technical name: 'fire:flint_and_steel') to light the lighter block\n"..
|
||||
"\n"..
|
||||
"Building instructions (see also plan):\n"..
|
||||
"\n"..
|
||||
" - Build a 5x5 area of dirt\n"..
|
||||
" - Place 7 wood around the lighter but leave a hole to the lighter\n"..
|
||||
" - Build another 2 layers of wood on top\\, making a 3x3x3 wooden cube\n"..
|
||||
" - Cover everything with a layer of dirt into a 5x5x5 cube\\, but keep the hole to the lighter open\n"..
|
||||
" - Light the lighter and immediately close the hole with a block of wood and dirt\n"..
|
||||
" - If you have done everything correctly\\, the coal burner will start smoking after a few seconds\n"..
|
||||
" - Only open the charcoal burner when the smoke has disappeared (approx. 20 min)\n"..
|
||||
"\n"..
|
||||
"Then you can remove the 9 charcoal blocks and refill the Charcoal Pile.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"You need the melting furnace\\, for example\\, to melt iron and other ores in the melting pot. There are different recipes that require different temperatures. The higher the melting tower\\, the hotter the flame. A height of 11 blocks above the base plate is for all recipes\\, but a burner with this height also requires more charcoal.\n"..
|
||||
"\n"..
|
||||
"Building instructions (see also plan):\n"..
|
||||
"\n"..
|
||||
" - Build a stone tower (cobble) with a 3x3 base (7-11 blocks high)\n"..
|
||||
" - Leave a hole open on one side at the bottom\n"..
|
||||
" - Put a lighter in it\n"..
|
||||
" - Fill the tower to the brim with charcoal by dropping the charcoal into the hole from above\n"..
|
||||
" - Light the lighter through the hole\n"..
|
||||
" - Place the melting pot on top of the tower directly into the flame\\, one block above the tower edge\n"..
|
||||
" - To stop the burner\\, temporarily close the hole with an dirt block\\, for example.\n"..
|
||||
"\n"..
|
||||
"The melting pot has its own menu of recipes and an inventory where you have to put the ores in.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The watermill can be used to grind wheat and other grains into flour and then bake them in the furnace to make bread. \n"..
|
||||
"The mill is powered by water power. To do this\\, a millrace must be led to the mill wheel via a canal.\n"..
|
||||
"The water flow and thus the mill wheel can be controlled via a sluice. The sluice consists of the sluice lock and sluice handle.\n"..
|
||||
"\n"..
|
||||
"The picture on the right (click on \"Plan\") shows the structure of the watermill. \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The watermill can be used to grind wheat and other grains into flour and then bake them in the oven to make bread. The mill must be connected to the mill wheel with a TA1 axle. The power of the mill wheel is only enough for one mill.\n"..
|
||||
"\n"..
|
||||
"The mill can be automated with the help of a Minecart Hopper\\, so that the flour\\, for example\\, is transported directly from the mill into an furnace in order to bake bread from it.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The sluice gate valve must be placed directly next to a pond or in a stream at the same height as the water surface.\n"..
|
||||
"When the gate is opened\\, water flows through the slide. This water then has to be fed to the mill wheel\\, where it drives the mill.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The TA1 sluice handle must be placed on the sluice gate. The gate can be opened with the aid of the sluice handle (right click).\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Block in different types of wood for building the millrace canal. However\\, any other material can also be used.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Block in different types of wood for building the millrace canal. This block is especially suitable in connection\n"..
|
||||
"with posts of the wooden fence to build a support of the canal.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"TA1 has its own tools such as hammer and gravel sieve\\, but the Minecart Hopper can also be used.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The TA1 hammer can be used to knock/dig stone in a mine\\, but also to smash cobble to gravel. The hammer is available in different versions and therefore different properties: bronze\\, steel\\, brass and diamond.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Ores can be sifted from the gravel with the gravel sieve. To do this\\, click on the sieve with the gravel. The sifted gravel and ores fall out below.\n"..
|
||||
"\n"..
|
||||
"In order not to stand at the sieve for hours\\, sieving can be automated with the hopper.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The hopper from the \"Minecart\" mod is primarily used for loading and unloading Minecarts. He sucks in items from above and passes them on to the right. Therefore\\, when placing the hopper\\, pay attention to the direction of dispensing.\n"..
|
||||
"\n"..
|
||||
"The hopper can also pull items from boxes (chest)\\, provided the box is next to or on the hopper.\n"..
|
||||
"\n"..
|
||||
"The hopper can also put items in boxes if the box is next to the hopper.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"With the help of two boxes\\, two hoppers and a gravel sieve\\, the sieving process can be automated. The plan on the right shows the structure.\n"..
|
||||
"\n"..
|
||||
"Make sure that the boxes are \"chest_locked\"\\, otherwise someone will steal the valuable ores from the box below.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"TA1 has its own metal alloy meridium. Meridium ingots can be made with the coal burner from steel and mesecons crystals. Meridium glows in the dark. Tools made of Meridium also light up and are therefore very helpful in underground mining.\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",
|
||||
"",
|
||||
}
|
||||
}
|
153
doc/manual_ta1_pt-BR.lua
Normal file
153
doc/manual_ta1_pt-BR.lua
Normal 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",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
308
doc/manual_ta2_DE.lua
Normal file
308
doc/manual_ta2_DE.lua
Normal file
@ -0,0 +1,308 @@
|
||||
return {
|
||||
titles = {
|
||||
"1,TA2: Dampfzeitalter",
|
||||
"2,Dampfmaschine",
|
||||
"3,TA2 Feuerbox / Firebox",
|
||||
"3,TA2 Boiler",
|
||||
"3,TA2 Zylinder /Cylinder",
|
||||
"3,TA2 Schwungrad / Flywheel",
|
||||
"3,TA2 Dampfleitungen / Steam Pipe",
|
||||
"3,TA2 Antriebsachsen / TA2 Drive Axle",
|
||||
"3,TA2 Stromgenerator / TA2 Power Generator",
|
||||
"2,TA2 Energiespeicher",
|
||||
"3,TA2 Seilwinde / TA2 Winch",
|
||||
"3,TA2 Gewichtekiste / TA2 Weight Chest",
|
||||
"3,TA2 Kupplung / TA2 Clutch",
|
||||
"2,Items schieben und sortieren",
|
||||
"3,Röhren / TechAge Tube",
|
||||
"3,Röhren Konzentrator / Tube Concentrator",
|
||||
"3,TA2 Schieber / Pusher",
|
||||
"3,TA2 Verteiler / Distributor",
|
||||
"2,Kieswaschanlage",
|
||||
"3,TA2 Kiesspüler / Gravel Rinser",
|
||||
"2,Stein brechen\\, mahlen und sieben",
|
||||
"3,TA2 Steinbrecher / Quarry",
|
||||
"3,TA2 Mühle / Grinder",
|
||||
"3,TA2 Kiessieb / Gravel Sieve",
|
||||
"2,Items produzieren",
|
||||
"3,TA2 Autocrafter",
|
||||
"3,TA2 Elektronikfabrik / Electronic Fab",
|
||||
"2,Sonstige Blöcke",
|
||||
"3,TA2 Flüssigkeitensammler / Liquid Sampler",
|
||||
"3,TA2 Gesicherte Kiste / Protected Chest",
|
||||
"3,Techage Forceload Block",
|
||||
},
|
||||
texts = {
|
||||
"In TA2 geht es darum\\, erste Maschinen zur Verarbeitung von Erzen zu bauen und zu betreiben. Einige Maschinen müssen dazu über Antriebsachsen angetrieben werden. Dazu musst du eine Dampfmaschine bauen und diese mit Kohle oder Holzkohle anheizen.\n"..
|
||||
"\n"..
|
||||
"In TA2 steht auch ein Kiesspüler zur Verfügung\\, mit dem seltene Erze wie Usmium Nuggets ausgewaschen werden können. Diese Nuggets wirst du später für weitere Rezepte brauchen.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Dampfmaschine besteht aus mehreren Blöcken und muss wie im Plan rechts abgebildet\\, zusammen gebaut werden. Dazu werden die Blöcke TA2 Feuerbox\\, TA2 Boiler oben\\, TA2 Boiler unten\\, TA2 Zylinder\\, TA2 Schwungrad und Dampfleitungen benötigt.\n"..
|
||||
"\n"..
|
||||
"Zusätzlich werden Antriebsachsen sowie Getriebeblöcke für Richtungswechsel benötigt. Das Schwungrad muss über die Antriebsachsen mit allen Maschinen verbunden werden\\, die angetrieben werden müssen.\n"..
|
||||
"\n"..
|
||||
"Bei allen Blöcken beim Setzen immer auch die Ausrichtung achten:\n"..
|
||||
"\n"..
|
||||
" - Zylinder links\\, Schwungrad rechts daneben\n"..
|
||||
" - Dampfleitungen anschließen\\, wo ein entsprechendes Loch ist\n"..
|
||||
" - Antriebsachse beim Schwungrad nur rechts\n"..
|
||||
" - bei allen Maschinen kann die Antriebsachse an allen Seiten angeschlossen werden\\, welche nicht durch andere Funktionen belegt wird\\, wie bspw. die IN und OUT Löcher bei Mühle und Sieb.\n"..
|
||||
"\n"..
|
||||
"Der Boiler muss mit Wasser gefüllt werden. Dazu bis zu 10 Eimer Wasser in den Boiler füllen.\n"..
|
||||
"Die Feuerbox muss mit Kohle oder Holzkohle gefüllt werden.\n"..
|
||||
"Wenn das Wasser heiß ist (Temperaturanzeige ganz oben)\\, kann die Dampfmaschine am Schwungrad gestartet werden.\n"..
|
||||
"\n"..
|
||||
"Die Dampfmaschine leistet 25 ku und kann damit mehrere Maschinen gleichzeitig antreiben.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Teil der Dampfmaschine. \n"..
|
||||
"\n"..
|
||||
"Die Feuerbox muss mit Kohle oder Holzkohle gefüllt werden. Die Brenndauer ist abhängig von der Leistung\\, die von der Dampfmaschine angefordert wird. Unter Volllast brennt Kohle 32 s und Holzkohle 96 s.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Teil der Dampfmaschine. Muss mit Wasser gefüllt werden. Dies erfolgt durch Klicken mit einem Wassereimer auf den Boiler. Wenn kein Wasser mehr vorhanden ist oder die Temperatur zu weit absinkt\\, schaltet sich die Dampfmaschine ab. Bei der Dampfmaschine geht bei jedem Kolbenhub etwas Wasser als Dampf verloren\\, daher muss regelmäßig Wasser nachgefüllt werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Teil der Dampfmaschine.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Antriebsteil der Dampfmaschine. Das Schwungrad muss über Antriebsachsen mit den Maschinen verbunden werden. \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Teil der Dampfmaschine. Der Boiler muss mit dem Zylinder über die Dampfleitungen (steam pipes) verbunden werden. Die Dampfleitung besitzt keine Abzweigungen\\, die maximale Länge beträgt 12 m (Blöcke).\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Antriebsachsen dienen zur Kraftübertragung von der Dampfmaschine zu anderen Maschinen. Die maximale Länge einer Antriebsachse beträgt 10 Blöcke. Über Getriebeblöcke können auch größere Strecken überbrückt\\, sowie Abzweigungen und Richtungswechsel realisiert werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Um Lampen oder andere Stromverbraucher an einer Dampfmaschine betreiben zu können\\, wird der TA2 Stromgenerator benötigt. Der TA2 Stromgenerator muss auf einer Seite mit Antriebsachsen verbunden werden und liefert dann auf der anderen Seite elektrischen Strom.\n"..
|
||||
"\n"..
|
||||
"Wird der Stromgenerator nicht mit ausreichend Kraft versorgt\\, geht er in einen Fehlerzustand und muss über einen Rechtsklick wieder aktiviert werden.\n"..
|
||||
"\n"..
|
||||
"Das Stromgenerator nimmt primär max. 25 ku an Achsenkraft auf und gibt sekundär max. 24 ku als Strom wieder ab. Er verbraucht also ein ku für die Umwandlung.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Bei größeren Anlagen mit mehreren Dampfmaschinen oder vielen angetriebenen Maschinen empfiehlt sich ein Energiespeicher. Der Energiespeicher bei TA2 arbeitet mit Lageenergie. Dazu wird Balast (Steine\\, Kies) in einer Kiste mit Hilfe einer Seilwinde in die Höhe gezogen. Ist überschüssige Energie im Achsen-Netzwerk vorhanden\\, so wird die Kiste nach oben gezogen. Wird kurzfristig mehr Energie benötigt\\, als die Dampfmaschine liefern kann\\, so gibt der Energiespeicher die gespeicherte Energie wieder ab\\, und die Balast-Kiste bewegt sich wieder nach unten.\n"..
|
||||
"\n"..
|
||||
"Der Energiespeicher besteht aus mehreren Blöcken und muss wie im Plan rechts abgebildet\\, zusammen gebaut werden.\n"..
|
||||
"\n"..
|
||||
"Um die maximale Speicherkapazität zu erreichen\\, muss die Kiste mit Gewichten komplett gefüllt\\, und der Mast inklusive der zwei Getriebeblöcke 12 Blöcke hoch sein. Kleinere Aufbauten sind aber auch möglich.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Seilwinde muss mit einem Getriebeblock verbunden werden und kann so überschüssige Energie aufnehmen und damit eine Gewichtekiste nach oben ziehen. Achte beim Aufbau der Seilwinde darauf\\, dass der Pfeil auf der Blockoberseite zum Getriebeblock zeigt. Die maximale Seillänge beträgt 10 Blöcke.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Diese Kiste muss mit bis zu 10 Blöcken Abstand unter die Seilwinde gesetzt und mit Pflastersteinen Kies oder Sand gefüllt werden. Ist das Mindestgewicht von einem Stack (99+ Items) erreicht und überschüssige Energie vorhanden\\, wird die Kiste automatisch über eine Seil mit der Seilwinde verbunden und in die Höhe gezogen.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit der Kupplung können Achsen und Maschinen vom Energiespeicher getrennt werden. Damit kommen die Achsen nach der Kupplung zum Stillstand und Maschinenanlagen können umgebaut werden. Achte beim Aufbau der Kupplung darauf\\, dass der Pfeil auf der Blockoberseite zum Energiespeicher zeigt. \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Um Gegenstände (Items) von einer Verarbeitungsstation zur nächsten weiter zu transportieren\\, werden Schieber und Röhren verwendet. Siehe Plan.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Zwei Maschinen können mit Hilfe eines Schiebers und einer Röhre (tube) verbunden werden. Röhren besitzen keine Abzweigungen. Die maximale Länge beträgt 200 m (Blöcke).\n"..
|
||||
"\n"..
|
||||
"Röhren können alternativ mit Hilfe der Shift-Taste platziert werden. Dies erlaubt bspw. Röhren parallel zu verlegen\\, ohne dass diese sich unbeabsichtigt verbinden.\n"..
|
||||
"\n"..
|
||||
"Die Transportkapazität einer Röhre ist unbegrenzt und nur durch die Schieber begrenzt.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Über den Konzentrator können mehrere Röhren zu einer Röhre zusammengeführt werden. Die Richtung\\, in der alle Items weitergegeben werden\\, ist mit einem Pfeil markiert.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Ein Schieber ist in der Lage\\, Items aus Kisten oder Maschinen zu ziehen und in andere Kisten oder Maschinen zu schieben. Oder anders gesagt: Zwischen zwei Blöcken mit Inventar muss ein und genau ein Schieber sein. Mehrere Schieber in Reihe sind nicht möglich.\n"..
|
||||
"In die Gegenrichtung ist ein Schieber für Items aber durchlässig\\, so dass eine Kiste über eine Röhre gefüllt und ebenso geleert werden kann. \n"..
|
||||
"\n"..
|
||||
"Ein Schieber geht in den Zustand \"standby\"\\, wenn der keine Items zum Schieben hat. Ist der Ausgang blockiert oder das Inventory des Empfängers voll\\, so geht der Schieber in den Zustand \"blocked\". Aus beiden Zuständen kommt der Schieber nach einigen Sekunden selbsttätig wieder raus\\, sofern sich die Situation geändert hat.\n"..
|
||||
"\n"..
|
||||
"Der Verarbeitungsleistung eines TA2 Schiebers beträgt 2 Items alle 2 s.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Verteiler ist in der Lage\\, die Items aus seinem Inventar sortiert in bis zu vier Richtungen weiter zu transportieren. Dazu muss der Verteiler entsprechend konfiguriert werden. \n"..
|
||||
"\n"..
|
||||
"Der Verteiler besitzt dazu ein Menü mit 4 Filter mit unterschiedlichen Farben\\, entsprechend den 4 Ausgängen. Soll ein Ausgang genutzt werden\\, so muss der entsprechende Filter über die \"on\" Checkbox aktiviert werden. Alle Items\\, die für diesen Filter konfiguriert sind\\, werden über den zugeordneten Ausgang ausgegeben. Wird ein Filter aktiviert\\, ohne das Items konfiguriert werden\\, so sprechen wir hier von einem \"nicht-konfigurierten\"\\, offenen Ausgang.\n"..
|
||||
"\n"..
|
||||
"*Achtung: Der Verteiler ist an seinen Ausgängen gleichzeitig ein Schieber. Daher niemals die Gegenstände mit einem Schieber aus dem Verteiler ziehen!*\n"..
|
||||
"\n"..
|
||||
"Für einen nicht-konfigurierten Ausgang gibt es zwei Betriebsarten:\n"..
|
||||
"\n"..
|
||||
"1) Alle Items ausgeben\\, die an keine anderen Ausgängen ausgegeben werden können\\, auch wenn diese blockiert sind.\n"..
|
||||
"\n"..
|
||||
"2) Nur die Items ausgeben\\, die für keinen anderen Filter konfiguriert wurden.\n"..
|
||||
"\n"..
|
||||
"Im ersten Fall werden immer alle Items weitergeleitet und der Verteiler läuft nicht voll. Im zweiten Fall werden Items zurückgehalten und der Verteiler kann voll laufen und in der Folge blockieren.\n"..
|
||||
"\n"..
|
||||
"Einstellbar ist die Betriebsart über die \"blockiere\" Checkbox.\n"..
|
||||
"\n"..
|
||||
"Der Verarbeitungsleistung eines TA2 Verteilers beträgt 4 Items alle 2 s\\, wobei der Verteiler dabei versucht\\, die 4 Items auf die offenen Ausgänge zu verteilen.\n"..
|
||||
"\n"..
|
||||
"Wird dasselbe Item in einem Filter mehrfach hinterlegt\\, so beeinflusst dies das langfristige Verteilungsverhältnis entsprechend.\n"..
|
||||
"\n"..
|
||||
"Bitte beachte\\, dass die Verteilung ein probabilistischer Vorgang ist\\, d.h. die Verhältnisse werden nicht exakt\\, sondern nur langfristig eingehalten.\n"..
|
||||
"\n"..
|
||||
"In den Filtern beträgt die maximale Stackgröße 12\\; insgesamt können höchstens 36 Items konfiguriert werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Kieswaschanlage ist eine komplexere Maschine mit dem Ziel\\, Usmium Nuggets aus gesiebtem Kies auszuwaschen. Für den Aufbau wird ein TA2 Kiesspüler mit Achsenantrieb\\, ein Trichter\\, eine Kiste\\, sowie fließendes Wasser benötigt. \n"..
|
||||
"\n"..
|
||||
"Aufbau von links nach rechts (siehe auch Plan):\n"..
|
||||
"\n"..
|
||||
" - Ein Erdblock\\, darauf die Wasserquelle\\, umgeben auf 3 Seiten von bspw. Glasblöcken\n"..
|
||||
" - daneben den Kiesspüler\\, ggf. mit Röhrenanschlüssen für den Kies An- und Abtransport\n"..
|
||||
" - dann den Trichter mit Kiste\n"..
|
||||
"\n"..
|
||||
"Das Ganze umgeben von weiteren Glasblöcken\\, so dass das Wasser über den Kiesspüler und den Trichter fließt und ausgespülten Nuggets vom Trichter wieder eingesammelt werden können.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Kiesspüler ist in der Lage\\, aus bereits gesiebtem Kies die Erze Usmium und Kupfer auszuspülen\\, sofern dieser von Wasser überspült wird.\n"..
|
||||
"\n"..
|
||||
"Ob der Kiesspüler korrekt arbeitet\\, kann mit Hilfe von Stöcken (sticks) getestet werden\\, wenn diese in das Inventar des Kiesspülers getan werden. Diese müssen einzeln ausgespült und vom Trichter eingefangen werden.\n"..
|
||||
"\n"..
|
||||
"Die Verarbeitungsleistung ist ein Kies Item alle 2 s. Der Kiesspüler benötigt 3 ku Energie.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Das Brechen\\, Mahlen und Siebe von Gestein dient zur Gewinnung von Erzen. Gesiebtes Kies kann aber auch anderweitig genutzt werden. Steinbrecher\\, Mühle und Sieb müssen angetrieben und damit in der Nähe einer Dampfmaschine aufgebaut werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Steinbrecher dient zum Abbau von Steinen und anderen Materialien aus dem Untergrund. Der Steinbrecher gräbt ein 5x5 Blöcke großes Loch. Die Tiefe ist einstellbar.\n"..
|
||||
"Die Verarbeitungsleistung ist ein Block alle 4 s. Der Steinbrecher benötigt 10 ku Energie. Die maximale Tiefe beträgt 20 Meter. Für größere Tiefen siehe TA3/TA4.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Mühle ist in der Lage\\, verschiedenes Gestein\\, aber auch Holz und andere Items zu mahlen.\n"..
|
||||
"Die Verarbeitungsleistung ist ein Item alle 4 s. Die Mühle benötigt 4 ku Energie.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Das Kiessieb ist in der Lage\\, Kies zu sieben um Erze zu gewinnen. Als Ergebnis erhält man teilweise \"gesiebtes Kies\"\\, was nicht wieder gesiebt werden kann.\n"..
|
||||
"Die Verarbeitungsleistung ist ein Item alle 4 s. Das Kiessieb benötigt 3 ku Energie.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit TA2 Maschinen können nicht nur Erze gewonnen\\, sondern auch Gegenstände hergestellt werden.\n"..
|
||||
"\n",
|
||||
"Der Autocrafter dient zur automatischen Herstellung von Waren. Alles was der Spieler über das \"Crafting Grid\" herstellen kann\\, kann auch durch den Autocrafter erledigt werden. Dazu müssen im Menü des Autocrafters das Rezept eingegeben und die notwendigen Zutaten hinzugefügt werden.\n"..
|
||||
"\n"..
|
||||
"Zutaten und hergestellte Waren können über Röhren und Schieber in und aus dem Block transportiert werden.\n"..
|
||||
"\n"..
|
||||
"Die Verarbeitungsleistung ist ein Item alle 4 s. Der Autocrafter benötigt 4 ku Energie.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Elektronikfabrik ist eine Spezialmaschine und nur für die Herstellung der Vakuumröhren nutzbar. Vakuumröhren werden für TA3 Maschinen und Blöcke benötigt.\n"..
|
||||
"\n"..
|
||||
"Die Verarbeitungsleistung ist eine Vakuumröhre alle 6 s. Die Elektronikfabrik benötigt 8 ku Energie.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"",
|
||||
"Für manche Rezepte wird Wasser benötigt. Damit auch diese Rezepte automatisiert mit dem Autocrafter bearbeitet werden können\\, muss Wasser in Eimern bereitgestellt werden. Hierzu dient der Flüssigkeitensammler. Er benötigt leere Eimer und muss ins Wasser gestellt werden.\n"..
|
||||
"\n"..
|
||||
"Die Verarbeitungsleistung ist ein Wassereimer alle 8 s. Der Flüssigkeitensammler benötigt 3 ku Energie.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die gesicherte Kiste kann nur von den Spielern genutzt werden\\, die an diesem Ort auch bauen können\\, also Protection Rechte besitzen. Es spielt dabei keine Rolle\\, wer die Kiste setzt. \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Minetest teilt die Karte in sogenannte Map-Blocks ein. Das sind Würfel mit 16x16x16 Blöcke Kantenlänge. So ein Map-Block wird vom Server immer komplett geladen\\, aber es werden nur die Blöcke um einen Spieler herum geladen (ca. 2-3 Blöcke in alle Richtungen). In Sichtrichtung des Spielers sind es auch mehr Map-Blöcke. Nur dieser Teil der Welt ist aktiv und nur hier wachsen Pflanzen und Bäume bzw. laufen die Maschinen.\n"..
|
||||
"\n"..
|
||||
"Mit einem Forceload-Block kannst du erzwingen\\, dass der Map-Block\\, in dem der Forceload Block steht\\, immer geladen bleibt\\, solange du auf dem Server bist. Wenn alle deine Farmen und Maschinen mit Forceload Blöcken abgedeckt sind\\, ist immer alles am Laufen.\n"..
|
||||
"\n"..
|
||||
"Die Map-Blöcke mit ihren Koordinaten sind vordefiniert\\, also bspw. (0\\,0\\,0) bis (15\\,15\\,15)\\, oder (16\\,16\\,16) bis (31\\,31\\,31).\n"..
|
||||
"Man kann einen Forceload-Block innerhalb eines Map-Blockes verschieben wie man will\\, die Position des Map-Blocks bleibt dabei unverändert. \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",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
308
doc/manual_ta2_EN.lua
Normal file
308
doc/manual_ta2_EN.lua
Normal file
@ -0,0 +1,308 @@
|
||||
return {
|
||||
titles = {
|
||||
"1,TA2: Steam Age",
|
||||
"2,Steam Engine",
|
||||
"3,TA2 Firebox",
|
||||
"3,TA2 Boiler",
|
||||
"3,TA2 Cylinder",
|
||||
"3,TA2 Flywheel",
|
||||
"3,TA2 Steam Pipes",
|
||||
"3,TA2 Drive Axle / TA2 Gearbox",
|
||||
"3,TA2 Power Generator",
|
||||
"2,TA2 energy storage",
|
||||
"3,TA2 Winch",
|
||||
"3,TA2 Weight Chest",
|
||||
"3,TA2 Clutch",
|
||||
"2,Push and sort items",
|
||||
"3,TechAge Tube",
|
||||
"3,Tube Concentrator",
|
||||
"3,TA2 Pusher",
|
||||
"3,TA2 Distributor",
|
||||
"2,Gravel washer",
|
||||
"3,TA2 Gravel Rinser",
|
||||
"2,Dig stone\\, grind and sieve",
|
||||
"3,TA2 Quarry",
|
||||
"3,TA2 Grinder",
|
||||
"3,TA2 Gravel Sieve",
|
||||
"2,Produce Items",
|
||||
"3,TA2 Autocrafter",
|
||||
"3,TA2 Electronic Fab",
|
||||
"2,Other blocks",
|
||||
"3,TA2 Liquid Sampler",
|
||||
"3,TA2 Protected Chest",
|
||||
"3,Techage Forceload Block",
|
||||
},
|
||||
texts = {
|
||||
"TA2 is about building and operating the first machines for processing ores. Some machines have to be driven via drive axles. To do this\\, you need to build a steam engine and heat it with coal or charcoal.\n"..
|
||||
"\n"..
|
||||
"In TA2 there is also a gravel rinser that can be used to wash out rare ores such as Usmium nuggets. You will need these nuggets later for further recipes.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The steam engine consists of several blocks and must be assembled as shown in the plan on the right. The blocks TA2 fire box\\, TA2 boiler top\\, TA2 boiler bottom\\, TA2 cylinder\\, TA2 flywheel and steam pipes are required.\n"..
|
||||
"\n"..
|
||||
"In addition\\, drive axles and gear blocks are required for changing direction. The flywheel must be connected to all machines that have to be driven via the drive axles.\n"..
|
||||
"\n"..
|
||||
"Always pay attention to the alignment of all blocks when placing:\n"..
|
||||
"\n"..
|
||||
" - Cylinder on the left\\, flywheel on the right\n"..
|
||||
" - Connect steam pipes where there is a corresponding hole\n"..
|
||||
" - Drive axle on flywheel only on the right\n"..
|
||||
" - In all machines\\, the drive axles can be connected on all sides\\, which is not occupied by other functions\\, such as the IN and OUT holes in the grinder and sieve.\n"..
|
||||
"\n"..
|
||||
"The boiler must be filled with water. Fill up to 10 buckets of water in the boiler.\n"..
|
||||
"The fire box must be filled with coal or charcoal.\n"..
|
||||
"When the water is hot (temperature display at the top)\\, the steam engine can be started on the flywheel.\n"..
|
||||
"\n"..
|
||||
"The steam engine has a capacity of 25 ku\\, so it can drive several machines at the same time.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Part of the steam engine.\n"..
|
||||
"\n"..
|
||||
"The fire box must be filled with coal or charcoal. The burning time depends on the power demanded by the steam engine. Coal burns for 32 s and charcoal for 96 s under full load.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Part of the steam engine. Must be filled with water. This is done by clicking on the boiler with a water bucket. When there is no more water or the temperature drops too low\\, the steam engine switches off. With the steam engine\\, some water is lost as steam with each piston stroke\\, so water has to be refilled regularly.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Part of the steam engine.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Drive part of the steam engine. The flywheel must be connected to the machines via drive axles.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Part of the steam engine. The boiler must be connected to the cylinder via the steam pipes. The steam pipe has no branches\\, the maximum length is 12 m (blocks).\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The drive axles are used to transmit power from the steam engine to other machines. The maximum length of a drive axis is 10 blocks. With TA2 Gearboxes\\, larger distances can be bridged\\, and branches and changes of direction can be realized.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The TA2 Power Generator is required to operate lamps or other power consumers on a steam engine. The TA2 Power Generator has to be connected to drive axles on one side and then supplies electricity on the other side.\n"..
|
||||
"\n"..
|
||||
"If the Power Generator is not supplied with sufficient power\\, it goes into an error state and must be reactivated with a right-click.\n"..
|
||||
"\n"..
|
||||
"The Power Generator takes max. 25 ku of axle power and provides on the other side max. 24 ku as electricity. So he consumes one ku for the conversion.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"For larger systems with several steam engines or many driven machines\\, an energy storage system is recommended. The energy storage at TA2 works with position energy. For this purpose\\, ballast (stones\\, gravel\\, sand) is pulled up in a chest with the help of a cable winch. If there is excess energy in the axis network\\, the chest is pulled upwards. If more energy is required in the short term than the steam engine can supply\\, the energy store releases the stored energy again and the weight chest moves down again. \n"..
|
||||
"The energy storage consists of several blocks and must be assembled as shown in the plan on the right. \n"..
|
||||
"In order to achieve the maximum storage capacity\\, the chest must be completely filled with weights and the mast including the two gear boxes must be 12 blocks high. Smaller structures are also possible.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The cable winch must be connected to a gear box and can absorb excess energy and thus pull a weight chest upwards. \n"..
|
||||
"When assembling the cable winch\\, make sure that the arrow on the top of the block points to the gearbox.\n"..
|
||||
"The maximum rope length is 10 blocks. \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"This chest must be placed under the winch with a distance of up to 10 blocks and filled with cobblestone\\, gravel or sand. If the minimum weight of a stack (99+ items) is reached and there is excess energy\\, the box is automatically connected to the winch via a rope and pulled up. \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"With the clutch\\, axles and machines can be separated from the energy storage. This means that the axles after the clutch come to a standstill and machine systems can be rebuilt. When assembling the clutch\\, make sure that the arrow on the top of the block points to the energy storage system.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"In order to transport objects from one processing station to the next\\, pushers and tubes are used. See plan.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Two machines can be connected with the help of a pusher and a tube. Tubes have no branches. The maximum length is 200 m (blocks).\n"..
|
||||
"\n"..
|
||||
"Alternatively\\, tubes can be placed using the Shift key. This allows\\, for example\\, tubes to be laid in parallel without them accidentally connecting.\n"..
|
||||
"\n"..
|
||||
"The transport capacity of a tube is unlimited and only limited by the pusher.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Several tubes can be combined into one tube via the concentrator. The direction in which all items are passed on is marked with an arrow. \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"A pusher is able to pull items out of boxes or machines and push them into other boxes or machines. In other words\\, there must be one and exactly one pusher between two blocks with inventory. Multiple pushers in a row are not possible.\n"..
|
||||
"In the opposite direction\\, however\\, a pusher is permeable for items\\, so that a box can be filled via a tube and also taught.\n"..
|
||||
"\n"..
|
||||
"A pusher goes into the \"standby\" state if it has no items to push. If the output is blocked or the recipient's inventory is full\\, the pusher goes into the \"blocked\" state. The pusher automatically comes out of both states after a few seconds if the situation has changed.\n"..
|
||||
"\n"..
|
||||
"The processing power of a TA2 pusher is 2 items every 2 s.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The distributor is able to transport the items from his inventory sorted in up to four directions. To do this\\, the distributor must be configured accordingly.\n"..
|
||||
"\n"..
|
||||
"The distributor has a menu with 4 filters with different colors\\, corresponding to the 4 outputs. If an output is to be used\\, the corresponding filter must be activated via the \"on\" checkbox. All items that are configured for this filter are output via the assigned output. If a filter is activated without items being configured\\, we are talking about an \"unconfigured\"\\, open output.\n"..
|
||||
"\n"..
|
||||
"*Attention: The distributor is also a pusher at its output sides. Therefore\\, never pull items out of the distributor with a pusher!*\n"..
|
||||
"\n"..
|
||||
"There are two operating modes for a non-configured output:\n"..
|
||||
"\n"..
|
||||
"1) Output all items that cannot be output to any other exit\\, even if they are blocked.\n"..
|
||||
"\n"..
|
||||
"2) Only output the items that have not been configured for any other filter.\n"..
|
||||
"\n"..
|
||||
"In the first case\\, all items are always forwarded and the distributor does not run full. In the second case\\, items are held back and the distributor can run full and then block.\n"..
|
||||
"\n"..
|
||||
"The operating mode can be set using the \"blocking mode\" checkbox.\n"..
|
||||
"\n"..
|
||||
"The processing power of a TA2 distributor is 4 items every 2 s\\, whereby the distributor tries to distribute the 4 items to the open outputs.\n"..
|
||||
"\n"..
|
||||
"If the same item is configured multiple times in one filter\\, the long term distribution ratio will be influenced accordingly.\n"..
|
||||
"\n"..
|
||||
"Please note that the distribution is a probabilistic process. This means that the distribution rations won't be matched exactly\\, but only in the long term.\n"..
|
||||
"\n"..
|
||||
"The maximum stack size in the filters is 12\\; in total\\, not more than 36 items can be configured.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The gravel washer is a more complex machine with the goal of washing Usmium nuggets out of sieved gravel. A TA2 rinser with axis drive\\, a hopper\\, a chest and running water are required for the installation.\n"..
|
||||
"\n"..
|
||||
"Structure from left to right (see also plan):\n"..
|
||||
"\n"..
|
||||
" - A dirt block\\, on top of it the water source\\, surrounded on 3 sides by e.g. glass blocks\n"..
|
||||
" - next to it the gravel rinser\\, if necessary with tube connections for the gravel delivery and removal\n"..
|
||||
" - then the hopper with chest\n"..
|
||||
"\n"..
|
||||
"The whole thing is surrounded by further glass blocks\\, so that the water flows over the gravel rinser and the hopper and rinsed-out nuggets can be collected again by the hopper.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The gravel washer is able to rinse out the Usmium and copper ores from gravel that has already been sieved\\, provided that this is flushed with water.\n"..
|
||||
"\n"..
|
||||
"Whether the Gravel Rinser works correctly can be tested with sticks if these are placed in the inventory of the Gravel Rinser. These must be rinsed out individually and caught by the hopper.\n"..
|
||||
"\n"..
|
||||
"The processing power is one gravel item every 2 s. The gravel washer needs 3 ku of energy.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Crushing\\, grinding and sieving of cobblestone is used to extract ores. Sieved gravel can also be used for other purposes. Quarry\\, grinder and sieve must be driven and thus installed near a steam engine.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The quarry is used to remove stones and other materials from the underground. The quarry digs a 5x5 block hole. The depth is adjustable.\n"..
|
||||
"The processing power is one block every 4 s. The quarry needs 10 ku of energy. The maximum depth is 20 meters. For greater depths see TA3 / TA4.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The grinder is able to grind various rocks\\, but also wood and other items.\n"..
|
||||
"The processing power is one item every 4 s. The grinder needs 4 ku of energy.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The gravel sieve is able to sieve gravel to extract ores. The result is partially \"sieved gravel\"\\, which cannot be sieved again.\n"..
|
||||
"The processing power is one item every 4 s. The gravel sieve requires 3 ku of energy.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"TA2 machines can not only extract ores\\, but also produce objects.\n"..
|
||||
"\n",
|
||||
"The autocrafter is used for the automatic production of goods. Everything that the player can produce via the \"Crafting Grid\" can also be done by the autocrafter. To do this\\, the recipe must be entered in the menu of the autocrafter and the necessary ingredients added.\n"..
|
||||
"\n"..
|
||||
"Ingredients and manufactured goods can be transported in and out of the block via tubes and pushers.\n"..
|
||||
"\n"..
|
||||
"The processing power is one item every 4 s. The autocrafter requires 4 ku of energy.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The electronic fab is a special machine and can only be used for the production of vacuum tubes. Vacuum tubes are required for TA3 machines and blocks.\n"..
|
||||
"\n"..
|
||||
"The processing power is one vacuum tube every 6 s. The electronic fab requires 8 ku of energy.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"",
|
||||
"Some recipes require water. So that these recipes can also be processed automatically with the autocrafter\\, water must be provided in buckets. The liquid sampler is used for this. He needs empty buckets and has to be put in the water.\n"..
|
||||
"\n"..
|
||||
"The processing capacity is one water bucket every 8 s. The liquid sampler requires 3 ku of energy.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The protected chest can only be used by players who can build at this location\\, i.e. who have protection rights. It does not matter who sets the chest.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Minetest divides the map into so-called map blocks. These are cubes with an edge length of 16x16x16 blocks. Such a map block is always loaded completely by the server\\, but only the blocks around a player are loaded (approx. 2-3 blocks in all directions). In the player's direction of view\\, there are also more map blocks. Only this part of the world is active and only here do plants and trees grow or the machines run.\n"..
|
||||
"\n"..
|
||||
"With a forceload block you can force the map block in which the forceload block is located to remain loaded as long as you are on the server. When all your farms and machines are covered with Forceload blocks\\, everything is always running.\n"..
|
||||
"\n"..
|
||||
"The map blocks with their coordinates are predefined\\, e.g. (0\\,0\\,0) to (15\\,15\\,15)\\, or (16\\,16\\,16) to (31\\,31\\,31).\n"..
|
||||
"You can move a forceload block within a map block as you like\\, the position of the map block remains unchanged.\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",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
306
doc/manual_ta2_pt-BR.lua
Normal file
306
doc/manual_ta2_pt-BR.lua
Normal 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",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
934
doc/manual_ta3_DE.lua
Normal file
934
doc/manual_ta3_DE.lua
Normal file
@ -0,0 +1,934 @@
|
||||
return {
|
||||
titles = {
|
||||
"1,TA3: Ölzeitalter",
|
||||
"2,Kohlekraftwerk / Ölkraftwerk",
|
||||
"3,TA3 Kraftwerks-Feuerbox / Power Station Firebox",
|
||||
"3,TA3 Kraftwerks-Ölbrenner / TA3 Power Station Oil Burner",
|
||||
"3,TA3 Boiler unten/oben",
|
||||
"3,TA3 Turbine",
|
||||
"3,TA3 Generator",
|
||||
"3,TA3 Kühler / Cooler",
|
||||
"2,Elektrischer Strom",
|
||||
"3,Bedeutung von Speichersystemen",
|
||||
"3,TA Stromkabel / Electric Cable",
|
||||
"3,TA Verteilerdose / Electric Junction Box",
|
||||
"3,TA Stromleitung / Power Line",
|
||||
"3,TA Strommast / Power Pole",
|
||||
"3,TA Strommastkopf / Power Pole Top",
|
||||
"3,TA Strommastkopf 2 / Power Pole Top 2",
|
||||
"3,TA Stromschalter / Power Switch",
|
||||
"3,TA Stromschalter klein / Power Switch Small",
|
||||
"3,TA Stromschalterbox / Power Switch Box",
|
||||
"3,TA3 Kleiner Stromgenerator / Tiny Power Generator",
|
||||
"3,TA3 Akku Block / TA3 Accu Box",
|
||||
"3,TA3 Strom Terminal / Power Terminal",
|
||||
"3,TA3 Elektromotor / TA3 Electric Motor",
|
||||
"2,TA3 Industrieofen",
|
||||
"3,TA3 Ofen-Ölbrenner / Furnace Oil Burner",
|
||||
"3,TA3 Ofenoberteil / Furnace Top",
|
||||
"3,TA3 Gebläse / Booster",
|
||||
"2,Flüssigkeiten",
|
||||
"3,TA3 Tank / TA3 Tank",
|
||||
"3,TA3 Pumpe / TA3 Pump",
|
||||
"3,TA Einfülltrichter / TA Liquid Filler",
|
||||
"3,TA4 Röhre / Pipe",
|
||||
"3,TA3 Rohr/Wanddurchbruch / TA3 Pipe Wall Entry Blöcke",
|
||||
"3,TA Ventil / TA Valve",
|
||||
"2,Öl-Förderung",
|
||||
"3,TA3 Ölexplorer / Oil Explorer",
|
||||
"3,TA3 Ölbohrkiste / Oil Drill Box",
|
||||
"3,TA3 Ölpumpe / Oil Pumpjack",
|
||||
"3,TA3 Bohrgestänge / Drill Pipe",
|
||||
"3,Öltank / Oil Tank",
|
||||
"2,Öl-Transport",
|
||||
"3,Öl-Transport mit dem Tankwagen",
|
||||
"3,Öl-Transport mit Fässern über Minecarts",
|
||||
"3,Tankwagen / Tank Cart",
|
||||
"3,Kistenwagen / Chest Cart",
|
||||
"2,Öl-Verarbeitung",
|
||||
"3,Destillationsturm / distiller tower",
|
||||
"4,Aufkocher / reboiler)",
|
||||
"2,Logik-/Schalt-Blöcke",
|
||||
"3,TA3 Taster/Schalter / Button/Switch",
|
||||
"3,TA3 Kommando Konverter / Command Converter",
|
||||
"3,TA3 Flipflop / Flip-Flop",
|
||||
"3,TA3 Logikblock / Logic Block",
|
||||
"3,TA3 Wiederholer / Repeater",
|
||||
"3,TA3 Sequenzer / Sequencer",
|
||||
"3,TA3 Timer",
|
||||
"3,TA3 Terminal",
|
||||
"3,TechAge Farblampe / Color Lamp",
|
||||
"3,Tür/Tor Blöcke / Door/Gate Blocks",
|
||||
"3,TA3 Tür Controller / Door Controller",
|
||||
"3,TA3 Tür Controller II / Door Controller II",
|
||||
"3,TA3 Sound Block",
|
||||
"3,TA3 Mesecons Umsetzer / TA3 Mesecons Converter",
|
||||
"2,Detektoren",
|
||||
"3,TA3 Detektor / Detector",
|
||||
"3,TA3 Wagen Detektor / Cart Detector",
|
||||
"3,TA3 Block Detektor / Node Detector",
|
||||
"3,TA3 Spieler Detektor / Player Detector",
|
||||
"3,TA3 Lichtdetektor",
|
||||
"2,TA3 Maschinen",
|
||||
"3,TA3 Schieber / Pusher",
|
||||
"3,TA3 Verteiler / Distributor",
|
||||
"3,TA3 Autocrafter",
|
||||
"3,TA3 Elektronikfabrik / Electronic Fab",
|
||||
"3,TA3 Steinbrecher / Quarry",
|
||||
"3,TA3 Kiessieb / Gravel Sieve",
|
||||
"3,TA3 Kieswaschanlage / Gravel Rinser",
|
||||
"3,TA3 Mühle / Grinder",
|
||||
"3,TA3 Injektor / Injector",
|
||||
"2,Werkzeuge",
|
||||
"3,Techage Info Tool",
|
||||
"3,TechAge Programmer",
|
||||
"3,TechAge Kelle / Trowel",
|
||||
"3,TA3 Bohrgestängezange / TA3 Drill Pipe Wrench",
|
||||
"3,Techage Schraubendreher / Screwdriver",
|
||||
"3,TechAge Montagewerkzeug / Assembly Tool",
|
||||
},
|
||||
texts = {
|
||||
"Bei TA3 gilt es\\, die Dampf-betriebenen Maschinen durch leistungsfähigere und mit elektrischem Strom betriebene Maschinen abzulösen.\n"..
|
||||
"\n"..
|
||||
"Dazu musst du Kohlekraftwerke und Generatoren bauen. Bald wirst du sehen\\, dass dein Strombedarf nur mit Öl-betriebenen Kraftwerken zu decken ist. Also machst du dich auf die Suche nach Erdöl. Bohrtürme und Ölpumpen helfen die\\, an das Öl zu kommen. Schienenwege dienen dir zum Öltransport bis in die Kraftwerke.\n"..
|
||||
"\n"..
|
||||
"Das Industrielle Zeitalter ist auf seinem Höhepunkt.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Das Kohlekraftwerk besteht aus mehreren Blöcken und muss wie im Plan rechts abgebildet\\, zusammen gebaut werden. Dazu werden die Blöcke TA3 Kraftwerks-Feuerbox\\, TA3 Boiler oben\\, TA3 Boiler unten\\, TA3 Turbine\\, TA3 Generator und TA3 Kühler benötigt.\n"..
|
||||
"\n"..
|
||||
"Der Boiler muss mit Wasser gefüllt werden. Dazu bis zu 10 Eimer Wasser in den Boiler füllen.\n"..
|
||||
"Die Feuerbox muss mit Kohle oder Holzkohle gefüllt werden.\n"..
|
||||
"Wenn das Wasser heiß ist\\, kann der Generator gestartet werden.\n"..
|
||||
"\n"..
|
||||
"Das Kraftwerk kann alternativ auch mit einem Ölbrenner ausgestattet und dann mit Öl betrieben werden.\n"..
|
||||
"Das Öl kann über eine Pumpe und Ölleitung nachgefüllt werden.\n"..
|
||||
"\n"..
|
||||
"Das Kraftwerk liefert eine Leistung von 80 ku.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Teil des Kraftwerks. \n"..
|
||||
"Die Feuerbox muss mit Kohle oder Holzkohle gefüllt werden. Die Brenndauer ist abhängig von der Leistung\\, die vom Kraftwerk angefordert wird. Unter Volllast brennt Kohle 20 s und Holzkohle 60 s. Unter Teillast entsprechend länger (50% Last = doppelte Zeit).\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Teil des Kraftwerks. \n"..
|
||||
"\n"..
|
||||
"Der Ölbrenner kann mit Erdöl\\, Schweröl\\, Naphtha oder Benzin gefüllt werden. Die Brenndauer ist abhängig von der Leistung\\, die vom Kraftwerk angefordert wird. Unter Volllast brennt Erdöl 15 s\\, Schweröl 20 s\\, Naphtha 22 s und Benzin 25 s. \n"..
|
||||
"\n"..
|
||||
"Unter Teillast entsprechend länger (50% Last = doppelte Zeit).\n"..
|
||||
"\n"..
|
||||
"Der Ölbrenner kann nur 50 Einheiten Kraftstoff aufnehmen. Ein zusätzlicher Öltank und eine Ölpumpe sind daher ratsam.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Teil des Kraftwerk. Muss mit Wasser gefüllt werden. Wem kein Wasser mehr vorhanden ist oder die Temperatur zu weit absinkt\\, schaltet sich das Kraftwerk ab. Der Wasserverbrauch des TA3-Kessels ist durch den geschlossenen Dampfkreislauf viel geringer als bei der Dampfmachine.\n"..
|
||||
"Bei der Dampfmaschine geht bei jedem Kolbenhub etwas Wasser als Dampf verloren.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Turbine ist Teil des Kraftwerk. Sie muss neben den Generator gesetzt und über Dampfleitungen mit dem Boiler und dem Kühler\\, wie im Plan abgebildet\\, verbunden werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Generator dient zur Stromerzeugung. Er muss über Stromkabel und Verteilerdosen mit den Maschinen verbunden werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Dient zur Abkühlung des heißen Dampfs aus der Turbine. Muss über Dampfleitungen mit dem Boiler und der Turbine\\, wie im Plan abgebildet\\, verbunden werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"In TA3 (und TA4) werden die Maschinen mit Strom angetrieben. Dazu müssen die Maschinen\\, Speichersysteme und Generatoren mit Stromkabel verbunden werden.\n"..
|
||||
"TA3 besitzt 2 Arten von Stromkabel:\n"..
|
||||
"\n"..
|
||||
" - Isolierte Kabel (TA Stromkabel) für die lokale Verkabelung im Boden oder in Gebäuden. Diese Kabel lassen sich in der Wand oder im Boden verstecken (können mit der Kelle \"verputzt\" werden).\n"..
|
||||
" - Überlandleitungen (TA Stromleitung) für Freiluftverkabelung über große Strecken. Diese Kabel sind geschützt\\, können also von anderen Spielern nicht entfernt werden.\n"..
|
||||
"\n"..
|
||||
"Mehrere Verbraucher\\, Speichersysteme und Generatoren können in einem Stromnetzwerk zusammen betrieben werden. Mit Hilfe der Verteilerdosen können so Netzwerke aufgebaut werden.\n"..
|
||||
"Wird zu wenig Strom bereitgestellt\\, gehen die Verbraucher aus.\n"..
|
||||
"In diesem Zusammenhang ist auch wichtig\\, dass die Funktionsweise von Forceload Blöcken verstanden wurde\\, denn bspw. Generatoren liefern nur Strom\\, wenn der entsprechende Map-Block geladen ist. Dies kann mit einen Forceload Block erzwungen werden.\n"..
|
||||
"\n"..
|
||||
"In TA4 kommt noch ein Kabel für die Solaranlage hinzu.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Speichersysteme im Stromnetz erfüllen zwei Aufgaben:\n"..
|
||||
"\n"..
|
||||
" - Um Bedarfsspitzen abzufangen: Alle Generatoren liefern immer gerade soviel Leistung\\, wie benötigt wird. Werden aber Verbraucher ein/ausgeschaltet oder kommt es aus anderen Gründen zu Bedarfsschwankungen\\, so können Verbraucher kurzzeitig ausfallen. Um dies zu verhindern\\, sollte immer mindestens ein Akkublock in jedem Netzwerk vorhanden sein. Dieser dient als Puffer und gleicht diese Schwankungen im Sekundenbereich aus.\n"..
|
||||
" - Um regenerative Energie zu speichern: Solar und Wind stehen nicht 24 Stunden am Tag zur Verfügung. Damit die Stromversorgung nicht ausfällt\\, wenn kein Strom produziert wird\\, müssen ein oder mehrere Speichersysteme im Netzwerk verbaut werden. Alternativ können die Lücken auch mit Öl/Kohle-Strom überbrückt werden.\n"..
|
||||
"\n"..
|
||||
"Ein Speichersystem gibt seine Kapazität in kud an\\, also ku pro day (Tag). Bspw. ein Speichersystem mit 100 kud liefert 100 ku einen Spieltag lang\\, oder auch 10 ku für 10 Spieltage.\n"..
|
||||
"\n"..
|
||||
"Alle TA3/TA4 Energiequellen besitzen eine einstellbare Ladecharakteristik. Standardmäßig ist diese auf \"80% - 100%\" eingestellt. Dies bedeutet\\, dass die Leistung ab 80% Füllung des Speichersystems immer weiter reduziert wird\\, bis sie bei 100 % komplett abschaltet. Sofern Strom im Netzwerk benötigt wird\\, werden die 100 % nie erreicht\\, da die Leistung des Generators irgendwann auf den Strombedarf im Netzwerk abgesunken ist und damit das Speichersystem nicht mehr geladen\\, sondern nur noch die Verbraucher bedient werden.\n"..
|
||||
"\n"..
|
||||
"Dies hat mehrere Vorteile:\n"..
|
||||
"\n"..
|
||||
" - Die Ladecharakteristik ist einstellbar. Damit kann man bspw. Öl/Kohle Energiequellen bei 60% und die regenerativen Energiequellen erst bei 80% zurückfahren. Damit wird nur Öl/Kohle verbrannt\\, wenn nicht ausreichend regenerativen Energiequellen zur Verfügung stehen.\n"..
|
||||
" - Mehrere Energiequellen können parallel betrieben werden und werden dabei nahezu gleichmäßig belastet\\, denn alle Energiequellen arbeiten bspw. bis 80% Ladekapazität des Speichersystems mit ihrer vollen Leistung und fahren dann gleichzeitig ihre Leistung zurück.\n"..
|
||||
" - Alle Speichersysteme in einem Netzwerk bilden einen großen Puffer. An jedem Speichersystem aber auch am Strom Terminal kann immer die Ladekapazität und der Füllungsgrad des gesamten Speichersystems in Prozent abgelesen werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Für die lokale Verkabelung im Boden oder in Gebäuden.\n"..
|
||||
"Abzweigungen können mit Hilfe von Verteilerdosen realisiert werden. Die maximale Kabellänge zwischen Maschinen oder Verteilerdosen beträgt 1000 m. Es können maximale 1000 Knoten in einem Strom-Netzwerk verbunden werden. Als Knoten zählen alle Blöcke mit Stromanschluss\\, also auch Verteilerdosen.\n"..
|
||||
"\n"..
|
||||
"Da die Stromkabel nicht automatisch geschützt sind\\, wird für längere Strecken die Überlandleitungen (TA Stromleitung) empfohlen.\n"..
|
||||
"\n"..
|
||||
"Stromkabel können mit der Kelle verputzt also in der Wand oder im Boden versteckt werden. Als Material zum Verputzen können alle Stein-\\, Clay- und sonstige Blöcke ohne \"Intelligenz\" genutzt werden. Erde (dirt) geht nicht\\, da Erde zu Gras oder ähnlichem konvertiert werden kann\\, was die Leitung zerstören würde.\n"..
|
||||
"\n"..
|
||||
"Zum Verputzen muss mit der Kelle auf das Kabel geklickt werden. Das Material\\, mit dem das Kabel verputzt werden soll\\, muss sich im Spieler-Inventar ganz links befinden.\n"..
|
||||
"Die Kabel können wieder sichtbar gemacht werden\\, indem man mit der Kelle wieder auf den Block klickt.\n"..
|
||||
"\n"..
|
||||
"Außer Kabel können auch die TA Verteilerdose und die TA Stromschalterbox verputzt werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit der Verteilerdose kann Strom in bis zu 6 Richtungen verteilt werden. Verteilerdosen können auch mit der Kelle verputzt (versteckt) und wieder sichtbar gemacht werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit der TA Stromleitung und den Strommasten können halbwegs realistische Überlandleitungen realisiert werden. Die Strommasten-Köpfe dienen gleichzeitig zum Schutz der Stromleitung (Protection). Dazu muss alle 16 m oder weniger ein Masten gesetzt werden. Der Schutz gilt aber nur die die Stromleitung und die Masten\\, alle anderen Blöcke in diesem Bereich sind dadurch nicht geschützt.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Dient zum Bauen von Strommasten. Ist durch den Strommast-Kopf vor Zerstörung geschützt und kann nur vom Besitzer wieder abgebaut werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Hat bis zu vier Arme und erlaubt damit\\, Strom in bis zu 6 Richtungen weiter zu verteilen. \n"..
|
||||
"Der Strommastkopf schützt Stromleitungen und Masten in einem Radius von 8 m.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Dieser Strommastkopf hat zwei feste Arme und wird für die Überlandleitungen genutzt. Er kann aber auch Strom nach unten und oben weiterleiten.\n"..
|
||||
"Der Strommastkopf schützt Stromleitungen und Masten in einem Radius von 8 m.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit dem Schalter kann der Strom ein- und ausgeschaltet werden. Der Schalter muss dazu auf eine Stromschalterbox gesetzt werden. Die Stromschalterbox muss dazu auf beiden Seiten mit dem Stromkabel verbunden sein.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit dem Schalter kann der Strom ein- und ausgeschaltet werden. Der Schalter muss dazu auf eine Stromschalterbox gesetzt werden. Die Stromschalterbox muss dazu auf beiden Seiten mit dem Stromkabel verbunden sein.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"siehe TA Stromschalter.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der kleine Stromgenerator wird mit Benzin betrieben und kann für kleine Verbraucher mit bis zu 12 ku genutzt werden. Unter Volllast brennt Benzin 150 s. Unter Teillast entsprechend länger (50% Last = doppelte Zeit).\n"..
|
||||
"\n"..
|
||||
"Der Stromgenerator kann nur 50 Einheiten Benzin aufnehmen. Ein zusätzlicher Tank und eine Pumpe sind daher ratsam.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Akku Block dient zur Speicherung von überschüssiger Energie und gibt bei Stromausfall automatisch Strom ab (soweit vorhanden).\n"..
|
||||
"Mehrere Akku Blocks zusammen bilden ein TA3 Energiespeichersystem. Jeder Akku Block hat eine Anzeige für den Ladezustand und für die gespeicherte Ladung\\, wobei hier immer die Werte für das gesamte Netzwerk angezeigt werden. Die gespeicherte Ladung wird in \"kud\" also \"ku-days\" angezeigt (analog zu kWh) 5 kud entspricht damit bspw. 5 ku für einen Spieltag (20 min) oder 1 ku für 5 Spieltage.\n"..
|
||||
"\n"..
|
||||
"Ein Akku Block hat 3.33 kud.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Das Strom-Terminal muss mit dem Stromnetz verbunden werden. Es zeigt Daten aus dem Stromnetz an.\n"..
|
||||
"\n"..
|
||||
"In der oberen Hälfte werden die wichtigsten Größen ausgegeben:\n"..
|
||||
"\n"..
|
||||
" - aktuelle/maximale Generatorleistung\n"..
|
||||
" - aktueller Stromaufnahme aller Verbraucher\n"..
|
||||
" - aktueller Ladestrom in/aus dem Speichersystems\n"..
|
||||
" - aktuellen Ladezustand des Speichersystems in Prozent\n"..
|
||||
"\n"..
|
||||
"In der unteren Hälfte wird die Anzahl der Netzwerkblöcke ausgegeben.\n"..
|
||||
"\n"..
|
||||
"Über den Reiter \"console\" können weitere Daten zu den Generatoren und Speichersystemen abgefragt werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Um TA2 Maschinen über das Stromnetz betreiben zu können\\, wird der TA3 Elektromotor benötigt. Dieser wandelt Strom in Achsenkraft um.\n"..
|
||||
"Wird der Elektromotor nicht mit ausreichend Strom versorgt\\, geht er in einen Fehlerzustand und muss über einen Rechtsklick wieder aktiviert werden.\n"..
|
||||
"\n"..
|
||||
"Das Elektromotor nimmt primär max. 40 ku an Strom auf und gibt sekundär max. 39 ku als Achsenkraft wieder ab. Er verbraucht also ein ku für die Umwandlung.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der TA3 Industrieofen dient als Ergänzung zu normalen Ofen (furnace). Damit können alle Waren mit \"Koch\" Rezepten\\, auch im Industrieofen hergestellt werden. Es gibt aber auch spezielle Rezepte\\, die nur im Industrieofen hergestellt werden können.\n"..
|
||||
"Der Industrieofen hat sein eigenes Menü zur Rezeptauswahl. Abhängig von den Waren im Industrieofen Inventar links kann rechts das Ausgangsprodukt gewählt werden.\n"..
|
||||
"\n"..
|
||||
"Der Industrieofen benötigt Strom (für das Gebläse) sowie Schweröl/Benzin für den Brenner. Der Industrieofen muss wie im Plan rechts abgebildet\\, zusammen gebaut werden.\n"..
|
||||
"\n"..
|
||||
"Siehe auch TA4 Ofenheizung.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Ist Teil des TA3 Industrieofen.\n"..
|
||||
"\n"..
|
||||
"Der Ölbrenner kann mit Erdöl\\, Schweröl\\, Naphtha oder Benzin betrieben werden. Die Brennzeit beträgt für Erdöl 65 s\\, Schweröl 80 s\\, Naphtha 90 s und Benzin 100 s.\n"..
|
||||
"\n"..
|
||||
"Der Ölbrenner kann nur 50 Einheiten Kraftstoff aufnehmen. Ein zusätzlicher Tank und eine Pumpe sind daher ratsam.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Ist Teil des TA3 Industrieofen. Siehe TA3 Industrieofen.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Ist Teil des TA3 Industrieofen. Siehe TA3 Industrieofen.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Flüssigkeiten wie Wasser oder Öl können nur die spezielle Leitungen gepumpt und in Tanks gespeichert werden. Wie auch bei Wasser gibt es aber Behälter (Kanister\\, Fässer)\\, in denen die Flüssig gelagert und transportiert werden kann.\n"..
|
||||
"\n"..
|
||||
"Über die gelben Leitungen und Verbindungsstücke ist es auch möglich\\, mehrere Tanks zu verbinden. Allerdings müssen die Tanks den selben Inhalt haben und zwischen Tank\\, Pumpe und Verteiler muss immer mindestens eine gelbe Leitung sein.\n"..
|
||||
"\n"..
|
||||
"Bspw. zwei Tanks direkt mit einem Verteilerstück zu verbinden\\, geht nicht.\n"..
|
||||
"\n"..
|
||||
"Um Flüssigkeiten von Behältern nach Tanks umzufüllen\\, dient der Einfülltrichter. Im Plan ist dargestellt\\, wie Kanistern oder Fässer mit Flüssigkeiten über Schieber in einen Einfülltrichter geschoben werden. Im Einfülltrichter wird der Behälter geleert und die Flüssigkeit nach unten in den Tank geleitet. \n"..
|
||||
"\n"..
|
||||
"Der Einfülltrichter kann auch unter einen Tank gesetzt werden\\, um den Tank zu leeren.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"In einem Tank können Flüssigkeiten gespeichert werden. Ein Tank kann über eine Pumpe gefüllt bzw. geleert werden. Dazu muss die Pumpe über einer Leitung (gelbe Röhre) mit dem Tank verbunden sein.\n"..
|
||||
"\n"..
|
||||
"Ein Tank kann auch von Hand gefüllt oder geleert werden\\, indem mit einem vollen oder leeren Flüssigkeitsbehälter (Fass\\, Kanister) auf den Tank geklickt wird. Dabei ist zu beachten\\, dass Fässer nur komplett gefüllt oder entleert werden können. Sind bspw. weniger als 10 Einheiten im Tank\\, muss dieser Rest mit Kanistern entnommen oder leergepumpt werden.\n"..
|
||||
"\n"..
|
||||
"In einen TA3 Tank passen 1000 Einheiten oder 100 Fässer einer Flüssigkeit.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit der Pumpe können Flüssigkeiten von Tanks oder Behältern zu anderen Tanks oder Behältern gepumpt werden. Bei der Pumpe muss die Pumprichtung (Pfeil) beachtet werden. Über die gelben Leitungen und Verbindungsstücke ist es auch möglich\\, mehrere Tanks auf jeder Seite der Pumpe anzuordnen. Allerdings müssen die Tanks den selben Inhalt haben.\n"..
|
||||
"\n"..
|
||||
"Die TA3 Pumpe pumpt 4 Einheiten Flüssigkeit alle zwei Sekunden.\n"..
|
||||
"\n"..
|
||||
"Hinweis 1: Die Pumpe darf nicht direkt neben den Tank platziert werden. Es muss immer mindestens ein Stück gelbe Leitung dazwischen sein.\n"..
|
||||
"\n"..
|
||||
"Hinweis 2: Nach dem Starten markiert die Pumpe 10 x die Blöcke\\, von und zu denen gepumpt wird.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Um Flüssigkeiten zwischen Behältern und Tanks umzufüllen\\, dient der Einfülltrichter.\n"..
|
||||
"\n"..
|
||||
" - wird der Einfülltrichter unter einen Tank gesetzt und werden leere Fässer mit einem Schieber oder von Hand in den Einfülltrichter gegeben\\, wird der Tankinhalt in die Fässer umgefüllt und die Fässer können ausgangsseitig wieder entnommen werden\n"..
|
||||
" - wird der Einfülltrichter auf einen Tank gesetzt und werden volle Fässer mit einem Schieber oder von Hand in den Einfülltrichter gegeben\\, werden diese in den Tank umgefüllt und die Fässer können ausgangsseitig wieder entnommen werden\n"..
|
||||
"\n"..
|
||||
"Dabei ist zu beachten\\, dass Fässer nur komplett gefüllt oder entleert werden können. Sind bspw. weniger als 10 Einheiten im Tank\\, muss dieser Rest mit Kanistern entnommen oder leergepumpt werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die gelben Röhren dienen zur Weiterleitung von Gas und Flüssigkeiten. \n"..
|
||||
"Die maximale Leitungslänge beträgt 100 m.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Blöcke dienen als Wanddurchbrüche für Röhren\\, so dass keine Löcher offen bleiben.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Für die gelben Röhren gibt es ein Ventil\\, welches über Mausklicks geöffnet und geschlossen werden kann.\n"..
|
||||
"Das Ventil kann auch über on/off Kommandos angesteuert werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Um deine Generatoren und Öfen mit Öl betreiben zu können\\, muss du zuerst nach Öl suchen und einen Bohrturm errichten und danach das Öl fördern.\n"..
|
||||
"Dazu dienen dir TA3 Ölexplorer\\, TA3 Ölbohrkiste und TA3 Ölpumpe.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit dem Ölexplorer kannst du nach Öl suchen. Dazu den Block auf den Boden setzen und mit Rechtsklick die Suche starten. Der Ölexplorer kann oberirdisch und unterirdisch in allen Tiefen eingesetzt werden.\n"..
|
||||
"Über die Chat-Ausgabe wird dir angezeigt\\, in welcher Tiefe nach Öl gesucht wurde und wie viel Öl (oil) gefunden wurde.\n"..
|
||||
"Du kannst mehrfach auf den Block klicken\\, um auch in tieferen Bereichen nach Öl zu suchen. Ölfelder haben eine Größe von 4000 bis zu 20000 Items.\n"..
|
||||
"\n"..
|
||||
"Falls die Suche erfolglos war\\, musst du den Block ca. 16 m weiter setzen.\n"..
|
||||
"Der Ölexplorer sucht immer innerhalb des ganzen Map-Blocks und darunter nach Öl\\, in dem er gesetzt wurde. Eine erneute Suche im gleichen Map-Block (16x16 Feld) macht daher keinen Sinn.\n"..
|
||||
"\n"..
|
||||
"Falls Öl gefunden wurde\\, wird die Stelle für den Bohrturm angezeigt. Du musst den Bohrturm innerhalb des angezeigten Bereiches errichten\\, die Stelle am besten gleich mit einem Schild markieren und den ganzen Bereich gegen fremde Spieler schützen.\n"..
|
||||
"\n"..
|
||||
"Gib die Suche nach Öl nicht zu schnell auf. Es kann wenn du Pech hast\\, sehr lange dauern\\, bis du eine Ölquelle gefunden hast.\n"..
|
||||
"Es macht auch keinen Sinn\\, einen Bereich den ein anderer Spieler bereits abgesucht hat\\, nochmals abzusuchen. Die Chance\\, irgendwo Öl zu finden\\, ist für alle Spieler gleich.\n"..
|
||||
"\n"..
|
||||
"Der Ölexplorer kann immer wieder zur Suche nach Öl eingesetzt werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Ölbohrkiste muss an die Stelle gesetzt werden\\, die vom Ölexplorer angezeigt wurde. An anderen Stellen nach Öl zu bohren ist zwecklos.\n"..
|
||||
"Wird auf den Button der Ölbohrkiste geklickt\\, wird über der Kiste ein Bohrturm errichtet. Dies dauert einige Sekunden.\n"..
|
||||
"Die Ölbohrkiste hat 4 Seiten\\, bei IN muss das Bohrgestänge über Schieber angeliefert und bei OUT muss das Bohrmaterial abtransportiert werden. Über eine der anderen zwei Seiten muss die Ölbohrkiste mit Strom versorgt werden.\n"..
|
||||
"\n"..
|
||||
"Die Ölbohrkiste bohrt bis zum Ölfeld (1 Meter in 16 s) und benötigt dazu 16 ku Strom.\n"..
|
||||
"Wurde das Ölfeld erreicht\\, kann der Bohrturm abgebaut und die Kiste entfernt werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"An die Stelle der Ölbohrkiste muss nun die Ölpumpe platziert werden. Auch die Ölpumpe benötigt Strom (16 ku) und liefert alle 8 s ein Einheit Erdöl. Das Erdöl muss in einem Tank gesammelt werden. Dazu muss die Ölpumpe über eine Leitung (gelbe Röhre) mit dem Tank verbunden werden.\n"..
|
||||
"Ist alles Öl abgepumpt\\, kann auch die Ölpumpe wieder entfernt werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Das Bohrgestänge wird für die Bohrung benötigt. Es werden so viele Bohrgestänge Items benötigt wie als Tiefe für das Ölfeld angegeben wurde. Das Bohrgestänge ist nach der Bohrung nutzlos\\, kann aber auch nicht abgebaut werden und verbleibt im Boden. Es gibt aber ein Werkzeug\\, um die Bohrgestänge Blöcke wieder entfernen zu können (-> Werkzeuge -> TA3 Bohrgestängezange).\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Öltank ist die große Ausführung des TA3 Tanks (siehe Flüssigkeiten -> TA3 Tank).\n"..
|
||||
"\n"..
|
||||
"Der große Tank kann 4000 Einheiten Öl\\, aber auch jede andere Art von Flüssigkeit aufnehmen.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"",
|
||||
"Um Öl von der Ölquelle zur Ölverarbeitungsanlage zu befördern\\, können Tankwagen (tank carts) genutzt werden. Ein Tankwagen kann direkt über Pumpen gefüllt bzw. geleert werden. In beiden Fällen muss die gelbe Röhre von oben mit dem Tankwagen verbunden werden.\n"..
|
||||
"\n"..
|
||||
"Dazu sind folgende Schritte notwendig:\n"..
|
||||
"\n"..
|
||||
" - Den Tankwagen vor den Prellbock setzen. Der Prellbock darf noch nicht mit einer Zeit programmiert sein\\, so dass der Tankwagen nicht automatisch losfährt\n"..
|
||||
" - Den Tankwagen über gelbe Röhren mit der Pumpe verbinden\n"..
|
||||
" - Pumpe einschalten\n"..
|
||||
" - Prellbock mit einer Zeit (10 - 20 s) programmieren\n"..
|
||||
"\n"..
|
||||
"Diese Reihenfolge muss auf beiden Seiten /Füllen/Leeren) eingehalten werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"In die Minecarts können Kanister und Fässer geladen werden. Das Öl muss dazu zuvor in Fässer umgeladen werden. Die Ölfässer können direkt mit einem Schieber und Röhren in das Minecart geschoben werden (siehe Plan). Die leeren Fässer\\, welche per Minecart von der Entladestation zurück kommen\\, können über einen Hopper entladen werden\\, der unter der Schiene an der Haltestelle platziert wird.\n"..
|
||||
"\n"..
|
||||
"Es ist mit dem Hopper nicht möglich\\, an *einer* Haltestelle sowohl die leeren Fässer zu entladen\\, als auch die vollen Fässer zu beladen. Der Hopper lädt die vollen Fässer sofort wieder aus. Daher ist es ratsam\\, jeweils 2 Stationen auf der Be- und Entladeseite einzurichten und den Minecart dann über eine Aufzeichnungsfahrt entsprechend zu programmieren.\n"..
|
||||
"\n"..
|
||||
"Der Plan zeigt\\, wie das Öl in einen Tank gepumpt und über einen Einfülltrichter in Fässer umgefüllt und in Minecarts geladen werden kann.\n"..
|
||||
"\n"..
|
||||
"Damit die Minecarts automatisch wieder starten\\, müssen die Prellböcke mit Stationsname und Wartezeit konfiguriert werden. Für das Entladen reichen 5 s. Da aber die Schieber immer für mehrere Sekunden in den Standby fallen\\, wenn kein Minecart da ist\\, muss für das Beladen eine Zeit von 15 oder mehr Sekunden eingegeben werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Tankwagen dient zum Transport von Flüssigkeiten. Es kann wie Tanks mit Pumpen gefüllt bzw. geleert werden. In beiden Fällen muss die gelbe Röhre von oben mit dem Tankwagen verbunden werden.\n"..
|
||||
"\n"..
|
||||
"In den Tankwagen passen 200 Einheiten.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Kistenwagen dient zum Transport von Items. Es kann wie Kisten über Schieber gefüllt bzw. geleert werden.\n"..
|
||||
"\n"..
|
||||
"In den Kistenwagen passen 4 Stacks.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Öl ist ein Stoffgemisch und besteht aus sehr vielen Komponenten. Über einen Destillationsturm kann das Öl in seine Hauptbestandteile wie Bitumen\\, Schweröl\\, Naphtha\\, Benzin und Gas zerlegt werden.\n"..
|
||||
"Die weitere Verarbeitung zu Endprodukten erfolgt im Chemischen Reaktor.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Destillationsturm muss wie im Plan rechts oben aufgebaut werden. \n"..
|
||||
"Über den Basisblock wird das Bitumen abgelassen. Der Ausgang ist auf der Rückseite des Basisblocks (Pfeilrichtung beachten).\n"..
|
||||
"Auf diesen Basisblock kommen die \"Destillationsturm\" Blöcke mit den Nummern: 1\\, 2\\, 3\\, 2\\, 3\\, 2\\, 3\\, 4\n"..
|
||||
"An den Öffnungen von unten nach oben werden Schweröl\\, Naphtha und Benzin abgeleitet. Ganz oben wird das Propangas abgefangen.\n"..
|
||||
"Es müssen alle Öffnungen am Turm mit Tanks verbunden werden.\n"..
|
||||
"Der Aufkocher (reboiler) muss mit dem Block \"Destillationsturm 1\" verbunden werden.\n"..
|
||||
"\n"..
|
||||
"Der Aufkocher benötigt Strom (nicht im Plan zu sehen)!\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Aufkocher erhitzt das Erdöl auf ca. 400°C. Dabei verdampft es weitgehend und wird in den Destillationsturm zur Abkühlung geleitet.\n"..
|
||||
"\n"..
|
||||
"Der Aufkocher benötigt 14 Einheiten Strom und produziert alle 16 s jeweils eine Einheit Bitumen\\, Schweröl\\, Naphtha\\, Benzin und Propangas.\n"..
|
||||
"Dazu muss der Aufkocher über einen Pumpe mit Erdöl versorgt werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Neben den Röhren für Warentransport\\, sowie den Gas- und Stromleitungen gibt es auch noch eine drahtlose Kommunikationsebene\\, über die Blöcke untereinander Daten austauschen können. Dafür müssen keine Leitungen gezogen werden\\, sondern die Verbindung zwischen Sender und Empfänger erfolgt nur über die Blocknummer. \n"..
|
||||
"\n"..
|
||||
"*Info:* Eine *Blocknummer* ist eine eindeutige Zahl\\, die von Techage beim Setzen von vielen Techage Blöcken generiert wird. Die Blocknummer dient zur Adressierung bei der Kommunikation zwischen Techage Controllern und Maschinen. Alle Blöcke\\, die an dieser Kommunikation teilnehmen können\\, zeigen die Blocknummer als Info-Text an\\, wenn man mit dem Mauscursor den Block fixiert.\n"..
|
||||
"\n"..
|
||||
"Welche Kommandos ein Block unterstützt\\, kann mit dem TechAge Info Werkzeug (Schraubenschlüssel) ausgelesen und angezeigt werden.\n"..
|
||||
"Die einfachsten Kommandos\\, die von fast allen Blöcken unterstützt werden\\, sind:\n"..
|
||||
"\n"..
|
||||
" - 'on' - Block/Maschine/Lampe einschalten\n"..
|
||||
" - 'off' - Block/Maschine/Lampe ausschalten\n"..
|
||||
"\n"..
|
||||
"Mir Hilfe des TA3 Terminal können diese Kommandos sehr einfach ausprobiert werden. Angenommen\\, eine Signallampe hat die Nummer 123.\n"..
|
||||
"Dann kann mit:\n"..
|
||||
"\n"..
|
||||
" cmd 123 on\n"..
|
||||
"\n"..
|
||||
"die Lampe ein\\, und mit:\n"..
|
||||
"\n"..
|
||||
" cmd 123 off\n"..
|
||||
"\n"..
|
||||
"die Lampe wieder ausgeschaltet werden. Diese Kommandos müssen so in das Eingabefeld des TA3 Terminals eingegeben werden.\n"..
|
||||
"\n"..
|
||||
"Kommandos wie 'on' und 'off' werden zum Empfänger gesendet\\, ohne dass eine Antwort zurück kommt. Diese Kommandos können daher bspw. mit einem Taster/Schalter auch gleichzeitig an mehrere Empfänger gesendet werden\\, wenn dort im Eingabefeld mehrere Nummern eingegeben werden.\n"..
|
||||
"\n"..
|
||||
"Ein Kommandos wie 'state' fordert den Status eines Blockes an. Der Block sendet in Folge seinen Status zurück. Diese Art von bestätigten Kommandos kann gleichzeitig nur an einen Empfänger gesendet werden.\n"..
|
||||
"Auch dieses Kommandos kann mit dem TA3 Terminal bspw. an einem Schieber ausprobiert werden:\n"..
|
||||
"\n"..
|
||||
" cmd 123 state\n"..
|
||||
"\n"..
|
||||
"Mögliche Antworten des Schiebers sind:\n"..
|
||||
"\n"..
|
||||
" - 'running' --> bin am arbeiten\n"..
|
||||
" - 'stopped' --> ausgeschaltet\n"..
|
||||
" - 'standby' --> nichts zu tun\\, da Quell-Inventar leer\n"..
|
||||
" - 'blocked' --> kann nichts tun\\, da Ziel-Inventar voll\n"..
|
||||
"\n"..
|
||||
"Dieser Status und weitere Informationen werden auch ausgegeben\\, wenn mit dem Schraubenschlüssel auf den Block geklickt wird.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Taster/Schalter sendet 'on'/'off' Kommandos zu den Blöcken\\, die über die Nummern konfiguriert wurden.\n"..
|
||||
"Der Taster/Schalter kann als Taster (button) oder Schalter (switch) konfiguriert werden. Wird er als Taster konfiguriert\\, so kann die Zeit zwischen den 'on' und 'off' Kommandos eingestellt werden. Mit der Betriebsart \"on button\" wird nur ein 'on' und kein 'off' Kommandos gesendet.\n"..
|
||||
"\n"..
|
||||
"Über die Checkbox \"public\" kann eingestellt werden\\, ob den Taster von jedem (gesetzt)\\, oder nur vom Besitzer selbst (nicht gesetzt) genutzt werden darf.\n"..
|
||||
"\n"..
|
||||
"Hinweis: Mit dem Programmer können Blocknummern sehr einfach eingesammelt und konfiguriert werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit dem TA3 Kommando Konverter können 'on' / 'off' Kommandos in andere Kommandos umgewandelt werden\\, sowie die Weiterleitung verhindert oder verzögert werden. Die Nummer des Zielblockes bzw. die Nummern der Zielblöcke\\, die Kommandos die gesendet werden sollen\\, sowie die Verzögerungszeiten in Sekunden müssen eingegeben werden. Wird kein Kommando eingegeben\\, wird nichts gesendet.\n"..
|
||||
"\n"..
|
||||
"Die Nummern können auch mit Hilfe des Techage Programmers programmiert werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Das TA3 Flipflop wechselt seinen Zustand mit jedem empfangenen 'on' Kommando. Empfangene 'off' Kommandos werden ignoriert. Damit werden abhängig vom Zustandswechsel abwechselnd 'on' / 'off' Kommandos gesendet. Die Nummer des Zielblockes bzw. die Nummern der Zielblöcke müssen eingegeben werden. Die Nummern können auch mit Hilfe des Techage Programmers programmiert werden.\n"..
|
||||
"\n"..
|
||||
"Damit lassen sich bspw. Lampen mit Hilfe von Tastern ein- und wieder ausschalten.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Den TA3 Logikblock kann man so programmieren\\, dass ein oder mehrere Eingangskommandos zu einem Ausgangskommando verknüpft und gesendet werden. Dieser Block kann daher diverse Logik-Elemente wie AND\\, OR\\, NOT\\, XOR usw. ersetzen.\n"..
|
||||
"Eingangkommandos für den Logikblock sind 'on'/'off' Kommandos.\n"..
|
||||
"Eingangskommandos werden über die Nummer referenziert\\, also bspw. '1234' für das Kommando vom Sender mit der Nummer 1234.\n"..
|
||||
"Das gleiche gilt für Ausgangskommandos.\n"..
|
||||
"\n"..
|
||||
"Eine Regel ist wie folgt aufgebaut:\n"..
|
||||
"\n"..
|
||||
" <output> = on/off if <input-expression> is true\n"..
|
||||
"\n"..
|
||||
"'<output>' ist die Nummer des Blocks\\, zu dem das Kommando gesendet werden soll.\n"..
|
||||
"'<input-expression>' ist ein boolescher Ausdruck\\, bei dem Eingabenummern ausgewertet werden. \n"..
|
||||
"\n"..
|
||||
"*Beispiele für den Input Ausdruck*\n"..
|
||||
"\n"..
|
||||
"Signal negieren (NOT):\n"..
|
||||
"\n"..
|
||||
" 1234 == off\n"..
|
||||
"\n"..
|
||||
"Logisches UND (AND):\n"..
|
||||
"\n"..
|
||||
" 1234 == on and 2345 == on\n"..
|
||||
"\n"..
|
||||
"Logisches ODER (OR):\n"..
|
||||
"\n"..
|
||||
" 1234 == on or 2345 == on\n"..
|
||||
"\n"..
|
||||
"Folgende Operatoren sind zulässig: 'and' 'or' 'on' 'off' 'me' '==' '~=' '(' ')'\n"..
|
||||
"\n"..
|
||||
"Ist der Ausdruck wahr (true)\\, wird ein Kommando an den Block mit der '<output>' Nummer gesendet.\n"..
|
||||
"\n"..
|
||||
"Es können bis zu vier Regeln definiert werden\\, wobei immer alle Regeln geprüft werden\\, wenn ein Kommando empfangen wird.\n"..
|
||||
"\n"..
|
||||
"Die interne Durchlaufzeit aller Kommandos beträgt 100 ms.\n"..
|
||||
"\n"..
|
||||
"Über das Schlüsselwort 'me' kann die eigene Knotennummer referenziert werden. Damit ist es möglich\\, dass sich der Block selbst ein Kommando sendet (Flip-Flop Funktion).\n"..
|
||||
"\n"..
|
||||
"Die Sperrzeit definiert eine Pause nach einem Kommando\\, in der der Logikblock kein weiteres Kommando von extern annimmt. Empfangene Kommandos in der Sperrzeit werden damit verworfen. Die Sperrzeit kann in Sekunden definiert werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Wiederholer (repeater) sendet das empfangene Signal an alle konfigurierten Nummern weiter.\n"..
|
||||
"Dies kann bspw. Sinn machen\\, wenn man viele Blöcke gleichzeitig angesteuert werden sollen. Den Wiederholer kann man dazu mit dem Programmer konfigurieren\\, was nicht bei allen Blöcken möglich ist.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Sequenzer kann eine Reihe von 'on'/'off' Kommandos senden\\, wobei der Abstand zwischen den Kommandos in Sekunden angegeben werden muss. Damit kann man bspw. eine Lampe blinken lassen.\n"..
|
||||
"Es können bis zu 8 Kommandos konfiguriert werden\\, jedes mit Zielblocknummer und Anstand zum nächsten Kommando.\n"..
|
||||
"Der Sequenzer wiederholt die Kommandos endlos\\, wenn \"Run endless\" gesetzt wird.\n"..
|
||||
"Wird also Kommando nichts ausgewählt\\, wird nur die angegeben Zeit in Sekunden gewartet.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Timer kann Kommandos Spielzeit-gesteuert senden. Für jede Kommandozeile kann die Uhrzeit\\, die Zielnummer(n) und das Kommando selbst angegeben werden. Damit lassen sich bspw. Lampen abends ein- und morgens wieder ausschalten.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Das Terminal dient in erster Linie zum Austesten der Kommandoschnittstelle anderer Blöcke (siehe \"Logik-/Schalt-Blöcke\").\n"..
|
||||
"Man kann aber auch Kommandos auf Tasten legen und so das Terminal produktiv nutzen.\n"..
|
||||
"\n"..
|
||||
" set <button-num> <button-text> <command>\n"..
|
||||
"\n"..
|
||||
"Mit 'set 1 ON cmd 123 on' kann bspw. die Usertaste 1 mit dem Kommando 'cnd 123 on' programmiert werden. Wird die Taste gedrückt\\, wird das Kommando gesendet und die Antwort auf dem Bildschirm ausgegeben.\n"..
|
||||
"\n"..
|
||||
"Das Terminal besitzt folgende\\, lokalen Kommandos:\n"..
|
||||
"\n"..
|
||||
" - 'clear' lösche Bildschirm\n"..
|
||||
" - 'help' gib eine Hilfeseite aus\n"..
|
||||
" - 'pub' schalte in den öffentlichen Modus um\n"..
|
||||
" - 'priv' schalte in den privaten Modus um\n"..
|
||||
"\n"..
|
||||
"Im privaten Modus (private) kann das Terminal nur von Spielern verwendet werden\\, die an diesem Ort bauen können\\, also Protection Rechte besitzen. Im öffentlichen Modus (public) können alle Spieler die vorkonfigurierten Tasten verwenden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Farblampe kann mit 'on'/'off' Kommando ein- bzw. ausgeschaltet werden. Diese Lampe braucht keinen Strom und\n"..
|
||||
"kann mit der Spritzpistole aus der Mod \"Unified Dyes\" und über Lua/Beduino Kommandos eingefärbt werden.\n"..
|
||||
"\n"..
|
||||
"Mit dem Chat-Kommando '/ta_color' wird die Farbpalette mit den Werten für die Lua/Beduino Kommandos angezeigt und mit '/ta_send color <num>' kann die Farbe geändert werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit diese Blöcken kann man Türe und Tore realisieren\\, die über Kommandos geöffnet (Blöcke verschwinden) und wieder geschlossen werden können. Pro Tor oder Tür wird dazu ein Tür Controller benötigt. \n"..
|
||||
"\n"..
|
||||
"Das Aussehen der Blöcke kann über das Block-Menü eingestellt werden.\n"..
|
||||
"Damit lassen sich Geheimtüren realisieren\\, die sich nur bei bestimmten Spielern öffnen (mit Hilfe des Spieler-Detektors). \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Tür Controller dient zur Ansteuerung der TA3 Tür/Tor Blöcke. Beim Tür Controller müssen die Nummern der Tür/Tor Blöcke eingegeben werden. Wird ein 'on'/'off' Kommando Kommando an den Tür Controller gesendet\\, öffnet/schließt dieser die Tür bzw. das Tor.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Tür Controller II kann alle Arten von Blöcken entfernen und wieder setzen. Um den Tür Controller II anzulernen\\, muss der \"Aufzeichnen\" Button gedrückt werden. Dann müssen alle Blöcke angeklickt werden\\, die Teil der Tür / des Tores sein sollen. Danach muss der \"Fertig\" Button gedrückt werden. Es können bis zu 16 Blöcke ausgewählt werden. Die entfernten Blöcke werden im Inventar des Controllers gespeichert.\n"..
|
||||
"\n"..
|
||||
" Über die Tasten \"Entfernen\" bzw. \"Setzen\" kann die Funktion des Controllers von Hand getestet werden.\n"..
|
||||
"\n"..
|
||||
"Wird ein 'on' / 'off' Kommando an den Tür Controller II gesendet\\, entfernt bzw. setzt er die Blöcke ebenfalls.\n"..
|
||||
"\n"..
|
||||
"Mit '$send_cmnd(node_number\\, \"exchange\"\\, 2)' können einzelne Böcke gesetzt\\, entfernt\\, bzw. durch andere Blöcke aus dem Inventar ersetzt werden. \n"..
|
||||
"\n"..
|
||||
"Mit '$send_cmnd(node_number\\, \"set\"\\, 2)' kann ein Block aus dem Inventory explizit gesetzt werden\\, sofern der Inventory Slot nicht leer ist.\n"..
|
||||
"\n"..
|
||||
"Mit '$send_cmnd(node_number\\, \"dig\"\\, 2)' kann ein Block wieder entfernt werden\\, sofern der Inventory Slot leer ist. \n"..
|
||||
"\n"..
|
||||
"Mit '$send_cmnd(node_number\\, \"get\"\\, 2)' wird der Name des gesetzten Blocks zurückgeliefert. \n"..
|
||||
"\n"..
|
||||
"Die Slot-Nummer des Inventars (1 .. 16) muss in allen drei Fällen als payload übergeben werden.\n"..
|
||||
"\n"..
|
||||
"Damit lassen sich auch ausfahrbare Treppen und ähnliches simulieren.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mir dem Sound Block können veschiedene Sounds/Laute abgespielt werden. Es sind alle Sounds der Mods Techage\\, Signs Bot\\, Hyperloop\\, Unified Inventory\\, TA4 Jetpack und Minetest Game verfügbar.\n"..
|
||||
"\n"..
|
||||
"Die Sounds können über das Menü und über ein Kommando ausgewählt und abgespielt werden.\n"..
|
||||
"\n"..
|
||||
" - Kommando 'on' zum Abspielen eines Sounds\n"..
|
||||
" - Kommando 'sound <idx>' zur Auswahl eines Sounds über den Index\n"..
|
||||
" - Kommando 'gain <volume>' zum Einstellen der Lautstärke über den '<volume>' Wert (1 bis 5).\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Mesecons Umsetzer dient zur Umwandlung von Techage on/off Kommandos in Mesecons Signale und umgekehrt.\n"..
|
||||
"Dazu müssen eine oder mehrere Knotennummern eingegeben und der Konverter mit Mesecons Blöcken \n"..
|
||||
"über Mesecons Leitungen verbunden werden. Den Mesecons Umsetzer kann man auch mit dem Programmer konfigurieren.\n"..
|
||||
"Der Mesecons Umsetzer akzeptiert bis zu 5 Kommandos pro Sekunde\\, bei höherer Belastung schaltet er sich ab.\n"..
|
||||
"\n"..
|
||||
"*Dieser Block existiert aber nur\\, wenn die Mod mesecons aktiv ist!*\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Detektoren scannen ihre Umgebung ab und senden ein 'on'-Kommando\\, wenn das Gesuchte erkannt wurde.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Detektor ist eine spezieller Röhrenblock\\, der erkennt\\, wenn Items über die Röhre weitergegeben werden. Es muss dazu auf beiden Seiten mit der Röhre verbunden sein. Werden Items mit einem Schieber in den Detektor geschoben\\, gibt er diese automatisch weiter.\n"..
|
||||
"Er sendet ein 'on'\\, wenn ein Item erkannt wird\\, gefolgt von einem 'off' eine Sekunde später.\n"..
|
||||
"Danach werden weitere Kommando für 8 Sekunden blockiert.\n"..
|
||||
"Die Wartezeit\\, sowie die Items\\, die ein Kommando auslösen sollen\\, können über das Gabelschlüssel-Menü konfiguriert werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Wagen Detektor sendet ein 'on'-Kommando\\, wenn er einen Wagen/Cart (Minecart) direkt vor sich erkannt hat. Zusätzlich kann der Detektor auch den Wagen wieder starten\\, wenn ein 'on'-Kommando empfangen wird.\n"..
|
||||
"\n"..
|
||||
"Der Detektor kann auch mit seiner eigenen Nummer programmiert werden. In diesem Falle schiebt er alle Wagen an\\, die in seiner Nähe (ein Block in alle Richtungen) zum Halten kommen.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Block Detektor sendet ein 'on'-Kommando\\, wenn er erkennt\\, dass Blöcke vor ihm erscheinen oder verschwinden\\, muss jedoch entsprechend konfiguriert werden. Nach dem Zurückschalten des Detektors in den Standardzustand (grauer Block) wird ein 'off'-Kommando gesendet. Gültige Blöcke sind alle Arten von Blöcken und Pflanzen\\, aber keine Tiere oder Spieler. Die Sensorreichweite beträgt 3 Blöcke/Meter in Pfeilrichtung.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Spieler Detektor sendet ein 'on'-Kommando\\, wenn er einen Spieler in einem Umkreis von 4 m um den Block herum erkennt. Verlässt der Spieler wieder den Bereich\\, wird ein 'off'-Kommando gesendet.\n"..
|
||||
"Soll die Suche auf bestimmte Spieler eingegrenzt werden\\, so können diese Spielernamen auch eingegeben werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Lichtdetektor sendet einen 'on'-Kommando\\, wenn der Lichtpegel des darüber liegenden Blocks einen bestimmten Pegel überschreitet\\, der über das Rechtsklickmenü eingestellt werden kann.\n"..
|
||||
"Mit einen TA4 Lua Controller kann die genaue Lichtstärke mit $get_cmd(num\\, 'light_level') ermitteln werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Bei TA3 existieren die gleichen Maschinen wie bei TA2\\, nur sind diese hier leistungsfähiger und benötigen Strom statt Achsenantrieb.\n"..
|
||||
"Im folgenden sind daher nur die unterschiedlichen\\, technischen Daten angegeben.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Funktion entspricht der von TA2.\n"..
|
||||
"Die Verarbeitungsleistung beträgt 6 Items alle 2 s.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Funktion des TA3 Verteilers entspricht der von TA2.\n"..
|
||||
"Die Verarbeitungsleistung beträgt 12 Items alle 4 s.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Funktion entspricht der von TA2.\n"..
|
||||
"Die Verarbeitungsleistung beträgt 2 Items alle 4 s. Der Autocrafter benötigt hierfür 6 ku Strom.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Funktion entspricht der von TA2\\, nur werden hier TA4 WLAN Chips produziert.\n"..
|
||||
"Die Verarbeitungsleistung beträgt ein Chip alle 6 s. Der Block benötigt hierfür 12 ku Strom.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Funktion entspricht der von TA2.\n"..
|
||||
"Die maximale Tiefe beträgt 40 Meter. Der Steinbrecher benötigt 12 ku Strom.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Funktion entspricht der von TA2.\n"..
|
||||
"Die Verarbeitungsleistung beträgt 2 Items alle 4 s. Der Block benötigt 4 ku Strom.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Funktion entspricht der von TA2.\n"..
|
||||
"Auch die Wahrscheinlichkeit ist wie bei TA2. Der Block benötigt auch 3 ku Strom.\n"..
|
||||
"Aber im Gegensatz zu TA2 kann beim TA3 Block bspw. der Status abgefragt werden (Controller)\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Funktion entspricht der von TA2.\n"..
|
||||
"Die Verarbeitungsleistung beträgt 2 Items alle 4 s. Der Block benötigt 6 ku Strom.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Injektor ist ein TA3 Schieber mit speziellen Eigenschaften. Er besitzt ein Menü zur Konfiguration. Hier können bis zu 8 Items konfiguriert werden. Er entnimmt nur diese Items einer Kiste um sie an Maschinen mit Rezepturen weiterzugeben (Autocrafter\\, Industrieofen und Elektronikfabrik).\n"..
|
||||
"\n"..
|
||||
"Beim Weitergeben wird in der Zielmaschine pro Item nur eine Position im Inventar genutzt. Sind bspw. nur die ersten drei Einträge im Injektor konfiguriert\\, so werden auch nur die ersten drei Speicherplätze im Inventar der Maschine belegt. Damit wir ein Überlauf im Inventar der Maschine verhindert.\n"..
|
||||
"\n"..
|
||||
"Der Injektor kann auch auf \"Ziehe-Modus\" umgeschaltet werden. Dann zieht er nur Items von den Positionen aus der Kiste\\, die in der Konfiguration des Injektors definiert sind. Hier müssen also Item-Typ und Position überein stimmen. Damit können geziehlt Speicherplätze im Inventar einer Kiste geleert werden.\n"..
|
||||
"\n"..
|
||||
"Die Verarbeitungsleistung beträgt bis zu 8 mal ein Item alle 4 Sekunden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"",
|
||||
"Das Techage Info Tool (Schraubenschlüssel) hat verschiedene Funktionen. Er zeigt die Uhrzeit\\, die Position\\, die Temperatur und das Biome an\\, wenn auf einen unbekannten Block geklickt wird.\n"..
|
||||
"Wird auf einen TechAge Block mit Kommandoschnittstelle geklickt\\, werden alle verfügbaren Daten abgerufen (siehe auch \"Logik-/Schalt-Blöcke\").\n"..
|
||||
"\n"..
|
||||
"Mit Shift+Rechtsklick kann bei einigen Blöcken ein erweitertes Menü geöffnet werden. Hier lassen sich je nach Block weitere Daten abrufen oder spezielle Einstellungen vornehmen. Bei einem Generator kann bspw. die Ladekurve/abschaltung programmiert werden. \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit dem Programmer können Blocknummern mit einem Rechtsklick von mehreren Blöcken eingesammelt und mit einem Linksklick in einen Block wie Taster/Schalter geschrieben werden.\n"..
|
||||
"Wird in die Luft geklickt\\, wird der interne Speicher gelöscht.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Kelle dient zum Verputzen von Stromkabel. Siehe dazu \"TA Stromkabel\".\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Mit diesem Werkzeug lassen sich die Bohrgestängezange Blöcke wieder entfernen\\, wenn dort bspw. ein Tunnel durch soll.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Techage Schraubendreher dient als Ersatz für den normalen Schraubendreher. Es besitzt folgende Funktionen:\n"..
|
||||
"\n"..
|
||||
" - Linksklick: Den Block nach links drehen\n"..
|
||||
" - Rechtsklick: Die sichtbare Seite des Blockes nach oben drehen\n"..
|
||||
" - Shift+Linksklick: Ausrichtung des angeklickten Blockes speichern\n"..
|
||||
" - Shift+Rechtsklick: Die gespeicherte Ausrichtung auf den angeklickten Block anwenden\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Das TechAge Montagewerkzeug dient zum Entfernen und wieder Setzen von Techage Blöcken\\, ohne dass diese Blöcke ihre Blocknummer verlieren\\, bzw. beim Setzen eine neue Nummer zugeteilt bekommen. Dies ist bspw. bei Steinbrechern hilfreich\\, da diese oft umgesetzt werden müssen.\n"..
|
||||
"\n"..
|
||||
" - Linke Taste: Entfernen eines Blocks\n"..
|
||||
" - Rechte Taste: Setzen eines Blocks\n"..
|
||||
"\n"..
|
||||
"Der Block\\, der zuvor mit dem Montagewerkzeug entfernt wurde und wieder gesetzt werden soll\\, muss sich im Spieler-Inventar ganz links befinden.\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_distiller",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
931
doc/manual_ta3_EN.lua
Normal file
931
doc/manual_ta3_EN.lua
Normal file
@ -0,0 +1,931 @@
|
||||
return {
|
||||
titles = {
|
||||
"1,TA3: Oil Age",
|
||||
"2,Coal-fired Power Station / Oil-fired Power Station",
|
||||
"3,TA3 power station firebox",
|
||||
"3,TA3 Power Station Oil Burner",
|
||||
"3,TA3 boiler base / top",
|
||||
"3,TA3 turbine",
|
||||
"3,TA3 generator",
|
||||
"3,TA3 cooler",
|
||||
"2,Electrical current",
|
||||
"3,Importance of storage systems",
|
||||
"3,TA Electric Cable",
|
||||
"3,TA Electric Junction Box",
|
||||
"3,TA Power Line",
|
||||
"3,TA Power Pole",
|
||||
"3,TA Power Pole Top",
|
||||
"3,TA Power Pole Top 2",
|
||||
"3,TA Power Switch",
|
||||
"3,TA Power Switch Small",
|
||||
"3,TA Power Switch Box",
|
||||
"3,TA3 Small Power Generator",
|
||||
"3,TA3 Accu Block",
|
||||
"3,TA3 Power Terminal",
|
||||
"3,TA3 Electric Motor",
|
||||
"2,TA3 Industrial Furnace",
|
||||
"3,TA3 Furnace Oil Burner",
|
||||
"3,TA3 Furnace Top",
|
||||
"3,TA3 Booster",
|
||||
"2,Liquids",
|
||||
"3,TA3 Tank",
|
||||
"3,TA3 Pump",
|
||||
"3,TA Liquid Filler",
|
||||
"3,TA4 Pipe",
|
||||
"3,TA3 Pipe Wall Entry Blocks",
|
||||
"3,TA Valve",
|
||||
"2,Oil Production",
|
||||
"3,TA3 Oil Explorer",
|
||||
"3,TA3 Oil Drill Box",
|
||||
"3,TA3 Oil Pumpjack",
|
||||
"3,TA3 Drill Pipe",
|
||||
"3,Oil tank",
|
||||
"2,Oil Transportation",
|
||||
"3,Oil transportation by Tank Carts",
|
||||
"3,Oil transportation with barrels over Minecarts",
|
||||
"3,Tank Cart",
|
||||
"3,Chest Cart",
|
||||
"2,Oil Processing",
|
||||
"3,Distillation Tower",
|
||||
"4,Reboiler",
|
||||
"2,Logic / Switching Blocks",
|
||||
"3,TA3 Button / Switch",
|
||||
"3,TA3 Command Converter",
|
||||
"3,TA3 Flip-Flop",
|
||||
"3,TA3 Logic Block",
|
||||
"3,TA3 Repeater",
|
||||
"3,TA3 Sequencer",
|
||||
"3,TA3 Timer",
|
||||
"3,TA3 Terminal",
|
||||
"3,TechAge Color Lamp",
|
||||
"3,Door/Gate Blocks",
|
||||
"3,TA3 Door Controller",
|
||||
"3,TA3 Door Controller II",
|
||||
"3,TA3 Sound Block",
|
||||
"3,TA3 Mesecons Converter",
|
||||
"2,Detectors",
|
||||
"3,TA3 Detector",
|
||||
"3,TA3 Cart Detector",
|
||||
"3,TA3 Node Detector",
|
||||
"3,TA3 Player Detector",
|
||||
"3,TA3 Light Detector",
|
||||
"2,TA3 Machines",
|
||||
"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 Injector",
|
||||
"2,Tools",
|
||||
"3,Techage Info Tool",
|
||||
"3,TechAge Programmer",
|
||||
"3,TechAge Trowel / Trowel",
|
||||
"3,TA3 drill pipe wrench",
|
||||
"3,Techage Screwdriver",
|
||||
"3,TechAge Assembly Tool",
|
||||
},
|
||||
texts = {
|
||||
"At TA3 it is important to replace the steam-powered machines with more powerful and electric-powered machines.\n"..
|
||||
"\n"..
|
||||
"To do this\\, you have to build coal-fired power plants and generators. You will soon see that your electricity needs can only be met with oil-powered power plants. So you go looking for oil. Drilling derricks and oil pumps help them get the oil. Railways are used to transport oil to the power plants.\n"..
|
||||
"\n"..
|
||||
"The industrial age is at its peak.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The coal-fired power plant consists of several blocks and must be assembled as shown in the plan on the right. The blocks TA3 power station fire box\\, TA3 boiler top\\, TA3 boiler base\\, TA3 turbine\\, TA3 generator and TA3 cooler are required.\n"..
|
||||
"\n"..
|
||||
"The boiler must be filled with water. Fill up to 10 buckets of water in the boiler.\n"..
|
||||
"The fire box must be filled with coal or charcoal.\n"..
|
||||
"When the water is hot\\, the generator can then be started.\n"..
|
||||
"\n"..
|
||||
"Alternatively\\, the power plant can be equipped with an oil burner and then operated with oil.\n"..
|
||||
"The oil can be refilled using a pump and oil pipe.\n"..
|
||||
"\n"..
|
||||
"The power plant delivers an output of 80 ku.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Part of the power plant.\n"..
|
||||
"The fire box must be filled with coal or charcoal. The burning time depends on the power that is requested by the power plant. Coal burns for 20 s and charcoal for 60 s under full load. Correspondingly longer under partial load (50% load = double time).\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Part of the power plant.\n"..
|
||||
"\n"..
|
||||
"The oil burner can be filled with crude oil\\, fuel oil\\, naphtha or gasoline. The burning time depends on the power that is requested by the power plant. Under full load\\, crude oil burns 15 s\\, fuel oil 20 s\\, naphtha 22 s and gasoline 25 s.\n"..
|
||||
"\n"..
|
||||
"Correspondingly longer under partial load (50% load = double time).\n"..
|
||||
"\n"..
|
||||
"The oil burner can only hold 50 units of fuel. An additional oil tank and an oil pump are therefore advisable.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Part of the power plant. Must be filled with water. If there is no more water or the temperature drops too low\\, the power plant switches off.\n"..
|
||||
"\n"..
|
||||
"The water consumption of the TA3 boiler is much lower than that of the steam engine due to the closed steam circuit.\n"..
|
||||
"With the steam engine\\, some water is lost as steam with each piston stroke.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The turbine is part of the power plant. It must be placed next to the generator and connected to the boiler and cooler via steam pipes as shown in the plan.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"The generator is used to generate electricity. It must be connected to the machines via power cables and junction boxes.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Used to cool the hot steam from the turbine. Must be connected to the boiler and turbine via steam pipes as shown in the plan.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"In TA3 (and TA4) the machines are powered by electricity. To do this\\, machines\\, storage systems\\, and generators must be connected with power cables.\n"..
|
||||
"TA3 has 2 types of power cables:\n"..
|
||||
"\n"..
|
||||
" - Insulated cables (TA power cables) for local wiring in the floor or in buildings. These cables can be hidden in the wall or in the floor (can be \"plastered\" with the trowel).\n"..
|
||||
" - Overland lines (TA power line) for outdoor cabling over long distances. These cables are protected and cannot be removed by other players.\n"..
|
||||
"\n"..
|
||||
"Several consumers\\, storage systems\\, and generators can be operated together in a power network. Networks can be set up with the help of the junction boxes.\n"..
|
||||
"If too little electricity is provided\\, consumers run out.\n"..
|
||||
"In this context\\, it is also important that the functionality of Forceload blocks is understood\\, because generators\\, for example\\, only supply electricity when the corresponding map block is loaded. This can be enforced with a forceload block.\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",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
942
doc/manual_ta3_pt-BR.lua
Normal file
942
doc/manual_ta3_pt-BR.lua
Normal 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",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
1052
doc/manual_ta4_DE.lua
Normal file
1052
doc/manual_ta4_DE.lua
Normal file
File diff suppressed because it is too large
Load Diff
1054
doc/manual_ta4_EN.lua
Normal file
1054
doc/manual_ta4_EN.lua
Normal file
File diff suppressed because it is too large
Load Diff
1054
doc/manual_ta4_pt-BR.lua
Normal file
1054
doc/manual_ta4_pt-BR.lua
Normal file
File diff suppressed because it is too large
Load Diff
219
doc/manual_ta5_DE.lua
Normal file
219
doc/manual_ta5_DE.lua
Normal file
@ -0,0 +1,219 @@
|
||||
return {
|
||||
titles = {
|
||||
"1,TA5: Zukunft",
|
||||
"2,Energiequellen",
|
||||
"3,TA5 Fusionsreaktor",
|
||||
"4,TA5 Fusionreaktor Magnet",
|
||||
"4,TA5 Pumpe",
|
||||
"4,TA5 Wärmetauscher",
|
||||
"4,TA5 Fusionreaktor Controller",
|
||||
"4,TA5 Fusionreaktor Hülle",
|
||||
"4,TA5 Fusionreaktor Kern",
|
||||
"2,Energiespeicher",
|
||||
"3,TA5 Hybrid-Speicher (geplant)",
|
||||
"2,Logik Blöcke",
|
||||
"2,Transport und Verkehr",
|
||||
"3,TA5 Flug Controller",
|
||||
"3,TA5 Hyperloop Kiste / TA5 Hyperloop Chest",
|
||||
"3,TA5 Hyperloop Tank / TA5 Hyperloop Tank",
|
||||
"3,TA5-Raumgleiter (geplant)",
|
||||
"2,Teleport Blöcke",
|
||||
"3,TA5 Teleport Block Gegenstände / TA5 Teleport Block Items",
|
||||
"3,TA5 Teleport Block Flüssigkeiten / TA5 Teleport Block Liquids",
|
||||
"3,Hyperloop Teleport Blöcke (geplant)",
|
||||
"2,Weitere TA5 Blöcke/Items",
|
||||
"3,TA5 Container (geplant)",
|
||||
"3,TA5 KI Chip / TA5 AI Chip",
|
||||
"3,TA5 KI Chip II / TA5 AI Chip II",
|
||||
},
|
||||
texts = {
|
||||
"Maschinen zur Überwindung von Raum und Zeit\\, neue Energiequellen und andere Errungenschaften prägen dein Leben. \n"..
|
||||
"\n"..
|
||||
"Für die Herstellung und Nutzung von TA5 Maschinen und Blöcken sind Erfahrungspunkte (experience points) notwendig. Diese können nur über den Teilchenbeschleuniger aus TA4 erarbeitet werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"",
|
||||
"Kernfusion bedeutet das Verschmelzen zweier Atomkerne. Dabei können\\, je nach Reaktion\\, große Mengen von Energie freigesetzt werden. Kernfusionen\\, bei denen Energie frei wird\\, laufen in Form von Kettenreaktionen ab. Sie sind die Quelle der Energie der Sterne\\, zum Beispiel auch unserer Sonne. Ein Fusionsreaktor wandelt die Energie\\, die bei einer kontrollierten Kernfusion frei wird\\, in elektrischen Strom um.\n"..
|
||||
"\n"..
|
||||
"*Wie funktionieren ein Fusionsreaktor?*\n"..
|
||||
"\n"..
|
||||
"Ein Fusionsreaktor funktioniert nach dem klassischen Prinzip eines Wärmekraftwerks: Wasser wird erhitzt und treibt eine Dampfturbine an\\, deren Bewegungsenergie von einem Generator in Strom gewandelt wird.\n"..
|
||||
"\n"..
|
||||
"Ein Fusionskraftwerk benötigt zunächst eine hohe Menge an Energie\\, da ein Plasma erzeugt werden muss. „Plasma“ nennt man den vierten Zustand von Stoffen\\, nach fest\\, flüssig und gasförmig. Dafür wird viel Strom benötigt. Erst durch diese extreme Energiekonzentration zündet die Fusionsreaktion und mit der abgegebenen Wärme wird über den Wärmetauscher Strom erzeugt. Der Generator liefert dann 800 ku an Strom.\n"..
|
||||
"\n"..
|
||||
"Der Plan rechts zeigt einen Schnitt durch den Fusionsreaktor.\n"..
|
||||
"\n"..
|
||||
"Für den Betrieb des Fusionsreaktors werden 60 Erfahrungspunkte benötigt. Der Fusionsreaktur muss komplett in einem Forceload Block Bereich aufgebaut werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Für den Aufbau des Fusionsreaktor werden insgesamt 60 TA5 Fusionreaktor Magnete benötigt. Diese bilden den Ring\\, in dem sich das Plasma bildet. Der TA5 Fusionsreaktor Magnete benötigt Strom und hat zwei Anschlüsse für die Kühlung.\n"..
|
||||
"\n"..
|
||||
"Es gibt zwei Typen von Magneten\\, so dass auch alle Seiten des Magnets\\, die zum Plasmaring zeigen\\, mit einem Hitzeschild geschützt werden können.\n"..
|
||||
"\n"..
|
||||
"Bei den Eckmagneten auf der Innenseite des Rings ist jeweils eine Anschlussseite verdeckt (Strom oder Kühlung) und kann daher nicht angeschlossen werden. Dies ist technisch nicht machbar und hat daher keinen Einfluß auf die Funktion des Fusionsreaktor. \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Pumpe wird benötigt\\, um den Kühlkreislauf mit Isobutan zu füllen. Es werden ca. 350 Einheiten Isobutan benötigt.\n"..
|
||||
"\n"..
|
||||
"Hinweis: Die TA5 Pumpe kann nur zum Füllen des Kühlkreislaufs genutzt werden\\, ein Abpumpen des Kühlmittels ist nicht möglich. Daher sollte die Pumpe erst eingeschaltet werden\\, wenn die Magnete korrekt platziert und alle Strom- und Kühlleitungen angeschlossen sind.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der TA5 Wärmetauscher wird benötigt\\, um die im Fusionsreaktor erzeugte Hitze zuerst in Dampf und dann in Strom umzuwandeln. Der Wärmetauscher selbst benötigt dazu 5 ku Strom. Der Aufbau gleicht dem Wärmetauscher des Energiespeichers aus TA4.\n"..
|
||||
"\n"..
|
||||
"Hinweis: Der TA5 Wärmetauscher hat zwei Anschlüsse (blau und grün) für den Kühlkreislauf. Über die grünen und blauen Röhren müssen der Wärmetauscher und alle Magnete zu einem Kühlkreislauf verbunden werden.\n"..
|
||||
"\n"..
|
||||
"Über den Start-Button des Wärmetauschers kann der Kühlkreislauf auf Vollständigkeit geprüft werden\\, auch wenn noch kein Kühlmittel eingefüllt wurde.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Über den TA5 Fusionreaktor Controller wird der Fusionreaktors eingeschaltet. Dabei muss zuerst die Kühlung/Wärmetauscher und dann der Controller eingeschaltet werden. Es dauert ca. 2 min\\, bis der Reaktor in Gang kommt und Strom liefert. Der Fusionreaktor und damit der Controller benötigt 400 ku an Strom\\, um das Plasma aufrecht zu erhalten.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der komplette Reaktor muss mit einer Hülle umgeben werden\\, die den enormen Druck\\, den die Magnete auf das Plasma ausüben\\, abfängt und die Umgebung vor Strahlung schützt. Ohne diese Hülle kann der Reaktor nicht gestartet werden. Mit der TechAge Kelle können auch Stromkabel und Kühlleitungen des Fusionreaktors in die Hülle integriert werden.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Kern muss in der Mitte des Reaktors sitzen. Siehe Abbildung unter \"TA5 Fusionsreaktor\". Auch hierfür wird die TechAge Kelle benötigt.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"Der TA5 Flug Controller ist ähnlich zum TA4 Move Controller. Im Gegensatz zum TA4 Move Controller können hier mehrere Bewegungen zu einer Flugstrecke kombiniert werden. Diese Flugstrecke kann im Eingabefeld über mehrere x\\,y\\,z Angaben definiert werden (eine Bewegung pro Zeile). Über \"Speichern\" wird die Flugstrecke geprüft und gespeichert. Bei einem Fehler wird eine Fehlermeldung ausgegeben.\n"..
|
||||
"\n"..
|
||||
"Mit der Taste \"Test\" wird die Flugstrecke mit den absoluten Koordinaten zur Überprüfung im Chat ausgegeben.\n"..
|
||||
"\n"..
|
||||
"Die maximale Distanz für die gesammte Flugstrecke beträgt 1500 m. Es können bis zu 32 Blöcke antrainiert werden.\n"..
|
||||
"\n"..
|
||||
"Die Nutzung des TA5 Flug Controllers benötigt 40 Erfahrungspunkte.\n"..
|
||||
"\n"..
|
||||
"*Teleport Mode*\n"..
|
||||
"\n"..
|
||||
"Wird der 'Teleport Mode' aktiviert (auf 'enable' gesetzt)\\, kann ein Spieler auch ohne Blöcke bewegt werden. Dazu muss die Startposition über die Taste \"Aufzeichnen\" konfiguriert werden. Es kann hier nur eine Position konfiguriert werden. Das Spieler\\, der bewegt werden soll\\, muss dazu auf dieser Position stehen. \n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die TA5 Hyperloop Kiste erlaubt den Transport von Gegenständen über ein Hyperloop Netzwerk.\n"..
|
||||
"\n"..
|
||||
"Die TA5 Hyperloop Kiste muss man dazu auf eine Hyperloop Junction stellen. Die Kiste besitzt ein spezielles Menü\\, mit dem man das Pairing von zwei Kisten durchführen kann. Dinge\\, die in der Kiste sind\\, werden zur Gegenstelle teleportiert. Die Kiste kann auch mit einem Schieber gefüllt/geleert werden.\n"..
|
||||
"\n"..
|
||||
"Für das Pairing musst du zuerst auf der einen Seite einen Namen für die Kiste eingeben\\, dann kannst du bei der anderen Kiste diesen Namen auswählen und so die beiden Blöcke verbinden.\n"..
|
||||
"\n"..
|
||||
"Die Nutzung der TA5 Hyperloop Kiste benötigt 15 Erfahrungspunkte.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der TA5 Hyperloop Tank erlaubt den Transport von Flüssigkeiten über ein Hyperloop Netzwerk.\n"..
|
||||
"\n"..
|
||||
"Den TA5 Hyperloop Tank muss man dazu auf eine Hyperloop Junction stellen. Der Tank besitzt ein spezielles Menü\\, mit dem man das Pairing von zwei Tanks durchführen kann. Flüssigkeiten\\, die in dem Tank sind\\, werden zur Gegenstelle teleportiert. Der Tank kann auch mit einer Pumpe gefüllt/geleert werden.\n"..
|
||||
"\n"..
|
||||
"Für das Pairing musst du zuerst auf der einen Seite einen Namen für den Tank eingeben\\, dann kannst du bei dem anderen Tank diesen Namen auswählen und so die beiden Blöcke verbinden.\n"..
|
||||
"\n"..
|
||||
"Die Nutzung des TA5 Hyperloop Tanks benötigt 15 Erfahrungspunkte.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Dank einem Spezialantrieb für Lichtgeschwindigkeit können mit dem Raumgleiter auch große Entfernungen sehr schnell überwunden werden.\n"..
|
||||
"\n",
|
||||
"Mit Teleport-Blöcken können Dinge zwischen zwei Teleport-Blöcken übertragen werden\\, ohne dass sich dazwischen eine Röhre oder Leitung befinden muss. Für das Pairing der Blöcke musst du zuerst auf der einen Seite einen Namen für den Block eingeben\\, dann kannst du bei dem anderen Block diesen Namen auswählen und so die beiden Blöcke verbinden. Das Pairung kann nur von einem Spieler durchgeführt werden (Spielername wird geprüft) und muss vor einem Server-Neustart abgeschlossen sein. Anderenfalls gehen die Pairing-Daten verloren.\n"..
|
||||
"\n"..
|
||||
"Der Plan rechts zeigt\\, wie die Blöcke genutzt werden können.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Diese Teleport-Blöcke erlauben die Übertragung von Gegenständen und ersetzen somit eine Röhre. Dabei können Entfernungen von bis zu 500 Blöcken überbrückt werden.\n"..
|
||||
"\n"..
|
||||
"Ein Teleport-Block benötigt 12 ku Strom.\n"..
|
||||
"\n"..
|
||||
"Für die Nutzung der Teleport-Blöcke werden 30 Erfahrungspunkte benötigt.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Diese Teleport-Blöcke erlauben die Übertragung von Flüssigkeiten und ersetzen somit eine gelbe Leitung. Dabei können Entfernungen von bis zu 500 Blöcken überbrückt werden.\n"..
|
||||
"\n"..
|
||||
"Ein Teleport-Block benötigt 12 ku Strom.\n"..
|
||||
"\n"..
|
||||
"Für die Nutzung der Teleport-Blöcke werden 30 Erfahrungspunkte benötigt.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Hyperloop Teleport Blöcke erlauben den Aufbau von Hyperloop Netzwerk ohne Hyperloop-Röhren.\n"..
|
||||
"\n"..
|
||||
"Die Nutzung der Hyperloop Teleport Blöcke benötigt 60 Erfahrungspunkte.\n"..
|
||||
"\n",
|
||||
"",
|
||||
"Der TA5 Container erlaubt Techage Anlagen ein- und an einer anderen Stelle wieder auszupacken.\n"..
|
||||
"\n"..
|
||||
"Für die Nutzung des TA5 Containers werden 80 Erfahrungspunkte benötigt.\n"..
|
||||
"\n",
|
||||
"Der TA5 KI Chip wird teilweise zur Herstellung von TA5 Blöcken benötigt. Der TA5 KI Chip kann nur auf der TA4 Elektronik Fab hergestellt werden. Dazu werden 10 Erfahrungspunkte benötigt.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der TA5 KI Chip II wird zur Herstellung des TA5 Fusionsreaktors benötigt. Der TA5 KI Chip II kann nur auf der TA4 Elektronik Fab hergestellt werden. Dazu werden 25 Erfahrungspunkte benötigt.\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",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
214
doc/manual_ta5_EN.lua
Normal file
214
doc/manual_ta5_EN.lua
Normal file
@ -0,0 +1,214 @@
|
||||
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",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
214
doc/manual_ta5_pt-BR.lua
Normal file
214
doc/manual_ta5_pt-BR.lua
Normal 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",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
117
doc/plans.lua
117
doc/plans.lua
@ -12,7 +12,7 @@
|
||||
|
||||
]]--
|
||||
|
||||
techage.ConstructionPlans = {}
|
||||
local plans = {}
|
||||
|
||||
|
||||
local IMG_1 = {"", "techage_ta1.png"}
|
||||
@ -26,6 +26,7 @@ local IMG43 = {"", "techage_reactor_inv.png"}
|
||||
local IMG44 = {"", "techage_ta4_filter.png"}
|
||||
local IMG45 = {"10x10", "techage_collider_plan.png"}
|
||||
local IMG46 = {"5x4", "techage_fusion_reactor.png"}
|
||||
local IMG47 = {"5x4", "techage_collider_plan2.png"}
|
||||
|
||||
local TOP_V = {"top_view", ""}
|
||||
local SIDEV = {"side_view", ""}
|
||||
@ -38,7 +39,7 @@ local DDIRT = {"default_dirt.png", "default:dirt"}
|
||||
local DWOOD = {"default_wood.png" , "default:wood"}
|
||||
local LIGTR = {"techage_lighter.png", "techage:lighter"}
|
||||
|
||||
techage.ConstructionPlans["coalpile"] = {
|
||||
plans["coalpile"] = {
|
||||
{false, false, SIDEV, false, false, false, false, false, TOP_V, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false},
|
||||
{DDIRT, DDIRT, DDIRT, DDIRT, DDIRT, false, DDIRT, DDIRT, DDIRT, DDIRT, DDIRT},
|
||||
@ -57,7 +58,7 @@ local CCOAL = {"techage_charcoal.png", "techage:charcoal"}
|
||||
local MEPOT = {"default_cobble.png^techage_meltingpot.png", "techage:meltingpot"}
|
||||
local FLAME = {"techage_flame.png", nil}
|
||||
|
||||
techage.ConstructionPlans["coalburner"] = {
|
||||
plans["coalburner"] = {
|
||||
{false, false, SIDEV, false, false, false, false},
|
||||
{false, false, MEPOT, false, false, IMG_1, false},
|
||||
{false, false, FLAME, false},
|
||||
@ -76,7 +77,7 @@ local CHEST = {"default_chest_lock.png", "default:chest_locked"}
|
||||
local HOPPR = {"techage_hopper.png^[transformFX", "minecart:hopper"}
|
||||
local SIEVE = {"techage_sieve_sieve_ta1.png", "techage:sieve3"}
|
||||
|
||||
techage.ConstructionPlans["hoppersieve"] = {
|
||||
plans["hoppersieve"] = {
|
||||
{false, false, false, false, false},
|
||||
{false, false, false, false, false},
|
||||
{false, CHEST, false, false, false},
|
||||
@ -110,7 +111,7 @@ local BEARG = {"default_stone_brick.png^techage_axle_bearing_front.png", "techag
|
||||
local BRICK = {"default_stone_brick.png", "default:stonebrick"}
|
||||
|
||||
|
||||
techage.ConstructionPlans["watermill1"] = {
|
||||
plans["watermill1"] = {
|
||||
{false, false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, false, SLUC2, false, false, false, false, false, false, false, false, false},
|
||||
{WATR4, WATR4, SLUC1, WMILL, WMILL, WMILL, WMILL, WMILL, WATR3, false, false, false},
|
||||
@ -131,7 +132,7 @@ local MILLB = {"default_stone_brick.png", "techage:ta1_mill_base"}
|
||||
local FURNE = {"default_furnace_front.png", "default:furnace"}
|
||||
local HOPER = {"techage_hopper.png", "minecart:hopper"}
|
||||
|
||||
techage.ConstructionPlans["watermill2"] = {
|
||||
plans["watermill2"] = {
|
||||
{false, false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false, false},
|
||||
@ -157,7 +158,7 @@ local FIBOX = {"techage_firebox.png^techage_appl_firehole.png^techage_frame_ta2.
|
||||
local CYLIN = {"techage_filling_ta2.png^techage_cylinder.png^techage_frame_ta2.png", "techage:cylinder"}
|
||||
local FLYWH = {"techage_filling_ta2.png^techage_frame_ta2.png^techage_flywheel.png^[transformFX]", "techage:flywheel"}
|
||||
|
||||
techage.ConstructionPlans["steamengine"] = {
|
||||
plans["steamengine"] = {
|
||||
{false, false, false, false, false, IMG_2, false},
|
||||
{false, false, false, false, false, false, false},
|
||||
{false, PK000, PI000, PK270, false, false, false},
|
||||
@ -175,8 +176,9 @@ local AXL90 = {"techage_axle.png^[transformR90", "techage:axle"}
|
||||
local WINCH = {"techage_filling_ta2.png^techage_appl_winch.png^techage_frame_ta2.png", "techage:ta2_winch"}
|
||||
local ROPE_ = {"techage_rope_inv.png", "techage:ta2_rope"}
|
||||
local WCHST = {"techage_filling_ta2.png^techage_frame_ta2.png^techage_appl_chest_back_ta3.png^techage_weight_side.png", "techage:ta2_weight_chest"}
|
||||
local CLTCH = {"techage_filling_ta2.png^techage_appl_clutch.png^techage_frame_ta2.png", "techage:ta2_clutch_off"}
|
||||
|
||||
techage.ConstructionPlans["ta2_storage"] = {
|
||||
plans["ta2_storage"] = {
|
||||
{false, false, false, GRBOX, WINCH, false, SIDEV},
|
||||
{false, false, false, AXL90, ROPE_, false, false},
|
||||
{false, false, false, AXL90, ROPE_, false, false},
|
||||
@ -186,7 +188,7 @@ techage.ConstructionPlans["ta2_storage"] = {
|
||||
{false, false, false, AXL90, ROPE_, false, false},
|
||||
{false, false, false, AXL90, WCHST, false, false},
|
||||
{false, false, false, AXL90, false, false, false},
|
||||
{AXL00, AXL00, AXL00, GRBOX, false, false, false},
|
||||
{AXL00, CLTCH, AXL00, GRBOX, false, false, false},
|
||||
}
|
||||
|
||||
--
|
||||
@ -198,7 +200,7 @@ local GRIND = {"techage_filling_ta2.png^techage_appl_grinder2.png^techage_frame_
|
||||
local DISTR = {"techage_filling_ta2.png^techage_frame_ta2.png^techage_appl_distri_blue.png", "techage:ta2_distributor_pas"}
|
||||
local SIEV2 = {"techage_filling_ta2.png^techage_appl_sieve.png^techage_frame_ta2.png", "techage:ta2_gravelsieve_pas"}
|
||||
|
||||
techage.ConstructionPlans["itemtransport"] = {
|
||||
plans["itemtransport"] = {
|
||||
{false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false},
|
||||
{false},
|
||||
@ -217,7 +219,7 @@ local TK090 = {"techage_tube_knee.png^[transformR90", "techage:tubeS"} -- '7'
|
||||
local TK180 = {"techage_tube_knee.png^[transformR180", "techage:tubeS"}
|
||||
local TK270 = {"techage_tube_knee.png^[transformR270", "techage:tubeS"}
|
||||
|
||||
techage.ConstructionPlans["gravelrinser"] = {
|
||||
plans["gravelrinser"] = {
|
||||
{false, false, false, SIDEV, false, false, false, false},
|
||||
{false, GLASS, WATER, GLASS, GLASS, GLASS, GLASS, GLASS},
|
||||
{false, DDIRT, DDIRT, TK000, RINSR, TK270, HOPPR, CHEST},
|
||||
@ -239,7 +241,7 @@ local GENE3 = {"techage_filling_ta3.png^techage_frame_ta3.png^techage_appl_gener
|
||||
local COOL3 = {"techage_filling_ta3.png^techage_frame_ta3.png^techage_cooler.png", "techage:cooler"}
|
||||
local PK180 = {"techage_steam_knee.png^[transformR180", "techage:steam_pipeS"}
|
||||
|
||||
techage.ConstructionPlans["coalpowerstation"] = {
|
||||
plans["coalpowerstation"] = {
|
||||
{false, false, false, false, false, false, false, false},
|
||||
{false, PK000, PI000, PI000, PI000, PI000, PI000, PK270},
|
||||
{false, PI090, BOIL3, PI000, PK270, PK000, COOL3, PK180},
|
||||
@ -259,7 +261,7 @@ local Boost = {"techage_filling_ta3.png^techage_appl_compressor.png^[transformFX
|
||||
local Fibox = {"techage_concrete.png^techage_appl_firehole.png^techage_frame_ta3.png", "techage:furnace_firebox"}
|
||||
local Furnc = {"techage_concrete.png^techage_appl_furnace.png^techage_frame_ta3.png", "techage:ta3_furnace_pas"}
|
||||
|
||||
techage.ConstructionPlans["ta3_furnace"] = {
|
||||
plans["ta3_furnace"] = {
|
||||
{false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false},
|
||||
{false, Tubes, PushR, Tubes, Furnc, Tubes, PushR, Tubes},
|
||||
@ -280,7 +282,7 @@ local PN090 = {"techage_gaspipe_knee.png^[transformR90", "techage:ta4_pipeS"}
|
||||
local PN180 = {"techage_gaspipe_knee.png^[transformR180", "techage:ta4_pipeS"} -- J
|
||||
local PN270 = {"techage_gaspipe_knee.png^[transformR270", "techage:ta4_pipeS"} -- 7
|
||||
|
||||
techage.ConstructionPlans["ta3_tank"] = {
|
||||
plans["ta3_tank"] = {
|
||||
{false, false, false, false, SIDEV, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false},
|
||||
{false, Tubes, PushR, Tubes, Fillr, Tubes, PushR, Tubes, false, false},
|
||||
@ -302,7 +304,7 @@ local RAILH = {"carts_rail_straight.png^[transformR90", "carts:rail"}
|
||||
local CRAIL = {"carts_rail_curved.png^[transformR90", "carts:rail"}
|
||||
local BUFFR = {"default_junglewood.png^minecart_buffer.png", "minecart:buffer"}
|
||||
|
||||
techage.ConstructionPlans["ta3_loading"] = {
|
||||
plans["ta3_loading"] = {
|
||||
{false, false, PIPEH, Pump, PIPEH, PN270, SIDEV, false, false, false, false},
|
||||
{false, false, false, false, false, PIPEV, false, false, false, false, false},
|
||||
{false, MCART, false, false, false, PN090, TANK3, false, false, false, false},
|
||||
@ -325,7 +327,7 @@ local DIST1 = {"techage_distiller_inv.png", "techage:ta3_distiller1"}
|
||||
local DBASE = {"techage_concrete.png", "techage:ta3_distiller_base"}
|
||||
local REBIO = {"techage_filling_ta3.png^techage_appl_reboiler.png^techage_frame_ta3.png", "techage:ta3_reboiler"}
|
||||
|
||||
techage.ConstructionPlans["ta3_distiller"] = {
|
||||
plans["ta3_distiller"] = {
|
||||
{false, false, false, false, false, SIDEV, false, PN000, PIPEH, TANK3, false},
|
||||
{false, IMG31, false, false, false, false, false, DIST4, false, false, false},
|
||||
{false, false, false, false, false, false, false, DIST3, PIPEH, TANK3, false},
|
||||
@ -341,22 +343,23 @@ techage.ConstructionPlans["ta3_distiller"] = {
|
||||
--
|
||||
-- Chemical Reactor
|
||||
--
|
||||
local RBASE = {"techage_concrete.png", "techage:ta4_reactor_stand"}
|
||||
local RBASE = {"techage_concrete.png", "techage:ta4_reactor_base"}
|
||||
local STAND = {"techage_reactor_stand_side.png", "techage:ta4_reactor_stand"}
|
||||
local REACT = {"techage_reactor_plan.png", "techage:ta4_reactor"}
|
||||
local FILLR = {"techage_reactor_filler_plan.png", "techage:ta4_reactor_fillerpipe"}
|
||||
local DOSER = {"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_pump_up.png", "techage:ta4_doser"}
|
||||
local SILO = {"techage_filling_ta3.png^techage_frame_ta3.png^techage_appl_silo.png", "techage:ta3_silo"}
|
||||
local SILO4 = {"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_silo.png", "techage:ta4_silo"}
|
||||
local TANK4 = {"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_tank.png", "techage:ta4_tank"}
|
||||
|
||||
techage.ConstructionPlans["ta4_reactor"] = {
|
||||
plans["ta4_reactor"] = {
|
||||
{false, false, false, false, false, false, SIDEV, false, false, false, false},
|
||||
{false, IMG43, false, false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, PN000, PIPEH, PIPEH, PN270, false, false, false},
|
||||
{false, false, false, false, PIPEV, false, false, FILLR, false, false, false},
|
||||
{false, false, false, false, PIPEV, false, false, REACT, false, false, false},
|
||||
{false, false, false, false, PIPEV, false, false, STAND, PIPEH, PIPEH, SILO},
|
||||
{false, TANK3, PIPEH, PIPEH, DOSER, PN270, false, RBASE, PIPEH, PIPEH, TANK3},
|
||||
{false, SILO, PIPEH, PIPEH, PIPEH, PN180, false, false, false, false, false},
|
||||
{false, false, false, false, PIPEV, false, false, STAND, PIPEH, PIPEH, SILO4},
|
||||
{false, TANK4, PIPEH, PIPEH, DOSER, PN270, false, RBASE, PIPEH, PIPEH, TANK4},
|
||||
{false, SILO4, PIPEH, PIPEH, PIPEH, PN180, false, false, false, false, false},
|
||||
}
|
||||
|
||||
--
|
||||
@ -367,7 +370,7 @@ local NCLLE = {"techage_rotor.png", "techage:ta4_wind_turbine_nacelle"}
|
||||
local PILLR = {"techage:pillar", "techage:pillar"}
|
||||
local SLAMP = {"techage:rotor_signal_lamp_off", "techage:rotor_signal_lamp_off"}
|
||||
|
||||
techage.ConstructionPlans["ta4_windturbine"] = {
|
||||
plans["ta4_windturbine"] = {
|
||||
{false, false, false, SIDEV, false, false, false},
|
||||
{false, false, false, SLAMP, false, false, IMG_4, false},
|
||||
{false, false, false, ROTOR, NCLLE, false, false},
|
||||
@ -393,7 +396,7 @@ local GRAVL = {"default_gravel.png", "default:gravel"}
|
||||
local INLET = {"basic_materials_concrete_block.png^techage_gaspipe.png^[transformR90", "techage:ta4_pipe_inlet"}
|
||||
local OGLAS = {"default_obsidian_glass.png", "default:obsidian_glass"}
|
||||
|
||||
techage.ConstructionPlans["ta4_storagesystem"] = {
|
||||
plans["ta4_storagesystem"] = {
|
||||
{false, false, TOP_V, false, false, false, false, SIDEV, false, IMG41, false},
|
||||
{false, false, PN000, PIPEH, PIPEH, PIPEH, PN270, false, false, false, false},
|
||||
{CONCR, CONCR, INLET, CONCR, CONCR, false, PIPEV, false, false, false, false},
|
||||
@ -413,7 +416,7 @@ local RCBLE = {"techage_ta4_cable_inv.png", "techage:ta4_power_cableS"}
|
||||
local CARRI = {"techage:ta4_solar_carrier", "techage:ta4_solar_carrier"}
|
||||
local INVAC = {"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_inverter.png", "techage:ta4_solar_inverter"}
|
||||
|
||||
techage.ConstructionPlans["ta4_solarplant"] = {
|
||||
plans["ta4_solarplant"] = {
|
||||
{false, false, false, false, false, false, false, false, false, IMG42, false},
|
||||
{false, false, TOP_V, false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false},
|
||||
@ -432,7 +435,7 @@ local PWETR = {"basic_materials_concrete_block.png^techage_gaspipe.png", "techag
|
||||
local TANK4 = {"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_tank.png", "techage:ta4_tank"}
|
||||
local LFFIL = {"basic_materials_concrete_block.png^techage_gaspipe_hole.png", "techage:ta4_liquid_filter_filler"}
|
||||
|
||||
techage.ConstructionPlans["ta4_liquid_filter_base"] = {
|
||||
plans["ta4_liquid_filter_base"] = {
|
||||
{false, false, false, false, false, false, false, false, IMG44, false},
|
||||
{false, false, false, TOP_V, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false},
|
||||
@ -443,7 +446,7 @@ techage.ConstructionPlans["ta4_liquid_filter_base"] = {
|
||||
{false, CONCR, CONCR, CONCR, CONCR, CONCR},
|
||||
}
|
||||
|
||||
techage.ConstructionPlans["ta4_liquid_filter_gravel"] = {
|
||||
plans["ta4_liquid_filter_gravel"] = {
|
||||
{false, false, false, false, false, false, false, false, IMG44, false},
|
||||
{false, false, false, TOP_V, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false},
|
||||
@ -454,7 +457,7 @@ techage.ConstructionPlans["ta4_liquid_filter_gravel"] = {
|
||||
{false, CONCR, OGLAS, OGLAS, OGLAS, CONCR},
|
||||
}
|
||||
|
||||
techage.ConstructionPlans["ta4_liquid_filter_top"] = {
|
||||
plans["ta4_liquid_filter_top"] = {
|
||||
{false, false, false, false, false, false, false, false, IMG44, false},
|
||||
{false, false, false, TOP_V, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false},
|
||||
@ -471,7 +474,7 @@ techage.ConstructionPlans["ta4_liquid_filter_top"] = {
|
||||
local STEEL = {"default_steel_block.png", "techage:ta4_colliderblock"}
|
||||
local COOL4 = {"techage_filling_ta4.png^techage_frame_ta4.png^techage_cooler.png", "techage:ta4_collider_cooler"}
|
||||
|
||||
techage.ConstructionPlans["techage_collider_plan"] = {
|
||||
plans["techage_collider_plan"] = {
|
||||
{IMG45, false, false, false},
|
||||
{false, false, false, false},
|
||||
{false, false, false, false},
|
||||
@ -480,13 +483,22 @@ techage.ConstructionPlans["techage_collider_plan"] = {
|
||||
{false, false, false, false},
|
||||
}
|
||||
|
||||
plans["techage_collider_plan2"] = {
|
||||
{false, false, false, false},
|
||||
{false, false, false, false},
|
||||
{false, false, IMG47, false},
|
||||
{false, false, false, false},
|
||||
{false, false, false, false},
|
||||
{false, false, false, false},
|
||||
}
|
||||
|
||||
--
|
||||
-- TA4 Detector Cooler
|
||||
--
|
||||
local STEEL = {"default_steel_block.png", "techage:ta4_colliderblock"}
|
||||
local COOL4 = {"techage_filling_ta4.png^techage_frame_ta4.png^techage_cooler.png", "techage:ta4_collider_cooler"}
|
||||
|
||||
techage.ConstructionPlans["ta4_cooler"] = {
|
||||
plans["ta4_cooler"] = {
|
||||
{false, false, false, SIDEV, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false},
|
||||
{false, STEEL, PIPEH, HEXR1, PIPEH, COOL4, PN270, false, false},
|
||||
@ -503,7 +515,7 @@ local TELET = {"techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_telep
|
||||
local PUMP4 = {"techage_filling_ta4.png^techage_appl_pump.png^techage_frame_ta4.png", "techage:t4_pump"}
|
||||
local ARROW = {"techage_form_arrow.png"}
|
||||
|
||||
techage.ConstructionPlans["ta5_teleport"] = {
|
||||
plans["ta5_teleport"] = {
|
||||
{false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, CHEST, PushR, TELET, false, ARROW, false, TELET, Tubes, CHEST, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false},
|
||||
@ -511,8 +523,6 @@ techage.ConstructionPlans["ta5_teleport"] = {
|
||||
{false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, TANK4, PUMP4, TELEP, false, ARROW, false, TELEP, PIPEH, TANK4, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, TANK4, PIPEH, TELEP, false, ARROW, false, TELEP, PUMP4, TANK4, false},
|
||||
}
|
||||
|
||||
--
|
||||
@ -525,7 +535,7 @@ local MAGN2 = {"techage_collider_magnet.png^techage_steel_tiles_top3.png^[transf
|
||||
local MAGN3 = {"techage_collider_magnet.png^techage_steel_tiles_top3.png^[transformR180]", "techage:ta5_magnet1"}
|
||||
local MAGN4 = {"techage_collider_magnet.png^techage_steel_tiles_top3.png^[transformR270]", "techage:ta5_magnet1"}
|
||||
|
||||
techage.ConstructionPlans["ta5_fusion_reactor"] = {
|
||||
plans["ta5_fusion_reactor"] = {
|
||||
{false, false, false, false, false, false, IMG46, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false},
|
||||
@ -549,7 +559,7 @@ local HEX53 = {"techage_filling_ta4.png^techage_frameB_ta4.png^techage_appl_hole
|
||||
local TURB5 = {"techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta5.png", "techage:ta5_turbine"}
|
||||
local GENE5 = {"techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_generator.png^[transformFX]", "techage:ta5_generator"}
|
||||
|
||||
techage.ConstructionPlans["ta5_heatexchanger"] = {
|
||||
plans["ta5_heatexchanger"] = {
|
||||
{false, false, false, false, SIDEV, false, false, false},
|
||||
{false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false},
|
||||
@ -560,9 +570,38 @@ techage.ConstructionPlans["ta5_heatexchanger"] = {
|
||||
{false, false, false, false, false, false, false, false},
|
||||
}
|
||||
|
||||
|
||||
function techage.add_manual_plans(table_with_plans)
|
||||
for name, tbl in pairs(table_with_plans) do
|
||||
techage.ConstructionPlans[name] = tbl
|
||||
-- Bring into legacy format
|
||||
local function reformat(plan)
|
||||
for y=1,#plan do
|
||||
for x=1,#plan[1] do
|
||||
local item = plan[y][x] or false
|
||||
if item ~= false then
|
||||
local var1, var2 = item[1], item[2]
|
||||
|
||||
if var1 == "top_view" then
|
||||
plan[y][x] = {"text", var1}
|
||||
elseif var1 == "side_view" then
|
||||
plan[y][x] = {"text", var1}
|
||||
elseif var1 == "sectional_view" then
|
||||
plan[y][x] = {"text", var1}
|
||||
elseif var1 == "" then
|
||||
plan[y][x] = {"img", var2, "2.2,2.2"}
|
||||
elseif var1 == "10x10" then
|
||||
plan[y][x] = {"img", var2, "10,10"}
|
||||
elseif var1 == "5x4" then
|
||||
plan[y][x] = {"img", var2, "5,4"}
|
||||
else
|
||||
plan[y][x] = {"item", var1, var2}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return plan
|
||||
end
|
||||
|
||||
for name, plan in pairs(plans) do
|
||||
local plan2 = reformat(plan)
|
||||
doclib.add_manual_plan("techage", "EN", name, plan2)
|
||||
doclib.add_manual_plan("techage", "DE", name, plan2)
|
||||
doclib.add_manual_plan("techage", "pt-BR", name, plan2)
|
||||
end
|
||||
|
@ -66,7 +66,7 @@ minetest.register_node("techage:ta4_generator_on", {
|
||||
"techage_filling_ta4.png^techage_appl_hole_electric.png^techage_frame_ta4.png",
|
||||
"techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta4.png",
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_appl_generator4.png^techage_frame4_ta4.png",
|
||||
name = "techage_filling4_ta4.png^techage_appl_generator4.png^techage_frame4_ta4.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -76,7 +76,7 @@ minetest.register_node("techage:ta4_generator_on", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta4.png",
|
||||
name = "techage_filling4_ta4.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta4.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -27,9 +27,11 @@ local control = networks.control
|
||||
local CYCLE_TIME = 2
|
||||
local GRVL_CAPA = 500
|
||||
local PWR_CAPA = {
|
||||
[5] = GRVL_CAPA * 3 * 3 * 3, -- 13500 Cyc = 450 min = 22.5 kud
|
||||
[7] = GRVL_CAPA * 5 * 5 * 5, -- 104 kud
|
||||
[9] = GRVL_CAPA * 7 * 7 * 7, -- 286 kuh
|
||||
[5] = GRVL_CAPA * 3 * 3 * 3, -- 13500 Cyc = 450 min = 22.5 kud
|
||||
[7] = GRVL_CAPA * 5 * 5 * 5, -- 104 kud
|
||||
[9] = GRVL_CAPA * 7 * 7 * 7, -- 286 kuh
|
||||
[11] = GRVL_CAPA * 9 * 9 * 9, -- 610 kuh
|
||||
[13] = GRVL_CAPA * 11 * 11 * 11, -- 1112 kuh
|
||||
}
|
||||
local DOWN = 5
|
||||
local PWR_NEEDED = 5
|
||||
@ -161,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")
|
||||
@ -347,15 +351,47 @@ techage.register_node({"techage:heatexchanger2"}, {
|
||||
elseif topic == "load" then
|
||||
return techage.power.percent(nvm.capa_max, nvm.capa)
|
||||
elseif topic == "on" then
|
||||
start_node(pos, techage.get_nvm(pos))
|
||||
State:start(pos, nvm)
|
||||
return true
|
||||
elseif topic == "off" then
|
||||
stop_node(pos, techage.get_nvm(pos))
|
||||
State:stop(pos, nvm)
|
||||
return true
|
||||
else
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 1 and payload[1] == 1 then
|
||||
State:start(pos, nvm)
|
||||
return 0
|
||||
elseif topic == 1 and payload[1] == 0 then
|
||||
State:stop(pos, nvm)
|
||||
return 0
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 128 then
|
||||
return 0, techage.get_node_lvm(pos).name
|
||||
elseif topic == 129 then -- State
|
||||
if techage.is_running(nvm) then
|
||||
return 0, {techage.RUNNING}
|
||||
else
|
||||
return 0, {techage.STOPPED}
|
||||
end
|
||||
elseif topic == 135 then -- Delivered Power
|
||||
local data = power.get_network_data(pos, Cable, DOWN)
|
||||
return 0, {data.consumed - data.provided}
|
||||
elseif topic == 134 then -- Tank Load Percent
|
||||
local value = techage.power.percent(nvm.capa_max, nvm.capa)
|
||||
return 0, {math.floor(value + 0.5)}
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
on_node_load = function(pos, node)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if techage.is_running(nvm) then
|
||||
|
@ -61,11 +61,15 @@ local Numbers = {
|
||||
[2] = 96, -- 5x5x2 + 3x5x2 + 3x3x2 - 2
|
||||
[3] = 216, -- 7x7x2 + 5x7x2 + 5x5x2 - 2
|
||||
[4] = 384, -- 9x9x2 + 7x9x2 + 7x7x2 - 2
|
||||
[5] = 600, -- 11x11x2 + 9x11x2 + 9x9x2 - 2
|
||||
[6] = 864, -- 13x13x2 + 11x13x2 + 11x11x2 - 2
|
||||
},
|
||||
filling = {
|
||||
[2] = 27, -- 3x3x3
|
||||
[3] = 125, -- 5x5x5
|
||||
[4] = 343, -- 7x7x7
|
||||
[5] = 729, -- 9x9x9
|
||||
[6] = 1331, -- 11x11x11
|
||||
}
|
||||
}
|
||||
|
||||
@ -101,6 +105,24 @@ local function get_diameter(pos, in_dir)
|
||||
end
|
||||
|
||||
pos2 = vector.add(pos, vector.multiply(dir, 10))
|
||||
node = minetest.get_node(pos2)
|
||||
if node.name == "techage:ta3_pipe_wall_entry" then
|
||||
return
|
||||
end
|
||||
if node.name == "techage:ta4_pipe_inlet" then
|
||||
return 11
|
||||
end
|
||||
|
||||
pos2 = vector.add(pos, vector.multiply(dir, 12))
|
||||
node = minetest.get_node(pos2)
|
||||
if node.name == "techage:ta3_pipe_wall_entry" then
|
||||
return
|
||||
end
|
||||
if node.name == "techage:ta4_pipe_inlet" then
|
||||
return 13
|
||||
end
|
||||
|
||||
pos2 = vector.add(pos, vector.multiply(dir, 14))
|
||||
local poses = minetest.find_nodes_in_area(pos, pos2, {"techage:ta4_pipe_inlet"})
|
||||
if #poses > 1 then
|
||||
return vector.distance(pos, poses[2]) + 1
|
||||
|
@ -30,7 +30,7 @@ minetest.register_node("techage:glow_gravel", {
|
||||
}},
|
||||
paramtype = "light",
|
||||
light_source = 8,
|
||||
groups = {crumbly = 2, falling_node = 1},
|
||||
groups = {crumbly = 2, falling_node = 1, not_in_creative_inventory = 1},
|
||||
sounds = default.node_sound_gravel_defaults(),
|
||||
drop = "",
|
||||
})
|
||||
|
@ -62,7 +62,7 @@ minetest.register_node("techage:ta4_turbine", {
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png",
|
||||
"techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta4.png",
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_pipe.png",
|
||||
"techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta4.png",
|
||||
"techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta4.png^[transformFX",
|
||||
"techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta4.png",
|
||||
},
|
||||
|
||||
@ -92,7 +92,7 @@ minetest.register_node("techage:ta4_turbine_on", {
|
||||
"techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta4.png",
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_pipe.png",
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta4.png",
|
||||
name = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta4.png^[transformFX",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -102,7 +102,7 @@ minetest.register_node("techage:ta4_turbine_on", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta4.png",
|
||||
name = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta4.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
|
@ -74,7 +74,7 @@ for idx,ratio in ipairs(lRatio) do
|
||||
end
|
||||
end,
|
||||
|
||||
use_texture_alpha = true,
|
||||
use_texture_alpha = techage.BLEND,
|
||||
inventory_image = "techage_flame.png",
|
||||
paramtype = "light",
|
||||
light_source = 13,
|
||||
|
@ -110,7 +110,7 @@ minetest.register_node("techage:ta3_booster_on", {
|
||||
"techage_filling_ta3.png^techage_appl_hole_pipe.png^techage_frame_ta3.png",
|
||||
"techage_filling_ta3.png^techage_appl_hole_electric.png^techage_frame_ta3.png",
|
||||
{
|
||||
image = "techage_filling4_ta3.png^techage_appl_compressor4.png^techage_frame4_ta3.png",
|
||||
name = "techage_filling4_ta3.png^techage_appl_compressor4.png^techage_frame4_ta3.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -120,7 +120,7 @@ minetest.register_node("techage:ta3_booster_on", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta3.png^techage_appl_compressor4.png^[transformFX]^techage_frame4_ta3.png",
|
||||
name = "techage_filling4_ta3.png^techage_appl_compressor4.png^[transformFX]^techage_frame4_ta3.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -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")
|
||||
@ -105,7 +114,7 @@ minetest.register_node("techage:furnace_firebox", {
|
||||
|
||||
on_construct = function(pos)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
techage.add_node(pos, "techage:furnace_firebox")
|
||||
techage.add_node(pos, "techage:furnace_firebox", true)
|
||||
nvm.running = false
|
||||
nvm.burn_cycles = 0
|
||||
nvm.liquid = {}
|
||||
@ -127,7 +136,7 @@ minetest.register_node("techage:furnace_firebox_on", {
|
||||
"techage_concrete.png^techage_frame_ta3.png",
|
||||
"techage_concrete.png^techage_frame_ta3.png",
|
||||
{
|
||||
image = "techage_concrete4.png^techage_appl_firehole4.png^techage_frame4_ta3.png",
|
||||
name = "techage_concrete4.png^techage_appl_firehole4.png^techage_frame4_ta3.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -173,6 +182,18 @@ techage.register_node({"techage:furnace_firebox", "techage:furnace_firebox_on"},
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 128 then
|
||||
return 0, techage.get_node_lvm(pos).name
|
||||
elseif topic == 129 then -- State
|
||||
return 0, {nvm.running and techage.RUNNING or techage.STOPPED}
|
||||
elseif topic == 132 then -- Fuel Level
|
||||
return 0, {fuel.get_fuel_amount(nvm)}
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
-- called from furnace_top
|
||||
on_transfer = function(pos, in_dir, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -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)
|
||||
@ -257,6 +282,17 @@ local tubing = {
|
||||
return CRD(pos).State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
if topic == 141 then -- Furnace Output
|
||||
local nvm = techage.get_nvm(pos)
|
||||
return 0, string.split(nvm.output or "unknown", " ")[1]
|
||||
else
|
||||
return CRD(pos).State:on_beduino_request_data(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local _, node_name_ta3, _ =
|
||||
@ -272,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,
|
||||
@ -282,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},
|
||||
|
@ -24,7 +24,7 @@ local power = networks.power
|
||||
local control = networks.control
|
||||
|
||||
local CYCLE_TIME = 2
|
||||
local STANDBY_TICKS = 0
|
||||
local STANDBY_TICKS = 1
|
||||
local COUNTDOWN_TICKS = 1
|
||||
local PWR_NEEDED = 400
|
||||
local EXPECTED_PLASMA_NUM = 56
|
||||
@ -46,6 +46,7 @@ local function count_trues(t)
|
||||
end
|
||||
|
||||
local function nucleus(t)
|
||||
t = techage.tbl_filter(t, function(v, k, t) return type(v) == "table" end)
|
||||
if #t == 4 then
|
||||
if vector.equals(t[1], t[2]) and vector.equals(t[3], t[4]) then
|
||||
return true
|
||||
@ -216,7 +217,6 @@ minetest.register_node("techage:ta5_fr_controller_pas", {
|
||||
on_timer = node_timer,
|
||||
after_dig_node = after_dig_node,
|
||||
on_receive_fields = on_receive_fields,
|
||||
drawtype = "nodebox",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy=2, cracky=2, crumbly=2},
|
||||
is_ground_content = false,
|
||||
@ -232,7 +232,7 @@ minetest.register_node("techage:ta5_fr_controller_act", {
|
||||
"techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_hole_electric.png",
|
||||
"techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_hole_electric.png",
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_appl_plasma4.png^techage_frame4_ta5.png",
|
||||
name = "techage_filling4_ta4.png^techage_appl_plasma4.png^techage_frame4_ta5.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -242,7 +242,7 @@ minetest.register_node("techage:ta5_fr_controller_act", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_appl_plasma4.png^techage_frame4_ta5.png",
|
||||
name = "techage_filling4_ta4.png^techage_appl_plasma4.png^techage_frame4_ta5.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -256,7 +256,6 @@ minetest.register_node("techage:ta5_fr_controller_act", {
|
||||
on_timer = node_timer,
|
||||
after_dig_node = after_dig_node,
|
||||
on_receive_fields = on_receive_fields,
|
||||
drawtype = "nodebox",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy=2, cracky=2, crumbly=2, not_in_creative_inventory=1},
|
||||
drop = "",
|
||||
@ -268,6 +267,12 @@ techage.register_node({"techage:ta5_fr_controller_pas", "techage:ta5_fr_controll
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return State:on_receive_message(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
})
|
||||
|
||||
power.register_nodes({"techage:ta5_fr_controller_pas", "techage:ta5_fr_controller_act"}, Cable, "con", {"L", "R"})
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
Copyright (C) 2019-2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -20,8 +20,14 @@ local power = networks.power
|
||||
local control = networks.control
|
||||
|
||||
local CYCLE_TIME = 2
|
||||
local STANDBY_TICKS = 1
|
||||
local COUNTDOWN_TICKS = 2
|
||||
local PWR_PERF = 800
|
||||
|
||||
local function formspec(self, pos, nvm)
|
||||
return techage.generator_formspec(self, pos, nvm, S("TA5 Generator"), nvm.provided, PWR_PERF)
|
||||
end
|
||||
|
||||
local function swap_node(pos, name)
|
||||
local node = techage.get_node_lvm(pos)
|
||||
if node.name == name then
|
||||
@ -31,6 +37,13 @@ local function swap_node(pos, name)
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
|
||||
local function can_start(pos, nvm, state)
|
||||
if nvm.alive_cnt and nvm.alive_cnt > 0 then
|
||||
return true
|
||||
end
|
||||
return S("no steam")
|
||||
end
|
||||
|
||||
local function start_node(pos, nvm)
|
||||
local meta = M(pos)
|
||||
nvm.provided = 0
|
||||
@ -38,8 +51,6 @@ local function start_node(pos, nvm)
|
||||
techage.evaluate_charge_termination(nvm, meta)
|
||||
local outdir = meta:get_int("outdir")
|
||||
power.start_storage_calc(pos, Cable, outdir)
|
||||
swap_node(pos, "techage:ta5_generator_on")
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
end
|
||||
|
||||
local function stop_node(pos, nvm)
|
||||
@ -47,7 +58,32 @@ local function stop_node(pos, nvm)
|
||||
nvm.alive_cnt = 0
|
||||
local outdir = M(pos):get_int("outdir")
|
||||
power.start_storage_calc(pos, Cable, outdir)
|
||||
swap_node(pos, "techage:ta5_generator")
|
||||
end
|
||||
|
||||
local State = techage.NodeStates:new({
|
||||
node_name_passive = "techage:ta5_generator",
|
||||
node_name_active = "techage:ta5_generator_on",
|
||||
cycle_time = CYCLE_TIME,
|
||||
standby_ticks = STANDBY_TICKS,
|
||||
formspec_func = formspec,
|
||||
infotext_name = S("TA5 Generator"),
|
||||
can_start = can_start,
|
||||
start_node = start_node,
|
||||
stop_node = stop_node,
|
||||
})
|
||||
|
||||
local function on_receive_fields(pos, formname, fields, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
local nvm = techage.get_nvm(pos)
|
||||
State:state_button_event(pos, nvm, fields)
|
||||
end
|
||||
|
||||
local function on_rightclick(pos, node, clicker)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
techage.set_activeformspec(pos, clicker)
|
||||
M(pos):set_string("formspec", formspec(State, pos, nvm))
|
||||
end
|
||||
|
||||
local function get_generator_data(pos, outdir, tlib2)
|
||||
@ -59,8 +95,15 @@ end
|
||||
|
||||
local function node_timer(pos, elapsed)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local running = techage.is_running(nvm)
|
||||
nvm.alive_cnt = (nvm.alive_cnt or 0) - 1
|
||||
if nvm.alive_cnt > 0 then
|
||||
local alive = nvm.alive_cnt > 0
|
||||
if running and not alive then
|
||||
State:standby(pos, nvm, S("no steam"))
|
||||
stop_node(pos, nvm, State)
|
||||
elseif not running and alive then
|
||||
State:start(pos, nvm)
|
||||
elseif running then
|
||||
local meta = M(pos)
|
||||
local outdir = meta:get_int("outdir")
|
||||
local tp1 = tonumber(meta:get_string("termpoint1"))
|
||||
@ -70,12 +113,12 @@ local function node_timer(pos, elapsed)
|
||||
if val > 0 then
|
||||
nvm.load = val
|
||||
end
|
||||
return true
|
||||
else
|
||||
swap_node(pos, "techage:ta5_generator")
|
||||
stop_node(pos, nvm)
|
||||
return false
|
||||
State:keep_running(pos, nvm, COUNTDOWN_TICKS)
|
||||
end
|
||||
if techage.is_activeformspec(pos) then
|
||||
M(pos):set_string("formspec", formspec(State, pos, nvm))
|
||||
end
|
||||
return State:is_active(nvm)
|
||||
end
|
||||
|
||||
minetest.register_node("techage:ta5_generator", {
|
||||
@ -91,7 +134,11 @@ minetest.register_node("techage:ta5_generator", {
|
||||
},
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local number = techage.add_node(pos, "techage:ta5_generator")
|
||||
State:node_init(pos, nvm, number)
|
||||
M(pos):set_int("outdir", networks.side_to_outdir(pos, "R"))
|
||||
M(pos):set_string("formspec", formspec(State, pos, nvm))
|
||||
Cable:after_place_node(pos)
|
||||
end,
|
||||
after_dig_node = function(pos, oldnode)
|
||||
@ -101,6 +148,8 @@ minetest.register_node("techage:ta5_generator", {
|
||||
|
||||
get_generator_data = get_generator_data,
|
||||
ta4_formspec = techage.generator_settings("ta4", PWR_PERF),
|
||||
on_receive_fields = on_receive_fields,
|
||||
on_rightclick = on_rightclick,
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=2, crumbly=2, choppy=2},
|
||||
on_rotate = screwdriver.disallow,
|
||||
@ -117,7 +166,7 @@ minetest.register_node("techage:ta5_generator_on", {
|
||||
"techage_filling_ta4.png^techage_appl_hole_electric.png^techage_frame_ta5.png",
|
||||
"techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta5.png",
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_appl_generator4.png^techage_frame4_ta5.png",
|
||||
name = "techage_filling4_ta4.png^techage_appl_generator4.png^techage_frame4_ta5.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -127,7 +176,7 @@ minetest.register_node("techage:ta5_generator_on", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta5.png",
|
||||
name = "techage_filling4_ta4.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta5.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -140,6 +189,8 @@ minetest.register_node("techage:ta5_generator_on", {
|
||||
|
||||
get_generator_data = get_generator_data,
|
||||
ta4_formspec = techage.generator_settings("ta4", PWR_PERF),
|
||||
on_receive_fields = on_receive_fields,
|
||||
on_rightclick = on_rightclick,
|
||||
on_timer = node_timer,
|
||||
paramtype2 = "facedir",
|
||||
drop = "",
|
||||
@ -159,17 +210,40 @@ techage.register_node({"techage:ta5_generator", "techage:ta5_generator_on"}, {
|
||||
if topic == "trigger" then
|
||||
nvm.alive_cnt = 5
|
||||
elseif topic == "start" then
|
||||
start_node(pos, nvm)
|
||||
--start_node(pos, nvm)
|
||||
elseif topic == "stop" then
|
||||
stop_node(pos, nvm)
|
||||
end
|
||||
end,
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return "unsupported"
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == "delivered" then
|
||||
return nvm.provided or 0
|
||||
else
|
||||
return State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 135 then
|
||||
return 0, {nvm.provided or 0}
|
||||
else
|
||||
return State:on_beduino_request_data(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_node_load = function(pos)
|
||||
-- remove legacy formspec
|
||||
M(pos):set_string("formspec", "")
|
||||
-- Add node number if missing
|
||||
local number = M(pos):get_string("node_number")
|
||||
if number == "" then
|
||||
local nvm = techage.get_nvm(pos)
|
||||
local number = techage.add_node(pos, "techage:ta5_generator")
|
||||
State:node_init(pos, nvm, number)
|
||||
State:start(pos, nvm)
|
||||
M(pos):set_string("formspec", formspec(State, pos, nvm))
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
@ -91,7 +91,7 @@ techage.register_node({"techage:ta5_heatexchanger1"}, {
|
||||
on_transfer = function(pos, indir, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
-- used by heatexchanger2
|
||||
if topic == "test_gas_blue" then
|
||||
if topic == "test_pipe_blue" or topic == "test_gas_blue" then
|
||||
return control_cmnd(pos, topic)
|
||||
else
|
||||
return turbine_cmnd(pos, topic, payload)
|
||||
|
@ -93,7 +93,10 @@ sched.register(tSched, CALL_RATE1, 1, function(pos)
|
||||
return true
|
||||
end)
|
||||
sched.register(tSched, CALL_RATE1, 2, function(pos)
|
||||
local resp = heatexchanger1_cmnd(pos, "test_gas_blue")
|
||||
local resp = heatexchanger1_cmnd(pos, "test_pipe_blue")
|
||||
if type(resp) ~= "table" then
|
||||
return DESCRIPTION .. S(" Error!")
|
||||
end
|
||||
local cnt = count_trues(resp)
|
||||
if cnt ~= EXPECT_BLUE then
|
||||
return S("Blue pipe connection error\n(@1 found / @2 expected)", cnt, EXPECT_BLUE)
|
||||
@ -101,14 +104,30 @@ sched.register(tSched, CALL_RATE1, 2, function(pos)
|
||||
return true
|
||||
end)
|
||||
sched.register(tSched, CALL_RATE1, 3, function(pos)
|
||||
local resp = heatexchanger3_cmnd(pos, "test_gas_green")
|
||||
local resp = heatexchanger3_cmnd(pos, "test_pipe_green")
|
||||
local cnt = count_trues(resp)
|
||||
if cnt ~= EXPECT_GREEN then
|
||||
return S("Green pipe connection error\n(@1 found / @2 expected)", cnt, EXPECT_GREEN)
|
||||
end
|
||||
return true
|
||||
end)
|
||||
sched.register(tSched, CALL_RATE2, 4, function(pos)
|
||||
sched.register(tSched, CALL_RATE1, 4, function(pos)
|
||||
local resp = heatexchanger1_cmnd(pos, "test_gas_blue")
|
||||
local cnt = count_trues(resp)
|
||||
if cnt ~= EXPECT_BLUE then
|
||||
return S("Blue pipe coolant missing\n(@1 found / @2 expected)", cnt, EXPECT_BLUE)
|
||||
end
|
||||
return true
|
||||
end)
|
||||
sched.register(tSched, CALL_RATE1, 5, function(pos)
|
||||
local resp = heatexchanger3_cmnd(pos, "test_gas_green")
|
||||
local cnt = count_trues(resp)
|
||||
if cnt ~= EXPECT_GREEN then
|
||||
return S("Green pipe coolant missing\n(@1 found / @2 expected)", cnt, EXPECT_GREEN)
|
||||
end
|
||||
return true
|
||||
end)
|
||||
sched.register(tSched, CALL_RATE2, 6, function(pos)
|
||||
local resp = heatexchanger3_cmnd(pos, "dec_power")
|
||||
local cnt = count_trues(resp)
|
||||
--print("dec_power", cnt)
|
||||
@ -123,7 +142,7 @@ local function can_start(pos, nvm)
|
||||
return S("No power")
|
||||
end
|
||||
heatexchanger3_cmnd(pos, "rst_power")
|
||||
for i = 0,4 do
|
||||
for i = 0,6 do
|
||||
local res = tSched[i](pos)
|
||||
if res ~= true and res ~= 1 then return res end
|
||||
end
|
||||
@ -167,7 +186,7 @@ local State = techage.NodeStates:new({
|
||||
node_name_passive = "techage:ta5_heatexchanger2",
|
||||
cycle_time = CYCLE_TIME,
|
||||
infotext_name = DESCRIPTION,
|
||||
standby_ticks = 0,
|
||||
standby_ticks = 1,
|
||||
can_start = can_start,
|
||||
start_node = start_node,
|
||||
stop_node = stop_node,
|
||||
@ -183,7 +202,7 @@ local function steam_management(pos, nvm)
|
||||
nvm.temperature = math.min(nvm.temperature + 10, 100)
|
||||
elseif resp ~= true then
|
||||
State:fault(pos, nvm, resp)
|
||||
stop_node(pos, nvm)
|
||||
State:stop(pos, nvm)
|
||||
return false
|
||||
end
|
||||
|
||||
@ -325,15 +344,44 @@ techage.register_node({"techage:ta5_heatexchanger2"}, {
|
||||
local data = power.get_network_data(pos, Cable, DOWN)
|
||||
return data.consumed - data.provided
|
||||
elseif topic == "on" then
|
||||
start_node(pos, techage.get_nvm(pos))
|
||||
State:start(pos, nvm)
|
||||
return true
|
||||
elseif topic == "off" then
|
||||
stop_node(pos, techage.get_nvm(pos))
|
||||
State:stop(pos, nvm)
|
||||
return true
|
||||
else
|
||||
return "unsupported"
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 1 and payload[1] == 1 then
|
||||
start_node(pos, techage.get_nvm(pos))
|
||||
return 0
|
||||
elseif topic == 1 and payload[1] == 0 then
|
||||
stop_node(pos, techage.get_nvm(pos))
|
||||
return 0
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 128 then
|
||||
return 0, techage.get_node_lvm(pos).name
|
||||
elseif topic == 129 then -- State
|
||||
if techage.is_running(nvm) then
|
||||
return 0, {techage.RUNNING}
|
||||
else
|
||||
return 0, {techage.STOPPED}
|
||||
end
|
||||
elseif topic == 135 then -- Delivered Power
|
||||
local data = power.get_network_data(pos, Cable, DOWN)
|
||||
return 0, {data.consumed - data.provided}
|
||||
else
|
||||
return 2, ""
|
||||
end
|
||||
end,
|
||||
on_node_load = function(pos, node)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if techage.is_running(nvm) then
|
||||
@ -344,7 +392,7 @@ techage.register_node({"techage:ta5_heatexchanger2"}, {
|
||||
-- Attempt to restart the system as the heat exchanger goes into error state
|
||||
-- when parts of the storage block are unloaded.
|
||||
if nvm.techage_state == techage.FAULT then
|
||||
start_node(pos, nvm)
|
||||
State:start(pos, nvm)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
@ -54,7 +54,6 @@ minetest.register_node("techage:ta5_magnet1", {
|
||||
Cable:after_dig_node(pos)
|
||||
techage.del_mem(pos)
|
||||
end,
|
||||
drawtype = "nodebox",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy=2, cracky=2, crumbly=2},
|
||||
is_ground_content = false,
|
||||
@ -88,7 +87,6 @@ minetest.register_node("techage:ta5_magnet2", {
|
||||
Cable:after_dig_node(pos)
|
||||
techage.del_mem(pos)
|
||||
end,
|
||||
drawtype = "nodebox",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy=2, cracky=2, crumbly=2},
|
||||
is_ground_content = false,
|
||||
@ -200,6 +198,13 @@ local function on_request(pos, tlib2, topic)
|
||||
else -- Pipe
|
||||
if topic == "dec_power" then
|
||||
return dec_power(nvm)
|
||||
elseif topic == "test_pipe_blue" then
|
||||
nvm.test_pipe = true
|
||||
return true
|
||||
elseif topic == "test_pipe_green" then
|
||||
local res = nvm.test_pipe
|
||||
nvm.test_pipe = false
|
||||
return res
|
||||
elseif topic == "test_gas_blue" then
|
||||
nvm.has_gas = true
|
||||
return nvm.liquid.amount == CAPACITY
|
||||
|
@ -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
|
||||
@ -113,7 +140,7 @@ local tiles_act = {
|
||||
"techage_filling_ta4.png^techage_appl_hole_ta5_pipe2.png^techage_frame_ta5.png",
|
||||
"techage_filling_ta4.png^techage_appl_hole_pipe.png^techage_frame_ta5.png",
|
||||
{
|
||||
image = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta5.png^[transformFX",
|
||||
name = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta5.png^[transformFX",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -123,7 +150,7 @@ local tiles_act = {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta5.png",
|
||||
name = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta5.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -170,6 +197,12 @@ techage.register_node({"techage:ta5_pump", "techage:ta5_pump_on"}, {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
return State:on_receive_message(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
return State:on_beduino_request_data(pos, topic, payload)
|
||||
end,
|
||||
})
|
||||
|
||||
-- Pumps have to provide one output and one input side
|
||||
|
@ -62,7 +62,7 @@ minetest.register_node("techage:ta5_turbine", {
|
||||
"techage_filling_ta4.png^techage_frame_ta4_bottom.png",
|
||||
"techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta5.png",
|
||||
"techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_hole_pipe.png",
|
||||
"techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta5.png",
|
||||
"techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta5.png^[transformFX",
|
||||
"techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta5.png",
|
||||
},
|
||||
|
||||
@ -92,7 +92,7 @@ minetest.register_node("techage:ta5_turbine_on", {
|
||||
"techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta5.png",
|
||||
"techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_hole_pipe.png",
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta5.png",
|
||||
name = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta5.png^[transformFX",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -102,7 +102,7 @@ minetest.register_node("techage:ta5_turbine_on", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta5.png",
|
||||
name = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta5.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -26,6 +26,7 @@ local STANDBY_TICKS = 3
|
||||
local PWR_NEEDED = 35
|
||||
local PWR_UNITS_PER_HYDROGEN_ITEM = 80
|
||||
local CAPACITY = 200
|
||||
local TURNOFF_THRESHOLD = "40%"
|
||||
|
||||
local function evaluate_percent(s)
|
||||
return (tonumber(s:sub(1, -2)) or 0) / 100
|
||||
@ -124,11 +125,14 @@ local function node_timer(pos, elapsed)
|
||||
State:keep_running(pos, nvm, 1)
|
||||
end
|
||||
elseif curr_load == 0 then
|
||||
nvm.taken = 0
|
||||
State:nopower(pos, nvm)
|
||||
else
|
||||
nvm.taken = 0
|
||||
State:standby(pos, nvm, S("Turnoff point reached"))
|
||||
end
|
||||
else
|
||||
nvm.taken = 0
|
||||
State:blocked(pos, nvm, S("Storage full"))
|
||||
end
|
||||
if techage.is_activeformspec(pos) then
|
||||
@ -161,6 +165,8 @@ local function after_place_node(pos)
|
||||
State:node_init(pos, nvm, number)
|
||||
local node = minetest.get_node(pos)
|
||||
M(pos):set_int("in_dir", techage.side_to_indir("R", node.param2))
|
||||
M(pos):set_string("reduction", "100%")
|
||||
M(pos):set_string("turnoff", TURNOFF_THRESHOLD)
|
||||
Pipe:after_place_node(pos)
|
||||
Cable:after_place_node(pos)
|
||||
end
|
||||
@ -197,11 +203,11 @@ local tool_config = {
|
||||
},
|
||||
{
|
||||
type = "dropdown",
|
||||
choices = "0%,20%,40%,60%,80%",
|
||||
choices = "0%,20%,40%,60%,80%,98%",
|
||||
name = "turnoff",
|
||||
label = S("Turnoff point"),
|
||||
tooltip = S("If the charge of the storage\nsystem exceeds the configured value,\nthe block switches off"),
|
||||
default = "0%",
|
||||
tooltip = S("If the charge of the storage\nsystem falls below the configured value,\nthe block switches off"),
|
||||
default = TURNOFF_THRESHOLD,
|
||||
},
|
||||
}
|
||||
|
||||
@ -247,7 +253,7 @@ minetest.register_node("techage:ta4_electrolyzer_on", {
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_pipe.png",
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_electric.png",
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_electrolyzer4.png^techage_appl_ctrl_unit4.png^[transformFX",
|
||||
name = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_electrolyzer4.png^techage_appl_ctrl_unit4.png^[transformFX",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -257,7 +263,7 @@ minetest.register_node("techage:ta4_electrolyzer_on", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_electrolyzer4.png^techage_appl_ctrl_unit4.png",
|
||||
name = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_electrolyzer4.png^techage_appl_ctrl_unit4.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -332,11 +338,24 @@ techage.register_node({"techage:ta4_electrolyzer", "techage:ta4_electrolyzer_on"
|
||||
return State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 134 and payload[1] == 1 then
|
||||
return 0, {techage.power.percent(CAPACITY, (nvm.liquid and nvm.liquid.amount) or 0)}
|
||||
elseif topic == 135 then
|
||||
return 0, {math.floor((nvm.provided or 0) + 0.5)}
|
||||
else
|
||||
return State:on_beduino_request_data(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_node_load = function(pos, node)
|
||||
local meta = M(pos)
|
||||
if not meta:contains("reduction") then
|
||||
meta:set_string("reduction", "100%")
|
||||
meta:set_string("turnoff", "0%")
|
||||
meta:set_string("turnoff", TURNOFF_THRESHOLD)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
@ -3,7 +3,7 @@
|
||||
TechAge
|
||||
=======
|
||||
|
||||
Copyright (C) 2019-2021 Joachim Stolberg
|
||||
Copyright (C) 2019-2022 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
@ -215,7 +215,7 @@ minetest.register_node("techage:ta4_fuelcell_on", {
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_electric.png",
|
||||
"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_pipe.png",
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_fuelcell4.png^techage_appl_ctrl_unit4.png^[transformFX",
|
||||
name = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_fuelcell4.png^techage_appl_ctrl_unit4.png^[transformFX",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -225,7 +225,7 @@ minetest.register_node("techage:ta4_fuelcell_on", {
|
||||
},
|
||||
},
|
||||
{
|
||||
image = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_fuelcell4.png^techage_appl_ctrl_unit4.png",
|
||||
name = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_fuelcell4.png^techage_appl_ctrl_unit4.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
@ -304,6 +304,19 @@ techage.register_node({"techage:ta4_fuelcell", "techage:ta4_fuelcell_on"}, {
|
||||
return State:on_receive_message(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||
return State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||
end,
|
||||
on_beduino_request_data = function(pos, src, topic, payload)
|
||||
local nvm = techage.get_nvm(pos)
|
||||
if topic == 134 and payload[1] == 1 then
|
||||
return 0, {techage.power.percent(CAPACITY, (nvm.liquid and nvm.liquid.amount) or 0)}
|
||||
elseif topic == 135 then
|
||||
return 0, {math.floor((nvm.provided or 0) + 0.5)}
|
||||
else
|
||||
return State:on_beduino_request_data(pos, topic, payload)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
control.register_nodes({"techage:ta4_fuelcell", "techage:ta4_fuelcell_on"}, {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user