ModernUO/Distribution/Data/packets/outgoing/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

501 lines
No EOL
31 KiB
JSON

{
"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": "0x03",
"name": "Mahjong Tile Info",
"description": "Sends information about a single Mahjong tile.",
"direction": "outgoing",
"isDynamic": false,
"size": 18,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0012",
"description": "Packet length (18)"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x0003",
"description": "Tile Info command"
},
{
"name": "Tile Number",
"type": "byte",
"size": 1,
"description": "Tile index number"
},
{
"name": "Tile Value",
"type": "byte",
"size": 1,
"description": "Tile face value (0 if hidden)"
},
{
"name": "Y Position",
"type": "short",
"size": 2,
"description": "Tile Y coordinate"
},
{
"name": "X Position",
"type": "short",
"size": 2,
"description": "Tile X coordinate"
},
{
"name": "Stack Level",
"type": "byte",
"size": 1,
"description": "Stack level for overlapping tiles"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Tile direction (0=Up, 1=Left, 2=Down, 3=Right)"
},
{
"name": "Flipped",
"type": "byte",
"size": 1,
"description": "0x10 if flipped/face-up, 0x00 if face-down"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 362
}
},
{
"id": "0xDA",
"subId": "0x04",
"name": "Mahjong Tiles Info",
"description": "Sends information about all tiles 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": "0x0004",
"description": "Tiles Info command"
},
{
"name": "Tile Count",
"type": "short",
"size": 2,
"description": "Number of tiles"
},
{
"name": "Tiles",
"type": "loop",
"description": "Tile data for each tile",
"loop": {
"countField": "Tile Count",
"fields": [
{
"name": "Tile Number",
"type": "byte",
"size": 1,
"description": "Tile index number"
},
{
"name": "Tile Value",
"type": "byte",
"size": 1,
"description": "Tile face value (0 if hidden)"
},
{
"name": "Y Position",
"type": "short",
"size": 2,
"description": "Tile Y coordinate"
},
{
"name": "X Position",
"type": "short",
"size": 2,
"description": "Tile X coordinate"
},
{
"name": "Stack Level",
"type": "byte",
"size": 1,
"description": "Stack level"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Tile direction"
},
{
"name": "Flipped",
"type": "byte",
"size": 1,
"description": "0x10 if flipped, 0x00 otherwise"
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 408
}
},
{
"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": "enum",
"size": 1,
"description": "Dealer indicator wind direction",
"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": "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
}
}
]
}