ModernUO/Distribution/Data/packets/outgoing/account.json
Kamron Batman f0b65fecb7
feat: Add interactive packet documentation system
- Create JSON-based packet documentation for 145 packets (66 incoming, 79 outgoing)
- Add HTML template with search, filtering, and navigation
- Support enum/bitfield field display with values and descriptions
- Support packet variants for version-specific structures
- Include 0xBF extended command subpackets documentation
- Add PowerShell build script to generate final HTML

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:47:31 -08:00

320 lines
14 KiB
JSON

{
"category": "Account",
"packets": [
{
"id": "0x82",
"name": "Account Login Rejected",
"description": "Sent when account login fails. Contains the reason for rejection.",
"direction": "outgoing",
"isDynamic": false,
"size": 2,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x82", "description": "Packet identifier" },
{ "name": "reason", "type": "byte", "size": 1, "description": "Rejection reason: 0=Invalid, 1=InUse, 2=Blocked, 3=BadPass, 254=Idle, 255=BadComm" }
],
"related": [
{ "id": "0x80", "relationship": "request", "note": "The login attempt that failed" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 402
}
},
{
"id": "0xA8",
"name": "Account Login Ack (Server List)",
"description": "Sent after successful account login. Contains the list of available game servers.",
"direction": "outgoing",
"isDynamic": true,
"size": "6 + (40 * serverCount)",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA8", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "systemInfoFlag", "type": "byte", "size": 1, "value": "0x5D", "description": "System info flag" },
{ "name": "serverCount", "type": "ushort", "size": 2, "description": "Number of servers in list" },
{
"name": "servers",
"type": "array",
"description": "Server list entries",
"loop": {
"countField": "serverCount",
"fields": [
{ "name": "index", "type": "ushort", "size": 2, "description": "Server index" },
{ "name": "name", "type": "ascii", "size": 32, "description": "Server name" },
{ "name": "fullPercent", "type": "byte", "size": 1, "description": "Server load percentage" },
{ "name": "timezone", "type": "sbyte", "size": 1, "description": "Server timezone offset" },
{ "name": "ipAddress", "type": "uint", "size": 4, "description": "Server IP address (IPv4)" }
]
}
}
],
"related": [
{ "id": "0x80", "relationship": "request", "note": "The successful login request" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 411
}
},
{
"id": "0x8C",
"name": "Play Server Ack",
"description": "Sent after selecting a server. Contains connection details for the game server.",
"direction": "outgoing",
"isDynamic": false,
"size": 11,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x8C", "description": "Packet identifier" },
{ "name": "ipAddress", "type": "uint", "size": 4, "description": "Game server IP address (little-endian)" },
{ "name": "port", "type": "short", "size": 2, "description": "Game server port" },
{ "name": "authId", "type": "int", "size": 4, "description": "Authentication ID for game login" }
],
"related": [
{ "id": "0xA0", "relationship": "request", "note": "The server selection request" },
{ "id": "0x91", "relationship": "response", "note": "Client sends game login with this authId" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 447
}
},
{
"id": "0xA9",
"name": "Character List",
"description": "Sent after game login. Contains the list of characters on the account and starting city information.",
"direction": "outgoing",
"isDynamic": true,
"size": "variable (client version dependent)",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA9", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "charCount", "type": "byte", "size": 1, "description": "Number of character slots" },
{
"name": "characters",
"type": "array",
"description": "Character list entries",
"loop": {
"countField": "charCount",
"fields": [
{ "name": "name", "type": "ascii", "size": 30, "description": "Character name (empty if slot unused)" },
{ "name": "password", "type": "ascii", "size": 30, "description": "Always empty" }
]
}
},
{ "name": "cityCount", "type": "byte", "size": 1, "description": "Number of starting cities" },
{
"name": "cities",
"type": "array",
"description": "Starting city entries",
"loop": {
"countField": "cityCount",
"fields": [
{ "name": "index", "type": "byte", "size": 1, "description": "City index" },
{ "name": "cityName", "type": "ascii", "size": 31, "description": "City name (32 for 7.0.13.0+)" },
{ "name": "buildingName", "type": "ascii", "size": 31, "description": "Building name (32 for 7.0.13.0+)" },
{ "name": "x", "type": "int", "size": 4, "description": "X coordinate (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" },
{ "name": "y", "type": "int", "size": 4, "description": "Y coordinate (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" },
{ "name": "z", "type": "int", "size": 4, "description": "Z coordinate (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" },
{ "name": "mapId", "type": "int", "size": 4, "description": "Map ID (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" },
{ "name": "cliloc", "type": "int", "size": 4, "description": "Description cliloc (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" },
{ "name": "unknown", "type": "int", "size": 4, "description": "Unknown (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" }
]
}
},
{ "name": "flags", "type": "int", "size": 4, "description": "Character list flags (slot limits, features)" },
{ "name": "lastCharSlot", "type": "short", "size": 2, "description": "Last played character slot (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" }
],
"clientVersion": {
"feature": "NewCharacterList",
"notes": "Clients 7.0.13.0+ use extended city format with coordinates"
},
"related": [
{ "id": "0x91", "relationship": "request", "note": "Game login request" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 293
}
},
{
"id": "0x1B",
"name": "Login Confirmation",
"description": "Sent when entering the world. Confirms the player's mobile serial and initial position.",
"direction": "outgoing",
"isDynamic": false,
"size": 37,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x1B", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Player mobile serial" },
{ "name": "unknown", "type": "int", "size": 4, "value": "0", "description": "Unknown (always 0)" },
{ "name": "body", "type": "short", "size": 2, "description": "Player body ID" },
{ "name": "x", "type": "short", "size": 2, "description": "X coordinate" },
{ "name": "y", "type": "short", "size": 2, "description": "Y coordinate" },
{ "name": "z", "type": "short", "size": 2, "description": "Z coordinate" },
{ "name": "direction", "type": "byte", "size": 1, "description": "Facing direction" },
{ "name": "unknown2", "type": "byte", "size": 1, "value": "0", "description": "Unknown" },
{ "name": "unknown3", "type": "int", "size": 4, "value": "-1", "description": "Unknown (always -1)" },
{ "name": "unknown4", "type": "int", "size": 4, "value": "0", "description": "Unknown" },
{ "name": "mapWidth", "type": "short", "size": 2, "description": "Map width in tiles" },
{ "name": "mapHeight", "type": "short", "size": 2, "description": "Map height in tiles" },
{ "name": "unknown5", "type": "byte[6]", "size": 6, "description": "Unknown (zeros)" }
],
"related": [
{ "id": "0x5D", "relationship": "request", "note": "Play character request" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 190
}
},
{
"id": "0x55",
"name": "Login Complete",
"description": "Final packet in the login sequence. Signals that the client can begin normal gameplay.",
"direction": "outgoing",
"isDynamic": false,
"size": 1,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x55", "description": "Packet identifier" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 231
}
},
{
"id": "0xBD",
"name": "Client Version Request",
"description": "Request for the client to send its version string.",
"direction": "outgoing",
"isDynamic": false,
"size": 3,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xBD", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "value": "0x0003", "description": "Packet length" }
],
"related": [
{ "id": "0xBD", "relationship": "response", "note": "Client responds with version string" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 112
},
"notes": "Same packet ID (0xBD) is used for both request (server) and response (client)."
},
{
"id": "0xB9",
"name": "Supported Features",
"description": "Informs the client which features are enabled on the server.",
"direction": "outgoing",
"isDynamic": false,
"size": "3 or 5 (client version dependent)",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xB9", "description": "Packet identifier" },
{ "name": "features", "type": "ushort/uint", "size": "2 or 4", "description": "Feature flags bitmask. Extended (4 bytes) for newer clients." }
],
"clientVersion": {
"feature": "ExtendedSupportedFeatures",
"notes": "Clients with ExtendedSupportedFeatures use 4-byte flags instead of 2-byte"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 140
}
},
{
"id": "0x85",
"name": "Character Delete Result",
"description": "Result of a character deletion request.",
"direction": "outgoing",
"isDynamic": false,
"size": 2,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x85", "description": "Packet identifier" },
{ "name": "result", "type": "byte", "size": 1, "description": "Result: 0=PasswordInvalid, 1=CharNotExist, 2=CharBeingPlayed, 3=CharTooYoung, 4=CharQueued, 5=BadRequest" }
],
"related": [
{ "id": "0x83", "relationship": "request", "note": "The delete request" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 121
}
},
{
"id": "0x53",
"name": "Popup Message",
"description": "Displays a predefined popup message to the client.",
"direction": "outgoing",
"isDynamic": false,
"size": 2,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x53", "description": "Packet identifier" },
{ "name": "messageId", "type": "byte", "size": 1, "description": "Message ID: 1=CharNoExist, 2=CharExists, 5=CharInWorld, 6=LoginSyncError, 7=IdleWarning" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 131
}
},
{
"id": "0x81",
"name": "Change Character",
"description": "Updates the character list during reconnection. Currently unused.",
"direction": "outgoing",
"isDynamic": true,
"size": "5 + (60 * charCount)",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x81", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "charCount", "type": "ushort", "size": 2, "description": "Number of characters" },
{
"name": "characters",
"type": "array",
"description": "Character list entries",
"loop": {
"countField": "charCount",
"fields": [
{ "name": "name", "type": "ascii", "size": 30, "description": "Character name" },
{ "name": "password", "type": "ascii", "size": 30, "description": "Always empty" }
]
}
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 63
},
"notes": "Currently unused in ModernUO."
},
{
"id": "0x86",
"name": "Character List Update",
"description": "Updates the character list after character creation or deletion.",
"direction": "outgoing",
"isDynamic": true,
"size": "4 + (60 * charCount)",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x86", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "charCount", "type": "byte", "size": 1, "description": "Number of character slots" },
{
"name": "characters",
"type": "array",
"description": "Character list entries",
"loop": {
"countField": "charCount",
"fields": [
{ "name": "name", "type": "ascii", "size": 30, "description": "Character name (empty if slot unused)" },
{ "name": "password", "type": "ascii", "size": 30, "description": "Always empty" }
]
}
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
"line": 242
}
}
]
}