GESCHUETZT
SYNOPSIS
        #include <wizlist.h>

        mixed * wizlist_info()

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

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

            string  w[WL_NAME]          Name des Gottes
            int w[WL_COMMANDS]          Gewichtete Anzahl Kommandos, 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%.

GESCHICHTE
        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)
