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