FUNKTION:
void AddCmd( string regeln, string funktion, string errormsg ) (1)
void AddCmd( string cmd, string funktion ) (2)
eher nicht verwenden:
void AddCmd( string cmd, string funktion, int flag ) (3)
void AddCmd( string *cmdliste, string funktion, int flag ) (4)
ARGUMENTE:
cmd, cmdliste: Befehle, auf die reagiert werden soll.
funktion: Name der Funktionsname in "" oder die Closure, die
bei den Befehlen aufgerufen wird.
regeln: string mit den noetigen Keywords und deren Synonymen
(fuer komplexere Syntaxen, vor allem bei Quests)
errormsg: Fehlermeldungen (per notify_fail) bei Nichterfuellung
einer Regel
FUNKTION:
Wenn ein Spieler im Einflussbereich des Objektes den Befehl eingibt,
wird die entsprechende Funktion im Objekt aufgerufen. Die Verben
sollten Imperative sein und keine Verben in erster Person.
Nach jedem AddCmd() werden die Kommandos in die Kommandolisten der
in der Naehe befindlichen Lebewesen eingetragen.
Es ist die vorgehensweise nach den Prototypen 1 und 2 oben vorzu-
ziehen, also mit Regeln beziehnungsweise ohne 'Flag' oder
Kommandoarray.
Funktion:
Statt des Funktionsnamens kann auch eine Closure uebergeben
werden. Dann muss diese jedoch vorher definiert sein.
Die Funktion wird mit den vom Spieler eingegebenen Argumenten
als String aufgerufen, bzw. 0 wenn es keine gab.
Regeln: (nur bei Methode 1)
Bei komplexen Syntaxen wird ein String angegeben, der die
notwendigen Schluesselworte und deren zulaessige Synonyme
beschreibt, analog den AddInfo(L)-Schluesselwoertern. z.B:
"ritz|ritze|schnitz|schnitze&herz|herzchen&rinde|baumrinde"+
"&messer|schnitzmesser"
Nur wenn aus JEDER der durch & getrennten Synonymgruppen
ein Wort im Spielerkommando enthalten ist, wird der Befehl
ausgefuehrt. Zum Beispiel:
> ritz mit dem Messer ein Herz in die Rinde des Baumes
> schnitz in die Baumrinde mit dem Messer ein Herzchen
Als Regel kann man auch "$MYID$" angeben. Dies steht dann
fuer eine gueltige ID fuer das betroffene Objekt. Hierbei
werden keine Adjektive beruecksichtigt (das ginge nicht so
recht), wohl aber nachgestellte Nummern wie 'ding 2' als auch
die Inventarnummer-Notation 'i2'.
Errormsg: (nur bei Methode 1, optional)
Als dritter Parameter koennen auch Fehlermeldungen fuer jeweils
fehlende Synonymgruppen angegeben werden. Sie werden in
derselben Reihenfolge wie die Synonymgruppen angegeben.
Z.B. fuer obige Regeln:
"Was willst du schnitzen?|Wohinein willst du schnitzen?|Mit "+
"welchem Werkzeug willst du schnitzen?"
Flag: (nur bei Methode 3 und 4)
Wenn AddCmd mit einem dritten Parameter ungleich 0 auf-
gerufen wird, so muss nicht das ganze Verb, das der Spieler
eingibt, mit dem ersten Parameter uebereinstimmen, sondern
es genuegt auch, wenn das Verb, das Spieler eingibt, laenger
ist. (Bitte nur im Ausnahmefall benutzen, es kann leicht
Ueberschneidungen geben!!!)
Nur dieses Flag ist erlaubt und wird unterstuetzt, was
dem AA_SHORT von add_action() entspricht. Die anderen Moeglich-
keiten von add_action() werden nicht unterstuetzt.
Achtung: Ist ein Verb direkt passend definiert (zB nach
Methode 1 oder 2), so wird ausschliesslich dieses dann
beruecksichtigt, auch wenn es fehlschlaegt! Hier ist also
etwas Sorgfalt von noeten. Im Zweifelsfall kein Verb mit
gesetztem Flag benutzen oder einen erfahrenen Magier fragen.
RÜCKGABEWERT:
keiner
BEMERKUNG:
Fuer AddCmds sollten z.B. Verben des Put&Get, sowie alle anderen,
die durch Events abgefangen werden koennen, nach Moeglichkeit nicht
ueberschrieben werden! Um das Ueberschreiben von "nimm" abzufangen,
eignet sich z.B. die Anlage eines evtl. unsichtbaren Trays.
BEISPIELE:
AddCmd( "loesch|loesche|ersticke&feuer|brand|flammen&decke|"
"wolldecke", "loeschen", "Was willst du loeschen?|"
"Womit willst du loeschen?" );
AddCmd( "breche|brich&zweig|ast", #'abbrechen, "Was willst Du "
"abbrechen?");
AddCmd( "iss&$MYID$", "mampf", "Was willste futtern?" );
AddCmd( ({ "kletter", "klettere" }), "klettern" ); /* gut */
AddCmd( "kletter", "klettern", 1 ); /* schlecht */
AddCmd( "lese", "lesen" ); /* verboten, es muss lies heissen. Ausser-
dem ist dafuer AddReadDetail oder P_READ_MSG zu verwenden! */
SIEHE AUCH:
RemoveCmd(L), add_action(E)
|