feat: Expand packet documentation with enums, bitfields, and detailed formats

- Add 42 new packet JSON definitions (assistant, book, chat, gump, house, etc.)
- Convert inline enum/bitflag descriptions to structured enum arrays
- Add planeFormat section for 0xD8 house customization packet
- Add Plane Format rendering in HTML template
- Standardize field descriptions and remove inline value lists
- Add comprehensive gump layout command documentation
- Document boat, mahjong, party, secure trade, and weapon ability packets

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Kamron Batman 2026-01-01 15:28:05 -08:00
parent f0b65fecb7
commit 0d3dc75330
No known key found for this signature in database
GPG key ID: 7D81DF26D9A5D94A
51 changed files with 18827 additions and 3924 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,39 @@
{
"category": "Assistant",
"packets": [
{
"id": "0xBE",
"name": "Assistant Version",
"description": "Client sends assistant version information. Razor CE sends version as ASCII string.",
"direction": "incoming",
"isDynamic": true,
"size": "3+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBE",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Version String",
"type": "ascii",
"size": "var",
"description": "Assistant version string (Razor CE sends \u0027version\u0027 or \u0027ProductName version\u0027)"
}
],
"notes": "Razor Community Edition sends version as ASCII. Legacy UOAssist would send int32 + ASCII client version.",
"source": {
"file": "Projects/UOContent/Assistants/AssistantHandler.cs",
"line": 69
}
}
]
}

View file

@ -0,0 +1,216 @@
{
"category": "Book",
"packets": [
{
"id": "0x66",
"name": "Book Content Change",
"description": "Client sends updated book page content when player edits a writable book.",
"direction": "incoming",
"isDynamic": true,
"size": "9+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x66",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book being edited"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages being updated"
},
{
"name": "Pages",
"type": "loop",
"description": "Page contents being updated",
"loop": {
"countField": "pageCount",
"fields": [
{
"name": "Page Index",
"type": "ushort",
"size": 2,
"description": "Page number (1-indexed)"
},
{
"name": "Line Count",
"type": "ushort",
"size": 2,
"description": "Number of lines on page (max 8)"
},
{
"name": "Lines",
"type": "loop",
"description": "Lines on the page",
"loop": {
"countField": "lineCount",
"fields": [
{
"name": "Text",
"type": "utf8-t",
"description": "Line text (max 80 characters)"
}
]
}
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Items/Books/BookPackets.cs",
"line": 87
}
},
{
"id": "0xD4",
"name": "Book Header Change",
"description": "Client sends updated book title and author when player edits a writable book\u0027s cover.",
"direction": "incoming",
"isDynamic": true,
"size": "13+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD4",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book being edited"
},
{
"name": "Flags",
"type": "ushort",
"size": 2,
"description": "Book flags (ignored by server)"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages (ignored by server)"
},
{
"name": "Title Length",
"type": "ushort",
"size": 2,
"description": "Length of title string including null terminator (max 61)"
},
{
"name": "Title",
"type": "utf8-t",
"description": "Book title (max 60 characters)"
},
{
"name": "Author Length",
"type": "ushort",
"size": 2,
"description": "Length of author string including null terminator (max 31)"
},
{
"name": "Author",
"type": "utf8-t",
"description": "Book author (max 30 characters)"
}
],
"related": [
{
"id": "0x93",
"direction": "incoming",
"relationship": "variant",
"note": "Old Header Change format for older clients"
}
],
"source": {
"file": "Projects/UOContent/Items/Books/BookPackets.cs",
"line": 51
}
},
{
"id": "0x93",
"name": "Old Book Header Change",
"description": "Legacy format for book header changes. Uses fixed-size ASCII strings.",
"direction": "incoming",
"isDynamic": false,
"size": 99,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x93",
"description": "Packet identifier"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book being edited"
},
{
"name": "Flags",
"type": "ushort",
"size": 2,
"description": "Book flags (ignored by server)"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages (ignored by server)"
},
{
"name": "Title",
"type": "ascii",
"size": 60,
"description": "Book title (fixed 60 bytes, null-padded)"
},
{
"name": "Author",
"type": "ascii",
"size": 30,
"description": "Book author (fixed 30 bytes, null-padded)"
}
],
"related": [
{
"id": "0xD4",
"direction": "incoming",
"relationship": "variant",
"note": "New Header Change format for newer clients"
}
],
"notes": "Old format used by older clients. Title and author are fixed-size ASCII.",
"source": {
"file": "Projects/UOContent/Items/Books/BookPackets.cs",
"line": 32
}
}
]
}

View file

@ -0,0 +1,93 @@
{
"category": "Chat",
"packets": [
{
"id": "0xB5",
"name": "Open Chat Window Request",
"description": "Client requests to open the chat window. Newer clients don\u0027t send chat username.",
"direction": "incoming",
"isDynamic": false,
"size": 64,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB5",
"description": "Packet identifier"
},
{
"name": "Reserved",
"type": "byte[]",
"size": 63,
"description": "Reserved/unused (newer clients don\u0027t send chat username)"
}
],
"related": [
{
"id": "0xB2",
"direction": "outgoing",
"relationship": "response",
"note": "Server responds with Chat Message (OpenChatWindow command)"
}
],
"source": {
"file": "Projects/UOContent/Engines/Chat/ChatPackets.cs",
"line": 30
}
},
{
"id": "0xB3",
"name": "Chat Action",
"description": "Client sends chat action commands like sending messages, joining channels, etc.",
"direction": "incoming",
"isDynamic": true,
"size": "8+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB3",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Language",
"type": "ascii",
"size": 4,
"description": "Language code (e.g., \u0027enu\u0027 for English)"
},
{
"name": "Action ID",
"type": "short",
"size": 2,
"description": "Chat action ID"
},
{
"name": "Parameter",
"type": "utf16be",
"size": "var",
"description": "Action parameter (Big Endian Unicode)"
}
],
"related": [
{
"id": "0xB2",
"direction": "outgoing",
"relationship": "response",
"note": "Server responds with Chat Message"
}
],
"source": {
"file": "Projects/UOContent/Engines/Chat/ChatPackets.cs",
"line": 51
}
}
]
}

View file

@ -0,0 +1,801 @@
{
"category": "Encoded Commands (0xD7)",
"packets": [
{
"id": "0xD7/0x02",
"subId": "0x02",
"name": "House Design: Backup",
"description": "Client requests to backup current house design state.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x02",
"description": "Backup subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1024
}
},
{
"id": "0xD7/0x03",
"subId": "0x03",
"name": "House Design: Restore",
"description": "Client requests to restore house design from backup.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x03",
"description": "Restore subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1025
}
},
{
"id": "0xD7/0x04",
"subId": "0x04",
"name": "House Design: Commit",
"description": "Client commits the current house design changes.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x04",
"description": "Commit subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1026
}
},
{
"id": "0xD7/0x05",
"subId": "0x05",
"name": "House Design: Delete Component",
"description": "Client requests to delete a component from house design.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x05",
"description": "Delete subcommand"
},
{
"name": "Tile ID",
"type": "int",
"size": 4,
"description": "Tile graphic ID to delete"
},
{
"name": "X",
"type": "int",
"size": 4,
"description": "X offset from foundation"
},
{
"name": "Y",
"type": "int",
"size": 4,
"description": "Y offset from foundation"
},
{
"name": "Z",
"type": "int",
"size": 4,
"description": "Z offset from foundation"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1027
}
},
{
"id": "0xD7/0x06",
"subId": "0x06",
"name": "House Design: Build Component",
"description": "Client requests to place a component in house design.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x06",
"description": "Build subcommand"
},
{
"name": "Tile ID",
"type": "int",
"size": 4,
"description": "Tile graphic ID to place"
},
{
"name": "X",
"type": "int",
"size": 4,
"description": "X offset from foundation"
},
{
"name": "Y",
"type": "int",
"size": 4,
"description": "Y offset from foundation"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1028
}
},
{
"id": "0xD7/0x0C",
"subId": "0x0C",
"name": "House Design: Close Tool",
"description": "Client closes the house design tool.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0C",
"description": "Close subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1029
}
},
{
"id": "0xD7/0x0D",
"subId": "0x0D",
"name": "House Design: Add Stairs",
"description": "Client requests to add stairs to house design.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0D",
"description": "Stairs subcommand"
},
{
"name": "Tile ID",
"type": "int",
"size": 4,
"description": "Stair tile graphic ID"
},
{
"name": "X",
"type": "int",
"size": 4,
"description": "X offset from foundation"
},
{
"name": "Y",
"type": "int",
"size": 4,
"description": "Y offset from foundation"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1030
}
},
{
"id": "0xD7/0x0E",
"subId": "0x0E",
"name": "House Design: Sync Request",
"description": "Client requests to synchronize house design state.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0E",
"description": "Sync subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1031
}
},
{
"id": "0xD7/0x10",
"subId": "0x10",
"name": "House Design: Clear Floor",
"description": "Client requests to clear a floor in house design.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x10",
"description": "Clear subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1032
}
},
{
"id": "0xD7/0x12",
"subId": "0x12",
"name": "House Design: Change Floor Level",
"description": "Client changes the visible floor level in house design.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x12",
"description": "Level subcommand"
},
{
"name": "Floor",
"type": "int",
"size": 4,
"description": "Floor level (1-4)"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1033
}
},
{
"id": "0xD7/0x13",
"subId": "0x13",
"name": "House Design: Add Roof",
"description": "Client requests to add a roof tile (Samurai Empire+).",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x13",
"description": "Roof subcommand"
},
{
"name": "Tile ID",
"type": "int",
"size": 4,
"description": "Roof tile graphic ID"
},
{
"name": "X",
"type": "int",
"size": 4,
"description": "X offset from foundation"
},
{
"name": "Y",
"type": "int",
"size": 4,
"description": "Y offset from foundation"
},
{
"name": "Z",
"type": "int",
"size": 4,
"description": "Z offset for roof placement"
}
],
"clientVersion": {
"min": "Samurai Empire",
"notes": "Added with Samurai Empire expansion"
},
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1035
}
},
{
"id": "0xD7/0x14",
"subId": "0x14",
"name": "House Design: Delete Roof",
"description": "Client requests to delete a roof tile (Samurai Empire+).",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x14",
"description": "Roof Delete subcommand"
},
{
"name": "Tile ID",
"type": "int",
"size": 4,
"description": "Roof tile graphic ID"
},
{
"name": "X",
"type": "int",
"size": 4,
"description": "X offset from foundation"
},
{
"name": "Y",
"type": "int",
"size": 4,
"description": "Y offset from foundation"
},
{
"name": "Z",
"type": "int",
"size": 4,
"description": "Z offset of roof to delete"
}
],
"clientVersion": {
"min": "Samurai Empire",
"notes": "Added with Samurai Empire expansion"
},
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1036
}
},
{
"id": "0xD7/0x19",
"subId": "0x19",
"name": "Set Weapon Ability",
"description": "Client selects a weapon special ability.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Player serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x19",
"description": "Set Ability subcommand"
},
{
"name": "Ability Index",
"type": "int",
"size": 4,
"description": "Ability index (0 = clear, 1+ = ability index)"
}
],
"related": [
{
"id": "0xBF/0x21",
"relationship": "response",
"note": "Clear Weapon Ability"
},
{
"id": "0xBF/0x25",
"relationship": "response",
"note": "Toggle Special Ability"
}
],
"source": {
"file": "Projects/UOContent/Items/Weapons/Abilities/WeaponAbilityPackets.cs",
"line": 11
}
},
{
"id": "0xD7/0x1A",
"subId": "0x1A",
"name": "House Design: Revert",
"description": "Client requests to revert house design to original state.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x1A",
"description": "Revert subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1038
}
},
{
"id": "0xD7/0x28",
"subId": "0x28",
"name": "Guild Gump Request",
"description": "Client requests to open the guild gump.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Player serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x28",
"description": "Guild Gump subcommand"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 54
}
},
{
"id": "0xD7/0x32",
"subId": "0x32",
"name": "Quest Gump Request",
"description": "Client requests to open the quest/MLB gump.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Player serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x32",
"description": "Quest Gump subcommand"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 55
}
}
]
}

View file

@ -1,82 +1,141 @@
{
"category": "Entity",
"packets": [
{
"id": "0x06",
"name": "Use Request (Double-Click)",
"description": "Sent when the player double-clicks an item or mobile. Can also trigger paperdoll if high bit is set.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x06", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of the target. If high bit (0x80000000) is set, opens player's paperdoll instead." }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 61
}
},
{
"id": "0x09",
"name": "Look Request (Single-Click)",
"description": "Sent when the player single-clicks an item or mobile to see its name/properties.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x09", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of the target entity" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 105
}
},
{
"id": "0xB6",
"name": "Object Help Request",
"description": "Sent when the player requests help/info about an object (Shift+Click or context menu).",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xB6", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of the target entity" },
{ "name": "unknown", "type": "byte", "size": 1, "description": "Unknown" },
{ "name": "language", "type": "ascii", "size": 3, "description": "Language code (e.g., 'ENU')" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 32
}
},
{
"id": "0xD6",
"name": "Batch Query Properties",
"description": "Sent by the client to request Object Property Lists (tooltips) for multiple entities at once.",
"direction": "incoming",
"isDynamic": true,
"size": "3 + (4 * entityCount)",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xD6", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{
"name": "serials",
"type": "array",
"description": "List of entity serials to query",
"loop": {
"countField": "(length-3)/4",
"fields": [
{ "name": "serial", "type": "uint", "size": 4, "description": "Entity serial" }
]
}
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 154
}
}
]
}
{
"category": "Entity",
"packets": [
{
"id": "0x06",
"name": "Use Request (Double-Click)",
"description": "Sent when the player double-clicks an item or mobile. Can also trigger paperdoll if high bit is set.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x06",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target. If high bit (0x80000000) is set, opens player\u0027s paperdoll instead."
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 61
}
},
{
"id": "0x09",
"name": "Look Request (Single-Click)",
"description": "Sent when the player single-clicks an item or mobile to see its name/properties.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x09",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target entity"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 105
}
},
{
"id": "0xB6",
"name": "Object Help Request",
"description": "Sent when the player requests help/info about an object (Shift+Click or context menu).",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB6",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target entity"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown"
},
{
"name": "Language",
"type": "ascii",
"size": 3,
"description": "Language code (e.g., \u0027ENU\u0027)"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 32
}
},
{
"id": "0xD6",
"name": "Batch Query Properties",
"description": "Sent by the client to request Object Property Lists (tooltips) for multiple entities at once.",
"direction": "incoming",
"isDynamic": true,
"size": "3 + (4 x entityCount)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD6",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serials",
"type": "array",
"description": "List of entity serials to query",
"loop": {
"countField": "(length-3)/4",
"fields": [
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 154
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,142 +1,292 @@
{
"category": "Items",
"packets": [
{
"id": "0x07",
"name": "Lift Request",
"description": "Client requests to pick up an item from the world or a container.",
"direction": "incoming",
"isDynamic": false,
"size": 7,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x07", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of the item to lift" },
{ "name": "amount", "type": "ushort", "size": 2, "description": "Amount to pick up" }
],
"related": [
{ "id": "0x27", "relationship": "rej", "note": "Sent if lift is rejected" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 35
}
},
{
"id": "0x08",
"name": "Drop Request",
"description": "Client requests to drop an item at a location or into a container. Size varies by client version.",
"direction": "incoming",
"isDynamic": false,
"size": "14 (pre-6017) or 15 (6017+)",
"variants": [
{
"version": "pre-6017",
"name": "Classic",
"size": 14,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x08", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of item being dropped (ignored)" },
{ "name": "x", "type": "short", "size": 2, "description": "Target X coordinate" },
{ "name": "y", "type": "short", "size": 2, "description": "Target Y coordinate" },
{ "name": "z", "type": "sbyte", "size": 1, "description": "Target Z coordinate" },
{ "name": "dest", "type": "uint", "size": 4, "description": "Target container/mobile serial, or 0xFFFFFFFF for world" }
]
},
{
"version": "6017+",
"name": "Container Grid Lines",
"condition": "Client version >= 6.0.1.7 (ContainerGridLines)",
"size": 15,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x08", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of item being dropped (ignored)" },
{ "name": "x", "type": "short", "size": 2, "description": "Target X coordinate" },
{ "name": "y", "type": "short", "size": 2, "description": "Target Y coordinate" },
{ "name": "z", "type": "sbyte", "size": 1, "description": "Target Z coordinate" },
{ "name": "gridLocation", "type": "byte", "size": 1, "description": "Grid slot position in container" },
{ "name": "dest", "type": "uint", "size": 4, "description": "Target container/mobile serial, or 0xFFFFFFFF for world" }
]
}
],
"clientVersion": {
"feature": "ContainerGridLines adds gridLocation byte"
},
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 69
}
},
{
"id": "0x13",
"name": "Equip Request",
"description": "Client requests to equip a held item on a mobile.",
"direction": "incoming",
"isDynamic": false,
"size": 10,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x13", "description": "Packet identifier" },
{ "name": "itemSerial", "type": "uint", "size": 4, "description": "Serial of item to equip" },
{ "name": "layer", "type": "byte", "size": 1, "description": "Equipment layer" },
{ "name": "mobileSerial", "type": "uint", "size": 4, "description": "Serial of target mobile" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 44
}
},
{
"id": "0xEC",
"name": "Equip Macro",
"description": "Client requests to equip multiple items from a saved macro.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xEC", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "count", "type": "byte", "size": 1, "description": "Number of items to equip" },
{
"name": "items",
"type": "loop",
"loop": {
"countField": "count",
"fields": [
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of item to equip" }
]
}
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 112
}
},
{
"id": "0xED",
"name": "Unequip Macro",
"description": "Client requests to unequip items from specific layers via macro.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xED", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "count", "type": "byte", "size": 1, "description": "Number of layers to unequip" },
{
"name": "layers",
"type": "loop",
"loop": {
"countField": "count",
"fields": [
{ "name": "layer", "type": "ushort", "size": 2, "description": "Layer to unequip from" }
]
}
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 125
}
}
]
}
{
"category": "Items",
"packets": [
{
"id": "0x07",
"name": "Lift Request",
"description": "Client requests to pick up an item from the world or a container.",
"direction": "incoming",
"isDynamic": false,
"size": 7,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x07",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item to lift"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Amount to pick up"
}
],
"related": [
{
"id": "0x27",
"relationship": "rej",
"note": "Sent if lift is rejected"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 35
}
},
{
"id": "0x08",
"name": "Drop Request",
"description": "Client requests to drop an item at a location or into a container. Size varies by client version.",
"direction": "incoming",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"version": "pre-6017",
"name": "Classic",
"size": 14,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x08",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of item being dropped (ignored)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Target X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Target Y coordinate"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Target Z coordinate"
},
{
"name": "Dest",
"type": "uint",
"size": 4,
"description": "Target container/mobile serial, or 0xFFFFFFFF for world"
}
]
},
{
"version": "6017+",
"name": "Container Grid Lines",
"condition": "Client version \u003e= 6.0.1.7 (ContainerGridLines)",
"size": 15,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x08",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of item being dropped (ignored)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Target X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Target Y coordinate"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Target Z coordinate"
},
{
"name": "Grid Location",
"type": "byte",
"size": 1,
"description": "Grid slot position in container"
},
{
"name": "Dest",
"type": "uint",
"size": 4,
"description": "Target container/mobile serial, or 0xFFFFFFFF for world"
}
]
}
],
"clientVersion": {
"feature": "ContainerGridLines adds gridLocation byte"
},
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 69
}
},
{
"id": "0x13",
"name": "Equip Request",
"description": "Client requests to equip a held item on a mobile.",
"direction": "incoming",
"isDynamic": false,
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x13",
"description": "Packet identifier"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of item to equip"
},
{
"name": "Layer",
"type": "byte",
"size": 1,
"description": "Equipment layer"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of target mobile"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 44
}
},
{
"id": "0xEC",
"name": "Equip Macro",
"description": "Client requests to equip multiple items from a saved macro.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xEC",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Count",
"type": "byte",
"size": 1,
"description": "Number of items to equip"
},
{
"name": "Items",
"type": "loop",
"loop": {
"countField": "count",
"fields": [
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of item to equip"
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 112
}
},
{
"id": "0xED",
"name": "Unequip Macro",
"description": "Client requests to unequip items from specific layers via macro.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xED",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Count",
"type": "byte",
"size": 1,
"description": "Number of layers to unequip"
},
{
"name": "Layers",
"type": "loop",
"loop": {
"countField": "count",
"fields": [
{
"name": "Layer",
"type": "ushort",
"size": 2,
"description": "Layer to unequip from"
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 125
}
}
]
}

View file

@ -0,0 +1,56 @@
{
"category": "Mahjong",
"packets": [
{
"id": "0xDA",
"name": "Mahjong Command",
"description": "Client sends Mahjong game commands. Various subcommands control game actions like moving tiles, rolling dice, and managing players.",
"direction": "incoming",
"isDynamic": true,
"size": "7+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"description": "Subcommand: 0x06=Exit, 0x0A=GivePoints, 0x0B=RollDice, 0x0C=BuildWalls, 0x0D=ResetScores, 0x0F=AssignDealer, 0x10=OpenSeat, 0x11=ChangeOption, 0x15=MoveWallBreak, 0x16=TogglePublicHand, 0x17=MoveTile, 0x18=MoveDealerIndicator"
},
{
"name": "Data",
"type": "byte[]",
"size": "var",
"description": "Command-specific data (varies by subcommand)"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 64
}
}
]
}

