Difference between revisions of "GMCP"
From ThresholdRPG Wiki
(→Status: clarifying when Char.Status is sent) |
(Update to Char.StatusVars and Char.Status messages.) |
||
| Line 83: | Line 83: | ||
Char.StatusVars { | Char.StatusVars { | ||
age = "Age", | age = "Age", | ||
| + | bank = "Bank balance", | ||
capacity = "Capacity", | capacity = "Capacity", | ||
| + | dead = "Dead", | ||
expertise = "Expertise", | expertise = "Expertise", | ||
| − | + | foe_foe_name = "Foe's target", | |
| + | foe_health = "Foe health", | ||
| + | foe_max_health = "Foe max health", | ||
foe_name = "Current foe", | foe_name = "Current foe", | ||
fullname = "Full name", | fullname = "Full name", | ||
| + | gender = "Gender", | ||
guild = "Guild", | guild = "Guild", | ||
guild_level = "Guild level", | guild_level = "Guild level", | ||
| − | hb = "Heal | + | harmonic = "Harmonic", |
| + | hb = "Heal bank", | ||
heritage = "Heritage", | heritage = "Heritage", | ||
hlevel = "Heritage level", | hlevel = "Heritage level", | ||
| + | inactive = "Inactive", | ||
| + | inactive_type = "Inactive type", | ||
| + | invis = "Invisible", | ||
level = "Level", | level = "Level", | ||
| + | lodge = "Lodge", | ||
| + | lodge_level = "Lodge level", | ||
max_capacity = "Max capacity", | max_capacity = "Max capacity", | ||
| − | + | morality = "Morality", | |
name = "Name", | name = "Name", | ||
| + | primary_axis = "Primary axis", | ||
race = "Race", | race = "Race", | ||
| − | |||
| − | |||
session_login = "Logged in", | session_login = "Logged in", | ||
tnl = "To next level", | tnl = "To next level", | ||
| Line 115: | Line 125: | ||
<pre> | <pre> | ||
Char.Status { | Char.Status { | ||
| − | age = " | + | age = "510", |
| − | capacity = " | + | bank = "314660", |
| − | expertise = " | + | capacity = "4792", |
| + | dead = "0", | ||
| + | expertise = "152287", | ||
| + | foe_foe_name = "none", | ||
foe_health = "0", | foe_health = "0", | ||
| + | foe_max_health = "100", | ||
foe_name = "none", | foe_name = "none", | ||
fullname = "Karahd the Magocrat", | fullname = "Karahd the Magocrat", | ||
gender = "female", | gender = "female", | ||
guild = "mage", | guild = "mage", | ||
| − | guild_level = " | + | guild_level = "12", |
| + | harmonic = "chaos", | ||
hb = "0", | hb = "0", | ||
heritage = "scholar", | heritage = "scholar", | ||
| Line 129: | Line 144: | ||
inactive = "0", | inactive = "0", | ||
inactive_type = "none", | inactive_type = "none", | ||
| − | level = " | + | invis = "0", |
| + | level = "12", | ||
| + | lodge = "otter", | ||
| + | lodge_level = "11", | ||
max_capacity = "5000", | max_capacity = "5000", | ||
| − | + | morality = "good", | |
name = "Karahd", | name = "Karahd", | ||
| + | primary_axis = "harmonic", | ||
race = "elf", | race = "elf", | ||
| − | + | session_login = "1651011752", | |
| − | session_login = " | + | tnl = "100", |
| − | tnl = " | ||
tummy = "0", | tummy = "0", | ||
| − | xp = " | + | xp = "10056981" |
} | } | ||
</pre> | </pre> | ||
| Line 146: | Line 164: | ||
* Contains basic information about character's vitality (hp, sp, ep). | * Contains basic information about character's vitality (hp, sp, ep). | ||
* Message body is an object containing key-value pairs corresponding to character attributes. | * Message body is an object containing key-value pairs corresponding to character attributes. | ||
| − | * Each variable is also included in a string in the format name:cur/max. | + | * Each variable is also included in a string in the format name: cur/max. |
Example: | Example: | ||
<pre> | <pre> | ||
Revision as of 17:48, 26 April 2022
Client
Core
Hello
- Sends information about the MUD client and its version.
- May only be sent before successful login.
Example:
Core.Hello { "client": "MyMUDClient", "version": "1.2.34" }
Ping
- Ensures server is listening and GMCP is enabled.
- Message body is a number which indicates average ping time from previous requests, if available.
- Causes server to reply with a Core.Ping message in response.
Example:
Core.Ping 120
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" ]
Add
- Similar to Core.Supports.Set, but appends the supported module list to the one sent earlier.
- If no list was sent yet, the behaviour is identical to Core.Supports.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 Core.Supports.Set.
Example:
Core.Supports.Add [ "Char.Vitals 1", "Char.Status 1" ]
Remove
- Removes specified modules from the list of supported modules.
- Message body format is similar to Core.Supports.Set, except that module version numbers are optional and ignored if given.
Example:
Core.Supports.Remove [ "Char", "Char.Skills", "Char.Items" ]
Server
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 "Farewell, cruel world!"
Ping
- Sent in reply to Core.Ping from the client.
- No message body.
Example:
Core.Ping
Char
StatusVars
- Sent by server after a successful login.
- Contains a list of names of character status variables (level, race, etc) and their display captions.
- Message body is an object with keys containing the names of the status variables and values containing the captions to be displayed to the user.
Example:
Char.StatusVars {
age = "Age",
bank = "Bank balance",
capacity = "Capacity",
dead = "Dead",
expertise = "Expertise",
foe_foe_name = "Foe's target",
foe_health = "Foe health",
foe_max_health = "Foe max health",
foe_name = "Current foe",
fullname = "Full name",
gender = "Gender",
guild = "Guild",
guild_level = "Guild level",
harmonic = "Harmonic",
hb = "Heal bank",
heritage = "Heritage",
hlevel = "Heritage level",
inactive = "Inactive",
inactive_type = "Inactive type",
invis = "Invisible",
level = "Level",
lodge = "Lodge",
lodge_level = "Lodge level",
max_capacity = "Max capacity",
morality = "Morality",
name = "Name",
primary_axis = "Primary axis",
race = "Race",
session_login = "Logged in",
tnl = "To next level",
tummy = "Fullness",
xp = "Experience"
}
Status
- Sent by server immediately after the initial Char.StatusVars message and once every heartbeat thereafter.
- Contains the values of character status variables (level, race, etc).
- The full list of variables is only sent with the initial message, subsequent messages only contain changed variables.
- Message body is an object with keys containing the names of the variables, as defined by the Char.StatusVars message, and values containing the values of the variables.
Example:
Char.Status {
age = "510",
bank = "314660",
capacity = "4792",
dead = "0",
expertise = "152287",
foe_foe_name = "none",
foe_health = "0",
foe_max_health = "100",
foe_name = "none",
fullname = "Karahd the Magocrat",
gender = "female",
guild = "mage",
guild_level = "12",
harmonic = "chaos",
hb = "0",
heritage = "scholar",
hlevel = "0",
inactive = "0",
inactive_type = "none",
invis = "0",
level = "12",
lodge = "otter",
lodge_level = "11",
max_capacity = "5000",
morality = "good",
name = "Karahd",
primary_axis = "harmonic",
race = "elf",
session_login = "1651011752",
tnl = "100",
tummy = "0",
xp = "10056981"
}
Vitals
- Sent by server whenever a prompt is displayed to the player and whenever the character's vitals change.
- Contains basic information about character's vitality (hp, sp, ep).
- Message body is an object containing key-value pairs corresponding to character attributes.
- Each variable is also included in a string in the format name: cur/max.
Example:
Char.Vitals {
"hp" : 100,
"sp" : 100,
"ep" : 100,
"maxhp" : 200,
"maxsp" : 200,
"maxep" : 200,
"string" : "HP: 100/200 SP: 100/200 EP: 100/200"
}
Afflictions
Supported afflictions:
- blind
- deaf
- immobile
- mute
- stun
Add
- Sent by the server when a new affliction is added to the character.
- Message is a string that is the affliction which has been added.
Example:
Char.Afflictions.Add "blind"
Remove
- Sent by the server when a new affliction is removed from the character.
- Message is a string that is the affliction which has been removed.
Example:
Char.Afflictions.Remove "blind"