ModernUO/docs/packets/outgoing/container.json

594 lines
No EOL
44 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": [
{
"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"
}
]
},
{
"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": {
"classic": {},
"enhanced": {},
"notes": "HighSeas (7.0.9.0+) 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": [
{
"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"
}
]
},
{
"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": {
"classic": {},
"enhanced": {},
"notes": "ContainerGridLines (6.0.1.7+) 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",
"tags": ["Spellbook", "Corpse"],
"variants": [
{
"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"
}
]
}
}
]
},
{
"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": {
"classic": {},
"enhanced": {},
"notes": "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,
"tags": ["Spell", "Spellbook", "Extended Commands (0xBF)"],
"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": {
"classic": {
"min": "5.0.0a"
},
"enhanced": {},
"notes": "NewSpellbook feature (Core.AOS)"
},
"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",
"tags": ["Boat"],
"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"
},
{
"id": "0xF6",
"relationship": "variant",
"note": "Used alongside Move Boat HS for boat display"
}
],
"clientVersion": {
"classic": {
"min": "7.0.9.0"
},
"enhanced": {},
"notes": "HighSeas expansion feature"
},
"notes": "Uses PacketContainerBuilder for efficient dynamic growth. Commonly used by boat system to batch all visible entities on deck. Minimum packet length is 5 bytes (header only).",
"source": {
"file": "Projects/Server/Network/Packets/PacketContainerBuilder.cs",
"line": 23
}
}
]
}