Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame^] | 1 | GuardExit() |
| 2 | =========== |
| 3 | |
| 4 | FUNKTION |
| 5 | -------- |
| 6 | :: |
| 7 | |
| 8 | protected <int|<string|closure>* >* GuardExit(object room, int hookid, |
| 9 | <string|closure>* hdata); |
| 10 | |
| 11 | DEFINIERT IN |
| 12 | ------------ |
| 13 | :: |
| 14 | |
| 15 | /std/npc/moving.c |
| 16 | |
| 17 | ARGUMENTE |
| 18 | --------- |
| 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 | BESCHREIBUNG |
| 34 | ------------ |
| 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 | RUeCKGABEWERT |
| 48 | ------------- |
| 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 | BEMERKUNGEN |
| 60 | ----------- |
| 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 | BEISPIELE |
| 71 | --------- |
| 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 | SIEHE AUCH |
| 103 | ---------- |
| 104 | :: |
| 105 | |
| 106 | AddExit, AddSpecialExit, RemoveExit |
| 107 | HRegisterToHook, HRegisterModifier, HUnregisterFromHook |
| 108 | /doc/std/hooks |
| 109 | |
| 110 | 20.02.2016, Zesstra |
| 111 | 22.05.2016, Mupfel (Beispiel korrigiert) |
| 112 | |