General Mud Communication Protocol im MorgenGrauen
==================================================

0. Einleitung
   GMCP wird benutzt, um Daten zwischen MUD und Client "out of band" zu
   uebertragen. "Out of band" bedeutet hier, dass der Datenaustausch hinter
   den Kulissen passiert statt in der normalen textuellen Spielausgabe,
   welcher vom Client mittels mehr oder weniger komplizierter Trigger
   ausgewertet werden muss.

   Vorteile:
   * keine komplexen Trigger (Regexps) mehr.
   * Daten werden in einem definierten Format uebertragen, welches der Client
     fuer euch interpretiert.
   * keine Gagtrigger mehr noetig, um empfangenen Text auszublenden
   * keine stoerenden Ausgaben, falls man diese Gagtrigger nicht hat.
   * Daten koennen auch uebertragen werden in Situationen, in denen eine
     normale Textausgabe nicht so gut geht, z.B. in Editoren.
   * Daten, die die Clientscripte nicht verarbeiten, stoeren nicht den
     Textfluss.
   * Der Client kann konfigurieren, welche Informationen er bekommen will.

1. Unterstuetzte Module

1.1. Core (aus IRE (Iron Realms Entertainment) MUDs)
  Das Core Modul ist immer aktiv. Es verwaltet die grundsaetzlichen
  Einstellungen von GMCP. Die MG-Variante ist fast identisch zur IRE-Variante,
  hat allerdings zusaetzliche das "Debug"-Kommando.

  Vom Client gesendet:
    - Core.Hello
        Muss die erste Nachricht sein, welche der Client nach Aktivierung von
        GMCP sendet.
        Die Daten sind ein Objekt mit den Schluesseln "client" und "version",
        welche entsprechend den Clientnamen und seine Versionskennung
        enthalten.
      Core.Hello { "client": "Nexus", "version": "3.1.90" }
    - Core.Supports.Set
        Informiert das MUD ueber die Pakete/Module, die der Client
        unterstuetzt, d.h. die der Client empfangen kann. Es ist immer noch
        Entscheidung des Muds, welche dieser Module ihre Daten senden (z.B.
        wird MG einem "MG.char" den Vorzug geben vor einem generischen "Char",
        falls vom Client beide unterstuetzt werden.
        Wenn bereits vorher ein Core.Supports.* Kommando empfangen wurde, wird
        die Liste der unterstuetzten Module durch die neue ersetzt.
        Daten sind ein Array von Strings, welche jeweils den Modulnamen und
        die Versionsnummer angeben (mit einem Leerzeichen getrennt).
        Die Versionsnummer muss eine positive Ganzzahl sein.
        Die meisten Clients werden Set nur einmal am Anfang senden und
        brauchen kein Add/Remove.
      Core.Supports.Set [ "MG.char 1", "MG.room 1" ]
    - Core.Supports.Add
        aehnlich zu Set, aber es fuegt die angegeben Module an die in der
        Vergangenheit uebermittelten an.
        Wenn noch keine Liste gesendet wurde, ist das Ergebnis wie bei Set.
        Wenn die Liste Module enthaelt, die bereits aktiv sind, wird die neue
        Versionsnummer Prioritaet vor der alten haben, selbst wenn die kleiner
        ist.
        Die Daten sind identisch zu Set.
    - Core.Supports.Remove
        Entfernt die angebenen Module aus der Liste der unterstuetzen Module.
        Die Daten sind identisch zu Set. Die Modulversionen sind NICHT
        optional (anders als bei IRE). Allerdings werden auch Module anderer
        Version abgeschaltet. (Insofern koennte man - zur Zeit - einfach immer 1
        als Versionsnummer senden.)
    - Core.KeepAlive
        Vom MG ignoriert, weil Verbindungen nicht automatisch getrennt werden.
    - Core.Ping
        Veranlasst das MG mit einem Core.Ping zu antworten.
        Die Daten ist eine Ganzzahl, welche die durchschnittliche Pingzeit
        aus verherigen Pings enthaelt, falls verfuegbar.
        (Anmerkung: IRE macht keine Angabe ueber die Einheit dieser Zahl. MG
         geht von Millisekunden aus.)
      Core.Ping 120
    - Core.Debug
        Kann gesendet werden, um die Ausgabe von menschenlesbaren
        Debugmeldungen vom GMCP zu aktivieren.
        Die Daten sind eine Ganzzahl. Je groesser, desto mehr Debugmeldungen
        werden ausgegeben.
        0 schaltet die Debugmeldungen aus.
        1 schaltet nur die Ausgabe von GMCP-Fehlern an.
        100 schaltet alles an.
      Core.Debug 1
  Vom Server gesendet:
    - Core.Ping
        Als Antwort eines vom Client empfangenen Core.Ping gesendet.
        Keine Daten.
    - Core.Goodbye [NOT IMPLEMENTED YET!]
        Gesendet vom MUD unmittelbar vor Verbindungstrennung.
        Die Daten sind eine Nachricht (string), welche dem User angezeigt
        werden kann und koennen den Grund fuer den Disconnect erklaeren.
      Core.Goodbye "Goodbye, adventurer"

1.2. MG.char 1 (angelehnt an Aardwolf, aber modifiziert)
  Die Uebertragung der Kommandos in diesem Modul wird aktiviert, wenn
  "MG.char" aktiv ist. Es gibt keine Submodule, die getrennt aktiviert werden
  muessten. Die jeweiligen Kommandos werden gesendet, wenn sich eins der
  gesendeten Daten aendert.
  Alle Kommandos werden einmal bei Modulaktivierung gesendet (auch wenn ein
  Modul durch ein Core.Supports.Set (erneut) aktiviert wird).
  Ist dieses Modul vom Client unterstuetzt, werden keine Daten aus den
  Modulen "Char" und "char" gesendet.
  (Spieler aelter als 12.05.2013 muessen einmalig den textuellen Report mit
   "report ein" und "report vorsicht" einschalten, damit die Uebertragung
   via GMCP freigeschaltet wird. Der Report kann danach wieder
   ausgeschaltet werden.)

1.2.2. MG.char.base
  Vom Server gesendet:
    - MG.char.base
      Einige grundlegende Eigenschaften des Chars, die sich selten aendern.
      Ein "wizlevel" von 1 zeigt an, dass der Char ein Seher ist.
      Der "title" kann am Anfang ein Backspace "\b" gefolgt von "," oder "'"
      enthalten.
      MG.char.base { "name": "Jof", "guild": "Abenteurer",
                     "race": "Elf", "presay": "Mudgott",
                     "title": "idlet.", "wizlevel": 101 }

1.2.3. MG.char.vitals
  Vom Server gesendet:
    - MG.char.vitals
      Aktuelle Lebenspunkte, Konzentrationspunkte und Vergiftungzustand.
      Im Falle von Gift: je groesser, desto staerker die Vergiftung.
      MG.char.vitals { "hp": 210, "sp": 90, "poison": 3 }
    - MG.char.maxvitals
      Aktuelle Maximalwerte fuer LP, KP und Vergiftungszustand. Werden in
      einer separaten Gruppe uebertragen, weil sie sich viel seltener aendern.
      MG.char.maxvitals { "max_hp": 210, "max_sp": 226, "max_poison": 10 }

1.2.4. MG.char.attributes
  Vom Server gesendet:
    - MG.char.attributes
      Aktuelle Attribute des Chars.
      Die Daten sind ein Objekt Name-Wert-Paaren von Attributen.
      MG.char.attributes { "int": 12, "con": 10, "str": 8, "dex": 12 }

1.2.5. MG.char.infoVars
  Vom Server gesendet:
    - MG.char.infoVars
      Diese Nachricht gibt den "technischen" Namen aus MG.char.info einen
      Namen, der dem Spieler stattdessen angezeigt werden sollte.
      Diese Nachricht wird nur bei Modulaktivierung gesendet.
      Die Daten sind ein Objekt von Name-Beschreibung-Paaren.
      MG.char.infoVars { "level": "Stufe", "guild_level": "Gildenstufe" }

1.2.6. MG.char.info
  Vom Server gesendet:
    - MG.char.info
      Uebertraegt (ausgewaehlte) Daten aus dem Kommando <info>.
      Die Daten sind ein Objekt von Name-Wert-Paaren.
      (Moegliche weitere Angaben in der Zukunft: Questpunkte, Stufenpunkte
       (Genauigkeit 20% einer Stufe), ...)
      MG.char.info { "level": 210, "guildlevel": 9 }

1.2.7. MG.char.wimpy
  Vom Server gesendet:
    - MG.char.wimpy
      Aktuelle Vorsicht und ggf. Fluchtrichtung des Char.
      Die Daten sind ein Objekt Name-Wert-Paare von Vorsicht+Fluchtrichtung.
      Ist keine Fluchtrichtung gesetzt, wird 0 uebertragen.
      Fuer die Uebermittlung der Vorsicht muss der Char die Quest "Der Schrat
      kann nicht einschlafen" geloest haben und fuer die Fluchtrichtung
      Seher sein.
      MG.char.wimpy { "wimpy": 50, "wimpy_dir": "norden" }


1.3. char 1 (Aardwolf)
  Dieses Modul ist so aehnlich zum "char" Modul von Aardwolf wie es geht, d.h.
  es benutzt die gleichen Schluesselnamen. Es ist aber reduziert im Umfang der
  Daten, d.h. es uebertraegt weniger Daten als Aardwolf es tut.
  Wann immer moeglich, wird empfohlen, das Modul MG.char stattdessen zu
  verwenden.
  Wenn MG.char aktiv ist, werden von diesem Modul keine Daten uebertragen.
  ES WIRD DAVON ABGERATEN, DIESES MODUL ZU VERWENDEN.
  Wann immer moeglich, solltet ihr es in euren Clients abschalten!

1.3.1. char.base
  Vom Server gesendet:
    - char.base
      Einige grundlegende Eigenschaften des Chars, die sich selten aendern.
      char.base { "name": "Jof", "race": "Elf",}

1.3.2. char.vitals
  Vom Server gesendet:
    - char.vitals
      Aktuelle Lebens- und Konzentrationspunkte.
      char.vitals { "hp": 210, "mana": 90}

1.3.3. char.stats
  Vom Server gesendet:
    - char.stats
      Aktuelle Attribute des Spielers.
      Die Daten sind ein Objekt Name-Wert-Paaren von Attributen.
      char.stats { "int": 12, "con": 10, "str": 8, "dex": 12 }

1.3.4. char.status
  Vom Server gesendet:
    - char.status
      Aktueller Level des Chars. (Dies ist die einzige Angabe aus dem Aardwolf
      char.status, welche das MG machen kann.)
      Die Daten sind ein Objekt Name-Wert-Paaren von Attributen.
      char.status { "level": 210 }


1.4. Char 1 (IRE)
  Dieses Modul ist so aehnlich zum "Char" Modul von IRE wie es geht, d.h.
  es benutzt die gleichen Schluesselnamen. Es ist aber reduziert im Umfang der
  Daten, d.h. es uebertraegt weniger Daten als IRE es tut.
  Wann immer moeglich, wird empfohlen, das Modul MG.char stattdessen zu
  verwenden.
  Wenn MG.char aktiv ist, werden von diesem Modul keine Daten uebertragen.
  ES WIRD DAVON ABGERATEN, DIESES MODUL ZU VERWENDEN.
  Wann immer moeglich, solltet ihr es in euren Clients abschalten!

1.4.1. Char.Vitals
  Vom Server gesendet:
    - Char.Vitals
      Aktuelle und maximale Lebens- und Konzentrationspunkte.
      Char.Vitals { "hp": 210, "mp": 90, "maxhp": 210, "maxmp": 226 }

1.4.2. Char.Status
  Vom Server gesendet:
    - Char.Status
      Aktueller Level und Gilde des Chars. 
      Die Daten sind ein Objekt Name-Wert-Paaren von Attributen.
      Char.Status { "level": 210, "guild": "Zauberer" }

1.4.3. Char.StatusVars
  Vom Server gesendet:
    - Char.StatusVars
      Diese Nachricht gibt den "technischen" Namen aus Char.Status einen
      Namen, der dem Spieler stattdessen angezeigt werden sollte.
      Dieses Kommando wird nur bei Modulaktivierung gesendet.
      Die Daten sind ein Objekt von Name-Beschreibung-Paaren.
      Char.StatusVars { "level": "Spielerstufe", "guild": "Gilde" }


1.5. comm.channel 1 (Aardwolf)
  Dieses Modul ist genauso wie es Aardwolf definiert. Allerdings werden
  natuerlich aus dem MG andere Ebenen uebertragen. ;-)
  Vom Server gesendet:
    - comm.channel
      Diese Nachricht wird immer dann gesendet, wenn jemand was auf einer
      eingeschalteten Ebene sagt. (Nicht bei Abruf der History!)
      Zur Zeit ist es nicht moeglich, Ebenen per GMCP ein- oder auszuschalten.
      Wenn dieses GMCP-Modul eingeschaltet ist, wird die Ausgabe der
      Ebenenmeldung in der normalen Spielausgabe des MG unterdrueckt.
      Achtung: Zur Zeit erfolgt (noch) keine Beruecksichtung eurer
      "ignoriere"-Einstellungen bei den via GMCP uebertragenen
      Ebenenmeldungen.
      comm.channel { "chan": "allgemein",
          "msg": "[Allgemein:Maharet] Guten Morgen, Grauen!", 
          "player": "Maharet" }


