Tuxilio replace much changed words
This commit is contained in:
parent
4a2e607b86
commit
77e881533e
@ -163,7 +163,7 @@ minetest.register_node("mymod:mynode", {
|
||||
end,
|
||||
on_construct = function(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", "Mein Block!")
|
||||
meta:set_string("infotext", "Mein Node!")
|
||||
end,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
-- Überprüfen des Platzierers
|
||||
|
@ -211,7 +211,7 @@ Sie haben optional auch einen "cooktime" Parameter, welcher
|
||||
definiert wie lange die Items zu kochen brauchen.
|
||||
Wenn dies nicht gesetzt ist, ist der Standard 3.
|
||||
|
||||
Das Rezept oben funktioniert, wenn der Kohleblock im Input-Slot ist,
|
||||
Das Rezept oben funktioniert, wenn der Kohlenode im Input-Slot ist,
|
||||
mit irgendeiner Form von Brennstoff darunter.
|
||||
Es stellt nach 10 Sekunden ein Diamant-Fragment her!
|
||||
|
||||
|
@ -26,10 +26,10 @@ In diesem Kapitel erfahren Sie, wie Sie grundlegende Aktionen auf der Karte durc
|
||||
Die Minetest-Karte ist in Map-Blöcke(nicht zu verwechseln mit Blöcken in deutschen) aufgeteilt, wobei jeder Map-Block ein Würfel der
|
||||
Kantenlänge 16 ist. Während die Spieler auf der Karte unterwegs sind, werden Map-Blöcke erstellt, geladen,
|
||||
aktiv und entladen. Bereiche der Karte, die noch nicht geladen sind, sind voll von
|
||||
*ignore*-Blöcken, einem unpassierbaren, nicht auswählbaren Platzhalterblock. Leerer Raum ist
|
||||
voll von *Luft*-Blöcken, einem unsichtbaren Block, durch den man hindurchgehen kann.
|
||||
*ignore*-Nodes, einem unpassierbaren, nicht auswählbaren Platzhalternode. Leerer Raum ist
|
||||
voll von *Luft*-Blöcken, einem unsichtbaren Node, durch den man hindurchgehen kann.
|
||||
|
||||
Ein aktiver Map-Block ist ein Block, der geladen ist und für den Aktualisierungen durchgeführt werden.
|
||||
Ein aktiver Map-Block ist ein Node, der geladen ist und für den Aktualisierungen durchgeführt werden.
|
||||
|
||||
Geladene Map-Blöcke werden oft als *aktive Blöcke* bezeichnet. Aktive Blöcke können
|
||||
von Mods oder Spielern gelesen oder beschrieben werden und haben aktive Entities. Die Engine
|
||||
|
@ -27,7 +27,7 @@ definiert.
|
||||
## Was sind Objekte, Spieler, und Entities?
|
||||
|
||||
Spieler und Entities sind beide Arten von Objekten. Ein Objekt ist etwas, das sich unabhängig
|
||||
vom Block-Raster bewegen kann und Eigenschaften wie Geschwindigkeit und Skalierung besitzt.
|
||||
vom Node-Raster bewegen kann und Eigenschaften wie Geschwindigkeit und Skalierung besitzt.
|
||||
Objekte sind keine Gegenstände, und sie haben ihr eigenes Registrierungssystem.
|
||||
|
||||
Es gibt ein paar Unterschiede zwischen Spielern und Entities.
|
||||
@ -203,12 +203,12 @@ end
|
||||
```
|
||||
|
||||
Minetest kann `get_staticdata()` so oft wie gewünscht und zu jeder Zeit aufrufen.
|
||||
Der Grund dafür ist, dass Minetest nicht darauf wartet, dass ein MapBlock inaktiv wird,
|
||||
um ihn zu speichern, da dies zu Datenverlusten führen würde. MapBlocks werden ungefähr alle 18
|
||||
Der Grund dafür ist, dass Minetest nicht darauf wartet, dass ein Map-Block inaktiv wird,
|
||||
um ihn zu speichern, da dies zu Datenverlusten führen würde. Map-Blöcke werden ungefähr alle 18
|
||||
Sekunden gespeichert, also sollten Sie ein ähnliches Intervall für den Aufruf von `get_staticdata()` feststellen.
|
||||
|
||||
`on_activate()` wird dagegen nur aufgerufen, wenn eine Entity
|
||||
aktiv wird, entweder wenn der MapBlock aktiv wird oder wenn die Entity spawnen wird.
|
||||
aktiv wird, entweder wenn der Map-Block aktiv wird oder wenn die Entity spawnen wird.
|
||||
Dies bedeutet, dass staticdata leer sein könnte.
|
||||
|
||||
Schließlich müssen Sie die Typentabelle mit der treffenden Bezeichnung `register_entity` registrieren.
|
||||
|
@ -31,26 +31,26 @@ In diesem Kapitel erfahren Sie, wie Sie Daten speichern können.
|
||||
### Was sind Metadaten?
|
||||
|
||||
In Minetest sind Metadaten ein Key-Value-Speicher, der verwendet wird, um benutzerdefinierte Daten an etwas anzuhängen.
|
||||
Sie können Metadaten verwenden, um Informationen zu einem Block, Spieler oder ItemStack zu speichern.
|
||||
Sie können Metadaten verwenden, um Informationen zu einem Node, Spieler oder ItemStack zu speichern.
|
||||
|
||||
Jede Art von Metadaten verwendet genau dieselbe API.
|
||||
Metadaten speichern Werte als Strings, aber es gibt eine Reihe von Methoden um
|
||||
andere primitive Typen zu konvertieren und zu speichern.
|
||||
|
||||
Einige Schlüssel in Metadaten können eine besondere Bedeutung haben.
|
||||
Zum Beispiel wird `infotext` in den Block-Metadaten verwendet, um den Tooltip zu speichern,
|
||||
der angezeigt wird, wenn man mit dem Fadenkreuz über den Block fährt.
|
||||
Zum Beispiel wird `infotext` in den Node-Metadaten verwendet, um den Tooltip zu speichern,
|
||||
der angezeigt wird, wenn man mit dem Fadenkreuz über den Node fährt.
|
||||
Um Konflikte mit anderen Mods zu vermeiden, sollten Sie die Standard-Namensraum
|
||||
Konvention für Schlüssel verwenden: `Modname:Schlüsselname`.
|
||||
Die Ausnahme sind konventionelle Daten wie der Name des Besitzers, der als
|
||||
`owner` abgespeichert wird.
|
||||
|
||||
Metadaten sind Daten über Daten.
|
||||
Die Daten selbst, wie der Typ eines Blockes oder die Anzahl eines Stapels, sind keine Metadaten.
|
||||
Die Daten selbst, wie der Typ eines Nodes oder die Anzahl eines Stapels, sind keine Metadaten.
|
||||
|
||||
### Abrufen eines Metadatenobjekts
|
||||
|
||||
Wenn Sie die Position eines Blockes kennen, können Sie seine Metadaten abrufen:
|
||||
Wenn Sie die Position eines Nodes kennen, können Sie seine Metadaten abrufen:
|
||||
|
||||
```lua
|
||||
local meta = minetest.get_meta({ x = 1, y = 2, z = 3 })
|
||||
@ -94,15 +94,15 @@ print(meta:get_string("count")) --> "3"
|
||||
|
||||
### Besondere Schlüssel
|
||||
|
||||
`infotext` wird in Block-Metadaten verwendet, um einen Tooltip anzuzeigen, wenn das Fadenkreuz über einem Block schwebt.
|
||||
Dies ist nützlich, um die Eigentümerschaft oder den Status eines Blockes anzuzeigen.
|
||||
`infotext` wird in Node-Metadaten verwendet, um einen Tooltip anzuzeigen, wenn das Fadenkreuz über einem Node schwebt.
|
||||
Dies ist nützlich, um die Eigentümerschaft oder den Status eines Nodes anzuzeigen.
|
||||
|
||||
`description` wird in ItemStack-Metadaten verwendet, um die Beschreibung zu überschreiben,
|
||||
wenn der Mauszeiger über den Stack in einem Inventar bewegt wird.
|
||||
Sie können Farben verwenden, indem Sie sie mit `minetest.colorize()` kodieren.
|
||||
|
||||
`owner` ist ein allgemeiner Schlüssel, der verwendet wird, um den Benutzernamen des Spielers zu speichern,
|
||||
der Eigentümer des Elements oder Blocks ist.
|
||||
der Eigentümer des Elements oder Node ist.
|
||||
|
||||
### Speichern von Tabellen
|
||||
|
||||
@ -123,7 +123,7 @@ daten = minetest.deserialize(minetest:get_string("foo"))
|
||||
|
||||
### Private Metadaten
|
||||
|
||||
Standardmäßig werden alle Block-Metadaten an den Client gesendet.
|
||||
Standardmäßig werden alle Node-Metadaten an den Client gesendet.
|
||||
Sie können Schlüssel als privat markieren, um dies zu verhindern.
|
||||
|
||||
```lua
|
||||
@ -226,7 +226,7 @@ wie sie formatiert sind und wie groß sie sind.
|
||||
Als Richtlinie gilt, dass kleine Daten bis zu 10K, mittlere Daten bis zu 10MB und große
|
||||
Daten jede Größe darüber sind.
|
||||
|
||||
Block-Metadaten sind eine gute Wahl, wenn Sie blockbezogene Daten speichern müssen.
|
||||
Node-Metadaten sind eine gute Wahl, wenn Sie nodebezogene Daten speichern müssen.
|
||||
Die Speicherung mittlerer Daten ist recht effizient, wenn Sie sie privat machen.
|
||||
|
||||
Item-Metadaten sollten nur zum Speichern kleiner Datenmengen verwendet werden, da es nicht möglich ist,
|
||||
@ -243,5 +243,5 @@ Sie sind gut geeignet für große Datenmengen.
|
||||
|
||||
## Sie sind dran
|
||||
|
||||
* Erstellen Sie einen Block, der verschwindet, nachdem er fünfmal geschlagen wurde.
|
||||
(Verwenden Sie `on_punch` in der Definition des Blockes und `minetest.set_node`.)
|
||||
* Erstellen Sie einen Node, der verschwindet, nachdem er fünfmal geschlagen wurde.
|
||||
(Verwenden Sie `on_punch` in der Definition des Nodes und `minetest.set_node`.)
|
||||
|
@ -12,7 +12,7 @@ redirect_from:
|
||||
## Einleitung <!-- omit in toc -->
|
||||
|
||||
Die periodische Ausführung einer Funktion auf bestimmten Knoten ist eine häufige Aufgabe.
|
||||
Minetest bietet dafür zwei Methoden: Aktive Mapblock Modifikatoren (ABMs) und Block-Timer(node timers).
|
||||
Minetest bietet dafür zwei Methoden: Aktive Map-Block Modifikatoren (ABMs) und Node-Timer(node timers).
|
||||
|
||||
ABMs scannen alle geladenen Map-Blöcke auf der Suche nach Blöcken, die einem Kriterium entsprechen.
|
||||
Sie eignen sich am besten für Blöcken, die in der Welt häufig vorkommen,
|
||||
@ -20,29 +20,29 @@ wie zum Beispiel Gras.
|
||||
Sie haben einen hohen CPU-Overhead, aber einen geringen Speicher- und Storage-Overhead.
|
||||
|
||||
Für Blöcke, die ungewöhnlich sind oder bereits Metadaten verwenden, wie Öfen
|
||||
und Maschinen, sollten stattdessen Blocktimer verwendet werden.
|
||||
Blocktimer funktionieren, indem sie die ausstehenden Timer in jedem MapBlock verfolgen und dann ausführen
|
||||
und Maschinen, sollten stattdessen Nodetimer verwendet werden.
|
||||
Nodetimer funktionieren, indem sie die ausstehenden Timer in jedem Map-Block verfolgen und dann ausführen
|
||||
wenn sie ablaufen.
|
||||
Dies bedeutet, dass die Zeitgeber nicht alle geladenen Blöcke durchsuchen müssen, um Übereinstimmungen zu finden,
|
||||
sondern stattdessen etwas mehr Speicherplatz für die Verfolgung
|
||||
der ausstehenden Timer benötigen.
|
||||
|
||||
- [Blocktimer](#blocktimer)
|
||||
- [Aktive Mapblock Modifikatoren](#aktive-mapblock-modifikatoren)
|
||||
- [Nodetimer](#nodetimer)
|
||||
- [Aktive Map-Block Modifikatoren](#aktive-mapblock-modifikatoren)
|
||||
- [Sie sind dran](#sie-sind-dran)
|
||||
|
||||
## Blocktimer
|
||||
## Nodetimer
|
||||
|
||||
Blocktimer sind direkt an einen einzelnen Knoten gebunden.
|
||||
Sie können Blocktimer verwalten, indem Sie ein NodeTimerRef-Objekt erhalten.
|
||||
Nodetimer sind direkt an einen einzelnen Knoten gebunden.
|
||||
Sie können Nodetimer verwalten, indem Sie ein NodeTimerRef-Objekt erhalten.
|
||||
|
||||
```lua
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:start(10.5) -- in Sekunden
|
||||
```
|
||||
|
||||
Wenn der Zeitgeber eines Blockes abgelaufen ist, wird die Methode `on_timer` in der Definitionstabelle des Blockes
|
||||
aufgerufen. Die Methode benötigt nur einen einzigen Parameter, die Position des Blockes:
|
||||
Wenn der Zeitgeber eines Nodes abgelaufen ist, wird die Methode `on_timer` in der Definitionstabelle des Nodes
|
||||
aufgerufen. Die Methode benötigt nur einen einzigen Parameter, die Position des Nodes:
|
||||
|
||||
```lua
|
||||
minetest.register_node("autotuer:offene_tuer", {
|
||||
@ -58,7 +58,7 @@ Es ist auch möglich, `get_node_timer(pos)` innerhalb von `on_timer` zu verwende
|
||||
dass Sie false zurückgeben, um Konflikte zu vermeiden.
|
||||
|
||||
Sie haben vielleicht eine Einschränkung bei den Zeitgebern bemerkt: Aus Optimierungsgründen ist
|
||||
nur eine Art von Timern pro Blocktyp und nur ein Timer pro Block möglich.
|
||||
nur eine Art von Timern pro Nodetyp und nur ein Timer pro Node möglich.
|
||||
|
||||
|
||||
## Aktive Mapblock Modifikatoren
|
||||
@ -69,7 +69,7 @@ in der Nähe von Wasser vorkommen kann.
|
||||
```lua
|
||||
minetest.register_node("aliens:gras", {
|
||||
description = "Aliengras",
|
||||
light_source = 3, -- Der Block strahlt Licht aus. Min 0, max 14
|
||||
light_source = 3, -- Der Node strahlt Licht aus. Min 0, max 14
|
||||
tiles = {"aliens_grass.png"},
|
||||
groups = {choppy=1},
|
||||
on_use = minetest.item_eat(20)
|
||||
@ -79,7 +79,7 @@ minetest.register_abm({
|
||||
nodenames = {"default:dirt_with_grass"},
|
||||
neighbors = {"default:water_source", "default:water_flowing"},
|
||||
interval = 10.0, -- Wird alle 10 Sekunden ausgeführt
|
||||
chance = 50, -- Jeder Block hat eine Chance von 1 zu 50 ausgewählt zu werden
|
||||
chance = 50, -- Jeder Node hat eine Chance von 1 zu 50 ausgewählt zu werden
|
||||
action = function(pos, node, active_object_count,
|
||||
active_object_count_wider)
|
||||
local pos = {x = pos.x, y = pos.y + 1, z = pos.z}
|
||||
@ -88,9 +88,9 @@ minetest.register_abm({
|
||||
})
|
||||
```
|
||||
|
||||
Dieser ABM läuft alle zehn Sekunden, und für jeden passenden Block besteht eine
|
||||
Dieser ABM läuft alle zehn Sekunden, und für jeden passenden Node besteht eine
|
||||
Chance von 1 zu 50, dass es ausgeführt wird.
|
||||
Wenn die ABM auf einem Block ausgeführt wird, wird ein fremder Grasblock über ihm platziert.
|
||||
Wenn die ABM auf einem Node ausgeführt wird, wird ein fremder Grasnode über ihm platziert.
|
||||
Bitte seien Sie gewarnt, dies löscht alle Blöcke, die sich zuvor an dieser Position befanden.
|
||||
Um dies zu verhindern, sollten Sie eine Überprüfung mit minetest.get_node einbauen, um sicherzustellen, dass Platz für das Gras vorhanden ist.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user