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