From RUOSI's Packet Guide we learn it's 5 bytes and besides the id only 2 bytes seem to be really used.
If you read my topic about UO's Packet History, then you learn that this packet is as old as client 1.23 and has always been 5 bytes.
Why is this packet 5 bytes and why has OSI never changed the packet to remove them?
Let's see if the Ultima Online Demo from 1998 can give an answer to that...
We start the investigation by looking at the packet handler for packet 0x72, it is found at 0x497F90. 4 bytes are extracted and stored in the stack. After the extraction a check is made for player flag 0x4000, the exact meaning of that flag is unknown but we know that Counselors and GM's have it set. Regular players don't have it set. If the flag is set then nothing is done. If not set, thus the packet comes from a normal player, then the request is passed to the Player Class.
- Packet 72 - extract 3.PNG (114.27 KiB) Viewed 8087 times
Those 3 Unknown-variables are passed to the Player Class which in turns stores them in the Player Object but nothing else really happens with those variables. You can put any data in those variables and it looks like it's not really gonna matter:
- Packet 72 - continue.PNG (33.37 KiB) Viewed 8087 times
- Store in Mobile Object.PNG (35.64 KiB) Viewed 8087 times
But wait, why did I name the member variables on those screenshots fa, fs and fw? Because of code found in the Player::Save function:
- fs fa fw - BuildSaveList.PNG (31.11 KiB) Viewed 8087 times
Also interesting is that the variables only seem to be used by Player Objects yet their declaration is at the lower Mobile Class (the base class of Player). Can this be because it is a remainder from Beta and back then OSI was still using the Mobile Class for players (without putting players in a seperate class)?
When the server answers back with packet 0x72 then we see that the same member variables of the Player Object are send back to the client:
- Build Packet 72.PNG (46.85 KiB) Viewed 8087 times
The server also responds to the previously unknown TextCommand 0x5C (Packet 0x12.5C). It will extract the 3 member variables and store them in the Player Object as is. Maybe the answer to 0x12.5C can be found in the God Client...
I did a scan in the uodemo.exe and found only one more access to those 3 member variables which I cannot explain. I cannot explain it because it is found in unused code.
- Unknown code.PNG (50.54 KiB) Viewed 8087 times
Sure, I can analyze that function, but that's for later, I've got other priorities at this moment.
Oh yeah, one more little detail: the server saves those 3 unknown variables (fa, fs and fw) but it never loads them! Go figure that!