- 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>
580 lines
No EOL
43 KiB
JSON
580 lines
No EOL
43 KiB
JSON
{
|
|
"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 corpse contents and old-style spellbook content (pre-AOS clients). For AOS+ spellbooks, use 0xBF/0x1B instead.",
|
|
"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"
|
|
},
|
|
{
|
|
"id": "0x89",
|
|
"relationship": "related",
|
|
"note": "Corpse Equipment (layer mappings for corpse items)"
|
|
}
|
|
],
|
|
"clientVersion": {
|
|
"feature": "ContainerGridLines (6.0.1.7+) adds gridLocation byte per item"
|
|
},
|
|
"notes": "Also used for corpse contents. Corpses are special containers that display equipped items on a body graphic. Use with 0x89 Corpse Equipment for full corpse display.",
|
|
"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
|
|
}
|
|
}
|
|
]
|
|
} |