
AddWizardForUID()
*****************


FUNKTION
========

   string* AddWizardForUID(string uid, string wizard);


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

   /secure/master/userinfo.c


ARGUMENTE
=========

   uid
     Die UID, fuer die man einen (weiteren) verantwortlichen Magier
     explizit eintragen moechte.
   wizard
     Der Magier, den man eintragen moechte.


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

   Die Funktion traegt einen Magier 'wizard' explizit als verantwortlichen
   Magier fuer die UID 'uid' ein. Hierbei kann 'uid' sogar der Name eines
               anderen Magiers sein, dessen UIDs 'wizard' sozusagen "adoptiert".

               Berechtigt zum Eintragen von Magiern fuer bestimmte UIDs sind alle Magier,
   die (implizit oder explizit) verantwortlich fuer die jeweilige UID sind.
   Z.B. kann Zesstra ohne weiteres jemand weiteren als verantwortlich fuer
   d.inseln.zesstra eintragen.


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

   Zurueckgeliefert wird ein Array von Strings, jedes Element ist eine UID,
   fuer die dier Magier jetzt explizit eingetragen ist.


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

   Es ist nicht noetig, z.B. Zesstra als verantwortlich fuer d.inseln.zesstra
   einzutragen, da sie ohnehin schon implizit dafuer zustaendig ist. Auch
   fuer RMs bzw. GMs muss ihre Region bzw. Gilde nicht explizit eingetragen
   werden.


BEISPIELE
=========

   master()->AddWizardForUID("p.waterluh","zook");



               string *uids = master()->AddWizardForUID("jof","zook");
   printf("Zook ist nun explizit zustaendig fuer: %s\n",CountUp(uids));


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

   QueryWizardsForUID(), QueryUIDsForWizard,
               RemoveWizardFromUID()

20.02.2007, Zesstra
