Play / MSDP

MSDP

The older and simpler of the two data protocols Kallisti speaks. One name, one value, 111 of them.

Where GMCP sends structured packages, MSDP sends flat variables: you ask to be told about HEALTH, and from then on the server tells you whenever it changes. Nothing is nested and nothing needs parsing beyond reading a name and a value.

Any client that supports MSDP will negotiate it on connect. There is nothing to enable in game.

Subscribing

REPORT asks the server to keep you informed about a variable. It is the only verb most scripts need.

MSDP.REPORT  HEALTH
MSDP.REPORT  HEALTH_MAX
MSDP.REPORT  OPPONENT_HEALTH

-- Mudlet spells the same thing:
sendMSDP("REPORT", "HEALTH", "HEALTH_MAX", "OPPONENT_HEALTH")
Subscribe to what you use, not to everything. A client that REPORTs every variable it can see receives every one of them, forever, and pays that cost on every change. Worse, it becomes sensitive to variables it has never heard of: a client doing this has been broken here before, by nothing more than the server gaining a new variable it did not expect. Ask for what your script reads.

Asking once, and stopping

MSDP.SEND      ROOM_NAME     -- ask once, no subscription
MSDP.UNREPORT  HEALTH        -- stop being told about one variable
MSDP.RESET     REPORTABLE_VARIABLES

Finding out what exists

The server will describe itself, which is more reliable than trusting this page to stay current.

MSDP.LIST  COMMANDS               -- the verbs this server accepts
MSDP.LIST  LISTS                  -- what else you may ask LIST for
MSDP.LIST  REPORTABLE_VARIABLES   -- everything you may subscribe to
MSDP.LIST  SENDABLE_VARIABLES     -- everything you may ask for once
MSDP.LIST  REPORTED_VARIABLES     -- what you are subscribed to now

What the server publishes

All read-only. The server sets them; your client reads them.

Who you are
Set at login and when they change.
CHARACTER_NAMEACCOUNT_NAMELEVELRACECLASSALIGNMENTWHOFLAGSPARAGON_LEVELREMORT_LEVELSREMORT_LAPS_TOTAL
Vitals
The ones most bars are built from.
HEALTHHEALTH_MAXMANAMANA_MAXSTAMINASTAMINA_MAXPOSITIONCOMBAT_STANCEHUNGERTHIRSTWIMPYRANGEDPROMPTAFFECTSBARDSONG
Statistics
Current, permanent and maximum for each.
STRINTWISDEXCONLUKSTR_PERMINT_PERMWIS_PERMDEX_PERMCON_PERMLUK_PERMSTR_MAXINT_MAXWIS_MAXDEX_MAXCON_MAXLUK_MAXHITROLLDAMROLLAC
Progression and wealth
Everything you earn.
EXPERIENCEEXPERIENCE_MAXEXPERIENCE_TNLGOLDBANK_GOLDQPOINTSBANK_QPOINTSPRACTICEHERO_POINTSHERO_POINTS_TNLNOBLE_POINTSNOBLE_POINTS_TNL
Your opponent
Populated while fighting and cleared when it ends. Health and stamina are PERCENTAGES, not points.
OPPONENT_NAMEOPPONENT_LEVELOPPONENT_HEALTHOPPONENT_HEALTH_MAXOPPONENT_STAMINAOPPONENT_STAMINA_MAXOPPONENT_NUMBER
What you are holding
EQUIPMENT is the whole worn set; the others are single slots.
WIELDHOLDSHIELDQUICKDRAWEQUIPMENT
Your mount
Only while mounted.
MOUNT_NAMEMOUNT_HEALTHMOUNT_HEALTH_MAXMOUNT_STAMINAMOUNT_STAMINA_MAX
Where you are
ROOM_VNUM is withheld in rooms you are not allowed to map.
ROOM_NAMEROOM_VNUMROOM_TERRAINROOM_EXITSROOM_WEATHERAREA_NAMEAREA_MINLEVELAREA_MAXLEVELPC_IN_ROOMPC_IN_ZONE
Your group
GROUP carries the members, GROUPLEVEL the group's effective level.
GROUPGROUPLEVEL
The server and your session
QUEUE is your own pending command backlog, not a server statistic.
SERVER_IDSERVER_TIMESNIPPET_VERSIONWORLD_TIMEUPTIMEQUEUE

What your client may set

The only writable variables. Everything above is one-way.

CLIENT_IDwrite once
CLIENT_VERSIONwrite once
PLUGIN_IDwrite once
ANSI_COLORSon or off
XTERM_256_COLORSon or off
UTF_8on or off
SOUNDon or off
MXPon or off
BUTTON_1client GUI hint
BUTTON_2client GUI hint
BUTTON_3client GUI hint
BUTTON_4client GUI hint
BUTTON_5client GUI hint
GAUGE_1client GUI hint
GAUGE_2client GUI hint
GAUGE_3client GUI hint
GAUGE_4client GUI hint
GAUGE_5client GUI hint

MSDP or GMCP?

Both carry much the same information and you can use both at once.

MSDP is simpler and flatter, and every variable is independent, so a bar that needs three numbers subscribes to three names. GMCP groups related values into packages, so one message carries your whole set of vitals, and it can express things MSDP cannot -- a list of worn items, your group's members, the room's exits as a structure rather than a string.

Use MSDP when you want a handful of numbers with minimal ceremony. Use the GMCP guide when you want structure.