View file

@ -0,0 +1,64 @@
{
"category": "Map",
"packets": [
{
"id": "0x56",
"name": "Map Command",
"description": "Client sends map pin commands for editable map items. Commands include adding, inserting, changing, and removing pins.",
"direction": "incoming",
"isDynamic": false,
"size": 11,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x56",
"description": "Packet identifier"
},
{
"name": "Map Serial",
"type": "uint",
"size": 4,
"description": "Serial of the map item"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"description": "Map pin command type",
"enum": [
{ "value": "1", "name": "AddPin", "description": "Add a new pin" },
{ "value": "2", "name": "InsertPin", "description": "Insert pin at position" },
{ "value": "3", "name": "ChangePin", "description": "Change existing pin" },
{ "value": "4", "name": "RemovePin", "description": "Remove a pin" },
{ "value": "5", "name": "ClearPins", "description": "Clear all pins" },
{ "value": "6", "name": "ToggleEditable", "description": "Toggle edit mode" }
]
},
{
"name": "Number",
"type": "byte",
"size": 1,
"description": "Pin number (for insert, change, remove commands)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X coordinate of pin"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y coordinate of pin"
}
],
"source": {
"file": "Projects/UOContent/Items/Maps/MapItemPackets.cs",
"line": 28
}
}
]
}

View file

@ -1,97 +1,225 @@
{
"category": "Message",
"packets": [
{
"id": "0x03",
"name": "ASCII Speech",
"description": "Client sends ASCII-encoded speech message.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x03", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{
"name": "type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Message type",
"values": [
{ "value": 0, "name": "Regular", "description": "Normal speech" },
{ "value": 1, "name": "System", "description": "System message" },
{ "value": 2, "name": "Emote", "description": "Emote (*action*)" },
{ "value": 6, "name": "Label", "description": "Object label" },
{ "value": 7, "name": "Focus", "description": "Focused message" },
{ "value": 8, "name": "Whisper", "description": "Whisper" },
{ "value": 9, "name": "Yell", "description": "Yell" },
{ "value": 10, "name": "Spell", "description": "Spell words" },
{ "value": 13, "name": "Guild", "description": "Guild chat" },
{ "value": 14, "name": "Alliance", "description": "Alliance chat" },
{ "value": 15, "name": "Command", "description": "Command" }
]
},
{ "name": "hue", "type": "short", "size": 2, "description": "Text color hue" },
{ "name": "font", "type": "short", "size": 2, "description": "Font ID" },
{ "name": "text", "type": "ascii-null", "description": "Speech text (max 128 chars)" }
],
"related": [
{ "id": "0x1C", "relationship": "response", "note": "ASCII Message sent to other clients" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMessagePackets.cs",
"line": 31
}
},
{
"id": "0xAD",
"name": "Unicode Speech",
"description": "Client sends Unicode-encoded speech message with optional keywords.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xAD", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{
"name": "type",
"type": "bitfield",
"size": 1,
"description": "Message type with possible Encoded flag",
"flags": [
{ "bit": "0x0F", "name": "MessageType", "description": "Base message type (see 0x03)" },
{ "bit": "0xC0", "name": "Encoded", "description": "If set, packet contains encoded keywords" }
]
},
{ "name": "hue", "type": "short", "size": 2, "description": "Text color hue" },
{ "name": "font", "type": "short", "size": 2, "description": "Font ID" },
{ "name": "language", "type": "ascii", "size": 4, "description": "Language code (e.g., 'ENU')" },
{
"name": "encodedKeywords",
"type": "conditional",
"condition": "type & 0xC0 != 0",
"fields": [
{ "name": "keywordValue", "type": "short", "size": 2, "description": "Keyword count (upper 12 bits) and first hold value (lower 4 bits)" },
{ "name": "keywords", "type": "byte[]", "description": "Packed keyword IDs" },
{ "name": "text", "type": "utf8-null", "description": "Speech text (UTF-8 when encoded)" }
]
},
{
"name": "unicodeText",
"type": "conditional",
"condition": "type & 0xC0 == 0",
"fields": [
{ "name": "text", "type": "unicode-be-null", "description": "Speech text (Big Endian Unicode)" }
]
}
],
"related": [
{ "id": "0xAE", "relationship": "response", "note": "Unicode Message sent to other clients" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMessagePackets.cs",
"line": 58
}
}
]
{
"category": "Message",
"packets": [
{
"id": "0x03",
"name": "ASCII Speech",
"description": "Client sends ASCII-encoded speech message.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x03",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Message type",
"values": [
{
"value": 0,
"name": "Regular",
"description": "Normal speech"
},
{
"value": 1,
"name": "System",
"description": "System message"
},
{
"value": 2,
"name": "Emote",
"description": "Emote (*action*)"
},
{
"value": 6,
"name": "Label",
"description": "Object label"
},
{
"value": 7,
"name": "Focus",
"description": "Focused message"
},
{
"value": 8,
"name": "Whisper",
"description": "Whisper"
},
{
"value": 9,
"name": "Yell",
"description": "Yell"
},
{
"value": 10,
"name": "Spell",
"description": "Spell words"
},
{
"value": 13,
"name": "Guild",
"description": "Guild chat"
},
{
"value": 14,
"name": "Alliance",
"description": "Alliance chat"
},
{
"value": 15,
"name": "Command",
"description": "Command"
}
]
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Text",
"type": "ascii-t",
"description": "Speech text (max 128 chars)"
}
],
"related": [
{
"id": "0x1C",
"relationship": "response",
"note": "ASCII Message sent to other clients"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMessagePackets.cs",
"line": 31
}
},
{
"id": "0xAD",
"name": "Unicode Speech",
"description": "Client sends Unicode-encoded speech message with optional keywords.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xAD",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Type",
"type": "bitfield",
"size": 1,
"description": "Message type with possible Encoded flag",
"flags": [
{
"bit": "3-0",
"name": "Message Type",
"description": "Base message type (see 0x03)"
},
{
"bit": "7-6",
"name": "Encoded",
"description": "If set, packet contains encoded keywords"
}
]
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Language",
"type": "ascii",
"size": 4,
"description": "Language code (e.g., \u0027ENU\u0027)"
},
{
"name": "Encoded Keywords",
"type": "conditional",
"condition": "type \u0026 0xC0 != 0",
"fields": [
{
"name": "Keyword Value",
"type": "short",
"size": 2,
"description": "Keyword count (upper 12 bits) and first hold value (lower 4 bits)"
},
{
"name": "Keywords",
"type": "byte[]",
"description": "Packed keyword IDs"
},
{
"name": "Text",
"type": "utf8-t",
"description": "Speech text (UTF-8 when encoded)"
}
]
},
{
"name": "Unicode Text",
"type": "conditional",
"condition": "type \u0026 0xC0 == 0",
"fields": [
{
"name": "Text",
"type": "utf16be-t",
"description": "Speech text (Big Endian Unicode)"
}
]
}
],
"related": [
{
"id": "0xAE",
"relationship": "response",
"note": "Unicode Message sent to other clients"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMessagePackets.cs",
"line": 58
}
}
]
}

View file

@ -1,132 +1,236 @@
{
"category": "Mobile",
"packets": [
{
"id": "0x6F",
"name": "Secure Trade",
"description": "Client interacts with a secure trade window.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x6F", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{
"name": "action",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Trade action type",
"values": [
{ "value": 1, "name": "Cancel", "description": "Cancel the trade" },
{ "value": 2, "name": "Check", "description": "Toggle accept checkbox" },
{ "value": 3, "name": "UpdateGold", "description": "Update virtual gold/platinum amounts" }
]
},
{ "name": "containerSerial", "type": "uint", "size": 4, "description": "Serial of the trade container" },
{
"name": "checkData",
"type": "conditional",
"condition": "action == 2",
"fields": [
{ "name": "accepted", "type": "int", "size": 4, "description": "Non-zero if accepting trade" }
]
},
{
"name": "goldData",
"type": "conditional",
"condition": "action == 3",
"fields": [
{ "name": "gold", "type": "int", "size": 4, "description": "Gold amount to trade" },
{ "name": "platinum", "type": "int", "size": 4, "description": "Platinum amount to trade" }
]
}
],
"related": [
{ "id": "0x6F", "relationship": "response", "note": "Server sends Secure Trade packet updates" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 93
}
},
{
"id": "0x75",
"name": "Rename Request",
"description": "Client requests to rename a mobile (pet).",
"direction": "incoming",
"isDynamic": false,
"size": 35,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x75", "description": "Packet identifier" },
{ "name": "targetSerial", "type": "uint", "size": 4, "description": "Serial of mobile to rename" },
{ "name": "newName", "type": "ascii", "size": 30, "description": "New name for the mobile" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 32
}
},
{
"id": "0x98",
"name": "Mobile Name Request",
"description": "Client requests the name of a mobile.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x98", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "mobileSerial", "type": "uint", "size": 4, "description": "Serial of mobile to query" }
],
"related": [
{ "id": "0x98", "relationship": "response", "note": "Server sends Mobile Name response" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 43
}
},
{
"id": "0xB8",
"name": "Profile Request",
"description": "Client requests to view or edit a mobile's profile.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xB8", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{
"name": "mode",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Request mode",
"values": [
{ "value": 0, "name": "Display", "description": "Request to view profile" },
{ "value": 1, "name": "Edit", "description": "Request to edit profile" }
]
},
{ "name": "mobileSerial", "type": "uint", "size": 4, "description": "Serial of target mobile" },
{
"name": "editData",
"type": "conditional",
"condition": "mode == 1",
"fields": [
{ "name": "padding", "type": "short", "size": 2, "description": "Unused padding" },
{ "name": "textLength", "type": "ushort", "size": 2, "description": "Length of text in characters" },
{ "name": "text", "type": "unicode-be", "description": "New profile text" }
]
}
],
"related": [
{ "id": "0xB8", "relationship": "response", "note": "Display Profile packet" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 53
}
}
]
}
{
"category": "Mobile",
"packets": [
{
"id": "0x6F",
"name": "Secure Trade",
"description": "Client interacts with a secure trade window.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Action",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Trade action type",
"values": [
{
"value": 1,
"name": "Cancel",
"description": "Cancel the trade"
},
{
"value": 2,
"name": "Check",
"description": "Toggle accept checkbox"
},
{
"value": 3,
"name": "Update Gold",
"description": "Update virtual gold/platinum amounts"
}
]
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of the trade container"
},
{
"name": "Check Data",
"type": "conditional",
"condition": "action == 2",
"fields": [
{
"name": "Accepted",
"type": "int",
"size": 4,
"description": "Non-zero if accepting trade"
}
]
},
{
"name": "Gold Data",
"type": "conditional",
"condition": "action == 3",
"fields": [
{
"name": "Gold",
"type": "int",
"size": 4,
"description": "Gold amount to trade"
},
{
"name": "Platinum",
"type": "int",
"size": 4,
"description": "Platinum amount to trade"
}
]
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 93
}
},
{
"id": "0x75",
"name": "Rename Request",
"description": "Client requests to rename a mobile (pet).",
"direction": "incoming",
"isDynamic": false,
"size": 35,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x75",
"description": "Packet identifier"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of mobile to rename"
},
{
"name": "New Name",
"type": "ascii",
"size": 30,
"description": "New name for the mobile"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 32
}
},
{
"id": "0x98",
"name": "Mobile Name Request",
"description": "Client requests the name of a mobile.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x98",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of mobile to query"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 43
}
},
{
"id": "0xB8",
"name": "Profile Request",
"description": "Client requests to view or edit a mobile\u0027s profile.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB8",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Mode",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Request mode",
"values": [
{
"value": 0,
"name": "Display",
"description": "Request to view profile"
},
{
"value": 1,
"name": "Edit",
"description": "Request to edit profile"
}
]
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of target mobile"
},
{
"name": "Edit Data",
"type": "conditional",
"condition": "mode == 1",
"fields": [
{
"name": "Padding",
"type": "short",
"size": 2,
"description": "Unused padding"
},
{
"name": "Text Length",
"type": "ushort",
"size": 2,
"description": "Length of text in characters"
},
{
"name": "Text",
"type": "utf16be",
"description": "New profile text"
}
]
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 53
}
}
]
}

View file

@ -1,27 +1,56 @@
{
"category": "Movement",
"packets": [
{
"id": "0x02",
"name": "Movement Request",
"description": "Sent by the client when the player attempts to move in a direction. The server responds with either MovementAck (0x22) if successful or MovementRej (0x21) if blocked.",
"direction": "incoming",
"isDynamic": false,
"size": 7,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x02", "description": "Packet identifier" },
{ "name": "direction", "type": "byte", "size": 1, "description": "Movement direction (0-7). Bit 0x80 indicates running." },
{ "name": "sequence", "type": "byte", "size": 1, "description": "Movement sequence number (1-255, wraps). Used for ack/rej matching." },
{ "name": "fastwalkKey", "type": "uint", "size": 4, "description": "Anti-speedhack prevention key. Set to 0 if fastwalk prevention is disabled." }
],
"related": [
{ "id": "0x21", "relationship": "rej", "note": "Sent if movement is blocked" },
{ "id": "0x22", "relationship": "ack", "note": "Sent if movement is successful" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMovementPackets.cs",
"line": 83
}
}
]
{
"category": "Movement",
"packets": [
{
"id": "0x02",
"name": "Movement Request",
"description": "Sent by the client when the player attempts to move in a direction. The server responds with either MovementAck (0x22) if successful or MovementRej (0x21) if blocked.",
"direction": "incoming",
"isDynamic": false,
"size": 7,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x02",
"description": "Packet identifier"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Movement direction (0-7). Bit 0x80 indicates running."
},
{
"name": "Sequence",
"type": "byte",
"size": 1,
"description": "Movement sequence number (1-255, wraps). Used for ack/rej matching."
},
{
"name": "Fastwalk Key",
"type": "uint",
"size": 4,
"description": "Anti-speedhack prevention key. Set to 0 if fastwalk prevention is disabled."
}
],
"related": [
{
"id": "0x21",
"relationship": "rej",
"note": "Sent if movement is blocked"
},
{
"id": "0x22",
"relationship": "ack",
"note": "Sent if movement is successful"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMovementPackets.cs",
"line": 83
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,55 +1,117 @@
{
"category": "Targeting",
"packets": [
{
"id": "0x6C",
"name": "Target Response",
"description": "Client responds to a target cursor request.",
"direction": "incoming",
"isDynamic": false,
"size": 19,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x6C", "description": "Packet identifier" },
{
"name": "type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Target type",
"values": [
{ "value": 0, "name": "Object", "description": "Targeting a specific object (mobile/item)" },
{ "value": 1, "name": "Location", "description": "Targeting a location/tile" }
]
},
{ "name": "targetId", "type": "int", "size": 4, "description": "Target cursor ID to match request" },
{
"name": "flags",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Target flags",
"values": [
{ "value": 0, "name": "Neutral", "description": "Neutral targeting" },
{ "value": 1, "name": "Harmful", "description": "Harmful action" },
{ "value": 2, "name": "Beneficial", "description": "Beneficial action" },
{ "value": 3, "name": "Cancel", "description": "Targeting canceled" }
]
},
{ "name": "targetSerial", "type": "uint", "size": 4, "description": "Serial of targeted object (0 for ground)" },
{ "name": "x", "type": "short", "size": 2, "description": "Target X coordinate (-1 if canceled)" },
{ "name": "y", "type": "short", "size": 2, "description": "Target Y coordinate (-1 if canceled)" },
{ "name": "unknown", "type": "byte", "size": 1, "description": "Unknown (typically 0)" },
{ "name": "z", "type": "sbyte", "size": 1, "description": "Target Z coordinate" },
{ "name": "graphic", "type": "ushort", "size": 2, "description": "Graphic ID of targeted tile (0 for land)" }
],
"related": [
{ "id": "0x6C", "relationship": "request", "note": "Target Request packet that initiated this" }
],
"notes": "If x == -1 && y == -1 && serial is invalid, user pressed Escape to cancel targeting.",
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingTargetingPackets.cs",
"line": 28
}
}
]
}
{
"category": "Targeting",
"packets": [
{
"id": "0x6C",
"name": "Target Response",
"description": "Client responds to a target cursor request.",
"direction": "incoming",
"isDynamic": false,
"size": 19,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6C",
"description": "Packet identifier"
},
{
"name": "Type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Target type",
"values": [
{
"value": 0,
"name": "Object",
"description": "Targeting a specific object (mobile/item)"
},
{
"value": 1,
"name": "Location",
"description": "Targeting a location/tile"
}
]
},
{
"name": "Target ID",
"type": "int",
"size": 4,
"description": "Target cursor ID to match request"
},
{
"name": "Flags",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Target flags",
"values": [
{
"value": 0,
"name": "Neutral",
"description": "Neutral targeting"
},
{
"value": 1,
"name": "Harmful",
"description": "Harmful action"
},
{
"value": 2,
"name": "Beneficial",
"description": "Beneficial action"
},
{
"value": 3,
"name": "Cancel",
"description": "Targeting canceled"
}
]
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of targeted object (0 for ground)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Target X coordinate (-1 if canceled)"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Target Y coordinate (-1 if canceled)"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown (typically 0)"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Target Z coordinate"
},
{
"name": "Graphic",
"type": "ushort",
"size": 2,
"description": "Graphic ID of targeted tile (0 for land)"
}
],
"notes": "If x == -1 \u0026\u0026 y == -1 \u0026\u0026 serial is invalid, user pressed Escape to cancel targeting.",
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingTargetingPackets.cs",
"line": 28
}
}
]
}

View file

