[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4712: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3842)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4714: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3842)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4715: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3842)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4716: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3842)
About Packet 0x72 and 0x12.5C | JoinUO Forums

About Packet 0x72 and 0x12.5C

The UO "Demo" is a slightly modified OSI UO Server and Client which was bundled on the Ultima Online Second Age retail CD. This forum seeks to reveal it's mysteries.

Site Admin
Posts: 372
Joined: Wed Apr 08, 2009 6:35 am
PostPosted: Mon Dec 05, 2011 2:39 pm
Let's talk a bit about packet 0x72, the packet used to toggle combat.

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
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
Packet 72 - continue.PNG (33.37 KiB) Viewed 8087 times

Store in Mobile Object.PNG
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
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
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
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!
<Derrick> RunUO AI is kind of a functional prototype, which i have hacked into something resembling OSI behavior, but only by complitcating everything

Site Admin
Posts: 65
Joined: Thu Sep 24, 2009 1:43 pm
Location: Was Russia,Moscow; Currently Germany,Berlin
PostPosted: Fri Dec 09, 2011 7:47 pm
I have some information related to packet 0x12.5C:
Godclient have command ".fightstyle <text argument>"
when executed, client will send this packet to server with data entered after command itself
p.s. Godclient does send most of it commands with 0x12 sub-packets
p.s. It was not included to ruosi packet guide as I thought it was unnecessary
Attachments
godclient commands to packets ref.txt
List of 0x12 sub-packets and their references to text commands
(2.89 KiB) Downloaded 896 times
godclient commands.txt
List of text commands of godclient and their actions
(4.45 KiB) Downloaded 900 times

Return to UO Demo

Who is online

Users browsing this forum: No registered users and 3 guests

cron