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