MUD Protocols

Tuesday, 14. July 2020 14:53:39, by Kerrinth

 

MUD Protocol Support

We are adding limited code support for the following MUD protocols:

We will primarily be supporting GMCP and MCCP. Support for other protocols will be more limited. If you are interested in collaborating on an HTML5 MUD client using GMCP to support touch-based devices, please get in touch with Xiphoid using board 2 or emailing xiphoid at outland.org.

This page is currently the authoritative source of information for GMCP support in Avatar. As we add support for new types of message and expand or change the functionality of existing messages, we will document that here.

Supported GMCP Messages

Client Messages

We support the following messages sent from clients to the server:

Core.Hello

Example:

Core.Hello { "client": "MyMUDClient", "version": "1.2.34" }

Char.Login

Example:

Char.Login { "name": "Myalt", "password": "myl0n6c0mpl3xp455w0rd" }

Core.Ping

Example:

Core.Ping 120

Core.KeepAlive

Example:

Core.KeepAlive

Core.Supports.Set

Example:

Core.Supports.Set [ "Char 1", "Char.Skills 1", "Char.Items 1" ]

Core.Supports.Add

Example:

Core.Supports.Add [ "Char.Vitals 1", "Char.Status 1" ]

Core.Supports.Remove

Example:

Core.Supports.Remove [ "Char", "Char.Skills", "Char.Items" ]

Char.Group.List

Example:

Char.Group.List

Char.Skills.Get

Example:

Char.Skills.Get { "group": "Arcane", "name": "fireball" }

Char.Items.Inv

Example:

Char.Items.Inv

Char.Items.Contents

Example:

Char.Items.Contents 12345678

Comm.Channel.Players

Example:

Comm.Channel.Players

Server Messages

The following messages may be sent from the server to clients:

Core.Goodbye

Example:

Core.Goodbye "Leaving the AVATAR System for the 'real world'...
    May your stay in reality be worthwhile."

Core.Ping

Example:

Core.Ping

Char.Group.List

Example:

Char.Group.List [
    { "leader": true, "name": "Xiphling", "level": "Lord", "position": "Stand", "hp": "10000", "maxhp": "10000",
           "mp": "20000", "maxmp": "20000", "mv": "30000", "maxmv": "30000", "tnl": "1428", "align": "-1000" },
    { "leader": false, "name": "Xiphlet", "level": "Lord", "position": "Stand", "hp": "20000", "maxhp": "20000",
           "mp": "10000", "maxmp": "10000", "mv": "30000", "maxmv": "30000", "tnl": "1428", "align": "-1000" }
]

Char.Items.List

Example:

Char.Items.List {
    "location": "room",
    "items": [
        { "id": "15442582457", "name": "a rock", "type": "trash" },
        { "id": "15442877992", "name": "a magical fountain", "type": "fountain" }
   ]
}

Char.Skills.Info

Example:

Char.Skills.Info {
    "skill": "burning hands",
    "group": "Arcane",
    "info": "Syntax: cast 'burning hands'       [Area Affect]

    Burning hands allows the spellcaster to inflict damage to all mobs in a
    room, by shooting jets of flames from the spellcaster's hands.  The amount
    of damage is determined by the level of the spellcaster.

    As with all area spells, there is no need to specify a target.
    This spell causes fire damage.
    "
}

Char.Skills.List

Example:

Char.Skills.List { "group": "Arcane", "list": [ "burning hands", "detect magic" ] }

Char.Skills.Groups

Example:

Char.Skills.Groups [ "Channel", "Arcane", "Psionic", "Rogue", "Archer", "Ranger",
    "Common", "Warrior", "Lore", "Stance", "Monk", "Ritual", "Object", "Rite" ]

Char.StatusVars

Example:

Char.StatusVars {
  "character_name":"Character Name",
  "server_id":"Server ID",
  "server_time":"Server Time",
  "affects":"Affects",
  "alignment":"Alignment",
  "experience_tnl":"TNL",
  "experience_tnl_max":"Max TNL",
  "health":"HP",
  "health_max":"Max HP",
  "level":"Level",
  "sublevel":"Sublevel",
  "race":"Race",
  "class":"Class",
  "mana":"Mana",
  "mana_max":"Max Mana",
  "wimpy":"Wimpy",
  "practice":"Practices",
  "gold":"Gold",
  "movement":"Move",
  "movement_max":"Max Move",
  "hitroll":"Hitroll",
  "damroll":"Damroll",
  "ac":"AC",
  "str":"Str",
  "int":"Int",
  "wis":"Wis",
  "dex":"Dex",
  "con":"Con",
  "str_perm":"Perm Str",
  "int_perm":"Perm Int",
  "wis_perm":"Perm Wis",
  "dex_perm":"Perm Dex",
  "con_perm":"Perm Con",
  "opponent_health":"Opponent HP %",
  "opponent_health_max":"Max Opponent HP %",
  "opponent_level":"Opponent Level",
  "opponent_name":"Opponent Name",
  "area_name":"Area Name",
  "room_exits":"Room Exits",
  "room_name":"Room Name",
  "world_time":"World Time",
  "client_id":"Client ID",
  "client_version":"Client Version",
  "plugin_id":"Plugin ID",
  "ansi_colors":"ANSI Color",
  "utf_8":"UTF-8",
  "sound":"Sound",
  "mxp":"MXP"
}

