blob: 6c7af32aef102d9e7297f5c87ab6bc98c1efb379 [file] [log] [blame]
Arathorn3ec3af02021-01-20 00:17:51 +01001
2Der Ebenenverwalter channeld.
3-----------------------------
4
5Alle noetigen Defines sind in /p/daemon/channel.h definiert. Wenn man den
6channeld verwenden will, bitte dieses inkludieren.
7
8Typischer Aufruf: CHMASTER->join("Abenteuer", this_object());
9
10
11Oeffentliche Funktionen
12------------------------
13
14Zuerst die wohl am haeufigsten verwendeten Funktionen, beitreten, senden,
15verlassen.
16
17public int join(string chname, object joining)
18
19 Objekt <joining> betritt Ebene <chname>. Dies wird zugelassen, wenn es
20 die Berechtigung hat und noch nicht Mitglied ist.
21 (Man kann einer Ebene nicht zweimal beitreten.)
22 Wenn <joining> der urspruengliche Ersteller der Ebene ist, wird er
23 automatisch zum neuen Supervisor (SV).
24 Rueckgabewert: 0 bei Erfolg, E_ACCESS_DENIED (-1) sonst.
25 Hinweis: Das Objekt <joining> muss einen string bei Aufruf von name()
26 zurueckgeben.
27
28
29public varargs int send(string chname, object sender, string msg, int type)
30
31 Nachricht <msg> vom Typ <type> mit Absender <pl> auf der Ebene <chname>
32 posten, sofern <pl> dort senden darf.
33 <type> ist einer der Nachrichtentypen aus "channel.h":
34 MSG_SAY 0 normale Nachricht
35 MSG_EMOTE 1 Emote
36 MSG_GEMOTE 2 Genitiv-Emote
37
38 Die Nachricht <msg> wird an die Funktion ChannelMessage() in den Ebenen-
39 Mitgliedern uebergeben und von dieser ausgegeben.
40
41 Rueckgabewerte:
42 0 Nachricht erfolgreich gesendet
43 E_ACCESS_DENIED -1 Zugriff verweigert
44 E_NOT_MEMBER -3 Objekt <sender> hat die Ebene nicht betreten
45 E_EMPTY_MESSAGE -4 Die Nachricht hatte keinen Inhalt
46
47
48public int leave(string chname, object leaving)
49
50 Objekt <leaving> verlaesst Ebene <chname>.
51 Wenn danach kein Zuhoerer mehr auf der Ebene ist, loest sie sich auf.
52
53 Zugriffsrechte werden dabei ueberprueft, obwohl es normalerweise keinen
54 Grund geben duerfte, das Verlassen einer Ebene zu verbieten. Es ist
55 allerdings technisch durchaus moeglich, dem Objekt <leaving> das
56 Verlassen zu verweigern, z.B. auf Grund eines Banns.
57 Rueckgabewerte:
58 0 erfolgreich verlassen
59 E_ACCESS_DENIED -1 Zugriff verweigert
60 E_NOT_MEMBER -2 Objekt <leaving> war gar nicht Mitglied
61
62
63public varargs int new(string ch_name, object owner, string|closure desc,
64 int channel_flags)
65
66 Erstellt eine neue Ebene <ch_name> mit <owner> als Ebenenbesitzer. Wird
67 auch vom channeld selbst verwendet, um die in channeld.init definierten
68 Ebenen zu erzeugen. Inaktive Ebenen werden ebenfalls ueber new()
69 reaktiviert, mitsamt ihrer bestehenden History.
70
71 <ch_name> Darf nicht 0 oder leer sein. Zur Anzeige wird der Name in der
72 angegebenen Schreibweise verwendet, fuer interne Zwecke wird
73 aber immer der kleingeschriebene Name genutzt. Das gilt auch
74 fuer die Pruefung von Zugriffsrechten.
75 <desc> Kann die statische Beschreibung der Ebene sein oder eine
76 Closure, die dynamisch aktualisierte Infos ausgibt.
77 <owner> Besitzer des Channels, Supervisor (SV) genannt.
78 Sollte eine Funktion ch_check_access() definieren, die gerufen
79 wird, wenn eine Ebenenaktion vom Typ join/leave/send/list/users
80 eingeht.
81 <channel_flags>
82
83 Rueckgabewerte:
84 0 Ebene erfolgreich erstellt.
85 E_ACCESS_DENIED -1
86 - Channelname existiert schon
87 - Maximalzahl Channels erreicht
88 - Channelname war Unsinn (leer oder 0)
89 - keine Beschreibung angegeben, und es existiert auch keine passende
90 inaktive Ebene
91 - kein Supervisor (SV) angegeben
92 - angegebener Supervisor darf keine Ebenen erstellen (Bann, oder
93 verbotener Name)
94 - bei Reaktivierung einer inaktiven Ebene wird ein neuer Supervisor
95 angegeben, aber die Ebene war mit unveraenderlichem Supervisor
96 (CHF_FIXED_SUPERVISOR) initialisiert worden; ein neuer Supervisor
97 wird dann abgelehnt, damit die Kontrolle ueber die Ebene nicht von
98 anderen Objekten uebernommen werden kann.
99
100 Fuer die Erstellung und Funktionsweise von Supervisor-Objekten wird
101 auf
102
103
104public int|mapping list(object pl)
105
106 Gibt ein Mapping mit allen Ebenen aus, die das Objekt <pl> lesen kann,
107 oder den Fehlercode E_ACCESS_DENIED (-1).
108 Struktur des Mappings:
109 ([ string chname, ({object* members, closure access_cl, string desc,
110 object supervisor, string ch_name }) ])
111
112
113public string|string* find(string chname, object pl)
114
115 Ebene suchen, deren Name <chname> enthaelt, und auf der Objekt <pl>
116 senden darf.
117 Rueckgabewerte:
118 - den gefundenen Namen als String
119 - String-Array, wenn es mehrere Treffer gibt
120 - 0, wenn es keinen Treffer gibt
121
122
123public int|<int|string>** history(string chname, object pl)
124
125 Ebenen-History abfragen. Objekt <pl> muss berechtigt sein, dem Channel
126 <chname> beizutreten.
127 Rueckgabewert: E_ACCESS_DENIED (-1) bei fehlender Berechtigung, ansonsten
128 ({string channelname, string sender, string msg, int msg_type})
129
130
131public int transfer_ownership(string chname, object new_owner)
132
133 Aendert den Ersteller/Besitzer der Ebene.
134 Achtung: das ist nicht das gleiche wie der aktuelle Supervisor (SV)!
135 Nur der aktuelle Besitzer, Supervisor oder EM+ darf die Ebene
136 verschenken.
137
138
139public int change_channel_flags(string chname, int newflags)
140
141 Aendert die Zugriffsflags der Ebene. Hierbei handelt es sich nicht um die
142 Stufenlimits fuer join() oder send().
143 Nur der aktuelle Supervisor (SV), der Ersteller, oder EM+ duerfen die
144 Flags aendern.
145 Die moeglichen Flags sind die, die auch in channeld.init verwendet werden
146 und in /p/daemon/channel.h definiert sind:
147 CHF_FIXED_SUPERVISOR 1 kein Wechsel des Supervisor erlaubt
148
149 Folgende Flags werden nur in Supervisor-Objekten verwendet:
150 CH_ACCESS_WIZARD 1 reine Magierebene
151 CH_ACCESS_NOGUEST 2 keine Gaeste erlaubt
152
153
154Funktionen fuer Erzmagierkommandos:
155
156public int remove_channel(string chname, object pl)
157 Wird aus der Shell gerufen, fuer das Erzmagier-Kommando "kill".
158
159public int clear_history(string chname)
160 Wird aus der Shell aufgerufen, fuer das Erzmagier-Kommando "clear".
161
162
163Siehe auch:
164-----------
165
166 Init-Datei: channeld.init
167 Supervisor: channel-supervisor
168 Beispiele: /doc/beispiele/ebenen/supervisor.c
169 /doc/beispiele/ebenen/supervisor-thing.c
170