Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 1 | SYNOPSIS |
| 2 | #include <commands.h> |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 3 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 4 | void add_action(string|closure fun, string cmd); |
| 5 | void add_action(string|closure fun, string cmd, int flag); |
| 6 | void add_action(string|closure fun); /* veraltet */ |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 7 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 8 | BESCHREIBUNG |
| 9 | Setzt eine lokale Funktion fun, die aufgerufen wird, wenn der Spieler |
| 10 | das Kommandos <cmd< eintippt. Der Funktion werden die Argumente des |
| 11 | vom Spieler eingegebenen Kommandos als string uebergeben. Die |
| 12 | Funktion muss entweder 1 zurueck geben, wenn das Kommando erfolgreich |
| 13 | ausgefuehrt werden konnte, sonst 0. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 14 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 15 | Wenn das Kommando nicht erfolgreich ausgefuehrt werden konnte, sucht |
| 16 | der Parser weiter nach einer passenden Funktion, bis eine solche |
| 17 | 1 zurueck liefert. Falls der Parser keine Funktion findet, wird an |
| 18 | den Spieler eine Fehlermeldung ausgegeben. ("Wie bitte?") |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 19 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 20 | Wenn add_action() ohne das zweite Argument (string cmd) aufgerufen |
| 21 | wird, muss dieses mit add_verb() oder add_xverb() angegeben werden. |
| 22 | DIESE DEKLARATION IST JEDOCH VERALTET UND SOLLTE NICHT VERWENDET |
| 23 | WERDEN. Sie funktioniert auch nur, wenn USE_DEPRECATED gesetzt ist. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 24 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 25 | Die Funktion fun wird mit einem string als Argument aufgerufen, der |
| 26 | die Worte nach dem Verb in der Inputzeile enthaelt. Das Verb kann |
| 27 | mit der Efun query_verb() abgefragt werden. Das Verb ist immer das |
| 28 | erste Wort in der Inputzeile bis zum ersten Leerschlag. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 29 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 30 | add_action() muss immer aus einer init() Routine heraus aufgerufen |
| 31 | werden. Das Objekt, welches das Kommando cmd definiert, muss sich in |
| 32 | der Umgebung des Spielers befinden; also entweder der Spieler selbst, |
| 33 | im Inventar des Spielers, der Raum, in dem sich der Spieler befindet |
| 34 | oder ein Objekt im gleichen Raum wie der Spieler. Wenn der Spieler |
| 35 | die Umgebung des Objekts verlaesst, werden alle von add_action() |
| 36 | definierten Kommandos automatisch entfernt. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 37 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 38 | Die Kommandos lassen sich auch manuell entfernen. Die Efun dazu lautet |
| 39 | remove_actions(). |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 40 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 41 | Wenn das Argument <flag> AA_SHORT (d.h. 1) ist, koennen Argumente von |
| 42 | cmd ohne einen Leerschlag an cmd angehaengt sein. An die Funktion fun |
| 43 | werden alle Zeichen nach dem ersten Leerschlag als Argument |
| 44 | uebergeben. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 45 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 46 | Wenn <flag> AA_NOSPACE (d.h. 2) ist, koennen die Argumente wiederum |
| 47 | ohne Leerschlag ans Verb angehaengt sein. Im Unterschied zu AA_SHORT |
| 48 | werden alle Zeichen nach dem Verb als Argument an die Funktion |
| 49 | uebergeben. Die Zeichen, welche nicht durch einen Leerschlag vom |
| 50 | Verb getrennt sind, werden ZUSAETZLICH von query_verb() zurueck |
| 51 | gegeben. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 52 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 53 | Wenn <flag> AA_IMM_ARGS (3) ist, werden alle Zeichen nach dem Verb |
| 54 | als Argument uebergeben, nicht aber von query_verb() beruecksichtigt. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 55 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 56 | Wenn -<flag> eine negative Zahl ist, muss das vom Spieler eingegebene |
| 57 | Kommando nur mit den ersten <flag> Zeichen von cmd uebereinstimmen. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 58 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 59 | Als Name fuer die Funktion fun duerfen keine geschuetzten Namen wie |
| 60 | zum Beispiel create, init, reset, heart_beat etc. verwendet werden |
| 61 | (eine vollstaendige Liste findet man unter /doc/applied/). |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 62 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 63 | BEISPIELE |
| 64 | add_action("geh_rein", "betrete"); |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 65 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 66 | Wenn der Spieler "betrete" eintippt, wird die Funktion geh_rein() |
| 67 | aufgerufen. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 68 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 69 | add_action("disfunc", "disconnect", AA_NOSPACE); |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 70 | |
| 71 | Die Funktion disfunc() wird aufgerufen, wenn der Spieler "disconnect" |
| 72 | oder eine Abkuerzung davon (zum Beispiel "di" oder "discon") eingibt. |
| 73 | Laengere Worte (zum Beispiel "disconnecting") werden NICHT erkannt. |
| 74 | Um rauszufinden, was der Spieler tatsaechlich eingegeben hat, muss |
| 75 | query_verb() aufgerufen werden. |
| 76 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 77 | add_action("fun", "cmd"); |
| 78 | add_action("fun", "scmd", AA_SHORT); |
| 79 | add_action("fun", "ncmd", AA_NOSPACE); |
| 80 | add_action("fun", "icmd", AA_IMM_ARGS); |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 81 | |
| 82 | Die folgende Tabelle zeigt, was die oben aufgefuehrten Kommandos bzw. |
| 83 | <flag> fuer Werte an query_verb() und als Argumente an die Funktion |
| 84 | fun uebergeben: |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 85 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 86 | |-------------------|--------------|----------------------------| |
| 87 | | Eingabe | query_verb() | Argument der Funktion fun | |
| 88 | |-------------------|--------------|----------------------------| |
| 89 | | "cmd" | "cmd" | 0 | |
| 90 | | "cmd bla fasel" | "cmd" | "bla fasel" | |
| 91 | |-------------------|--------------|----------------------------| |
| 92 | | "scmd" | "scmd" | 0 | |
| 93 | | "scmd bla" | "scmd" | "bla" | |
| 94 | | "scmdbla" | "scmdbla" | 0 | |
| 95 | | "scmd bla fasel" | "scmd" | "bla fasel" | |
| 96 | | "scmdbla fasel" | "scmdbla" | "fasel" | |
| 97 | |-------------------|--------------|----------------------------| |
| 98 | | "ncmd" | "ncmd" | 0 | |
| 99 | | "ncmd bla" | "ncmd" | " bla" | |
| 100 | | "ncmdbla" | "ncmdbla" | "bla" | |
| 101 | | "ncmd bla fasel" | "ncmd" | " bla fasel" | |
| 102 | | "ncmdbla fasel" | "ncmdbla" | "bla fasel" | |
| 103 | |-------------------|--------------|----------------------------| |
| 104 | | "icmd" | "icmd" | 0 | |
| 105 | | "icmd bla" | "icmd" | " bla" | |
| 106 | | "icmdbla" | "icmd" | "bla" | |
| 107 | | "icmd bla fasel" | "icmd" | " bla fasel" | |
| 108 | | "icmdbla fasel" | "icmd" | "bla fasel" | |
| 109 | |-------------------|--------------|----------------------------| |
| 110 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 111 | GESCHICHTE |
| 112 | Das Argument <flag> < 0 wird seit 3.2@127 unterstuetzt, aber erst ab |
| 113 | LDMud 3.2.8 richtig implementiert. LDMud 3.2.9 fuehrte das AA_IMM_ARGS |
| 114 | Flag ein. Ab LDMud 3.5 kann man Closures als Funktionen uebergeben. |
| 115 | |
Zesstra | b6ac9f6 | 2020-01-21 11:11:16 +0100 | [diff] [blame] | 116 | SIEHE AUCH |
| 117 | query_verb(E), query_command(E), add_verb(E), add_xverb(E), init(A) |