ModernUO/Distribution/Data/packets/incoming/player.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

470 lines
20 KiB
JSON

{
"category": "Player",
"packets": [
{
"id": "0x01",
"name": "Disconnect",
"description": "Client sends disconnect notification.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x01", "description": "Packet identifier" },
{ "name": "minusOne", "type": "int", "size": 4, "value": "0xFFFFFFFF", "description": "Always -1" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 317
}
},
{
"id": "0x05",
"name": "Attack Request",
"description": "Client requests to attack a mobile.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x05", "description": "Packet identifier" },
{ "name": "targetSerial", "type": "uint", "size": 4, "description": "Serial of mobile to attack" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 69
}
},
{
"id": "0x12",
"name": "Text Command",
"description": "Client sends text-based commands for skills, spells, virtues, etc.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x12", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{
"name": "commandType",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Type of text command",
"values": [
{ "value": "0x24", "name": "UseSkill", "description": "Use a skill by ID" },
{ "value": "0x27", "name": "CastSpellFromBook", "description": "Cast spell from spellbook" },
{ "value": "0x2F", "name": "OldScrollClick", "description": "Old scroll double-click" },
{ "value": "0x43", "name": "OpenSpellbook", "description": "Open spellbook of type" },
{ "value": "0x56", "name": "CastSpellMacro", "description": "Cast spell from macro" },
{ "value": "0x58", "name": "OpenDoor", "description": "Open door macro" },
{ "value": "0xC7", "name": "Animate", "description": "Play animation" },
{ "value": "0xF4", "name": "InvokeVirtue", "description": "Invoke virtue from macro" }
]
},
{ "name": "command", "type": "ascii-null", "description": "Command-specific text (skill ID, spell ID, etc.)" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 119
}
},
{
"id": "0x22",
"name": "Resynchronize",
"description": "Client requests full world state resync.",
"direction": "incoming",
"isDynamic": false,
"size": 3,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x22", "description": "Packet identifier" },
{ "name": "padding", "type": "ushort", "size": 2, "description": "Unused padding" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 349
}
},
{
"id": "0x2C",
"name": "Death Status Response",
"description": "Client acknowledges death status packet. Currently ignored by server.",
"direction": "incoming",
"isDynamic": false,
"size": 2,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x2C", "description": "Packet identifier" },
{ "name": "unknown", "type": "byte", "size": 1, "description": "Unknown" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 58
}
},
{
"id": "0x34",
"name": "Mobile Query",
"description": "Client queries information about a mobile (stats or skills).",
"direction": "incoming",
"isDynamic": false,
"size": 10,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x34", "description": "Packet identifier" },
{ "name": "pattern", "type": "uint", "size": 4, "value": "0xEDEDEDED", "description": "Fixed pattern" },
{
"name": "queryType",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Type of query",
"values": [
{ "value": "0x04", "name": "Stats", "description": "Request mobile stats" },
{ "value": "0x05", "name": "Skills", "description": "Request mobile skills" }
]
},
{ "name": "mobileSerial", "type": "uint", "size": 4, "description": "Serial of mobile to query" }
],
"related": [
{ "id": "0x11", "relationship": "response", "note": "Mobile Status packet sent in response to stats query" },
{ "id": "0x3A", "relationship": "response", "note": "Skills Update sent in response to skills query" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 376
}
},
{
"id": "0x3A",
"name": "Change Skill Lock",
"description": "Client changes the lock state of a skill.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x3A", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "skillIndex", "type": "short", "size": 2, "description": "Skill index to change" },
{
"name": "lockState",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "New lock state",
"values": [
{ "value": 0, "name": "Up", "description": "Skill gains enabled" },
{ "value": 1, "name": "Down", "description": "Skill decreases enabled" },
{ "value": 2, "name": "Locked", "description": "Skill locked at current value" }
]
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 331
}
},
{
"id": "0x72",
"name": "Set War Mode",
"description": "Client toggles war/peace mode.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x72", "description": "Packet identifier" },
{ "name": "warmode", "type": "bool", "size": 1, "description": "True = war mode, False = peace mode" },
{ "name": "padding", "type": "byte", "size": 3, "description": "Unused padding (0x00, 0x32, 0x00)" }
],
"related": [
{ "id": "0x72", "relationship": "response", "note": "Server echoes back war mode state" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 343
}
},
{
"id": "0x73",
"name": "Ping Request",
"description": "Client sends ping for latency measurement.",
"direction": "incoming",
"isDynamic": false,
"size": 2,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x73", "description": "Packet identifier" },
{ "name": "sequence", "type": "byte", "size": 1, "description": "Ping sequence number" }
],
"related": [
{ "id": "0x73", "relationship": "response", "note": "Server echoes back same sequence" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 366
}
},
{
"id": "0x7D",
"name": "Menu Response",
"description": "Client responds to a displayed item menu.",
"direction": "incoming",
"isDynamic": false,
"size": 13,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x7D", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Menu dialog serial" },
{ "name": "menuId", "type": "short", "size": 2, "description": "Menu ID (unused in implementation)" },
{ "name": "index", "type": "short", "size": 2, "description": "Selected item index (1-based, 0 = cancel)" },
{ "name": "itemId", "type": "short", "size": 2, "description": "Item graphic ID of selection" },
{ "name": "hue", "type": "short", "size": 2, "description": "Hue of selection" }
],
"related": [
{ "id": "0x7C", "relationship": "request", "note": "Display Item List Menu packet" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 287
}
},
{
"id": "0x95",
"name": "Hue Picker Response",
"description": "Client responds to a hue picker dialog.",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x95", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Hue picker serial" },
{ "name": "itemId", "type": "short", "size": 2, "description": "Item ID (unused)" },
{ "name": "hue", "type": "short", "size": 2, "description": "Selected hue (masked with 0x3FFF)" }
],
"related": [
{ "id": "0x95", "relationship": "request", "note": "Display Hue Picker packet" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 86
}
},
{
"id": "0x9A",
"name": "ASCII Prompt Response",
"description": "Client responds to an ASCII text prompt.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x9A", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Prompt serial" },
{ "name": "promptId", "type": "int", "size": 4, "description": "Prompt ID" },
{ "name": "type", "type": "int", "size": 4, "description": "Response type: 0 = cancel, other = submit" },
{ "name": "text", "type": "ascii-null", "description": "Response text (max 128 chars)" }
],
"related": [
{ "id": "0xC2", "relationship": "request", "note": "Prompt packet that triggered this response" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 214
}
},
{
"id": "0x9B",
"name": "Help Request",
"description": "Client requests help/GM assistance.",
"direction": "incoming",
"isDynamic": false,
"size": 258,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x9B", "description": "Packet identifier" },
{ "name": "data", "type": "byte[]", "size": 257, "description": "Help request data (format TBD)" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 338
}
},
{
"id": "0xA4",
"name": "System Info",
"description": "Client sends system/hardware information.",
"direction": "incoming",
"isDynamic": false,
"size": 149,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA4", "description": "Packet identifier" },
{ "name": "unknown1", "type": "byte", "size": 1, "description": "Unknown" },
{ "name": "unknown2", "type": "ushort", "size": 2, "description": "Unknown" },
{ "name": "unknown3", "type": "byte", "size": 1, "description": "Unknown" },
{ "name": "string1", "type": "ascii", "size": 32, "description": "System string 1" },
{ "name": "string2", "type": "ascii", "size": 32, "description": "System string 2" },
{ "name": "string3", "type": "ascii", "size": 32, "description": "System string 3" },
{ "name": "string4", "type": "ascii", "size": 32, "description": "System string 4" },
{ "name": "unknown4", "type": "ushort", "size": 2, "description": "Unknown" },
{ "name": "unknown5", "type": "ushort", "size": 2, "description": "Unknown" },
{ "name": "unknown6", "type": "int", "size": 4, "description": "Unknown" },
{ "name": "unknown7", "type": "int", "size": 4, "description": "Unknown" },
{ "name": "unknown8", "type": "int", "size": 4, "description": "Unknown" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 103
}
},
{
"id": "0xA7",
"name": "Request Scroll Window",
"description": "Client requests a tips/scroll window.",
"direction": "incoming",
"isDynamic": false,
"size": 4,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA7", "description": "Packet identifier" },
{ "name": "lastTip", "type": "short", "size": 2, "description": "Last tip ID viewed" },
{ "name": "type", "type": "byte", "size": 1, "description": "Scroll type" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 63
}
},
{
"id": "0xC2",
"name": "Unicode Prompt Response",
"description": "Client responds to a Unicode text prompt.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xC2", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Prompt serial" },
{ "name": "promptId", "type": "int", "size": 4, "description": "Prompt ID" },
{ "name": "type", "type": "int", "size": 4, "description": "Response type: 0 = cancel, other = submit" },
{ "name": "language", "type": "ascii", "size": 4, "description": "Language code (e.g., 'ENU')" },
{ "name": "text", "type": "unicode-le-null", "description": "Response text (max 128 chars)" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 250
}
},
{
"id": "0xC8",
"name": "Set Update Range",
"description": "Client requests to change update range. Server ignores and sends back fixed range.",
"direction": "incoming",
"isDynamic": false,
"size": 2,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xC8", "description": "Packet identifier" },
{ "name": "range", "type": "byte", "size": 1, "description": "Requested update range (ignored)" }
],
"related": [
{ "id": "0xC8", "relationship": "response", "note": "Server sends back fixed range (18)" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 371
}
},
{
"id": "0xD0",
"name": "Configuration File",
"description": "Client sends configuration data. Currently ignored by server.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xD0", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "data", "type": "byte[]", "description": "Configuration data (ignored)" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 322
}
},
{
"id": "0xD1",
"name": "Logout Request",
"description": "Client requests to logout.",
"direction": "incoming",
"isDynamic": false,
"size": 2,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xD1", "description": "Packet identifier" },
{ "name": "unknown", "type": "byte", "size": 1, "description": "Unknown (typically 0x01)" }
],
"related": [
{ "id": "0xD1", "relationship": "response", "note": "Server sends Logout Ack" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 326
}
},
{
"id": "0xD7",
"name": "Encoded Command",
"description": "Wrapper packet for encoded commands (0xD7 subpackets). Used for house design, abilities, guild/quest requests.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xD7", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "entitySerial", "type": "uint", "size": 4, "description": "Serial of target entity" },
{ "name": "subCommand", "type": "ushort", "size": 2, "description": "Encoded command ID" },
{ "name": "data", "type": "byte[]", "description": "Subcommand-specific data" }
],
"notes": "See encoded.json for subpacket definitions",
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 457
}
},
{
"id": "0xF4",
"name": "Crash Report",
"description": "Client sends crash/error report.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xF4", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "clientMajor", "type": "byte", "size": 1, "description": "Client major version" },
{ "name": "clientMinor", "type": "byte", "size": 1, "description": "Client minor version" },
{ "name": "clientRev", "type": "byte", "size": 1, "description": "Client revision" },
{ "name": "clientPat", "type": "byte", "size": 1, "description": "Client patch" },
{ "name": "x", "type": "ushort", "size": 2, "description": "Player X coordinate at crash" },
{ "name": "y", "type": "ushort", "size": 2, "description": "Player Y coordinate at crash" },
{ "name": "z", "type": "sbyte", "size": 1, "description": "Player Z coordinate at crash" },
{ "name": "map", "type": "byte", "size": 1, "description": "Map ID at crash" },
{ "name": "accountName", "type": "ascii", "size": 32, "description": "Account name" },
{ "name": "characterName", "type": "ascii", "size": 32, "description": "Character name" },
{ "name": "ipAddress", "type": "ascii", "size": 15, "description": "Client IP address" },
{ "name": "unknown1", "type": "int", "size": 4, "description": "Unknown" },
{ "name": "exceptionCode", "type": "int", "size": 4, "description": "Exception code" },
{ "name": "processName", "type": "ascii", "size": 100, "description": "Process name" },
{ "name": "reportText", "type": "ascii", "size": 100, "description": "Report text" },
{ "name": "terminator", "type": "byte", "size": 1, "value": "0x00", "description": "Null terminator" },
{ "name": "offset", "type": "int", "size": 4, "description": "Crash offset" },
{ "name": "stackCount", "type": "byte", "size": 1, "description": "Number of stack trace entries" },
{
"name": "stackAddresses",
"type": "loop",
"loop": {
"countField": "stackCount",
"fields": [
{ "name": "address", "type": "int", "size": 4, "description": "Stack frame address" }
]
}
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 413
}
}
]
}