NotifyPlayerDeath() bei Gifttoden mit 0 aufrufen
(Fast) alle NotifyPlayerDeath() gehen davon aus, dass <killer> nur
ein Objekt ist. Daher wird im Falle von Gifttoden - wenn <killer>
ein string ist, immer 0 als <killer> uebergehen.
Change-Id: Id619ba4d82c5ff58c336d5c0aef541ff1d41a537
diff --git a/doc/lfun/NotifyPlayerDeath b/doc/lfun/NotifyPlayerDeath
index 96678ea..924a704 100644
--- a/doc/lfun/NotifyPlayerDeath
+++ b/doc/lfun/NotifyPlayerDeath
@@ -19,11 +19,13 @@
=========
victim
- Getoeteter Spieler.
+ Getoeteter Spieler.
+
killer
- Objekt, welches den Spieler getoetet hat.
+ Objekt, welches den Spieler getoetet hat.
+
lost_exp
- Erfahrungspunkte, die der Spieler durch den Tod verloren hat.
+ Erfahrungspunkte, die der Spieler durch den Tod verloren hat.
BESCHREIBUNG
@@ -31,27 +33,34 @@
Diese Funktion wird aus dem Spielerobjekt heraus immer dann
aufgerufen, wenn der Spieler stirbt und zwar:
- 1) im Gegner, der den Spieler getoetet hat,
- 2) im Environment des getoeteten Spielers,
- 3) in der Gilde des Spielers,
- 4) in allen Objekten in diesem Environment und
- 5) in allen Objekten (auch innerhalb Containern) im Spieler.
+
+ 1. im Gegner, der den Spieler getoetet hat,
+
+ 2. im Environment des getoeteten Spielers,
+
+ 3. in der Gilde des Spielers,
+
+ 4. in allen Objekten in diesem Environment und
+
+ 5. in allen Objekten (auch innerhalb Containern) im Spieler.
+
Der Gegner wird hierbei nur einmal informiert, also bei letzteren
- Faellen herausgefiltert, falls noetig!
- Hauptaufgabe dieser Funktion ist es somit, auf Tode von Spielern zu
- reagieren oder selbige einfach nur mitzuloggen.
+ Faellen herausgefiltert, falls noetig! Hauptaufgabe dieser Funktion
+ ist es somit, auf Tode von Spielern zu reagieren oder selbige
+ einfach nur mitzuloggen.
- Zu dem Zeitpunkt des Aufrufs dieser Funktion ist der Spieler noch _nicht_
- Geist und noch _nicht_ im Todesraum - dies wird im Anschluss an den Aufruf
- der NotifyPlayerDeath() durchgefuehrt.
+ Zu dem Zeitpunkt des Aufrufs dieser Funktion ist der Spieler noch
+ _nicht_ Geist und noch _nicht_ im Todesraum - dies wird im
+ Anschluss an den Aufruf der NotifyPlayerDeath() durchgefuehrt.
+ Wenn ein Spieler an Gift stirbt, gibt es kein Killerobjekt - in dem
+ Fall ist <killer> 0. (P_KILLER im Opfer ist in diesem Fall "gift".)
-
- Aufgerufen wird die Funktion aus '/std/player/life.c' mittels catch() und
- werden mit limited() auf max. 150k (Gegner, Environment, Gilde) bzw. 80k
- (alle anderen Objekte) Ticks beschraenkt.
- Fehler in dieser Funktion haben somit keine negativen Auswirkungen
- auf das Sterben des Spielers.
+ Aufgerufen wird die Funktion aus '/std/player/life.c' mittels
+ catch() und werden mit limited() auf max. 150k (Gegner,
+ Environment, Gilde) bzw. 80k (alle anderen Objekte) Ticks
+ beschraenkt. Fehler in dieser Funktion haben somit keine negativen
+ Auswirkungen auf das Sterben des Spielers.
RUeCKGABEWERT
@@ -68,21 +77,22 @@
haeufigsten auftretenden Fall bezogen, dass nur das toetende Objekt
den Tod protokollieren soll):
- void NotifyPlayerDeath(object dead, object killer, int lost_exp)
- {
- if ( intp(lost_exp) && objectp(dead) && objectp(killer) &&
- killer==this_object() )
- write_file( "/log/patryn/dead", sprintf(
- "%s - %s von %s getoetet. XP: -%d", ctime(), getuid(dead),
- killer->name(WEM), lost_exp) );
- }
+ void NotifyPlayerDeath(object dead, object killer, int lost_exp)
+ {
+ if ( intp(lost_exp) && objectp(dead) && objectp(killer) &&
+ killer==this_object() )
+ write_file( "/log/patryn/dead", sprintf(
+ "%s - %s von %s getoetet. XP: -%d", ctime(), getuid(dead),
+ killer->name(WEM), lost_exp) );
+ }
- Bitte beachten: write_file() schreibt ohne Groessenbegrenzung in das
- Logfile. Da dies auf Dauer bzw. in Gebieten mit hoher Log-Aktivitaet
- zu Logfiles von enormer Groesse fuehren kann, ist die Verwendung
- von write_file() nicht empfehlenswert. Ausnahmen koennen natuerlich
- mit dem zustaendigen Regionsmagier abgesprochen werden, z.B. fuer
- begrenzte Anwendung etwa bei sehr starken, selten besiegten Gegnern.
+ Bitte beachten: write_file() schreibt ohne Groessenbegrenzung in
+ das Logfile. Da dies auf Dauer bzw. in Gebieten mit hoher Log-
+ Aktivitaet zu Logfiles von enormer Groesse fuehren kann, ist die
+ Verwendung von write_file() nicht empfehlenswert. Ausnahmen koennen
+ natuerlich mit dem zustaendigen Regionsmagier abgesprochen werden,
+ z.B. fuer begrenzte Anwendung etwa bei sehr starken, selten
+ besiegten Gegnern.
Weiterhin ist es empfehlenswert, das toetende Objekt (killer) nicht
im NotifyPlayerDeath() zu zestoeren, sondern etwas zeitversetzt,
@@ -93,7 +103,7 @@
SIEHE AUCH
==========
- Defend(), do_damage(), NotifyHpChange(), catch(), write_file(), log_file()
- P_LAST_DEATH_PROPS
+ Defend(), do_damage(), *../efun/catch*, *../efun/write_file*,
+ log_file() P_LAST_DEATH_PROPS
-24.03.2012, Zesstra
+04.04.2020, Zesstra