Finished chat.md

This commit is contained in:
debiankaios 2022-08-27 23:15:25 +02:00
parent c1299491f9
commit 3f195de1bf
2 changed files with 68 additions and 66 deletions

View File

@ -7,20 +7,20 @@ description: Registrierung eines Chatbefehls und Behandlung von Chatnachrichten
redirect_from: /de/chapters/chat.html redirect_from: /de/chapters/chat.html
cmd_online: cmd_online:
level: warning level: warning
title: Offline players can run commands title: Offline-Spieler können Befehle ausführen
message: <p>A player name is passed instead of a player object because mods message: <p>Ein Spielername wird anstelle eines Spielerobjekts übergeben, da Mods
can run commands on behalf of offline players. For example, the IRC Befehle im Namen von Offline-Spielern ausführen können. Zum Beispiel erlaubt die IRC-
bridge allows players to run commands without joining the game.</p> Brücke den Spielern, Befehle auszuführen, ohne dem Spiel beizutreten.</p>
<p>So make sure that you don't assume that the player is online. <p>Stellen Sie also sicher, dass Sie nicht davon ausgehen, dass der Spieler online ist.
You can check by seeing if <pre>minetest.get_player_by_name</pre> returns a player.</p> Du kannst überprüfen, ob <pre>minetest.get_player_by_name</pre> einen Spieler liefert.</p>
cb_cmdsprivs: cb_cmdsprivs:
level: warning level: warning
title: Privileges and Chat Commands title: Privilegien und Chat-Befehle
message: The shout privilege isn't needed for a player to trigger this callback. message: Das "Shout"-Privileg ist für einen Spieler nicht erforderlich, um diesen Callback auszulösen.
This is because chat commands are implemented in Lua, and are just Das liegt daran, dass Chat-Befehle in Lua implementiert sind, und nur
chat messages that begin with a /. Chat-Nachrichten sind, die mit einem / beginnen.
--- ---
@ -30,10 +30,10 @@ Mods können mit dem Spielerchat interagieren, einschließlich
Senden von Nachrichten, Abfangen von Nachrichten und Registrieren von Chat-Befehlen. Senden von Nachrichten, Abfangen von Nachrichten und Registrieren von Chat-Befehlen.
- [Senden von Nachrichten an alle Spieler](#senden-von-nachrichten-an-alle-spieler) - [Senden von Nachrichten an alle Spieler](#senden-von-nachrichten-an-alle-spieler)
- [Sending Messages to Specific Players](#sending-messages-to-specific-players) - [Nachrichten an bestimmte Spieler senden](#nachrichten-an-bestimmte-spieler-senden)
- [Chat Commands](#chat-commands) - [Chat-Befehle](#chat-befehle)
- [Complex Subcommands](#complex-subcommands) - [Complex Subcommands](#complex-subcommands)
- [Intercepting Messages](#intercepting-messages) - [Abfangen von Nachrichten](#abfangen-von-nachrichten)
## Senden von Nachrichten an alle Spieler ## Senden von Nachrichten an alle Spieler
@ -51,20 +51,20 @@ Hier ist ein Beispiel dafür, wie dies im Spiel aussieht:
Die Nachricht erscheint in einer separaten Zeile, um sie vom Spieler-Chat im Spiel zu unterscheiden. Die Nachricht erscheint in einer separaten Zeile, um sie vom Spieler-Chat im Spiel zu unterscheiden.
## Sending Messages to Specific Players ## Nachrichten an bestimmte Spieler senden
To send a message to a specific player, call the chat_send_player function: Um eine Nachricht an einen bestimmten Spieler zu senden, rufen Sie die Funktion chat_send_player auf:
```lua ```lua
minetest.chat_send_player("player1", "This is a chat message for player1") minetest.chat_send_player("Spieler1", "Dies ist eine Chat-Nachricht für Spieler1")
``` ```
This message displays in the same manner as messages to all players, but is Diese Nachricht wird auf dieselbe Weise angezeigt wie die Nachrichten an alle Spieler, ist aber
only visible to the named player, in this case, player1. nur für den benannten Spieler sichtbar, in diesem Fall für Spieler1.
## Chat Commands ## Chat-Befehle
To register a chat command, for example `/foo`, use `register_chatcommand`: Um einen Chat-Befehl zu registrieren, zum Beispiel `/foo`, verwenden Sie `register_chatcommand`:
```lua ```lua
minetest.register_chatcommand("foo", { minetest.register_chatcommand("foo", {
@ -72,93 +72,93 @@ minetest.register_chatcommand("foo", {
interact = true, interact = true,
}, },
func = function(name, param) func = function(name, param)
return true, "You said " .. param .. "!" return true, "Sie sagten " .. param .. "!"
end, end,
}) })
``` ```
In the above snippet, `interact` is listed as a required Im obigen Ausschnitt ist "interact" als erforderliches
[privilege](privileges.html) meaning that only players with the `interact` privilege can run the command. [Privileg](privileges.html) aufgeführt, was bedeutet, dass nur Spieler mit dem Privileg "interact" den Befehl ausführen können.
Chat commands can return up to two values, Chat-Befehle können bis zu zwei Werte zurückgeben,
the first being a Boolean indicating success, and the second being a Der erste ist ein boolescher Wert, der den Erfolg anzeigt, und der zweite ist eine
message to send to the user. Nachricht, die an den Benutzer gesendet wird.
{% include notice.html notice=page.cmd_online %} {% include notice.html notice=page.cmd_online %}
## Complex Subcommands ## Komplexe Unterbefehle
It is often required to make complex chat commands, such as: Es wird oft benötigt, komplexe Chat-Befehle zu bereitzustellen, wie z.B.:
* `/msg <to> <message>` * `/msg <zu> <Nachricht>`
* `/team join <teamname>` * `/team join <Teamname>`
* `/team leave <teamname>` * `/team leave <Teamname>`
* `/team list` * `/team list`
This is usually done using [Lua patterns](https://www.lua.org/pil/20.2.html). Dies geschieht normalerweise mit [Lua-Mustern] (https://www.lua.org/pil/20.2.html).
Patterns are a way of extracting stuff from text using rules. Patterns sind eine Methode, um anhand von Regeln Dinge aus Text zu extrahieren.
```lua ```lua
local to, msg = string.match(param, "^([%a%d_-]+) (*+)$") local zu, msg = string.match(param, "^([%a%d_-]+) (*+)$")
``` ```
The above code implements `/msg <to> <message>`. Let's go through left to right: Der obige Code implementiert `/msg <zu> <Nachricht>`. Lassen Sie uns von links nach rechts vorgehen:
* `^` means match the start of the string. * `^` bedeutet, dass der Anfang der Zeichenkette übereinstimmt.
* `()` is a matching group - anything that matches stuff in here will be * `()` ist eine übereinstimmende Gruppe - alles, was hier drin steht, wird
returned from string.match. von string.match zurückgegeben.
* `[]` means accept characters in this list. * `[]` bedeutet, dass die Zeichen in dieser Liste akzeptiert werden.
* `%a` means accept any letter and `%d` means accept any digit. * `%a` bedeutet, jeden Buchstaben zu akzeptieren und `%d` bedeutet, eine beliebige Ziffer zu akzeptieren.
* `[%a%d_-]` means accept any letter or digit or `_` or `-`. * `[%a%d_-]` bedeutet, einen beliebigen Buchstaben, eine beliebige Ziffer, `_` oder `-` zu akzeptieren.
* `+` means match the thing before one or more times. * `+` bedeutet, dass die Sache ein oder mehrere Male übereinstimmt.
* `*` means match any character in this context. * `*` bedeutet, dass ein beliebiges Zeichen in diesem Zusammenhang übereinstimmt.
* `$` means match the end of the string. * `$` bedeutet, das Ende der Zeichenkette zu finden.
Put simply, the pattern matches the name (a word with only letters/numbers/-/_), Einfach ausgedrückt: Das Muster entspricht dem Namen (ein Wort mit nur Buchstaben/Zahlen/-/_),
then a space, then the message (one or more of any character). The name and dann ein Leerzeichen, dann die Nachricht (ein oder mehrere beliebige Zeichen). Der Name und die
message are returned, because they're surrounded by parentheses. werden zurückgegeben, da sie von Klammern umgeben sind.
That's how most mods implement complex chat commands. A better guide to Lua Das ist die Art und Weise, wie die meisten Mods komplexe Chat-Befehle implementieren. Eine bessere Anleitung für Lua
Patterns would probably be the Patterns wäre wahrscheinlich das
[lua-users.org tutorial](http://lua-users.org/wiki/PatternsTutorial) [lua-users.org tutorial](http://lua-users.org/wiki/PatternsTutorial)
or the [PIL documentation](https://www.lua.org/pil/20.2.html). oder die [PIL-Dokumentation](https://www.lua.org/pil/20.2.html).
<p class="book_hide"> <p class="book_hide">
There is also a library written by the author of this book which can be used Es gibt auch eine vom Autor dieses Buches geschriebene Bibliothek, mit der man benutzen
to make complex chat commands without patterns called kann um komplexe Chat-Befehle ohne Muster zu erstellen, den
<a href="https://gitlab.com/rubenwardy/ChatCmdBuilder">Chat Command Builder</a>. <a href="https://gitlab.com/rubenwardy/ChatCmdBuilder">Chat Command Builder</a>.
</p> </p>
## Intercepting Messages ## Abfangen von Nachrichten
To intercept a message, use register_on_chat_message: Um eine Nachricht abzufangen, verwenden Sie register_on_chat_message:
```lua ```lua
minetest.register_on_chat_message(function(name, message) minetest.register_on_chat_message(function(name, message)
print(name .. " said " .. message) print(name .. " sagte " .. message)
return false return false
end) end)
``` ```
By returning false, you allow the chat message to be sent by the default Wenn Sie false zurückgeben, erlauben Sie, dass die Chat-Nachricht vom Standard
handler. You can actually remove the line `return false` and it would still Handler gesendet wird. Sie können die Zeile `return false` sogar entfernen und es würde immer noch
work the same, because `nil` is returned implicitly and is treated like false. funktionieren, da `nil` implizit zurückgegeben wird und wie false behandelt wird.
{% include notice.html notice=page.cb_cmdsprivs %} {% include notice.html notice=page.cb_cmdsprivs %}
You should make sure you take into account that it may be a chat command, Sie sollten berücksichtigen, dass es sich um einen Chat-Befehl handeln könnte,
or the user may not have `shout`. oder der Benutzer vielleicht kein `shout` hat.
```lua ```lua
minetest.register_on_chat_message(function(name, message) minetest.register_on_chat_message(function(name, message)
if message:sub(1, 1) == "/" then if message:sub(1, 1) == "/" then
print(name .. " ran chat command") print(name .. " hat einen Chat-Befehl ausgeführt")
elseif minetest.check_player_privs(name, { shout = true }) then elseif minetest.check_player_privs(name, { shout = true }) then
print(name .. " said " .. message) print(name .. " sagte " .. message)
else else
print(name .. " tried to say " .. message .. print(name .. " versucht zu sagen " .. message ..
" but doesn't have shout") " hat aber kein shout")
end end
return false return false

View File

@ -8,7 +8,7 @@ bulk = bulk
Chapter = Kapitel Chapter = Kapitel
chat message = Chat-Nachricht chat message = Chat-Nachricht
child = Kind child = Kind
Command = Command Command = Befehl
Cubic Nodes = Würfelförmiger Block Cubic Nodes = Würfelförmiger Block
craft slots = Handwerksplätze craft slots = Handwerksplätze
Damage = Schaden Damage = Schaden
@ -74,9 +74,11 @@ priv = priv
privilege = Privileg privilege = Privileg
punch = schlagen punch = schlagen
Radians = Radiant Radians = Radiant
shout = shout
small data = kleine Daten small data = kleine Daten
Stack = Stack Stack = Stack
storage = Storage storage = Storage
Subcommand = Unterbefehl
table = Tabelle table = Tabelle
tile = Kachel tile = Kachel
tiles = Kacheln tiles = Kacheln