- Add Mahjong packets (0xDA) with 18 sub-commands (6 outgoing, 12 incoming) - Add Bulletin Board incoming packets (0x71) with 4 sub-commands - Add Corpse Equipment packet (0x89) - Convert 0x6F Secure Trade to variants (Cancel, Toggle Accept, Update Gold) - Convert 0xB8 Profile Request to variants (Display, Edit) - Convert 0xAD Unicode Speech to variants with encoded keyword documentation - Move 0xD7 base packet from player.json to encoded.json for consistency - Fix dropdown arrow positioning in HTML template - Fix packet sorting for embedded subIds (0xBF/0x22 format) - Add reflexive relationships between related packets - Update 0x3C container content with corpse usage notes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1057 lines
No EOL
61 KiB
JSON
1057 lines
No EOL
61 KiB
JSON
{
|
|
"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": "Packet ID",
|
|
"type": "byte",
|
|
"size": 1,
|
|
"value": "0x23",
|
|
"description": "Packet identifier"
|
|
},
|
|
{
|
|
"name": "Item ID",
|
|
"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": "Src Serial",
|
|
"type": "uint",
|
|
"size": 4,
|
|
"description": "Source entity serial"
|
|
},
|
|
{
|
|
"name": "Src X",
|
|
"type": "short",
|
|
"size": 2,
|
|
"description": "Source X coordinate"
|
|
},
|
|
{
|
|
"name": "Src Y",
|
|
"type": "short",
|
|
"size": 2,
|
|
"description": "Source Y coordinate"
|
|
},
|
|
{
|
|
"name": "Src Z",
|
|
"type": "sbyte",
|
|
"size": 1,
|
|
"description": "Source Z coordinate"
|
|
},
|
|
{
|
|
"name": "Dst Serial",
|
|
"type": "uint",
|
|
"size": 4,
|
|
"description": "Destination entity serial"
|
|
},
|
|
{
|
|
"name": "Dst X",
|
|
"type": "short",
|
|
"size": 2,
|
|
"description": "Destination X coordinate"
|
|
},
|
|
{
|
|
"name": "Dst Y",
|
|
"type": "short",
|
|
"size": 2,
|
|
"description": "Destination Y coordinate"
|
|
},
|
|
{
|
|
"name": "Dst Z",
|
|
"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": "Packet ID",
|
|
"type": "byte",
|
|
"size": 1,
|
|
"value": "0x27",
|
|
"description": "Packet identifier"
|
|
},
|
|
{
|
|
"name": "Reason",
|
|
"type": "enum",
|
|
"enumType": "sequential",
|
|
"size": 1,
|
|
"description": "Rejection reason",
|
|
"values": [
|
|
{
|
|
"value": 0,
|
|
"name": "Cannot Lift",
|
|
"description": "You cannot pick that up"
|
|
},
|
|
{
|
|
"value": 1,
|
|
"name": "Out Of Range",
|
|
"description": "That is out of range"
|
|
},
|
|
{
|
|
"value": 2,
|
|
"name": "Out Of Sight",
|
|
"description": "That is out of sight"
|
|
},
|
|
{
|
|
"value": 3,
|
|
"name": "Try To Steal",
|
|
"description": "That does not belong to you"
|
|
},
|
|
{
|
|
"value": 4,
|
|
"name": "Are Holding",
|
|
"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": "Packet ID",
|
|
"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": "Packet ID",
|
|
"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": "var",
|
|
"fields": [
|
|
{
|
|
"name": "Packet ID",
|
|
"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": "Full No Caps",
|
|
"description": "Full list without caps"
|
|
},
|
|
{
|
|
"value": "0x02",
|
|
"name": "Full With Caps",
|
|
"description": "Full list with skill caps"
|
|
},
|
|
{
|
|
"value": "0xDF",
|
|
"name": "Single With Caps",
|
|
"description": "Single skill update with cap"
|
|
},
|
|
{
|
|
"value": "0xFF",
|
|
"name": "Single No Caps",
|
|
"description": "Single skill update"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Skills",
|
|
"type": "loop",
|
|
"loop": {
|
|
"until": "skillId == 0",
|
|
"fields": [
|
|
{
|
|
"name": "Skill ID",
|
|
"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)"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"related": [
|
|
{
|
|
"id": "0x34",
|
|
"direction": "incoming",
|
|
"relationship": "request",
|
|
"note": "Mobile Query (skills) triggers this response"
|
|
},
|
|
{
|
|
"id": "0x3A",
|
|
"direction": "incoming",
|
|
"relationship": "related",
|
|
"note": "Change Skill Lock may trigger update"
|
|
}
|
|
],
|
|
"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": "Packet ID",
|
|
"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": "Packet ID",
|
|
"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": "Storm Brewing",
|
|
"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": "Packet ID",
|
|
"type": "byte",
|
|
"size": 1,
|
|
"value": "0x6D",
|
|
"description": "Packet identifier"
|
|
},
|
|
{
|
|
"name": "Music ID",
|
|
"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": "Packet ID",
|
|
"type": "byte",
|
|
"size": 1,
|
|
"value": "0x73",
|
|
"description": "Packet identifier"
|
|
},
|
|
{
|
|
"name": "Sequence",
|
|
"type": "byte",
|
|
"size": 1,
|
|
"description": "Ping sequence (echoed from request)"
|
|
}
|
|
],
|
|
"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": "Packet ID",
|
|
"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": "Map Width",
|
|
"type": "short",
|
|
"size": 2,
|
|
"description": "Map width"
|
|
},
|
|
{
|
|
"name": "Map Height",
|
|
"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": "Packet ID",
|
|
"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": "Packet ID",
|
|
"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": "0",
|
|
"name": "Warmode",
|
|
"description": "Mobile is in war mode"
|
|
},
|
|
{
|
|
"bit": "1",
|
|
"name": "Can Lift",
|
|
"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": "Packet ID",
|
|
"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": "Item ID",
|
|
"type": "short",
|
|
"size": 2,
|
|
"description": "Item graphic to preview hue on"
|
|
}
|
|
],
|
|
"source": {
|
|
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
|
"line": 338
|
|
}
|
|
},
|
|
{
|
|
"id": "0xA5",
|
|
"name": "Launch Browser",
|
|
"description": "Opens a URL in client\u0027s web browser.",
|
|
"direction": "outgoing",
|
|
"isDynamic": true,
|
|
"size": "var",
|
|
"fields": [
|
|
{
|
|
"name": "Packet ID",
|
|
"type": "byte",
|
|
"size": 1,
|
|
"value": "0xA5",
|
|
"description": "Packet identifier"
|
|
},
|
|
{
|
|
"name": "Length",
|
|
"type": "ushort",
|
|
"size": 2,
|
|
"description": "Packet length"
|
|
},
|
|
{
|
|
"name": "URL",
|
|
"type": "ascii-t",
|
|
"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": "var",
|
|
"fields": [
|
|
{
|
|
"name": "Packet ID",
|
|
"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": "Tip Number",
|
|
"type": "int",
|
|
"size": 4,
|
|
"description": "Tip/message number"
|
|
},
|
|
{
|
|
"name": "Text Length",
|
|
"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\u0027s profile.",
|
|
"direction": "outgoing",
|
|
"isDynamic": true,
|
|
"size": "var",
|
|
"fields": [
|
|
{
|
|
"name": "Packet ID",
|
|
"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-t",
|
|
"description": "Profile header"
|
|
},
|
|
{
|
|
"name": "Footer",
|
|
"type": "utf16be-t",
|
|
"description": "Profile footer"
|
|
},
|
|
{
|
|
"name": "Body",
|
|
"type": "utf16be-t",
|
|
"description": "Profile body text"
|
|
}
|
|
],
|
|
"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": "Packet ID",
|
|
"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": "Play Sound",
|
|
"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": "Packet ID",
|
|
"type": "byte",
|
|
"size": 1,
|
|
"value": "0xBF",
|
|
"description": "Packet identifier"
|
|
},
|
|
{
|
|
"name": "Length",
|
|
"type": "ushort",
|
|
"size": 2,
|
|
"value": "12",
|
|
"description": "Packet length"
|
|
},
|
|
{
|
|
"name": "Sub-Command",
|
|
"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": "Lock Bits",
|
|
"type": "bitfield",
|
|
"size": 1,
|
|
"description": "Packed stat lock states. Bit layout: 00SSDDII where SS=Str, DD=Dex, II=Int",
|
|
"flags": [
|
|
{
|
|
"bit": "5-4",
|
|
"name": "Str Lock",
|
|
"description": "Strength lock (value \u003c\u003c 4)"
|
|
},
|
|
{
|
|
"bit": "3-2",
|
|
"name": "Dex Lock",
|
|
"description": "Dexterity lock (value \u003c\u003c 2)"
|
|
},
|
|
{
|
|
"bit": "1-0",
|
|
"name": "Int Lock",
|
|
"description": "Intelligence lock (value \u003c\u003c 0)"
|
|
}
|
|
],
|
|
"values": [
|
|
{
|
|
"value": 0,
|
|
"name": "Up",
|
|
"description": "Stat will increase when gains are available"
|
|
},
|
|
{
|
|
"value": 1,
|
|
"name": "Down",
|
|
"description": "Stat will decrease to allow other stats to increase"
|
|
},
|
|
{
|
|
"value": 2,
|
|
"name": "Locked",
|
|
"description": "Stat will not change"
|
|
}
|
|
],
|
|
"notes": "Formula: (StrLock \u003c\u003c 4) | (DexLock \u003c\u003c 2) | IntLock. Example: Str=Locked(2), Dex=Up(0), Int=Down(1) = 0b00100001 = 0x21"
|
|
}
|
|
],
|
|
"source": {
|
|
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
|
"line": 36
|
|
}
|
|
},
|
|
{
|
|
"id": "0xC8",
|
|
"name": "Change Update Range",
|
|
"description": "Sets the client\u0027s update range.",
|
|
"direction": "outgoing",
|
|
"isDynamic": false,
|
|
"size": 2,
|
|
"fields": [
|
|
{
|
|
"name": "Packet ID",
|
|
"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": "Packet ID",
|
|
"type": "byte",
|
|
"size": 1,
|
|
"value": "0xD1",
|
|
"description": "Packet identifier"
|
|
},
|
|
{
|
|
"name": "Ack",
|
|
"type": "byte",
|
|
"size": 1,
|
|
"value": "0x01",
|
|
"description": "Acknowledgment (1 = OK)"
|
|
}
|
|
],
|
|
"source": {
|
|
"file": "Projects/Server/Network/Packets/OutgoingPlayerPackets.cs",
|
|
"line": 94
|
|
}
|
|
}
|
|
]
|
|
} |