0. Einleitung GMCP wird benutzt, um Daten zwischen MUD und Client "out of band" zu übertragen. "Out of band" bedeutet, dass der Datenaustausch hinter den Kulissen passiert — nicht in der normalen textuellen Spielausgabe, die man sonst mit Triggern parsen müsste.
Vorteile: * Keine komplexen Trigger (Regexps) mehr nötig. * Daten werden in einem definierten JSON-Format übertragen, welches der Client direkt interpretieren kann. * Keine Gagtrigger nötig, um empfangenen Text auszublenden. * Keine störenden Ausgaben, falls man diese Trigger nicht hat. * Daten können auch in Situationen übertragen werden, in denen eine normale Textausgabe nicht möglich ist (z.B. in Editoren). * Nicht verarbeitete Daten stören nicht den Textfluss. * Der Client konfiguriert, welche Module er empfangen will.
Datenformat: Alle GMCP-Daten werden als JSON übertragen. Die Beispiele in dieser Hilfe zeigen das JSON-Format so, wie es vom Client empfangen wird. In Mudlet landen diese Daten automatisch in Lua-Tabellen (gmcp.*).
Aktivierung: GMCP wird beim Verbinden automatisch vom Client ausgehandelt (Telnet-Option 201). Danach sendet der Client Core.Hello und Core.Supports.Set, um dem MUD mitzuteilen, welche Module er unterstützt.
1. Übersicht der Module
Modul Version Beschreibung
───────────────── ─────── ──────────────────────────
Core 1 Grundeinstellungen, Ping
MG.char 1 Charakterdaten (empfohlen)
MG.room 1 Rauminformationen
MG.inv 1 Inventar des Spielers
MG.map 1 Kartendaten
MG.quest 1 Questsystem
MG.skills 1 Kampffertigkeiten
MG.char.effects – Buff/Debuff-Effekte (*)
comm.channel 1 Ebenenmeldungen
Client 1 Bildschirmgröße (Client→MUD)
char 1 Aardwolf-Kompatibilität (**)
Char 1 IRE-Kompatibilität (**)
(*) Wird automatisch über MG.char gesendet. (**) Veraltet, nicht empfohlen. Siehe Abschnitt 10.
Empfohlene Modulauswahl für Mudlet:
Core.Supports.Set [
"MG.char 1", "MG.room 1", "MG.inv 1",
"MG.map 1", "MG.quest 1", "MG.skills 1",
"comm.channel 1", "Client 1"
]
2. Core-Modul (immer aktiv)
Das Core-Modul verwaltet die grundsätzlichen Einstellungen von GMCP. Es ist immer aktiv und muss nicht extra angefordert werden.
2.1. Vom Client gesendet
Core.Hello Muss die erste Nachricht nach GMCP-Aktivierung sein. Daten: Objekt mit "client" und "version".
Core.Hello { "client": "Mudlet", "version": "4.18.0" }
Core.Supports.Set Teilt dem MUD mit, welche Module der Client unterstützt. Ersetzt eine zuvor gesendete Liste vollständig. Daten: Array von Strings im Format "Modulname Version".
Core.Supports.Set [ "MG.char 1", "MG.room 1" ]
Core.Supports.Add Fügt Module zur bestehenden Liste hinzu. Format identisch zu Set.
Core.Supports.Add [ "comm.channel 1" ]
Core.Supports.Remove Entfernt Module aus der Liste. Format identisch zu Set (Versionsnummer muss angegeben werden, wird aber ignoriert).
Core.Supports.Remove [ "comm.channel 1" ]
Core.KeepAlive Wird vom Midgard MUD ignoriert, da Verbindungen nicht automatisch getrennt werden.
Core.Ping Fordert eine Ping-Antwort vom Server an. Daten: Ganzzahl mit der durchschnittlichen Pingzeit in Millisekunden aus früheren Pings (optional).
Core.Ping 120
Core.Debug Aktiviert menschenlesbare Debug-Ausgaben für GMCP. Daten: Ganzzahl (0 = aus, 1 = nur Fehler, 100 = alles).
Core.Debug 1
2.2. Vom Server gesendet
Core.Ping Antwort auf einen Client-Ping. Keine Daten.
3. MG.char — Charakterdaten (empfohlen)
Dieses Modul überträgt alle wichtigen Charakterdaten. Es wird aktiviert durch "MG.char 1" in Core.Supports.Set. Alle Unterpakete werden einmalig bei Modulaktivierung vollständig gesendet und danach bei jeder Änderung.
Wenn MG.char aktiv ist, werden die veralteten Module "char" und "Char" NICHT mehr bedient.
3.1. MG.char.base — Grunddaten
Wird bei Login und bei Änderungen gesendet.
MG.char.base {
"name": "Ragnar",
"race": "Mensch",
"gender": "male"
}
Felder: * name — Anzeigename des Charakters * race — Rasse (z.B. "Mensch", "Elf", "Zwerg", "Hobbit", "Dunkelelf", "Feline", "Goblin") * gender — Geschlecht: "male", "female" oder "neuter"
3.2. MG.char.vitals — Lebenspunkte
Wird bei jeder Änderung von LP oder KP gesendet.
MG.char.vitals {
"hp": 210,
"sp": 90,
"in_combat": 1
}
Felder: * hp — Aktuelle Lebenspunkte (LP) * sp — Aktuelle Kampfpunkte (KP) * in_combat — 1 wenn im Kampf, sonst 0
3.3. MG.char.maxvitals — Maximalwerte
Wird selten gesendet (nur wenn sich Maximalwerte ändern).
MG.char.maxvitals {
"max_hp": 210,
"max_sp": 226
}
Felder: * max_hp — Maximale Lebenspunkte * max_sp — Maximale Kampfpunkte
3.4. MG.char.status — Nahrung und Bewegung
Enthält Hunger, Durst und Bewegungspunkte.
MG.char.status {
"hunger": 12,
"durst": 8,
"max_hunger": 51,
"max_durst": 51,
"mv": 150,
"max_mv": 200
}
Felder: * hunger — Aktueller Hungerwert (0 = satt, 51 = max) * durst — Aktueller Durstwert (0 = satt, 51 = max) * max_hunger — Maximaler Hungerwert (immer 51) * max_durst — Maximaler Durstwert (immer 51) * mv — Aktuelle Bewegungspunkte * max_mv — Maximale Bewegungspunkte
3.5. MG.char.info — Stufe und Fortschritt
Enthält die aktuelle Stufe und den Stufenfortschritt.
MG.char.info {
"level": 12,
"level_percent": 65
}
Felder: * level — Aktuelle Spielerstufe * level_percent — Fortschritt zur nächsten Stufe (0–100%)
3.6. MG.char.effects — Aktive Effekte (Buffs/Debuffs)
Wird gesendet, wenn sich aktive Effekte ändern (z.B. nach einer Kampffertigkeit oder wenn ein Effekt abläuft). Dieses Paket wird automatisch über das MG.char-Modul übertragen und muss nicht separat angefordert werden.
MG.char.effects {
"effects": [
{
"key": "schnell",
"name": "Schnell",
"icon": "schnell",
"duration": 45,
"remaining": 38,
"type": "buff"
},
{
"key": "heilung",
"name": "Heilung",
"icon": "heilung",
"duration": 20,
"remaining": 8,
"type": "buff"
}
]
}
Felder je Effekt: * key — Eindeutiger Schlüssel (z.B. "schnell") * name — Anzeigename (z.B. "Schnell") * icon — Icon-Bezeichner für den Client * duration — Gesamtdauer in Sekunden * remaining — Verbleibende Zeit in Sekunden * type — "buff" (positiv) oder "debuff" (negativ)
Wenn keine Effekte aktiv sind, wird ein leeres Array gesendet: { "effects": [] }
Bekannte Effekte (Abenteurer-Gilde):
* schnell — Erhöhte Geschwindigkeit
* ausweichen — Verbesserte Verteidigung
* heilung — Regeneration über Zeit
* licht — Lichtkugel (Lichtquelle)
3.7. MG.char.enemy — Gegner im Kampf
Wird im Kampf bei jedem Schaden am aktuellen Gegner gesendet. Enthält Name, Stufe, Lebenspunkte und den soeben verursachten Schaden. Nur der primäre Gegner (erster anwesender Feind) wird übertragen.
MG.char.enemy {
"name": "Die große Ratte",
"level": 3,
"hp_percent": 65,
"damage": 12
}
Felder: * name — Anzeigename des Gegners (dekliniert, WER-Fall) * level — Stufe des Gegners * hp_percent — Aktuelle Lebenspunkte in Prozent (0–100) * damage — Soeben verursachter Schaden (LP-Verlust). Enthält jeden Schaden, egal ob durch Waffe, Skill oder Kampffertigkeit verursacht.
Das Paket wird nach jedem Schadensvorfall gesendet, d.h. es können pro Kampfrunde mehrere Pakete eintreffen (z.B. erst Waffenschaden, dann Skill-Schaden).
Kampfende / Gegner weg: Wenn der Gegner stirbt, flieht oder der Spieler den Kampf verlässt, wird ein leeres Mapping gesendet:
MG.char.enemy {}
Der Client sollte daraufhin den Lebensbalken ausblenden.
3.8. MG.char.death — Spielertod
Wird gesendet, nachdem die Todessequenz (Walhall) beendet ist und der Spieler als Geist zum Beterraum bewegt wurde. Dieses Paket wird NICHT sofort beim Tod gesendet, sondern erst nach der vollständigen Todessequenz (~170 Sekunden).
MG.char.death {
"deaths": 3
}
Felder: * deaths — Gesamtzahl der bisherigen Tode des Spielers
Hinweise: * Der Spieler ist zu diesem Zeitpunkt bereits ein Geist (P_GHOST = 1) und befindet sich im Beterraum. * Um wieder lebendig zu werden, muss der Spieler zum Heiligen Hain des Odin in Haithabu gehen und "opfere" eingeben. * Die Ausrüstung liegt in der Leiche am Todesort. * Lernlinge (Magier) sterben nicht — kein Event.
4. MG.room — Rauminformationen
Wird nach jedem Raumwechsel gesendet. Enthält Details über den aktuellen Raum.
MG.room.info {
"id": "d41d8cd98f00b204e9800998ecf8427e",
"short": "Der Marktplatz von Haithabu.",
"domain": "Midgard",
"exits": ["norden", "süden", "osten", "westen"],
"details": ["brunnen", "schild", "marktstand"],
"smells": ["fisch"],
"sounds": ["moewen"],
"npcs": [
{"name": "Siegrun", "id": "siegrun",
"short": "Siegrun, die Wirtin"}
],
"items": [
{"name": "Handaxt", "id": "handaxt",
"short": "Eine scharfe Handaxt"}
],
"npc_ids": ["siegrun", "wirtin"],
"item_ids": ["handaxt", "axt"]
}
Felder: * id — Eindeutige Raum-ID (MD5-Hash). Leer ("") in Labyrinthen und speziellen Räumen. * short — Kurzbeschreibung des Raumes. * domain — Region (z.B. "Ebene", "Polar", "Gebirge"). Kann "unbekannt" sein. * exits — Array sichtbarer Ausgänge. Unsichtbare Ausgänge werden NICHT angezeigt. * details — Untersuchbare Details im Raum (optional). * smells — Riechbare Dinge im Raum (optional). * sounds — Hörbare Dinge im Raum (optional). * npcs — NPCs im Raum als strukturierte Liste (optional). Jeder Eintrag hat "name" (Anzeige- name), "id" (Befehls-ID) und "short" (Kurz- beschreibung). * items — Gegenstände im Raum, gleiches Format wie npcs (optional). * npc_ids — Flache Liste aller NPC-IDs für Autocomplete (optional). * item_ids — Flache Liste aller Item-IDs für Autocomplete (optional).
Hinweis: Wird der Spieler in einen technisch anderen Raum bewegt, der aber denselben Ort darstellt, unterbleibt diese Nachricht. Bei Blindheit werden keine Raumdaten gesendet.
5. MG.inv — Inventar
Überträgt die Liste der Gegenstände im Inventar des Spielers. Wird bei Inventaränderungen gesendet.
5.1. MG.inv.list — Inventarliste (Server → Client)
MG.inv.list [
{
"name": "Eine scharfe Handaxt",
"id": "handaxt",
"oid": "/items/waffen/axt/handaxt#42",
"type": "weapon"
},
{
"name": "Ein Lederhelm",
"id": "lederhelm",
"oid": "/items/ruestungen/leder/helm/lederhelm#17",
"type": "armour",
"armourType": "Helm"
},
{
"name": "Ein Stück Brot",
"id": "brot",
"oid": "/items/essen/brot#5",
"type": "food"
}
]
Felder je Gegenstand:
* name — Anzeigename (Kurzbeschreibung)
* id — Befehls-ID (z.B. für "untersuche schwert")
* oid — Eindeutige Objekt-ID (für Detail-Anfragen)
* type — Typ: "weapon", "armour", "food", "drink"
oder "item"
* armourType — Nur bei Rüstungen: "Helm", "Schild", etc.
* img — Bild-URL, falls vorhanden (optional)
* money — 1 wenn es Geld ist (optional)
5.2. MG.inv.getDetail — Detailanfrage (Client → Server)
Der Client kann erweiterte Informationen zu einem einzelnen Gegenstand anfordern:
MG.inv.getDetail { "oid": "/items/waffen/axt/handaxt#42" }
5.3. MG.inv.detail — Detailantwort (Server → Client)
MG.inv.detail {
"oid": "/items/waffen/axt/handaxt#42",
"long": "Eine handliche Axt mit scharfer Klinge.",
"weight": 1500,
"material": "Eisen, Eiche",
"weaponType": "Axt",
"damType": "Hieb",
"hands": 1,
"reqLevel": 3,
"maxCondition": 120,
"damaged": 5
}
Felder (alle optional außer oid):
* oid — Objekt-ID (gleich wie in der Anfrage)
* long — Langbeschreibung
* weight — Gewicht in Gramm
* material — Material(ien) des Gegenstands
* weaponType — Waffentyp: "Schwert", "Axt", "Keule",
"Speer", "Messer", "Stab", "Peitsche",
"Waffenlos", "Magisch", "Fernwaffe"
* damType — Schadenstyp(en), kommagetrennt
* hands — Anzahl Hände (1 oder 2)
* armourType — Rüstungstyp (z.B. "Helm", "Schild")
* reqLevel — Benötigte Stufe zum Tragen/Führen
* maxCondition — Ursprünglicher WC/AC-Wert
* damaged — Akkumulierter Schaden am Gegenstand
6. MG.map — Kartendaten
Sendet Kartendaten für die Umgebung des Spielers. Wird nach Login und bei jedem Raumwechsel gesendet.
MG.map.data {
... (Kartendaten, generiert von /obj/map)
}
Die Struktur der Kartendaten hängt von der aktuellen Region ab und enthält Informationen über umliegende Räume, Verbindungen und besondere Merkmale.
7. MG.quest — Questsystem
Überträgt Quest-Informationen. Ermöglicht das Verfolgen aktiver Quests (Quest-Tracker).
7.1. MG.quest.init — Initialdaten (Server → Client)
Wird bei Modulaktivierung gesendet. Enthält alle verfügbaren (noch nicht gelösten) Quests.
MG.quest.init {
"quests": [
{
"name": "Rattenplage von Haithabu",
"ap": 4,
"class": 0,
"attr": 0,
"group": 0,
"diff": 5,
"hint": "Sprich mit Jarl Ragnar in Haithabu."
}
],
"active": [
{
"name": "Rattenplage von Haithabu",
"text": "Finde die Ratten im Keller der Taverne.",
"time": 1708012345
}
],
"max_active": 3,
"groups": ["leicht", "mittel", "schwer", "sehr schwer"],
"level": 5
}
Felder: * quests — Alle ungelösten Quests * active — Aktuell verfolgte Quests (Quest-Tracker) * max_active — Maximale Anzahl gleichzeitig verfolgter Quests * groups — Schwierigkeitsgruppen-Namen * level — Aktuelle Spielerstufe
Felder je Quest: * name — Questname * ap — Abenteuerpunkte bei Lösung * class — Questklasse * attr — Attributpunkte bei Lösung * group — Index in der groups-Liste (-1 = versteckt) * diff — Schwierigkeit * hint — Einstiegshilfe
7.2. MG.quest.update — Delta-Update (Server → Client)
Wird gesendet, wenn sich der Quest-Status ändert.
MG.quest.update {
"action": "step",
"name": "Rattenplage von Haithabu",
"text": "Berichte Jarl Ragnar von deinem Erfolg."
}
Aktionen: * "step" — Quest-Schritt aktualisiert (neuer Text) * "remove" — Quest aus Tracker entfernt * "solved" — Quest gelöst
7.3. MG.quest.pin — Quest verfolgen (Client → Server)
MG.quest.pin { "name": "Rattenplage von Haithabu" }
7.4. MG.quest.unpin — Quest nicht mehr verfolgen
MG.quest.unpin { "name": "Rattenplage von Haithabu" }
8. MG.skills — Fertigkeiten
Überträgt die gelernten Kampffertigkeiten (Skills) des Spielers mit Kosten, Cooldown und weiteren Details.
8.1. MG.skills.list — Skillliste (Server → Client)
MG.skills.list {
"guild": "abenteurer",
"guild_display": "Jarlsbanner",
"total": 12,
"skills": [
{
"name": "schnell",
"display": "Schnell",
"ability": 8500,
"cost": 30,
"fatigue": 5,
"level": 3,
"icon": "Schnell",
"info": "Erhöht die Geschwindigkeit."
}
]
}
Felder:
* guild — Interner Gildenname
* guild_display — Anzeigename der Gilde
* total — Gesamtzahl der Fertigkeiten im Schwur
* skills — Array der gelernten Fertigkeiten
Felder je Skill: * name — Interner Name (Befehl zum Ausführen) * display — Anzeigename * ability — Fähigkeitswert (0–10000) * cost — KP-Kosten * fatigue — Cooldown in Sekunden * level — Benötigte Stufe zum Lernen * icon — Icon-Bezeichner (ASCII, für Dateinamen) * info — Beschreibungstext
8.2. MG.skills.get — Skills anfordern (Client → Server)
Der Client kann die Skill-Liste jederzeit neu anfordern:
MG.skills.get (keine Daten)
9. comm.channel — Ebenenmeldungen
Überträgt Nachrichten von eingeschalteten MUD-Ebenen. Wird aktiviert durch "comm.channel 1".
WICHTIG: Wenn dieses Modul aktiv ist, wird die Ausgabe der Ebenenmeldung im normalen Textfenster unterdrückt! Euer Client muss die Meldungen dann selbst anzeigen.
comm.channel {
"chan": "allgemein",
"msg": "[Allgemein:Ragnar] Heil euch, Wikinger!",
"player": "Ragnar"
}
Felder: * chan — Ebenenname (z.B. "allgemein", "abenteurer") * msg — Vollständige formatierte Nachricht * player — Name des Senders
Hinweise: * History-Abruf wird NICHT per GMCP übertragen. * Ebenen können nicht per GMCP ein-/ausgeschaltet werden.
10. Client-Modul — Bildschirmgröße
Ermöglicht es dem Client, seine Bildschirmgröße an das MUD zu melden. Nützlich für Web-Clients, die keine Standard-Telnet-Größenverhandlung nutzen.
Client.Screen (Client → Server)
Client.Screen { "rows": 40 }
Felder: * rows — Anzahl sichtbarer Zeilen (5–200)
11. Veraltete Module (char / Char)
Die Module "char" (Aardwolf) und "Char" (IRE) existieren nur noch aus Kompatibilitätsgründen. Sie übertragen deutlich weniger Daten als MG.char.
ES WIRD DAVON ABGERATEN, DIESE MODULE ZU VERWENDEN. Nutzt stattdessen immer MG.char!
Wenn MG.char aktiv ist, werden "char" und "Char" nicht bedient.
11.1. char (Aardwolf) — Minimaler Datensatz
* char.base { "name": "Ragnar", "race": "Mensch" }
* char.vitals { "hp": 120, "mana": 90 }
* char.stats { "int": 12, "con": 10, "str": 8,
"dex": 12 }
* char.status { "level": 12 }
11.2. Char (IRE) — Minimaler Datensatz
* Char.Vitals { "hp": 120, "mp": 90,
"maxhp": 120, "maxmp": 150 }
* Char.Status { "level": 12, "guild": "Abenteurer" }
* Char.StatusVars { "level": "Spielerstufe",
"guild": "Gilde" }
12. Mudlet — Einrichtung und Beispiele
Mudlet unterstützt GMCP nativ. Die empfangenen Daten landen automatisch in der globalen Lua-Tabelle "gmcp".
12.1. GMCP aktivieren
In den Verbindungseinstellungen von Mudlet ist GMCP standardmäßig aktiviert. Unter "GMCP Modules" könnt ihr eintragen, welche Module angefordert werden:
MG.char 1 MG.room 1 MG.inv 1 MG.map 1 MG.quest 1 MG.skills 1 comm.channel 1 Client 1
12.2. Trigger auf GMCP-Ereignisse
In Mudlet könnt ihr Trigger vom Typ "GMCP Event" anlegen. Für jedes GMCP-Paket gibt es ein gleichnamiges Event.
Beispiele für Event-Namen: * gmcp.MG.char.vitals * gmcp.MG.char.maxvitals * gmcp.MG.char.status * gmcp.MG.char.info * gmcp.MG.char.base * gmcp.MG.char.effects * gmcp.MG.char.enemy * gmcp.MG.char.death * gmcp.MG.room.info * gmcp.MG.inv.list * gmcp.MG.inv.detail * gmcp.MG.quest.init * gmcp.MG.quest.update * gmcp.MG.skills.list * gmcp.comm.channel
12.3. Beispiel: LP/KP-Anzeige in Mudlet
Erstellt einen GMCP-Event-Trigger auf "gmcp.MG.char.vitals" mit folgendem Lua-Script:
local hp = gmcp.MG.char.vitals.hp
local sp = gmcp.MG.char.vitals.sp
local combat = gmcp.MG.char.vitals.in_combat
echo("LP: " .. hp .. " KP: " .. sp)
if combat == 1 then
echo(" [KAMPF]")
end
12.4. Beispiel: Stufenfortschritt
GMCP-Event-Trigger auf "gmcp.MG.char.info":
local lvl = gmcp.MG.char.info.level
local pct = gmcp.MG.char.info.level_percent
echo("Stufe " .. lvl .. " (" .. pct .. "%)")
12.5. Beispiel: Raumausgänge anzeigen
GMCP-Event-Trigger auf "gmcp.MG.room.info":
local room = gmcp.MG.room.info
echo("Raum: " .. room.short .. "\n")
echo("Ausgänge: ")
for _, exit in ipairs(room.exits) do
echo(exit .. " ")
end
12.6. Beispiel: Ebenenmeldungen einfärben
GMCP-Event-Trigger auf "gmcp.comm.channel":
local ch = gmcp.comm.channel
if ch.chan == "allgemein" then
cecho("<yellow>" .. ch.msg .. "\n")
else
cecho("<cyan>" .. ch.msg .. "\n")
end
12.7. Beispiel: Buff-Effekte überwachen
GMCP-Event-Trigger auf "gmcp.MG.char.effects":
local effects = gmcp.MG.char.effects.effects
if #effects == 0 then
echo("Keine aktiven Effekte.\n")
else
for _, eff in ipairs(effects) do
echo(eff.name .. ": " .. eff.remaining
.. "s übrig\n")
end
end
12.8. Beispiel: Gegner-Lebensbalken
GMCP-Event-Trigger auf "gmcp.MG.char.enemy":
local enemy = gmcp.MG.char.enemy
if not enemy or not enemy.name then
-- Kampf vorbei, Balken ausblenden
echo("Kein Gegner.\n")
return
end
echo(enemy.name .. " (" .. enemy.level .. ") "
.. enemy.hp_percent .. "% LP")
if enemy.damage and enemy.damage > 0 then
cecho(" <red>-" .. enemy.damage .. "<reset>")
end
echo("\n")
12.9. Beispiel: Spielertod erkennen
GMCP-Event-Trigger auf "gmcp.MG.char.death":
local death = gmcp.MG.char.death
cecho("<red>Du bist gefallen!\n")
echo("Tode insgesamt: " .. death.deaths .. "\n")
echo("Gehe zum Heiligen Hain und gib 'opfere' ein.\n")
12.10. Beispiel: Inventar auswerten
GMCP-Event-Trigger auf "gmcp.MG.inv.list":
local items = gmcp.MG.inv.list
echo("Inventar (" .. #items .. " Gegenstände):\n")
for _, item in ipairs(items) do
echo(" " .. item.name .. " [" .. item.type .. "]\n")
end
13. Clients mit GMCP-Support
* Midgard Web-Client — Voller GMCP-Support, direkt im
Browser spielbar (empfohlen).
https://midgardmud.de/play/
* Mudlet — Voller GMCP-Support, Desktop-Client
* Tintin++ — GMCP über #CONFIG {TELOPT} und Events
* CMUD — GMCP-Plugin verfügbar (kein UTF-8-Support)
14. Technische Hinweise
* Groß-/Kleinschreibung der Modulnamen ist wichtig! "MG.char" ist nicht gleich "MG.Char" oder "mg.char". * JSON-Encoding: Alle Daten sind UTF-8 kodiert. * Bei Modulaktivierung sendet das MUD einmalig alle verfügbaren Daten des Moduls. * Debug-Modus: "Core.Debug 1" zeigt GMCP-Fehler an, "Core.Debug 100" zeigt alle GMCP-Kommunikation.
Siehe auch
Report · Info · Stufen · Quests · Gilden
Bereit?
Alle Befehle und Themen findest Du auch direkt im Spiel mit hilfe <thema>
Jetzt spielen
Einsteigen, ausprobieren, bleiben.