====== UO Protocol 0xBF ======
===== Gereric Command (5 bytes, plus specific message) =====
Offset Type Name Description
------ -------- ---------------- ------------------------------
0000 BYTE cmd
0001 USHORT length
0003 USHORT subcommand
0005 BYTE[] submessage
Subcommands
* 1 - Initialize Fast Walk Prevention
* 2 - Add key to Fast Walk Stack
* 5 - Unknown
* 6 - Party System
* 6.1 - Add a party member(s)
* 6.2 - Remove a party member
* 6.3 - Send a message to party member
* 6.4 - Send a message to all party members
* 6.6 - Party can loot me
* 6.8 - Accept join party invitation
* 6.9 - Decline join party invitation
* 8 - Set cursor hue
* 11 - Client language
* 12 - Closed Status Gump
Server Message. This sets up stack on the client and whenever it moves, it takes the top value from this stack and uses it. (key1 start at the top, key6 at the botton).
==== Subcommand 1 - Initialize Fast Walk Prevention ====
24 bytes (for 29 total)
BYTE[4] key1
BYTE[4] key2
BYTE[4] key3
BYTE[4] key4
BYTE[4] key5
BYTE[4] key6
==== Subcommand 2 - Add key to Fast Walk Stack ====
4 bytes (for 9 total)
Server message. This key is added to the top of the stack. In other words, it's the one that will be used next. Basically, the other 5 only get used when the client is sending moves faster than the server is responding.
BYTE[4] newkey
==== Subcommand 5 - Unknown ====
8 bytes (for 13 total)
Client Message.
BYTE[4] unknown (00 00 03 20)
BYTE[4] unknown (00 00 00 05)
==== Subcommand 6 - Party System ====
YES! Subsubcommands
Party system is implemented as subsubcommands.
BYTE subsubcommand #
=== Subsubcommand 1 - Add a party member ===
(4 bytes)
Client Message.
BYTE[4] id (if 0, a targeting cursor appears)
Add party member(s) (1+ numMembers*4)
BYTE numMembers (total number of members in the party)
Then, for each member in numMembers:
BYTE[4] id