@ -1,70 +1,145 @@
{
"category": "Vendor",
"packets": [
{
"id": "0x3B",
"name": "Vendor Buy Reply",
"description": "Client confirms items to purchase from a vendor.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x3B", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "vendorSerial", "type": "uint", "size": 4, "description": "Serial of the vendor" },
{ "name": "flag", "type": "byte", "size": 1, "description": "0x00 = buy, 0x02 = cancel" },
{
"name": "items",
"type": "loop",
"loop": {
"untilEnd": true,
"fields": [
{ "name": "layer", "type": "byte", "size": 1, "description": "Layer/container index" },
{ "name": "itemSerial", "type": "uint", "size": 4, "description": "Serial of item to buy" },
{ "name": "amount", "type": "short", "size": 2, "description": "Amount to purchase" }
]
}
}
],
"related": [
{ "id": "0x74", "relationship": "request", "note": "Vendor Buy List packet that initiated this" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingVendorPackets.cs",
"line": 25
}
},
{
"id": "0x9F",
"name": "Vendor Sell Reply",
"description": "Client confirms items to sell to a vendor.",
"direction": "incoming",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x9F", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "vendorSerial", "type": "uint", "size": 4, "description": "Serial of the vendor" },
{ "name": "itemCount", "type": "ushort", "size": 2, "description": "Number of items to sell" },
{
"name": "items",
"type": "loop",
"loop": {
"countField": "itemCount",
"fields": [
{ "name": "itemSerial", "type": "uint", "size": 4, "description": "Serial of item to sell" },
{ "name": "amount", "type": "short", "size": 2, "description": "Amount to sell" }
]
}
}
],
"related": [
{ "id": "0x9E", "relationship": "request", "note": "Vendor Sell List packet that initiated this" }
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingVendorPackets.cs",
"line": 26
}
}
]
{
"category": "Vendor",
"packets": [
{
"id": "0x3B",
"name": "Vendor Buy Reply",
"description": "Client confirms items to purchase from a vendor.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x3B",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Vendor Serial",
"type": "uint",
"size": 4,
"description": "Serial of the vendor"
},
{
"name": "Flag",
"type": "byte",
"size": 1,
"description": "0x00 = buy, 0x02 = cancel"
},
{
"name": "Items",
"type": "loop",
"loop": {
"untilEnd": true,
"fields": [
{
"name": "Layer",
"type": "byte",
"size": 1,
"description": "Layer/container index"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of item to buy"
},
{
"name": "Amount",
"type": "short",
"size": 2,
"description": "Amount to purchase"
}
]
}
}
],
"related": [
{
"id": "0x74",
"relationship": "request",
"note": "Vendor Buy List packet that initiated this"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingVendorPackets.cs",
"line": 25
}
},
{
"id": "0x9F",
"name": "Vendor Sell Reply",
"description": "Client confirms items to sell to a vendor.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x9F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Vendor Serial",
"type": "uint",
"size": 4,
"description": "Serial of the vendor"
},
{
"name": "Item Count",
"type": "ushort",
"size": 2,
"description": "Number of items to sell"
},
{
"name": "Items",
"type": "loop",
"loop": {
"countField": "itemCount",
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of item to sell"
},
{
"name": "Amount",
"type": "short",
"size": 2,
"description": "Amount to sell"
}
]
}
}
],
"related": [
{
"id": "0x9E",
"relationship": "request",
"note": "Vendor Sell List packet that initiated this"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingVendorPackets.cs",
"line": 26
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,138 @@
{
"category": "Quest Arrow",
"packets": [
{
"id": "0xBA",
"name": "Quest Arrow",
"description": "Sets or cancels the quest tracking arrow on the client.",
"direction": "outgoing",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"name": "Pre-High Seas Set Arrow",
"version": "pre-HS",
"condition": "command == 1 (Set), pre-HighSeas client",
"size": 6,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBA",
"description": "Packet identifier"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Set arrow command"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Target X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Target Y coordinate"
}
]
},
{
"name": "Pre-High Seas Cancel Arrow",
"version": "pre-HS",
"condition": "command == 0 (Cancel), pre-HighSeas client",
"size": 6,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBA",
"description": "Packet identifier"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Cancel arrow command"
},
{
"name": "X",
"type": "short",
"size": 2,
"value": "-1",
"description": "X coordinate (-1)"
},
{
"name": "Y",
"type": "short",
"size": 2,
"value": "-1",
"description": "Y coordinate (-1)"
}
]
},
{
"name": "High Seas",
"version": "HS+",
"condition": "HighSeas client (7.0.9.0+)",
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBA",
"description": "Packet identifier"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"description": "Command (0 = cancel, 1 = set)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Target X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Target Y coordinate"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of tracked target"
}
]
}
],
"related": [
{
"id": "0xBF/0x07",
"relationship": "request",
"note": "Quest Arrow Click from client"
}
],
"clientVersion": {
"feature": "HighSeas (7.0.9.0+) adds target serial"
},
"source": {
"file": "Projects/UOContent/Skills/Tracking/OutgoingArrowPackets.cs",
"line": 29
}
}
]
}

View file

@ -0,0 +1,75 @@
{
"category": "Assistant",
"packets": [
{
"id": "0xF0",
"name": "Assistant Handshake",
"description": "Server sends handshake to negotiate assistant features with Razor-style clients. Contains disallowed feature flags.",
"direction": "outgoing",
"isDynamic": false,
"size": 12,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF0",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x000C",
"description": "Packet length (12)"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0xFE",
"description": "Handshake command"
},
{
"name": "Disallowed Features",
"type": "ulong",
"size": 8,
"description": "Bitmask of disallowed assistant features"
}
],
"notes": "Used for assistant negotiation with Razor Community Edition and similar clients. If negotiation fails within 30 seconds, the server may kick the player.",
"source": {
"file": "Projects/UOContent/Assistants/AssistantHandler.cs",
"line": 132
}
},
{
"id": "0xBE",
"name": "Assistant Version Request",
"description": "Server requests assistant version information from the client.",
"direction": "outgoing",
"isDynamic": false,
"size": 3,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBE",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0003",
"description": "Packet length (3)"
}
],
"source": {
"file": "Projects/UOContent/Assistants/AssistantHandler.cs",
"line": 122
}
}
]
}

View file

@ -0,0 +1,182 @@
{
"category": "Boat",
"packets": [
{
"id": "0xF6",
"name": "Boat Move (High Seas)",
"description": "Sent when a boat moves, containing the boat\u0027s new position and all entities on board with their updated positions.",
"direction": "outgoing",
"isDynamic": true,
"size": "18 + (entityCount x 10)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF6",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Boat Serial",
"type": "uint",
"size": 4,
"description": "Serial of the boat"
},
{
"name": "Speed",
"type": "byte",
"size": 1,
"description": "Boat movement speed"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Movement direction (0-7)"
},
{
"name": "Facing",
"type": "byte",
"size": 1,
"description": "Boat facing direction"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Boat X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Boat Y coordinate"
},
{
"name": "Z",
"type": "short",
"size": 2,
"description": "Boat Z coordinate"
},
{
"name": "Entity Count",
"type": "short",
"size": 2,
"description": "Number of entities on boat (max 65535)"
},
{
"name": "Entities",
"type": "array",
"description": "Entities on the boat with their positions",
"loop": {
"countField": "entityCount",
"fields": [
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Entity X coordinate (boat offset applied)"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Entity Y coordinate (boat offset applied)"
},
{
"name": "Z",
"type": "short",
"size": 2,
"description": "Entity Z coordinate"
}
]
}
}
],
"clientVersion": {
"feature": "HighSeas"
},
"source": {
"file": "Projects/UOContent/Multis/Boats/BoatPackets.cs",
"line": 27
},
"notes": "High Seas expansion only. Entities include mobiles and items on the boat. Coordinates include the boat\u0027s movement offset."
},
{
"id": "0xF7",
"name": "Packet Container",
"description": "Container packet for batching multiple entity packets. Used for efficient display of boats and other groups of entities.",
"direction": "outgoing",
"isDynamic": true,
"size": "5+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Total packet length"
},
{
"name": "Packet Count",
"type": "ushort",
"size": 2,
"description": "Number of embedded packets"
},
{
"name": "Packets",
"type": "array",
"description": "Embedded packets (typically 0xF3 World Entity packets)",
"loop": {
"countField": "packetCount",
"fields": [
{
"name": "Embedded Packet",
"type": "packet",
"description": "Complete embedded packet (0xF3 World Entity or similar)"
}
]
}
}
],
"related": [
{
"id": "0xF3",
"relationship": "contains",
"note": "Typically contains World Entity packets"
},
{
"id": "0xF6",
"relationship": "variant",
"note": "Used alongside Move Boat HS for boat display"
}
],
"clientVersion": {
"feature": "HighSeas"
},
"notes": "Uses PacketContainerBuilder for dynamic growth when embedding many packets. Minimum packet length is 5 bytes (header only).",
"source": {
"file": "Projects/Server/Network/Packets/PacketContainerBuilder.cs",
"line": 23
}
}
]
}

View file

@ -0,0 +1,217 @@
{
"category": "Book",
"packets": [
{
"id": "0x66",
"name": "Book Content",
"description": "Sends full book content including all pages and lines.",
"direction": "outgoing",
"isDynamic": true,
"size": "9+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x66",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages"
},
{
"name": "Pages",
"type": "loop",
"description": "Page contents",
"loop": {
"countField": "pageCount",
"fields": [
{
"name": "Page Number",
"type": "ushort",
"size": 2,
"description": "Page number (1-indexed)"
},
{
"name": "Line Count",
"type": "ushort",
"size": 2,
"description": "Number of lines on page"
},
{
"name": "Lines",
"type": "loop",
"description": "Lines on the page",
"loop": {
"countField": "lineCount",
"fields": [
{
"name": "Text",
"type": "utf8-t",
"description": "Line text"
}
]
}
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Items/Books/BookPackets.cs",
"line": 136
}
},
{
"id": "0xD4",
"name": "Book Header",
"description": "Sends book cover information (title, author, writable status).",
"direction": "outgoing",
"isDynamic": true,
"size": "17+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD4",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book"
},
{
"name": "Flag On",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Flag on (always 1)"
},
{
"name": "Writable",
"type": "bool",
"size": 1,
"description": "True if book is writable and in range"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages"
},
{
"name": "Title Length",
"type": "ushort",
"size": 2,
"description": "Length of title + 1 (for null)"
},
{
"name": "Title",
"type": "utf8-t",
"description": "Book title"
},
{
"name": "Author Length",
"type": "ushort",
"size": 2,
"description": "Length of author + 1 (for null)"
},
{
"name": "Author",
"type": "utf8-t",
"description": "Book author"
}
],
"related": [
{
"id": "0x93",
"relationship": "variant",
"note": "Old Book Header format (outgoing)"
}
],
"source": {
"file": "Projects/UOContent/Items/Books/BookPackets.cs",
"line": 184
}
},
{
"id": "0x93",
"name": "Old Book Header",
"description": "Old format for book cover (fixed-size ASCII strings).",
"direction": "outgoing",
"isDynamic": false,
"size": 99,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x93",
"description": "Packet identifier"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Book flags"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages"
},
{
"name": "Title",
"type": "ascii",
"size": 60,
"description": "Book title (fixed 60 bytes)"
},
{
"name": "Author",
"type": "ascii",
"size": 30,
"description": "Book author (fixed 30 bytes)"
}
],
"related": [
{
"id": "0xD4",
"relationship": "variant",
"note": "New Book Header format (outgoing)"
}
],
"notes": "Old format used by older clients. Title and author are fixed-size ASCII."
}
]
}

View file

@ -0,0 +1,304 @@
{
"category": "Buff Icon",
"packets": [
{
"id": "0xDF",
"name": "Buff/Debuff System",
"description": "Manages buff and debuff icons displayed on the client.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Remove Buff",
"condition": "command == 0 (Remove)",
"size": 15,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "15",
"description": "Packet length"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of the mobile"
},
{
"name": "Icon ID",
"type": "short",
"size": 2,
"description": "Buff icon ID"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0000",
"description": "Remove command"
},
{
"name": "Unused",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
}
]
},
{
"name": "Add Buff (No Args)",
"condition": "command == 1 (Add), no arguments",
"size": 46,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "46",
"description": "Packet length"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of the mobile"
},
{
"name": "Icon ID",
"type": "short",
"size": 2,
"description": "Buff icon ID"
},
{
"name": "Command1",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Add command"
},
{
"name": "Unused1",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Icon Id2",
"type": "short",
"size": 2,
"description": "Buff icon ID (repeated)"
},
{
"name": "Command2",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Add command (repeated)"
},
{
"name": "Unused2",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Duration",
"type": "short",
"size": 2,
"description": "Duration in seconds"
},
{
"name": "Padding",
"type": "byte[]",
"size": 3,
"description": "Padding (zeros)"
},
{
"name": "Title Cliloc",
"type": "int",
"size": 4,
"description": "Title cliloc number"
},
{
"name": "Secondary Cliloc",
"type": "int",
"size": 4,
"description": "Secondary cliloc number"
},
{
"name": "Empty Args",
"type": "byte[]",
"size": 10,
"description": "Empty arguments (zeros)"
}
]
},
{
"name": "Add Buff (With Args)",
"condition": "command == 1 (Add), with arguments",
"size": "52 + (args.Length x 2)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of the mobile"
},
{
"name": "Icon ID",
"type": "short",
"size": 2,
"description": "Buff icon ID"
},
{
"name": "Command1",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Add command"
},
{
"name": "Unused1",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Icon Id2",
"type": "short",
"size": 2,
"description": "Buff icon ID (repeated)"
},
{
"name": "Command2",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Add command (repeated)"
},
{
"name": "Unused2",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Duration",
"type": "short",
"size": 2,
"description": "Duration in seconds"
},
{
"name": "Padding",
"type": "byte[]",
"size": 3,
"description": "Padding (zeros)"
},
{
"name": "Title Cliloc",
"type": "int",
"size": 4,
"description": "Title cliloc number"
},
{
"name": "Secondary Cliloc",
"type": "int",
"size": 4,
"description": "Secondary cliloc number"
},
{
"name": "Unused3",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Has Args",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Has arguments flag"
},
{
"name": "Unused4",
"type": "ushort",
"size": 2,
"value": "0",
"description": "Unused"
},
{
"name": "Tab Prefix",
"type": "utf16le",
"size": 2,
"value": "\\t",
"description": "Tab character prefix"
},
{
"name": "Arguments",
"type": "utf16le-t",
"description": "Cliloc arguments"
},
{
"name": "Has Args2",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Has arguments flag (repeated)"
},
{
"name": "Unused5",
"type": "ushort",
"size": 2,
"value": "0",
"description": "Unused"
}
]
}
],
"clientVersion": {
"min": "5.0.2b",
"feature": "BuffIcon"
},
"source": {
"file": "Projects/UOContent/Engines/BuffIcons/BuffIconPackets.cs",
"line": 8
}
}
]
}

View file

@ -0,0 +1,279 @@
{
"category": "Bulletin Board",
"packets": [
{
"id": "0x71",
"name": "Bulletin Board",
"description": "Bulletin board display and message packets.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Display Board",
"version": "0x00",
"condition": "command == 0x00",
"size": 38,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x71",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "38",
"description": "Packet length"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Display board command"
},
{
"name": "Board Serial",
"type": "uint",
"size": 4,
"description": "Serial of the bulletin board"
},
{
"name": "Board Name",
"type": "utf8",
"size": 30,
"description": "Board name (null-padded to 30 bytes)"
}
]
},
{
"name": "Message Header",
"version": "0x01",
"condition": "command == 0x01",
"size": "22+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x71",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Message header command"
},
{
"name": "Board Serial",
"type": "uint",
"size": 4,
"description": "Serial of the bulletin board"
},
{
"name": "Message Serial",
"type": "uint",
"size": 4,
"description": "Serial of the message"
},
{
"name": "Thread Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent thread (0 if root)"
},
{
"name": "Poster Length",
"type": "byte",
"size": 1,
"description": "Length of poster name"
},
{
"name": "Poster",
"type": "utf8-t",
"description": "Poster name"
},
{
"name": "Subject Length",
"type": "byte",
"size": 1,
"description": "Length of subject"
},
{
"name": "Subject",
"type": "utf8-t",
"description": "Message subject"
},
{
"name": "Time Length",
"type": "byte",
"size": 1,
"description": "Length of time string"
},
{
"name": "Time",
"type": "utf8-t",
"description": "Posted time string"
}
]
},
{
"name": "Message Content",
"version": "0x02",
"condition": "command == 0x02",
"size": "22+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x71",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x02",
"description": "Message content command"
},
{
"name": "Board Serial",
"type": "uint",
"size": 4,
"description": "Serial of the bulletin board"
},
{
"name": "Message Serial",
"type": "uint",
"size": 4,
"description": "Serial of the message"
},
{
"name": "Poster Length",
"type": "byte",
"size": 1,
"description": "Length of poster name"
},
{
"name": "Poster",
"type": "utf8-t",
"description": "Poster name"
},
{
"name": "Subject Length",
"type": "byte",
"size": 1,
"description": "Length of subject"
},
{
"name": "Subject",
"type": "utf8-t",
"description": "Message subject"
},
{
"name": "Time Length",
"type": "byte",
"size": 1,
"description": "Length of time string"
},
{
"name": "Time",
"type": "utf8-t",
"description": "Posted time string"
},
{
"name": "Poster Body",
"type": "short",
"size": 2,
"description": "Poster body graphic"
},
{
"name": "Poster Hue",
"type": "short",
"size": 2,
"description": "Poster body hue"
},
{
"name": "Equip Count",
"type": "byte",
"size": 1,
"description": "Number of equipment items"
},
{
"name": "Equipment",
"type": "loop",
"description": "Poster\u0027s equipment",
"loop": {
"countField": "equipCount",
"fields": [
{
"name": "Item ID",
"type": "short",
"size": 2,
"description": "Equipment item graphic"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Equipment hue"
}
]
}
},
{
"name": "Line Count",
"type": "byte",
"size": 1,
"description": "Number of text lines"
},
{
"name": "Lines",
"type": "loop",
"description": "Message lines",
"loop": {
"countField": "lineCount",
"fields": [
{
"name": "Line Length",
"type": "byte",
"size": 1,
"description": "Line length"
},
{
"name": "Line",
"type": "utf8",
"description": "Line text with 2-byte terminator (old client bug)"
}
]
}
}
]
}
],
"source": {
"file": "Projects/UOContent/Items/Bulletin Boards/BulletinBoardPackets.cs",
"line": 168
}
}
]
}

View file

@ -0,0 +1,69 @@
{
"category": "Chat",
"packets": [
{
"id": "0xB2",
"name": "Chat Message",
"description": "Server sends chat system messages and commands to the client.",
"direction": "outgoing",
"isDynamic": true,
"size": "13+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB2",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"description": "Chat command number (original number minus 20)"
},
{
"name": "Language",
"type": "ascii",
"size": 4,
"description": "Language code (e.g., \u0027enu\u0027 for English)"
},
{
"name": "Param 1",
"type": "utf16be-t",
"description": "First parameter (Big Endian Unicode, null-terminated)"
},
{
"name": "Param 2",
"type": "utf16be-t",
"description": "Second parameter (Big Endian Unicode, null-terminated)"
}
],
"related": [
{
"id": "0xB3",
"direction": "incoming",
"relationship": "request",
"note": "Client sends Chat Action"
},
{
"id": "0xB5",
"direction": "incoming",
"relationship": "request",
"note": "Client sends Open Chat Window Request"
}
],
"notes": "Part of the in-game chat system. Command numbers are offset by -20 from original values.",
"source": {
"file": "Projects/UOContent/Engines/Chat/ChatPackets.cs",
"line": 104
}
}
]
}

View file

