blob: 439a67e096814d5acffd68e47ca0ac1ee37f70f5 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001NotifyPlayerDeath()
Zesstra953f9972017-02-18 15:37:36 +01002*******************
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 void NotifyPlayerDeath(object victim,object killer,int lost_exp);
MG Mud User88f12472016-06-24 23:31:02 +02009
MG Mud User88f12472016-06-24 23:31:02 +020010
Zesstra953f9972017-02-18 15:37:36 +010011DEFINIERT IN
12============
MG Mud User88f12472016-06-24 23:31:02 +020013
Zesstra953f9972017-02-18 15:37:36 +010014 /std/player/life.c
MG Mud User88f12472016-06-24 23:31:02 +020015
MG Mud User88f12472016-06-24 23:31:02 +020016
Zesstra953f9972017-02-18 15:37:36 +010017ARGUMENTE
18=========
MG Mud User88f12472016-06-24 23:31:02 +020019
Zesstra953f9972017-02-18 15:37:36 +010020 victim
Zesstra8bf98802020-04-04 16:18:47 +020021 Getoeteter Spieler.
22
Zesstra953f9972017-02-18 15:37:36 +010023 killer
Zesstra8bf98802020-04-04 16:18:47 +020024 Objekt, welches den Spieler getoetet hat.
25
Zesstra953f9972017-02-18 15:37:36 +010026 lost_exp
Zesstra8bf98802020-04-04 16:18:47 +020027 Erfahrungspunkte, die der Spieler durch den Tod verloren hat.
MG Mud User88f12472016-06-24 23:31:02 +020028
MG Mud User88f12472016-06-24 23:31:02 +020029
Zesstra953f9972017-02-18 15:37:36 +010030BESCHREIBUNG
31============
32
33 Diese Funktion wird aus dem Spielerobjekt heraus immer dann
34 aufgerufen, wenn der Spieler stirbt und zwar:
Zesstra8bf98802020-04-04 16:18:47 +020035
36 1. im Gegner, der den Spieler getoetet hat,
37
38 2. im Environment des getoeteten Spielers,
39
40 3. in der Gilde des Spielers,
41
42 4. in allen Objekten in diesem Environment und
43
44 5. in allen Objekten (auch innerhalb Containern) im Spieler.
45
Zesstra953f9972017-02-18 15:37:36 +010046 Der Gegner wird hierbei nur einmal informiert, also bei letzteren
Zesstra8bf98802020-04-04 16:18:47 +020047 Faellen herausgefiltert, falls noetig! Hauptaufgabe dieser Funktion
48 ist es somit, auf Tode von Spielern zu reagieren oder selbige
49 einfach nur mitzuloggen.
Zesstra953f9972017-02-18 15:37:36 +010050
Zesstra8bf98802020-04-04 16:18:47 +020051 Zu dem Zeitpunkt des Aufrufs dieser Funktion ist der Spieler noch
52 _nicht_ Geist und noch _nicht_ im Todesraum - dies wird im
53 Anschluss an den Aufruf der NotifyPlayerDeath() durchgefuehrt.
Zesstra953f9972017-02-18 15:37:36 +010054
Zesstra8bf98802020-04-04 16:18:47 +020055 Wenn ein Spieler an Gift stirbt, gibt es kein Killerobjekt - in dem
56 Fall ist <killer> 0. (P_KILLER im Opfer ist in diesem Fall "gift".)
Zesstra953f9972017-02-18 15:37:36 +010057
Zesstra8bf98802020-04-04 16:18:47 +020058 Aufgerufen wird die Funktion aus '/std/player/life.c' mittels
59 catch() und werden mit limited() auf max. 150k (Gegner,
60 Environment, Gilde) bzw. 80k (alle anderen Objekte) Ticks
61 beschraenkt. Fehler in dieser Funktion haben somit keine negativen
62 Auswirkungen auf das Sterben des Spielers.
Zesstra953f9972017-02-18 15:37:36 +010063
64
65RUeCKGABEWERT
66=============
67
68 keiner
69
70
71BEISPIELE
72=========
73
Zesstrafcd44702022-10-05 23:47:39 +020074 Folgendes Beispiel demonstriert, wie man Tode von Spielern
75 mitloggen kann (das Beispiel ist hierbei auf den am haeufigsten
76 auftretenden Fall bezogen, dass nur das toetende Objekt den Tod
77 protokollieren soll):
Zesstra953f9972017-02-18 15:37:36 +010078
Zesstra8bf98802020-04-04 16:18:47 +020079 void NotifyPlayerDeath(object dead, object killer, int lost_exp)
80 {
81 if ( intp(lost_exp) && objectp(dead) && objectp(killer) &&
82 killer==this_object() )
83 write_file( "/log/patryn/dead", sprintf(
84 "%s - %s von %s getoetet. XP: -%d", ctime(), getuid(dead),
85 killer->name(WEM), lost_exp) );
86 }
Zesstra953f9972017-02-18 15:37:36 +010087
Zesstra8bf98802020-04-04 16:18:47 +020088 Bitte beachten: write_file() schreibt ohne Groessenbegrenzung in
89 das Logfile. Da dies auf Dauer bzw. in Gebieten mit hoher Log-
90 Aktivitaet zu Logfiles von enormer Groesse fuehren kann, ist die
91 Verwendung von write_file() nicht empfehlenswert. Ausnahmen koennen
92 natuerlich mit dem zustaendigen Regionsmagier abgesprochen werden,
93 z.B. fuer begrenzte Anwendung etwa bei sehr starken, selten
94 besiegten Gegnern.
Zesstra953f9972017-02-18 15:37:36 +010095
96 Weiterhin ist es empfehlenswert, das toetende Objekt (killer) nicht
97 im NotifyPlayerDeath() zu zestoeren, sondern etwas zeitversetzt,
98 damit nicht etwa im nachfolgenden NotifyPlayerDeath() eines anderen
99 Objektes (s.o. Reihenfolge) killer==0 ist.
100
101
102SIEHE AUCH
103==========
104
Zesstrafcd44702022-10-05 23:47:39 +0200105 Defend(), do_damage(), catch(), write_file(), log_file()
106 P_LAST_DEATH_PROPS
Zesstra953f9972017-02-18 15:37:36 +0100107
Zesstra8bf98802020-04-04 16:18:47 +020010804.04.2020, Zesstra