Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc//lfun/NotifyPlayerDeath

NotifyPlayerDeath()
*******************


FUNKTION
========

   void NotifyPlayerDeath(object victim,object killer,int lost_exp);


DEFINIERT IN
============

   /std/player/life.c


ARGUMENTE
=========

   victim
      Getoeteter Spieler.

   killer
      Objekt, welches den Spieler getoetet hat.

   lost_exp
      Erfahrungspunkte, die der Spieler durch den Tod verloren hat.


BESCHREIBUNG
============

   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.

   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.

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


RUeCKGABEWERT
=============

   keiner


BEISPIELE
=========

   Folgendes Beispiel demonstriert, wie man Tode von Spielern
   mitloggen kann (das Beispiel ist hierbei auf den am 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) );
      }

   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,
   damit nicht etwa im nachfolgenden NotifyPlayerDeath() eines anderen
   Objektes (s.o. Reihenfolge) killer==0 ist.


SIEHE AUCH
==========


Defend(), do_damage(), catch(), write_file(), log_file() P_LAST_DEATH_PROPS

04.04.2020, Zesstra


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.