P_KILL_MSG
==========

NAME
----
::

	P_KILL_MSG			"kill_msg"

DEFINIERT IN
------------
::

	/sys/properties.h

BESCHREIBUNG
------------
::

     Wenn ein Spieler getoetet wird, so erscheint dazu eine kurze Information
     auf dem Todeskanal. Um dem toetenden Objekt zusaetzlich die Moeglichkeit
     zu geben, noch etwas mehr auf diesem Kanal auszugeben, kann man in
     dieser Property einen String uebergeben.
     Noetige Zeilenumbrueche werden hierbei automatisch generiert.

     Es ist auch moeglich anzugeben, ob Emotes verwendet werden und ob das
     toetende Objekt ein Plural-Objekt ist. Hierzu uebergibt man ein Array
     der Gestalt:

	({Killmessage,Emotes}) bzw. ({Killmessage,Emotes,PLURAL})

     Der Eintrag <Killmessage> stellt hierbei die Meldung selbst dar, PLURAL
     gibt an, dass es sich um ein Plural-Objekt handelt und <Emotes> kann
     folgende Werte annehmen:

	MSG_SAY    - Meldung wird normal ausgegeben.
	MSG_EMOTE  - Meldung erscheint als Emote.
	MSG_GEMOTE - Meldung erscheint als Genitiv-Emote.
	MSG_EMPTY  - Meldung erscheint ohne zuvorige Angabe des
	               toetenden Objektes.

     Moechte man die Meldung noch etwas "persoenlicher" ;-) gestalten, so
     kann man den Platzhalter %s verwenden. An dessen Stelle wird dann der
     Name des Verblichenen eingesetzt.

BEISPIEL
--------
::

     Ein nettes Beispiel ist das folgende: Wenn ein Spieler sich als
     Drachentoeter bewehrt hat, so kann er traditionell in seinem Blut baden.
     Hin und wieder ist jedoch auch der Drache erfolgreich, dem man eine
     lustige Zusatzmeldung fuer den Todeskanal uebergeben kann:

     void create() {
       ::create();
       ...
       SetProp(P_KILL_MSG,"Jetzt bade ich mal in DEINEM Blut, %s!");
       ...
     }


     Falls der 'Killer' ein Plural-Objekt oder -NPC war, koennte eine Meldung
     auch folgendermassen aussehen:

     SetProp(P_KILL_MSG,({"haun sich jetzt die Hucke voll.",
			  MSG_EMOTE,
			  PLURAL}));

     wobei P_KILL_NAME hier natuerlich auf "Eine Menge Orks" oder
     dergleichen gesetzt sein sollte. Auf dem Kanal waere dann dies zu
     lesen:

	[Tod:Lars] Eine Menge Orks haben gerade Orktoeter umgebracht.
	[Tod:Eine Menge Orks haun sich jetzt die Hucke voll.]


     Weiteres Beispiel.
     Man habe einen NPC, dessen Killname als Plural aufzufassen ist, der aber
     keinen zusaetlichen Text auf -Tod bringen soll.

     SetProp(P_NAME, "Eine Horde Gummibaeren");
     SetProp(P_KILL_NAME, "Viele kleine Gummibaeren");
     SetProp(P_KILL_MSG, ({0, 0, 1}));

SIEHE AUCH
----------
::

     Tod:		die(L)
     Todesmeldungen:	P_KILL_NAME, P_DIE_MSG, P_MURDER_MSG
			P_ZAP_MSG, P_ENEMY_DEATH_SEQUENCE
     Sonstiges:		P_CORPSE, P_NOCORPSE, /room/death/death_room.c


Last modified: Wed Aug 21 14:36:04 2002 by Bambi