@ -1,61 +1,120 @@
{
"category": "Combat",
"packets": [
{
"id": "0x2F",
"name": "Swing",
"description": "Notifies client of a melee swing between two mobiles.",
"direction": "outgoing",
"isDynamic": false,
"size": 10,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x2F", "description": "Packet identifier" },
{ "name": "unknown", "type": "byte", "size": 1, "value": "0x00", "description": "Unknown" },
{ "name": "attackerSerial", "type": "uint", "size": 4, "description": "Serial of attacker" },
{ "name": "defenderSerial", "type": "uint", "size": 4, "description": "Serial of defender" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingCombatPackets.cs",
"line": 23
}
},
{
"id": "0x72",
"name": "Set War Mode",
"description": "Sets the client's war/peace mode state.",
"direction": "outgoing",
"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": "unknown1", "type": "byte", "size": 1, "value": "0x00", "description": "Unknown" },
{ "name": "unknown2", "type": "byte", "size": 1, "value": "0x32", "description": "Unknown (50)" },
{ "name": "unknown3", "type": "byte", "size": 1, "value": "0x00", "description": "Unknown" }
],
"related": [
{ "id": "0x72", "relationship": "request", "note": "Set War Mode from client" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingCombatPackets.cs",
"line": 40
}
},
{
"id": "0xAA",
"name": "Change Combatant",
"description": "Notifies client of current combat target.",
"direction": "outgoing",
"isDynamic": false,
"size": 5,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xAA", "description": "Packet identifier" },
{ "name": "combatantSerial", "type": "uint", "size": 4, "description": "Serial of current combatant (0 = none)" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingCombatPackets.cs",
"line": 43
}
}
]
}
{
"category": "Combat",
"packets": [
{
"id": "0x2F",
"name": "Swing",
"description": "Notifies client of a melee swing between two mobiles.",
"direction": "outgoing",
"isDynamic": false,
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x2F",
"description": "Packet identifier"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Attacker Serial",
"type": "uint",
"size": 4,
"description": "Serial of attacker"
},
{
"name": "Defender Serial",
"type": "uint",
"size": 4,
"description": "Serial of defender"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingCombatPackets.cs",
"line": 23
}
},
{
"id": "0x72",
"name": "Set War Mode",
"description": "Sets the client\u0027s war/peace mode state.",
"direction": "outgoing",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x72",
"description": "Packet identifier"
},
{
"name": "Warmode",
"type": "bool",
"size": 1,
"description": "True = war mode, False = peace mode"
},
{
"name": "Unknown1",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Unknown2",
"type": "byte",
"size": 1,
"value": "0x32",
"description": "Unknown (50)"
},
{
"name": "Unknown3",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingCombatPackets.cs",
"line": 40
}
},
{
"id": "0xAA",
"name": "Change Combatant",
"description": "Notifies client of current combat target.",
"direction": "outgoing",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xAA",
"description": "Packet identifier"
},
{
"name": "Combatant Serial",
"type": "uint",
"size": 4,
"description": "Serial of current combatant (0 = none)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingCombatPackets.cs",
"line": 43
}
}
]
}

View file

@ -1,161 +1,574 @@
{
"category": "Container",
"packets": [
{
"id": "0x24",
"name": "Display Container",
"description": "Opens a container gump on the client.",
"direction": "outgoing",
"isDynamic": false,
"size": "7 (pre-HS) or 9 (HS+)",
"variants": [
{
"version": "pre-HighSeas",
"name": "Classic",
"size": 7,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x24", "description": "Packet identifier" },
{ "name": "containerSerial", "type": "uint", "size": 4, "description": "Serial of the container" },
{ "name": "gumpId", "type": "ushort", "size": 2, "description": "Gump graphic ID" }
]
},
{
"version": "HighSeas+",
"name": "High Seas Extended",
"condition": "Client version >= 7.0.9.0 (HighSeas)",
"size": 9,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x24", "description": "Packet identifier" },
{ "name": "containerSerial", "type": "uint", "size": 4, "description": "Serial of the container" },
{ "name": "gumpId", "type": "ushort", "size": 2, "description": "Gump graphic ID" },
{ "name": "containerType", "type": "short", "size": 2, "value": "0x007D", "description": "Container type (125)" }
]
}
],
"clientVersion": {
"feature": "HighSeas adds containerType field"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 108
}
},
{
"id": "0x25",
"name": "Container Content Update",
"description": "Updates a single item in a container.",
"direction": "outgoing",
"isDynamic": false,
"size": "20 (pre-6017) or 21 (6017+)",
"variants": [
{
"version": "pre-6017",
"name": "Classic",
"size": 20,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x25", "description": "Packet identifier" },
{ "name": "itemSerial", "type": "uint", "size": 4, "description": "Serial of the item" },
{ "name": "itemId", "type": "ushort", "size": 2, "description": "Item graphic ID" },
{ "name": "itemIdOffset", "type": "byte", "size": 1, "value": "0x00", "description": "Item ID offset (signed)" },
{ "name": "amount", "type": "ushort", "size": 2, "description": "Stack amount" },
{ "name": "x", "type": "short", "size": 2, "description": "X position in container" },
{ "name": "y", "type": "short", "size": 2, "description": "Y position in container" },
{ "name": "containerSerial", "type": "uint", "size": 4, "description": "Serial of parent container" },
{ "name": "hue", "type": "ushort", "size": 2, "description": "Item hue" }
]
},
{
"version": "6017+",
"name": "Container Grid Lines",
"condition": "Client version >= 6.0.1.7 (ContainerGridLines)",
"size": 21,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x25", "description": "Packet identifier" },
{ "name": "itemSerial", "type": "uint", "size": 4, "description": "Serial of the item" },
{ "name": "itemId", "type": "ushort", "size": 2, "description": "Item graphic ID" },
{ "name": "itemIdOffset", "type": "byte", "size": 1, "value": "0x00", "description": "Item ID offset (signed)" },
{ "name": "amount", "type": "ushort", "size": 2, "description": "Stack amount" },
{ "name": "x", "type": "short", "size": 2, "description": "X position in container" },
{ "name": "y", "type": "short", "size": 2, "description": "Y position in container" },
{ "name": "gridLocation", "type": "byte", "size": 1, "description": "Grid slot position" },
{ "name": "containerSerial", "type": "uint", "size": 4, "description": "Serial of parent container" },
{ "name": "hue", "type": "ushort", "size": 2, "description": "Item hue" }
]
}
],
"clientVersion": {
"feature": "ContainerGridLines adds gridLocation byte"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 127
}
},
{
"id": "0x3C",
"name": "Container Content",
"description": "Sends full contents of a container.",
"direction": "outgoing",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x3C", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "itemCount", "type": "ushort", "size": 2, "description": "Number of items" },
{
"name": "items",
"type": "loop",
"loop": {
"countField": "itemCount",
"itemSize": "19 (pre-6017) or 20 (6017+)",
"fields": [
{ "name": "itemSerial", "type": "uint", "size": 4, "description": "Serial of the item" },
{ "name": "itemId", "type": "ushort", "size": 2, "description": "Item graphic ID" },
{ "name": "itemIdOffset", "type": "byte", "size": 1, "description": "Item ID offset (signed)" },
{ "name": "amount", "type": "ushort", "size": 2, "description": "Stack amount" },
{ "name": "x", "type": "short", "size": 2, "description": "X position in container" },
{ "name": "y", "type": "short", "size": 2, "description": "Y position in container" },
{ "name": "gridLocation", "type": "byte", "size": 1, "description": "Grid slot (6017+ only)", "condition": "ContainerGridLines" },
{ "name": "containerSerial", "type": "uint", "size": 4, "description": "Serial of parent container" },
{ "name": "hue", "type": "ushort", "size": 2, "description": "Item hue" }
]
}
}
],
"clientVersion": {
"feature": "ContainerGridLines adds gridLocation byte per item"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 169
}
},
{
"id": "0xBF/0x1B",
"name": "New Spellbook Content",
"description": "Sends spellbook contents using AOS format.",
"direction": "outgoing",
"isDynamic": false,
"size": 23,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xBF", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "value": "23", "description": "Packet length" },
{ "name": "subCommand", "type": "short", "size": 2, "value": "0x1B", "description": "Subcommand (New Spellbook Content)" },
{ "name": "command", "type": "short", "size": 2, "value": "0x01", "description": "Command (always 1)" },
{ "name": "bookSerial", "type": "uint", "size": 4, "description": "Serial of the spellbook" },
{ "name": "graphic", "type": "short", "size": 2, "description": "Spellbook graphic ID" },
{ "name": "offset", "type": "short", "size": 2, "description": "Spell offset (circle/school start)" },
{ "name": "spellBits", "type": "ulong", "size": 8, "description": "64-bit mask of known spells (Little Endian)" }
],
"clientVersion": {
"min": "5.0.0a",
"feature": "NewSpellbook"
},
"notes": "Used when Core.AOS && ns.NewSpellbook. Otherwise, old 0x3C format is used.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 46
}
}
]
}
{
"category": "Container",
"packets": [
{
"id": "0x24",
"name": "Display Container",
"description": "Opens a container gump on the client.",
"direction": "outgoing",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"version": "pre-HighSeas",
"name": "Classic",
"size": 7,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x24",
"description": "Packet identifier"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of the container"
},
{
"name": "Gump ID",
"type": "ushort",
"size": 2,
"description": "Gump graphic ID"
}
]
},
{
"version": "HighSeas+",
"name": "High Seas Extended",
"condition": "Client version \u003e= 7.0.9.0 (HighSeas)",
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x24",
"description": "Packet identifier"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of the container"
},
{
"name": "Gump ID",
"type": "ushort",
"size": 2,
"description": "Gump graphic ID"
},
{
"name": "Container Type",
"type": "short",
"size": 2,
"value": "0x007D",
"description": "Container type (125)"
}
]
}
],
"clientVersion": {
"feature": "HighSeas adds containerType field"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 108
}
},
{
"id": "0x25",
"name": "Container Content Update",
"description": "Updates a single item in a container.",
"direction": "outgoing",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"version": "pre-6017",
"name": "Classic",
"size": 20,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x25",
"description": "Packet identifier"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Item ID Offset",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Item ID offset (signed)"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Stack amount"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X position in container"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y position in container"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent container"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue"
}
]
},
{
"version": "6017+",
"name": "Container Grid Lines",
"condition": "Client version \u003e= 6.0.1.7 (ContainerGridLines)",
"size": 21,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x25",
"description": "Packet identifier"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Item ID Offset",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Item ID offset (signed)"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Stack amount"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X position in container"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y position in container"
},
{
"name": "Grid Location",
"type": "byte",
"size": 1,
"description": "Grid slot position"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent container"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue"
}
]
}
],
"clientVersion": {
"feature": "ContainerGridLines adds gridLocation byte"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 127
}
},
{
"id": "0x3C",
"name": "Container \u0026 Old Spellbook Content",
"description": "Sends full contents of a container. Also used for old-style spellbook content (pre-AOS clients without NewSpellbook support). For AOS+ clients with NewSpellbook, use 0xBF/0x1B instead for spellbooks.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"version": "pre-6017",
"name": "Classic Format",
"condition": "Client version \u003c 6.0.1.7",
"size": "5 + (itemCount x 19)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x3C",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Item Count",
"type": "ushort",
"size": 2,
"description": "Number of items"
},
{
"name": "Items",
"type": "loop",
"description": "Item entries (19 bytes each)",
"loop": {
"countField": "itemCount",
"itemSize": 19,
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Item ID Offset",
"type": "byte",
"size": 1,
"description": "Item ID offset (signed)"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Stack amount"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X position in container"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y position in container"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent container"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue"
}
]
}
}
]
},
{
"version": "6017+ (ContainerGridLines)",
"name": "Grid Location Format",
"condition": "Client version \u003e= 6.0.1.7 (ContainerGridLines)",
"size": "5 + (itemCount x 20)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x3C",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Item Count",
"type": "ushort",
"size": 2,
"description": "Number of items"
},
{
"name": "Items",
"type": "loop",
"description": "Item entries (20 bytes each)",
"loop": {
"countField": "itemCount",
"itemSize": 20,
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Item ID Offset",
"type": "byte",
"size": 1,
"description": "Item ID offset (signed)"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Stack amount"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X position in container"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y position in container"
},
{
"name": "Grid Location",
"type": "byte",
"size": 1,
"description": "Grid slot position in container"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent container"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue"
}
]
}
}
]
}
],
"related": [
{
"id": "0xBF/0x1B",
"relationship": "variant",
"note": "New Spellbook Content for AOS+ clients"
}
],
"clientVersion": {
"feature": "ContainerGridLines (6.0.1.7+) adds gridLocation byte per item"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 169
}
},
{
"id": "0xBF",
"subId": "0x1B",
"name": "New Spellbook Content",
"description": "Sends spellbook contents using AOS format with a 64-bit bitmask of known spells.",
"direction": "outgoing",
"isDynamic": false,
"size": 23,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0017",
"description": "Packet length (23)"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x001B",
"description": "Subcommand (New Spellbook Content)"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Command (always 1)"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the spellbook"
},
{
"name": "Graphic",
"type": "short",
"size": 2,
"description": "Spellbook graphic ID"
},
{
"name": "Offset",
"type": "short",
"size": 2,
"description": "Spell offset (circle/school start)"
},
{
"name": "Spell Bits",
"type": "ulong",
"size": 8,
"description": "64-bit mask of known spells (written byte-by-byte, Little Endian)"
}
],
"related": [
{
"id": "0x3C",
"relationship": "variant",
"note": "Old Spellbook Content for pre-AOS clients"
}
],
"clientVersion": {
"min": "5.0.0a",
"feature": "NewSpellbook (Core.AOS \u0026\u0026 ns.NewSpellbook)"
},
"notes": "Used when Core.AOS \u0026\u0026 ns.NewSpellbook. Otherwise, old 0x3C format is used with spells as pseudo-items.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 46
}
},
{
"id": "0xF7",
"name": "Packet Container",
"description": "Container packet for batching multiple entity packets. Used for sending groups of related entities efficiently, such as all items and mobiles visible on a boat.",
"direction": "outgoing",
"isDynamic": true,
"size": "5+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Total packet length"
},
{
"name": "Packet Count",
"type": "ushort",
"size": 2,
"description": "Number of embedded packets"
},
{
"name": "Packets",
"type": "array",
"description": "Embedded packets (typically 0xF3 World Entity packets)",
"loop": {
"countField": "packetCount",
"fields": [
{
"name": "Embedded Packet",
"type": "bytes",
"size": "var",
"description": "Complete embedded packet (typically 24-26 byte 0xF3 World Entity)"
}
]
}
}
],
"related": [
{
"id": "0xF3",
"relationship": "contains",
"note": "Typically contains World Entity packets"
}
],
"clientVersion": {
"min": "7.0.0.0",
"feature": "StygianAbyss"
},
"notes": "Uses PacketContainerBuilder for efficient dynamic growth. Commonly used by boat system to batch all visible entities on deck.",
"source": {
"file": "Projects/Server/Network/Packets/PacketContainerBuilder.cs",
"line": 9
}
}
]
}

View file

@ -0,0 +1,212 @@
{
"category": "Context Menu",
"packets": [
{
"id": "0xBF",
"subId": "0x14",
"name": "Display Context Menu",
"description": "Displays a context menu for an entity.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Old Format",
"version": "0x01",
"condition": "command == 0x01 (pre-NewHaven)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0014",
"description": "Context Menu subcommand"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Old format command"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target entity"
},
{
"name": "Entry Count",
"type": "byte",
"size": 1,
"description": "Number of menu entries"
},
{
"name": "Entries",
"type": "loop",
"description": "Menu entries",
"loop": {
"countField": "entryCount",
"fields": [
{
"name": "Index",
"type": "short",
"size": 2,
"description": "Entry index"
},
{
"name": "Cliloc Offset",
"type": "ushort",
"size": 2,
"description": "Cliloc number - 3000000"
},
{
"name": "Flags",
"type": "bitfield",
"size": 2,
"description": "Entry flags",
"flags": [
{
"bit": "0",
"name": "Disabled",
"description": "Entry is disabled"
},
{
"bit": "1",
"name": "Arrow",
"description": "Show arrow"
},
{
"bit": "2",
"name": "Highlighted",
"description": "Entry is highlighted"
},
{
"bit": "5",
"name": "Colored",
"description": "Entry uses custom color"
}
]
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text hue (if Colored flag set)",
"condition": "flags \u0026 0x20"
}
]
}
}
]
},
{
"name": "New Format",
"version": "0x02",
"condition": "command == 0x02 (NewHaven+)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0014",
"description": "Context Menu subcommand"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0002",
"description": "New format command"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target entity"
},
{
"name": "Entry Count",
"type": "byte",
"size": 1,
"description": "Number of menu entries"
},
{
"name": "Entries",
"type": "loop",
"description": "Menu entries",
"loop": {
"countField": "entryCount",
"fields": [
{
"name": "Cliloc Number",
"type": "int",
"size": 4,
"description": "Full cliloc number"
},
{
"name": "Index",
"type": "short",
"size": 2,
"description": "Entry index"
},
{
"name": "Flags",
"type": "short",
"size": 2,
"description": "Entry flags (see Old Format)"
}
]
}
}
]
}
],
"related": [
{
"id": "0xBF/0x13",
"relationship": "request",
"note": "Context Menu Request from client"
},
{
"id": "0xBF/0x15",
"relationship": "response",
"note": "Context Menu Response from client"
}
],
"clientVersion": {
"feature": "NewHaven clients (6.0.0.0+) use command 0x02"
},
"source": {
"file": "Projects/UOContent/Context Menus/ContextMenuSystem.cs",
"line": 142
}
}
]
}

View file

@ -1,52 +1,102 @@
{
"category": "Damage",
"packets": [
{
"id": "0x0B",
"name": "Damage",
"description": "Shows damage dealt to a mobile (client 5.0.0a+).",
"direction": "outgoing",
"isDynamic": false,
"size": 7,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x0B", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of damaged mobile" },
{ "name": "damage", "type": "ushort", "size": 2, "description": "Damage amount (clamped 0-65535)" }
],
"clientVersion": {
"min": "5.0.0a",
"feature": "DamagePacket"
},
"notes": "For pre-5.0.0a clients, use 0xBF/0x22 instead.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingDamagePackets.cs",
"line": 34
}
},
{
"id": "0xBF/0x22",
"name": "Damage (Old)",
"description": "Shows damage dealt to a mobile (pre-5.0.0a clients).",
"direction": "outgoing",
"isDynamic": false,
"size": 11,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xBF", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "value": "11", "description": "Packet length" },
{ "name": "subCommand", "type": "ushort", "size": 2, "value": "0x22", "description": "Subcommand (Damage)" },
{ "name": "unknown", "type": "byte", "size": 1, "value": "0x01", "description": "Unknown (always 1)" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of damaged mobile" },
{ "name": "damage", "type": "byte", "size": 1, "description": "Damage amount (clamped 0-255)" }
],
"clientVersion": {
"max": "5.0.0a",
"notes": "For clients before DamagePacket feature"
},
"notes": "Damage is capped at 255 for old clients.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingDamagePackets.cs",
"line": 40
}
}
]
{
"category": "Damage",
"packets": [
{
"id": "0x0B",
"name": "Damage",
"description": "Shows damage dealt to a mobile (client 5.0.0a+).",
"direction": "outgoing",
"isDynamic": false,
"size": 7,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x0B",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of damaged mobile"
},
{
"name": "Damage",
"type": "ushort",
"size": 2,
"description": "Damage amount (clamped 0-65535)"
}
],
"clientVersion": {
"min": "5.0.0a",
"feature": "DamagePacket"
},
"notes": "For pre-5.0.0a clients, use 0xBF/0x22 instead.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingDamagePackets.cs",
"line": 34
}
},
{
"id": "0xBF/0x22",
"name": "Damage (Old)",
"description": "Shows damage dealt to a mobile (pre-5.0.0a clients).",
"direction": "outgoing",
"isDynamic": false,
"size": 11,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "11",
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x22",
"description": "Subcommand (Damage)"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Unknown (always 1)"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of damaged mobile"
},
{
"name": "Damage",
"type": "byte",
"size": 1,
"description": "Damage amount (clamped 0-255)"
}
],
"clientVersion": {
"max": "5.0.0a",
"notes": "For clients before DamagePacket feature"
},
"notes": "Damage is capped at 255 for old clients.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingDamagePackets.cs",
"line": 40
}
}
]
}

View file

