Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc//lfun/GuardExit

GuardExit()
***********


FUNKTION
========

   protected * >* GuardExit(object room, int hookid,
                                                 * hdata);


DEFINIERT IN
============

   /std/npc/moving.c


ARGUMENTE
=========

   room
        Der den Hook ausloesende Raum (environment())
   hookid
        Die ID des Hooks (H_HOOK_EXIT_USE)
   hdata
        Ein Array mit 3 Elementen:
        ({
            verb - Das Kommandoverb/Ausgangsname (string)
            dest - Zielraum (string) oder closure (special exits)
            msg  - Bewegungsrichtung (string) oder 0
        })


BESCHREIBUNG
============

   Ist diese Funktion in einem NPC definiert, traegt sich der NPC bei jeder
   Bewegung automatisch als Konsument von H_HOOK_EXIT_USE ein und diese
   Funktion wird immer gerufen, wenn ein Lebewesen im gleichen Environment
   wie der NPC versucht, einen Ausgang zu benutzen.
   Der NPC kann dann die Bewegung abbrechen (und so den Ausgang
   blockieren), Ziel oder Bewegungsmeldung aendern oder keine Veraenderung
   vornehmen.
   Die Konstanten fuer Hookid und Hookstatus (s. Rueckgabewert) sind in
    definiert.


RUeCKGABEWERT
=============

   Array mit zwei Elementen:
   ({
       H_NO_MOD / H_ALTERED / H_CANCELLED,
       hdata
   })
   hdata ist ggf. das geaenderte Array, welches die Funktion uebergeben
   wird. Weitere Details s. auch /doc/std/hooks


BEMERKUNGEN
===========

   Die Anzahl an Konsumenten eines Hooks ist begrenzt. Es ist daher
   moeglich, dass die Registrierung nicht klappt, wenn zuviele (>5) Waechter
   im Raum sind. Will man darauf reagieren, muesste man die Registrierung
   pruefen.
   Ein NPC, welcher GuardExit() definiert, aber im aktuellen Environment
   keine Wache halten will, koennte sich selber de-registrieren.


BEISPIELE
=========

    * >* GuardExit(object room, int hookid,
                                        * hdata)
    {
      // Nur in Gefaengnisraeumen Wache halten
      if (strstr(object_name(environment()), "/room/jail")==0)
      {
        // Hier gehts nicht raus. ;-)
        if (hdata[0] == "raus") {
            tell_object(this_player(), ...);
            return ({H_CANCELLED, hdata});
        }
        // Special exits ersetzen wir durch einen eigenen
        else if (closurep(hdata[1])) {
          hdata[1] = #'my_special_exit;
          return ({H_ALTERED, hdata});
        }
        // alle anderen Ausgaenge in die persoenliche Zelle
        else {
          tell_object(this_player(), ...);
          hdata[1] = "/room/jail_"+getuid(this_player());
          hdata[2] = "Sueden";
          return ({H_ALTERED, hdata});
        }
     }
     // in allen anderen Raeumen nicht eingreifen
     return ({H_NO_MOD, hdata});
   }


SIEHE AUCH
==========


AddExit, AddSpecialExit, RemoveExit HRegisterToHook, HRegisterModifier, HUnregisterFromHook /doc/std/hooks

20.02.2016, Zesstra 22.05.2016, Mupfel (Beispiel korrigiert)


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.