
TestIgnore()
************


FUNKTION
========

   public int TestIgnore(string|string* arg)


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

   /std/player/comm.c


ARGUMENTE
=========

   arg
       String oder Array von Strings, die getestet werden sollen,
       Format jeweils: [spieler].aktion[.qualifizierer]


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

   0, wenn arg nicht ignoriert wird
   MSG_IGNORED, wenn (min. ein Element von) arg ignoriert wird


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

   Es wird geprueft, ob der Spieler irgendeinen Eintrag auf seiner Liste
   hat, der dazu fuehrt, dass <arg> ignoriert wird. Hierbei kommen je nach
   den Angaben in <arg> folgende Regeln zum Tragen:
   1) spieler
      Wird der Spieler ignoriert?
   2) .aktion
      Ignoriert der Spieler .aktion, d.h. die Aktion komplett (OHNE
      Qualifizierer)?
   3) spieler.aktion
      Ignoriert der Spieler spieler, .aktion oder spieler.aktion?
   4) spieler.aktion.qualifizierer
      Ignoriert der Spieler spieler, .aktion, spieler.aktion oder
      spieler.aktion.qualifizierer?
   5) .aktion.qualifizierer
      Ignoriert der Spieler .aktion oder .aktion.qualifizierer?

   Da TestIgnore() damit durchaus etwas aufwendiger sein kann, sollte
   man dies nicht unnoetig oft aufrufen. (Braucht man das Ergebnis z.B.
   kurz spaeter nochmal, koennte man das Ergebnis speichern.) Wird der
   Qualifizierer nicht gebraucht, sollte man ihn weglassen.


BEISPIEL
========

   if (!this_player()->TestIgnore("andy"))
     tell_object(this_player(), "Andy teilt Dir mit: Hallo!\n");

   // Beispiel fuer eine Ignore-Check fuer Aktion (kratzen) fuer einen
   // Spieler (this_player()) an einem anderen Spieler (target)
   if (!target->TestIgnore( ({getuid(this_player()) + ".kratze",
                                 getuid(this_player()) + ".kratz"}) ))
   {
     tell_object(target, this_player()->Name()+" kratzt dich.\n");
     tell_object(this_player(), "Du kratzt "+target->Name()+".\n");
   }
   else
     tell_object(this_player(), target->Name()+" ignoriert dich.\n");

   // allumfassender Ignorier-Check in einer Gilde (Klerus) auf
   // eine Aktion (kurieren) fuer einen bestimmten Spieler (den caster)
   // an einem zu kurierenden Spieler (target)
   if (target->TestIgnore(getuid(caster)+".kuriere.klerus"))
     tell_object(caster, break_string(
       target->Name()+" ignoriert deinen Versuch.", 78));


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

   P_IGNORE, AddIgnore, RemoveIgnore, TestIgnoreSimple, /std/player/comm.c

26.04.2014 Zesstra
