
QueryWizardsForUID()
********************


FUNKTION
========

   varargs string* QueryWizardsForUID(string uid, int recursive);


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

   /secure/master/userinfo.c


ARGUMENTE
=========

   uid
     Die UID, fuer die man die Magier ermitteln will, die fuer sie
     zustaendig sind.
   recursive (optional)
     gibt an, ob das QueryWizardsForUID() (indirekt) aus einem
     QueryWizardsForUID() heraus gerufen wurde. Sollte nicht manuell gesetzt
     werden.


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

   Die Funktion ermittelt die Magier, die fuer diese UID zustaendig sind.


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

   Zurueckgeliefert wird ein Array von Strings, jedes Element ist ein Magier.
   Sollte fuer eine UID kein Magier ermittelbar sein, ist das Array leer.
   Wenn z.B. fuer die UID der Magier "Atamur" gefunden wird, aber fuer alle
   UIDs von "Atamur" auch der Magier "Rumata" zustaendig sein sollte, wird
   "Rumata" ueber eine rekursive Suche gefunden.


BEMERKUNGEN
===========

   Wenn die UID den Magier nicht implizit enthaelt (z.B. GUILD.gilde, im
   Gegensatz zu d.region.magier), findet diese Funktion nur Magier, fuer die
   seit Laden des Master bereits einmal get_userinfo() oder
   QueryUIDsForWizard() im Master gerufen wurde, was z.B. Einloggen passiert.
   Magier, die lang nicht einloggten, werden also manchmal nicht gefunden,
   was in der Regel nicht schlimm sein sollte, da sie ja ohnehin den
   entsprechenden Code gerade nicht warten...


BEISPIELE
=========

   string *wiz = master()->QueryWizards("GUILD.klerus");
   // wiz enthaelt nun: ({"morgoth","magdalena"})


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

   QueryUIDsForWizard(),
               AddWizardForUID(), RemoveWizardFromUID()

16.12.2007, Zesstra
