P_GUARD
=======

NAME
----
::

     P_GUARD				"guard"

DEFINIERT IN
------------
::

     /sys/guard.h

BESCHREIBUNG
------------
::

     Diese Property gibt an, ob ein NPC aus einem Raum entfernt werden darf
     oder nicht. Abgefragt werden muss dies von den Items oder Spells, die
     den NPC zu einer Bewegung zwingen wollen. Es wird nicht automatisch
     darauf geachtet!

     Entscheidend hierbei ist ein in der Property enthaltene (ganzzahliger)
     Zahlenwert zwischen 0 und 100, der hierbei den Grad der
     'Bewachungsstaerke' eines NPCs angibt. Bei 0 laesst sich das Lebewesen
     immer zu einer Bewegung ueberreden, bei 100 ueberhaupt nicht. Dazwischen
     gibt es die Wahrscheinlichkeit dafuer an.

BEMERKUNGEN
-----------
::

     - alle von /std/npc abgeleiteten NPCs haben standardmaessig P_GUARD
       auf 100 gesetzt, sind also nicht fortfuehrbar
     - bei der Erzeugung von NPCs mit P_GUARD < 100 AddItem() mit dem
       Parameter REFRESH_MOVE_HOME verwenden, damit sie bei einem Raumreset
       gegebenenfalls an ihren Ausgangsort zurueckkehren. 
     - gildenspezifische weitere Abfragen auf Level oAe bitte bei Gilden-
       magiern erfragen

BEISPIELE
---------
::

     // ein Test
     if(random(100)<=liv->QueryProp(P_GUARD))
      cannotMoveNPC(); // NPC darf nicht bewegt werden!
     else
      moveNPC();       // NPC darf bewegt werden

     // ein wegfuehrbarer NPC
     void create() {
      ::create();
      ...
      SetProp(P_GUARD,50);
      ...
     }
     // mit 50% Wahrscheinlichkeit (pro Versuch) laesst sich der NPC nun
     // fortfuehren

SIEHE AUCH
----------
::

     AddItem()

13.April 2004 Gloinson

