| SYNOPSIS |
| #include <commands.h> |
| |
| void add_action(string|closure fun, string cmd); |
| void add_action(string|closure fun, string cmd, int flag); |
| void add_action(string|closure fun); /* veraltet */ |
| |
| BESCHREIBUNG |
| Setzt eine lokale Funktion fun, die aufgerufen wird, wenn der Spieler |
| das Kommandos <cmd< eintippt. Der Funktion werden die Argumente des |
| vom Spieler eingegebenen Kommandos als string uebergeben. Die |
| Funktion muss entweder 1 zurueck geben, wenn das Kommando erfolgreich |
| ausgefuehrt werden konnte, sonst 0. |
| |
| Wenn das Kommando nicht erfolgreich ausgefuehrt werden konnte, sucht |
| der Parser weiter nach einer passenden Funktion, bis eine solche |
| 1 zurueck liefert. Falls der Parser keine Funktion findet, wird an |
| den Spieler eine Fehlermeldung ausgegeben. ("Wie bitte?") |
| |
| Wenn add_action() ohne das zweite Argument (string cmd) aufgerufen |
| wird, muss dieses mit add_verb() oder add_xverb() angegeben werden. |
| DIESE DEKLARATION IST JEDOCH VERALTET UND SOLLTE NICHT VERWENDET |
| WERDEN. Sie funktioniert auch nur, wenn USE_DEPRECATED gesetzt ist. |
| |
| Die Funktion fun wird mit einem string als Argument aufgerufen, der |
| die Worte nach dem Verb in der Inputzeile enthaelt. Das Verb kann |
| mit der Efun query_verb() abgefragt werden. Das Verb ist immer das |
| erste Wort in der Inputzeile bis zum ersten Leerschlag. |
| |
| add_action() muss immer aus einer init() Routine heraus aufgerufen |
| werden. Das Objekt, welches das Kommando cmd definiert, muss sich in |
| der Umgebung des Spielers befinden; also entweder der Spieler selbst, |
| im Inventar des Spielers, der Raum, in dem sich der Spieler befindet |
| oder ein Objekt im gleichen Raum wie der Spieler. Wenn der Spieler |
| die Umgebung des Objekts verlaesst, werden alle von add_action() |
| definierten Kommandos automatisch entfernt. |
| |
| Die Kommandos lassen sich auch manuell entfernen. Die Efun dazu lautet |
| remove_actions(). |
| |
| Wenn das Argument <flag> AA_SHORT (d.h. 1) ist, koennen Argumente von |
| cmd ohne einen Leerschlag an cmd angehaengt sein. An die Funktion fun |
| werden alle Zeichen nach dem ersten Leerschlag als Argument |
| uebergeben. |
| |
| Wenn <flag> AA_NOSPACE (d.h. 2) ist, koennen die Argumente wiederum |
| ohne Leerschlag ans Verb angehaengt sein. Im Unterschied zu AA_SHORT |
| werden alle Zeichen nach dem Verb als Argument an die Funktion |
| uebergeben. Die Zeichen, welche nicht durch einen Leerschlag vom |
| Verb getrennt sind, werden ZUSAETZLICH von query_verb() zurueck |
| gegeben. |
| |
| Wenn <flag> AA_IMM_ARGS (3) ist, werden alle Zeichen nach dem Verb |
| als Argument uebergeben, nicht aber von query_verb() beruecksichtigt. |
| |
| Wenn -<flag> eine negative Zahl ist, muss das vom Spieler eingegebene |
| Kommando nur mit den ersten <flag> Zeichen von cmd uebereinstimmen. |
| |
| Als Name fuer die Funktion fun duerfen keine geschuetzten Namen wie |
| zum Beispiel create, init, reset, heart_beat etc. verwendet werden |
| (eine vollstaendige Liste findet man unter /doc/applied/). |
| |
| BEISPIELE |
| add_action("geh_rein", "betrete"); |
| |
| Wenn der Spieler "betrete" eintippt, wird die Funktion geh_rein() |
| aufgerufen. |
| |
| add_action("disfunc", "disconnect", AA_NOSPACE); |
| |
| Die Funktion disfunc() wird aufgerufen, wenn der Spieler "disconnect" |
| oder eine Abkuerzung davon (zum Beispiel "di" oder "discon") eingibt. |
| Laengere Worte (zum Beispiel "disconnecting") werden NICHT erkannt. |
| Um rauszufinden, was der Spieler tatsaechlich eingegeben hat, muss |
| query_verb() aufgerufen werden. |
| |
| add_action("fun", "cmd"); |
| add_action("fun", "scmd", AA_SHORT); |
| add_action("fun", "ncmd", AA_NOSPACE); |
| add_action("fun", "icmd", AA_IMM_ARGS); |
| |
| Die folgende Tabelle zeigt, was die oben aufgefuehrten Kommandos bzw. |
| <flag> fuer Werte an query_verb() und als Argumente an die Funktion |
| fun uebergeben: |
| |
| |-------------------|--------------|----------------------------| |
| | Eingabe | query_verb() | Argument der Funktion fun | |
| |-------------------|--------------|----------------------------| |
| | "cmd" | "cmd" | 0 | |
| | "cmd bla fasel" | "cmd" | "bla fasel" | |
| |-------------------|--------------|----------------------------| |
| | "scmd" | "scmd" | 0 | |
| | "scmd bla" | "scmd" | "bla" | |
| | "scmdbla" | "scmdbla" | 0 | |
| | "scmd bla fasel" | "scmd" | "bla fasel" | |
| | "scmdbla fasel" | "scmdbla" | "fasel" | |
| |-------------------|--------------|----------------------------| |
| | "ncmd" | "ncmd" | 0 | |
| | "ncmd bla" | "ncmd" | " bla" | |
| | "ncmdbla" | "ncmdbla" | "bla" | |
| | "ncmd bla fasel" | "ncmd" | " bla fasel" | |
| | "ncmdbla fasel" | "ncmdbla" | "bla fasel" | |
| |-------------------|--------------|----------------------------| |
| | "icmd" | "icmd" | 0 | |
| | "icmd bla" | "icmd" | " bla" | |
| | "icmdbla" | "icmd" | "bla" | |
| | "icmd bla fasel" | "icmd" | " bla fasel" | |
| | "icmdbla fasel" | "icmd" | "bla fasel" | |
| |-------------------|--------------|----------------------------| |
| |
| GESCHICHTE |
| Das Argument <flag> < 0 wird seit 3.2@127 unterstuetzt, aber erst ab |
| LDMud 3.2.8 richtig implementiert. LDMud 3.2.9 fuehrte das AA_IMM_ARGS |
| Flag ein. Ab LDMud 3.5 kann man Closures als Funktionen uebergeben. |
| |
| SIEHE AUCH |
| query_verb(E), query_command(E), add_verb(E), add_xverb(E), init(A) |