MUME Help
GENERIC MUD COMMUNICATION PROTOCOL, GMCP
The Generic Mud Communication Protocol (GMCP) allows for out-of-band
information to be sent from the MUD server to the
client.
The messages are sent as telnet commands, invisible to the player. Clients that support GMCP can receive such messages and also send GMCP messages to the game. See below for supported GMCP commands.
MUME tries to keep a level playing field for all players and clients by not providing additional information over GMCP that might disadvantage players on more basic clients.
Note: GMCP module and message names are not case-sensitive but message body key names are case-sensitive.
See https://www.gammon.com.au/gmcp and https://tintin.mudhalla.net/protocols/gmcp for more information on GMCP.
Supported modules
Core
|
core functionality |
Char
|
information about a character |
Client
|
information for the map and Mudlet client package |
Comm.Channel
|
communication channels |
External.Discord
|
information about the MUME Discord channel |
Room
|
information about the current room |
Room.Chars
|
information about characters present in the room |
Supported messages by modules
Core
Sent by client
Core.Hello
- Needs to be the first message sent on the initial connection to identify the client
-
Example:
Core.Hello { "client": "Mudlet", "version": "3.0.0" }
Core.Supports.Set
- Sent with the supported packages of the client and overriding previous packages
- Message body is an array of strings, each consisting of the module name and version, separated by a space
- Module version is a positive non-zero integer
-
Example:
Core.Supports.Set [ "Char 1", "External.Discord 1", "Room 1" ]
Core.Supports.Add
- Sent to add modules that are supported by the client
- Message body and behavior is identical to Set if no packages have been sent yet
- Previous packages versions are overridden if they are resubmitted
-
Example:
Core.Supports.Add [ "Char 1" ]
Core.Supports.Remove
- Sent to remove modules that are not desired by the client
-
Message body format is identical to
Set
andAdd
- Module version can be omitted
-
Example:
Core.Supports.Remove [ "Char", "External.Discord" ]
Core.KeepAlive
Core.Ping
-
Causes the server to send a
Core.Ping
back - Message body is an optional number which indicates average ping time from previous requests
-
Example:
Core.Ping 120
Sent by server
Core.Ping
Core.Goodbye
- Sent before closing the connection
- Message body can optionally explain why the connection was terminated
-
Example:
Core.Goodbye "Goodbye!"
Char
Sent by client
Char.Login
- Used to log in a character, only interpreted if no character is logged in for that connection
-
Message body is an object with keys
name
andpassword
-
Example:
Char.Login { "name": "gandalf", "password": "mellon" }
Sent by server
Char.Name
- Contains the characters's name and the complete name including title.
-
Message body in an object with keys
name
andfullname
; the values are strings -
Example:
Char.Name { "name": "Gandalf", "fullname": "Gandalf the Grey"}
Char.Vitals
- Message body is an object containing several variables representing basic character attributes such as health, mana, etc.
-
Example:
Char.Vitals { "hp": 71, "maxhp": 100, "mana": 90, "maxmana": 100, "mp": 121, "maxmp": 121 }
-
Possible values:
hp
current health points (*) maxhp
maximum health points mana
current mana points (*) maxmana
maximum mana points mp
current movement points (*) maxmp
maximum movement points xp
current experience points tp
current travel points carrying
string describing how heavy load you are carrying ride
true if currently riding; otherwise false ridden
true if currently ridden by someone; otherwise false climb
null, "c"
, or"C"
swim
null, "s"
, or"S"
light
"*"
,"!"
,")"
, or"o"
fog
null, "-"
or"="
weather
"~"
,"'"
,"\""
, or"*"
alertness
"normal"
,"careful"
, etc.mood
"wimpy"
,"prudent"
, etc.spell-effort
"quick"
,"fast"
, etc.position
"standing"
,"fighting"
,"sitting"
,"resting"
,"sleeping"
,"stunned"
,"incapacitated"
, or"dying"
mount-moves
"rested"
,"slow"
, etc.opponent
the short name of your current fight opponent; or null buffer
the short name of your current fight opponent's opponent; or null opponent-hits
"healthy"
,"fine"
, etc.buffer-hits
"healthy"
,"fine"
, etc.(*) These may be limited in precision due to combat or other factors. See
help prompt
andhelp weather
for explanations on some of the values.
Char.StatusVars
- Sent by server after a successful login, after the module is enabled, or when any contained value changes.
- Message body is an object where each member is a name-caption pair; name is the internal name and caption the user-readable one
-
Example:
Char.StatusVars { "race": "Troll", "subrace": "Cave Troll" }
-
Possible values:
fullname
current character name and title level
character's level name
current character name next-level-tp
travel points needed to reach the next level; or null next-level-xp
experience points needed to reach the next level; or null race
player's race subclass
current subclass subrace
subrace
Client
Mudlet automatic package installation GMCP module
Sent by server
Client.GUI
- Sent by server after a successful login with a default Mudlet package
- See https://wiki.mudlet.org/w/Manual:GMCP_Extensions for more details
-
Example:
Client.GUI { "version": "1", "url": "https://mume.org/download/clients/mudlet/mume_gui.mpackage" }
Client.Map
- Sent by server after a successful login with the default MMP base map
- See https://wiki.mudlet.org/w/Standards:MMP for more details
-
Example:
Client.GUI { "url": "https://mume.org/download/mapper/arda-base.xml" }
External.Discord
Sent by client
External.Discord.Hello
- Sent to request a Discord server invite
- No message body
Sent by server
External.Discord.Info
-
Sent as a reply to
External.Discord.Hello
- Message body is an object containing the invite link for users to join the Discord chat alongside other metadata
-
Example:
External.Discord.Info { "inviteurl": "https://discord.gg/J8z8fGR", "applicationid": "667607001282510879" }
External.Discord.Status
- Sent whenever new status data should be synchronized with the client
- Allows certain clients like Mudlet to show that the player is playing MUME
- Message body includes the full state rather than a delta
-
Example:
External.Discord.Status { "game": "MUME", "details": "Multi-Users in Middle-earth" }
Comm.Channel
Sent by client
Comm.Channel.Enable
-
The message body is a string which is the name of the
communication channel to enable
(
"songs"
) -
Example:
Comm.Channel.Enable "tales"
Sent by server
Comm.Channel.List
-
Sent automatically as the
Comm.Channel
module is enabled - Contains a list of the available communication channel
-
The message is an array of objects with the following
keys:
name
name of this channel ( "songs"
)caption
human-readable description ( "Songs"
)command
game command used ( "sing"
) -
Example:
Comm.Channel.List { { "caption": "Tells", "command": "tell", "name": "tells" } }
Comm.Channel.Text
- Sent as a message is heard or sent
-
The message is an object with the following keys:
channel
channel name destination
(for sent messages) name of the recipient talker
name of the sender; "you"
for sent messagestext
text heard (may include ANSI codes) -
Examples:
-
Comm.Channel.Text { "channel: "tells", "talker": "Gandalf", "text": "Gandalf tells you 'Fly, you fools!'" }
-
Comm.Channel.Text { "channel: "questions", "talker": "you", "destination": "Frodo" "text": "Where is the ring?" }
-
Room
Sent by server
Room.Info
- Sent when a player moves into a new room
- Contains information about the room that the player is in
-
Message body is an object with the following keys:
name
string with the room name without the preposition; null if not visible area
string containing the zone area name environment
string of the room terrain type exits
-
Example:
Room.Info { "name": "The Inn's Rooms", "area": "Bree", "environment": "building", "exits": { "e": { "name": "gate" }, "d": {} } }
-
Possible exit flag strings:
broken
door is broken climb-down
is a downward climb climb-up
is an upward climb closed
door is closed; if not set any door is open magic
is a portal road
is a road sundeath
causes sundeath (Troll only) sunny
is sunny (Troll and Orc only) trail
is a trail water
leads to water
Room.UpdateExits
- Sent when the state of exits change
-
Message body is an object containing the new
state of exits like the
exits
field in theRoom.Info
message - Only exits that changed state are included
-
If an exit is removed, its value
becomes
false
-
Example:
Room.UpdateExits { "n": false, "e": { "flags": ["closed"], "name": "gate" } }
means the exit to the north was removed and that there now is a closed gate to the east
Room.Chars
Sent by server
-
Room.Chars.<command>
are sent from the server as something changes about the characters in the room. -
The client must keep a set of currently known
characters (in their room), as identified by their
id
numbers. This set is maintained using theAdd
,Update
,Remove
, andSet
commands. -
A <character> is an
object with the following (optional) keys:
id
a number identifying this character (the only mandatory field) name
the character's name (a string) desc
the current one-line description (a string) flags
temporary states (an array of strings) labels
labels (an array of strings); only Ainur can have multiple position
current position (a string) weapon
current weapon ( false
or a string)fighting
currently attacking (*) driving
currently driving; first rider of (*) riding
currently riding; not-first rider (*) (*) These fields can be a string ( "you"
,"Someone"
, …), anid
number representing another character, ornull
.
Room.Chars.Add
Room.Chars.Update
-
Sent whenever state for an already known
character, as identified by the
id
key, should be updated - Message body is a <character>; the included keys are the ones that should be updated
Room.Chars.Remove
-
Sent when a character, identified by its
id
key, is removed from the set - Message body is the <id> (a number)
Room.Chars.Set
- Sent when the set of characters should be completely replaced
- Message body is an array of <character>
See also: | MUME CLIENT PROTOCOL, XML |
Generated on Sun Mar 26 19:51:04 2023