blob: ead144c4cb26fcab0f1de8140a80c0be0c7bb937 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001GuardExit()
2***********
MG Mud User88f12472016-06-24 23:31:02 +02003
4
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
7
8 protected <int|<string|closure>* >* GuardExit(object room, int hookid,
9 <string|closure>* hdata);
10
11
12DEFINIERT IN
13============
14
15 /std/npc/moving.c
16
17
18ARGUMENTE
19=========
20
21 room
22 Der den Hook ausloesende Raum (environment())
23 hookid
24 Die ID des Hooks (H_HOOK_EXIT_USE)
25 hdata
26 Ein Array mit 3 Elementen:
27 ({
28 verb - Das Kommandoverb/Ausgangsname (string)
29 dest - Zielraum (string) oder closure (special exits)
30 msg - Bewegungsrichtung (string) oder 0
31 })
32
33
34BESCHREIBUNG
35============
36
37 Ist diese Funktion in einem NPC definiert, traegt sich der NPC bei jeder
38 Bewegung automatisch als Konsument von H_HOOK_EXIT_USE ein und diese
39 Funktion wird immer gerufen, wenn ein Lebewesen im gleichen Environment
40 wie der NPC versucht, einen Ausgang zu benutzen.
41 Der NPC kann dann die Bewegung abbrechen (und so den Ausgang
42 blockieren), Ziel oder Bewegungsmeldung aendern oder keine Veraenderung
43 vornehmen.
44 Die Konstanten fuer Hookid und Hookstatus (s. Rueckgabewert) sind in
45 <hook.h> definiert.
46
47
48RUeCKGABEWERT
49=============
50
51 Array mit zwei Elementen:
52 ({
53 H_NO_MOD / H_ALTERED / H_CANCELLED,
54 hdata
55 })
56 hdata ist ggf. das geaenderte Array, welches die Funktion uebergeben
57 wird. Weitere Details s. auch /doc/std/hooks
58
59
60BEMERKUNGEN
61===========
62
63 Die Anzahl an Konsumenten eines Hooks ist begrenzt. Es ist daher
64 moeglich, dass die Registrierung nicht klappt, wenn zuviele (>5) Waechter
65 im Raum sind. Will man darauf reagieren, muesste man die Registrierung
66 pruefen.
67 Ein NPC, welcher GuardExit() definiert, aber im aktuellen Environment
68 keine Wache halten will, koennte sich selber de-registrieren.
69
70
71BEISPIELE
72=========
73
74 <int|<string|closure>* >* GuardExit(object room, int hookid,
75 <string|closure>* hdata)
76 {
77 // Nur in Gefaengnisraeumen Wache halten
78 if (strstr(object_name(environment()), "/room/jail")==0)
79 {
80 // Hier gehts nicht raus. ;-)
81 if (hdata[0] == "raus") {
82 tell_object(this_player(), ...);
83 return ({H_CANCELLED, hdata});
84 }
85 // Special exits ersetzen wir durch einen eigenen
86 else if (closurep(hdata[1])) {
87 hdata[1] = #'my_special_exit;
88 return ({H_ALTERED, hdata});
89 }
90 // alle anderen Ausgaenge in die persoenliche Zelle
91 else {
92 tell_object(this_player(), ...);
93 hdata[1] = "/room/jail_"+getuid(this_player());
94 hdata[2] = "Sueden";
95 return ({H_ALTERED, hdata});
96 }
97 }
98 // in allen anderen Raeumen nicht eingreifen
99 return ({H_NO_MOD, hdata});
100 }
101
102
103SIEHE AUCH
104==========
105
106 AddExit, AddSpecialExit, RemoveExit
107 HRegisterToHook, HRegisterModifier, HUnregisterFromHook
108 /doc/std/hooks
109
11020.02.2016, Zesstra 22.05.2016, Mupfel (Beispiel korrigiert)