| notify_fail() |
| ************* |
| |
| |
| FUNKTION |
| ======== |
| |
| #include <notify_fail.h> |
| |
| varargs void notify_fail(string str, int prio) |
| varargs void notify_fail(closure cl, int prio) |
| |
| |
| ARGUMENTE |
| ========= |
| |
| str Meldung die an den Spieler anstatt des 'Wie bitte' ausgegeben |
| werden soll |
| cl Closure, die bei Fehlschlag ausgefuehrt werden soll |
| prio Prioritaet dieses Objekts bei diesem Setzen der Meldung |
| |
| |
| BESCHREIBUNG |
| ============ |
| |
| Merkt sich den angegebenen str und gibt ihn im Falle einer inkorrekten |
| Eingabe des Spielers anstatt eines 'Wie bitte' aus. |
| |
| Gedacht ist notify_fail, um dem Spieler eine bessere Hilfestellung |
| bei Kommandos / Eingaben zu geben, um ihn u.U. auf die richtige |
| Syntax hinzuweisen. |
| |
| Wird notify_fail mehrfach (durch verschiedene Objekte o.ae.) auf- |
| gerufen, wird der letzte erfolgreiche Aufruf gewertet. Eine Meldung wird |
| dann tatsaechlich gesetzt, wenn die Prioritaet dieses Objekts gleich |
| gross oder groesser ist als die Prioritaet des Objekts, was das bisher |
| gueltige notify_fail() gesetzt hat. Folgende Prioritaeten sind |
| vordefiniert und werden automatisch ermittelt: |
| NF_NL_OWN 100 // eigenes Objekt (soul) ueberschreibt kaum was |
| NF_NL_THING 100000 |
| NF_NL_ROOM 1000000 // Raeume ueberschreiben sonstigen Krams |
| NF_NL_LIVING 10000000 // Lebewesen ueberschreiben auch Raeume |
| 2 weitere vordefinierte koennen von Magier angegeben werden: |
| NF_NL_NONE -1 // wird von allem ueberschrieben |
| NF_NL_MAX __INT_MAX__ // hoechste Prioritaet, ueberschreibt alles |
| |
| Wird eine Closure als Argument gegeben, wird sie im Fehlerfall |
| (also erst wenn ein Kommando endgueltig fehlgeschlagen hat) |
| ausgefuehrt und hat die Fehlermeldung als Resultat |
| zurueckzugeben. Die Closure erhaelt als Argument den |
| originalen Befehlsgeber; in der Regel dies ist this_player(), |
| was aber vom MODIFY_CMD hook geaendert werden kann. |
| |
| notify_fail() erkennt verschachtelte Kommandos (siehe Efun |
| command()), und ein notify_fail() in einem Unterkommando |
| hat keinen Einfluss auf das uebergeordnete Kommando. |
| |
| |
| BEMERKUNGEN |
| =========== |
| |
| - solange man sich nicht absolut sicher ist, dass ein bestimmtes Objekt |
| mit dem Kommando gemeint ist (Identifikation ueber id()), sollte man |
| - notify_fail(str); return 0; |
| nutzen anstatt mit |
| - write(str) return 1; |
| die Kommandoauswertung abzubrechen (und anderen Objekten die Chance |
| zu nehmen das Kommando zu erfuellen) |
| - Kommandos werden uebrigens oft erst vom betretenen Raum, dann von den |
| Objekten abgearbeitet (je nachdem wann diese dazukamen) |
| - die Prioritaet wird momentan nicht gespeichert, sie ist nur beim Setzen |
| relevant. Will spaeter ein anderes Objekt eine Meldung setzen, wird |
| fuer das eigene Objekt die Standardprioritaet ermittelt, auch wenn man |
| eine andere hier uebergeben hat |
| - Die NF_NL_* sind in /sys/notify_fail.h defniert. |
| |
| |
| BEISPIELE |
| ========= |
| |
| Ein Raum erwartet die korrekte Eingabe von 'iss suppe': |
| |
| int iss_cmd(string str){ |
| // zu Anfang der Funktion das notify_fail definieren |
| notify_fail("Moechtest Du vielleicht von der Suppe essen?\n"); |
| |
| // Spieler hat nur 'iss' ohne Parameter eingegeben oder einen anderen |
| // Parameter angegeben ... Abbruch! |
| // Falls kein weiteres Objekt das Kommando erfuellt oder das |
| // notify_fail() mit einer eigenen Meldung ueberschreibt, wird obige |
| // Meldung an den Spieler ausgegeben. |
| |
| if(!str || str!="suppe") return 0; |
| // ab hier ist die Eingabe dann wirklich 'suppe' und die Funktion |
| // kann beliebig fortgefuehrt werden |
| ... |
| return 1; |
| |
| |
| SIEHE AUCH |
| ========== |
| |
| add_action(E), AddCmd(L), AddAction(L), |
| query_verb(E), query_notify_fail(E) |
| |
| 8.Aug 2007 Gloinson |