wizlist_info()
**************


GESCHUETZT
==========


SYNOPSIS
========

   #include <sys/wizlist.h>

   *mixed wizlist_info();


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

   Liefert ein Array mit Eintraegen aus der Wizlist (der internen
   Magierliste). Die Benutzung muss durch das Masterobjekt erlaubt
   werden.

   Das Resultat ist ein Array mit einem Eintrag fuer jeden Magier (uid).
   Jeder Eintrag enthaelt wiederum ein Array mit folgenden Elementen:

       string  w[WL_NAME]          Name des Magiers
       int w[WL_COMMANDS]          Gewichtete Anzahl Kommandi, die von
                                   Objekten dieses Gottes ausgefuehrt
                                   wurden
       int w[WL_COSTE]             Gewichtete Summe der Eval-Kosten
       int w[WL_GIGACOST]          Gewichtete Summe der Eval-Kosten
       int W[WL_TOTAL_COST]        Totale Summe der Eval-Kosten
       int w[WL_TOTAL_GIGACOST]    Totale Summe der Eval-Kosten
       int w[WL_HEART_BEAT]        Gewichtete Anzahl der heat_beat()s
       int w[WL_CALL_OUT]          Reserviert fuer call_out()s
                                   (bisher nicht implementiert)
       int w[WL_ARRAY_TOTAL]       Totale Groesse aller Arrays in
                                   Elementen
       mixed w[WL_EXTRA]           Die eigentliche Wizlist-Info

   Die "gewichteten" Werte verfallen pro Stunde um 10%.


AENDERUNGEN
===========

   LDMud 3.2.10 trennte das alte WL_EVAL_COST in WL_COST und WL_GIGACOST,
   um laengeren Uptimes gerecht zu werden. Ausserdem wurde
   WL_TOTAL_COST und WL_TOTAL_GIGACOST eingefuehrt.


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

   privilege_violation(M), set_extra_wizinfo_size(E),
   get_extra_wizinfo(E), set_extra_wizinfo(E)