1.5. MG.team 1 (eigene Variante, inspiriert von Aardwolf)
     Kommt spaeter. ;-)


1.6. MG.room 1 (eigene Variante, inspiriert von Aardwolf)
  MG.room beinhaltet Informationen ueber den aktuellen Raum des Spielers

  Vom Server gesendet:
  - MG.room.info
    Diese Nachrichtig wird immer nach Betreten eines neuen Raumes gesendet
    und enthaelt folgende Informationen:
    * id: Eine eindeutige ID des Raumes (technisch: ein MD5-Hash)
        Diese Angabe fehlt in Labyrinthraeumen (nicht gewollt) und in einigen
        speziellen Raeumen (technische Gruende, z.B. manche 'virtual
        compiler'). In diesem Fall ist die ID "" (leerer String).
    * short: Die Kurzbeschreibung des Raumes
    * domain: Die Region, in der der Raum liegt
        Manche Raeume liegen nicht in den Regionen. In dem Fall fehlt diese
        Angabe.
    * exits: eine Liste von sichtbaren Ausgaengen (d.h. unsichtbare Ausgaenge
        werden nicht angezeigt).
    Hinweis: es ist moeglich, dass der Spieler in einen Raum bewegt wird,
    der zwar technisch ein anderer Raum ist, aber kein anderer Ort. In
    diesem Fall unterbleibt diese Nachricht.
    room.info { "id": "d41d8cd98f00b204e9800998ecf8427e",
                "short": "Die beruehmte Abenteurergilde",
                "domain": "Ebene",
                exits: [ "norden", "oben" ] }


2. Vergleich mit GMCP in Aardwolf und IRE Muds
   Im Morgengrauen wird GMCP letztendlich nur als Spezifikation des Transport
   Layers betrachtet, da bei den Modulen jedes Mud seine eigene Definition der
   uebertragenen Daten und ihrer Bedeutung vornimmt.

   Das Modul "Char" ist aus den IRE-Muds, welches nur existiert, weil einige
   Clients es standardmaessig schonmal einschalten. Es sendet aber nur einen
   Minimalsatz an Daten.
   Das Modul "char" ist aus Aardwolf, welches nur existiert, weil einige
   Clients es standardmaessig schonmal einschalten. Es sendet aber nur einen
   Minimalsatz an Daten.

   Dem Modul MG.char sollte immer der Vorzug vor "Char" oder "char" gegeben
   werden, da dort deutlich mehr Daten uebertragen werden.

   Das Modul "Room" aus IRE wird nicht unterstuetzt, weil seine Daten vom MG
   groesstenteils nicht in der geforderten Form bereitgestellt werden koennen
   (zumindest nicht ohne ungerechtfertigten Aufwand).

3. Transport Specification
   Einstweilen am besten auf http://www.gammon.com.au/gmcp nachlesen.

   Kommt hier vielleicht spaeter noch, einstweilen am besten im Netz
   nachgucken.

4. Implementationsdetails
  Im MG ist Gross-/Kleinschreibung des Modulnamens wichtig, im Gegensatz zum
  IRE. Meines Wissens (bitte korrigiert mich ggf.), machte die
  Transportspezifikation keine Aussage in diesem Punkt, sondern IRE hat dies
  entschieden.
  Jetzt ist es so, dass Aardwolf teils Module mit dem gleichen Namen, aber
  anderer Funktion wie IRE gebaut hat. Alle Doku von Aardwolf schreibt aber
  immer von kleingeschriebenen Modulnamen. Insofern ist das jetzt ein Versuch,
  die Module von IRE/Aardwolf doch irgndendwie auseinander zu halten.


5. Client-Kram
5.1. Tips und Hinweiss
  Manche Clients zeigen die empfangenen GMCP-Daten standardmaessig auf dem
  Bildschirm an.
  Normalerweise sortieren sie die Daten  aber in von Scripten nutzbare
  Tabellen ein, so dass es entfaellt, irgendeinen Text zu parsen.
  In der Regel ist es dann auch so, dass der Client Moeglichkeiten anbietet,
  auf den Empfang von GMCP-Daten reagieren zu koennen (z.B. nen Script
  aufrufen zu lassen).

5.2. Clients mit GMCP-MG-Support

5.3. Clients mit GMCP-Support (Transport Spec)
  * Mudlet (http://forums.mudlet.org/viewtopic.php?f=7&t=1547)
    Im Netz sind div. weitere Quellen und Tutorial zu finden.
  * Tintin++ (http://tintin.sourceforge.net/board/viewtopic.php?p=4651)
  * TF 5 (http://mikeride.chaosnet.org/abelinc/scripts/telopt.html)
  * CMUD (http://forums.zuggsoft.com/forums/viewtopic.php?p=158455#158455)
  * Mushclient (http://www.aardwolf.com/wiki/index.php/Clients/MushclientGMCP)


6. Angedachte Module fuer die Zukunft
Ob und wann etwas aus diesem Bereich kommt, ist voellig offen. Haengt auch vom
Interesse der Spielerschaft ab.

6.3. Char.Items (IRE)
  Eigentlich eher weniger geplant...

LETZTE AeNDERUNG:
09.01.2016, Zesstra

