P_TMP_ATTACK_HOOK
*****************

********************* VERALTETE PROPERTY
****************************** * Diese Property ist veraltet. Bitte
nicht mehr in neuem Code nutzen. * **********************************
************************************* P_TMP_ATTACK_HOOK


NAME
====

   P_TMP_ATTACK_HOOK             "attack_hook"


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

   /sys/new_skills.h


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

   Mittels dieser Property koennen die Attacken eines Livings ggf.
   abgebrochen werden noch bevor Waffen oder Skills zum ausgewertet
   wurden.

   Es wird an dem Living die Property als mindestens 3-elementiges Array:
   ({zeitpunkt, objekt, methode, ...})
   gesetzt und die Methode 'methode' wird dann waehrend des Attack() des
   Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.

   Der Methode wird als Parameter der Gegner uebergeben.

   Gibt die Methode 0 als Rueckgabewert zurueck, wird die Attacke sofort
   kommentarlos abgebrochen.


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

   - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
   - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
     Property auf 0 gesetzt
   - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
     pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
     im Code anderer und ist andererseits unfair gegenueber ihnen


BEISPIELE
=========

   *** der Spieler erhaelt eine Verwundung, die ihn manchmal behindert ***
   if(!pointerp(tmp=TP->QueryProp(P_TMP_ATTACK_HOOK)) ||
      sizeof(tmp)<3 || tmp[0]<=time()) {
     TP->SetProp(P_TMP_ATTACK_HOOK,
                 ({time()+3600, this_object(), "test_hurt"}));
   ...

   // die entsprechende Methode, die bei jedem Angriff ueber Attack()
   // gerufen wird ...
   int test_hurt(object enemy) {

     // mit 10% Chance generell und 20% Chance bei groesseren Gegnern
     // bricht der Angriff ab ... previous_object() ist natuerlich
     // der Angreifer
     if(!random(10) ||
        (enemy->QueryProp(P_SIZE)>previous_object()->QueryProp(P_SIZE) &&
         !random(5)) {

        tell_object(previous_object(),
          "Deine Wunde schmerzt dich zu sehr um anzugreifen.\n");
        tell_room(environment(previous_object()),
          previous_object()->Name(WER,1)+" zuckt vor Schmerzen zusammen.\n",
          ({previous_object()}));
        return 0;
     }

     // ansonsten geht der Angriff weiter
     return 1;
   }


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

   Angriff:   Attack(L)
   Schutz:    Defend(L)
   Verwandt:  InternalModifyAttack(L), P_TMP_ATTACK_MOD
   Hooks:     P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_DEFEND_HOOK
   neue Hooks: std/hooks

08.12.2008, Zesstra
