ModernUO/Distribution/Data/packets/incoming/mahjong.json
Kamron Batman 91ba9fba88
docs: Expand packet documentation with variants, sub-commands, and fixes
- Add Mahjong packets (0xDA) with 18 sub-commands (6 outgoing, 12 incoming)
- Add Bulletin Board incoming packets (0x71) with 4 sub-commands
- Add Corpse Equipment packet (0x89)
- Convert 0x6F Secure Trade to variants (Cancel, Toggle Accept, Update Gold)
- Convert 0xB8 Profile Request to variants (Display, Edit)
- Convert 0xAD Unicode Speech to variants with encoded keyword documentation
- Move 0xD7 base packet from player.json to encoded.json for consistency
- Fix dropdown arrow positioning in HTML template
- Fix packet sorting for embedded subIds (0xBF/0x22 format)
- Add reflexive relationships between related packets
- Update 0x3C container content with corpse usage notes

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 16:40:39 -08:00

907 lines
50 KiB
JSON

{
"category": "Mahjong",
"packets": [
{
"id": "0xDA",
"name": "Mahjong Game",
"description": "Mahjong game packets for controlling the in-game Mahjong table. Used for both client commands and server updates.",
"direction": "both",
"isDynamic": true,
"size": "var",
"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,
"description": "Command ID (incoming uses byte prefix + byte command)"
},
{
"name": "Data",
"type": "byte[]",
"description": "Command-specific data"
}
],
"subpackets": [
{
"subId": "0x02",
"name": "Players Info",
"description": "Sends player information for all seats",
"direction": "outgoing"
},
{
"subId": "0x03",
"name": "Tile Info",
"description": "Sends information about a single tile",
"direction": "outgoing"
},
{
"subId": "0x04",
"name": "Tiles Info",
"description": "Sends information about all tiles",
"direction": "outgoing"
},
{
"subId": "0x05",
"name": "General Info",
"description": "Sends game state (dice, dealer, wall break)",
"direction": "outgoing"
},
{
"subId": "0x06",
"name": "Exit Game",
"description": "Client exits the game",
"direction": "incoming"
},
{
"subId": "0x0A",
"name": "Give Points",
"description": "Transfer points to another player",
"direction": "incoming"
},
{
"subId": "0x0B",
"name": "Roll Dice",
"description": "Client requests to roll dice",
"direction": "incoming"
},
{
"subId": "0x0C",
"name": "Build Walls",
"description": "Dealer builds/resets tile walls",
"direction": "incoming"
},
{
"subId": "0x0D",
"name": "Reset Scores",
"description": "Dealer resets all scores",
"direction": "incoming"
},
{
"subId": "0x0F",
"name": "Assign Dealer",
"description": "Assign a new dealer",
"direction": "incoming"
},
{
"subId": "0x10",
"name": "Open Seat",
"description": "Open a seat for new players",
"direction": "incoming"
},
{
"subId": "0x11",
"name": "Change Option",
"description": "Change game options",
"direction": "incoming"
},
{
"subId": "0x15",
"name": "Move Wall Break",
"description": "Move wall break indicator",
"direction": "incoming"
},
{
"subId": "0x16",
"name": "Toggle Public Hand",
"description": "Toggle hand visibility",
"direction": "incoming"
},
{
"subId": "0x17",
"name": "Move Tile",
"description": "Move a tile on the board",
"direction": "incoming"
},
{
"subId": "0x18",
"name": "Move Dealer Indicator",
"description": "Move dealer indicator",
"direction": "incoming"
},
{
"subId": "0x19",
"name": "Join Game",
"description": "Server opens game interface",
"direction": "outgoing"
},
{
"subId": "0x1A",
"name": "Relieve",
"description": "Server closes game interface",
"direction": "outgoing"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 46
}
},
{
"id": "0xDA",
"subId": "0x06",
"name": "Mahjong Exit Game",
"description": "Client requests to exit the Mahjong game.",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"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,
"value": "0x06",
"description": "Exit Game command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 108
}
},
{
"id": "0xDA",
"subId": "0x0A",
"name": "Mahjong Give Points",
"description": "Client transfers points to another player.",
"direction": "incoming",
"isDynamic": false,
"size": 14,
"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,
"value": "0x0A",
"description": "Give Points command"
},
{
"name": "To Position",
"type": "byte",
"size": 1,
"description": "Target player seat position"
},
{
"name": "Amount",
"type": "int",
"size": 4,
"description": "Points to transfer"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 120
}
},
{
"id": "0xDA",
"subId": "0x0B",
"name": "Mahjong Roll Dice",
"description": "Client requests to roll the dice.",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"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,
"value": "0x0B",
"description": "Roll Dice command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 133
}
},
{
"id": "0xDA",
"subId": "0x0C",
"name": "Mahjong Build Walls",
"description": "Dealer requests to reset and build the tile walls.",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"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,
"value": "0x0C",
"description": "Build Walls command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 143
}
},
{
"id": "0xDA",
"subId": "0x0D",
"name": "Mahjong Reset Scores",
"description": "Dealer requests to reset all player scores to base value.",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"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,
"value": "0x0D",
"description": "Reset Scores command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 153
}
},
{
"id": "0xDA",
"subId": "0x0F",
"name": "Mahjong Assign Dealer",
"description": "Dealer assigns another player as the new dealer.",
"direction": "incoming",
"isDynamic": false,
"size": 10,
"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,
"value": "0x0F",
"description": "Assign Dealer command"
},
{
"name": "Position",
"type": "byte",
"size": 1,
"description": "Seat position of new dealer"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 163
}
},
{
"id": "0xDA",
"subId": "0x10",
"name": "Mahjong Open Seat",
"description": "Dealer opens a seat, removing the current player.",
"direction": "incoming",
"isDynamic": false,
"size": 10,
"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,
"value": "0x10",
"description": "Open Seat command"
},
{
"name": "Position",
"type": "byte",
"size": 1,
"description": "Seat position to open"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 175
}
},
{
"id": "0xDA",
"subId": "0x11",
"name": "Mahjong Change Option",
"description": "Dealer changes game options (show scores, spectator vision).",
"direction": "incoming",
"isDynamic": false,
"size": 13,
"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,
"value": "0x11",
"description": "Change Option command"
},
{
"name": "Reserved",
"type": "short",
"size": 2,
"description": "Reserved (not used)"
},
{
"name": "Reserved 2",
"type": "byte",
"size": 1,
"description": "Reserved (not used)"
},
{
"name": "Options",
"type": "bitflags",
"size": 1,
"description": "Game options",
"values": [
{ "value": "0x01", "name": "Show Scores", "description": "Display player scores" },
{ "value": "0x02", "name": "Spectator Vision", "description": "Spectators can see all tiles" }
]
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 192
}
},
{
"id": "0xDA",
"subId": "0x15",
"name": "Mahjong Move Wall Break Indicator",
"description": "Dealer moves the wall break indicator position.",
"direction": "incoming",
"isDynamic": false,
"size": 13,
"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,
"value": "0x15",
"description": "Move Wall Break Indicator command"
},
{
"name": "Y Position",
"type": "short",
"size": 2,
"description": "New Y coordinate"
},
{
"name": "X Position",
"type": "short",
"size": 2,
"description": "New X coordinate"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 208
}
},
{
"id": "0xDA",
"subId": "0x16",
"name": "Mahjong Toggle Public Hand",
"description": "Player toggles whether their hand is visible to others.",
"direction": "incoming",
"isDynamic": false,
"size": 13,
"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,
"value": "0x16",
"description": "Toggle Public Hand command"
},
{
"name": "Reserved",
"type": "short",
"size": 2,
"description": "Reserved (not used)"
},
{
"name": "Reserved 2",
"type": "byte",
"size": 1,
"description": "Reserved (not used)"
},
{
"name": "Public Hand",
"type": "bool",
"size": 1,
"description": "True to show hand publicly"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 221
}
},
{
"id": "0xDA",
"subId": "0x17",
"name": "Mahjong Move Tile",
"description": "Player moves a tile to a new position with direction and flip state.",
"direction": "incoming",
"isDynamic": false,
"size": 22,
"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,
"value": "0x17",
"description": "Move Tile command"
},
{
"name": "Tile Number",
"type": "byte",
"size": 1,
"description": "Tile index number"
},
{
"name": "Current Direction",
"type": "byte",
"size": 1,
"description": "Current tile direction (unused)"
},
{
"name": "New Direction",
"type": "enum",
"size": 1,
"description": "New tile direction",
"values": [
{ "value": "0", "name": "Up", "description": "Facing up" },
{ "value": "1", "name": "Left", "description": "Facing left" },
{ "value": "2", "name": "Down", "description": "Facing down" },
{ "value": "3", "name": "Right", "description": "Facing right" }
]
},
{
"name": "Reserved",
"type": "byte",
"size": 1,
"description": "Reserved byte"
},
{
"name": "Flip",
"type": "bool",
"size": 1,
"description": "True to flip tile face-up"
},
{
"name": "Current Y",
"type": "short",
"size": 2,
"description": "Current Y position (unused)"
},
{
"name": "Current X",
"type": "short",
"size": 2,
"description": "Current X position (unused)"
},
{
"name": "Reserved 2",
"type": "byte",
"size": 1,
"description": "Reserved byte"
},
{
"name": "New Y",
"type": "short",
"size": 2,
"description": "New Y position"
},
{
"name": "New X",
"type": "short",
"size": 2,
"description": "New X position"
},
{
"name": "Reserved 3",
"type": "byte",
"size": 1,
"description": "Reserved byte"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 236
}
},
{
"id": "0xDA",
"subId": "0x18",
"name": "Mahjong Move Dealer Indicator",
"description": "Dealer moves the dealer indicator with direction and wind.",
"direction": "incoming",
"isDynamic": false,
"size": 15,
"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,
"value": "0x18",
"description": "Move Dealer Indicator command"
},
{
"name": "Direction",
"type": "enum",
"size": 1,
"description": "Indicator direction",
"values": [
{ "value": "0", "name": "Up", "description": "Facing up" },
{ "value": "1", "name": "Left", "description": "Facing left" },
{ "value": "2", "name": "Down", "description": "Facing down" },
{ "value": "3", "name": "Right", "description": "Facing right" }
]
},
{
"name": "Wind",
"type": "enum",
"size": 1,
"description": "Wind direction displayed",
"values": [
{ "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": "Y Position",
"type": "short",
"size": 2,
"description": "New Y position"
},
{
"name": "X Position",
"type": "short",
"size": 2,
"description": "New X position"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 271
}
}
]
}