
query_userlist()
****************


FUNKTION
========

   public mixed query_userlist(string user, int prop)


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

   /secure/master/userinfo.c


ARGUMENTE
=========

   user
      UID des abzufragenden Users

   prop
      Datum aus der Userliste, welches abgefragt werden soll


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

   Aus der Userliste des MG wird eine der folgenden Informationen
   ueber den Spieler <user> abgefragt:

   USER_LEVEL (int)
      Magierlevel (1 fuer Seher)

   USER_DOMAIN (string*)
      Liste der Regionen, in der der Magier RM ist

   USER_OBJECT (string)
      Shell des Spielers

   USER_CREATION_DATE (int)
      Zeit des ersten Logins

   USER_GUILD (string*)
      Gilden, fuer welche die Spielerin Gildenmagierin ist

   USER_EKTIPS (string)
      Fuer welche EKs hat der Spieler einen Tip erhalten? Rueckgabe
      als Bitstring, in welchem die entsprechenden Bits gesetzt sind.

   USER_FPTIPS (string)
      Fuer welche FPs hat der Spieler einen Tip erhalten? Rueckgabe
      als Bitstring, in welchem die entsprechenden Bits gesetzt sind.

   USER_UIDS_TO_TAKE_CARE (string*)
      UIDs, fuer welche die Magierin zustaendig ist. Hierbei sind nur
      explizit eingetragene in diesem Array, nicht welche, fuer sie
      implizit kraft ihres Amtes zustaendig ist (z.B. als GM oder RM).

   Die o.a. Konstanten sind in <userinfo.h> definiert.

   Wenn der Spieler nicht existiert, wird 0 zurueckgegeben. Ein nicht
   unterstuetztes <prop> loest einen Laufzeitfehler aus.


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

   *find_userinfo*

Last modified: 21.01.2020, Zesstra