@ -1,142 +1,459 @@
{
"category": "Effects",
"packets": [
{
"id": "0x54",
"name": "Sound Effect",
"description": "Plays a sound effect at a location.",
"direction": "outgoing",
"isDynamic": false,
"size": 12,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x54", "description": "Packet identifier" },
{ "name": "flags", "type": "byte", "size": 1, "value": "0x01", "description": "Sound flags" },
{ "name": "soundId", "type": "short", "size": 2, "description": "Sound effect ID" },
{ "name": "volume", "type": "short", "size": 2, "value": "0x0000", "description": "Volume (unused)" },
{ "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" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 41
}
},
{
"id": "0x70",
"name": "Screen Effect",
"description": "Triggers a screen-wide visual effect (fade in/out).",
"direction": "outgoing",
"isDynamic": false,
"size": 28,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x70", "description": "Packet identifier" },
{ "name": "effectType", "type": "byte", "size": 1, "value": "0x04", "description": "Effect type (4)" },
{ "name": "padding1", "type": "byte[]", "size": 8, "description": "Padding (zeros)" },
{
"name": "type",
"type": "enum",
"enumType": "sequential",
"size": 2,
"description": "Screen effect type",
"values": [
{ "value": 0, "name": "FadeOut", "description": "Fade screen to black" },
{ "value": 1, "name": "FadeIn", "description": "Fade screen from black" },
{ "value": 2, "name": "LightFlash", "description": "Light flash effect" },
{ "value": 3, "name": "FadeInOut", "description": "Fade out then in" },
{ "value": 4, "name": "DarkenScreen", "description": "Darken screen" }
]
},
{ "name": "padding2", "type": "byte[]", "size": 16, "description": "Padding (zeros)" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 322
}
},
{
"id": "0xC0",
"name": "Hued Effect",
"description": "Displays a graphical effect with hue and render mode.",
"direction": "outgoing",
"isDynamic": false,
"size": 36,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xC0", "description": "Packet identifier" },
{
"name": "effectType",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Effect type",
"values": [
{ "value": 0, "name": "Moving", "description": "Effect moves between two points" },
{ "value": 1, "name": "Lightning", "description": "Lightning bolt effect" },
{ "value": 2, "name": "FixedXYZ", "description": "Effect at fixed location" },
{ "value": 3, "name": "FixedFrom", "description": "Effect attached to source" }
]
},
{ "name": "sourceSerial", "type": "uint", "size": 4, "description": "Serial of source entity" },
{ "name": "targetSerial", "type": "uint", "size": 4, "description": "Serial of target entity" },
{ "name": "itemId", "type": "short", "size": 2, "description": "Effect graphic ID" },
{ "name": "srcX", "type": "short", "size": 2, "description": "Source X coordinate" },
{ "name": "srcY", "type": "short", "size": 2, "description": "Source Y coordinate" },
{ "name": "srcZ", "type": "sbyte", "size": 1, "description": "Source Z coordinate" },
{ "name": "dstX", "type": "short", "size": 2, "description": "Destination X coordinate" },
{ "name": "dstY", "type": "short", "size": 2, "description": "Destination Y coordinate" },
{ "name": "dstZ", "type": "sbyte", "size": 1, "description": "Destination Z coordinate" },
{ "name": "speed", "type": "byte", "size": 1, "description": "Effect speed" },
{ "name": "duration", "type": "byte", "size": 1, "description": "Effect duration" },
{ "name": "unknown1", "type": "byte", "size": 1, "value": "0x00", "description": "Unknown" },
{ "name": "unknown2", "type": "byte", "size": 1, "value": "0x00", "description": "Unknown" },
{ "name": "fixedDirection", "type": "bool", "size": 1, "description": "Fixed direction" },
{ "name": "explode", "type": "bool", "size": 1, "description": "Explode on impact" },
{ "name": "hue", "type": "int", "size": 4, "description": "Effect hue" },
{ "name": "renderMode", "type": "int", "size": 4, "description": "Render mode" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 175
}
},
{
"id": "0xC7",
"name": "Particle Effect",
"description": "Displays an advanced particle effect with extended parameters.",
"direction": "outgoing",
"isDynamic": false,
"size": 49,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xC7", "description": "Packet identifier" },
{ "name": "effectType", "type": "byte", "size": 1, "description": "Effect type (see 0xC0)" },
{ "name": "sourceSerial", "type": "uint", "size": 4, "description": "Serial of source entity" },
{ "name": "targetSerial", "type": "uint", "size": 4, "description": "Serial of target entity" },
{ "name": "itemId", "type": "short", "size": 2, "description": "Effect graphic ID" },
{ "name": "srcX", "type": "short", "size": 2, "description": "Source X coordinate" },
{ "name": "srcY", "type": "short", "size": 2, "description": "Source Y coordinate" },
{ "name": "srcZ", "type": "sbyte", "size": 1, "description": "Source Z coordinate" },
{ "name": "dstX", "type": "short", "size": 2, "description": "Destination X coordinate" },
{ "name": "dstY", "type": "short", "size": 2, "description": "Destination Y coordinate" },
{ "name": "dstZ", "type": "sbyte", "size": 1, "description": "Destination Z coordinate" },
{ "name": "speed", "type": "byte", "size": 1, "description": "Effect speed" },
{ "name": "duration", "type": "byte", "size": 1, "description": "Effect duration" },
{ "name": "unknown1", "type": "byte", "size": 1, "value": "0x00", "description": "Unknown" },
{ "name": "unknown2", "type": "byte", "size": 1, "value": "0x00", "description": "Unknown" },
{ "name": "fixedDirection", "type": "bool", "size": 1, "description": "Fixed direction" },
{ "name": "explode", "type": "bool", "size": 1, "description": "Explode on impact" },
{ "name": "hue", "type": "int", "size": 4, "description": "Effect hue" },
{ "name": "renderMode", "type": "int", "size": 4, "description": "Render mode" },
{ "name": "effect", "type": "short", "size": 2, "description": "Particle effect ID" },
{ "name": "explodeEffect", "type": "short", "size": 2, "description": "Explosion effect ID" },
{ "name": "explodeSound", "type": "short", "size": 2, "description": "Explosion sound ID" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Associated entity serial" },
{ "name": "layer", "type": "byte", "size": 1, "description": "Effect layer" },
{ "name": "unknown3", "type": "short", "size": 2, "description": "Unknown" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 58
}
}
]
{
"category": "Effects",
"packets": [
{
"id": "0x54",
"name": "Sound Effect",
"description": "Plays a sound effect at a location.",
"direction": "outgoing",
"isDynamic": false,
"size": 12,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x54",
"description": "Packet identifier"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Sound flags"
},
{
"name": "Sound ID",
"type": "short",
"size": 2,
"description": "Sound effect ID"
},
{
"name": "Volume",
"type": "short",
"size": 2,
"value": "0x0000",
"description": "Volume (unused)"
},
{
"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"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 41
}
},
{
"id": "0x70",
"name": "Screen Effect",
"description": "Triggers a screen-wide visual effect (fade in/out).",
"direction": "outgoing",
"isDynamic": false,
"size": 28,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x70",
"description": "Packet identifier"
},
{
"name": "Effect Type",
"type": "byte",
"size": 1,
"value": "0x04",
"description": "Effect type (4)"
},
{
"name": "Padding1",
"type": "byte[]",
"size": 8,
"description": "Padding (zeros)"
},
{
"name": "Type",
"type": "enum",
"enumType": "sequential",
"size": 2,
"description": "Screen effect type",
"values": [
{
"value": 0,
"name": "Fade Out",
"description": "Fade screen to black"
},
{
"value": 1,
"name": "Fade In",
"description": "Fade screen from black"
},
{
"value": 2,
"name": "Light Flash",
"description": "Light flash effect"
},
{
"value": 3,
"name": "Fade In Out",
"description": "Fade out then in"
},
{
"value": 4,
"name": "Darken Screen",
"description": "Darken screen"
}
]
},
{
"name": "Padding2",
"type": "byte[]",
"size": 16,
"description": "Padding (zeros)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 322
}
},
{
"id": "0xC0",
"name": "Hued Effect",
"description": "Displays a graphical effect with hue and render mode.",
"direction": "outgoing",
"isDynamic": false,
"size": 36,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC0",
"description": "Packet identifier"
},
{
"name": "Effect Type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Effect type",
"values": [
{
"value": 0,
"name": "Moving",
"description": "Effect moves between two points"
},
{
"value": 1,
"name": "Lightning",
"description": "Lightning bolt effect"
},
{
"value": 2,
"name": "Fixed XYZ",
"description": "Effect at fixed location"
},
{
"value": 3,
"name": "Fixed From",
"description": "Effect attached to source"
}
]
},
{
"name": "Source Serial",
"type": "uint",
"size": 4,
"description": "Serial of source entity"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of target entity"
},
{
"name": "Item ID",
"type": "short",
"size": 2,
"description": "Effect graphic ID"
},
{
"name": "Src X",
"type": "short",
"size": 2,
"description": "Source X coordinate"
},
{
"name": "Src Y",
"type": "short",
"size": 2,
"description": "Source Y coordinate"
},
{
"name": "Src Z",
"type": "sbyte",
"size": 1,
"description": "Source Z coordinate"
},
{
"name": "Dst X",
"type": "short",
"size": 2,
"description": "Destination X coordinate"
},
{
"name": "Dst Y",
"type": "short",
"size": 2,
"description": "Destination Y coordinate"
},
{
"name": "Dst Z",
"type": "sbyte",
"size": 1,
"description": "Destination Z coordinate"
},
{
"name": "Speed",
"type": "byte",
"size": 1,
"description": "Effect speed"
},
{
"name": "Duration",
"type": "byte",
"size": 1,
"description": "Effect duration"
},
{
"name": "Unknown1",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Unknown2",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Fixed Direction",
"type": "bool",
"size": 1,
"description": "Fixed direction"
},
{
"name": "Explode",
"type": "bool",
"size": 1,
"description": "Explode on impact"
},
{
"name": "Hue",
"type": "int",
"size": 4,
"description": "Effect hue"
},
{
"name": "Render Mode",
"type": "int",
"size": 4,
"description": "Render mode"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 175
}
},
{
"id": "0xC7",
"name": "Particle Effect",
"description": "Displays an advanced particle effect with extended parameters.",
"direction": "outgoing",
"isDynamic": false,
"size": 49,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC7",
"description": "Packet identifier"
},
{
"name": "Effect Type",
"type": "byte",
"size": 1,
"description": "Effect type (see 0xC0)"
},
{
"name": "Source Serial",
"type": "uint",
"size": 4,
"description": "Serial of source entity"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of target entity"
},
{
"name": "Item ID",
"type": "short",
"size": 2,
"description": "Effect graphic ID"
},
{
"name": "Src X",
"type": "short",
"size": 2,
"description": "Source X coordinate"
},
{
"name": "Src Y",
"type": "short",
"size": 2,
"description": "Source Y coordinate"
},
{
"name": "Src Z",
"type": "sbyte",
"size": 1,
"description": "Source Z coordinate"
},
{
"name": "Dst X",
"type": "short",
"size": 2,
"description": "Destination X coordinate"
},
{
"name": "Dst Y",
"type": "short",
"size": 2,
"description": "Destination Y coordinate"
},
{
"name": "Dst Z",
"type": "sbyte",
"size": 1,
"description": "Destination Z coordinate"
},
{
"name": "Speed",
"type": "byte",
"size": 1,
"description": "Effect speed"
},
{
"name": "Duration",
"type": "byte",
"size": 1,
"description": "Effect duration"
},
{
"name": "Unknown1",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Unknown2",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Fixed Direction",
"type": "bool",
"size": 1,
"description": "Fixed direction"
},
{
"name": "Explode",
"type": "bool",
"size": 1,
"description": "Explode on impact"
},
{
"name": "Hue",
"type": "int",
"size": 4,
"description": "Effect hue"
},
{
"name": "Render Mode",
"type": "int",
"size": 4,
"description": "Render mode"
},
{
"name": "Effect",
"type": "short",
"size": 2,
"description": "Particle effect ID"
},
{
"name": "Explode Effect",
"type": "short",
"size": 2,
"description": "Explosion effect ID"
},
{
"name": "Explode Sound",
"type": "short",
"size": 2,
"description": "Explosion sound ID"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Associated entity serial"
},
{
"name": "Layer",
"type": "byte",
"size": 1,
"description": "Effect layer"
},
{
"name": "Unknown3",
"type": "short",
"size": 2,
"description": "Unknown"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 58
}
}
]
}

View file

@ -1,71 +1,396 @@
{
"category": "Entity",
"packets": [
{
"id": "0x1D",
"name": "Remove Entity",
"description": "Removes an entity (item, mobile, or multi) from the client's view.",
"direction": "outgoing",
"isDynamic": false,
"size": 5,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x1D", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of entity to remove" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEntityPackets.cs",
"line": 75
}
},
{
"id": "0xDC",
"name": "OPL Info (Object Property List)",
"description": "Notifies the client of an entity's Object Property List hash. Client compares hash to cached version and requests full OPL if different.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xDC", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Entity serial" },
{ "name": "hash", "type": "int", "size": 4, "description": "Hash of the Object Property List" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEntityPackets.cs",
"line": 33
}
},
{
"id": "0xF3",
"name": "World Entity (SA+)",
"description": "Unified entity packet for items, mobiles, and multis. Replaces older item/mobile-specific packets for Stygian Abyss+ clients.",
"direction": "outgoing",
"isDynamic": false,
"size": "24 (pre-HS) or 26 (HS+)",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xF3", "description": "Packet identifier" },
{ "name": "command", "type": "short", "size": 2, "value": "0x0001", "description": "Command (always 1)" },
{ "name": "entityType", "type": "byte", "size": 1, "description": "Entity type: 0=Item, 1=Mobile, 2=Multi" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Entity serial" },
{ "name": "graphicId", "type": "ushort", "size": 2, "description": "Graphic/Body ID" },
{ "name": "direction", "type": "byte", "size": 1, "description": "Direction (mobiles) or 0" },
{ "name": "amountMin", "type": "short", "size": 2, "description": "Minimum amount (items) or 1" },
{ "name": "amountMax", "type": "short", "size": 2, "description": "Maximum amount (items) or 1" },
{ "name": "x", "type": "short", "size": 2, "description": "X coordinate (masked with 0x7FFF)" },
{ "name": "y", "type": "short", "size": 2, "description": "Y coordinate (masked with 0x3FFF)" },
{ "name": "z", "type": "sbyte", "size": 1, "description": "Z coordinate" },
{ "name": "light", "type": "byte", "size": 1, "description": "Light level (items)" },
{ "name": "hue", "type": "short", "size": 2, "description": "Hue/color" },
{ "name": "flags", "type": "byte", "size": 1, "description": "Packet flags (hidden, blessed, etc.)" },
{ "name": "unknown", "type": "short", "size": 2, "description": "Unknown (HS+ only)", "condition": "HighSeas" }
],
"clientVersion": {
"min": "7.0.9.0",
"feature": "StygianAbyss"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEntityPackets.cs",
"line": 88
}
}
]
}
{
"category": "Entity",
"packets": [
{
"id": "0xD6",
"name": "Object Property List",
"description": "Sends the full Object Property List (tooltip) for an entity. Contains a hash for client caching and a list of localized property entries.",
"direction": "outgoing",
"isDynamic": true,
"size": "15+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD6",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Unknown1",
"type": "ushort",
"size": 2,
"value": "0x0001",
"description": "Unknown (always 1)"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
},
{
"name": "Unknown2",
"type": "ushort",
"size": 2,
"value": "0x0000",
"description": "Unknown (always 0)"
},
{
"name": "Hash",
"type": "int",
"size": 4,
"description": "XOR hash of all properties (computed with 26-bit mask)"
},
{
"name": "Properties",
"type": "array",
"description": "Property entries, terminated by number=0",
"loop": {
"terminator": "number == 0",
"fields": [
{
"name": "Number",
"type": "int",
"size": 4,
"description": "Cliloc number (0 = end of list)"
},
{
"name": "String Length",
"type": "ushort",
"size": 2,
"description": "Length of arguments in bytes (0 if no arguments)"
},
{
"name": "Arguments",
"type": "utf16le",
"size": "var",
"description": "Unicode LE string with tab-separated cliloc arguments. Length = String Length field"
}
]
}
}
],
"related": [
{
"id": "0xDC",
"relationship": "notification",
"note": "OPL Info notifies client of hash change, triggering 0xD6 request"
}
],
"clientVersion": {
"min": "4.0.0a",
"feature": "AOS tooltips"
},
"notes": "Hash is calculated by XORing each property\u0027s cliloc number with ((hash \u003e\u003e 31) \u0026 1) ^ (hash \u003c\u003c 1). Properties are cliloc entries with optional Unicode LE arguments separated by tabs.",
"source": {
"file": "Projects/Server/PropertyList/ObjectPropertyList.cs",
"line": 19
}
},
{
"id": "0x1D",
"name": "Remove Entity",
"description": "Removes an entity (item, mobile, or multi) from the client\u0027s view.",
"direction": "outgoing",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x1D",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of entity to remove"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEntityPackets.cs",
"line": 75
}
},
{
"id": "0xDC",
"name": "OPL Info (Object Property List)",
"description": "Notifies the client of an entity\u0027s Object Property List hash. Client compares hash to cached version and requests full OPL if different.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDC",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
},
{
"name": "Hash",
"type": "int",
"size": 4,
"description": "Hash of the Object Property List"
}
],
"related": [
{
"id": "0xD6",
"direction": "outgoing",
"relationship": "data",
"note": "Full Object Property List packet"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEntityPackets.cs",
"line": 33
}
},
{
"id": "0xF3",
"name": "World Entity (SA+)",
"description": "Unified entity packet for items, mobiles, and multis. Replaces older 0x1A World Item packet for Stygian Abyss+ clients. High Seas clients add 2 extra bytes.",
"direction": "outgoing",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"version": "Stygian Abyss",
"name": "SA Format",
"condition": "Client version 7.0.0.0 - 7.0.8.x (StygianAbyss, pre-HighSeas)",
"size": 24,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF3",
"description": "Packet identifier"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Command (always 1)"
},
{
"name": "Entity Type",
"type": "byte",
"size": 1,
"description": "Entity type",
"enum": [
{ "value": "0", "name": "Item", "description": "World item" },
{ "value": "1", "name": "Mobile", "description": "Mobile/creature" },
{ "value": "2", "name": "Multi", "description": "Multi/structure" }
]
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
},
{
"name": "Graphic ID",
"type": "ushort",
"size": 2,
"description": "Graphic/Body ID (masked with 0x7FFF)"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Direction (mobiles) or 0"
},
{
"name": "Amount Min",
"type": "short",
"size": 2,
"description": "Minimum amount (items) or 1"
},
{
"name": "Amount Max",
"type": "short",
"size": 2,
"description": "Maximum amount (items) or 1"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X coordinate (masked with 0x7FFF)"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y coordinate (masked with 0x3FFF)"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Z coordinate"
},
{
"name": "Light",
"type": "byte",
"size": 1,
"description": "Light level (items)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Hue/color"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Packet flags (hidden, blessed, etc.)"
}
]
},
{
"version": "High Seas+",
"name": "HS Format",
"condition": "Client version \u003e= 7.0.9.0 (HighSeas)",
"size": 26,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF3",
"description": "Packet identifier"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Command (always 1)"
},
{
"name": "Entity Type",
"type": "byte",
"size": 1,
"description": "Entity type",
"enum": [
{ "value": "0", "name": "Item", "description": "World item" },
{ "value": "1", "name": "Mobile", "description": "Mobile/creature" },
{ "value": "2", "name": "Multi", "description": "Multi/structure" }
]
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
},
{
"name": "Graphic ID",
"type": "ushort",
"size": 2,
"description": "Graphic/Body ID (masked with 0xFFFF, supports higher IDs)"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Direction (mobiles) or 0"
},
{
"name": "Amount Min",
"type": "short",
"size": 2,
"description": "Minimum amount (items) or 1"
},
{
"name": "Amount Max",
"type": "short",
"size": 2,
"description": "Maximum amount (items) or 1"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X coordinate (masked with 0x7FFF)"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y coordinate (masked with 0x3FFF)"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Z coordinate"
},
{
"name": "Light",
"type": "byte",
"size": 1,
"description": "Light level (items)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Hue/color"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Packet flags (hidden, blessed, etc.)"
},
{
"name": "Unknown",
"type": "short",
"size": 2,
"value": "0x0000",
"description": "Unknown (always 0)"
}
]
}
],
"related": [
{
"id": "0x1A",
"relationship": "variant",
"note": "Legacy World Item packet for pre-SA clients"
}
],
"clientVersion": {
"min": "7.0.0.0",
"feature": "StygianAbyss"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEntityPackets.cs",
"line": 88
}
}
]
}

View file

