
PreventFollow()
***************


FUNKTION
========

   int PreventFollow(object dest)


ARGUMENTE
=========

   dest: Zielobjekt, in das der Verfolgte bewegt werden soll.


FUNKTION
========

   In jedem Verfolger, der mit AddPursuer in die Liste der Verfolger
   eingetragen wurde, wird vor dem Bewegen in das Zielobjekt die Funktion
   PreventFollow mit dem Zielobjekt als Argument aufgerufen.


RUECKGABEWERT
=============

   0: Verfolger darf in das Zielobjekt folgen
   1: Verfolger darf in dieses Zielobjekt nicht folgen
      (Verfolgung bleibt weiterhin aktiv)
   2: Verfolger darf in dieses Zielobjekt nicht folgen
      (Verfolgung wird abgebrochen und Verfolger aus der Verfolgerliste
       ausgetragen)


BEMERKUNG
=========

   Durch PreventFollow kann der raeumliche Bereich, in dem verfolgt werden
   darf, eingeschraenkt werden.


BEISPIELE
=========

   Man moechte, dass ein NPC auf einer Insel nicht mit dem Spieler in das
   Boot steigt, um mit dem Spieler zusammen von der Insel herunterzukommen.

   #define PATH(x) ("/d/.../.../mein/pfad/+(x)")

   ...

   int PreventFollow(object boot)
    {
     if ( object_name(boot)[0..strlen(PATH("boot"))-1] == PATH("boot") )
      return 1;
    }

   Diese Funktions-Definition ist sehr flexibel, denn sie erlaubt sowohl
   spaetere Pfadanpassung als auch mehrere Boote.
   Da ueber die Funktion strlen() nur bis zum letzten Buchstaben des
   angegebenen Strings getestet wird, wird also gleichzeitig auch auf
   boot[1], boot[2] usw. getestet.


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

   "AddPursuer", "RemovePursuer"

Last modified: Tue Jun 10 13:59:30 2003 by Gabylon
