P_DISABLE_ATTACK
****************


NAME
====

   P_DISABLE_ATTACK              "disable_attack"


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

   /sys/properties.h


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

   Das Lebewesen kann nicht angreifen. Beim Setzen der Property ist es
   wichtig, SetProp() zu benutzen und die Anzahl der Kampfrunden anzugeben,
   die das Lebewesen paralysiert sein soll.

   Ein negativer Wert ist nicht gueltig. Bei mehr als 30 Kampfrunden wird
   die Paralyse auf 30 Kampfrunden gekappt.

   Fuer jede Paralyse bekommt ein Living eine ebenso lange Schutzzeit nach
   der Paralyse gewaehrt. Versucht man, vor Ablauf der Paralyse
   P_DISABLE_ATTACK hoeher zu setzen (oder setzt man innerhalb der folgenden
   Schutzzeit P_DISABLE_ATTACK auf > 0), wird DISABLE_TOO_EARLY von SetProp
   zurueck gegeben.
   Eine Reduktion von einem P_DISABLE_ATTACK ist moeglich, allerdings
   reduziert dies _nicht_ eine einmal gesetzte Schutzzeit.

   Einen Gegner,der nie paralysiert werden koennen soll, kann man einfach
   per

   Set(P_DISABLE_ATTACK, function int () {return 0;}, F_SET_METHOD);

   erstellen, da bei diesem der Wert von P_DISABLE_ATTACK nicht mehr mit
   einem normalen SetProp()-Aufruf geaendert werden kann.


BEISPIELE
=========

   // Gegner 17 Runden lang paralysieren, ohne Ruecksicht auf fruehere P.
   // (in diesem Moment ist das Living bis time() + 4 * 17 vor laengerer
   //  oder erneuter Paralyse geschuetzt)
   en->SetProp(P_DISABLE_ATTACK, 17);
   // Der Gegner kann jetzt fuer 34 Kampfrunden nicht erneut paralysiert
   // werden.
   // Paralyse reduzieren auf 10 Kampfrunden
   en->SetProp(P_DISABLE_ATTACK, 10);
   // Die Schutzzeit ist immer noch bei 34 Kampfrunden, nicht bei 20.


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

   P_NEXT_DISABLE_ATTACK

19.08.2014, Zesstra