@ -0,0 +1,173 @@
{
"category": "Equipment",
"packets": [
{
"id": "0x2E",
"name": "Equip Update",
"description": "Notifies client that an item has been equipped on a mobile.",
"direction": "outgoing",
"isDynamic": false,
"size": 15,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x2E",
"description": "Packet identifier"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the equipped item"
},
{
"name": "Item ID",
"type": "short",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Layer",
"type": "ushort",
"size": 2,
"description": "Equipment layer"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of the mobile wearing the item"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Item hue (may be overridden by SolidHueOverride)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEquipmentPackets.cs",
"line": 86
}
},
{
"id": "0xBF",
"subId": "0x10",
"name": "Display Equipment Info",
"description": "Displays detailed equipment information including crafter name and magical properties.",
"direction": "outgoing",
"isDynamic": true,
"size": "17+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0010",
"description": "Display Equipment Info subcommand"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item"
},
{
"name": "Cliloc Number",
"type": "int",
"size": 4,
"description": "Base cliloc number for item name"
},
{
"name": "Crafter Info",
"type": "conditional",
"description": "Crafter information (if present)",
"condition": "crafterName.Length \u003e 0",
"fields": [
{
"name": "Crafted By",
"type": "int",
"size": 4,
"value": "-3",
"description": "Crafter marker"
},
{
"name": "Crafter Name Length",
"type": "ushort",
"size": 2,
"description": "Length of crafter name"
},
{
"name": "Crafter Name",
"type": "ascii",
"description": "Crafter name"
}
]
},
{
"name": "Unidentified",
"type": "conditional",
"description": "Unidentified marker",
"condition": "unidentified",
"fields": [
{
"name": "Unidentified Marker",
"type": "int",
"size": 4,
"value": "-4",
"description": "Unidentified marker"
}
]
},
{
"name": "Attributes",
"type": "loop",
"description": "Equipment attributes",
"loop": {
"countField": "variable",
"fields": [
{
"name": "Attribute Number",
"type": "int",
"size": 4,
"description": "Attribute cliloc number"
},
{
"name": "Charges",
"type": "short",
"size": 2,
"description": "Charges (-1 if not applicable)"
}
]
}
},
{
"name": "Terminator",
"type": "int",
"size": 4,
"value": "-1",
"description": "End of attributes marker"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEquipmentPackets.cs",
"line": 37
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,303 @@
{
"category": "House",
"packets": [
{
"id": "0xD8",
"name": "House Design State Detailed",
"description": "Sends detailed house customization design data. Contains compressed plane data organized by floor level and component type. Tiles are encoded using grid-based or coordinate-based formats depending on their Z-height.",
"direction": "outgoing",
"isDynamic": true,
"size": "18+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD8",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Compression Type",
"type": "byte",
"size": 1,
"value": "0x03",
"description": "Compression type (always 3 = compressed)"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown (always 0)"
},
{
"name": "House Serial",
"type": "uint",
"size": 4,
"description": "Serial of the house foundation"
},
{
"name": "Revision",
"type": "int",
"size": 4,
"description": "Design revision number"
},
{
"name": "Tile Count",
"type": "ushort",
"size": 2,
"description": "Total number of tiles in the design"
},
{
"name": "Buffer Length",
"type": "ushort",
"size": 2,
"description": "Length of remaining data (plane count + all plane sections)"
},
{
"name": "Plane Count",
"type": "byte",
"size": 1,
"description": "Number of plane/buffer sections that follow"
},
{
"name": "Plane Sections",
"type": "array",
"description": "Each section has a 4-byte header followed by compressed tile data",
"loop": {
"countField": "Plane Count",
"fields": [
{
"name": "Section Header",
"type": "uint",
"size": 4,
"description": "Packed header: bits 28-31=mode, bits 24-27=planeZ, bits 16-23+(bits 4-7<<8)=decompLen, bits 8-15+(bits 0-3<<8)=compLen"
},
{
"name": "Compressed Data",
"type": "bytes",
"size": "var",
"description": "DEFLATE compressed tile data (length from header)"
}
]
}
}
],
"planeFormat": {
"description": "Tiles are organized into planes based on Z-height. Planes 0-8 use grid encoding; planes 9+ use explicit coordinates for overflow items.",
"headerDecoding": {
"mode": "(header >> 28) & 0x0F",
"planeZ": "(header >> 24) & 0x0F",
"decompLen": "((header & 0xFF0000) >> 16) | ((header & 0xF0) << 4)",
"compLen": "((header & 0xFF00) >> 8) | ((header & 0x0F) << 8)"
},
"planeZMapping": [
{ "plane": 0, "z": 0, "description": "Ground floor" },
{ "plane": 1, "z": 7, "description": "1st storey (floor items)" },
{ "plane": 2, "z": 27, "description": "2nd storey (floor items)" },
{ "plane": 3, "z": 47, "description": "3rd storey (floor items)" },
{ "plane": 4, "z": 67, "description": "4th storey (floor items)" },
{ "plane": "5-8", "z": "7/27/47/67", "description": "Non-floor items per storey" },
{ "plane": "9+", "z": "varies", "description": "Overflow/stair buffers (explicit coords)" }
],
"encodingModes": [
{
"mode": 0,
"name": "Full Coordinates",
"bytesPerTile": 5,
"format": "ushort itemId, sbyte x, sbyte y, sbyte z",
"description": "Used for overflow buffers with non-standard Z heights"
},
{
"mode": 1,
"name": "XY Coordinates",
"bytesPerTile": 4,
"format": "ushort itemId, sbyte x, sbyte y",
"description": "Z calculated: ((planeZ - 1) % 4) * 20 + 7"
},
{
"mode": 2,
"name": "Grid-Based",
"bytesPerTile": 2,
"format": "ushort itemId (0x0000 = empty)",
"description": "X,Y from grid index: x = i / gridHeight, y = i % gridHeight"
}
],
"gridSizes": [
{ "plane": 0, "width": "width", "height": "height", "notes": "Full foundation footprint" },
{ "plane": "1-4", "width": "width - 1", "height": "height - 2", "notes": "Interior (floor items), offset by (1,1)" },
{ "plane": "5-8", "width": "width", "height": "height - 1", "notes": "Interior (non-floor items)" }
]
},
"compression": {
"algorithm": "DEFLATE",
"notes": "Raw DEFLATE compression (no zlib header/footer). Each plane buffer compressed independently. Max 750 items per overflow buffer (splits into multiple buffers if exceeded)."
},
"related": [
{
"id": "0xBF/0x1D",
"relationship": "related",
"note": "Design State General provides revision info only"
},
{
"id": "0xBF/0x20",
"relationship": "related",
"note": "Begin/End House Customization commands"
}
],
"clientVersion": {
"min": "4.0.0a",
"feature": "AOS House Customization"
},
"source": {
"file": "Projects/UOContent/Multis/Houses/HousePackets.cs",
"line": 93
}
},
{
"id": "0xBF",
"subId": "0x1D",
"name": "Design State General",
"description": "Sends house design revision information. Client requests full details if revision differs.",
"direction": "outgoing",
"isDynamic": false,
"size": 13,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x000D",
"description": "Packet length (13)"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x001D",
"description": "Design State General subcommand"
},
{
"name": "House Serial",
"type": "uint",
"size": 4,
"description": "Serial of the house"
},
{
"name": "Revision",
"type": "int",
"size": 4,
"description": "Design revision number"
}
],
"related": [
{
"id": "0xD8",
"relationship": "related",
"note": "Full design details requested if revision differs"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HousePackets.cs",
"line": 72
}
},
{
"id": "0xBF",
"subId": "0x20",
"name": "Begin House Customization",
"description": "Notifies client to enter house customization mode.",
"direction": "outgoing",
"isDynamic": false,
"size": 17,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0011",
"description": "Packet length (17)"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0020",
"description": "House Customization subcommand"
},
{
"name": "House Serial",
"type": "uint",
"size": 4,
"description": "Serial of the house"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x04",
"description": "Begin customization command"
},
{
"name": "Unknown 1",
"type": "ushort",
"size": 2,
"value": "0x0000",
"description": "Unknown (always 0)"
},
{
"name": "Unknown 2",
"type": "ushort",
"size": 2,
"value": "0xFFFF",
"description": "Unknown (always 0xFFFF)"
},
{
"name": "Unknown 3",
"type": "ushort",
"size": 2,
"value": "0xFFFF",
"description": "Unknown (always 0xFFFF)"
},
{
"name": "Unknown 4",
"type": "byte",
"size": 1,
"value": "0xFF",
"description": "Unknown (always 0xFF)"
}
],
"related": [
{
"id": "0xBF/0x20",
"relationship": "variant",
"note": "End House Customization uses command 0x05"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HousePackets.cs",
"line": 30
}
}
]
}

View file

@ -1,35 +1,102 @@
{
"category": "Items",
"packets": [
{
"id": "0x1A",
"name": "World Item",
"description": "Displays an item in the world (pre-Stygian Abyss clients).",
"direction": "outgoing",
"isDynamic": true,
"size": "Dynamic (14-20 bytes)",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x1A", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length (14-20)" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Item serial (bit 31 set if amount present)" },
{ "name": "itemId", "type": "ushort", "size": 2, "description": "Item graphic ID (bit 14 set for multi)" },
{ "name": "amount", "type": "ushort", "size": 2, "description": "Stack amount (if serial bit 31 set)", "condition": "serial & 0x80000000" },
{ "name": "x", "type": "ushort", "size": 2, "description": "X coordinate (bit 15 set if direction present)" },
{ "name": "y", "type": "ushort", "size": 2, "description": "Y coordinate (bit 15=hue, bit 14=flags)" },
{ "name": "direction", "type": "byte", "size": 1, "description": "Direction (if x bit 15 set)", "condition": "x & 0x8000" },
{ "name": "z", "type": "sbyte", "size": 1, "description": "Z coordinate" },
{ "name": "hue", "type": "ushort", "size": 2, "description": "Item hue (if y bit 15 set)", "condition": "y & 0x8000" },
{ "name": "flags", "type": "byte", "size": 1, "description": "Packet flags (if y bit 14 set)", "condition": "y & 0x4000" }
],
"notes": "For Stygian Abyss+ clients, use 0xF3 World Entity instead.",
"clientVersion": {
"max": "6.0.14.2",
"notes": "Replaced by 0xF3 for SA+ clients"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingItemPackets.cs",
"line": 24
}
}
]
}
{
"category": "Items",
"packets": [
{
"id": "0x1A",
"name": "World Item",
"description": "Displays an item in the world (pre-Stygian Abyss clients).",
"direction": "outgoing",
"isDynamic": true,
"size": "14+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x1A",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length (14-20)"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Item serial (bit 31 set if amount present)"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID (bit 14 set for multi)"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Stack amount (if serial bit 31 set)",
"condition": "serial \u0026 0x80000000"
},
{
"name": "X",
"type": "ushort",
"size": 2,
"description": "X coordinate (bit 15 set if direction present)"
},
{
"name": "Y",
"type": "ushort",
"size": 2,
"description": "Y coordinate (bit 15=hue, bit 14=flags)"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Direction (if x bit 15 set)",
"condition": "x \u0026 0x8000"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Z coordinate"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue (if y bit 15 set)",
"condition": "y \u0026 0x8000"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Packet flags (if y bit 14 set)",
"condition": "y \u0026 0x4000"
}
],
"related": [
{
"id": "0xF3",
"relationship": "variant",
"note": "World Entity packet for SA+ clients"
}
],
"notes": "For Stygian Abyss+ clients, use 0xF3 World Entity instead.",
"clientVersion": {
"max": "6.0.14.2",
"notes": "Replaced by 0xF3 for SA+ clients"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingItemPackets.cs",
"line": 24
}
}
]
}

View file

@ -1,38 +1,65 @@
{
"category": "Light",
"packets": [
{
"id": "0x4E",
"name": "Personal Light Level",
"description": "Sets the light level for a specific entity.",
"direction": "outgoing",
"isDynamic": false,
"size": 6,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x4E", "description": "Packet identifier" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of entity" },
{ "name": "level", "type": "byte", "size": 1, "description": "Light level (0=brightest, 25-30=typical night)" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingLightPackets.cs",
"line": 23
}
},
{
"id": "0x4F",
"name": "Global Light Level",
"description": "Sets the global ambient light level for the client.",
"direction": "outgoing",
"isDynamic": false,
"size": 2,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x4F", "description": "Packet identifier" },
{ "name": "level", "type": "byte", "size": 1, "description": "Light level (0=brightest, 25-30=typical night)" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingLightPackets.cs",
"line": 39
}
}
]
{
"category": "Light",
"packets": [
{
"id": "0x4E",
"name": "Personal Light Level",
"description": "Sets the light level for a specific entity.",
"direction": "outgoing",
"isDynamic": false,
"size": 6,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x4E",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of entity"
},
{
"name": "Level",
"type": "byte",
"size": 1,
"description": "Light level (0=brightest, 25-30=typical night)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingLightPackets.cs",
"line": 23
}
},
{
"id": "0x4F",
"name": "Global Light Level",
"description": "Sets the global ambient light level for the client.",
"direction": "outgoing",
"isDynamic": false,
"size": 2,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x4F",
"description": "Packet identifier"
},
{
"name": "Level",
"type": "byte",
"size": 1,
"description": "Light level (0=brightest, 25-30=typical night)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingLightPackets.cs",
"line": 39
}
}
]
}

View file

@ -0,0 +1,318 @@
{
"category": "Mahjong",
"packets": [
{
"id": "0xDA",
"subId": "0x19",
"name": "Mahjong Join Game",
"description": "Notifies client to open the Mahjong game interface.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0009",
"description": "Packet length (9)"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x0019",
"description": "Join Game command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 288
}
},
{
"id": "0xDA",
"subId": "0x02",
"name": "Mahjong Players Info",
"description": "Sends information about all players in the Mahjong game.",
"direction": "outgoing",
"isDynamic": true,
"size": "11+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x0002",
"description": "Players Info command"
},
{
"name": "Seat Count",
"type": "ushort",
"size": 2,
"description": "Number of seats with data"
},
{
"name": "Players",
"type": "loop",
"description": "Player data for each seat",
"loop": {
"countField": "Seat Count",
"fields": [
{
"name": "Player Serial",
"type": "uint",
"size": 4,
"description": "Serial of player (0 if empty)"
},
{
"name": "Dealer Flag",
"type": "byte",
"size": 1,
"description": "1=Dealer, 2=Not dealer"
},
{
"name": "Position",
"type": "byte",
"size": 1,
"description": "Seat position index"
},
{
"name": "Score",
"type": "int",
"size": 4,
"description": "Player\u0027s current score"
},
{
"name": "Reserved",
"type": "short",
"size": 2,
"value": "0",
"description": "Reserved (always 0)"
},
{
"name": "Reserved 2",
"type": "byte",
"size": 1,
"value": "0",
"description": "Reserved (always 0)"
},
{
"name": "Public Hand",
"type": "bool",
"size": 1,
"description": "True if hand is visible to others"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Player name"
},
{
"name": "Empty Seat",
"type": "bool",
"size": 1,
"description": "True if seat is empty or not in game"
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 304
}
},
{
"id": "0xDA",
"subId": "0x05",
"name": "Mahjong General Info",
"description": "Sends general game state including dice values, dealer indicator, and wall break position.",
"direction": "outgoing",
"isDynamic": false,
"size": 25,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0019",
"description": "Packet length (25)"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x0005",
"description": "General Info command"
},
{
"name": "Reserved",
"type": "short",
"size": 2,
"value": "0",
"description": "Reserved"
},
{
"name": "Reserved 2",
"type": "byte",
"size": 1,
"value": "0",
"description": "Reserved"
},
{
"name": "Options",
"type": "byte",
"size": 1,
"description": "Bit 0: Show Scores, Bit 1: Spectator Vision"
},
{
"name": "Dice 1",
"type": "byte",
"size": 1,
"description": "First dice value"
},
{
"name": "Dice 2",
"type": "byte",
"size": 1,
"description": "Second dice value"
},
{
"name": "Dealer Wind",
"type": "byte",
"size": 1,
"description": "Dealer indicator wind direction",
"enum": [
{ "value": "0", "name": "North", "description": "North wind" },
{ "value": "1", "name": "East", "description": "East wind" },
{ "value": "2", "name": "South", "description": "South wind" },
{ "value": "3", "name": "West", "description": "West wind" }
]
},
{
"name": "Dealer Y",
"type": "short",
"size": 2,
"description": "Dealer indicator Y position"
},
{
"name": "Dealer X",
"type": "short",
"size": 2,
"description": "Dealer indicator X position"
},
{
"name": "Dealer Direction",
"type": "byte",
"size": 1,
"description": "Dealer indicator direction"
},
{
"name": "Wall Break Y",
"type": "short",
"size": 2,
"description": "Wall break indicator Y position"
},
{
"name": "Wall Break X",
"type": "short",
"size": 2,
"description": "Wall break indicator X position"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 461
}
},
{
"id": "0xDA",
"subId": "0x1A",
"name": "Mahjong Relieve",
"description": "Notifies client to close the Mahjong game interface.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0009",
"description": "Packet length (9)"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x001A",
"description": "Relieve command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 504
}
}
]
}

View file

