GMCP: Difference between revisions
From Iron Realms Nexus Client Documentation
(→Room) |
No edit summary |
||
(110 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
[[File:Aetolia-dwarf.jpg|right|frame|caption|Dwarf Terradrim from Aetolia.]] General MUD Telnet Protocol (GMCP) is a protocol used to send data from the game server to the player client. This data transfer happens behind the scenes and is not seen by the players. This allows the game server to send messages to the client to update basic character, room, and game information. Character health is an example of information that is continually passed to the client from the game. | |||
These messages can also be accessed by the player for use in [[reflexes]]. We are working simplifying the process of capturing GMCP data for use in the client in a future version of the client. | |||
There is a configuration option in the Advanced Settings tab that will allow you to see GMCP messages as they happen. | |||
Module and message names are not case sensitive. JSON key names are case sensitive. | Module and message names are not case sensitive. JSON key names are case sensitive. | ||
= Supported modules = | === Supported modules === | ||
This documentation covers the following GMCP messages for the Iron Realms Games. | |||
* Core: core functionality | |||
* Char: information about a character | |||
* Char.Afflictions: information the characters afflictions | |||
* Char.Defences- information the characters defences | |||
* Char.Items: information about items in inventory and room, with live updates | |||
* Char.Skills: information about skills known by the player | |||
* Comm.Channel: identification of communication channels and player lists | |||
* Room: various information about the current room | |||
* Redirect: redirect outpot to another window | |||
* IRE.Composer: IRE-specific, used to edit bigger texts client-side | |||
* IRE.Display: IRE-specific display information | |||
* IRE.FileStore: used internally by the Nexus client | |||
* IRE.Misc: used internally by the fMUD and Nexus clients | |||
* IRE.Rift: IRE-specific, transmits information about the Rift contents | |||
* IRE.Sound: Yes. Sound can be sent. | |||
* IRE.Target: information about the current player target. | |||
* IRE.Tasks: information about tasks, quests, and achievements. | |||
* IRE.Time: information about the current time and date conditions in the game. | |||
* IRE.CombatMessage: currently only used by Starmourn - information about attacks seen | |||
* IRE.Wiz: used internally by the Nexus client | |||
=== Supported messages by modules === | |||
==== Core ==== | |||
* Sent by client: | |||
** Core.Hello | |||
*** Needs to be the first message that the client sends, used to identify the client | |||
*** Message body is an object with keys "client" and "version", containing the client's name and version | |||
*** '''Example''': Core.Hello {"Client":"Mudlet","Version":"3.0.0"} | |||
** Core.Supports.Set | |||
*** Notifies the server about packages supported by the client | |||
*** If another Core.Supports.*** package has been received earlier, the list is deleted and replaced with the new one | |||
*** Message body is an array of strings, each consisting of the module name and version, separated by space | |||
*** Module version is a positive non-zero integer | |||
*** Most client implementations will only need to send Set once and won't need Add/Remove; exceptions are module implementations provided by plug-ins | |||
*** '''Example''': Core.Supports.Set [ "Char 1", "Char.Skills 1", "Char.Items 1" ] | |||
** Core.Supports.Add | |||
*** Similar to Set, but appends the supported module list to the one sent earlier | |||
*** If no list was sent yet, the behaviour is identical to Set | |||
*** If the list includes module names that were already included earlier, the new version number takes precedence over the previously sent one, even if the newly sent number is lower | |||
*** Message body format is identical to that of Set | |||
*** '''Example''': Core.Supports.Add [ "Char 1", "Char.Skills 1", "Char.Items 1" ] | |||
** Core.Supports.Remove | |||
*** Removes specified modules from the list of supported modules | |||
*** Message body format is similar to Set, except that module version numbers are optional and ignored if given | |||
*** '''Example''': Core.Supports.Remove [ "Char", "Char.Skills", "Char.Items" ] | |||
** Core.KeepAlive | |||
*** Causes the server to reset the timeout for the logged character, no message body | |||
** Core.Ping | |||
*** causes the server to send a Core.Ping back | |||
*** message body is a number which indicates average ping time from previous requests, if available | |||
*** '''Example''': Core.Ping 120 | |||
* Sent by server: | |||
** Core.Ping | |||
*** Sent in reply to Core.Ping. No body. | |||
** Core.Goodbye | |||
*** Sent by server immediately before terminating a connection | |||
*** Message body is a string to be shown to the user - it can explain the reason for the disconnect | |||
*** '''Example''': Core.Goodbye "Goodbye, adventurer" | |||
==== 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" and "password" | |||
*** '''Example''': Char.Login { "name": "somename", "password": "somepassword" } | |||
* Sent by server: | |||
** Char.Name | |||
*** Sends the character name and full name which includes the title. This is only sent on login. | |||
*** '''Example''': Char.Name { "name": "Olad", "fullname": "Neophyte Olad" } | |||
** Char.Vitals | |||
*** Basic character attributes such as health, mana, etc. | |||
*** Message body is an object containing several variables | |||
*** Additionally, each variable is included in a string, in the format name:cur/max | |||
*** Interpretation of the variables is game specific | |||
*** It is generally safe to assume that the known values are numbers (even though encoded as strings), but other datatypes can be present | |||
*** The "charstats" attribute, if present, holds a list of strings that the client may choose to display to the player in a client-specific way, these hold information about the character state that the game wishes to show to the player | |||
*** '''Example''': Char.Vitals { "hp": "4500", "maxhp": "4800", "mp": "1200", "maxmp": "2500", "ep": "15000", "maxep": "16000", "wp": "14000", "maxwp": "15000", "nl": "10", "string": "H:4500/4800 M:1200/2500 E:15000/16000 W:14000/15000 NL:10/100" } | |||
*** '''Additional Achaea Keys''' | |||
**** All classes: Bleed, Rage | |||
**** Apostates: Essence | |||
**** Bard: Stance, Voice Balance | |||
**** Blademaster: Stance | |||
**** Druid: Current Morph, Sunlight Energy | |||
**** Infernal: Essence, Weaponmastery Spec | |||
**** Magi: Channels | |||
**** Monk: Kai Energy, Tekura stance | |||
**** Occultist: Karma, Entity Balance | |||
**** Paladin: Devotion, Weaponmastery Spec | |||
**** Priest: Devotion | |||
**** Runewarden: Weaponmastery Spec | |||
**** Sentinel: Current Morph | |||
**** Serpent: Secreted Venom | |||
**** Shaman: Number of spirits bound | |||
**** Sylvan: Elemental Channels, Sunlight Energy | |||
*** '''Additional Aetolia Keys''' | |||
*** '''Additional Imperian Keys''' | |||
**** General: bleed, flying, prone, stunned, dead, blind, phased, res_weakness, vote | |||
**** Balances: leftarm, rightarm, health, herb, salve, toadstool, pipe, tree, focus, purge | |||
**** Resources: kai, devotion, essence, fanatism, rage, fire, ice, faith, health_reserve, mana_reserve | |||
**** Items: leftwield, leftwield_name, rightwield, rightwield_name, mount | |||
*** '''Additional Starmourn Keys''' | |||
**** General: "xp" (raw xp), "nl" (percent xp to next level), "ww" (wetwiring not on cooldown), "combat" (are you in combat?), "vote" (have you voted on TMS recently?) | |||
**** Subsystems: "em" (electromagnetic damage), "external", "muscular", "internal", "sensory", "mind", "wetwiring" | |||
**** Class-specific: "class" (current class), "pl" / "maxpl" / "formatpl" (plasma), "bl" / "maxbl" / "formatbl" (bullets), "nn" / "maxnn" / "formatnn" (nanites), "sa" / "maxsa" / "formatsa" (sanity), "rg" / "maxrg" / "formatrg" (rage), "pt" / "maxpt" / "formatpt" (parts), "st" (stance) | |||
** Char.StatusVars | |||
*** Sent by server after a successful login or after the module is enabled | |||
*** Contains a list of character variables (level, race, etc) | |||
*** Message body is an object | |||
*** Each object element is a name-caption pair, name is the internal name and caption the user-visible one | |||
*** '''Example''': Char.StatusVars { "level": "Level", "race": "Race", "guild": "Guild" } | |||
** Char.Status | |||
*** Values of character values defined by StatusVars. | |||
*** A full list is sent by server right after StatusVars, and changes are sent in subsequent messages as they occur. | |||
*** With the exception of the initial Status message, messages only contain changed values; if a variable is not included, it has not changed since the previous Status message. | |||
*** Message body is an object. | |||
*** Each object element is a name-value pair, name is the internal name defined by the StatusVars message and value is the variable value. | |||
*** '''Example''': Char.Status { "level": "58", "city": "Antioch" } | |||
*** ''' Achaea Keys''' | |||
**** name | |||
**** fullname | |||
**** age | |||
**** race | |||
**** specialisation | |||
**** level | |||
**** xp | |||
**** xprank | |||
**** class | |||
**** city | |||
**** house | |||
**** order | |||
**** boundcredits | |||
**** unboundcredits | |||
**** lessons | |||
**** explorerrank | |||
**** mayancrowns | |||
**** boundmayancrowns | |||
**** gold | |||
**** bank | |||
**** unread_msgs | |||
**** unread_news | |||
**** target | |||
**** gender | |||
===== Char.Afflictions ===== | |||
* Sent by server: | |||
** Char.Afflictions.List | |||
*** Sends an array of current character afflictions. | |||
**** name: The name of the affliction | |||
**** cure: The basic cure of the affliction. This is used for links to cure even though other options may exist to cure the affliction. | |||
**** desc: A description of what this affliction does. | |||
*** '''Example''': Char.Afflictions.List [ { "name": "weariness", "cure": "eat kelp", "desc": "Decreases cutting and blunt damage that you inflict by 30%." }, { "name": "asthma", "cure": "eat kelp", "desc": "Makes you unable to smoke pipes." }, { "name": "slow herbs", "cure": "apply epidermal", "desc": "Increases the time needed to regain herb balance by 1.25 seconds." }, { "name": "nausea", "cure": "eat nightshade", "desc": "Causes periodic vomiting, which does damage and increases hunger." } ] | |||
** Char.Afflictions.Add | |||
*** Add an affliction to the character. | |||
*** '''Example''': Char.Afflictions.Add { "name": "asthma", "cure": "eat kelp", "desc": "Makes you unable to smoke pipes." } | |||
** Char.Afflictions.Remove | |||
*** Removes an affliction from the character. | |||
*** '''Example''': Char.Afflictions.Remove [ "asthma" ] | |||
===== Char.Defences===== | |||
* Sent by server: | |||
** Char.Defences.List | |||
*** Send an array of all the defences a character currently has. | |||
**** name: The name of the defence. | |||
**** desc: The description of the defence. | |||
*** '''Example''': Char.Defences.List [ { "name": "deaf", "desc": "deaf" }, { "name": "blind", "desc": "blind" }, { "name": "nightsight", "desc": "nightsight" } ] | |||
** Char.Defences.Add | |||
*** Sent when a defence is added to a character. | |||
*** '''Example''': Char.Defences.Add { "name": "deaf", "desc": "deaf" } | |||
** Char.Defences.Remove | |||
*** Sent when a defence is removed from a character. | |||
*** '''Example''': Char.Defences.Remove [ "blind" ] | |||
===== Char.Items ===== | |||
* Sent by client: | |||
** Char.Items.Contents | |||
*** Request for the server to send the list of items located inside another item. | |||
*** Message body is a number identifying the item. | |||
*** Causes the server to send back an appropriate Char.Items.List message. | |||
*** '''Example''': Char.Item.Contents 12345 | |||
** Char.Items.Inv | |||
*** Request for the server to send the list of items in player's inventory. | |||
*** Message body is empty. | |||
*** Causes the server to send back an appropriate Char.Items.List message. | |||
*** '''Example''': Char.Items.Inv "" | |||
** Char.Items.Room | |||
*** Sent by the client to refresh the items in a room. | |||
*** Message body is empty | |||
*** Causes the server to send back an appropriate Char.Items.List message. | |||
*** '''Example''': Char.Items.Room "" | |||
* Sent by server: | |||
** Char.Items.List | |||
*** List of items at a specified location (room, inv, held container) | |||
*** Message body is an object with keys "location" and "items" | |||
*** Location value is a string, "inv", "room", or "repNUMBER" - the last one is container identification | |||
*** Items value is an array, whose each item is an object with keys "id", "name" and optionally "attrib" | |||
*** ID is a number identifying the item, name is a string containing a short player-visible item description | |||
*** Icon is the image the item is associated with in the client. | |||
*** Attrib is a string consisting of characters describing item properties: | |||
**** "w" = worn, | |||
**** "W" = wearable but not worn | |||
**** "l" = wielded | |||
**** "g" = groupable | |||
**** "c" = container | |||
**** "t" = takeable | |||
**** "m" = monster | |||
**** "d" = dead monster | |||
**** "x" = should not be targeted (guards, ...) | |||
*** '''Example''': Char.Items.List { "location": "inv", "items": [ { "id": "12807", "name": "a personal journal", "icon": "scroll", "attrib": "l" }, { "id": "303060", "name": "a gold nugget", "icon": "commodity" } ] } | |||
** Char.Items.Add | |||
*** Informs the client about an item being added to the specified location | |||
*** Message body is an object with keys "location" and "item" | |||
*** Location is same as with List, item is an object with the same structure as one item from the items array of List | |||
*** '''Example''': Char.Items.Add { "location": "room", "item": { "id": "239602", "name": "an elegant white letter", "icon": "container", "attrib": "c" } } | |||
*** '''Example''': Char.Items.Add { "location": "room", "item": { "id": "303060", "name": "a gold nugget", "icon": "commodity" } } | |||
*** '''Example''': Char.Items.Add { "location": "inv", "item": { "id": "303060", "name": "a gold nugget", "icon": "commodity", "attrib": "t" } } | |||
** Char.Items.Remove | |||
*** Informs the client about an item being removed from the location | |||
*** Message body is an object with keys "location" and "item" | |||
*** Location is same as with List, item is an integer value identifying the item | |||
*** '''Example''': Char.Items.Remove { "location": "room", "item": { "id": "239602", "name": "an elegant white letter", "icon": "container", "attrib": "t" } } | |||
*** '''Example''': Char.Items.Remove { "location": "inv", "item": { "id": "303060", "name": "a gold nugget", "icon": "commodity" } } | |||
** Char.Items.Update | |||
*** Informs the client about an item's attributes being changed - only sent for inventory items | |||
*** Message body syntax the same as with Add | |||
*** '''Example''': Char.Items.Update { "location": "inv", "item": { "id": "60572", "name": "an ornate steel rapier" } } | |||
===== Char.Skills ===== | |||
* Sent by client: | |||
** Char.Skills.Get | |||
*** Sent by client to request skill information | |||
*** Message body is an object with keys "group" and "name" | |||
*** If both group and name is provided, the server will send Char.Skills.Info for the specified skill | |||
*** If group is provided but name is not, the server will send Char.Skills.List for that group | |||
*** Otherwise the server will send Char.Skills.Groups | |||
*** '''Example''': Char.Skills.Get {"group":"Perception"} | |||
*** '''Example''': Char.Skills.Get {"group":"perception","name":"Deathsight"} | |||
* Sent by server: | |||
** Char.Skills.Groups | |||
*** Groups of skills available to the character | |||
*** Sent by server on request or at any time (usually if the list changes) | |||
*** For IRE games, groups are skills like Survival or Elemancy | |||
*** Message body is an array including the name and current rank of each skill the character has. | |||
*** '''Example''': Char.Skills.Groups [ { "name": "Perception", "rank": "Transcendent (100%)" }, { "name": "Survival", "rank": "Inept (0%)" }, { "name": "Weaponry", "rank": "Inept (0%)" }, { "name": "Tattoos", "rank": "Inept (0%)" }, { "name": "Evasion", "rank": "Inept (0%)" }, { "name": "Engineering", "rank": "Inept (0%)" }, { "name": "Taming", "rank": "Inept (0%)" }, { "name": "Concoctions", "rank": "Inept (0%)" }, { "name": "Toxins", "rank": "Inept (0%)" }, { "name": "Smithing", "rank": "Inept (0%)" }, { "name": "Malignosis", "rank": "Adept (1%)" }, { "name": "Necromancy", "rank": "Inept (0%)" }, { "name": "Evileye", "rank": "Adept (40%)" } ] | |||
** Char.Skills.List | |||
*** List of skills in a group available to the character | |||
*** Sent by server on request only | |||
*** For IRE games, this is the list visible on AB <skillname> | |||
*** Message body is an object with keys "group", "list", and "desc". | |||
*** The list value is an array of strings, each being the name of one skill | |||
*** '''Example''': Char.Skills.List { "group": "perception", "list": [ "Looking", "Glancing", "Secrets", "Decaylist", "Squinting", "Flyers", "Observe", "Farsight", "Containerlist", "Vigilance", "Treewatch", "Deathsight", "Pipelist", "Elixlist", "Search", "Letterlist", "Booklist", "Skywatch", "PowerNodes", "Keylist", "Alertness", "Rites", "Traps", "Magicklist", "Nightsight", "Hypersight", "Thirdeye", "Tattoos", "Discernment", "Wormholes", "Rivensense", "Contemplation", "Scan", "Telesense", "Appraise", "Trueassess", "Artifactlist", "Warning", "Viewshrine", "Landsense" ], "descs": [ "Gain knowledge of your immediate surroundings.", "See summarized information about your surroundings.", "Discover hidden exits.", "How much more time do those items have?", "See extended distances in your line of sight.", "Take notice of those in the skies.", "Gain information about your extended surroundings.", "Attempt to locate another player from afar.", "What do you have in your containers?", "Increase your resistance to hypnosis.", "Watch the forest canopies for movement.", "Attune yourself to the Underworld.", "Scan your pipes with utmost speed.", "Quickly discover what elixirs and salves you are holding.", "Search your location for hidden beings.", "Quick glance of all your letters.", "Scan the titles of books you own.", "Watch the skies for movement.", "Detect the nodes of power in your area.", "See a list of your keys and which doors they open.", "Heightened awareness of your surroundings.", "View the holy rites operating in your location.", "The ability to search for traps in your location.", "Check the status of your magickal items.", "Use infravision to see in the dark.", "See the actions of cloaked players.", "Give yourself the power of the third eye.", "Discover what tattoos are on another player.", "Discover what defences are protecting an individual.", "The ability to sense wormholes in your location.", "Sense the bodies of the recently slain.", "Perceive the state of another's mental strength.", "Seekout the locations of your allies and enemies.", "Heighten your awareness to telepathic attempts.", "Quickly take note of someone's carried possessions.", "Gain more detailed information concerning your foe.", "See what artifact powers surround an individual.", "Watch for the prying eyes of the enemy.", "Gain a detailed understanding of a shrine.", "The ability to recognize mortals entering the realm." ] } | |||
** Char.Skills.Info | |||
*** Information about a single skill, only sent upon request | |||
*** Message body is an object, keys are "group", "skill", and "info", values are strings | |||
*** Group and skill identify the request, info is a description (usually multi-line) of the skill's functionality and usage | |||
*** '''Example''': Char.Skills.Info { "group": "perception", "skill": "deathsight", "info": "Syntax: DEATHSIGHT\n RELAX DEATHSIGHT\n\nUsing this ability, your mind is now capable of attuning itself to the realm of the dead. While doing so, you will be alerted whenever anyone dies." } | |||
==== Comm.Channel ==== | |||
* Sent by client: | |||
** Comm.Channel.Players | |||
*** Request for the server to send Comm.Channel.Players | |||
*** No message body. | |||
*** '''Example''': Comm.Channel.Players "" | |||
** Comm.Channel.Enable | |||
*** Used to tell the game to turn on a character channel without typing in a command line command. | |||
*** Example: Comm.Channel.Enable "newbie" | |||
*** Example: Comm.Channel.Enable "clt Consortium" | |||
* Sent by server: | |||
** Comm.Channel.Players | |||
*** List of players and organizations (city, guild, ...) that they share with this player | |||
*** Message body is an array with each element describing one player | |||
*** Each element is an object with keys "name" and "channels", name is a string, channels is an array | |||
*** The channels array may be omitted if empty; if given, it is a list of organization names | |||
*** '''Example''': Comm.Channel.Players [{"name": "Player1", "channels: ["Some city", "Some guild"]}, {"name": "Player2"}] | |||
*** '''Example''': Comm.Channel.Players [ { "name": "Ahkan", "channels": [ "The City of Stavenn" ] }, { "name": "Sharatar", "channels": [ "The City of Stavenn", "The Revenants" ] } ] | |||
** Comm.Channel.List | |||
*** List of communication channels available to the player, sent on login/negotiation and if changed | |||
*** Message body is an array of objects, each object representing one channel | |||
*** Each object has keys "name", "caption" and "command" - name is internal name, caption is player-visible name, command is command used to communicate over this channel | |||
*** '''Example''': Comm.Channel.List [{"name":"ct", "caption":"Some city", "command":"ct"}, {"name":"gt", "caption":"Some guild", "command":"gt"}] | |||
*** '''Example''': Comm.Channel.List [ { "name": "newbie", "caption": "Newbie", "command": "newbie" }, { "name": "market", "caption": "Market", "command": "market" }, { "name": "ct", "caption": "Stavenn", "command": "ct" }, { "name": "gt", "caption": "Revenants", "command": "gt" } ] | |||
** Comm.Channel.Start | |||
*** Informs the client that text that follows is something said over a communication channel | |||
*** Message body is a text containing the channel name | |||
*** For tells from/to another player, the channel name is "tell Name" | |||
*** '''Example''': Comm.Channel.Start "ct" | |||
*** '''Example''' :Comm.Channel.Start "tell Jeremy" | |||
** Comm.Channel.End | |||
*** Ends a channel text started by Comm.Channel.Start | |||
*** Message body is a text containing the channel name | |||
*** '''Example''': Comm.Channel.End "tell Jeremy" | |||
** Comm.Channel.Text | |||
*** The text of the communication that you heard, who spoke, and which channel it was on | |||
*** '''Example''': Comm.Channel.Text { "channel": "says", "talker": "Tecton", "text": "(Tecton the Terraformer says, \"Are we releasing dragon lairs or the phase artefact first?\"" } | |||
*** '''Example''': Comm.Channel.Text { "channel": "tell Jeremy", "talker": "Olad", "text": "\u001b[0;1;33mYou tell Jeremy, \"Hi.\"\u001b[0;37m" } | |||
*** '''Example''': Comm.Channel.Text { "channel": "newbie", "talker": "Olad", "text": "\u001b[0;1;32m(Newbie): You say, \"Hello.\"\u001b[0;37m" } | |||
==== Room ==== | |||
* Sent by server: | |||
** Room.Info | |||
*** Contains information about the room that the player is in. Some of these may be IRE-specific | |||
*** Message body is an object with the following keys | |||
**** "num" - number identifying the room | |||
**** "name" - string containing the brief description | |||
**** "area" - string containing area name | |||
**** "environment" - string containing environment type ("Hills", "Ocean", ...) | |||
**** "coords" - room coordinates (string of numbers separated by commas - area,X,Y,X,building, building is optional | |||
**** "map" - map information - URL pointing to a map image, followed by X and Y room (not pixel) coordinates on the map | |||
**** "details" - array holding further information about a room - shop,bank,... | |||
**** "exits" - object containing exits, each key is a direction and each value is the number identifying the target room | |||
*** '''Example''': Room.Info {"num": 12345, "name": "On a hill", "area": "Barren hills", "environment": "Hills", "coords": "45,5,4,3", "map": "www.imperian.com/itex/maps/clientmap.php?map=45&level=3 5 4", "exits": { "n": 12344, "se": 12336 }, "details": [ "shop", "bank" ] } | |||
** Room.WrongDir | |||
*** Sent if the player attempts to move in a non-existant direction using the standard movement commands | |||
*** Upon receiving this message, the client can safely assume that the specified direction does not lead anywhere at this time | |||
*** Message body is a string with the name if the non-existant exit | |||
*** Example: Room.WrongDir "ne" | |||
** Room.Players | |||
*** Object containing player details, each key is the short name of the player and each value is the full name including titles for the player | |||
*** '''Example''': Room.Players [{ "name": "Tecton", "fullname": "Tecton the Terraformer" }, {"name": "Cardan", "fullname": "Cardan, the Curious" }] | |||
** Room.AddPlayer | |||
*** Message body has the same object structure as Room.Players except that it only contains the one player being added to the room. | |||
*** '''Example''': Room.AddPlayer { "name": "Cardan", "fullname": "(Cardan, the Curious)" } | |||
** Room.RemovePlayer | |||
*** Message body has the same object structure as Room.Players except that it only contains the one player being removed from the room. | |||
*** '''Example''': Room.RemovePlayer "Cardan" | |||
==== Redirect ==== | |||
* Sent by server: | |||
** Redirect.Window | |||
*** Specifies a window to redirect further input to | |||
*** Message body is a string specifying the window to redirect to | |||
*** The main window is referred to as "main", and is the default if the message body is omitted or empty | |||
*** Example: Redirect.Window "map" | |||
==== IRE ==== | |||
===== IRE.Composer ===== | |||
* Sent by server: | |||
** IRE.Composer.Edit | |||
*** Sent by the server when the player enters an in-game editor. Body is an object, with keys "title" and "text". Text contains the current buffer, title is a title that can be shown to the user. | |||
*** '''Example''': IRE.Composer.Edit { "title": "Composer", "text": "" } | |||
* Sent by client: | |||
** IRE.Composer.SetBuffer | |||
*** Sent by the client upon successfully editing a text which was sent to the client in an IRE.Composer.Edit message earlier | |||
*** Sending this message only changes the edit buffer, but does not end the editing session | |||
*** On IRE games, the client may send the command ***save to save a text, or command ***quit to abort editing (IRE.Composer.SetBuffer is not sent in this case) - this behaviour is IRE-specific and is one of the reasons why the Composer module is in the IRE namespace | |||
*** '''Example''': IRE.Composer.SetBuffer "This is a bunch of text." | |||
===== IRE.Display ===== | |||
* Send by server: | |||
** IRE.Display.FixedFont "start" | "stop" | |||
*** Sent by the server to indicate between the start and stop messages should be displayed in a fixed-width font. | |||
** IRE.Display.Ohmap "start" | "stop" | |||
*** Sent by the server to indicated that an overhead map is being sent to the client. | |||
===== IRE.Misc ===== | |||
* Sent by client: | |||
** IRE.Misc.Voted | |||
*** Informs the game a vote button was clicked. | |||
*** Example: IRE.Misc.Voted "" | |||
* Sent by server: | |||
** IRE.Misc.RemindVote | |||
*** Message sent to remind the player to vote. | |||
*** '''Example''': IRE.Misc.RemindVote "http://www.imperian.com/vote" | |||
** IRE.Misc.Achievement | |||
*** Used to send basic achievement data to the client. | |||
*** '''Example''': IRE.Misc.Achievement [{"name": "HighestLevelAchieved", "value": "89" }] | |||
** IRE.Misc.URL | |||
*** Sends a url to the client to open in a window when clicked. | |||
*** '''Example''': IRE.Misc.URL[{"url": "http://www.imperian.com/tos", "window": "ire_game_tos" }] | |||
* | ** IRE.MISC.Tip | ||
* | *** Sends a line of text to the client. | ||
*** '''Example''': IRE.Misc.Tip "This is a tip!" | |||
* | |||
* | |||
* | |||
* | |||
* | |||
* IRE.Misc | |||
= | ===== IRE.Rift ===== | ||
* Sent by server: | |||
** IRE.Rift.List | |||
*** contents of a Rift storage | |||
*** sent upon receiving the IRE.Rift.Request message | |||
*** message body is an array, with each element being an object containing three keys - "name" is item name, "amount" is a number holding the item's amount, and "desc" is user-visible description | |||
** IRE.Rift.Change | |||
*** sent whenever the item amount in a Rift changes | |||
*** message body is an object with the same structure as one element of an array sent with the IRE.Rift.List message | |||
* Sent by client: | |||
** IRE.Rift.Request | |||
*** asks the server to send the Rift contents using the IRE.Rift.List message | |||
* | |||
* | |||
* | |||
* | |||
== | ===== IRE.Sound ===== | ||
=== | These messages are used internally within the Nexus client to play sounds. | ||
* Sent by server: | |||
** IRE.Sound.Play | |||
* | *** Sent to inform a client that a sound should be played. Keys: name (required), fadein_csec, fadeout_csec, loop (bool) | ||
** IRE.Sound.Stop | |||
*** Sent to inform a client that a specific sound's playback should be halted. Keys: name (required), fadeout_csec | |||
** IRE.Sound.Stopall | |||
*** Sent to inform a client that all sounds' playback should be halted. Keys: fadeout_csec | |||
* | ** IRE.Sound.Preload | ||
*** Sent to inform a client that it should download a sound resource for future playing. Keys: name (required) | |||
* | |||
* | |||
* | |||
* | |||
* | |||
* | |||
* | |||
* | |||
* | |||
* | |||
== | ===== IRE.Target ===== | ||
* Sent by client: | |||
=== | ** IRE.Target.Set | ||
* Sent by client | *** Sends the currently set target to the server to be used by the internal alias system. | ||
* | *** '''Example''': IRE.Target.Set "1101" | ||
* | * Sent by server | ||
* | |||
* | |||
* | |||
* | |||
* | |||
** IRE.Target.Set | |||
*** Sends the target the client is trying to set. This is called from cycling targets with tab targeting. | |||
*** '''Example''': IRE.Target.Set "1101" | |||
* | ** IRE.Target.Info | ||
*** Sends an array with the current target information. | |||
*** '''Example''': IRE.Target.Info { "id": "1101", "short_desc": "a brawny goblin smith", "hpperc": "100%" } | |||
** IRE.Target.Request | |||
* | |||
* | |||
* | |||
* | |||
* | |||
* | |||
* | |||
** | |||
== | ===== IRE.Tasks ===== | ||
=== | |||
= | |||
* Sent by client: | |||
** IRE.Tasks.Request | |||
* | |||
* | |||
* | |||
* Sent by server: | |||
** IRE.Tasks.List | |||
*** This is used to send a list of quest, tasks, and achievements, depending on what the game supports. | |||
* | *** Sends an array of items with the following keys: | ||
* | **** id: A numeric identifier | ||
* | **** name: The name of the quest, task, or achievement. | ||
* | **** type: Is this a quest, task, or achievement. | ||
* | **** cmd: The command to get more information for the quest. Good for MXP links. | ||
* | **** desc: The description of the event. | ||
* | **** status: 0 or 1 based on if it is completed or not. | ||
* | **** group: What group should this be assigned to. This is mainly for client display purposes. | ||
* | *** '''Example''': IRE.Tasks.List [ { "id": "184", "name": "For the sake of the village", "desc": "The herbs in Maeven's garden are painstakingly cared for so that her fellow villagers can stay healthy. She won't object to borrowing a bit of the magick power the bakuls have, if it can help with her work.\n\nThe bakul herbalist might have something Maeven wants.", "type": "quests", "cmd": "quest For the sake of the village", "status": "0", "group": "Current Quests" }, { "id": "313", "name": "Apostate", "desc": "Destroy a Shrine.", "type": "achievements", "cmd": "achievement apostate", "status": "0", "group": "Sects" } ] | ||
* | ** IRE.Tasks.Update | ||
* Example: | ** IRE.Tasks.Completed | ||
* | |||
* | |||
* | |||
* | |||
=== | ===== IRE.Time ===== | ||
* Sent by client: | |||
** IRE.Time.Request | |||
* Sent by server: | |||
** IRE.Time.List | |||
*** A list of the current time condition in the game world. | |||
*** Used in the client to display the the day/night indicator. | |||
*** '''Example''': IRE.Time.List { "day": "1", "mon": "1", "month": "Letum", "year": "98", "hour": "41", "daynight": "80" } | |||
** IRE.Time.Update | |||
*** Used to update time conditions. | |||
*** '''Example''': IRE.Time.Update { "daynight": "112" } | |||
=== IRE. | ===== IRE.CombatMessage ===== | ||
* Sent by client: | |||
** N/A | |||
* Sent by server: | |||
** IRE.CombatMessage | |||
*** Information about an attack that you have seen. Currently only used by Starmourn. | |||
*** '''Example''': <nowiki>IRE.CombatMessage {["skirmishing kick"] = {target = "Tecton",message = [[You cock back your leg and unleash a swift kick at Tecton.]],caster = "Iorwerth"}}</nowiki> | |||
Latest revision as of 17:46, 8 December 2019
General MUD Telnet Protocol (GMCP) is a protocol used to send data from the game server to the player client. This data transfer happens behind the scenes and is not seen by the players. This allows the game server to send messages to the client to update basic character, room, and game information. Character health is an example of information that is continually passed to the client from the game.
These messages can also be accessed by the player for use in reflexes. We are working simplifying the process of capturing GMCP data for use in the client in a future version of the client.
There is a configuration option in the Advanced Settings tab that will allow you to see GMCP messages as they happen.
Module and message names are not case sensitive. JSON key names are case sensitive.
Supported modules
This documentation covers the following GMCP messages for the Iron Realms Games.
- Core: core functionality
- Char: information about a character
- Char.Afflictions: information the characters afflictions
- Char.Defences- information the characters defences
- Char.Items: information about items in inventory and room, with live updates
- Char.Skills: information about skills known by the player
- Comm.Channel: identification of communication channels and player lists
- Room: various information about the current room
- Redirect: redirect outpot to another window
- IRE.Composer: IRE-specific, used to edit bigger texts client-side
- IRE.Display: IRE-specific display information
- IRE.FileStore: used internally by the Nexus client
- IRE.Misc: used internally by the fMUD and Nexus clients
- IRE.Rift: IRE-specific, transmits information about the Rift contents
- IRE.Sound: Yes. Sound can be sent.
- IRE.Target: information about the current player target.
- IRE.Tasks: information about tasks, quests, and achievements.
- IRE.Time: information about the current time and date conditions in the game.
- IRE.CombatMessage: currently only used by Starmourn - information about attacks seen
- IRE.Wiz: used internally by the Nexus client
Supported messages by modules
Core
- Sent by client:
- Core.Hello
- Needs to be the first message that the client sends, used to identify the client
- Message body is an object with keys "client" and "version", containing the client's name and version
- Example: Core.Hello {"Client":"Mudlet","Version":"3.0.0"}
- Core.Supports.Set
- Notifies the server about packages supported by the client
- If another Core.Supports.*** package has been received earlier, the list is deleted and replaced with the new one
- Message body is an array of strings, each consisting of the module name and version, separated by space
- Module version is a positive non-zero integer
- Most client implementations will only need to send Set once and won't need Add/Remove; exceptions are module implementations provided by plug-ins
- Example: Core.Supports.Set [ "Char 1", "Char.Skills 1", "Char.Items 1" ]
- Core.Supports.Add
- Similar to Set, but appends the supported module list to the one sent earlier
- If no list was sent yet, the behaviour is identical to Set
- If the list includes module names that were already included earlier, the new version number takes precedence over the previously sent one, even if the newly sent number is lower
- Message body format is identical to that of Set
- Example: Core.Supports.Add [ "Char 1", "Char.Skills 1", "Char.Items 1" ]
- Core.Supports.Remove
- Removes specified modules from the list of supported modules
- Message body format is similar to Set, except that module version numbers are optional and ignored if given
- Example: Core.Supports.Remove [ "Char", "Char.Skills", "Char.Items" ]
- Core.KeepAlive
- Causes the server to reset the timeout for the logged character, no message body
- Core.Ping
- causes the server to send a Core.Ping back
- message body is a number which indicates average ping time from previous requests, if available
- Example: Core.Ping 120
- Core.Hello
- Sent by server:
- Core.Ping
- Sent in reply to Core.Ping. No body.
- Core.Goodbye
- Sent by server immediately before terminating a connection
- Message body is a string to be shown to the user - it can explain the reason for the disconnect
- Example: Core.Goodbye "Goodbye, adventurer"
- Core.Ping
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" and "password"
- Example: Char.Login { "name": "somename", "password": "somepassword" }
- Char.Login
- Sent by server:
- Char.Name
- Sends the character name and full name which includes the title. This is only sent on login.
- Example: Char.Name { "name": "Olad", "fullname": "Neophyte Olad" }
- Char.Vitals
- Basic character attributes such as health, mana, etc.
- Message body is an object containing several variables
- Additionally, each variable is included in a string, in the format name:cur/max
- Interpretation of the variables is game specific
- It is generally safe to assume that the known values are numbers (even though encoded as strings), but other datatypes can be present
- The "charstats" attribute, if present, holds a list of strings that the client may choose to display to the player in a client-specific way, these hold information about the character state that the game wishes to show to the player
- Example: Char.Vitals { "hp": "4500", "maxhp": "4800", "mp": "1200", "maxmp": "2500", "ep": "15000", "maxep": "16000", "wp": "14000", "maxwp": "15000", "nl": "10", "string": "H:4500/4800 M:1200/2500 E:15000/16000 W:14000/15000 NL:10/100" }
- Additional Achaea Keys
- All classes: Bleed, Rage
- Apostates: Essence
- Bard: Stance, Voice Balance
- Blademaster: Stance
- Druid: Current Morph, Sunlight Energy
- Infernal: Essence, Weaponmastery Spec
- Magi: Channels
- Monk: Kai Energy, Tekura stance
- Occultist: Karma, Entity Balance
- Paladin: Devotion, Weaponmastery Spec
- Priest: Devotion
- Runewarden: Weaponmastery Spec
- Sentinel: Current Morph
- Serpent: Secreted Venom
- Shaman: Number of spirits bound
- Sylvan: Elemental Channels, Sunlight Energy
- Additional Aetolia Keys
- Additional Imperian Keys
- General: bleed, flying, prone, stunned, dead, blind, phased, res_weakness, vote
- Balances: leftarm, rightarm, health, herb, salve, toadstool, pipe, tree, focus, purge
- Resources: kai, devotion, essence, fanatism, rage, fire, ice, faith, health_reserve, mana_reserve
- Items: leftwield, leftwield_name, rightwield, rightwield_name, mount
- Additional Starmourn Keys
- General: "xp" (raw xp), "nl" (percent xp to next level), "ww" (wetwiring not on cooldown), "combat" (are you in combat?), "vote" (have you voted on TMS recently?)
- Subsystems: "em" (electromagnetic damage), "external", "muscular", "internal", "sensory", "mind", "wetwiring"
- Class-specific: "class" (current class), "pl" / "maxpl" / "formatpl" (plasma), "bl" / "maxbl" / "formatbl" (bullets), "nn" / "maxnn" / "formatnn" (nanites), "sa" / "maxsa" / "formatsa" (sanity), "rg" / "maxrg" / "formatrg" (rage), "pt" / "maxpt" / "formatpt" (parts), "st" (stance)
- Char.StatusVars
- Sent by server after a successful login or after the module is enabled
- Contains a list of character variables (level, race, etc)
- Message body is an object
- Each object element is a name-caption pair, name is the internal name and caption the user-visible one
- Example: Char.StatusVars { "level": "Level", "race": "Race", "guild": "Guild" }
- Char.Status
- Values of character values defined by StatusVars.
- A full list is sent by server right after StatusVars, and changes are sent in subsequent messages as they occur.
- With the exception of the initial Status message, messages only contain changed values; if a variable is not included, it has not changed since the previous Status message.
- Message body is an object.
- Each object element is a name-value pair, name is the internal name defined by the StatusVars message and value is the variable value.
- Example: Char.Status { "level": "58", "city": "Antioch" }
- Achaea Keys
- name
- fullname
- age
- race
- specialisation
- level
- xp
- xprank
- class
- city
- house
- order
- boundcredits
- unboundcredits
- lessons
- explorerrank
- mayancrowns
- boundmayancrowns
- gold
- bank
- unread_msgs
- unread_news
- target
- gender
- Char.Name
Char.Afflictions
- Sent by server:
- Char.Afflictions.List
- Sends an array of current character afflictions.
- name: The name of the affliction
- cure: The basic cure of the affliction. This is used for links to cure even though other options may exist to cure the affliction.
- desc: A description of what this affliction does.
- Example: Char.Afflictions.List [ { "name": "weariness", "cure": "eat kelp", "desc": "Decreases cutting and blunt damage that you inflict by 30%." }, { "name": "asthma", "cure": "eat kelp", "desc": "Makes you unable to smoke pipes." }, { "name": "slow herbs", "cure": "apply epidermal", "desc": "Increases the time needed to regain herb balance by 1.25 seconds." }, { "name": "nausea", "cure": "eat nightshade", "desc": "Causes periodic vomiting, which does damage and increases hunger." } ]
- Sends an array of current character afflictions.
- Char.Afflictions.Add
- Add an affliction to the character.
- Example: Char.Afflictions.Add { "name": "asthma", "cure": "eat kelp", "desc": "Makes you unable to smoke pipes." }
- Char.Afflictions.Remove
- Removes an affliction from the character.
- Example: Char.Afflictions.Remove [ "asthma" ]
- Char.Afflictions.List
Char.Defences
- Sent by server:
- Char.Defences.List
- Send an array of all the defences a character currently has.
- name: The name of the defence.
- desc: The description of the defence.
- Example: Char.Defences.List [ { "name": "deaf", "desc": "deaf" }, { "name": "blind", "desc": "blind" }, { "name": "nightsight", "desc": "nightsight" } ]
- Send an array of all the defences a character currently has.
- Char.Defences.Add
- Sent when a defence is added to a character.
- Example: Char.Defences.Add { "name": "deaf", "desc": "deaf" }
- Char.Defences.Remove
- Sent when a defence is removed from a character.
- Example: Char.Defences.Remove [ "blind" ]
- Char.Defences.List
Char.Items
- Sent by client:
- Char.Items.Contents
- Request for the server to send the list of items located inside another item.
- Message body is a number identifying the item.
- Causes the server to send back an appropriate Char.Items.List message.
- Example: Char.Item.Contents 12345
- Char.Items.Inv
- Request for the server to send the list of items in player's inventory.
- Message body is empty.
- Causes the server to send back an appropriate Char.Items.List message.
- Example: Char.Items.Inv ""
- Char.Items.Room
- Sent by the client to refresh the items in a room.
- Message body is empty
- Causes the server to send back an appropriate Char.Items.List message.
- Example: Char.Items.Room ""
- Char.Items.Contents
- Sent by server:
- Char.Items.List
- List of items at a specified location (room, inv, held container)
- Message body is an object with keys "location" and "items"
- Location value is a string, "inv", "room", or "repNUMBER" - the last one is container identification
- Items value is an array, whose each item is an object with keys "id", "name" and optionally "attrib"
- ID is a number identifying the item, name is a string containing a short player-visible item description
- Icon is the image the item is associated with in the client.
- Attrib is a string consisting of characters describing item properties:
- "w" = worn,
- "W" = wearable but not worn
- "l" = wielded
- "g" = groupable
- "c" = container
- "t" = takeable
- "m" = monster
- "d" = dead monster
- "x" = should not be targeted (guards, ...)
- Example: Char.Items.List { "location": "inv", "items": [ { "id": "12807", "name": "a personal journal", "icon": "scroll", "attrib": "l" }, { "id": "303060", "name": "a gold nugget", "icon": "commodity" } ] }
- Char.Items.Add
- Informs the client about an item being added to the specified location
- Message body is an object with keys "location" and "item"
- Location is same as with List, item is an object with the same structure as one item from the items array of List
- Example: Char.Items.Add { "location": "room", "item": { "id": "239602", "name": "an elegant white letter", "icon": "container", "attrib": "c" } }
- Example: Char.Items.Add { "location": "room", "item": { "id": "303060", "name": "a gold nugget", "icon": "commodity" } }
- Example: Char.Items.Add { "location": "inv", "item": { "id": "303060", "name": "a gold nugget", "icon": "commodity", "attrib": "t" } }
- Char.Items.Remove
- Informs the client about an item being removed from the location
- Message body is an object with keys "location" and "item"
- Location is same as with List, item is an integer value identifying the item
- Example: Char.Items.Remove { "location": "room", "item": { "id": "239602", "name": "an elegant white letter", "icon": "container", "attrib": "t" } }
- Example: Char.Items.Remove { "location": "inv", "item": { "id": "303060", "name": "a gold nugget", "icon": "commodity" } }
- Char.Items.Update
- Informs the client about an item's attributes being changed - only sent for inventory items
- Message body syntax the same as with Add
- Example: Char.Items.Update { "location": "inv", "item": { "id": "60572", "name": "an ornate steel rapier" } }
- Char.Items.List
Char.Skills
- Sent by client:
- Char.Skills.Get
- Sent by client to request skill information
- Message body is an object with keys "group" and "name"
- If both group and name is provided, the server will send Char.Skills.Info for the specified skill
- If group is provided but name is not, the server will send Char.Skills.List for that group
- Otherwise the server will send Char.Skills.Groups
- Example: Char.Skills.Get {"group":"Perception"}
- Example: Char.Skills.Get {"group":"perception","name":"Deathsight"}
- Char.Skills.Get
- Sent by server:
- Char.Skills.Groups
- Groups of skills available to the character
- Sent by server on request or at any time (usually if the list changes)
- For IRE games, groups are skills like Survival or Elemancy
- Message body is an array including the name and current rank of each skill the character has.
- Example: Char.Skills.Groups [ { "name": "Perception", "rank": "Transcendent (100%)" }, { "name": "Survival", "rank": "Inept (0%)" }, { "name": "Weaponry", "rank": "Inept (0%)" }, { "name": "Tattoos", "rank": "Inept (0%)" }, { "name": "Evasion", "rank": "Inept (0%)" }, { "name": "Engineering", "rank": "Inept (0%)" }, { "name": "Taming", "rank": "Inept (0%)" }, { "name": "Concoctions", "rank": "Inept (0%)" }, { "name": "Toxins", "rank": "Inept (0%)" }, { "name": "Smithing", "rank": "Inept (0%)" }, { "name": "Malignosis", "rank": "Adept (1%)" }, { "name": "Necromancy", "rank": "Inept (0%)" }, { "name": "Evileye", "rank": "Adept (40%)" } ]
- Char.Skills.Groups
- Char.Skills.List
- List of skills in a group available to the character
- Sent by server on request only
- For IRE games, this is the list visible on AB <skillname>
- Message body is an object with keys "group", "list", and "desc".
- The list value is an array of strings, each being the name of one skill
- Example: Char.Skills.List { "group": "perception", "list": [ "Looking", "Glancing", "Secrets", "Decaylist", "Squinting", "Flyers", "Observe", "Farsight", "Containerlist", "Vigilance", "Treewatch", "Deathsight", "Pipelist", "Elixlist", "Search", "Letterlist", "Booklist", "Skywatch", "PowerNodes", "Keylist", "Alertness", "Rites", "Traps", "Magicklist", "Nightsight", "Hypersight", "Thirdeye", "Tattoos", "Discernment", "Wormholes", "Rivensense", "Contemplation", "Scan", "Telesense", "Appraise", "Trueassess", "Artifactlist", "Warning", "Viewshrine", "Landsense" ], "descs": [ "Gain knowledge of your immediate surroundings.", "See summarized information about your surroundings.", "Discover hidden exits.", "How much more time do those items have?", "See extended distances in your line of sight.", "Take notice of those in the skies.", "Gain information about your extended surroundings.", "Attempt to locate another player from afar.", "What do you have in your containers?", "Increase your resistance to hypnosis.", "Watch the forest canopies for movement.", "Attune yourself to the Underworld.", "Scan your pipes with utmost speed.", "Quickly discover what elixirs and salves you are holding.", "Search your location for hidden beings.", "Quick glance of all your letters.", "Scan the titles of books you own.", "Watch the skies for movement.", "Detect the nodes of power in your area.", "See a list of your keys and which doors they open.", "Heightened awareness of your surroundings.", "View the holy rites operating in your location.", "The ability to search for traps in your location.", "Check the status of your magickal items.", "Use infravision to see in the dark.", "See the actions of cloaked players.", "Give yourself the power of the third eye.", "Discover what tattoos are on another player.", "Discover what defences are protecting an individual.", "The ability to sense wormholes in your location.", "Sense the bodies of the recently slain.", "Perceive the state of another's mental strength.", "Seekout the locations of your allies and enemies.", "Heighten your awareness to telepathic attempts.", "Quickly take note of someone's carried possessions.", "Gain more detailed information concerning your foe.", "See what artifact powers surround an individual.", "Watch for the prying eyes of the enemy.", "Gain a detailed understanding of a shrine.", "The ability to recognize mortals entering the realm." ] }
- Char.Skills.List
- Char.Skills.Info
- Information about a single skill, only sent upon request
- Message body is an object, keys are "group", "skill", and "info", values are strings
- Group and skill identify the request, info is a description (usually multi-line) of the skill's functionality and usage
- Example: Char.Skills.Info { "group": "perception", "skill": "deathsight", "info": "Syntax: DEATHSIGHT\n RELAX DEATHSIGHT\n\nUsing this ability, your mind is now capable of attuning itself to the realm of the dead. While doing so, you will be alerted whenever anyone dies." }
- Char.Skills.Info
Comm.Channel
- Sent by client:
- Comm.Channel.Players
- Request for the server to send Comm.Channel.Players
- No message body.
- Example: Comm.Channel.Players ""
- Comm.Channel.Enable
- Used to tell the game to turn on a character channel without typing in a command line command.
- Example: Comm.Channel.Enable "newbie"
- Example: Comm.Channel.Enable "clt Consortium"
- Comm.Channel.Players
- Sent by server:
- Comm.Channel.Players
- List of players and organizations (city, guild, ...) that they share with this player
- Message body is an array with each element describing one player
- Each element is an object with keys "name" and "channels", name is a string, channels is an array
- The channels array may be omitted if empty; if given, it is a list of organization names
- Example: Comm.Channel.Players [{"name": "Player1", "channels: ["Some city", "Some guild"]}, {"name": "Player2"}]
- Example: Comm.Channel.Players [ { "name": "Ahkan", "channels": [ "The City of Stavenn" ] }, { "name": "Sharatar", "channels": [ "The City of Stavenn", "The Revenants" ] } ]
- Comm.Channel.Players
- Comm.Channel.List
- List of communication channels available to the player, sent on login/negotiation and if changed
- Message body is an array of objects, each object representing one channel
- Each object has keys "name", "caption" and "command" - name is internal name, caption is player-visible name, command is command used to communicate over this channel
- Example: Comm.Channel.List [{"name":"ct", "caption":"Some city", "command":"ct"}, {"name":"gt", "caption":"Some guild", "command":"gt"}]
- Example: Comm.Channel.List [ { "name": "newbie", "caption": "Newbie", "command": "newbie" }, { "name": "market", "caption": "Market", "command": "market" }, { "name": "ct", "caption": "Stavenn", "command": "ct" }, { "name": "gt", "caption": "Revenants", "command": "gt" } ]
- Comm.Channel.List
- Comm.Channel.Start
- Informs the client that text that follows is something said over a communication channel
- Message body is a text containing the channel name
- For tells from/to another player, the channel name is "tell Name"
- Example: Comm.Channel.Start "ct"
- Example :Comm.Channel.Start "tell Jeremy"
- Comm.Channel.End
- Ends a channel text started by Comm.Channel.Start
- Message body is a text containing the channel name
- Example: Comm.Channel.End "tell Jeremy"
- Comm.Channel.Start
- Comm.Channel.Text
- The text of the communication that you heard, who spoke, and which channel it was on
- Example: Comm.Channel.Text { "channel": "says", "talker": "Tecton", "text": "(Tecton the Terraformer says, \"Are we releasing dragon lairs or the phase artefact first?\"" }
- Example: Comm.Channel.Text { "channel": "tell Jeremy", "talker": "Olad", "text": "\u001b[0;1;33mYou tell Jeremy, \"Hi.\"\u001b[0;37m" }
- Example: Comm.Channel.Text { "channel": "newbie", "talker": "Olad", "text": "\u001b[0;1;32m(Newbie): You say, \"Hello.\"\u001b[0;37m" }
- Comm.Channel.Text
Room
- Sent by server:
- Room.Info
- Contains information about the room that the player is in. Some of these may be IRE-specific
- Message body is an object with the following keys
- "num" - number identifying the room
- "name" - string containing the brief description
- "area" - string containing area name
- "environment" - string containing environment type ("Hills", "Ocean", ...)
- "coords" - room coordinates (string of numbers separated by commas - area,X,Y,X,building, building is optional
- "map" - map information - URL pointing to a map image, followed by X and Y room (not pixel) coordinates on the map
- "details" - array holding further information about a room - shop,bank,...
- "exits" - object containing exits, each key is a direction and each value is the number identifying the target room
- Example: Room.Info {"num": 12345, "name": "On a hill", "area": "Barren hills", "environment": "Hills", "coords": "45,5,4,3", "map": "www.imperian.com/itex/maps/clientmap.php?map=45&level=3 5 4", "exits": { "n": 12344, "se": 12336 }, "details": [ "shop", "bank" ] }
- Room.WrongDir
- Sent if the player attempts to move in a non-existant direction using the standard movement commands
- Upon receiving this message, the client can safely assume that the specified direction does not lead anywhere at this time
- Message body is a string with the name if the non-existant exit
- Example: Room.WrongDir "ne"
- Room.Players
- Object containing player details, each key is the short name of the player and each value is the full name including titles for the player
- Example: Room.Players [{ "name": "Tecton", "fullname": "Tecton the Terraformer" }, {"name": "Cardan", "fullname": "Cardan, the Curious" }]
- Room.AddPlayer
- Message body has the same object structure as Room.Players except that it only contains the one player being added to the room.
- Example: Room.AddPlayer { "name": "Cardan", "fullname": "(Cardan, the Curious)" }
- Room.RemovePlayer
- Message body has the same object structure as Room.Players except that it only contains the one player being removed from the room.
- Example: Room.RemovePlayer "Cardan"
- Room.Info
Redirect
- Sent by server:
- Redirect.Window
- Specifies a window to redirect further input to
- Message body is a string specifying the window to redirect to
- The main window is referred to as "main", and is the default if the message body is omitted or empty
- Example: Redirect.Window "map"
- Redirect.Window
IRE
IRE.Composer
- Sent by server:
- IRE.Composer.Edit
- Sent by the server when the player enters an in-game editor. Body is an object, with keys "title" and "text". Text contains the current buffer, title is a title that can be shown to the user.
- Example: IRE.Composer.Edit { "title": "Composer", "text": "" }
- IRE.Composer.Edit
- Sent by client:
- IRE.Composer.SetBuffer
- Sent by the client upon successfully editing a text which was sent to the client in an IRE.Composer.Edit message earlier
- Sending this message only changes the edit buffer, but does not end the editing session
- On IRE games, the client may send the command ***save to save a text, or command ***quit to abort editing (IRE.Composer.SetBuffer is not sent in this case) - this behaviour is IRE-specific and is one of the reasons why the Composer module is in the IRE namespace
- Example: IRE.Composer.SetBuffer "This is a bunch of text."
- IRE.Composer.SetBuffer
IRE.Display
- Send by server:
- IRE.Display.FixedFont "start" | "stop"
- Sent by the server to indicate between the start and stop messages should be displayed in a fixed-width font.
- IRE.Display.Ohmap "start" | "stop"
- Sent by the server to indicated that an overhead map is being sent to the client.
- IRE.Display.FixedFont "start" | "stop"
IRE.Misc
- Sent by client:
- IRE.Misc.Voted
- Informs the game a vote button was clicked.
- Example: IRE.Misc.Voted ""
- IRE.Misc.Voted
- Sent by server:
- IRE.Misc.RemindVote
- Message sent to remind the player to vote.
- Example: IRE.Misc.RemindVote "http://www.imperian.com/vote"
- IRE.Misc.RemindVote
- IRE.Misc.Achievement
- Used to send basic achievement data to the client.
- Example: IRE.Misc.Achievement [{"name": "HighestLevelAchieved", "value": "89" }]
- IRE.Misc.Achievement
- IRE.Misc.URL
- Sends a url to the client to open in a window when clicked.
- Example: IRE.Misc.URL[{"url": "http://www.imperian.com/tos", "window": "ire_game_tos" }]
- IRE.Misc.URL
- IRE.MISC.Tip
- Sends a line of text to the client.
- Example: IRE.Misc.Tip "This is a tip!"
- IRE.MISC.Tip
IRE.Rift
- Sent by server:
- IRE.Rift.List
- contents of a Rift storage
- sent upon receiving the IRE.Rift.Request message
- message body is an array, with each element being an object containing three keys - "name" is item name, "amount" is a number holding the item's amount, and "desc" is user-visible description
- IRE.Rift.Change
- sent whenever the item amount in a Rift changes
- message body is an object with the same structure as one element of an array sent with the IRE.Rift.List message
- IRE.Rift.List
- Sent by client:
- IRE.Rift.Request
- asks the server to send the Rift contents using the IRE.Rift.List message
- IRE.Rift.Request
IRE.Sound
These messages are used internally within the Nexus client to play sounds.
- Sent by server:
- IRE.Sound.Play
- Sent to inform a client that a sound should be played. Keys: name (required), fadein_csec, fadeout_csec, loop (bool)
- IRE.Sound.Stop
- Sent to inform a client that a specific sound's playback should be halted. Keys: name (required), fadeout_csec
- IRE.Sound.Stopall
- Sent to inform a client that all sounds' playback should be halted. Keys: fadeout_csec
- IRE.Sound.Preload
- Sent to inform a client that it should download a sound resource for future playing. Keys: name (required)
- IRE.Sound.Play
IRE.Target
- Sent by client:
- IRE.Target.Set
- Sends the currently set target to the server to be used by the internal alias system.
- Example: IRE.Target.Set "1101"
- IRE.Target.Set
- Sent by server
- IRE.Target.Set
- Sends the target the client is trying to set. This is called from cycling targets with tab targeting.
- Example: IRE.Target.Set "1101"
- IRE.Target.Info
- Sends an array with the current target information.
- Example: IRE.Target.Info { "id": "1101", "short_desc": "a brawny goblin smith", "hpperc": "100%" }
- IRE.Target.Request
- IRE.Target.Set
IRE.Tasks
- Sent by client:
- IRE.Tasks.Request
- Sent by server:
- IRE.Tasks.List
- This is used to send a list of quest, tasks, and achievements, depending on what the game supports.
- Sends an array of items with the following keys:
- id: A numeric identifier
- name: The name of the quest, task, or achievement.
- type: Is this a quest, task, or achievement.
- cmd: The command to get more information for the quest. Good for MXP links.
- desc: The description of the event.
- status: 0 or 1 based on if it is completed or not.
- group: What group should this be assigned to. This is mainly for client display purposes.
- Example: IRE.Tasks.List [ { "id": "184", "name": "For the sake of the village", "desc": "The herbs in Maeven's garden are painstakingly cared for so that her fellow villagers can stay healthy. She won't object to borrowing a bit of the magick power the bakuls have, if it can help with her work.\n\nThe bakul herbalist might have something Maeven wants.", "type": "quests", "cmd": "quest For the sake of the village", "status": "0", "group": "Current Quests" }, { "id": "313", "name": "Apostate", "desc": "Destroy a Shrine.", "type": "achievements", "cmd": "achievement apostate", "status": "0", "group": "Sects" } ]
- IRE.Tasks.Update
- IRE.Tasks.Completed
- IRE.Tasks.List
IRE.Time
- Sent by client:
- IRE.Time.Request
- Sent by server:
- IRE.Time.List
- A list of the current time condition in the game world.
- Used in the client to display the the day/night indicator.
- Example: IRE.Time.List { "day": "1", "mon": "1", "month": "Letum", "year": "98", "hour": "41", "daynight": "80" }
- IRE.Time.Update
- Used to update time conditions.
- Example: IRE.Time.Update { "daynight": "112" }
- IRE.Time.List
IRE.CombatMessage
- Sent by client:
- N/A
- Sent by server:
- IRE.CombatMessage
- Information about an attack that you have seen. Currently only used by Starmourn.
- Example: IRE.CombatMessage {["skirmishing kick"] = {target = "Tecton",message = [[You cock back your leg and unleash a swift kick at Tecton.]],caster = "Iorwerth"}}
- IRE.CombatMessage