| ********************* 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 |