blob: a975eca90ed1c5835cfe374a496663e41841e7b8 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001General Mud Communication Protocol im MorgenGrauen
2==================================================
3
40. Einleitung
5 GMCP wird benutzt, um Daten zwischen MUD und Client "out of band" zu
6 uebertragen. "Out of band" bedeutet hier, dass der Datenaustausch hinter
7 den Kulissen passiert statt in der normalen textuellen Spielausgabe,
8 welcher vom Client mittels mehr oder weniger komplizierter Trigger
9 ausgewertet werden muss.
10
11 Vorteile:
12 * keine komplexen Trigger (Regexps) mehr.
13 * Daten werden in einem definierten Format uebertragen, welches der Client
14 fuer euch interpretiert.
15 * keine Gagtrigger mehr noetig, um empfangenen Text auszublenden
16 * keine stoerenden Ausgaben, falls man diese Gagtrigger nicht hat.
17 * Daten koennen auch uebertragen werden in Situationen, in denen eine
18 normale Textausgabe nicht so gut geht, z.B. in Editoren.
19 * Daten, die die Clientscripte nicht verarbeiten, stoeren nicht den
20 Textfluss.
21 * Der Client kann konfigurieren, welche Informationen er bekommen will.
MG Mud User88f12472016-06-24 23:31:02 +020022
231. Unterstuetzte Module
24
251.1. Core (aus IRE (Iron Realms Entertainment) MUDs)
26 Das Core Modul ist immer aktiv. Es verwaltet die grundsaetzlichen
27 Einstellungen von GMCP. Die MG-Variante ist fast identisch zur IRE-Variante,
28 hat allerdings zusaetzliche das "Debug"-Kommando.
29
30 Vom Client gesendet:
31 - Core.Hello
32 Muss die erste Nachricht sein, welche der Client nach Aktivierung von
33 GMCP sendet.
34 Die Daten sind ein Objekt mit den Schluesseln "client" und "version",
35 welche entsprechend den Clientnamen und seine Versionskennung
36 enthalten.
37 Core.Hello { "client": "Nexus", "version": "3.1.90" }
38 - Core.Supports.Set
39 Informiert das MUD ueber die Pakete/Module, die der Client
40 unterstuetzt, d.h. die der Client empfangen kann. Es ist immer noch
41 Entscheidung des Muds, welche dieser Module ihre Daten senden (z.B.
42 wird MG einem "MG.char" den Vorzug geben vor einem generischen "Char",
43 falls vom Client beide unterstuetzt werden.
44 Wenn bereits vorher ein Core.Supports.* Kommando empfangen wurde, wird
45 die Liste der unterstuetzten Module durch die neue ersetzt.
46 Daten sind ein Array von Strings, welche jeweils den Modulnamen und
47 die Versionsnummer angeben (mit einem Leerzeichen getrennt).
48 Die Versionsnummer muss eine positive Ganzzahl sein.
49 Die meisten Clients werden Set nur einmal am Anfang senden und
50 brauchen kein Add/Remove.
51 Core.Supports.Set [ "MG.char 1", "MG.room 1" ]
52 - Core.Supports.Add
53 aehnlich zu Set, aber es fuegt die angegeben Module an die in der
54 Vergangenheit uebermittelten an.
55 Wenn noch keine Liste gesendet wurde, ist das Ergebnis wie bei Set.
56 Wenn die Liste Module enthaelt, die bereits aktiv sind, wird die neue
57 Versionsnummer Prioritaet vor der alten haben, selbst wenn die kleiner
58 ist.
59 Die Daten sind identisch zu Set.
60 - Core.Supports.Remove
61 Entfernt die angebenen Module aus der Liste der unterstuetzen Module.
62 Die Daten sind identisch zu Set. Die Modulversionen sind NICHT
63 optional (anders als bei IRE). Allerdings werden auch Module anderer
64 Version abgeschaltet. (Insofern koennte man - zur Zeit - einfach immer 1
65 als Versionsnummer senden.)
66 - Core.KeepAlive
67 Vom MG ignoriert, weil Verbindungen nicht automatisch getrennt werden.
68 - Core.Ping
69 Veranlasst das MG mit einem Core.Ping zu antworten.
70 Die Daten ist eine Ganzzahl, welche die durchschnittliche Pingzeit
71 aus verherigen Pings enthaelt, falls verfuegbar.
72 (Anmerkung: IRE macht keine Angabe ueber die Einheit dieser Zahl. MG
73 geht von Millisekunden aus.)
74 Core.Ping 120
75 - Core.Debug
76 Kann gesendet werden, um die Ausgabe von menschenlesbaren
77 Debugmeldungen vom GMCP zu aktivieren.
78 Die Daten sind eine Ganzzahl. Je groesser, desto mehr Debugmeldungen
79 werden ausgegeben.
80 0 schaltet die Debugmeldungen aus.
81 1 schaltet nur die Ausgabe von GMCP-Fehlern an.
82 100 schaltet alles an.
83 Core.Debug 1
84 Vom Server gesendet:
85 - Core.Ping
86 Als Antwort eines vom Client empfangenen Core.Ping gesendet.
87 Keine Daten.
88 - Core.Goodbye [NOT IMPLEMENTED YET!]
89 Gesendet vom MUD unmittelbar vor Verbindungstrennung.
90 Die Daten sind eine Nachricht (string), welche dem User angezeigt
91 werden kann und koennen den Grund fuer den Disconnect erklaeren.
92 Core.Goodbye "Goodbye, adventurer"
93
941.2. MG.char 1 (angelehnt an Aardwolf, aber modifiziert)
95 Die Uebertragung der Kommandos in diesem Modul wird aktiviert, wenn
96 "MG.char" aktiv ist. Es gibt keine Submodule, die getrennt aktiviert werden
97 muessten. Die jeweiligen Kommandos werden gesendet, wenn sich eins der
98 gesendeten Daten aendert.
99 Alle Kommandos werden einmal bei Modulaktivierung gesendet (auch wenn ein
100 Modul durch ein Core.Supports.Set (erneut) aktiviert wird).
101 Ist dieses Modul vom Client unterstuetzt, werden keine Daten aus den
102 Modulen "Char" und "char" gesendet.
103 (Spieler aelter als 12.05.2013 muessen einmalig den textuellen Report mit
104 "report ein" und "report vorsicht" einschalten, damit die Uebertragung
105 via GMCP freigeschaltet wird. Der Report kann danach wieder
106 ausgeschaltet werden.)
107
1081.2.2. MG.char.base
109 Vom Server gesendet:
110 - MG.char.base
111 Einige grundlegende Eigenschaften des Chars, die sich selten aendern.
112 Ein "wizlevel" von 1 zeigt an, dass der Char ein Seher ist.
113 Der "title" kann am Anfang ein Backspace "\b" gefolgt von "," oder "'"
114 enthalten.
115 MG.char.base { "name": "Jof", "guild": "Abenteurer",
116 "race": "Elf", "presay": "Mudgott",
117 "title": "idlet.", "wizlevel": 101 }
118
1191.2.3. MG.char.vitals
120 Vom Server gesendet:
121 - MG.char.vitals
122 Aktuelle Lebenspunkte, Konzentrationspunkte und Vergiftungzustand.
123 Im Falle von Gift: je groesser, desto staerker die Vergiftung.
124 MG.char.vitals { "hp": 210, "sp": 90, "poison": 3 }
125 - MG.char.maxvitals
126 Aktuelle Maximalwerte fuer LP, KP und Vergiftungszustand. Werden in
127 einer separaten Gruppe uebertragen, weil sie sich viel seltener aendern.
128 MG.char.maxvitals { "max_hp": 210, "max_sp": 226, "max_poison": 10 }
129
1301.2.4. MG.char.attributes
131 Vom Server gesendet:
132 - MG.char.attributes
133 Aktuelle Attribute des Chars.
134 Die Daten sind ein Objekt Name-Wert-Paaren von Attributen.
135 MG.char.attributes { "int": 12, "con": 10, "str": 8, "dex": 12 }
136
1371.2.5. MG.char.infoVars
138 Vom Server gesendet:
139 - MG.char.infoVars
140 Diese Nachricht gibt den "technischen" Namen aus MG.char.info einen
141 Namen, der dem Spieler stattdessen angezeigt werden sollte.
142 Diese Nachricht wird nur bei Modulaktivierung gesendet.
143 Die Daten sind ein Objekt von Name-Beschreibung-Paaren.
Zesstra00e76682021-07-31 19:25:57 +0200144 MG.char.infoVars { "level": "Stufe", "guild_level": "Gildenstufe" }
MG Mud User88f12472016-06-24 23:31:02 +0200145
1461.2.6. MG.char.info
147 Vom Server gesendet:
148 - MG.char.info
149 Uebertraegt (ausgewaehlte) Daten aus dem Kommando <info>.
150 Die Daten sind ein Objekt von Name-Wert-Paaren.
151 (Moegliche weitere Angaben in der Zukunft: Questpunkte, Stufenpunkte
152 (Genauigkeit 20% einer Stufe), ...)
153 MG.char.info { "level": 210, "guildlevel": 9 }
154
1551.2.7. MG.char.wimpy
156 Vom Server gesendet:
157 - MG.char.wimpy
158 Aktuelle Vorsicht und ggf. Fluchtrichtung des Char.
159 Die Daten sind ein Objekt Name-Wert-Paare von Vorsicht+Fluchtrichtung.
160 Ist keine Fluchtrichtung gesetzt, wird 0 uebertragen.
161 Fuer die Uebermittlung der Vorsicht muss der Char die Quest "Der Schrat
162 kann nicht einschlafen" geloest haben und fuer die Fluchtrichtung
163 Seher sein.
164 MG.char.wimpy { "wimpy": 50, "wimpy_dir": "norden" }
165
166
1671.3. char 1 (Aardwolf)
168 Dieses Modul ist so aehnlich zum "char" Modul von Aardwolf wie es geht, d.h.
169 es benutzt die gleichen Schluesselnamen. Es ist aber reduziert im Umfang der
170 Daten, d.h. es uebertraegt weniger Daten als Aardwolf es tut.
171 Wann immer moeglich, wird empfohlen, das Modul MG.char stattdessen zu
172 verwenden.
173 Wenn MG.char aktiv ist, werden von diesem Modul keine Daten uebertragen.
174 ES WIRD DAVON ABGERATEN, DIESES MODUL ZU VERWENDEN.
175 Wann immer moeglich, solltet ihr es in euren Clients abschalten!
176
1771.3.1. char.base
178 Vom Server gesendet:
179 - char.base
180 Einige grundlegende Eigenschaften des Chars, die sich selten aendern.
181 char.base { "name": "Jof", "race": "Elf",}
182
1831.3.2. char.vitals
184 Vom Server gesendet:
185 - char.vitals
186 Aktuelle Lebens- und Konzentrationspunkte.
187 char.vitals { "hp": 210, "mana": 90}
188
1891.3.3. char.stats
190 Vom Server gesendet:
191 - char.stats
192 Aktuelle Attribute des Spielers.
193 Die Daten sind ein Objekt Name-Wert-Paaren von Attributen.
194 char.stats { "int": 12, "con": 10, "str": 8, "dex": 12 }
195
1961.3.4. char.status
197 Vom Server gesendet:
198 - char.status
199 Aktueller Level des Chars. (Dies ist die einzige Angabe aus dem Aardwolf
200 char.status, welche das MG machen kann.)
201 Die Daten sind ein Objekt Name-Wert-Paaren von Attributen.
202 char.status { "level": 210 }
203
204
2051.4. Char 1 (IRE)
206 Dieses Modul ist so aehnlich zum "Char" Modul von IRE wie es geht, d.h.
207 es benutzt die gleichen Schluesselnamen. Es ist aber reduziert im Umfang der
208 Daten, d.h. es uebertraegt weniger Daten als IRE es tut.
209 Wann immer moeglich, wird empfohlen, das Modul MG.char stattdessen zu
210 verwenden.
211 Wenn MG.char aktiv ist, werden von diesem Modul keine Daten uebertragen.
212 ES WIRD DAVON ABGERATEN, DIESES MODUL ZU VERWENDEN.
213 Wann immer moeglich, solltet ihr es in euren Clients abschalten!
214
2151.4.1. Char.Vitals
216 Vom Server gesendet:
217 - Char.Vitals
218 Aktuelle und maximale Lebens- und Konzentrationspunkte.
219 Char.Vitals { "hp": 210, "mp": 90, "maxhp": 210, "maxmp": 226 }
220
2211.4.2. Char.Status
222 Vom Server gesendet:
223 - Char.Status
224 Aktueller Level und Gilde des Chars.
225 Die Daten sind ein Objekt Name-Wert-Paaren von Attributen.
226 Char.Status { "level": 210, "guild": "Zauberer" }
227
2281.4.3. Char.StatusVars
229 Vom Server gesendet:
230 - Char.StatusVars
231 Diese Nachricht gibt den "technischen" Namen aus Char.Status einen
232 Namen, der dem Spieler stattdessen angezeigt werden sollte.
233 Dieses Kommando wird nur bei Modulaktivierung gesendet.
234 Die Daten sind ein Objekt von Name-Beschreibung-Paaren.
235 Char.StatusVars { "level": "Spielerstufe", "guild": "Gilde" }
236
237
2381.5. comm.channel 1 (Aardwolf)
239 Dieses Modul ist genauso wie es Aardwolf definiert. Allerdings werden
240 natuerlich aus dem MG andere Ebenen uebertragen. ;-)
241 Vom Server gesendet:
242 - comm.channel
243 Diese Nachricht wird immer dann gesendet, wenn jemand was auf einer
244 eingeschalteten Ebene sagt. (Nicht bei Abruf der History!)
245 Zur Zeit ist es nicht moeglich, Ebenen per GMCP ein- oder auszuschalten.
246 Wenn dieses GMCP-Modul eingeschaltet ist, wird die Ausgabe der
247 Ebenenmeldung in der normalen Spielausgabe des MG unterdrueckt.
248 Achtung: Zur Zeit erfolgt (noch) keine Beruecksichtung eurer
249 "ignoriere"-Einstellungen bei den via GMCP uebertragenen
250 Ebenenmeldungen.
251 comm.channel { "chan": "allgemein",
252 "msg": "[Allgemein:Maharet] Guten Morgen, Grauen!",
253 "player": "Maharet" }
254
255
2561.5. MG.team 1 (eigene Variante, inspiriert von Aardwolf)
257 Kommt spaeter. ;-)
258
259
2601.6. MG.room 1 (eigene Variante, inspiriert von Aardwolf)
261 MG.room beinhaltet Informationen ueber den aktuellen Raum des Spielers
262
263 Vom Server gesendet:
264 - MG.room.info
265 Diese Nachrichtig wird immer nach Betreten eines neuen Raumes gesendet
266 und enthaelt folgende Informationen:
267 * id: Eine eindeutige ID des Raumes (technisch: ein MD5-Hash)
268 Diese Angabe fehlt in Labyrinthraeumen (nicht gewollt) und in einigen
269 speziellen Raeumen (technische Gruende, z.B. manche 'virtual
270 compiler'). In diesem Fall ist die ID "" (leerer String).
271 * short: Die Kurzbeschreibung des Raumes
272 * domain: Die Region, in der der Raum liegt
273 Manche Raeume liegen nicht in den Regionen. In dem Fall fehlt diese
274 Angabe.
275 * exits: eine Liste von sichtbaren Ausgaengen (d.h. unsichtbare Ausgaenge
276 werden nicht angezeigt).
277 Hinweis: es ist moeglich, dass der Spieler in einen Raum bewegt wird,
278 der zwar technisch ein anderer Raum ist, aber kein anderer Ort. In
279 diesem Fall unterbleibt diese Nachricht.
280 room.info { "id": "d41d8cd98f00b204e9800998ecf8427e",
281 "short": "Die beruehmte Abenteurergilde",
282 "domain": "Ebene",
283 exits: [ "norden", "oben" ] }
284
285
2862. Vergleich mit GMCP in Aardwolf und IRE Muds
287 Im Morgengrauen wird GMCP letztendlich nur als Spezifikation des Transport
288 Layers betrachtet, da bei den Modulen jedes Mud seine eigene Definition der
289 uebertragenen Daten und ihrer Bedeutung vornimmt.
290
291 Das Modul "Char" ist aus den IRE-Muds, welches nur existiert, weil einige
292 Clients es standardmaessig schonmal einschalten. Es sendet aber nur einen
293 Minimalsatz an Daten.
294 Das Modul "char" ist aus Aardwolf, welches nur existiert, weil einige
295 Clients es standardmaessig schonmal einschalten. Es sendet aber nur einen
296 Minimalsatz an Daten.
297
298 Dem Modul MG.char sollte immer der Vorzug vor "Char" oder "char" gegeben
299 werden, da dort deutlich mehr Daten uebertragen werden.
300
301 Das Modul "Room" aus IRE wird nicht unterstuetzt, weil seine Daten vom MG
302 groesstenteils nicht in der geforderten Form bereitgestellt werden koennen
303 (zumindest nicht ohne ungerechtfertigten Aufwand).
304
3053. Transport Specification
306 Einstweilen am besten auf http://www.gammon.com.au/gmcp nachlesen.
307
308 Kommt hier vielleicht spaeter noch, einstweilen am besten im Netz
309 nachgucken.
310
3114. Implementationsdetails
312 Im MG ist Gross-/Kleinschreibung des Modulnamens wichtig, im Gegensatz zum
313 IRE. Meines Wissens (bitte korrigiert mich ggf.), machte die
314 Transportspezifikation keine Aussage in diesem Punkt, sondern IRE hat dies
315 entschieden.
316 Jetzt ist es so, dass Aardwolf teils Module mit dem gleichen Namen, aber
317 anderer Funktion wie IRE gebaut hat. Alle Doku von Aardwolf schreibt aber
318 immer von kleingeschriebenen Modulnamen. Insofern ist das jetzt ein Versuch,
319 die Module von IRE/Aardwolf doch irgndendwie auseinander zu halten.
320
321
3225. Client-Kram
3235.1. Tips und Hinweiss
324 Manche Clients zeigen die empfangenen GMCP-Daten standardmaessig auf dem
325 Bildschirm an.
326 Normalerweise sortieren sie die Daten aber in von Scripten nutzbare
327 Tabellen ein, so dass es entfaellt, irgendeinen Text zu parsen.
328 In der Regel ist es dann auch so, dass der Client Moeglichkeiten anbietet,
329 auf den Empfang von GMCP-Daten reagieren zu koennen (z.B. nen Script
330 aufrufen zu lassen).
331
3325.2. Clients mit GMCP-MG-Support
333
3345.3. Clients mit GMCP-Support (Transport Spec)
335 * Mudlet (http://forums.mudlet.org/viewtopic.php?f=7&t=1547)
336 Im Netz sind div. weitere Quellen und Tutorial zu finden.
337 * Tintin++ (http://tintin.sourceforge.net/board/viewtopic.php?p=4651)
338 * TF 5 (http://mikeride.chaosnet.org/abelinc/scripts/telopt.html)
339 * CMUD (http://forums.zuggsoft.com/forums/viewtopic.php?p=158455#158455)
340 * Mushclient (http://www.aardwolf.com/wiki/index.php/Clients/MushclientGMCP)
341
342
3436. Angedachte Module fuer die Zukunft
344Ob und wann etwas aus diesem Bereich kommt, ist voellig offen. Haengt auch vom
345Interesse der Spielerschaft ab.
346
3476.3. Char.Items (IRE)
348 Eigentlich eher weniger geplant...
349
350LETZTE AeNDERUNG:
35109.01.2016, Zesstra
352