====== 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