@ -0,0 +1,401 @@
{
"category": "Map",
"packets": [
{
"id": "0xC6",
"name": "Invalid Map",
"description": "Notifies client that the current map is invalid.",
"direction": "outgoing",
"isDynamic": false,
"size": 1,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC6",
"description": "Packet identifier"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMapPackets.cs",
"line": 53
}
},
{
"id": "0xBF",
"subId": "0x08",
"name": "Map Change",
"description": "Notifies client of a facet/map change.",
"direction": "outgoing",
"isDynamic": false,
"size": 6,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Packet length (6)"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0008",
"description": "Map Change subcommand"
},
{
"name": "Map ID",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Map/Facet ID",
"values": [
{
"value": 0,
"name": "Felucca",
"description": "Felucca facet"
},
{
"value": 1,
"name": "Trammel",
"description": "Trammel facet"
},
{
"value": 2,
"name": "Ilshenar",
"description": "Ilshenar facet"
},
{
"value": 3,
"name": "Malas",
"description": "Malas facet"
},
{
"value": 4,
"name": "Tokuno",
"description": "Tokuno Islands facet"
},
{
"value": 5,
"name": "Ter Mur",
"description": "Ter Mur facet"
}
]
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMapPackets.cs",
"line": 55
}
},
{
"id": "0xBF",
"subId": "0x18",
"name": "Map Patches",
"description": "Sends map patch information for static and land blocks.",
"direction": "outgoing",
"isDynamic": false,
"size": 41,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0029",
"description": "Packet length (41)"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0018",
"description": "Map Patches subcommand"
},
{
"name": "Map Count",
"type": "int",
"size": 4,
"value": "4",
"description": "Number of maps (always 4)"
},
{
"name": "Patches",
"type": "loop",
"description": "Patch counts for each map (Felucca, Trammel, Ilshenar, Malas)",
"loop": {
"countField": "4",
"fields": [
{
"name": "Static Blocks",
"type": "int",
"size": 4,
"description": "Number of patched static blocks"
},
{
"name": "Land Blocks",
"type": "int",
"size": 4,
"description": "Number of patched land blocks"
}
]
}
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMapPackets.cs",
"line": 25
}
},
{
"id": "0x56",
"name": "Map Command",
"description": "Server sends map pin commands to update the client\u0027s map display.",
"direction": "outgoing",
"isDynamic": false,
"size": 11,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x56",
"description": "Packet identifier"
},
{
"name": "Map Serial",
"type": "uint",
"size": 4,
"description": "Serial of the map item"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"description": "Map command type",
"enum": [
{ "value": "1", "name": "AddPin", "description": "Add a pin to the map" },
{ "value": "5", "name": "DisplayMap", "description": "Display the map to client" },
{ "value": "7", "name": "SetEditable", "description": "Set map editable state" }
]
},
{
"name": "Editable",
"type": "bool",
"size": 1,
"description": "True if map is editable (for command 7)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X coordinate of pin"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y coordinate of pin"
}
],
"related": [
{
"id": "0x90",
"relationship": "related",
"note": "Map Details packet"
}
],
"source": {
"file": "Projects/UOContent/Items/Maps/MapItemPackets.cs",
"line": 106
}
},
{
"id": "0x90",
"name": "Map Details",
"description": "Sends map details including bounds, dimensions, and graphic ID. Pre-NewCharacterList clients.",
"direction": "outgoing",
"isDynamic": false,
"size": 19,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x90",
"description": "Packet identifier"
},
{
"name": "Map Serial",
"type": "uint",
"size": 4,
"description": "Serial of the map item"
},
{
"name": "Graphic ID",
"type": "short",
"size": 2,
"value": "0x139D",
"description": "Map gump graphic ID"
},
{
"name": "Start X",
"type": "short",
"size": 2,
"description": "Map bounds start X coordinate"
},
{
"name": "Start Y",
"type": "short",
"size": 2,
"description": "Map bounds start Y coordinate"
},
{
"name": "End X",
"type": "short",
"size": 2,
"description": "Map bounds end X coordinate"
},
{
"name": "End Y",
"type": "short",
"size": 2,
"description": "Map bounds end Y coordinate"
},
{
"name": "Width",
"type": "short",
"size": 2,
"description": "Map width in pixels"
},
{
"name": "Height",
"type": "short",
"size": 2,
"description": "Map height in pixels"
}
],
"related": [
{
"id": "0xF5",
"relationship": "variant",
"note": "New Map Details for NewCharacterList clients"
}
],
"source": {
"file": "Projects/UOContent/Items/Maps/MapItemPackets.cs",
"line": 78
}
},
{
"id": "0xF5",
"name": "Map Details (New)",
"description": "Sends map details for NewCharacterList clients. Includes facet ID.",
"direction": "outgoing",
"isDynamic": false,
"size": 21,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF5",
"description": "Packet identifier"
},
{
"name": "Map Serial",
"type": "uint",
"size": 4,
"description": "Serial of the map item"
},
{
"name": "Graphic ID",
"type": "short",
"size": 2,
"value": "0x139D",
"description": "Map gump graphic ID"
},
{
"name": "Start X",
"type": "short",
"size": 2,
"description": "Map bounds start X coordinate"
},
{
"name": "Start Y",
"type": "short",
"size": 2,
"description": "Map bounds start Y coordinate"
},
{
"name": "End X",
"type": "short",
"size": 2,
"description": "Map bounds end X coordinate"
},
{
"name": "End Y",
"type": "short",
"size": 2,
"description": "Map bounds end Y coordinate"
},
{
"name": "Width",
"type": "short",
"size": 2,
"description": "Map width in pixels"
},
{
"name": "Height",
"type": "short",
"size": 2,
"description": "Map height in pixels"
},
{
"name": "Facet ID",
"type": "short",
"size": 2,
"description": "Map facet/world identifier",
"enum": [
{ "value": "0", "name": "Felucca", "description": "Felucca facet" },
{ "value": "1", "name": "Trammel", "description": "Trammel facet" },
{ "value": "2", "name": "Ilshenar", "description": "Ilshenar facet" },
{ "value": "3", "name": "Malas", "description": "Malas facet" },
{ "value": "4", "name": "Tokuno", "description": "Tokuno Islands" },
{ "value": "5", "name": "TerMur", "description": "Ter Mur facet" }
]
}
],
"related": [
{
"id": "0x90",
"relationship": "variant",
"note": "Old Map Details for pre-NewCharacterList clients"
}
],
"clientVersion": {
"min": "7.0.13.0",
"feature": "NewCharacterList"
},
"source": {
"file": "Projects/UOContent/Items/Maps/MapItemPackets.cs",
"line": 78
}
}
]
}

View file

@ -0,0 +1,185 @@
{
"category": "Menu",
"packets": [
{
"id": "0x7C",
"name": "Display Menu",
"description": "Displays an item list menu or question menu to the client.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Item List Menu",
"condition": "Menu is ItemListMenu",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x7C",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Menu Serial",
"type": "uint",
"size": 4,
"description": "Menu serial"
},
{
"name": "Menu ID",
"type": "ushort",
"size": 2,
"value": "0x0000",
"description": "Menu ID (always 0)"
},
{
"name": "Question Length",
"type": "byte",
"size": 1,
"description": "Length of question text"
},
{
"name": "Question",
"type": "ascii",
"description": "Question text"
},
{
"name": "Entry Count",
"type": "byte",
"size": 1,
"description": "Number of menu entries"
},
{
"name": "Entries",
"type": "loop",
"description": "Menu entries",
"loop": {
"countField": "entryCount",
"fields": [
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Item hue"
},
{
"name": "Name Length",
"type": "byte",
"size": 1,
"description": "Length of entry name"
},
{
"name": "Name",
"type": "ascii",
"description": "Entry name"
}
]
}
}
]
},
{
"name": "Question Menu",
"condition": "Menu is QuestionMenu",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x7C",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Menu Serial",
"type": "uint",
"size": 4,
"description": "Menu serial"
},
{
"name": "Menu ID",
"type": "ushort",
"size": 2,
"value": "0x0000",
"description": "Menu ID (always 0)"
},
{
"name": "Question Length",
"type": "byte",
"size": 1,
"description": "Length of question text"
},
{
"name": "Question",
"type": "ascii",
"description": "Question text"
},
{
"name": "Answer Count",
"type": "byte",
"size": 1,
"description": "Number of answers"
},
{
"name": "Answers",
"type": "loop",
"description": "Answer options",
"loop": {
"countField": "answerCount",
"fields": [
{
"name": "Padding",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused padding"
},
{
"name": "Answer Length",
"type": "byte",
"size": 1,
"description": "Length of answer text"
},
{
"name": "Answer",
"type": "ascii",
"description": "Answer text"
}
]
}
}
]
}
],
"related": [
{
"id": "0x7D",
"relationship": "response",
"note": "Menu Response from client"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMenuPackets.cs",
"line": 36
}
}
]
}

View file

@ -1,198 +1,526 @@
{
"category": "Message",
"packets": [
{
"id": "0x15",
"name": "Follow Message",
"description": "Instructs client to follow one entity with another.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x15", "description": "Packet identifier" },
{ "name": "followerSerial", "type": "uint", "size": 4, "description": "Serial of the follower" },
{ "name": "targetSerial", "type": "uint", "size": 4, "description": "Serial of the target to follow" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 231
}
},
{
"id": "0x1C",
"name": "ASCII Message",
"description": "Server sends ASCII-encoded message to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x1C", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of speaker (0xFFFFFFFF for system)" },
{ "name": "graphic", "type": "short", "size": 2, "description": "Body graphic of speaker" },
{
"name": "type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Message type",
"values": [
{ "value": 0, "name": "Regular", "description": "Normal speech" },
{ "value": 1, "name": "System", "description": "System message" },
{ "value": 2, "name": "Emote", "description": "Emote (*action*)" },
{ "value": 6, "name": "Label", "description": "Object label" },
{ "value": 7, "name": "Focus", "description": "Focused message" },
{ "value": 8, "name": "Whisper", "description": "Whisper" },
{ "value": 9, "name": "Yell", "description": "Yell" },
{ "value": 10, "name": "Spell", "description": "Spell words" },
{ "value": 13, "name": "Guild", "description": "Guild chat" },
{ "value": 14, "name": "Alliance", "description": "Alliance chat" },
{ "value": 15, "name": "Command", "description": "Command" }
]
},
{ "name": "hue", "type": "short", "size": 2, "description": "Text color hue" },
{ "name": "font", "type": "short", "size": 2, "description": "Font ID" },
{ "name": "name", "type": "ascii", "size": 30, "description": "Speaker name" },
{ "name": "text", "type": "ascii-null", "description": "Message text" }
],
"related": [
{ "id": "0x03", "relationship": "request", "note": "ASCII Speech from client" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 180
}
},
{
"id": "0xAE",
"name": "Unicode Message",
"description": "Server sends Unicode-encoded message to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xAE", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of speaker (0xFFFFFFFF for system)" },
{ "name": "graphic", "type": "short", "size": 2, "description": "Body graphic of speaker" },
{ "name": "type", "type": "byte", "size": 1, "description": "Message type (see 0x1C)" },
{ "name": "hue", "type": "short", "size": 2, "description": "Text color hue" },
{ "name": "font", "type": "short", "size": 2, "description": "Font ID" },
{ "name": "language", "type": "ascii", "size": 4, "description": "Language code (e.g., 'ENU')" },
{ "name": "name", "type": "ascii", "size": 30, "description": "Speaker name" },
{ "name": "text", "type": "unicode-be-null", "description": "Message text (Big Endian Unicode)" }
],
"related": [
{ "id": "0xAD", "relationship": "request", "note": "Unicode Speech from client" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 180
}
},
{
"id": "0xB7",
"name": "Help Response",
"description": "Server sends help text response to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xB7", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of entity" },
{ "name": "text", "type": "unicode-be-null", "description": "Help text" }
],
"related": [
{ "id": "0xB6", "relationship": "request", "note": "Object Help Request from client" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 263
}
},
{
"id": "0xC1",
"name": "Localized Message",
"description": "Server sends a localized (cliloc) message to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xC1", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of speaker" },
{ "name": "graphic", "type": "short", "size": 2, "description": "Body graphic of speaker" },
{ "name": "type", "type": "byte", "size": 1, "description": "Message type (see 0x1C)" },
{ "name": "hue", "type": "short", "size": 2, "description": "Text color hue" },
{ "name": "font", "type": "short", "size": 2, "description": "Font ID" },
{ "name": "clilocNumber", "type": "int", "size": 4, "description": "Cliloc entry number" },
{ "name": "name", "type": "ascii", "size": 30, "description": "Speaker name" },
{ "name": "arguments", "type": "unicode-le-null", "description": "Tab-separated arguments for cliloc" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 55
}
},
{
"id": "0xC2",
"name": "Prompt",
"description": "Server requests text input from client.",
"direction": "outgoing",
"isDynamic": false,
"size": 21,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xC2", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "value": "21", "description": "Packet length" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Prompt serial" },
{ "name": "promptId", "type": "uint", "size": 4, "description": "Prompt ID (same as serial)" },
{ "name": "padding", "type": "byte[]", "size": 10, "description": "Unused padding (zeros)" }
],
"related": [
{ "id": "0x9A", "relationship": "response", "note": "ASCII Prompt Response" },
{ "id": "0xC2", "relationship": "response", "note": "Unicode Prompt Response" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 246
}
},
{
"id": "0xCC",
"name": "Localized Message Affix",
"description": "Server sends a localized message with text prefix/suffix.",
"direction": "outgoing",
"isDynamic": true,
"size": "Dynamic",
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xCC", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of speaker" },
{ "name": "graphic", "type": "short", "size": 2, "description": "Body graphic of speaker" },
{ "name": "type", "type": "byte", "size": 1, "description": "Message type (see 0x1C)" },
{ "name": "hue", "type": "short", "size": 2, "description": "Text color hue" },
{ "name": "font", "type": "short", "size": 2, "description": "Font ID" },
{ "name": "clilocNumber", "type": "int", "size": 4, "description": "Cliloc entry number" },
{
"name": "affixType",
"type": "bitfield",
"size": 1,
"description": "How to apply the affix",
"flags": [
{ "bit": "0x00", "name": "Append", "description": "Append affix to end" },
{ "bit": "0x01", "name": "Prepend", "description": "Prepend affix to start" },
{ "bit": "0x02", "name": "System", "description": "System message style" }
]
},
{ "name": "name", "type": "ascii", "size": 30, "description": "Speaker name" },
{ "name": "affix", "type": "ascii-null", "description": "Text to prepend/append" },
{ "name": "arguments", "type": "unicode-be-null", "description": "Tab-separated arguments for cliloc" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 112
}
}
]
}
{
"category": "Message",
"packets": [
{
"id": "0x15",
"name": "Follow Message",
"description": "Instructs client to follow one entity with another.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x15",
"description": "Packet identifier"
},
{
"name": "Follower Serial",
"type": "uint",
"size": 4,
"description": "Serial of the follower"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target to follow"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 231
}
},
{
"id": "0x1C",
"name": "ASCII Message",
"description": "Server sends ASCII-encoded message to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x1C",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of speaker (0xFFFFFFFF for system)"
},
{
"name": "Graphic",
"type": "short",
"size": 2,
"description": "Body graphic of speaker"
},
{
"name": "Type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Message type",
"values": [
{
"value": 0,
"name": "Regular",
"description": "Normal speech"
},
{
"value": 1,
"name": "System",
"description": "System message"
},
{
"value": 2,
"name": "Emote",
"description": "Emote (*action*)"
},
{
"value": 6,
"name": "Label",
"description": "Object label"
},
{
"value": 7,
"name": "Focus",
"description": "Focused message"
},
{
"value": 8,
"name": "Whisper",
"description": "Whisper"
},
{
"value": 9,
"name": "Yell",
"description": "Yell"
},
{
"value": 10,
"name": "Spell",
"description": "Spell words"
},
{
"value": 13,
"name": "Guild",
"description": "Guild chat"
},
{
"value": 14,
"name": "Alliance",
"description": "Alliance chat"
},
{
"value": 15,
"name": "Command",
"description": "Command"
}
]
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Speaker name"
},
{
"name": "Text",
"type": "ascii-t",
"description": "Message text"
}
],
"related": [
{
"id": "0x03",
"relationship": "request",
"note": "ASCII Speech from client"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 180
}
},
{
"id": "0xAE",
"name": "Unicode Message",
"description": "Server sends Unicode-encoded message to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xAE",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of speaker (0xFFFFFFFF for system)"
},
{
"name": "Graphic",
"type": "short",
"size": 2,
"description": "Body graphic of speaker"
},
{
"name": "Type",
"type": "byte",
"size": 1,
"description": "Message type (see 0x1C)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Language",
"type": "ascii",
"size": 4,
"description": "Language code (e.g., \u0027ENU\u0027)"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Speaker name"
},
{
"name": "Text",
"type": "utf16be-t",
"description": "Message text (Big Endian Unicode)"
}
],
"related": [
{
"id": "0xAD",
"relationship": "request",
"note": "Unicode Speech from client"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 180
}
},
{
"id": "0xB7",
"name": "Help Response",
"description": "Server sends help text response to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of entity"
},
{
"name": "Text",
"type": "utf16be-t",
"description": "Help text"
}
],
"related": [
{
"id": "0xB6",
"relationship": "request",
"note": "Object Help Request from client"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 263
}
},
{
"id": "0xC1",
"name": "Localized Message",
"description": "Server sends a localized (cliloc) message to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC1",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of speaker"
},
{
"name": "Graphic",
"type": "short",
"size": 2,
"description": "Body graphic of speaker"
},
{
"name": "Type",
"type": "byte",
"size": 1,
"description": "Message type (see 0x1C)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Cliloc Number",
"type": "int",
"size": 4,
"description": "Cliloc entry number"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Speaker name"
},
{
"name": "Arguments",
"type": "utf16le-t",
"description": "Tab-separated arguments for cliloc"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 55
}
},
{
"id": "0xC2",
"name": "Prompt",
"description": "Server requests text input from client.",
"direction": "outgoing",
"isDynamic": false,
"size": 21,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC2",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "21",
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Prompt serial"
},
{
"name": "Prompt ID",
"type": "uint",
"size": 4,
"description": "Prompt ID (same as serial)"
},
{
"name": "Padding",
"type": "byte[]",
"size": 10,
"description": "Unused padding (zeros)"
}
],
"related": [
{
"id": "0x9A",
"relationship": "response",
"note": "ASCII Prompt Response"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 246
}
},
{
"id": "0xCC",
"name": "Localized Message Affix",
"description": "Server sends a localized message with text prefix/suffix.",
"direction": "outgoing",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xCC",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of speaker"
},
{
"name": "Graphic",
"type": "short",
"size": 2,
"description": "Body graphic of speaker"
},
{
"name": "Type",
"type": "byte",
"size": 1,
"description": "Message type (see 0x1C)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Cliloc Number",
"type": "int",
"size": 4,
"description": "Cliloc entry number"
},
{
"name": "Affix Type",
"type": "enum",
"size": 1,
"description": "How to apply the affix",
"values": [
{
"value": 0,
"name": "Append",
"description": "Append affix to end"
},
{
"value": 1,
"name": "Prepend",
"description": "Prepend affix to start"
},
{
"value": 2,
"name": "System",
"description": "System message style"
}
]
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Speaker name"
},
{
"name": "Affix",
"type": "ascii-t",
"description": "Text to prepend/append"
},
{
"name": "Arguments",
"type": "utf16be-t",
"description": "Tab-separated arguments for cliloc"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 112
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,101 +1,256 @@
{
"category": "Movement",
"packets": [
{
"id": "0x21",
"name": "Movement Rejection",
"description": "Sent by the server when player movement is blocked (collision, teleport area, etc). Contains the corrected position the client should snap back to.",
"direction": "outgoing",
"isDynamic": false,
"size": 8,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x21", "description": "Packet identifier" },
{ "name": "sequence", "type": "byte", "size": 1, "description": "Sequence number of the rejected movement request" },
{ "name": "x", "type": "short", "size": 2, "description": "Correct X coordinate" },
{ "name": "y", "type": "short", "size": 2, "description": "Correct Y coordinate" },
{ "name": "direction", "type": "byte", "size": 1, "description": "Correct facing direction (0-7)" },
{ "name": "z", "type": "sbyte", "size": 1, "description": "Correct Z coordinate" }
],
"related": [
{ "id": "0x02", "relationship": "request", "note": "The movement request that was rejected" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 45
}
},
{
"id": "0x22",
"name": "Movement Acknowledgment",
"description": "Sent by the server to confirm successful player movement. Includes the player's current notoriety for display purposes.",
"direction": "outgoing",
"isDynamic": false,
"size": 3,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x22", "description": "Packet identifier" },
{ "name": "sequence", "type": "byte", "size": 1, "description": "Sequence number of the accepted movement request" },
{ "name": "notoriety", "type": "byte", "size": 1, "description": "Player's current notoriety flag (0=Innocent, 1=Friend, 2=Gray/Attackable, 3=Criminal, 4=Enemy, 5=Murderer, 6=Invulnerable)" }
],
"related": [
{ "id": "0x02", "relationship": "request", "note": "The movement request that was accepted" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 42
}
},
{
"id": "0x97",
"name": "Move Player",
"description": "Server-initiated player movement. Forces the client to move in a direction (used for pushback effects, conveyors, etc).",
"direction": "outgoing",
"isDynamic": false,
"size": 2,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x97", "description": "Packet identifier" },
{ "name": "direction", "type": "byte", "size": 1, "description": "Direction to move (0-7). Bit 0x80 indicates running." }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 35
}
},
{
"id": "0xBF",
"subId": "0x0026",
"name": "Speed Control",
"description": "Controls the player's movement speed. Used for mount speed changes, walk/run restrictions, etc.",
"direction": "outgoing",
"isDynamic": false,
"size": 6,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xBF", "description": "Packet identifier" },
{ "name": "length", "type": "ushort", "size": 2, "value": "0x0006", "description": "Packet length" },
{ "name": "subCommand", "type": "ushort", "size": 2, "value": "0x0026", "description": "Sub-command for speed control" },
{ "name": "speedSetting", "type": "byte", "size": 1, "description": "Speed setting: 0=Disable (normal), 1=Mount speed, 2=Walk only" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 31
}
},
{
"id": "0xF2",
"name": "Time Sync Response",
"description": "Server response to client time synchronization request. Contains tick counts for latency calculation.",
"direction": "outgoing",
"isDynamic": false,
"size": 25,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xF2", "description": "Packet identifier" },
{ "name": "tickCount1", "type": "long", "size": 8, "description": "Server tick count" },
{ "name": "tickCount2", "type": "long", "size": 8, "description": "Server tick count" },
{ "name": "tickCount3", "type": "long", "size": 8, "description": "Server tick count" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 63
}
}
]
{
"category": "Movement",
"packets": [
{
"id": "0x21",
"name": "Movement Rejection",
"description": "Sent by the server when player movement is blocked (collision, teleport area, etc). Contains the corrected position the client should snap back to.",
"direction": "outgoing",
"isDynamic": false,
"size": 8,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x21",
"description": "Packet identifier"
},
{
"name": "Sequence",
"type": "byte",
"size": 1,
"description": "Sequence number of the rejected movement request"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Correct X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Correct Y coordinate"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Correct facing direction (0-7)"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Correct Z coordinate"
}
],
"related": [
{
"id": "0x02",
"relationship": "request",
"note": "The movement request that was rejected"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 45
}
},
{
"id": "0x22",
"name": "Movement Acknowledgment",
"description": "Sent by the server to confirm successful player movement. Includes the player\u0027s current notoriety for display purposes.",
"direction": "outgoing",
"noMerge": true,
"isDynamic": false,
"size": 3,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x22",
"description": "Packet identifier"
},
{
"name": "Sequence",
"type": "byte",
"size": 1,
"description": "Sequence number of the accepted movement request"
},
{
"name": "Notoriety",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Player\u0027s current notoriety flag",
"values": [
{
"value": 0,
"name": "Innocent",
"description": "Blue - innocent player"
},
{
"value": 1,
"name": "Friend",
"description": "Green - ally/friend"
},
{
"value": 2,
"name": "Attackable",
"description": "Gray - can be attacked"
},
{
"value": 3,
"name": "Criminal",
"description": "Gray - criminal flag"
},
{
"value": 4,
"name": "Enemy",
"description": "Orange - enemy"
},
{
"value": 5,
"name": "Murderer",
"description": "Red - murderer"
},
{
"value": 6,
"name": "Invulnerable",
"description": "Yellow - invulnerable"
}
]
}
],
"related": [
{
"id": "0x02",
"relationship": "request",
"note": "The movement request that was accepted"
}
],
"notes": "Not related to incoming 0x22 (Resynchronize) despite sharing the same packet ID.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 42
}
},
{
"id": "0x97",
"name": "Move Player",
"description": "Server-initiated player movement. Forces the client to move in a direction (used for pushback effects, conveyors, etc).",
"direction": "outgoing",
"isDynamic": false,
"size": 2,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x97",
"description": "Packet identifier"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Direction to move (0-7). Bit 0x80 indicates running."
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 35
}
},
{
"id": "0xBF",
"subId": "0x26",
"name": "Speed Control",
"description": "Controls the player\u0027s movement speed. Used for mount speed changes, walk/run restrictions, etc.",
"direction": "outgoing",
"isDynamic": false,
"size": 6,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0026",
"description": "Sub-command for speed control"
},
{
"name": "Speed Setting",
"type": "byte",
"size": 1,
"description": "Movement speed mode",
"enum": [
{ "value": "0", "name": "Disable", "description": "Normal speed (remove override)" },
{ "value": "1", "name": "MountSpeed", "description": "Force mounted movement speed" },
{ "value": "2", "name": "WalkOnly", "description": "Force walk speed only" }
]
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 31
}
},
{
"id": "0xF2",
"name": "Time Sync Response",
"description": "Server response to client time synchronization request. Contains tick counts for latency calculation.",
"direction": "outgoing",
"isDynamic": false,
"size": 25,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF2",
"description": "Packet identifier"
},
{
"name": "Tick Count1",
"type": "long",
"size": 8,
"description": "Server tick count"
},
{
"name": "Tick Count2",
"type": "long",
"size": 8,
"description": "Server tick count"
},
{
"name": "Tick Count3",
"type": "long",
"size": 8,
"description": "Server tick count"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 63
}
}
]
}

