Supervisoren fuer Ebenen
************************

    Die Supervisoren (im Folgenden kurz SV) von Ebenen werden vom channeld
    gefragt, ob ein Objekt eine bestimmte Aktion auf einer bestimmten Ebenen
    ausfuehren darf, z.B. Betreten einer Ebene oder Senden auf einer Ebene.
    Die SVs sind selbst ebenfalls immer Zuhoerer auf der Ebene.

    Wird ein SV zerstoert, wird im Normalfall ein neuer SV aus dem Kreise der
    aktuellen Zuhoerer bestimmt, ueblicherweise das am laengsten zuhoerende
    Objekt.

    Betritt ein Objekt, das eine Ebene erschaffen hat (der erste Supervisor), 
    eine Ebene nach Verlassen erneut, uebernimmt es automatisch die SV-Rolle
    wieder, sofern das Objekt *kein* Spieler oder Magier ist.


Erstellen von Supervisoren
==========================

    Im einfachsten Fall wird /std/channel_supervisor geerbt, ein Name
    konfiguriert und das systemweite Init-File fuer Ebenen eingelesen. 
    Anschliessend erhaelt man das Standardverhalten, was im Init-File
    konfiguriert ist. Ein Beispiel hierfuer findet sich 
    /doc/beispiele/ebenen/supervisor.c.

    Man kann die SV-Funktionalitaet in einem bestehenden Objekt ergaenzen,
    indem man /std/channel_supervisor zusaetzlich erbt. Hierbei ist zu
    beachten, dass channel_supervisor.c selbst bereits die Funktionen name()
    und Name() definiert und dort (undekliniert) den Namen zurueckgibt, der
    per ch_set_sv_name() eingestellt wurde.
    
    Wenn also das erbende Objekt deklinierte Namen ausgeben soll oder
    einen anderen Namen als den SV-Namen, muss im erbenden Objekt name()
    ueberschrieben werden. Dabei ist zu beachten, dass die ueberschreibende
    Funktion explizit das Objekt angeben muss, in dem das geerbte name()
    gerufen werden soll, d.h. beispielsweise   return thing::name();   statt
    nur ::name();
    
    Alternativ kann man die Inherit-Reihenfolge geeignet waehlen, so dass
    channel_supervisor::name() schon dadurch ueberschrieben wird.
    Ein Beispiel hierfuer steht in /doc/beispiele/ebenen/supervisor-thing.c.

    Will man einen SV fuer eine Ebene konfigurieren, die keine Standardebene
    ist, kann man ein eigenes Init-File einlesen (Format siehe Manpage
    "channeld.init"). In diesem Fall ist aber zu beachten, dass man
    durch Aufruf von CHMASTER->new() selber Sorge dafuer tragen muss, dass
    die Ebene erstellt wird. 
    (Eine Standardebene ist eine Ebene, die in der globalen
    Konfigurationsdatei /p/daemon/channeld.init aufgefuehrt ist und daher
    vom Channeld automatisch erzeugt wird.)

    Will man einen SV mit einem gaenzlich anderen Verhalten bauen, so ist
    auch das moeglich, indem man die lfun

      public int ch_check_access(string ch, object user, string cmd)

    ueberschreibt. Diese wird vom channeld im SV gerufen. Gibt sie eine 1
    zurueck, darf das Objekt <user> auf der Ebene <ch> die Aktion <cmd>
    ausfuehren.  Anderenfalls muss 0 zurueckgeben werden. <cmd> ist hierbei
    eines der in /p/daemon/channel.h definierten Kommandos.

    Die Ebene <ch> wird immer kleingeschrieben uebergeben. Auch wenn der
    Name Spielern case-sensitiv angezeigt wird, kann es keine zwei Ebenen
    geben, welche sich nur in Gross-/Kleinschreibung unterscheiden und intern
    erfolgt die Verwaltung *immer* kleingeschrieben - dies gilt auch fuer die
    Rechtepruefung.


Siehe auch:
-----------
    
    Ebenen:     channels
    Init-File:  channeld.init
    Beispiele:  /doc/beispiele/ebenen/supervisor.c
                /doc/beispiele/ebenen/supervisor-thing.c
    lfuns:      ch_read_init_file()
                ch_set_sv_name()
