manuals updated
This commit is contained in:
parent
2a8dfd755f
commit
1ba43d2ef4
10
README.md
10
README.md
@ -7,18 +7,20 @@ Tech Age, a mod to go through 4 tech ages in search of wealth and power.
|
||||
|
||||
|
||||
### License
|
||||
Copyright (C) 2019 Joachim Stolberg
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
Code: Licensed under the GNU GPL version 3 or later. See LICENSE.txt
|
||||
Textures: CC BY-SA 3.0
|
||||
|
||||
|
||||
### Dependencies
|
||||
Required: default, tubelib2, basic_materials, bucket, stairs
|
||||
Required: default, doors, tubelib2, basic_materials, bucket, stairs, lcdlib
|
||||
Optional: unified_inventory, wielded_light, minecart
|
||||
Highly recommended: signs_bot, minecart
|
||||
|
||||
|
||||
### History
|
||||
- 2019-06-16 V0.01 * First upload
|
||||
- 2019-09-28 V0.02 * TA3 finished
|
||||
- 2019-06-16 V0.01 * First upload
|
||||
- 2019-09-28 V0.02 * TA3 finished
|
||||
- 2020-02-29 V0.04 * TA4 ICTA controller added
|
||||
|
||||
|
||||
|
@ -133,5 +133,9 @@ techage.Items = {
|
||||
ta4_reactorbase = "techage:ta4_reactor_base",
|
||||
ta4_furnaceheater = "techage:furnace_heater",
|
||||
ta4_waterpump = "techage:t4_waterpump",
|
||||
ta4_icta_controller = "techage:ta4_icta_controller",
|
||||
ta4_battery = "techage:ta4_battery",
|
||||
ta4_display = "techage:ta4_display",
|
||||
ta4_signaltower = "techage:ta4_signaltower",
|
||||
--ta4_ "",
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ techage.manual_DE = {}
|
||||
techage.manual_DE.aTitel = {
|
||||
"1,Tech Age Mod",
|
||||
"2,Software Update",
|
||||
"3,Was hat sich am Spiel geändert",
|
||||
"3,Was hat sich am Spiel geändert?",
|
||||
"2,Hinweise",
|
||||
"2,Erze und Mineralien",
|
||||
"3,Meridium",
|
||||
@ -139,6 +139,11 @@ techage.manual_DE.aTitel = {
|
||||
"3,TA4 Reaktorständer / reactor stand",
|
||||
"3,TA4 Reaktorsockel / reactor base",
|
||||
"3,TA4 Silo / silo",
|
||||
"2,ICTA Controller",
|
||||
"3,TA4 ICTA Controller",
|
||||
"3,Batterie",
|
||||
"3,TA4 Display",
|
||||
"3,TA4 Signal Tower",
|
||||
"2,Weitere TA4 Blöcke",
|
||||
"3,TA4 Tank / TA4 Tank",
|
||||
"3,TA4 Pumpe / TA4 Pump",
|
||||
@ -163,18 +168,35 @@ techage.manual_DE.aText = {
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"\027(c@#ffffff)Da sich mit dem Update die Art und Weise wie Daten der Maschinen gespeichert werden\\, geändert hat\\, sind nach dem Update alle Maschinen erst einmal ohne Daten und damit Funktionslos und müssen \"repariert\" werden. \n"..
|
||||
"Zum 23.02.2020 gab es ein größeres Software-Update\\, was einige Änderungen und aus Sicht der Spieler auch \"Probleme\" mit sich bringt. Das Software-Update war aber nötig\\, um die techage Mod weiter ausbauen und entwickeln zu können.\n"..
|
||||
"\n"..
|
||||
"Da sich mit dem Update die Art und Weise wie Daten der Maschinen gespeichert werden\\, geändert hat\\, sind nach dem Update alle Maschinen erst einmal ohne Daten und damit Funktionslos und müssen \"repariert\" werden. \n"..
|
||||
"\n"..
|
||||
"Dazu gibt es ein Reparaturset\\, bestehend aus dem Schraubenschlüssel (Techage Info Werkzeug) und der Werkzeugtasche (TechAge Reparaturset). Beide Werkzeuge können gecraftet werden.\n"..
|
||||
"\n"..
|
||||
" - Mit dem Schraubenschlüssel können die Verbindungen über das Stromnetz geprüft werden. Dazu einfach auf einen Generator oder eine Junction klicken\\, dann werden alle verbundenen Blöcke in der Umgebung markiert. Bei Unterbrechungen immer den letzten markierten Block (Junction) in der Kette neu setzen.\n"..
|
||||
" - normale Maschinen müssen nur neu gestartet werden. Hilft dies nicht\\, einfach neu setzen.\n"..
|
||||
" - Generatoren (auch Akkus und Brennstoffzelle) können entweder neu gesetzt\\, oder mit dem Reparaturset angeklickt und damit repariert werden.\n"..
|
||||
" - Die Trägermodule der Solarzellen müssen ebenfalls mit dem \"Reparaturset\" angeklickt werden.\n"..
|
||||
" - Die Stromschalterbox und die Stromschalter müssen neu gesetzt werden. Die Stromschalterbox verhält sich beim Setzen nun ähnlich wie Stromkabel.\n"..
|
||||
" - Der TA4 Solar Wechselrichter besteht jetzt nur noch aus einem Block. Der zweite Block muss entfernt und durch ein rotes Kabel ersetzt werden.\n"..
|
||||
" - Wasserstoff ist nun wie eine Flüssigkeit zu behandeln. Elektrolyseur und Brennstoffzelle müssen daher nicht mehr über Röhren und Schieber sondern über Pumpen und Flüssigkeitsleitungen miteinander verbunden werden.\n"..
|
||||
"\n",
|
||||
" - der TA1 Hopper ist weg\\, dafür kann jetzt der Hopper aus der Mod Minecart genutzt werden.\n"..
|
||||
" - Blöcke für Wasser und andere Flüssigkeiten (Boiler\\, Tanks) haben kein Inventory mehr. Diese muss man nun füllen bzw. leeren\\, in dem man mit einem vollen bzw. leeren Behälter auf den Block klickt. Bei Wasser ist das der Eimer\\, bei Öl und anderen Flüssigkeiten die Fässer oder Kanister.\n"..
|
||||
" - für TA2 und TA3 gibt er jetzt einen Steinbrecher (Quarry) zum Abbau von Steinen.\n"..
|
||||
" - Die Stromschalterbox und die Stromschalter wurden überarbeitet und sind nun leichter zu Platzieren.\n"..
|
||||
" - Alle Menüs werden nun automatisch und zyklisch aktualisiert\\, den \"Update\" Button gibt es nicht mehr.\n"..
|
||||
" - Die Tanks können nun nicht mehr direkt über Schieber gefüllt oder geleert werden. Hierzu ist zusätzlich ein TA Einfülltrichter (TA Liquid Filler) notwendig.\n"..
|
||||
" - Gas\\, was beim Destillieren entsteht (Propangas)\\, kann über den Reformer in Wasserstoff umgewandelt und dann zu Strom gemacht werden.\n"..
|
||||
" - Der TA4 Solar Wechselrichter besteht jetzt nur noch aus einem Block.\n"..
|
||||
" - Generator und Wärmetauscher beim Energiespeicher arbeiten nun unabhängig von einander und können auch einzeln mit dem Stromnetz verbunden sein.\n"..
|
||||
" - \n"..
|
||||
"\n",
|
||||
"Diese Dokumentation ist sowohl \"ingame\" (Block Konstruktionsplan) als auch auf GitHub als MD-Files verfügbar.\n"..
|
||||
"\n"..
|
||||
" - Link: https://github.com/joe7575/techage/blob/master/manuals/toc_DE.md\n"..
|
||||
" - Short Link: https://tinyurl.com/y2lwl35h\n"..
|
||||
"\n"..
|
||||
"Die Konstruktionspläne (Diagramme) für den Aufbau der Maschinen sowie die Bilder sind aber nur ingame verfügbar.\n"..
|
||||
"\n"..
|
||||
@ -744,7 +766,7 @@ techage.manual_DE.aText = {
|
||||
" - 'standby' --> nichts zu tun\\, da Quell-Inventar leer\n"..
|
||||
" - 'blocked' --> kann nichts tun\\, da Ziel-Inventar voll\n"..
|
||||
"\n"..
|
||||
"Dieser Status wird bei vielen Blöcken gleichzeitig auch über den Info-Text angezeigt.\n"..
|
||||
"Dieser Status und weitere Informationen werden auch ausgegeben\\, wenn mit dem Schraubenschlüssel auf den Block geklickt wird.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
@ -1122,6 +1144,48 @@ techage.manual_DE.aText = {
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der ICTA Controller (ICTA steht für \"If Condition Then Action\") dient zur Überwachung und Steuerung von Maschinen. Mit dem Controller kann man Daten von Maschinen und anderen Blöcken einlesen und abhängig davon andere Maschinen und Blöcke ein-/ausschalten.\n"..
|
||||
"\n"..
|
||||
"Einlesen von Maschinendaten sowie das Steuern von Blöcken und Maschinen erfolgt über sogenannte Kommandos. Für das Verständnis\\, wie Kommandos funktionieren\\, ist das Kapitel TA3 -> Logik-/Schalt-Blöcke wichtig. \n"..
|
||||
"\n"..
|
||||
"Der Controller benötigt für den Betrieb eine Batterie. Das Display dient zur Ausgabe von Daten\\, der Signal Tower zur Anzeige von Fehlern.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Controller arbeitet auf das Basis von 'IF <condition> THEN <action>' Regeln. Es können bis zu 8 Regeln pro Controller angelegt werden.\n"..
|
||||
"\n"..
|
||||
"Beispiele für Regeln sind:\n"..
|
||||
"\n"..
|
||||
" - Wenn ein Verteiler verstopft ist ('blocked')\\, soll der Schieber davor ausgeschaltet werden\n"..
|
||||
" - Wenn eine Maschine einen Fehler anzeigt\\, soll dieser auf dem Display ausgegeben werden\n"..
|
||||
"\n"..
|
||||
"Der Controller prüft diese Regeln zyklisch. Dazu muss pro Regel eine Zykluszeit in Sekunden ('Cycle/s') angegeben werden (1..1000). \n"..
|
||||
"\n"..
|
||||
"Für Regeln die einen on/off Eingang auswerten\\, bspw. von einen Schalter oder Detektor\\, muss als Zykluszeit 0 angegeben werden. Der Wert 0 bedeutet\\, dass diese Regel immer dann ausgeführt werden soll\\, wenn sich das Eingangssignal geändert hat\\, also bspw. der Button einen neuen Wert gesendet hat.\n"..
|
||||
"\n"..
|
||||
"Alle Regeln sollten nur so oft wie notwendig ausgeführt werden. Dies hat zwei Vorteile:\n"..
|
||||
"\n"..
|
||||
" - die Batterie des Controllers hält länger (jeder Controller benötigt eine Batterie)\n"..
|
||||
" - die Last für den Server ist geringer (damit weniger Lags)\n"..
|
||||
"\n"..
|
||||
"Man muss für jede action eine Verzögerungszeit ('after/s') einstellen. Soll die Aktion sofort ausgeführt werden\\, ist 0 einzugeben.\n"..
|
||||
"\n"..
|
||||
"Der Controller hat eine eigene Hilfe und Hinweise zu allen Kommandos über das Controller-Menü.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Die Batterie muss in unmittelbarer Nähe zum Controller platziert werden\\, also an einer der 26 Positionen um den Controller herum.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Das Display zeigt nach dem Platzieren seine Nummer an. Über diese Nummer kann das Display angesprochen werden. Auf dem Display können Texte ausgegeben werden\\, wobei das Display 5 Zeilen und damit 5 unterschiedliche Texte darstellen kann.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Der Signal Tower kann rot\\, grün und orange anzeigen. Eine Kombination der 3 Farben ist nicht möglich.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"",
|
||||
"Siehe TA3 Tank.\n"..
|
||||
"\n"..
|
||||
@ -1286,6 +1350,11 @@ techage.manual_DE.aItemName = {
|
||||
"ta4_reactorstand",
|
||||
"ta4_reactorbase",
|
||||
"ta4_silo",
|
||||
"ta4_icta_controller",
|
||||
"ta4_icta_controller",
|
||||
"ta4_battery",
|
||||
"ta4_display",
|
||||
"ta4_signaltower",
|
||||
"",
|
||||
"ta4_tank",
|
||||
"ta4_pump",
|
||||
@ -1437,5 +1506,10 @@ techage.manual_DE.aPlanTable = {
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
|
||||
|
@ -66,7 +66,7 @@ end
|
||||
-- return the Lua code
|
||||
function techage.code_action(kvSelect, environ)
|
||||
if kvSelect and kvRegisteredActn[kvSelect.choice] then
|
||||
if techage.submenu_verify(kvRegisteredActn, kvSelect) then
|
||||
if techage.submenu_verify(environ.owner, kvRegisteredActn, kvSelect) then
|
||||
return kvRegisteredActn[kvSelect.choice].code(kvSelect, environ)
|
||||
end
|
||||
end
|
||||
|
@ -29,7 +29,7 @@ local function on_timer(pos, elapsed)
|
||||
meta:set_string("infotext", S("Battery").." ("..percent.."%)")
|
||||
if percent == 0 then
|
||||
local node = minetest.get_node(pos)
|
||||
node.name = "techage:battery_empty"
|
||||
node.name = "techage:ta4_battery_empty"
|
||||
minetest.swap_node(pos, node)
|
||||
return false
|
||||
end
|
||||
@ -37,7 +37,7 @@ local function on_timer(pos, elapsed)
|
||||
end
|
||||
|
||||
local function register_battery(ext, percent, nici)
|
||||
minetest.register_node("techage:battery"..ext, {
|
||||
minetest.register_node("techage:ta4_battery"..ext, {
|
||||
description = S("Battery").." "..ext,
|
||||
inventory_image = 'techage_battery_inventory.png',
|
||||
wield_image = 'techage_battery_inventory.png',
|
||||
@ -63,7 +63,7 @@ local function register_battery(ext, percent, nici)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("content", BATTERY_CAPACITY * percent)
|
||||
local node = minetest.get_node(pos)
|
||||
node.name = "techage:battery"
|
||||
node.name = "techage:ta4_battery"
|
||||
minetest.swap_node(pos, node)
|
||||
on_timer(pos, 1)
|
||||
minetest.get_node_timer(pos):start(30)
|
||||
@ -75,13 +75,13 @@ local function register_battery(ext, percent, nici)
|
||||
local percent = calc_percent(tonumber(oldmetadata.fields.content))
|
||||
local stack
|
||||
if percent > 95 then
|
||||
stack = ItemStack("techage:battery")
|
||||
stack = ItemStack("techage:ta4_battery")
|
||||
elseif percent > 75 then
|
||||
stack = ItemStack("techage:battery75")
|
||||
stack = ItemStack("techage:ta4_battery75")
|
||||
elseif percent > 50 then
|
||||
stack = ItemStack("techage:battery50")
|
||||
stack = ItemStack("techage:ta4_battery50")
|
||||
elseif percent > 25 then
|
||||
stack = ItemStack("techage:battery25")
|
||||
stack = ItemStack("techage:ta4_battery25")
|
||||
else
|
||||
return
|
||||
end
|
||||
@ -104,7 +104,7 @@ register_battery("75", 0.75, 1)
|
||||
register_battery("50", 0.5, 1)
|
||||
register_battery("25", 0.25, 1)
|
||||
|
||||
minetest.register_node("techage:battery_empty", {
|
||||
minetest.register_node("techage:ta4_battery_empty", {
|
||||
description = S("Battery"),
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
@ -141,7 +141,7 @@ minetest.register_node("techage:battery_empty", {
|
||||
|
||||
if minetest.global_exists("moreores") then
|
||||
minetest.register_craft({
|
||||
output = "techage:battery 2",
|
||||
output = "techage:ta4_battery 2",
|
||||
recipe = {
|
||||
{"", "moreores:silver_ingot", ""},
|
||||
{"", "default:copper_ingot", ""},
|
||||
@ -150,7 +150,7 @@ if minetest.global_exists("moreores") then
|
||||
})
|
||||
else
|
||||
minetest.register_craft({
|
||||
output = "techage:battery 2",
|
||||
output = "techage:ta4_battery 2",
|
||||
recipe = {
|
||||
{"", "default:tin_ingot", ""},
|
||||
{"", "default:copper_ingot", ""},
|
||||
@ -159,7 +159,8 @@ else
|
||||
})
|
||||
end
|
||||
|
||||
techage.register_node({"techage:battery", "techage:battery25", "techage:battery50", "techage:battery75"},
|
||||
techage.register_node({"techage:ta4_battery", "techage:ta4_battery25",
|
||||
"techage:ta4_battery50", "techage:ta4_battery75"},
|
||||
{
|
||||
on_node_load = function(pos)
|
||||
minetest.get_node_timer(pos):start(30)
|
||||
|
@ -163,7 +163,7 @@ techage.icta_register_condition("state", {
|
||||
title = "block state request",
|
||||
formspec = {
|
||||
{
|
||||
type = "digits",
|
||||
type = "number",
|
||||
name = "number",
|
||||
label = "block number",
|
||||
default = "",
|
||||
@ -201,7 +201,7 @@ techage.icta_register_condition("fuel", {
|
||||
title = "fuel request",
|
||||
formspec = {
|
||||
{
|
||||
type = "digits",
|
||||
type = "number",
|
||||
name = "number",
|
||||
label = "block number",
|
||||
default = "",
|
||||
@ -238,7 +238,7 @@ techage.icta_register_condition("load", {
|
||||
title = "load request",
|
||||
formspec = {
|
||||
{
|
||||
type = "digits",
|
||||
type = "number",
|
||||
name = "number",
|
||||
label = "block number",
|
||||
default = "",
|
||||
@ -275,7 +275,7 @@ techage.icta_register_condition("chest", {
|
||||
title = "chest state request",
|
||||
formspec = {
|
||||
{
|
||||
type = "digits",
|
||||
type = "number",
|
||||
name = "number",
|
||||
label = "chest number",
|
||||
default = "",
|
||||
@ -314,7 +314,7 @@ techage.icta_register_condition("signaltower", {
|
||||
title = "Signal Tower state request",
|
||||
formspec = {
|
||||
{
|
||||
type = "digits",
|
||||
type = "number",
|
||||
name = "number",
|
||||
label = "Signal Tower number",
|
||||
default = "",
|
||||
@ -419,7 +419,7 @@ techage.icta_register_action("display", {
|
||||
type = "textlist",
|
||||
name = "row",
|
||||
label = "Display line",
|
||||
choices = "1,2,3,4,5,6,7,8,9",
|
||||
choices = "1,2,3,4,5",
|
||||
default = "1",
|
||||
},
|
||||
{
|
||||
@ -449,7 +449,7 @@ techage.icta_register_action("cleardisplay", {
|
||||
title = "Display: Clear screen",
|
||||
formspec = {
|
||||
{
|
||||
type = "numbers",
|
||||
type = "number",
|
||||
name = "number",
|
||||
label = "Display number",
|
||||
default = "",
|
||||
@ -537,7 +537,6 @@ techage.icta_register_action("door", {
|
||||
|
||||
function techage.icta_player_detect(own_num, number, name)
|
||||
local state = techage.send_single(own_num, number, "name", nil)
|
||||
print("state="..state.."< name="..name.."<")
|
||||
if state ~= "" then
|
||||
if name == "*" or string.find(name, state) then
|
||||
return state
|
||||
@ -552,7 +551,7 @@ techage.icta_register_condition("playerdetector", {
|
||||
title = "Player Detector name request",
|
||||
formspec = {
|
||||
{
|
||||
type = "digits",
|
||||
type = "number",
|
||||
name = "number",
|
||||
label = "Player Detector number",
|
||||
default = "",
|
||||
@ -582,7 +581,7 @@ techage.icta_register_action("set_filter", {
|
||||
title = "turn Distributor filter on/off",
|
||||
formspec = {
|
||||
{
|
||||
type = "numbers",
|
||||
type = "number",
|
||||
name = "number",
|
||||
label = "distri number",
|
||||
default = "",
|
||||
@ -612,7 +611,7 @@ techage.icta_register_action("set_filter", {
|
||||
end,
|
||||
code = function(data, environ)
|
||||
local payload = '{slot = "'..data.color..'", val = "'..data.value..'"}'
|
||||
return send_multi_string(environ, data.number, "filter", payload)
|
||||
return send_single_string(environ, data.number, "filter", payload)
|
||||
end,
|
||||
})
|
||||
|
||||
|
@ -61,7 +61,7 @@ end
|
||||
-- return the Lua code
|
||||
function techage.code_condition(kvSelect, environ)
|
||||
if kvSelect and kvRegisteredCond[kvSelect.choice] then
|
||||
if techage.submenu_verify(kvRegisteredCond, kvSelect) then
|
||||
if techage.submenu_verify(environ.owner, kvRegisteredCond, kvSelect) then
|
||||
return kvRegisteredCond[kvSelect.choice].code(kvSelect, environ)
|
||||
end
|
||||
end
|
||||
|
@ -236,7 +236,7 @@ end
|
||||
|
||||
|
||||
local function battery(pos)
|
||||
local battery_pos = minetest.find_node_near(pos, 1, {"techage:battery"})
|
||||
local battery_pos = minetest.find_node_near(pos, 1, {"techage:ta4_battery"})
|
||||
if battery_pos then
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("battery", minetest.pos_to_string(battery_pos))
|
||||
@ -408,7 +408,7 @@ local function on_receive_fields(pos, formname, fields, player)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("techage:ta4_controller", {
|
||||
minetest.register_node("techage:ta4_icta_controller", {
|
||||
description = "TA4 ICTA Controller",
|
||||
inventory_image = "techage_ta4_controller_inventory.png",
|
||||
wield_image = "techage_ta4_controller_inventory.png",
|
||||
@ -433,7 +433,7 @@ minetest.register_node("techage:ta4_controller", {
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local number = techage.add_node(pos, "techage:ta4_controller")
|
||||
local number = techage.add_node(pos, "techage:ta4_icta_controller")
|
||||
local fs_data = FS_DATA
|
||||
meta:set_string("fs_data", minetest.serialize(fs_data))
|
||||
meta:set_string("owner", placer:get_player_name())
|
||||
@ -467,7 +467,7 @@ minetest.register_node("techage:ta4_controller", {
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:ta4_controller",
|
||||
output = "techage:ta4_icta_controller",
|
||||
recipe = {
|
||||
{"basic_materials:plastic_sheet", "dye:blue", "basic_materials:plastic_sheet"},
|
||||
{"", "default:copper_ingot", ""},
|
||||
@ -491,7 +491,7 @@ local function set_input(pos, own_number, rmt_number, val)
|
||||
end
|
||||
end
|
||||
|
||||
techage.register_node({"techage:ta4_controller"}, {
|
||||
techage.register_node({"techage:ta4_icta_controller"}, {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local number = meta:get_string("number")
|
||||
|
@ -11,8 +11,10 @@
|
||||
ICTA Controller - Display
|
||||
|
||||
]]--
|
||||
|
||||
|
||||
|
||||
local NUM_ROWS = 5
|
||||
local RADIUS = 6
|
||||
|
||||
lcdlib.register_display_entity("techage:display_entity")
|
||||
|
||||
local function display_update(pos, objref)
|
||||
@ -21,8 +23,7 @@ local function display_update(pos, objref)
|
||||
text = string.gsub(text, "|", " \n")
|
||||
local texture = lcdlib.make_multiline_texture(
|
||||
"default", text,
|
||||
--120, 120, 9, "top", "#000")
|
||||
70, 70, 5, "top", "#000")
|
||||
70, 70, NUM_ROWS, "top", "#000")
|
||||
objref:set_properties({ textures = {texture},
|
||||
visual_size = {x=0.94, y=0.94} })
|
||||
end
|
||||
@ -30,10 +31,10 @@ end
|
||||
local function on_timer(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
-- check if display is loaded and a player in front of the display
|
||||
if node.name == "techage:display" then
|
||||
if node.name == "techage:ta4_display" then
|
||||
local dir = minetest.facedir_to_dir((node.param2 + 2) % 4)
|
||||
local pos2 = vector.add(pos, vector.multiply(dir, 6))
|
||||
for _, obj in pairs(minetest.get_objects_inside_radius(pos2, 6)) do
|
||||
local pos2 = vector.add(pos, vector.multiply(dir, RADIUS))
|
||||
for _, obj in pairs(minetest.get_objects_inside_radius(pos2, RADIUS)) do
|
||||
if obj:is_player() then
|
||||
lcdlib.update_entities(pos)
|
||||
break
|
||||
@ -48,7 +49,7 @@ local lcd_box = {
|
||||
wall_top = {-8/16, 15/32, -8/16, 8/16, 8/16, 8/16}
|
||||
}
|
||||
|
||||
minetest.register_node("techage:display", {
|
||||
minetest.register_node("techage:ta4_display", {
|
||||
description = "TA4 Display",
|
||||
inventory_image = 'techage_display_inventory.png',
|
||||
tiles = {"techage_display.png"},
|
||||
@ -66,7 +67,7 @@ minetest.register_node("techage:display", {
|
||||
},
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local number = techage.add_node(pos, "techage:display")
|
||||
local number = techage.add_node(pos, "techage:ta4_display")
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("number", number)
|
||||
meta:set_string("text", "My\nTechage\nTA4\nDisplay\nNo: "..number)
|
||||
@ -90,10 +91,10 @@ minetest.register_node("techage:display", {
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:display",
|
||||
output = "techage:ta4_display",
|
||||
recipe = {
|
||||
{"", "", ""},
|
||||
{"default:glass", "dye:green", "techage:ta4_wlanchip"},
|
||||
{"techage:basalt_glass_thin", "dye:green", "techage:ta4_wlanchip"},
|
||||
{"", "default:copper_ingot", ""},
|
||||
},
|
||||
})
|
||||
@ -107,7 +108,7 @@ local function add_line(meta, payload)
|
||||
else
|
||||
rows = string.split(text, "|")
|
||||
end
|
||||
if #rows > 8 then
|
||||
if #rows >= NUM_ROWS then
|
||||
table.remove(rows, 1)
|
||||
end
|
||||
table.insert(rows, payload)
|
||||
@ -119,7 +120,7 @@ local function write_row(meta, payload)
|
||||
local text = meta:get_string("text")
|
||||
if type(payload) == "table" then
|
||||
local row = tonumber(payload.row) or 0
|
||||
if row > 9 then row = 9 end
|
||||
if row > NUM_ROWS then row = NUM_ROWS end
|
||||
local str = payload.str or "oops"
|
||||
if row == 0 then
|
||||
meta:set_string("infotext", str)
|
||||
@ -132,8 +133,8 @@ local function write_row(meta, payload)
|
||||
else
|
||||
rows = string.split(text, "|")
|
||||
end
|
||||
if #rows < 9 then
|
||||
for i = #rows, 9 do
|
||||
if #rows < NUM_ROWS then
|
||||
for i = #rows, NUM_ROWS do
|
||||
table.insert(rows, " ")
|
||||
end
|
||||
end
|
||||
@ -143,7 +144,7 @@ local function write_row(meta, payload)
|
||||
end
|
||||
end
|
||||
|
||||
techage.register_node({"techage:display"}, {
|
||||
techage.register_node({"techage:ta4_display"}, {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
local node = minetest.get_node(pos)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
|
@ -16,18 +16,18 @@
|
||||
local function switch_on(pos, node, color)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("state", color)
|
||||
node.name = "techage:signaltower_"..color
|
||||
node.name = "techage:ta4_signaltower_"..color
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
|
||||
local function switch_off(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("state", "off")
|
||||
node.name = "techage:signaltower"
|
||||
node.name = "techage:ta4_signaltower"
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
|
||||
minetest.register_node("techage:signaltower", {
|
||||
minetest.register_node("techage:ta4_signaltower", {
|
||||
description = "TA4 Signal Tower",
|
||||
tiles = {
|
||||
'techage_signaltower_top.png',
|
||||
@ -44,7 +44,7 @@ minetest.register_node("techage:signaltower", {
|
||||
},
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local number = techage.add_node(pos, "techage:signaltower")
|
||||
local number = techage.add_node(pos, "techage:ta4_signaltower")
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("state", "off")
|
||||
meta:set_string("infotext", "TA4 Signal Tower "..number)
|
||||
@ -70,7 +70,7 @@ minetest.register_node("techage:signaltower", {
|
||||
})
|
||||
|
||||
for _,color in ipairs({"green", "amber", "red"}) do
|
||||
minetest.register_node("techage:signaltower_"..color, {
|
||||
minetest.register_node("techage:ta4_signaltower_"..color, {
|
||||
description = "TA4 Signal Tower",
|
||||
tiles = {
|
||||
'techage_signaltower_top.png',
|
||||
@ -98,12 +98,12 @@ for _,color in ipairs({"green", "amber", "red"}) do
|
||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
drop = "techage:signaltower",
|
||||
drop = "techage:ta4_signaltower",
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = "techage:signaltower",
|
||||
output = "techage:ta4_signaltower",
|
||||
recipe = {
|
||||
{"dye:red", "default:copper_ingot", ""},
|
||||
{"dye:orange", "default:glass", ""},
|
||||
@ -111,10 +111,10 @@ minetest.register_craft({
|
||||
},
|
||||
})
|
||||
|
||||
techage.register_node({"techage:signaltower",
|
||||
"techage:signaltower_green",
|
||||
"techage:signaltower_amber",
|
||||
"techage:signaltower_red"}, {
|
||||
techage.register_node({"techage:ta4_signaltower",
|
||||
"techage:ta4_signaltower_green",
|
||||
"techage:ta4_signaltower_amber",
|
||||
"techage:ta4_signaltower_red"}, {
|
||||
on_recv_message = function(pos, src, topic, payload)
|
||||
local node = minetest.get_node(pos)
|
||||
if topic == "green" then
|
||||
|
@ -66,7 +66,7 @@ techage.icta_register_condition("stopwatch", {
|
||||
title = "stopwatch",
|
||||
formspec = {
|
||||
{
|
||||
type = "numbers",
|
||||
type = "number",
|
||||
name = "number",
|
||||
label = "Switch number",
|
||||
default = "",
|
||||
@ -89,7 +89,7 @@ techage.icta_register_action("stopwatch", {
|
||||
title = "stopwatch",
|
||||
formspec = {
|
||||
{
|
||||
type = "numbers",
|
||||
type = "number",
|
||||
name = "number",
|
||||
label = "Display number",
|
||||
default = "",
|
||||
@ -126,7 +126,7 @@ techage.icta_register_action("stopwatch", {
|
||||
code = function(data, environ)
|
||||
local idx = ({time=1, highscore= 2, name=3})[data.type]
|
||||
local s1 = string.format('local payload = {row = %s, str = "%s "..env.stopwatch_result['..idx..']}', data.row, techage.escape(data.text))
|
||||
local s2 = string.format('techage.send_multi("%s", "%s", "row", payload)', environ.number, data.number)
|
||||
local s2 = string.format('techage.send_single("%s", "%s", "row", payload)', environ.number, data.number)
|
||||
return s1.."\n\t"..s2
|
||||
end,
|
||||
})
|
||||
|
@ -119,14 +119,24 @@ local function field_to_kvSelect(kvDefinition, kvSelect, fields)
|
||||
return kvSelect
|
||||
end
|
||||
|
||||
function techage.submenu_verify(kvDefinition, kvSelect)
|
||||
function techage.submenu_verify(owner, kvDefinition, kvSelect)
|
||||
local error = false
|
||||
local lControls = kvDefinition[kvSelect.choice].formspec
|
||||
for idx,elem in ipairs(lControls) do
|
||||
if elem.type == "numbers" then
|
||||
if not kvSelect[elem.name]:find("^[%d ]+$") then
|
||||
error = true
|
||||
end
|
||||
end
|
||||
if not techage.check_numbers(kvSelect[elem.name], owner) then
|
||||
error = true
|
||||
end
|
||||
elseif elem.type == "number" then
|
||||
if not kvSelect[elem.name]:find("^[%d]+$") then
|
||||
error = true
|
||||
end
|
||||
if not techage.check_numbers(kvSelect[elem.name], owner) then
|
||||
error = true
|
||||
end
|
||||
elseif elem.type == "digits" then -- including positions
|
||||
if not kvSelect[elem.name]:find("^[+%%-,%d]+$") then
|
||||
error = true
|
||||
|
1
init.lua
1
init.lua
@ -219,6 +219,7 @@ else
|
||||
dofile(MP.."/icta_controller/edit.lua")
|
||||
dofile(MP.."/icta_controller/battery.lua")
|
||||
--dofile(MP.."/icta_controller/stopwatch.lua")
|
||||
--dofile(MP.."/icta_controller/expression.lua")
|
||||
dofile(MP.."/icta_controller/display.lua")
|
||||
dofile(MP.."/icta_controller/signaltower.lua")
|
||||
|
||||
|
@ -408,7 +408,7 @@ Mögliche Antworten des Schiebers sind:
|
||||
- `standby` --> nichts zu tun, da Quell-Inventar leer
|
||||
- `blocked` --> kann nichts tun, da Ziel-Inventar voll
|
||||
|
||||
Dieser Status wird bei vielen Blöcken gleichzeitig auch über den Info-Text angezeigt.
|
||||
Dieser Status und weitere Informationen werden auch ausgegeben, wenn mit dem Schraubenschlüssel auf den Block geklickt wird.
|
||||
|
||||
[ta3_logic|image]
|
||||
|
||||
|
@ -284,6 +284,64 @@ Teil des Chemischen Reaktors. Wird zur Aufbewahrung von Stoffen in Pulver- oder
|
||||
|
||||
|
||||
|
||||
|
||||
## ICTA Controller
|
||||
|
||||
Der ICTA Controller (ICTA steht für "If Condition Then Action") dient zur Überwachung und Steuerung von Maschinen. Mit dem Controller kann man Daten von Maschinen und anderen Blöcken einlesen und abhängig davon andere Maschinen und Blöcke ein-/ausschalten.
|
||||
|
||||
Einlesen von Maschinendaten sowie das Steuern von Blöcken und Maschinen erfolgt über sogenannte Kommandos. Für das Verständnis, wie Kommandos funktionieren, ist das Kapitel TA3 -> Logik-/Schalt-Blöcke wichtig.
|
||||
|
||||
Der Controller benötigt für den Betrieb eine Batterie. Das Display dient zur Ausgabe von Daten, der Signal Tower zur Anzeige von Fehlern.
|
||||
|
||||
[ta4_icta_controller|image]
|
||||
|
||||
|
||||
|
||||
### TA4 ICTA Controller
|
||||
|
||||
Der Controller arbeitet auf das Basis von ```IF <condition> THEN <action>``` Regeln. Es können bis zu 8 Regeln pro Controller angelegt werden.
|
||||
|
||||
Beispiele für Regeln sind:
|
||||
|
||||
- Wenn ein Verteiler verstopft ist (```blocked```), soll der Schieber davor ausgeschaltet werden
|
||||
- Wenn eine Maschine einen Fehler anzeigt, soll dieser auf dem Display ausgegeben werden
|
||||
|
||||
Der Controller prüft diese Regeln zyklisch. Dazu muss pro Regel eine Zykluszeit in Sekunden (```Cycle/s```) angegeben werden (1..1000).
|
||||
|
||||
Für Regeln die einen on/off Eingang auswerten, bspw. von einen Schalter oder Detektor, muss als Zykluszeit 0 angegeben werden. Der Wert 0 bedeutet, dass diese Regel immer dann ausgeführt werden soll, wenn sich das Eingangssignal geändert hat, also bspw. der Button einen neuen Wert gesendet hat.
|
||||
|
||||
Alle Regeln sollten nur so oft wie notwendig ausgeführt werden. Dies hat zwei Vorteile:
|
||||
|
||||
- die Batterie des Controllers hält länger (jeder Controller benötigt eine Batterie)
|
||||
- die Last für den Server ist geringer (damit weniger Lags)
|
||||
|
||||
Man muss für jede action eine Verzögerungszeit (```after/s```) einstellen. Soll die Aktion sofort ausgeführt werden, ist 0 einzugeben.
|
||||
|
||||
Der Controller hat eine eigene Hilfe und Hinweise zu allen Kommandos über das Controller-Menü.
|
||||
|
||||
[ta4_icta_controller|image]
|
||||
|
||||
### Batterie
|
||||
|
||||
Die Batterie muss in unmittelbarer Nähe zum Controller platziert werden, also an einer der 26 Positionen um den Controller herum.
|
||||
|
||||
[ta4_battery|image]
|
||||
|
||||
### TA4 Display
|
||||
|
||||
Das Display zeigt nach dem Platzieren seine Nummer an. Über diese Nummer kann das Display angesprochen werden. Auf dem Display können Texte ausgegeben werden, wobei das Display 5 Zeilen und damit 5 unterschiedliche Texte darstellen kann.
|
||||
|
||||
[ta4_display|image]
|
||||
|
||||
|
||||
### TA4 Signal Tower
|
||||
|
||||
Der Signal Tower kann rot, grün und orange anzeigen. Eine Kombination der 3 Farben ist nicht möglich.
|
||||
|
||||
[ta4_signaltower|image]
|
||||
|
||||
|
||||
|
||||
## Weitere TA4 Blöcke
|
||||
|
||||
|
||||
|
@ -138,6 +138,11 @@
|
||||
- [TA4 Reaktorständer / reactor stand](./manual_ta4_DE.md#ta4-reaktorständer--reactor-stand)
|
||||
- [TA4 Reaktorsockel / reactor base](./manual_ta4_DE.md#ta4-reaktorsockel--reactor-base)
|
||||
- [TA4 Silo / silo](./manual_ta4_DE.md#ta4-silo--silo)
|
||||
- [ICTA Controller](./manual_ta4_DE.md#icta-controller)
|
||||
- [TA4 ICTA Controller](./manual_ta4_DE.md#ta4-icta-controller)
|
||||
- [Batterie](./manual_ta4_DE.md#batterie)
|
||||
- [TA4 Display](./manual_ta4_DE.md#ta4-display)
|
||||
- [TA4 Signal Tower](./manual_ta4_DE.md#ta4-signal-tower)
|
||||
- [Weitere TA4 Blöcke](./manual_ta4_DE.md#weitere-ta4-blöcke)
|
||||
- [TA4 Tank / TA4 Tank](./manual_ta4_DE.md#ta4-tank--ta4-tank)
|
||||
- [TA4 Pumpe / TA4 Pump](./manual_ta4_DE.md#ta4-pumpe--ta4-pump)
|
||||
|
Loading…
Reference in New Issue
Block a user