View file

@ -0,0 +1,281 @@
{
"category": "Party",
"packets": [
{
"id": "0xBF",
"subId": "0x06",
"name": "Party Message",
"description": "Party system messages with various subcommands.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Member List",
"version": "0x01",
"condition": "command == 0x01",
"size": "7 + (memberCount x 4)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Party subcommand"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Member list command"
},
{
"name": "Member Count",
"type": "byte",
"size": 1,
"description": "Number of party members"
},
{
"name": "Members",
"type": "loop",
"description": "Party members",
"loop": {
"countField": "memberCount",
"fields": [
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Member\u0027s serial"
}
]
}
}
]
},
{
"name": "Remove Member",
"version": "0x02",
"condition": "command == 0x02",
"size": "11 + (memberCount x 4)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Party subcommand"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x02",
"description": "Remove member command"
},
{
"name": "Member Count",
"type": "byte",
"size": 1,
"description": "Number of remaining members"
},
{
"name": "Removed Serial",
"type": "uint",
"size": 4,
"description": "Serial of removed member"
},
{
"name": "Members",
"type": "loop",
"description": "Remaining party members",
"loop": {
"countField": "memberCount",
"fields": [
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Member\u0027s serial"
}
]
}
}
]
},
{
"name": "Private Message",
"version": "0x03",
"condition": "command == 0x03",
"size": "12 + (text.Length x 2)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Party subcommand"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x03",
"description": "Private message command"
},
{
"name": "Sender Serial",
"type": "uint",
"size": 4,
"description": "Serial of message sender"
},
{
"name": "Text",
"type": "utf16be-t",
"description": "Message text"
}
]
},
{
"name": "Public Message",
"version": "0x04",
"condition": "command == 0x04",
"size": "12 + (text.Length x 2)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Party subcommand"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x04",
"description": "Public message command"
},
{
"name": "Sender Serial",
"type": "uint",
"size": 4,
"description": "Serial of message sender"
},
{
"name": "Text",
"type": "utf16be-t",
"description": "Message text"
}
]
},
{
"name": "Party Invitation",
"version": "0x07",
"condition": "command == 0x07",
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "10",
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Party subcommand"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x07",
"description": "Invitation command"
},
{
"name": "Leader Serial",
"type": "uint",
"size": 4,
"description": "Serial of party leader"
}
]
}
],
"related": [
{
"id": "0xBF/0x06",
"relationship": "request",
"note": "Party Message from client"
}
],
"source": {
"file": "Projects/UOContent/Engines/Party/PartyPackets.cs",
"line": 28
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,267 @@
{
"category": "Secure Trade",
"packets": [
{
"id": "0x6F",
"name": "Secure Trade",
"description": "Manages secure trade windows between players.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Display Trade Window",
"condition": "flag == Display (0)",
"size": 47,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "47",
"description": "Packet length"
},
{
"name": "Flag",
"type": "enum",
"enumType": "sequential",
"size": 1,
"value": "0",
"description": "Trade action flag",
"values": [
{
"value": 0,
"name": "Display",
"description": "Open trade window"
},
{
"value": 1,
"name": "Close",
"description": "Close trade window"
},
{
"value": 2,
"name": "Update",
"description": "Update accept status"
},
{
"value": 3,
"name": "Update Gold",
"description": "Update gold amounts"
},
{
"value": 4,
"name": "Update Ledger",
"description": "Update ledger"
}
]
},
{
"name": "Partner Serial",
"type": "uint",
"size": 4,
"description": "Serial of trading partner"
},
{
"name": "First Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of your trade container"
},
{
"name": "Second Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of partner\u0027s trade container"
},
{
"name": "Has Name",
"type": "bool",
"size": 1,
"value": "true",
"description": "Name field follows"
},
{
"name": "Partner Name",
"type": "ascii",
"size": 30,
"description": "Trading partner\u0027s name"
}
]
},
{
"name": "Close Trade Window",
"condition": "flag == Close (1)",
"size": 17,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "17",
"description": "Packet length"
},
{
"name": "Flag",
"type": "byte",
"size": 1,
"value": "1",
"description": "Close flag"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Trade container serial"
},
{
"name": "Unused1",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Unused2",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Has Name",
"type": "bool",
"size": 1,
"value": "false",
"description": "No name follows"
}
]
},
{
"name": "Update Accept Status",
"condition": "flag == Update (2)",
"size": 17,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "17",
"description": "Packet length"
},
{
"name": "Flag",
"type": "byte",
"size": 1,
"value": "2",
"description": "Update flag"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Trade container serial"
},
{
"name": "Your Accept",
"type": "int",
"size": 4,
"description": "Your accept status (0 or 1)"
},
{
"name": "Partner Accept",
"type": "int",
"size": 4,
"description": "Partner\u0027s accept status (0 or 1)"
},
{
"name": "Has Name",
"type": "bool",
"size": 1,
"value": "false",
"description": "No name follows"
}
]
},
{
"name": "Update Gold/Platinum",
"condition": "flag == UpdateGold (3)",
"size": 17,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "17",
"description": "Packet length"
},
{
"name": "Flag",
"type": "byte",
"size": 1,
"value": "3",
"description": "UpdateGold flag"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Trade container serial"
},
{
"name": "Gold",
"type": "int",
"size": 4,
"description": "Gold amount"
},
{
"name": "Platinum",
"type": "int",
"size": 4,
"description": "Platinum amount"
},
{
"name": "Has Name",
"type": "bool",
"size": 1,
"value": "false",
"description": "No name follows"
}
]
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingSecureTradePackets.cs",
"line": 32
}
}
]
}

View file

@ -1,90 +1,221 @@
{
"category": "Targeting",
"packets": [
{
"id": "0x6C",
"name": "Target Request",
"description": "Requests the client to select a target.",
"direction": "outgoing",
"isDynamic": false,
"size": 19,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x6C", "description": "Packet identifier" },
{ "name": "allowGround", "type": "bool", "size": 1, "description": "True = allow ground targeting" },
{ "name": "targetId", "type": "int", "size": 4, "description": "Target cursor ID for matching response" },
{
"name": "flags",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Target cursor flags",
"values": [
{ "value": 0, "name": "Neutral", "description": "Neutral targeting (gray cursor)" },
{ "value": 1, "name": "Harmful", "description": "Harmful action (red cursor)" },
{ "value": 2, "name": "Beneficial", "description": "Beneficial action (green cursor)" },
{ "value": 3, "name": "Cancel", "description": "Cancel targeting" }
]
},
{ "name": "padding", "type": "byte[]", "size": 12, "description": "Padding (zeros)" }
],
"related": [
{ "id": "0x6C", "relationship": "response", "note": "Target Response from client" }
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingTargetPackets.cs",
"line": 57
}
},
{
"id": "0x99",
"name": "Multi Target Request",
"description": "Requests the client to place a multi (house/boat) structure.",
"direction": "outgoing",
"isDynamic": false,
"size": "26 (pre-HS) or 30 (HS+)",
"variants": [
{
"version": "pre-HighSeas",
"name": "Classic",
"size": 26,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x99", "description": "Packet identifier" },
{ "name": "allowGround", "type": "bool", "size": 1, "description": "Allow ground targeting" },
{ "name": "targetId", "type": "int", "size": 4, "description": "Target cursor ID" },
{ "name": "flags", "type": "byte", "size": 1, "description": "Target cursor flags" },
{ "name": "padding", "type": "byte[]", "size": 11, "description": "Padding (zeros)" },
{ "name": "multiId", "type": "short", "size": 2, "description": "Multi graphic ID" },
{ "name": "offsetX", "type": "short", "size": 2, "description": "X offset for placement" },
{ "name": "offsetY", "type": "short", "size": 2, "description": "Y offset for placement" },
{ "name": "offsetZ", "type": "short", "size": 2, "description": "Z offset for placement" }
]
},
{
"version": "HighSeas+",
"name": "High Seas Extended",
"condition": "Client version >= 7.0.9.0 (HighSeas)",
"size": 30,
"fields": [
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x99", "description": "Packet identifier" },
{ "name": "allowGround", "type": "bool", "size": 1, "description": "Allow ground targeting" },
{ "name": "targetId", "type": "int", "size": 4, "description": "Target cursor ID" },
{ "name": "flags", "type": "byte", "size": 1, "description": "Target cursor flags" },
{ "name": "padding", "type": "byte[]", "size": 11, "description": "Padding (zeros)" },
{ "name": "multiId", "type": "short", "size": 2, "description": "Multi graphic ID" },
{ "name": "offsetX", "type": "short", "size": 2, "description": "X offset for placement" },
{ "name": "offsetY", "type": "short", "size": 2, "description": "Y offset for placement" },
{ "name": "offsetZ", "type": "short", "size": 2, "description": "Z offset for placement" },
{ "name": "unknown", "type": "int", "size": 4, "description": "Unknown (HighSeas extension)" }
]
}
],
"clientVersion": {
"feature": "HighSeas adds 4 bytes"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingTargetPackets.cs",
"line": 23
}
}
]
}
{
"category": "Targeting",
"packets": [
{
"id": "0x6C",
"name": "Target Request",
"description": "Requests the client to select a target.",
"direction": "outgoing",
"isDynamic": false,
"size": 19,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6C",
"description": "Packet identifier"
},
{
"name": "Allow Ground",
"type": "bool",
"size": 1,
"description": "True = allow ground targeting"
},
{
"name": "Target ID",
"type": "int",
"size": 4,
"description": "Target cursor ID for matching response"
},
{
"name": "Flags",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Target cursor flags",
"values": [
{
"value": 0,
"name": "Neutral",
"description": "Neutral targeting (gray cursor)"
},
{
"value": 1,
"name": "Harmful",
"description": "Harmful action (red cursor)"
},
{
"value": 2,
"name": "Beneficial",
"description": "Beneficial action (green cursor)"
},
{
"value": 3,
"name": "Cancel",
"description": "Cancel targeting"
}
]
},
{
"name": "Padding",
"type": "byte[]",
"size": 12,
"description": "Padding (zeros)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingTargetPackets.cs",
"line": 57
}
},
{
"id": "0x99",
"name": "Multi Target Request",
"description": "Requests the client to place a multi (house/boat) structure.",
"direction": "outgoing",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"version": "pre-HighSeas",
"name": "Classic",
"size": 26,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x99",
"description": "Packet identifier"
},
{
"name": "Allow Ground",
"type": "bool",
"size": 1,
"description": "Allow ground targeting"
},
{
"name": "Target ID",
"type": "int",
"size": 4,
"description": "Target cursor ID"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Target cursor flags"
},
{
"name": "Padding",
"type": "byte[]",
"size": 11,
"description": "Padding (zeros)"
},
{
"name": "Multi ID",
"type": "short",
"size": 2,
"description": "Multi graphic ID"
},
{
"name": "Offset X",
"type": "short",
"size": 2,
"description": "X offset for placement"
},
{
"name": "Offset Y",
"type": "short",
"size": 2,
"description": "Y offset for placement"
},
{
"name": "Offset Z",
"type": "short",
"size": 2,
"description": "Z offset for placement"
}
]
},
{
"version": "HighSeas+",
"name": "High Seas Extended",
"condition": "Client version \u003e= 7.0.9.0 (HighSeas)",
"size": 30,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x99",
"description": "Packet identifier"
},
{
"name": "Allow Ground",
"type": "bool",
"size": 1,
"description": "Allow ground targeting"
},
{
"name": "Target ID",
"type": "int",
"size": 4,
"description": "Target cursor ID"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Target cursor flags"
},
{
"name": "Padding",
"type": "byte[]",
"size": 11,
"description": "Padding (zeros)"
},
{
"name": "Multi ID",
"type": "short",
"size": 2,
"description": "Multi graphic ID"
},
{
"name": "Offset X",
"type": "short",
"size": 2,
"description": "X offset for placement"
},
{
"name": "Offset Y",
"type": "short",
"size": 2,
"description": "Y offset for placement"
},
{
"name": "Offset Z",
"type": "short",
"size": 2,
"description": "Z offset for placement"
},
{
"name": "Unknown",
"type": "int",
"size": 4,
"description": "Unknown (HighSeas extension)"
}
]
}
],
"clientVersion": {
"feature": "HighSeas adds 4 bytes"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingTargetPackets.cs",
"line": 23
}
}
]
}

View file

@ -0,0 +1,216 @@
{
"category": "Vendor",
"packets": [
{
"id": "0x3B",
"name": "End Vendor Transaction",
"description": "Ends a vendor buy or sell transaction.",
"direction": "outgoing",
"isDynamic": false,
"size": 8,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x3B",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "8",
"description": "Packet length"
},
{
"name": "Vendor Serial",
"type": "uint",
"size": 4,
"description": "Serial of the vendor"
},
{
"name": "Item Count",
"type": "byte",
"size": 1,
"value": "0",
"description": "Item count (0 = end transaction)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs",
"line": 111
}
},
{
"id": "0x74",
"name": "Vendor Buy List",
"description": "Sends the list of items available for purchase from a vendor with prices.",
"direction": "outgoing",
"isDynamic": true,
"size": "8+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x74",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of vendor\u0027s buy container"
},
{
"name": "Item Count",
"type": "byte",
"size": 1,
"description": "Number of items"
},
{
"name": "Items",
"type": "loop",
"description": "Buy items with prices",
"loop": {
"countField": "itemCount",
"fields": [
{
"name": "Price",
"type": "int",
"size": 4,
"description": "Item price"
},
{
"name": "Desc Length",
"type": "byte",
"size": 1,
"description": "Description length + 1"
},
{
"name": "Description",
"type": "ascii-t",
"description": "Item description"
}
]
}
}
],
"related": [
{
"id": "0x3C",
"relationship": "request",
"note": "Container Content with items"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs",
"line": 77
}
},
{
"id": "0x9E",
"name": "Vendor Sell List",
"description": "Sends the list of items the vendor will buy from the player.",
"direction": "outgoing",
"isDynamic": true,
"size": "9+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x9E",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Vendor Serial",
"type": "uint",
"size": 4,
"description": "Serial of the vendor"
},
{
"name": "Item Count",
"type": "ushort",
"size": 2,
"description": "Number of items"
},
{
"name": "Items",
"type": "loop",
"description": "Sell items with prices",
"loop": {
"countField": "itemCount",
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Item serial"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Item amount"
},
{
"name": "Price",
"type": "ushort",
"size": 2,
"description": "Price per unit"
},
{
"name": "Name Length",
"type": "ushort",
"size": 2,
"description": "Name length"
},
{
"name": "Name",
"type": "ascii",
"description": "Item name"
}
]
}
}
],
"related": [
{
"id": "0x9F",
"relationship": "response",
"note": "Vendor Sell Reply from client"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingVendorSellPackets.cs",
"line": 25
}
}
]
}

View file

@ -0,0 +1,89 @@
{
"category": "Weapon Ability",
"packets": [
{
"id": "0xBF",
"subId": "0x21",
"name": "Clear Weapon Ability",
"description": "Clears the currently selected weapon ability.",
"direction": "outgoing",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "5",
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0021",
"description": "Clear Weapon Ability subcommand"
}
],
"source": {
"file": "Projects/UOContent/Items/Weapons/Abilities/WeaponAbilityPackets.cs",
"line": 37
}
},
{
"id": "0xBF",
"subId": "0x25",
"name": "Toggle Special Ability",
"description": "Toggles a special weapon ability on or off.",
"direction": "outgoing",
"isDynamic": false,
"size": 8,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "8",
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0025",
"description": "Toggle Special Ability subcommand"
},
{
"name": "Ability ID",
"type": "short",
"size": 2,
"description": "Ability ID"
},
{
"name": "Active",
"type": "bool",
"size": 1,
"description": "True if ability is active"
}
],
"source": {
"file": "Projects/UOContent/Items/Weapons/Abilities/WeaponAbilityPackets.cs",
"line": 40
}
}
]
}

File diff suppressed because one or more lines are too long

View file

@ -56,12 +56,10 @@ public static class OutgoingPlayerPackets
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void SendChangeUpdateRange(this NetState ns, byte range) =>
ns?.Send(stackalloc byte[] { 0xC8, range });
public static void SendChangeUpdateRange(this NetState ns, byte range) => ns?.Send(stackalloc byte[] { 0xC8, range });
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void SendDeathStatus(this NetState ns) =>
ns?.Send(stackalloc byte[] { 0x2C, 2 });
public static void SendDeathStatus(this NetState ns) => ns?.Send(stackalloc byte[] { 0x2C, 2 });
public static void SendDisplayProfile(this NetState ns, Serial m, string header, string body, string footer)
{

View file

@ -29,9 +29,7 @@ public enum TradeFlag : byte
public static class OutgoingSecureTradePackets
{
public static void SendDisplaySecureTrade(
this NetState ns, Mobile them, Container first, Container second, string name
)
public static void SendDisplaySecureTrade(this NetState ns, Mobile them, Container first, Container second, string name)
{
if (ns.CannotSendPackets())
{