MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 1 | NotifyPlayerDeath() |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 2 | ******************* |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 3 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 4 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 5 | FUNKTION |
| 6 | ======== |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 7 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 8 | void NotifyPlayerDeath(object victim,object killer,int lost_exp); |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 9 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 10 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 11 | DEFINIERT IN |
| 12 | ============ |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 13 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 14 | /std/player/life.c |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 15 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 16 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 17 | ARGUMENTE |
| 18 | ========= |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 19 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 20 | victim |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 21 | Getoeteter Spieler. |
| 22 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 23 | killer |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 24 | Objekt, welches den Spieler getoetet hat. |
| 25 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 26 | lost_exp |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 27 | Erfahrungspunkte, die der Spieler durch den Tod verloren hat. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 28 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 29 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 30 | BESCHREIBUNG |
| 31 | ============ |
| 32 | |
| 33 | Diese Funktion wird aus dem Spielerobjekt heraus immer dann |
| 34 | aufgerufen, wenn der Spieler stirbt und zwar: |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 35 | |
| 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 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 46 | Der Gegner wird hierbei nur einmal informiert, also bei letzteren |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 47 | Faellen herausgefiltert, falls noetig! Hauptaufgabe dieser Funktion |
| 48 | ist es somit, auf Tode von Spielern zu reagieren oder selbige |
| 49 | einfach nur mitzuloggen. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 50 | |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 51 | 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. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 54 | |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 55 | 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".) |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 57 | |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 58 | 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. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 63 | |
| 64 | |
| 65 | RUeCKGABEWERT |
| 66 | ============= |
| 67 | |
| 68 | keiner |
| 69 | |
| 70 | |
| 71 | BEISPIELE |
| 72 | ========= |
| 73 | |
Zesstra | fcd4470 | 2022-10-05 23:47:39 +0200 | [diff] [blame] | 74 | 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): |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 78 | |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 79 | 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 | } |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 87 | |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 88 | 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. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 95 | |
| 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 | |
| 102 | SIEHE AUCH |
| 103 | ========== |
| 104 | |
Zesstra | fcd4470 | 2022-10-05 23:47:39 +0200 | [diff] [blame] | 105 | Defend(), do_damage(), catch(), write_file(), log_file() |
| 106 | P_LAST_DEATH_PROPS |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 107 | |
Zesstra | 8bf9880 | 2020-04-04 16:18:47 +0200 | [diff] [blame] | 108 | 04.04.2020, Zesstra |