blob: 924a70435e6062f093aa50d9f618ebcfdc69a09f [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
MG Mud User88f12472016-06-24 23:31:02 +02002NotifyPlayerDeath()
Zesstra953f9972017-02-18 15:37:36 +01003*******************
MG Mud User88f12472016-06-24 23:31:02 +02004
MG Mud User88f12472016-06-24 23:31:02 +02005
Zesstra953f9972017-02-18 15:37:36 +01006FUNKTION
7========
MG Mud User88f12472016-06-24 23:31:02 +02008
Zesstra953f9972017-02-18 15:37:36 +01009 void NotifyPlayerDeath(object victim,object killer,int lost_exp);
MG Mud User88f12472016-06-24 23:31:02 +020010
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra953f9972017-02-18 15:37:36 +010012DEFINIERT IN
13============
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstra953f9972017-02-18 15:37:36 +010015 /std/player/life.c
MG Mud User88f12472016-06-24 23:31:02 +020016
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstra953f9972017-02-18 15:37:36 +010018ARGUMENTE
19=========
MG Mud User88f12472016-06-24 23:31:02 +020020
Zesstra953f9972017-02-18 15:37:36 +010021 victim
Zesstra8bf98802020-04-04 16:18:47 +020022 Getoeteter Spieler.
23
Zesstra953f9972017-02-18 15:37:36 +010024 killer
Zesstra8bf98802020-04-04 16:18:47 +020025 Objekt, welches den Spieler getoetet hat.
26
Zesstra953f9972017-02-18 15:37:36 +010027 lost_exp
Zesstra8bf98802020-04-04 16:18:47 +020028 Erfahrungspunkte, die der Spieler durch den Tod verloren hat.
MG Mud User88f12472016-06-24 23:31:02 +020029
MG Mud User88f12472016-06-24 23:31:02 +020030
Zesstra953f9972017-02-18 15:37:36 +010031BESCHREIBUNG
32============
33
34 Diese Funktion wird aus dem Spielerobjekt heraus immer dann
35 aufgerufen, wenn der Spieler stirbt und zwar:
Zesstra8bf98802020-04-04 16:18:47 +020036
37 1. im Gegner, der den Spieler getoetet hat,
38
39 2. im Environment des getoeteten Spielers,
40
41 3. in der Gilde des Spielers,
42
43 4. in allen Objekten in diesem Environment und
44
45 5. in allen Objekten (auch innerhalb Containern) im Spieler.
46
Zesstra953f9972017-02-18 15:37:36 +010047 Der Gegner wird hierbei nur einmal informiert, also bei letzteren
Zesstra8bf98802020-04-04 16:18:47 +020048 Faellen herausgefiltert, falls noetig! Hauptaufgabe dieser Funktion
49 ist es somit, auf Tode von Spielern zu reagieren oder selbige
50 einfach nur mitzuloggen.
Zesstra953f9972017-02-18 15:37:36 +010051
Zesstra8bf98802020-04-04 16:18:47 +020052 Zu dem Zeitpunkt des Aufrufs dieser Funktion ist der Spieler noch
53 _nicht_ Geist und noch _nicht_ im Todesraum - dies wird im
54 Anschluss an den Aufruf der NotifyPlayerDeath() durchgefuehrt.
Zesstra953f9972017-02-18 15:37:36 +010055
Zesstra8bf98802020-04-04 16:18:47 +020056 Wenn ein Spieler an Gift stirbt, gibt es kein Killerobjekt - in dem
57 Fall ist <killer> 0. (P_KILLER im Opfer ist in diesem Fall "gift".)
Zesstra953f9972017-02-18 15:37:36 +010058
Zesstra8bf98802020-04-04 16:18:47 +020059 Aufgerufen wird die Funktion aus '/std/player/life.c' mittels
60 catch() und werden mit limited() auf max. 150k (Gegner,
61 Environment, Gilde) bzw. 80k (alle anderen Objekte) Ticks
62 beschraenkt. Fehler in dieser Funktion haben somit keine negativen
63 Auswirkungen auf das Sterben des Spielers.
Zesstra953f9972017-02-18 15:37:36 +010064
65
66RUeCKGABEWERT
67=============
68
69 keiner
70
71
72BEISPIELE
73=========
74
75 Folgendes Beispiel demonstriert beispielsweise, wie man Tode von
76 Spielern mitloggen kann (das Beispiel ist hierbei auf den am
77 haeufigsten auftretenden Fall bezogen, dass nur das toetende Objekt
78 den Tod protokollieren soll):
79
Zesstra8bf98802020-04-04 16:18:47 +020080 void NotifyPlayerDeath(object dead, object killer, int lost_exp)
81 {
82 if ( intp(lost_exp) && objectp(dead) && objectp(killer) &&
83 killer==this_object() )
84 write_file( "/log/patryn/dead", sprintf(
85 "%s - %s von %s getoetet. XP: -%d", ctime(), getuid(dead),
86 killer->name(WEM), lost_exp) );
87 }
Zesstra953f9972017-02-18 15:37:36 +010088
Zesstra8bf98802020-04-04 16:18:47 +020089 Bitte beachten: write_file() schreibt ohne Groessenbegrenzung in
90 das Logfile. Da dies auf Dauer bzw. in Gebieten mit hoher Log-
91 Aktivitaet zu Logfiles von enormer Groesse fuehren kann, ist die
92 Verwendung von write_file() nicht empfehlenswert. Ausnahmen koennen
93 natuerlich mit dem zustaendigen Regionsmagier abgesprochen werden,
94 z.B. fuer begrenzte Anwendung etwa bei sehr starken, selten
95 besiegten Gegnern.
Zesstra953f9972017-02-18 15:37:36 +010096
97 Weiterhin ist es empfehlenswert, das toetende Objekt (killer) nicht
98 im NotifyPlayerDeath() zu zestoeren, sondern etwas zeitversetzt,
99 damit nicht etwa im nachfolgenden NotifyPlayerDeath() eines anderen
100 Objektes (s.o. Reihenfolge) killer==0 ist.
101
102
103SIEHE AUCH
104==========
105
Zesstra8bf98802020-04-04 16:18:47 +0200106 Defend(), do_damage(), *../efun/catch*, *../efun/write_file*,
107 log_file() P_LAST_DEATH_PROPS
Zesstra953f9972017-02-18 15:37:36 +0100108
Zesstra8bf98802020-04-04 16:18:47 +020010904.04.2020, Zesstra