blob: 8982b98d76c12b832f6a363ee10e54d27edb7ea0 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001notify_fail()
2*************
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 #include <notify_fail.h>
MG Mud User88f12472016-06-24 23:31:02 +02009
Zesstra953f9972017-02-18 15:37:36 +010010 varargs void notify_fail(string str, int prio)
11 varargs void notify_fail(closure cl, int prio)
MG Mud User88f12472016-06-24 23:31:02 +020012
MG Mud User88f12472016-06-24 23:31:02 +020013
Zesstra953f9972017-02-18 15:37:36 +010014ARGUMENTE
15=========
MG Mud User88f12472016-06-24 23:31:02 +020016
Zesstra953f9972017-02-18 15:37:36 +010017 str Meldung die an den Spieler anstatt des 'Wie bitte' ausgegeben
18 werden soll
19 cl Closure, die bei Fehlschlag ausgefuehrt werden soll
20 prio Prioritaet dieses Objekts bei diesem Setzen der Meldung
MG Mud User88f12472016-06-24 23:31:02 +020021
MG Mud User88f12472016-06-24 23:31:02 +020022
Zesstra953f9972017-02-18 15:37:36 +010023BESCHREIBUNG
24============
MG Mud User88f12472016-06-24 23:31:02 +020025
Zesstra953f9972017-02-18 15:37:36 +010026 Merkt sich den angegebenen str und gibt ihn im Falle einer inkorrekten
27 Eingabe des Spielers anstatt eines 'Wie bitte' aus.
MG Mud User88f12472016-06-24 23:31:02 +020028
Zesstra953f9972017-02-18 15:37:36 +010029 Gedacht ist notify_fail, um dem Spieler eine bessere Hilfestellung
30 bei Kommandos / Eingaben zu geben, um ihn u.U. auf die richtige
31 Syntax hinzuweisen.
MG Mud User88f12472016-06-24 23:31:02 +020032
Zesstra953f9972017-02-18 15:37:36 +010033 Wird notify_fail mehrfach (durch verschiedene Objekte o.ae.) auf-
34 gerufen, wird der letzte erfolgreiche Aufruf gewertet. Eine Meldung wird
35 dann tatsaechlich gesetzt, wenn die Prioritaet dieses Objekts gleich
36 gross oder groesser ist als die Prioritaet des Objekts, was das bisher
37 gueltige notify_fail() gesetzt hat. Folgende Prioritaeten sind
38 vordefiniert und werden automatisch ermittelt:
39 NF_NL_OWN 100 // eigenes Objekt (soul) ueberschreibt kaum was
40 NF_NL_THING 100000
41 NF_NL_ROOM 1000000 // Raeume ueberschreiben sonstigen Krams
42 NF_NL_LIVING 10000000 // Lebewesen ueberschreiben auch Raeume
43 2 weitere vordefinierte koennen von Magier angegeben werden:
44 NF_NL_NONE -1 // wird von allem ueberschrieben
45 NF_NL_MAX __INT_MAX__ // hoechste Prioritaet, ueberschreibt alles
46
47 Wird eine Closure als Argument gegeben, wird sie im Fehlerfall
48 (also erst wenn ein Kommando endgueltig fehlgeschlagen hat)
49 ausgefuehrt und hat die Fehlermeldung als Resultat
50 zurueckzugeben. Die Closure erhaelt als Argument den
51 originalen Befehlsgeber; in der Regel dies ist this_player(),
52 was aber vom MODIFY_CMD hook geaendert werden kann.
53
54 notify_fail() erkennt verschachtelte Kommandos (siehe Efun
55 command()), und ein notify_fail() in einem Unterkommando
56 hat keinen Einfluss auf das uebergeordnete Kommando.
57
58
59BEMERKUNGEN
60===========
61
62 - solange man sich nicht absolut sicher ist, dass ein bestimmtes Objekt
63 mit dem Kommando gemeint ist (Identifikation ueber id()), sollte man
64 - notify_fail(str); return 0;
65 nutzen anstatt mit
66 - write(str) return 1;
67 die Kommandoauswertung abzubrechen (und anderen Objekten die Chance
68 zu nehmen das Kommando zu erfuellen)
69 - Kommandos werden uebrigens oft erst vom betretenen Raum, dann von den
70 Objekten abgearbeitet (je nachdem wann diese dazukamen)
71 - die Prioritaet wird momentan nicht gespeichert, sie ist nur beim Setzen
72 relevant. Will spaeter ein anderes Objekt eine Meldung setzen, wird
73 fuer das eigene Objekt die Standardprioritaet ermittelt, auch wenn man
74 eine andere hier uebergeben hat
75 - Die NF_NL_* sind in /sys/notify_fail.h defniert.
76
77
78BEISPIELE
79=========
80
81 Ein Raum erwartet die korrekte Eingabe von 'iss suppe':
82
83 int iss_cmd(string str){
84 // zu Anfang der Funktion das notify_fail definieren
85 notify_fail("Moechtest Du vielleicht von der Suppe essen?\n");
86
87 // Spieler hat nur 'iss' ohne Parameter eingegeben oder einen anderen
88 // Parameter angegeben ... Abbruch!
89 // Falls kein weiteres Objekt das Kommando erfuellt oder das
90 // notify_fail() mit einer eigenen Meldung ueberschreibt, wird obige
91 // Meldung an den Spieler ausgegeben.
92
93 if(!str || str!="suppe") return 0;
94 // ab hier ist die Eingabe dann wirklich 'suppe' und die Funktion
95 // kann beliebig fortgefuehrt werden
96 ...
97 return 1;
98
99
100SIEHE AUCH
101==========
102
103 add_action(E), AddCmd(L), AddAction(L),
104 query_verb(E), query_notify_fail(E)
MG Mud User88f12472016-06-24 23:31:02 +0200105
1068.Aug 2007 Gloinson