Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc//wiz/channels

Der Ebenenverwalter channeld.
-----------------------------

Alle noetigen Defines sind in /p/daemon/channel.h definiert. Wenn man den
channeld verwenden will, bitte dieses inkludieren.

Typischer Aufruf: CHMASTER->join("Abenteuer", this_object());


Oeffentliche Funktionen
------------------------

Zuerst die wohl am haeufigsten verwendeten Funktionen, beitreten, senden,
verlassen.

public int join(string chname, object joining)

    Objekt  betritt Ebene . Dies wird zugelassen, wenn es
    die Berechtigung hat und noch nicht Mitglied ist.
    (Man kann einer Ebene nicht zweimal beitreten.)
    Wenn  der urspruengliche Ersteller der Ebene ist, wird er
    automatisch zum neuen Supervisor (SV).
    Rueckgabewert: 0 bei Erfolg, E_ACCESS_DENIED (-1) sonst.
    Hinweis: Das Objekt  muss einen string bei Aufruf von name()
    zurueckgeben.


public varargs int send(string chname, object sender, string msg, int type)
  
    Nachricht  vom Typ  mit Absender  auf der Ebene 
    posten, sofern  dort senden darf.
     ist einer der Nachrichtentypen aus "channel.h":
        MSG_SAY     0     normale Nachricht
        MSG_EMOTE   1     Emote
        MSG_GEMOTE  2     Genitiv-Emote

    Die Nachricht  wird an die Funktion ChannelMessage() in den Ebenen-
    Mitgliedern uebergeben und von dieser ausgegeben.
    
    Rueckgabewerte:
    0                     Nachricht erfolgreich gesendet
    E_ACCESS_DENIED  -1   Zugriff verweigert
    E_NOT_MEMBER     -3   Objekt  hat die Ebene nicht betreten
    E_EMPTY_MESSAGE  -4   Die Nachricht hatte keinen Inhalt


public int leave(string chname, object leaving)
  
    Objekt  verlaesst Ebene .
    Wenn danach kein Zuhoerer mehr auf der Ebene ist, loest sie sich auf.

    Zugriffsrechte werden dabei ueberprueft, obwohl es normalerweise keinen
    Grund geben duerfte, das Verlassen einer Ebene zu verbieten. Es ist
    allerdings technisch durchaus moeglich, dem Objekt  das
    Verlassen zu verweigern, z.B. auf Grund eines Banns.
    Rueckgabewerte:
    0           erfolgreich verlassen
    E_ACCESS_DENIED  -1  Zugriff verweigert
    E_NOT_MEMBER     -2  Objekt  war gar nicht Mitglied


public varargs int new(string ch_name, object owner, string|closure desc,
                       int channel_flags)
  
    Erstellt eine neue Ebene  mit  als Ebenenbesitzer. Wird
    auch vom channeld selbst verwendet, um die in channeld.init definierten
    Ebenen zu erzeugen. Inaktive Ebenen werden ebenfalls ueber new()
    reaktiviert, mitsamt ihrer bestehenden History.

     Darf nicht 0 oder leer sein. Zur Anzeige wird der Name in der
              angegebenen Schreibweise verwendet, fuer interne Zwecke wird
              aber immer der kleingeschriebene Name genutzt. Das gilt auch
              fuer die Pruefung von Zugriffsrechten.
        Kann die statische Beschreibung der Ebene sein oder eine 
              Closure, die dynamisch aktualisierte Infos ausgibt.
       Besitzer des Channels, Supervisor (SV) genannt.
              Sollte eine Funktion ch_check_access() definieren, die gerufen
              wird, wenn eine Ebenenaktion vom Typ join/leave/send/list/users
              eingeht.
     

    Rueckgabewerte:
    0   Ebene erfolgreich erstellt.
    E_ACCESS_DENIED  -1 
      - Channelname existiert schon
      - Maximalzahl Channels erreicht
      - Channelname war Unsinn (leer oder 0)
      - keine Beschreibung angegeben, und es existiert auch keine passende
        inaktive Ebene
      - kein Supervisor (SV) angegeben
      - angegebener Supervisor darf keine Ebenen erstellen (Bann, oder
        verbotener Name)
      - bei Reaktivierung einer inaktiven Ebene wird ein neuer Supervisor
        angegeben, aber die Ebene war mit unveraenderlichem Supervisor
        (CHF_FIXED_SUPERVISOR) initialisiert worden; ein neuer Supervisor
        wird dann abgelehnt, damit die Kontrolle ueber die Ebene nicht von
        anderen Objekten uebernommen werden kann.

    Fuer die Erstellung und Funktionsweise von Supervisor-Objekten wird
    auf 


public int|mapping list(object pl)
  
    Gibt ein Mapping mit allen Ebenen aus, die das Objekt  lesen kann,
    oder den Fehlercode E_ACCESS_DENIED (-1).
    Struktur des Mappings:
     ([ string chname, ({object* members, closure access_cl, string desc,
                         object supervisor, string ch_name }) ])


public string|string* find(string chname, object pl)
  
    Ebene suchen, deren Name  enthaelt, und auf der Objekt  
    senden darf.
    Rueckgabewerte:
    - den gefundenen Namen als String
    - String-Array, wenn es mehrere Treffer gibt
    - 0, wenn es keinen Treffer gibt


public int|** history(string chname, object pl)
  
    Ebenen-History abfragen. Objekt  muss berechtigt sein, dem Channel
     beizutreten.
    Rueckgabewert: E_ACCESS_DENIED (-1) bei fehlender Berechtigung, ansonsten
    ({string channelname, string sender, string msg, int msg_type})


public int transfer_ownership(string chname, object new_owner)
  
    Aendert den Ersteller/Besitzer der Ebene.
    Achtung: das ist nicht das gleiche wie der aktuelle Supervisor (SV)!
    Nur der aktuelle Besitzer, Supervisor oder EM+ darf die Ebene
    verschenken.


public int change_channel_flags(string chname, int newflags)
  
    Aendert die Zugriffsflags der Ebene. Hierbei handelt es sich nicht um die
    Stufenlimits fuer join() oder send().
    Nur der aktuelle Supervisor (SV), der Ersteller, oder EM+ duerfen die
    Flags aendern.
    Die moeglichen Flags sind die, die auch in channeld.init verwendet werden
    und in /p/daemon/channel.h definiert sind:
    CHF_FIXED_SUPERVISOR 1    kein Wechsel des Supervisor erlaubt

    Folgende Flags werden nur in Supervisor-Objekten verwendet:
    CH_ACCESS_WIZARD  1       reine Magierebene
    CH_ACCESS_NOGUEST 2       keine Gaeste erlaubt


Funktionen fuer Erzmagierkommandos:

public int remove_channel(string chname, object pl)
  Wird aus der Shell gerufen, fuer das Erzmagier-Kommando "kill".

public int clear_history(string chname)
  Wird aus der Shell aufgerufen, fuer das Erzmagier-Kommando "clear".


Siehe auch:
-----------

    Init-Datei:   channeld.init
    Supervisor:   channel-supervisor
    Beispiele:    /doc/beispiele/ebenen/supervisor.c
                  /doc/beispiele/ebenen/supervisor-thing.c


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.