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