ModernUO/docs/packets/outgoing/mobile.json

2102 lines
No EOL
151 KiB
JSON

{
"category": "Mobile",
"packets": [
{
"id": "0x11",
"name": "Mobile Status",
"description": "Detailed status information for a mobile. Version 0 (compact) is sent when viewing other mobiles. Versions 3-6 are sent for self based on expansion.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"version": "Version 0 (Compact)",
"name": "Other Mobile Status",
"condition": "Viewing another mobile (not self)",
"size": 43,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x11",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "43",
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Mobile serial"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Mobile name"
},
{
"name": "Hits",
"type": "short",
"size": 2,
"description": "Current hits (normalized 0-100)"
},
{
"name": "Hits Max",
"type": "short",
"size": 2,
"value": "100",
"description": "Maximum hits (always 100 for normalized)"
},
{
"name": "Can Be Renamed",
"type": "bool",
"size": 1,
"description": "Whether the mobile can be renamed by viewer"
},
{
"name": "Version",
"type": "byte",
"size": 1,
"value": "0",
"description": "Status version (0 = compact)"
}
]
},
{
"version": "Version 3 (Basic)",
"name": "Self Status (Pre-AOS)",
"condition": "Viewing self, pre-AOS expansion",
"size": 70,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x11",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "70",
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Mobile serial"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Mobile name"
},
{
"name": "Hits",
"type": "short",
"size": 2,
"description": "Current hits"
},
{
"name": "Hits Max",
"type": "short",
"size": 2,
"description": "Maximum hits"
},
{
"name": "Can Be Renamed",
"type": "bool",
"size": 1,
"description": "Whether the mobile can be renamed"
},
{
"name": "Version",
"type": "byte",
"size": 1,
"value": "3",
"description": "Status version"
},
{
"name": "Female",
"type": "bool",
"size": 1,
"description": "Gender flag (true = female)"
},
{
"name": "Str",
"type": "short",
"size": 2,
"description": "Strength"
},
{
"name": "Dex",
"type": "short",
"size": 2,
"description": "Dexterity"
},
{
"name": "Int",
"type": "short",
"size": 2,
"description": "Intelligence"
},
{
"name": "Stam",
"type": "short",
"size": 2,
"description": "Current stamina"
},
{
"name": "Stam Max",
"type": "short",
"size": 2,
"description": "Maximum stamina"
},
{
"name": "Mana",
"type": "short",
"size": 2,
"description": "Current mana"
},
{
"name": "Mana Max",
"type": "short",
"size": 2,
"description": "Maximum mana"
},
{
"name": "Gold",
"type": "int",
"size": 4,
"description": "Total gold in backpack"
},
{
"name": "Armor Rating",
"type": "short",
"size": 2,
"description": "Armor rating"
},
{
"name": "Weight",
"type": "short",
"size": 2,
"description": "Current weight (body weight + carried)"
},
{
"name": "Stat Cap",
"type": "short",
"size": 2,
"description": "Total stat cap"
},
{
"name": "Followers",
"type": "byte",
"size": 1,
"description": "Current follower count"
},
{
"name": "Followers Max",
"type": "byte",
"size": 1,
"description": "Maximum follower slots"
}
]
},
{
"version": "Version 4 (AOS)",
"name": "Self Status (Age of Shadows)",
"condition": "Viewing self, AOS expansion",
"size": 88,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x11",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "88",
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Mobile serial"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Mobile name"
},
{
"name": "Hits",
"type": "short",
"size": 2,
"description": "Current hits"
},
{
"name": "Hits Max",
"type": "short",
"size": 2,
"description": "Maximum hits"
},
{
"name": "Can Be Renamed",
"type": "bool",
"size": 1,
"description": "Whether the mobile can be renamed"
},
{
"name": "Version",
"type": "byte",
"size": 1,
"value": "4",
"description": "Status version"
},
{
"name": "Female",
"type": "bool",
"size": 1,
"description": "Gender flag (true = female)"
},
{
"name": "Str",
"type": "short",
"size": 2,
"description": "Strength"
},
{
"name": "Dex",
"type": "short",
"size": 2,
"description": "Dexterity"
},
{
"name": "Int",
"type": "short",
"size": 2,
"description": "Intelligence"
},
{
"name": "Stam",
"type": "short",
"size": 2,
"description": "Current stamina"
},
{
"name": "Stam Max",
"type": "short",
"size": 2,
"description": "Maximum stamina"
},
{
"name": "Mana",
"type": "short",
"size": 2,
"description": "Current mana"
},
{
"name": "Mana Max",
"type": "short",
"size": 2,
"description": "Maximum mana"
},
{
"name": "Gold",
"type": "int",
"size": 4,
"description": "Total gold in backpack"
},
{
"name": "Physical Resist",
"type": "short",
"size": 2,
"description": "Physical resistance"
},
{
"name": "Weight",
"type": "short",
"size": 2,
"description": "Current weight"
},
{
"name": "Stat Cap",
"type": "short",
"size": 2,
"description": "Total stat cap"
},
{
"name": "Followers",
"type": "byte",
"size": 1,
"description": "Current follower count"
},
{
"name": "Followers Max",
"type": "byte",
"size": 1,
"description": "Maximum follower slots"
},
{
"name": "Fire Resist",
"type": "short",
"size": 2,
"description": "Fire resistance"
},
{
"name": "Cold Resist",
"type": "short",
"size": 2,
"description": "Cold resistance"
},
{
"name": "Poison Resist",
"type": "short",
"size": 2,
"description": "Poison resistance"
},
{
"name": "Energy Resist",
"type": "short",
"size": 2,
"description": "Energy resistance"
},
{
"name": "Luck",
"type": "short",
"size": 2,
"description": "Luck"
},
{
"name": "Damage Min",
"type": "short",
"size": 2,
"description": "Minimum weapon damage"
},
{
"name": "Damage Max",
"type": "short",
"size": 2,
"description": "Maximum weapon damage"
},
{
"name": "Tithing Points",
"type": "int",
"size": 4,
"description": "Tithing points (for Chivalry)"
}
]
},
{
"version": "Version 5 (ML)",
"name": "Self Status (Mondain\u0027s Legacy)",
"condition": "Viewing self, ML expansion",
"size": 91,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x11",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "91",
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Mobile serial"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Mobile name"
},
{
"name": "Hits",
"type": "short",
"size": 2,
"description": "Current hits"
},
{
"name": "Hits Max",
"type": "short",
"size": 2,
"description": "Maximum hits"
},
{
"name": "Can Be Renamed",
"type": "bool",
"size": 1,
"description": "Whether the mobile can be renamed"
},
{
"name": "Version",
"type": "byte",
"size": 1,
"value": "5",
"description": "Status version"
},
{
"name": "Female",
"type": "bool",
"size": 1,
"description": "Gender flag (true = female)"
},
{
"name": "Str",
"type": "short",
"size": 2,
"description": "Strength"
},
{
"name": "Dex",
"type": "short",
"size": 2,
"description": "Dexterity"
},
{
"name": "Int",
"type": "short",
"size": 2,
"description": "Intelligence"
},
{
"name": "Stam",
"type": "short",
"size": 2,
"description": "Current stamina"
},
{
"name": "Stam Max",
"type": "short",
"size": 2,
"description": "Maximum stamina"
},
{
"name": "Mana",
"type": "short",
"size": 2,
"description": "Current mana"
},
{
"name": "Mana Max",
"type": "short",
"size": 2,
"description": "Maximum mana"
},
{
"name": "Gold",
"type": "int",
"size": 4,
"description": "Total gold in backpack"
},
{
"name": "Physical Resist",
"type": "short",
"size": 2,
"description": "Physical resistance"
},
{
"name": "Weight",
"type": "short",
"size": 2,
"description": "Current weight"
},
{
"name": "Max Weight",
"type": "short",
"size": 2,
"description": "Maximum carry weight"
},
{
"name": "Race",
"type": "byte",
"size": 1,
"description": "Race ID + 1 (1=Human, 2=Elf, 0=none)"
},
{
"name": "Stat Cap",
"type": "short",
"size": 2,
"description": "Total stat cap"
},
{
"name": "Followers",
"type": "byte",
"size": 1,
"description": "Current follower count"
},
{
"name": "Followers Max",
"type": "byte",
"size": 1,
"description": "Maximum follower slots"
},
{
"name": "Fire Resist",
"type": "short",
"size": 2,
"description": "Fire resistance"
},
{
"name": "Cold Resist",
"type": "short",
"size": 2,
"description": "Cold resistance"
},
{
"name": "Poison Resist",
"type": "short",
"size": 2,
"description": "Poison resistance"
},
{
"name": "Energy Resist",
"type": "short",
"size": 2,
"description": "Energy resistance"
},
{
"name": "Luck",
"type": "short",
"size": 2,
"description": "Luck"
},
{
"name": "Damage Min",
"type": "short",
"size": 2,
"description": "Minimum weapon damage"
},
{
"name": "Damage Max",
"type": "short",
"size": 2,
"description": "Maximum weapon damage"
},
{
"name": "Tithing Points",
"type": "int",
"size": 4,
"description": "Tithing points (for Chivalry)"
}
]
},
{
"version": "Version 6 (HS)",
"name": "Self Status (High Seas)",
"condition": "Viewing self, High Seas expansion with ExtendedStatus",
"size": 121,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x11",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "121",
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Mobile serial"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Mobile name"
},
{
"name": "Hits",
"type": "short",
"size": 2,
"description": "Current hits"
},
{
"name": "Hits Max",
"type": "short",
"size": 2,
"description": "Maximum hits"
},
{
"name": "Can Be Renamed",
"type": "bool",
"size": 1,
"description": "Whether the mobile can be renamed"
},
{
"name": "Version",
"type": "byte",
"size": 1,
"value": "6",
"description": "Status version"
},
{
"name": "Female",
"type": "bool",
"size": 1,
"description": "Gender flag (true = female)"
},
{
"name": "Str",
"type": "short",
"size": 2,
"description": "Strength"
},
{
"name": "Dex",
"type": "short",
"size": 2,
"description": "Dexterity"
},
{
"name": "Int",
"type": "short",
"size": 2,
"description": "Intelligence"
},
{
"name": "Stam",
"type": "short",
"size": 2,
"description": "Current stamina"
},
{
"name": "Stam Max",
"type": "short",
"size": 2,
"description": "Maximum stamina"
},
{
"name": "Mana",
"type": "short",
"size": 2,
"description": "Current mana"
},
{
"name": "Mana Max",
"type": "short",
"size": 2,
"description": "Maximum mana"
},
{
"name": "Gold",
"type": "int",
"size": 4,
"description": "Total gold in backpack"
},
{
"name": "Physical Resist",
"type": "short",
"size": 2,
"description": "Physical resistance"
},
{
"name": "Weight",
"type": "short",
"size": 2,
"description": "Current weight"
},
{
"name": "Max Weight",
"type": "short",
"size": 2,
"description": "Maximum carry weight"
},
{
"name": "Race",
"type": "byte",
"size": 1,
"description": "Race ID + 1 (1=Human, 2=Elf, 3=Gargoyle)"
},
{
"name": "Stat Cap",
"type": "short",
"size": 2,
"description": "Total stat cap"
},
{
"name": "Followers",
"type": "byte",
"size": 1,
"description": "Current follower count"
},
{
"name": "Followers Max",
"type": "byte",
"size": 1,
"description": "Maximum follower slots"
},
{
"name": "Fire Resist",
"type": "short",
"size": 2,
"description": "Fire resistance"
},
{
"name": "Cold Resist",
"type": "short",
"size": 2,
"description": "Cold resistance"
},
{
"name": "Poison Resist",
"type": "short",
"size": 2,
"description": "Poison resistance"
},
{
"name": "Energy Resist",
"type": "short",
"size": 2,
"description": "Energy resistance"
},
{
"name": "Luck",
"type": "short",
"size": 2,
"description": "Luck"
},
{
"name": "Damage Min",
"type": "short",
"size": 2,
"description": "Minimum weapon damage"
},
{
"name": "Damage Max",
"type": "short",
"size": 2,
"description": "Maximum weapon damage"
},
{
"name": "Tithing Points",
"type": "int",
"size": 4,
"description": "Tithing points (for Chivalry)"
},
{
"name": "Aos Statuses",
"type": "short[15]",
"size": 30,
"description": "Extended AOS status values. Array of 15 shorts indexed by status type.",
"values": [
{
"value": 0,
"name": "Max Physical Resist",
"description": "Maximum physical resistance cap"
},
{
"value": 1,
"name": "Max Fire Resist",
"description": "Maximum fire resistance cap"
},
{
"value": 2,
"name": "Max Cold Resist",
"description": "Maximum cold resistance cap"
},
{
"value": 3,
"name": "Max Poison Resist",
"description": "Maximum poison resistance cap"
},
{
"value": 4,
"name": "Max Energy Resist",
"description": "Maximum energy resistance cap"
},
{
"value": 5,
"name": "Defense Chance Increase",
"description": "Current defense chance increase %"
},
{
"value": 6,
"name": "Defense Chance Cap",
"description": "Maximum defense chance cap (always 45)"
},
{
"value": 7,
"name": "Hit Chance Increase",
"description": "Hit chance increase %"
},
{
"value": 8,
"name": "Swing Speed Increase",
"description": "Swing speed increase %"
},
{
"value": 9,
"name": "Damage Increase",
"description": "Damage increase %"
},
{
"value": 10,
"name": "Lower Reagent Cost",
"description": "Lower reagent cost %"
},
{
"value": 11,
"name": "Spell Damage Increase",
"description": "Spell damage increase %"
},
{
"value": 12,
"name": "Faster Cast Recovery",
"description": "Faster cast recovery"
},
{
"value": 13,
"name": "Faster Casting",
"description": "Faster casting"
},
{
"value": 14,
"name": "Lower Mana Cost",
"description": "Lower mana cost %"
}
]
}
],
"notes": "Enhanced Client supports additional status indices 15-28 (HP/Stam/Mana regen, Reflect Physical, Enhance Potions, Stat Increases). ModernUO does not support Enhanced Client."
}
],
"notes": "ModernUO supports 15 AOS status values (indices 0-14). Enhanced Client extends this to 29 values (indices 0-28), but ModernUO does not support Enhanced Client.",
"related": [
{
"id": "0x34",
"direction": "incoming",
"relationship": "request",
"note": "Mobile Query (stats) triggers this response"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
"line": 497
}
},
{
"id": "0x20",
"name": "Mobile Update",
"description": "Updates a mobile\u0027s basic display information (body, hue, position, flags).",
"direction": "outgoing",
"isDynamic": false,
"size": 19,
"fields": [
{
"name": "Packet ID",
"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": "Packet ID",
"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": "enum",
"enumType": "sequential",
"size": 1,
"description": "Notoriety flag",
"values": [
{
"value": 0,
"name": "Innocent",
"description": "Blue - innocent player"
},
{
"value": 1,
"name": "Friend",
"description": "Green - ally/friend"
},
{
"value": 2,
"name": "Attackable",
"description": "Gray - can be attacked"
},
{
"value": 3,
"name": "Criminal",
"description": "Gray - criminal flag"
},
{
"value": 4,
"name": "Enemy",
"description": "Orange - enemy"
},
{
"value": 5,
"name": "Murderer",
"description": "Red - murderer"
},
{
"value": 6,
"name": "Invulnerable",
"description": "Yellow - 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. Structure varies by client version.",
"direction": "outgoing",
"isDynamic": true,
"size": "23+",
"variants": [
{
"name": "Pre-Stygian Abyss",
"condition": "Classic client < 7.0.0.0",
"size": "23+",
"fields": [
{
"name": "Packet ID",
"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": "enum",
"enumType": "sequential",
"size": 1,
"description": "Notoriety flag",
"values": [
{
"value": 0,
"name": "Innocent",
"description": "Blue - innocent player"
},
{
"value": 1,
"name": "Friend",
"description": "Green - ally/friend"
},
{
"value": 2,
"name": "Attackable",
"description": "Gray - can be attacked"
},
{
"value": 3,
"name": "Criminal",
"description": "Gray - criminal flag"
},
{
"value": 4,
"name": "Enemy",
"description": "Orange - enemy"
},
{
"value": 5,
"name": "Murderer",
"description": "Red - murderer"
},
{
"value": 6,
"name": "Invulnerable",
"description": "Yellow - invulnerable"
}
]
},
{
"name": "Equipment",
"type": "array",
"description": "Equipped items (terminated by 0x00000000)",
"loop": {
"countField": "variable (until terminator)",
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Item serial (0 = end of list)"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID (15-bit, 0x7FFF mask). Bit 0x8000 indicates hue follows."
},
{
"name": "Layer",
"type": "byte",
"size": 1,
"description": "Equipment layer"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Item hue (only present if bit 0x8000 set on Item ID)",
"condition": "Item ID & 0x8000"
}
]
}
},
{
"name": "Terminator",
"type": "int",
"size": 4,
"value": "0x00000000",
"description": "Equipment list terminator"
}
]
},
{
"name": "Stygian Abyss",
"condition": "Classic client 7.0.0.0 - 7.0.33.0, or Enhanced Client",
"size": "23+",
"fields": [
{
"name": "Packet ID",
"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 (SA format)"
},
{
"name": "Notoriety",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Notoriety flag",
"values": [
{
"value": 0,
"name": "Innocent",
"description": "Blue - innocent player"
},
{
"value": 1,
"name": "Friend",
"description": "Green - ally/friend"
},
{
"value": 2,
"name": "Attackable",
"description": "Gray - can be attacked"
},
{
"value": 3,
"name": "Criminal",
"description": "Gray - criminal flag"
},
{
"value": 4,
"name": "Enemy",
"description": "Orange - enemy"
},
{
"value": 5,
"name": "Murderer",
"description": "Red - murderer"
},
{
"value": 6,
"name": "Invulnerable",
"description": "Yellow - invulnerable"
}
]
},
{
"name": "Equipment",
"type": "array",
"description": "Equipped items (terminated by 0x00000000)",
"loop": {
"countField": "variable (until terminator)",
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Item serial (0 = end of list)"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID (15-bit, 0x7FFF mask). Bit 0x8000 indicates hue follows."
},
{
"name": "Layer",
"type": "byte",
"size": 1,
"description": "Equipment layer"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Item hue (only present if bit 0x8000 set on Item ID)",
"condition": "Item ID & 0x8000"
}
]
}
},
{
"name": "Terminator",
"type": "int",
"size": 4,
"value": "0x00000000",
"description": "Equipment list terminator"
}
]
},
{
"name": "NewMobileIncoming",
"condition": "Classic client >= 7.0.33.1",
"size": "23+",
"fields": [
{
"name": "Packet ID",
"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 (SA format)"
},
{
"name": "Notoriety",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Notoriety flag",
"values": [
{
"value": 0,
"name": "Innocent",
"description": "Blue - innocent player"
},
{
"value": 1,
"name": "Friend",
"description": "Green - ally/friend"
},
{
"value": 2,
"name": "Attackable",
"description": "Gray - can be attacked"
},
{
"value": 3,
"name": "Criminal",
"description": "Gray - criminal flag"
},
{
"value": 4,
"name": "Enemy",
"description": "Orange - enemy"
},
{
"value": 5,
"name": "Murderer",
"description": "Red - murderer"
},
{
"value": 6,
"name": "Invulnerable",
"description": "Yellow - invulnerable"
}
]
},
{
"name": "Equipment",
"type": "array",
"description": "Equipped items (terminated by 0x00000000). Always includes hue field.",
"loop": {
"countField": "variable (until terminator)",
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Item serial (0 = end of list)"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID (full 16-bit, 0xFFFF mask)"
},
{
"name": "Layer",
"type": "byte",
"size": 1,
"description": "Equipment layer"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Item hue (always present)"
}
]
}
},
{
"name": "Terminator",
"type": "int",
"size": 4,
"value": "0x00000000",
"description": "Equipment list terminator"
}
]
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
"line": 601
}
},
{
"id": "0xA1",
"name": "Mobile Hits",
"description": "Updates a mobile\u0027s hit points. Can be normalized to 0-100 scale for non-self mobiles.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xA1",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Mobile serial"
},
{
"name": "Hits Max",
"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\u0027s mana points.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xA2",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Mobile serial"
},
{
"name": "Mana Max",
"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\u0027s stamina points.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xA3",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Mobile serial"
},
{
"name": "Stam Max",
"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": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x2D",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Mobile serial"
},
{
"name": "Hits Max",
"type": "short",
"size": 2,
"description": "Maximum hits"
},
{
"name": "Hits",
"type": "short",
"size": 2,
"description": "Current hits"
},
{
"name": "Mana Max",
"type": "short",
"size": 2,
"description": "Maximum mana"
},
{
"name": "Mana",
"type": "short",
"size": 2,
"description": "Current mana"
},
{
"name": "Stam Max",
"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\u0027s name in response to a name request.",
"direction": "outgoing",
"isDynamic": false,
"size": 37,
"fields": [
{
"name": "Packet ID",
"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": "Packet ID",
"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": "Frame Count",
"type": "short",
"size": 2,
"description": "Number of frames"
},
{
"name": "Repeat Count",
"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": "Packet ID",
"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": "Frame Count",
"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\u0027s healthbar status (poison level, yellow bar for invulnerability).",
"direction": "outgoing",
"isDynamic": false,
"size": 12,
"fields": [
{
"name": "Packet ID",
"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": "Show Bar",
"type": "enum",
"size": 2,
"description": "Show bar flag. If 0, packet ends here (no subsequent fields sent).",
"values": [
{ "value": "0", "name": "Hide", "description": "Hide healthbar, packet ends here" },
{ "value": "1", "name": "Show", "description": "Show healthbar, following fields included" }
]
},
{
"name": "Healthbar Type",
"type": "enum",
"size": 2,
"description": "Type of healthbar overlay (only sent if Show Bar = 1)",
"values": [
{ "value": "1", "name": "Poison", "description": "Poison status bar (green)" },
{ "value": "2", "name": "Yellow", "description": "Yellow/invulnerable bar" }
]
},
{
"name": "Level",
"type": "enum",
"size": 1,
"description": "Status level (only sent if Show Bar = 1)",
"values": [
{ "value": "0", "name": "Off", "description": "Status disabled" },
{ "value": "1", "name": "Level1/On", "description": "Poison level 1 or yellow on" },
{ "value": "2", "name": "Level2", "description": "Poison level 2 (Greater)" },
{ "value": "3", "name": "Level3", "description": "Poison level 3 (Deadly)" },
{ "value": "4", "name": "Level4", "description": "Poison level 4 (Lethal)" }
]
}
],
"related": [
{
"id": "0x16",
"relationship": "variant",
"note": "Mobile Healthbar (EC) - Enhanced Client version"
}
],
"clientVersion": {
"classic": {},
"notes": "Classic Client only. EC uses 0x16 instead."
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMobilePackets.cs",
"line": 419
},
"notes": "When Show Bar is 0, the packet is only 9 bytes (no Healthbar Type or Level fields). Poison (green) overrides yellow coloring."
},
{
"id": "0x16",
"name": "Mobile Healthbar",
"description": "Updates a mobile's healthbar status for Enhanced Client (poison level, yellow bar for invulnerability).",
"direction": "outgoing",
"isDynamic": true,
"implemented": false,
"size": "9 or 12",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x16",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length (9 or 12)"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Mobile serial"
},
{
"name": "Show Bar",
"type": "enum",
"size": 2,
"description": "Show bar flag. If 0, packet ends here (no subsequent fields sent).",
"values": [
{ "value": "0", "name": "Hide", "description": "Hide healthbar, packet ends here" },
{ "value": "1", "name": "Show", "description": "Show healthbar, following fields included" }
]
},
{
"name": "Healthbar Type",
"type": "enum",
"size": 2,
"description": "Type of healthbar overlay (only sent if Show Bar = 1)",
"values": [
{ "value": "1", "name": "Poison", "description": "Poison status bar (green)" },
{ "value": "2", "name": "Yellow", "description": "Yellow/invulnerable bar" }
]
},
{
"name": "Level",
"type": "enum",
"size": 1,
"description": "Status level (only sent if Show Bar = 1)",
"values": [
{ "value": "0", "name": "Off", "description": "Status disabled" },
{ "value": "1", "name": "Level1/On", "description": "Poison level 1 or yellow on" },
{ "value": "2", "name": "Level2", "description": "Poison level 2 (Greater)" },
{ "value": "3", "name": "Level3", "description": "Poison level 3 (Deadly)" },
{ "value": "4", "name": "Level4", "description": "Poison level 4 (Lethal)" }
]
}
],
"related": [
{
"id": "0x17",
"relationship": "variant",
"note": "Mobile Healthbar (Classic) - Classic Client version"
}
],
"clientVersion": {
"enhanced": {},
"notes": "Enhanced Client only. Classic uses 0x17 instead."
},
"notes": "When Show Bar is 0, the packet is only 9 bytes (no Healthbar Type or Level fields). Poison (green) overrides yellow coloring. ModernUO currently sends 0x17 to all clients; this EC variant needs implementation."
},
{
"id": "0xAF",
"name": "Death Animation",
"description": "Triggers the death animation and corpse creation for a mobile.",
"direction": "outgoing",
"isDynamic": false,
"size": 13,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xAF",
"description": "Packet identifier"
},
{
"name": "Killed Serial",
"type": "uint",
"size": 4,
"description": "Serial of the killed mobile"
},
{
"name": "Corpse Serial",
"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
}
}
]
}