StopHuntText()
==============

FUNKTION
--------
::

	void StopHuntText(object arg);

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

	/std/living/combat.c

ARGUMENTE
---------
::

	arg
	  Der Gegner, welcher nicht mehr bekaempft wird.

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

	Mit der Funktion StopHuntFor() kann man ein Lebewesen als Gegner
	austragen. Dabei erhalten sowohl der Gegner, als auch das Lebewesen,
	welches (einseitig!) Frieden schliesst, jeweils eine Meldung, sofern
	man dies nicht mittels eines Flags unterbindet.
	Es ist nun moeglich, auf diese Meldung Einfluss zu nehmen, indem
	man die Funktion StopHuntText() ueberschreibt, welche dafuer
	verantwortlich ist.

BEISPIEL
--------
::

	Ein Lebewesen moechte einen Kampf sofort abbrechen, wenn es von
	einem Frosch angegriffen wird:
	  int Defend(int dam,mixed dam_type,mixed spell,object enemy)
	  { if(enemy&&enemy->QueryProp(P_FROG))
	    { if(StopHuntFor(enemy))
              { // wenn Frosch angreifen will, der noch kein Gegner war
                tell_object(arg,
         this_object()->Name(WER)+" kaempft nicht mit Dir.\n"
	+"Wahrscheinlich werden Froesche verschont.\n");
	        tell_object(this_object(),
	 "Der bloede Frosch wollte Dich doch tatsaechlich angreifen.\n");
              }
	      enemy->StopHuntFor(this_object(),1);
              return 0;
            }
	    return::Defend(dam,dam_type,spell,enemy);
	  }
	  // wird nur aufgerufen, wenn der Gegner irgendwann Frosch wurde
	  void StopHuntText(object arg)
	  { tell_object(arg,
	 this_object()->Name(WER)+" jagd Dich nicht mehr.\n"
	+"Wahrscheinlich werden Froesche verschont.\n");
	    tell_object(this_object(),
	"Dein Gegner ist doch tatsaechlich ploetzlich Frosch geworden!\n");
	  }
	Warum braucht man nun das erste StopHuntFor(), wenn doch Gegner erst
	in ::Defend() eingetragen werden, welches doch gar nicht ausgefuehrt
	wird, wenn der Gegner ein Frosch ist? Man beachte hierbei, dass der
	Gegner ja auch waehrend des Kampfes oder waehrend der Feindschaft
	irgendwann Frosch werden koennte und dann schon Gegner war.

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

	StopHuntFor(), SelectEnemy(), QueryEnemies(), IsEnemy()


Last modified: Wed May 26 16:47:51 1999 by Patryn

