blob: 19813d2ac7d193cad77e1ca9d244f2443a872fab [file] [log] [blame]
Zesstrab6ac9f62020-01-21 11:11:16 +01001SYNOPSIS
2 #include <commands.h>
MG Mud User88f12472016-06-24 23:31:02 +02003
Zesstrab6ac9f62020-01-21 11:11:16 +01004 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 User88f12472016-06-24 23:31:02 +02007
Zesstrab6ac9f62020-01-21 11:11:16 +01008BESCHREIBUNG
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 User88f12472016-06-24 23:31:02 +020014
Zesstrab6ac9f62020-01-21 11:11:16 +010015 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 User88f12472016-06-24 23:31:02 +020019
Zesstrab6ac9f62020-01-21 11:11:16 +010020 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 User88f12472016-06-24 23:31:02 +020024
Zesstrab6ac9f62020-01-21 11:11:16 +010025 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 User88f12472016-06-24 23:31:02 +020029
Zesstrab6ac9f62020-01-21 11:11:16 +010030 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 User88f12472016-06-24 23:31:02 +020037
Zesstrab6ac9f62020-01-21 11:11:16 +010038 Die Kommandos lassen sich auch manuell entfernen. Die Efun dazu lautet
39 remove_actions().
MG Mud User88f12472016-06-24 23:31:02 +020040
Zesstrab6ac9f62020-01-21 11:11:16 +010041 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 User88f12472016-06-24 23:31:02 +020045
Zesstrab6ac9f62020-01-21 11:11:16 +010046 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 User88f12472016-06-24 23:31:02 +020052
Zesstrab6ac9f62020-01-21 11:11:16 +010053 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 User88f12472016-06-24 23:31:02 +020055
Zesstrab6ac9f62020-01-21 11:11:16 +010056 Wenn -<flag> eine negative Zahl ist, muss das vom Spieler eingegebene
57 Kommando nur mit den ersten <flag> Zeichen von cmd uebereinstimmen.
MG Mud User88f12472016-06-24 23:31:02 +020058
Zesstrab6ac9f62020-01-21 11:11:16 +010059 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 User88f12472016-06-24 23:31:02 +020062
Zesstrab6ac9f62020-01-21 11:11:16 +010063BEISPIELE
64 add_action("geh_rein", "betrete");
MG Mud User88f12472016-06-24 23:31:02 +020065
Zesstrab6ac9f62020-01-21 11:11:16 +010066 Wenn der Spieler "betrete" eintippt, wird die Funktion geh_rein()
67 aufgerufen.
MG Mud User88f12472016-06-24 23:31:02 +020068
Zesstrab6ac9f62020-01-21 11:11:16 +010069 add_action("disfunc", "disconnect", AA_NOSPACE);
MG Mud User88f12472016-06-24 23:31:02 +020070
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
Zesstrab6ac9f62020-01-21 11:11:16 +010077 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 User88f12472016-06-24 23:31:02 +020081
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:
Zesstrab6ac9f62020-01-21 11:11:16 +010085
MG Mud User88f12472016-06-24 23:31:02 +020086 |-------------------|--------------|----------------------------|
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 User88f12472016-06-24 23:31:02 +0200111GESCHICHTE
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
Zesstrab6ac9f62020-01-21 11:11:16 +0100116SIEHE AUCH
117 query_verb(E), query_command(E), add_verb(E), add_xverb(E), init(A)