
QueryUIDsForWizard()
********************


FUNKTION
========

   varargs string* QueryUIDsForWizard(string wizname, int recursive);


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

   /secure/master/userinfo.c


ARGUMENTE
=========

   wizname
     Der Magier, fuer den man die UIDs ermitteln will, fuer die er
     zustaendig ist.
   recursive (optional)
     Gibt an, ob QueryUIDsForWizard() (indirekt) rekursiv aufgerufen wurde.
     Sollte normalerweise nicht per Hand gesetzt werden.


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

   Die Funktion ermittelt die UIDs, fuer die dieser Magier zustaendig ist.
   Dabei wird impliziert beruecksichtigt, wenn der Magier RM einer Region
   oder Gildenmagier einer Gilde ist, ebenso wie Verzeichnisse in den
   Regionen oder in /p/service.
   Ausserdem wird nachgeschaut, fuer welche UIDs dieser Magier explizit
   eingetragen worden ist.
   Wenn z.B. Magier A auch fuer alle UIDs von Magier B zustaendig sein
   sollte, liefert die Funktion auch die UIDs von B zurueck.


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

   Zurueckgeliefert wird ein Array von Strings, jedes Element ist eine UID.
   Sollte fuer einen Namen keine UID ermittelbar sein, ist das Arrays leer.


BEISPIELE
=========

   string *uids = master()->QueryUIDsForWizard("ennox");
   // uids enthaelt nun:
   // ({"ennox","d.anfaenger.ennox","d.schattenwelt.ennox",
   //   "p.service.ennox","GUILD.chaos","p.chaos"})


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

   QueryWizardsForUID(),
               AddWizardForUID(), RemoveWizardFromUID()

16.12.2007, Zesstra
