
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)