Char.Status

Example:

Char.Status {
  "character_name":"Xiphling",
  "affects":{
     "bless":"47",
     "armor":"47",
     "boost":"128"
  },
  "experience_tnl":"1000",
  "experience_tnl_max":"1000",
  "health":"1641",
  "health_max":"1641",
  "level":"51",
  "sublevel":"101",
  "race":"Human",
  "class":"Warrior",
  "mana":"204",
  "mana_max":"204",
  "practice":"669",
  "gold":"64",
  "movement":"954",
  "movement_max":"954",
  "hitroll":"22",
  "damroll":"16",
  "ac":"8",
  "str":"29",
  "int":"23",
  "wis":"23",
  "dex":"23",
  "con":"23",
  "str_perm":"14",
  "int_perm":"13",
  "wis_perm":"13",
  "dex_perm":"13",
  "con_perm":"13",
  "area_name":"{ 1   4} Crom    The Meadow",
  "room_exits":{
     "North":"O",
     "East":"O",
     "South":"O",
     "West":"O"
  },
  "room_name":"West Side of Tree of Knowledge"
}

Char.Vitals

Example:

Char.Vitals {
  "hp":"1641",
  "maxhp":"1641",
  "mp":"204",
  "maxmp":"204",
  "mv":"954",
  "maxmv":"954",
  "wgt":"31",
  "tnl":"1000",
  "maxtnl":"1000",
  "maxwgt":"950",
  "items":"4",
  "maxitems":"205",
  "string":"HP:1641/1641 Mana:204/204 Mv:954/954 TNL:1000/1000 Wgt:31/950 Items:4/205"
}

Comm.Channel.List

Example:

Comm.Channel.List [
  { "name":"ask", "caption":"Ask", "command":"ask" },
  { "name":"auction", "caption":"Auction", "command":"auction" },
  { "name":"chat", "caption":"Chat", "command":"chat" },
  { "name":"grtz", "caption":"Grtz", "command":"grtz" },
  { "name":"joke", "caption":"Joke", "command":"joke" },
  { "name":"music", "caption":"Music", "command":"music" },
  { "name":"newbie", "caption":"Newbie", "command":"newbie" },
  { "name":"quest", "caption":"Quest", "command":"quest" },
  { "name":"shout", "caption":"Shout", "command":"shout" },
  { "name":"yell", "caption":"Yell", "command":"yell" },
  { "name":"eslchat", "caption":"ESLChat", "command":"eslchat" },
  { "name":"buddy", "caption":"Buddy", "command":"buddy" },
  { "name":"hero", "caption":"Hero", "command":"hero" },
  { "name":"lord", "caption":"Lord", "command":"lord" }
]

Comm.Channel.Players

Example:

Comm.Channel.Players [
   {
      "name":"Xiphling",
      "channels":[
         "newbie",
         "yell",
         "hero"
      ]
   },
   {
      "name":"Xiphoid",
      "channels":[
         "ask",
         "auction",
         "chat",
         "grtz",
         "joke",
         "music",
         "newbie",
         "quest",
         "shout",
         "yell",
         "eslchat",
         "buddy",
         "hero",
         "lord"
      ]
   }
]

Comm.Channel.Text

Example:

Comm.Channel.Text {
   "channel":"chat",
   "talker":"Xiphling",
   "text":"Xiphling chats 'Hello world!'"
}

Room.Info

Example:

Room.Info {
  "name":"Approaching Wayward Marina, Unofficial \"Bank\"",
  "zone":"{23  30} Zahri   Mervue",
  "environment":"city",
  "exits":{
     "North":"O",
     "South":"O"
  },
  "details":[
     "bank"
  ]
}

Room.Players

Example:

Room.Players {
  "Xiphling":{ "name":"Xiphling", "fullname":"(White Aura) Xiphling is here." },
  "4525":{ "name":"4525", "fullname":"A kobold giggles then commences to fart in your direction." },
  "4520":{ "name":"4520", "fullname":"A kobold drools as it takes a grab for your arm." }
}

Room.AddPlayer

Example:

Room.AddPlayer { "4537":{"name":"4537", "fullname":"A kobold giggles then commences to fart in your direction."} }

Room.RemovePlayer

Example:

 Room.RemovePlayer "4537"

Room.WrongDir

Example:

Room.WrongDir "west"