feat: Add interactive packet documentation system
- Create JSON-based packet documentation for 145 packets (66 incoming, 79 outgoing) - Add HTML template with search, filtering, and navigation - Support enum/bitfield field display with values and descriptions - Support packet variants for version-specific structures - Include 0xBF extended command subpackets documentation - Add PowerShell build script to generate final HTML 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
ec287d7691
commit
f0b65fecb7
28 changed files with 6011 additions and 0 deletions
320
Distribution/Data/packets/outgoing/account.json
Normal file
320
Distribution/Data/packets/outgoing/account.json
Normal file
|
|
@ -0,0 +1,320 @@
|
|||
{
|
||||
"category": "Account",
|
||||
"packets": [
|
||||
{
|
||||
"id": "0x82",
|
||||
"name": "Account Login Rejected",
|
||||
"description": "Sent when account login fails. Contains the reason for rejection.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 2,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x82", "description": "Packet identifier" },
|
||||
{ "name": "reason", "type": "byte", "size": 1, "description": "Rejection reason: 0=Invalid, 1=InUse, 2=Blocked, 3=BadPass, 254=Idle, 255=BadComm" }
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0x80", "relationship": "request", "note": "The login attempt that failed" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 402
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xA8",
|
||||
"name": "Account Login Ack (Server List)",
|
||||
"description": "Sent after successful account login. Contains the list of available game servers.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": true,
|
||||
"size": "6 + (40 * serverCount)",
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA8", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
|
||||
{ "name": "systemInfoFlag", "type": "byte", "size": 1, "value": "0x5D", "description": "System info flag" },
|
||||
{ "name": "serverCount", "type": "ushort", "size": 2, "description": "Number of servers in list" },
|
||||
{
|
||||
"name": "servers",
|
||||
"type": "array",
|
||||
"description": "Server list entries",
|
||||
"loop": {
|
||||
"countField": "serverCount",
|
||||
"fields": [
|
||||
{ "name": "index", "type": "ushort", "size": 2, "description": "Server index" },
|
||||
{ "name": "name", "type": "ascii", "size": 32, "description": "Server name" },
|
||||
{ "name": "fullPercent", "type": "byte", "size": 1, "description": "Server load percentage" },
|
||||
{ "name": "timezone", "type": "sbyte", "size": 1, "description": "Server timezone offset" },
|
||||
{ "name": "ipAddress", "type": "uint", "size": 4, "description": "Server IP address (IPv4)" }
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0x80", "relationship": "request", "note": "The successful login request" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 411
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x8C",
|
||||
"name": "Play Server Ack",
|
||||
"description": "Sent after selecting a server. Contains connection details for the game server.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 11,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x8C", "description": "Packet identifier" },
|
||||
{ "name": "ipAddress", "type": "uint", "size": 4, "description": "Game server IP address (little-endian)" },
|
||||
{ "name": "port", "type": "short", "size": 2, "description": "Game server port" },
|
||||
{ "name": "authId", "type": "int", "size": 4, "description": "Authentication ID for game login" }
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0xA0", "relationship": "request", "note": "The server selection request" },
|
||||
{ "id": "0x91", "relationship": "response", "note": "Client sends game login with this authId" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 447
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xA9",
|
||||
"name": "Character List",
|
||||
"description": "Sent after game login. Contains the list of characters on the account and starting city information.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": true,
|
||||
"size": "variable (client version dependent)",
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA9", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
|
||||
{ "name": "charCount", "type": "byte", "size": 1, "description": "Number of character slots" },
|
||||
{
|
||||
"name": "characters",
|
||||
"type": "array",
|
||||
"description": "Character list entries",
|
||||
"loop": {
|
||||
"countField": "charCount",
|
||||
"fields": [
|
||||
{ "name": "name", "type": "ascii", "size": 30, "description": "Character name (empty if slot unused)" },
|
||||
{ "name": "password", "type": "ascii", "size": 30, "description": "Always empty" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{ "name": "cityCount", "type": "byte", "size": 1, "description": "Number of starting cities" },
|
||||
{
|
||||
"name": "cities",
|
||||
"type": "array",
|
||||
"description": "Starting city entries",
|
||||
"loop": {
|
||||
"countField": "cityCount",
|
||||
"fields": [
|
||||
{ "name": "index", "type": "byte", "size": 1, "description": "City index" },
|
||||
{ "name": "cityName", "type": "ascii", "size": 31, "description": "City name (32 for 7.0.13.0+)" },
|
||||
{ "name": "buildingName", "type": "ascii", "size": 31, "description": "Building name (32 for 7.0.13.0+)" },
|
||||
{ "name": "x", "type": "int", "size": 4, "description": "X coordinate (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" },
|
||||
{ "name": "y", "type": "int", "size": 4, "description": "Y coordinate (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" },
|
||||
{ "name": "z", "type": "int", "size": 4, "description": "Z coordinate (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" },
|
||||
{ "name": "mapId", "type": "int", "size": 4, "description": "Map ID (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" },
|
||||
{ "name": "cliloc", "type": "int", "size": 4, "description": "Description cliloc (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" },
|
||||
{ "name": "unknown", "type": "int", "size": 4, "description": "Unknown (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{ "name": "flags", "type": "int", "size": 4, "description": "Character list flags (slot limits, features)" },
|
||||
{ "name": "lastCharSlot", "type": "short", "size": 2, "description": "Last played character slot (7.0.13.0+ only)", "condition": "client >= 7.0.13.0" }
|
||||
],
|
||||
"clientVersion": {
|
||||
"feature": "NewCharacterList",
|
||||
"notes": "Clients 7.0.13.0+ use extended city format with coordinates"
|
||||
},
|
||||
"related": [
|
||||
{ "id": "0x91", "relationship": "request", "note": "Game login request" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 293
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x1B",
|
||||
"name": "Login Confirmation",
|
||||
"description": "Sent when entering the world. Confirms the player's mobile serial and initial position.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 37,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x1B", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Player mobile serial" },
|
||||
{ "name": "unknown", "type": "int", "size": 4, "value": "0", "description": "Unknown (always 0)" },
|
||||
{ "name": "body", "type": "short", "size": 2, "description": "Player body ID" },
|
||||
{ "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" },
|
||||
{ "name": "direction", "type": "byte", "size": 1, "description": "Facing direction" },
|
||||
{ "name": "unknown2", "type": "byte", "size": 1, "value": "0", "description": "Unknown" },
|
||||
{ "name": "unknown3", "type": "int", "size": 4, "value": "-1", "description": "Unknown (always -1)" },
|
||||
{ "name": "unknown4", "type": "int", "size": 4, "value": "0", "description": "Unknown" },
|
||||
{ "name": "mapWidth", "type": "short", "size": 2, "description": "Map width in tiles" },
|
||||
{ "name": "mapHeight", "type": "short", "size": 2, "description": "Map height in tiles" },
|
||||
{ "name": "unknown5", "type": "byte[6]", "size": 6, "description": "Unknown (zeros)" }
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0x5D", "relationship": "request", "note": "Play character request" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 190
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x55",
|
||||
"name": "Login Complete",
|
||||
"description": "Final packet in the login sequence. Signals that the client can begin normal gameplay.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 1,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x55", "description": "Packet identifier" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 231
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xBD",
|
||||
"name": "Client Version Request",
|
||||
"description": "Request for the client to send its version string.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 3,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xBD", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "value": "0x0003", "description": "Packet length" }
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0xBD", "relationship": "response", "note": "Client responds with version string" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 112
|
||||
},
|
||||
"notes": "Same packet ID (0xBD) is used for both request (server) and response (client)."
|
||||
},
|
||||
{
|
||||
"id": "0xB9",
|
||||
"name": "Supported Features",
|
||||
"description": "Informs the client which features are enabled on the server.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": "3 or 5 (client version dependent)",
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xB9", "description": "Packet identifier" },
|
||||
{ "name": "features", "type": "ushort/uint", "size": "2 or 4", "description": "Feature flags bitmask. Extended (4 bytes) for newer clients." }
|
||||
],
|
||||
"clientVersion": {
|
||||
"feature": "ExtendedSupportedFeatures",
|
||||
"notes": "Clients with ExtendedSupportedFeatures use 4-byte flags instead of 2-byte"
|
||||
},
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 140
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x85",
|
||||
"name": "Character Delete Result",
|
||||
"description": "Result of a character deletion request.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 2,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x85", "description": "Packet identifier" },
|
||||
{ "name": "result", "type": "byte", "size": 1, "description": "Result: 0=PasswordInvalid, 1=CharNotExist, 2=CharBeingPlayed, 3=CharTooYoung, 4=CharQueued, 5=BadRequest" }
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0x83", "relationship": "request", "note": "The delete request" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 121
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x53",
|
||||
"name": "Popup Message",
|
||||
"description": "Displays a predefined popup message to the client.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 2,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x53", "description": "Packet identifier" },
|
||||
{ "name": "messageId", "type": "byte", "size": 1, "description": "Message ID: 1=CharNoExist, 2=CharExists, 5=CharInWorld, 6=LoginSyncError, 7=IdleWarning" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 131
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x81",
|
||||
"name": "Change Character",
|
||||
"description": "Updates the character list during reconnection. Currently unused.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": true,
|
||||
"size": "5 + (60 * charCount)",
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x81", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
|
||||
{ "name": "charCount", "type": "ushort", "size": 2, "description": "Number of characters" },
|
||||
{
|
||||
"name": "characters",
|
||||
"type": "array",
|
||||
"description": "Character list entries",
|
||||
"loop": {
|
||||
"countField": "charCount",
|
||||
"fields": [
|
||||
{ "name": "name", "type": "ascii", "size": 30, "description": "Character name" },
|
||||
{ "name": "password", "type": "ascii", "size": 30, "description": "Always empty" }
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 63
|
||||
},
|
||||
"notes": "Currently unused in ModernUO."
|
||||
},
|
||||
{
|
||||
"id": "0x86",
|
||||
"name": "Character List Update",
|
||||
"description": "Updates the character list after character creation or deletion.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": true,
|
||||
"size": "4 + (60 * charCount)",
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x86", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
|
||||
{ "name": "charCount", "type": "byte", "size": 1, "description": "Number of character slots" },
|
||||
{
|
||||
"name": "characters",
|
||||
"type": "array",
|
||||
"description": "Character list entries",
|
||||
"loop": {
|
||||
"countField": "charCount",
|
||||
"fields": [
|
||||
{ "name": "name", "type": "ascii", "size": 30, "description": "Character name (empty if slot unused)" },
|
||||
{ "name": "password", "type": "ascii", "size": 30, "description": "Always empty" }
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingAccountPackets.cs",
|
||||
"line": 242
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
61
Distribution/Data/packets/outgoing/combat.json
Normal file
61
Distribution/Data/packets/outgoing/combat.json
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
161
Distribution/Data/packets/outgoing/container.json
Normal file
161
Distribution/Data/packets/outgoing/container.json
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
52
Distribution/Data/packets/outgoing/damage.json
Normal file
52
Distribution/Data/packets/outgoing/damage.json
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
142
Distribution/Data/packets/outgoing/effects.json
Normal file
142
Distribution/Data/packets/outgoing/effects.json
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
71
Distribution/Data/packets/outgoing/entity.json
Normal file
71
Distribution/Data/packets/outgoing/entity.json
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
35
Distribution/Data/packets/outgoing/items.json
Normal file
35
Distribution/Data/packets/outgoing/items.json
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
38
Distribution/Data/packets/outgoing/light.json
Normal file
38
Distribution/Data/packets/outgoing/light.json
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
198
Distribution/Data/packets/outgoing/message.json
Normal file
198
Distribution/Data/packets/outgoing/message.json
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
339
Distribution/Data/packets/outgoing/mobile.json
Normal file
339
Distribution/Data/packets/outgoing/mobile.json
Normal file
|
|
@ -0,0 +1,339 @@
|
|||
{
|
||||
"category": "Mobile",
|
||||
"packets": [
|
||||
{
|
||||
"id": "0x11",
|
||||
"name": "Mobile Status",
|
||||
"description": "Detailed status information for a mobile. Length and content varies based on client version and whether viewing self or others.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": true,
|
||||
"size": "43-121 bytes (version dependent)",
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x11", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "name", "type": "ascii", "size": 30, "description": "Mobile name" },
|
||||
{ "name": "hitsMax", "type": "short", "size": 2, "description": "Maximum hits (normalized to 100 for non-self)" },
|
||||
{ "name": "hits", "type": "short", "size": 2, "description": "Current hits" },
|
||||
{ "name": "canBeRenamed", "type": "bool", "size": 1, "description": "Whether the mobile can be renamed by viewer" },
|
||||
{ "name": "version", "type": "byte", "size": 1, "description": "Status version: 0=compact, 3=basic, 4=AOS, 5=ML, 6=HS" },
|
||||
{ "name": "female", "type": "bool", "size": 1, "description": "Gender flag (version 1+)", "condition": "version >= 1" },
|
||||
{ "name": "str", "type": "short", "size": 2, "description": "Strength", "condition": "version >= 1" },
|
||||
{ "name": "dex", "type": "short", "size": 2, "description": "Dexterity", "condition": "version >= 1" },
|
||||
{ "name": "int", "type": "short", "size": 2, "description": "Intelligence", "condition": "version >= 1" },
|
||||
{ "name": "stam", "type": "short", "size": 2, "description": "Current stamina", "condition": "version >= 1" },
|
||||
{ "name": "stamMax", "type": "short", "size": 2, "description": "Maximum stamina", "condition": "version >= 1" },
|
||||
{ "name": "mana", "type": "short", "size": 2, "description": "Current mana", "condition": "version >= 1" },
|
||||
{ "name": "manaMax", "type": "short", "size": 2, "description": "Maximum mana", "condition": "version >= 1" },
|
||||
{ "name": "gold", "type": "int", "size": 4, "description": "Total gold", "condition": "version >= 1" },
|
||||
{ "name": "armorRating", "type": "short", "size": 2, "description": "Armor rating (physical resist in AOS+)", "condition": "version >= 1" },
|
||||
{ "name": "weight", "type": "short", "size": 2, "description": "Current weight", "condition": "version >= 1" },
|
||||
{ "name": "maxWeight", "type": "short", "size": 2, "description": "Maximum weight", "condition": "version >= 5" },
|
||||
{ "name": "race", "type": "byte", "size": 1, "description": "Race ID + 1 (0 = no race)", "condition": "version >= 5" },
|
||||
{ "name": "statCap", "type": "short", "size": 2, "description": "Stat cap", "condition": "version >= 1" },
|
||||
{ "name": "followers", "type": "byte", "size": 1, "description": "Current followers", "condition": "version >= 1" },
|
||||
{ "name": "followersMax", "type": "byte", "size": 1, "description": "Maximum followers", "condition": "version >= 1" },
|
||||
{ "name": "fireResist", "type": "short", "size": 2, "description": "Fire resistance", "condition": "version >= 4" },
|
||||
{ "name": "coldResist", "type": "short", "size": 2, "description": "Cold resistance", "condition": "version >= 4" },
|
||||
{ "name": "poisonResist", "type": "short", "size": 2, "description": "Poison resistance", "condition": "version >= 4" },
|
||||
{ "name": "energyResist", "type": "short", "size": 2, "description": "Energy resistance", "condition": "version >= 4" },
|
||||
{ "name": "luck", "type": "short", "size": 2, "description": "Luck", "condition": "version >= 4" },
|
||||
{ "name": "damageMin", "type": "short", "size": 2, "description": "Minimum weapon damage", "condition": "version >= 4" },
|
||||
{ "name": "damageMax", "type": "short", "size": 2, "description": "Maximum weapon damage", "condition": "version >= 4" },
|
||||
{ "name": "tithingPoints", "type": "int", "size": 4, "description": "Tithing points", "condition": "version >= 4" },
|
||||
{ "name": "aosStatus", "type": "short[15]", "size": 30, "description": "Extended AOS status values", "condition": "version >= 6" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 497
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x20",
|
||||
"name": "Mobile Update",
|
||||
"description": "Updates a mobile's basic display information (body, hue, position, flags).",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 19,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x20", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "body", "type": "short", "size": 2, "description": "Body/graphic ID" },
|
||||
{ "name": "unknown", "type": "byte", "size": 1, "description": "Unknown (always 0)" },
|
||||
{ "name": "hue", "type": "short", "size": 2, "description": "Hue/color (or solid hue override)" },
|
||||
{ "name": "flags", "type": "byte", "size": 1, "description": "Packet flags (hidden, poisoned, etc.)" },
|
||||
{ "name": "x", "type": "short", "size": 2, "description": "X coordinate" },
|
||||
{ "name": "y", "type": "short", "size": 2, "description": "Y coordinate" },
|
||||
{ "name": "unknown2", "type": "short", "size": 2, "description": "Unknown (always 0)" },
|
||||
{ "name": "direction", "type": "byte", "size": 1, "description": "Facing direction" },
|
||||
{ "name": "z", "type": "sbyte", "size": 1, "description": "Z coordinate" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 578
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x77",
|
||||
"name": "Mobile Moving",
|
||||
"description": "Sent when a mobile moves. Contains position, direction, hue, and notoriety.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 17,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x77", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "body", "type": "short", "size": 2, "description": "Body/graphic ID" },
|
||||
{ "name": "x", "type": "short", "size": 2, "description": "X coordinate" },
|
||||
{ "name": "y", "type": "short", "size": 2, "description": "Y coordinate" },
|
||||
{ "name": "z", "type": "sbyte", "size": 1, "description": "Z coordinate" },
|
||||
{ "name": "direction", "type": "byte", "size": 1, "description": "Direction (0-7) with running flag (0x80)" },
|
||||
{ "name": "hue", "type": "short", "size": 2, "description": "Hue/color" },
|
||||
{ "name": "flags", "type": "byte", "size": 1, "description": "Packet flags" },
|
||||
{ "name": "notoriety", "type": "byte", "size": 1, "description": "Notoriety (0=Innocent, 1=Friend, 2=Gray, 3=Criminal, 4=Enemy, 5=Murderer, 6=Invulnerable)" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 104
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x78",
|
||||
"name": "Mobile Incoming",
|
||||
"description": "Full mobile information including equipped items. Sent when a mobile enters view range.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": true,
|
||||
"size": "23 + (equipment count * 7-9 bytes)",
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x78", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "body", "type": "short", "size": 2, "description": "Body/graphic ID" },
|
||||
{ "name": "x", "type": "short", "size": 2, "description": "X coordinate" },
|
||||
{ "name": "y", "type": "short", "size": 2, "description": "Y coordinate" },
|
||||
{ "name": "z", "type": "sbyte", "size": 1, "description": "Z coordinate" },
|
||||
{ "name": "direction", "type": "byte", "size": 1, "description": "Facing direction" },
|
||||
{ "name": "hue", "type": "short", "size": 2, "description": "Hue/color" },
|
||||
{ "name": "flags", "type": "byte", "size": 1, "description": "Packet flags" },
|
||||
{ "name": "notoriety", "type": "byte", "size": 1, "description": "Notoriety flag" },
|
||||
{
|
||||
"name": "equipment",
|
||||
"type": "array",
|
||||
"description": "Equipped items (terminated by 0x00000000)",
|
||||
"loop": {
|
||||
"countField": "variable (until terminator)",
|
||||
"fields": [
|
||||
{ "name": "itemSerial", "type": "uint", "size": 4, "description": "Item serial (0 = end of list)" },
|
||||
{ "name": "itemId", "type": "ushort", "size": 2, "description": "Item graphic ID (bit 0x8000 = hue follows for old clients)" },
|
||||
{ "name": "layer", "type": "byte", "size": 1, "description": "Equipment layer" },
|
||||
{ "name": "hue", "type": "short", "size": 2, "description": "Item hue (only if bit 0x8000 set or NewMobileIncoming)", "condition": "hue flag or NewMobileIncoming" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{ "name": "terminator", "type": "int", "size": 4, "value": "0x00000000", "description": "Equipment list terminator" }
|
||||
],
|
||||
"clientVersion": {
|
||||
"feature": "NewMobileIncoming",
|
||||
"notes": "NewMobileIncoming clients always include hue field for equipment"
|
||||
},
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 601
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xA1",
|
||||
"name": "Mobile Hits",
|
||||
"description": "Updates a mobile's hit points. Can be normalized to 0-100 scale for non-self mobiles.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 9,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA1", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "hitsMax", "type": "short", "size": 2, "description": "Maximum hits" },
|
||||
{ "name": "hits", "type": "short", "size": 2, "description": "Current hits" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 210
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xA2",
|
||||
"name": "Mobile Mana",
|
||||
"description": "Updates a mobile's mana points.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 9,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA2", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "manaMax", "type": "short", "size": 2, "description": "Maximum mana" },
|
||||
{ "name": "mana", "type": "short", "size": 2, "description": "Current mana" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 235
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xA3",
|
||||
"name": "Mobile Stamina",
|
||||
"description": "Updates a mobile's stamina points.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 9,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA3", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "stamMax", "type": "short", "size": 2, "description": "Maximum stamina" },
|
||||
{ "name": "stam", "type": "short", "size": 2, "description": "Current stamina" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 260
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x2D",
|
||||
"name": "Mobile Attributes",
|
||||
"description": "Updates all three attribute bars (hits, mana, stamina) in a single packet.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 17,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x2D", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "hitsMax", "type": "short", "size": 2, "description": "Maximum hits" },
|
||||
{ "name": "hits", "type": "short", "size": 2, "description": "Current hits" },
|
||||
{ "name": "manaMax", "type": "short", "size": 2, "description": "Maximum mana" },
|
||||
{ "name": "mana", "type": "short", "size": 2, "description": "Current mana" },
|
||||
{ "name": "stamMax", "type": "short", "size": 2, "description": "Maximum stamina" },
|
||||
{ "name": "stam", "type": "short", "size": 2, "description": "Current stamina" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 285
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x98",
|
||||
"name": "Mobile Name",
|
||||
"description": "Returns a mobile's name in response to a name request.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 37,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x98", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "value": "0x0025", "description": "Packet length (37)" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "name", "type": "ascii", "size": 30, "description": "Mobile name (null-terminated)" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 301
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x6E",
|
||||
"name": "Mobile Animation",
|
||||
"description": "Triggers an animation on a mobile.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 14,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x6E", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "action", "type": "short", "size": 2, "description": "Animation action ID" },
|
||||
{ "name": "frameCount", "type": "short", "size": 2, "description": "Number of frames" },
|
||||
{ "name": "repeatCount", "type": "short", "size": 2, "description": "Number of times to repeat" },
|
||||
{ "name": "reverse", "type": "bool", "size": 1, "description": "Play animation in reverse" },
|
||||
{ "name": "repeat", "type": "bool", "size": 1, "description": "Loop the animation" },
|
||||
{ "name": "delay", "type": "byte", "size": 1, "description": "Frame delay" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 318
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xE2",
|
||||
"name": "New Mobile Animation",
|
||||
"description": "Simplified animation packet for newer clients.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 10,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xE2", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "action", "type": "short", "size": 2, "description": "Animation action ID" },
|
||||
{ "name": "frameCount", "type": "short", "size": 2, "description": "Number of frames" },
|
||||
{ "name": "delay", "type": "byte", "size": 1, "description": "Frame delay" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 354
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x17",
|
||||
"name": "Mobile Healthbar",
|
||||
"description": "Updates a mobile's healthbar status (poison level, yellow bar for invulnerability).",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 12,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x17", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "value": "0x000C", "description": "Packet length (12)" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "showBar", "type": "short", "size": 2, "value": "0x0001", "description": "Show bar (always 1)" },
|
||||
{ "name": "healthbarType", "type": "short", "size": 2, "description": "Healthbar type: 1=Poison, 2=Yellow" },
|
||||
{ "name": "level", "type": "byte", "size": 1, "description": "Level (0=off, 1-4 for poison levels, 1=on for yellow)" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 419
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xAF",
|
||||
"name": "Death Animation",
|
||||
"description": "Triggers the death animation and corpse creation for a mobile.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 13,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xAF", "description": "Packet identifier" },
|
||||
{ "name": "killedSerial", "type": "uint", "size": 4, "description": "Serial of the killed mobile" },
|
||||
{ "name": "corpseSerial", "type": "uint", "size": 4, "description": "Serial of the corpse created" },
|
||||
{ "name": "unknown", "type": "int", "size": 4, "description": "Unknown (always 0)" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 78
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xBF",
|
||||
"subId": "0x0019",
|
||||
"name": "Bonded Status",
|
||||
"description": "Indicates whether a mobile (pet) is bonded to its owner.",
|
||||
"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": "0x000B", "description": "Packet length (11)" },
|
||||
{ "name": "subCommand", "type": "ushort", "size": 2, "value": "0x0019", "description": "Sub-command for bonded status" },
|
||||
{ "name": "command", "type": "byte", "size": 1, "value": "0x00", "description": "Command type (0 for bonded)" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "bonded", "type": "bool", "size": 1, "description": "Bonded status" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
|
||||
"line": 44
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
101
Distribution/Data/packets/outgoing/movement.json
Normal file
101
Distribution/Data/packets/outgoing/movement.json
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
482
Distribution/Data/packets/outgoing/player.json
Normal file
482
Distribution/Data/packets/outgoing/player.json
Normal file
|
|
@ -0,0 +1,482 @@
|
|||
{
|
||||
"category": "Player",
|
||||
"packets": [
|
||||
{
|
||||
"id": "0x23",
|
||||
"name": "Drag Effect",
|
||||
"description": "Displays a drag/drop visual effect between two points.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 26,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x23", "description": "Packet identifier" },
|
||||
{ "name": "itemId", "type": "short", "size": 2, "description": "Item graphic ID" },
|
||||
{ "name": "unknown", "type": "byte", "size": 1, "value": "0x00", "description": "Unknown" },
|
||||
{ "name": "hue", "type": "short", "size": 2, "description": "Item hue" },
|
||||
{ "name": "amount", "type": "short", "size": 2, "description": "Item amount" },
|
||||
{ "name": "srcSerial", "type": "uint", "size": 4, "description": "Source entity serial" },
|
||||
{ "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": "dstSerial", "type": "uint", "size": 4, "description": "Destination entity serial" },
|
||||
{ "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" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 198
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x27",
|
||||
"name": "Lift Reject",
|
||||
"description": "Server rejects a lift/pick up request.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 2,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x27", "description": "Packet identifier" },
|
||||
{
|
||||
"name": "reason",
|
||||
"type": "enum",
|
||||
"enumType": "sequential",
|
||||
"size": 1,
|
||||
"description": "Rejection reason",
|
||||
"values": [
|
||||
{ "value": 0, "name": "CannotLift", "description": "You cannot pick that up" },
|
||||
{ "value": 1, "name": "OutOfRange", "description": "That is out of range" },
|
||||
{ "value": 2, "name": "OutOfSight", "description": "That is out of sight" },
|
||||
{ "value": 3, "name": "TryToSteal", "description": "That does not belong to you" },
|
||||
{ "value": 4, "name": "AreHolding", "description": "You are already holding an item" },
|
||||
{ "value": 5, "name": "Inspecific", "description": "You cannot pick that up" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0x07", "relationship": "request", "note": "Lift Request that was rejected" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 90
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x2C",
|
||||
"name": "Death Status",
|
||||
"description": "Notifies client of death/resurrection state.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 2,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x2C", "description": "Packet identifier" },
|
||||
{ "name": "dead", "type": "byte", "size": 1, "value": "0x02", "description": "Always 2 (dead)" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 63
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x38",
|
||||
"name": "Pathfind Message",
|
||||
"description": "Instructs client to pathfind to a location.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 7,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x38", "description": "Packet identifier" },
|
||||
{ "name": "x", "type": "short", "size": 2, "description": "Target X coordinate" },
|
||||
{ "name": "y", "type": "short", "size": 2, "description": "Target Y coordinate" },
|
||||
{ "name": "z", "type": "short", "size": 2, "description": "Target Z coordinate" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 319
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x3A",
|
||||
"name": "Skills Update",
|
||||
"description": "Sends full skills list or single skill update to client.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": true,
|
||||
"size": "Dynamic",
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x3A", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
|
||||
{
|
||||
"name": "type",
|
||||
"type": "enum",
|
||||
"enumType": "sequential",
|
||||
"size": 1,
|
||||
"description": "Update type",
|
||||
"values": [
|
||||
{ "value": "0x00", "name": "FullNoCaps", "description": "Full list without caps" },
|
||||
{ "value": "0x02", "name": "FullWithCaps", "description": "Full list with skill caps" },
|
||||
{ "value": "0xDF", "name": "SingleWithCaps", "description": "Single skill update with cap" },
|
||||
{ "value": "0xFF", "name": "SingleNoCaps", "description": "Single skill update" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "skills",
|
||||
"type": "loop",
|
||||
"loop": {
|
||||
"until": "skillId == 0",
|
||||
"fields": [
|
||||
{ "name": "skillId", "type": "ushort", "size": 2, "description": "Skill ID + 1 (0 terminates)" },
|
||||
{ "name": "value", "type": "ushort", "size": 2, "description": "Current skill value * 10" },
|
||||
{ "name": "base", "type": "ushort", "size": 2, "description": "Base skill value * 10" },
|
||||
{
|
||||
"name": "lock",
|
||||
"type": "enum",
|
||||
"enumType": "sequential",
|
||||
"size": 1,
|
||||
"description": "Skill lock state",
|
||||
"values": [
|
||||
{ "value": 0, "name": "Up", "description": "Skill gains enabled" },
|
||||
{ "value": 1, "name": "Down", "description": "Skill decreases enabled" },
|
||||
{ "value": 2, "name": "Locked", "description": "Skill locked" }
|
||||
]
|
||||
},
|
||||
{ "name": "cap", "type": "ushort", "size": 2, "description": "Skill cap * 10 (if type includes caps)" }
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 121
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x5B",
|
||||
"name": "Current Time",
|
||||
"description": "Sends current server time to client.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 4,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x5B", "description": "Packet identifier" },
|
||||
{ "name": "hour", "type": "byte", "size": 1, "description": "Hour (0-23)" },
|
||||
{ "name": "minute", "type": "byte", "size": 1, "description": "Minute (0-59)" },
|
||||
{ "name": "second", "type": "byte", "size": 1, "description": "Second (0-59)" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 316
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x65",
|
||||
"name": "Weather",
|
||||
"description": "Sets weather conditions for client.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 4,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x65", "description": "Packet identifier" },
|
||||
{
|
||||
"name": "type",
|
||||
"type": "enum",
|
||||
"enumType": "sequential",
|
||||
"size": 1,
|
||||
"description": "Weather type",
|
||||
"values": [
|
||||
{ "value": 0, "name": "Rain", "description": "Raining" },
|
||||
{ "value": 1, "name": "StormBrewing", "description": "Storm brewing" },
|
||||
{ "value": 2, "name": "Snow", "description": "Snowing" },
|
||||
{ "value": 3, "name": "Storm", "description": "Storm in progress" },
|
||||
{ "value": 254, "name": "None", "description": "No weather" },
|
||||
{ "value": 255, "name": "Clear", "description": "Clear weather (stops current)" }
|
||||
]
|
||||
},
|
||||
{ "name": "intensity", "type": "byte", "size": 1, "description": "Weather intensity (0-255)" },
|
||||
{ "name": "temperature", "type": "byte", "size": 1, "description": "Temperature value" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 97
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x6D",
|
||||
"name": "Play Music",
|
||||
"description": "Plays background music on client.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 3,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x6D", "description": "Packet identifier" },
|
||||
{ "name": "musicId", "type": "short", "size": 2, "description": "Music track ID (0x1FFF = stop)" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 275
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x73",
|
||||
"name": "Ping Ack",
|
||||
"description": "Server acknowledges ping request.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 2,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x73", "description": "Packet identifier" },
|
||||
{ "name": "sequence", "type": "byte", "size": 1, "description": "Ping sequence (echoed from request)" }
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0x73", "relationship": "request", "note": "Ping Request from client" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 336
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x76",
|
||||
"name": "Server Change",
|
||||
"description": "Notifies client of server/map transition.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 16,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x76", "description": "Packet identifier" },
|
||||
{ "name": "x", "type": "short", "size": 2, "description": "New X coordinate" },
|
||||
{ "name": "y", "type": "short", "size": 2, "description": "New Y coordinate" },
|
||||
{ "name": "z", "type": "short", "size": 2, "description": "New Z coordinate" },
|
||||
{ "name": "unknown", "type": "byte", "size": 1, "value": "0x00", "description": "Unknown" },
|
||||
{ "name": "unknown2", "type": "short", "size": 2, "value": "0x0000", "description": "Unknown" },
|
||||
{ "name": "unknown3", "type": "short", "size": 2, "value": "0x0000", "description": "Unknown" },
|
||||
{ "name": "mapWidth", "type": "short", "size": 2, "description": "Map width" },
|
||||
{ "name": "mapHeight", "type": "short", "size": 2, "description": "Map height" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 100
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x7B",
|
||||
"name": "Sequence",
|
||||
"description": "Sends sequence number to client for synchronization.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 2,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x7B", "description": "Packet identifier" },
|
||||
{ "name": "sequence", "type": "byte", "size": 1, "description": "Sequence number" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 154
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x88",
|
||||
"name": "Display Paperdoll",
|
||||
"description": "Opens paperdoll window for a mobile.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 66,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x88", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Serial of mobile" },
|
||||
{ "name": "title", "type": "ascii", "size": 60, "description": "Title/name displayed" },
|
||||
{
|
||||
"name": "flags",
|
||||
"type": "bitfield",
|
||||
"size": 1,
|
||||
"description": "Paperdoll flags",
|
||||
"flags": [
|
||||
{ "bit": "0x01", "name": "Warmode", "description": "Mobile is in war mode" },
|
||||
{ "bit": "0x02", "name": "CanLift", "description": "Viewer can lift equipment" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 247
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0x95",
|
||||
"name": "Display Hue Picker",
|
||||
"description": "Opens hue picker dialog on client.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 9,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0x95", "description": "Packet identifier" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Hue picker serial" },
|
||||
{ "name": "unknown", "type": "short", "size": 2, "value": "0x0000", "description": "Unknown" },
|
||||
{ "name": "itemId", "type": "short", "size": 2, "description": "Item graphic to preview hue on" }
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0x95", "relationship": "response", "note": "Hue Picker Response from client" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 338
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xA5",
|
||||
"name": "Launch Browser",
|
||||
"description": "Opens a URL in client's web browser.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": true,
|
||||
"size": "Dynamic",
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA5", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
|
||||
{ "name": "url", "type": "ascii-null", "description": "URL to open" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xA6",
|
||||
"name": "Scroll Message",
|
||||
"description": "Displays a scrollable tips/message window.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": true,
|
||||
"size": "Dynamic",
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xA6", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "description": "Packet length" },
|
||||
{ "name": "type", "type": "byte", "size": 1, "description": "Scroll type" },
|
||||
{ "name": "tipNumber", "type": "int", "size": 4, "description": "Tip/message number" },
|
||||
{ "name": "textLength", "type": "ushort", "size": 2, "description": "Length of text" },
|
||||
{ "name": "text", "type": "ascii", "description": "Message text" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 291
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xB8",
|
||||
"name": "Display Profile",
|
||||
"description": "Displays a mobile's profile.",
|
||||
"direction": "outgoing",
|
||||
"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": "serial", "type": "uint", "size": 4, "description": "Serial of mobile" },
|
||||
{ "name": "header", "type": "ascii-null", "description": "Profile header" },
|
||||
{ "name": "footer", "type": "unicode-be-null", "description": "Profile footer" },
|
||||
{ "name": "body", "type": "unicode-be-null", "description": "Profile body text" }
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0xB8", "relationship": "request", "note": "Profile Request from client" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 66
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xBC",
|
||||
"name": "Season Change",
|
||||
"description": "Changes the visual season on client.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 3,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xBC", "description": "Packet identifier" },
|
||||
{
|
||||
"name": "season",
|
||||
"type": "enum",
|
||||
"enumType": "sequential",
|
||||
"size": 1,
|
||||
"description": "Season value",
|
||||
"values": [
|
||||
{ "value": 0, "name": "Spring", "description": "Spring season" },
|
||||
{ "value": 1, "name": "Summer", "description": "Summer season" },
|
||||
{ "value": 2, "name": "Fall", "description": "Fall/Autumn season" },
|
||||
{ "value": 3, "name": "Winter", "description": "Winter season" },
|
||||
{ "value": 4, "name": "Desolation", "description": "Desolation (dead trees)" }
|
||||
]
|
||||
},
|
||||
{ "name": "playSound", "type": "bool", "size": 1, "description": "Play season change sound" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 244
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xBF/0x19",
|
||||
"name": "Stat Lock Info",
|
||||
"description": "Sends stat lock states (STR/DEX/INT) to client.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 12,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xBF", "description": "Packet identifier" },
|
||||
{ "name": "length", "type": "ushort", "size": 2, "value": "12", "description": "Packet length" },
|
||||
{ "name": "subCommand", "type": "short", "size": 2, "value": "0x19", "description": "Subcommand (Stat Lock Info)" },
|
||||
{ "name": "type", "type": "byte", "size": 1, "value": "0x02", "description": "Type (2 = stat locks)" },
|
||||
{ "name": "serial", "type": "uint", "size": 4, "description": "Mobile serial" },
|
||||
{ "name": "unknown", "type": "byte", "size": 1, "value": "0x00", "description": "Unknown" },
|
||||
{
|
||||
"name": "lockBits",
|
||||
"type": "bitfield",
|
||||
"size": 1,
|
||||
"description": "Packed lock states",
|
||||
"flags": [
|
||||
{ "bit": "0x30", "name": "StrLock", "description": "Strength lock (bits 4-5)" },
|
||||
{ "bit": "0x0C", "name": "DexLock", "description": "Dexterity lock (bits 2-3)" },
|
||||
{ "bit": "0x03", "name": "IntLock", "description": "Intelligence lock (bits 0-1)" }
|
||||
],
|
||||
"notes": "Each lock is 2 bits: 0=Up, 1=Down, 2=Locked"
|
||||
}
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 36
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xC8",
|
||||
"name": "Change Update Range",
|
||||
"description": "Sets the client's update range.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 2,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xC8", "description": "Packet identifier" },
|
||||
{ "name": "range", "type": "byte", "size": 1, "description": "Update range (typically 18)" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 59
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0xD1",
|
||||
"name": "Logout Ack",
|
||||
"description": "Server acknowledges logout request.",
|
||||
"direction": "outgoing",
|
||||
"isDynamic": false,
|
||||
"size": 2,
|
||||
"fields": [
|
||||
{ "name": "packetId", "type": "byte", "size": 1, "value": "0xD1", "description": "Packet identifier" },
|
||||
{ "name": "ack", "type": "byte", "size": 1, "value": "0x01", "description": "Acknowledgment (1 = OK)" }
|
||||
],
|
||||
"related": [
|
||||
{ "id": "0xD1", "relationship": "request", "note": "Logout Request from client" }
|
||||
],
|
||||
"source": {
|
||||
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
||||
"line": 94
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
90
Distribution/Data/packets/outgoing/targeting.json
Normal file
90
Distribution/Data/packets/outgoing/targeting.json
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue