blob: 4b57f96fdd49c23950390d10dbd607e4133a693d [file] [log] [blame]
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