PDA

View Full Version : September & October Patch



r6express
10-23-2012, 06:35 PM
I just pushed to SVN the changes that I've been sharing in the helpdesk thread, which resolve the problems caused by the past couple of game patches. I held off on bumping the version and creating a new tarball due to fransick's indication of possible problems. I'd like to make sure he can get it running. I also included stddef.h in message.h since some users have trouble compiling without it. I'm hoping it doesn't cause problems for those that didn't need it.

BlueAdept
10-23-2012, 06:54 PM
Thanks r6. I havent had time to try it.

fransick
10-23-2012, 08:49 PM
As posted in help forum, compiled fine and is working. I'll set about working on missing opcodes over the weekend. I have that process down and actually enjoy the puzzle it represents more than the game itself these days. Go figure...

Spanners
10-26-2012, 09:35 AM
Are there any concide notes on howto find opcodes these days?

I'd like to be more help round here than I am currently.

r6express
10-26-2012, 11:49 AM
Are there any concide notes on howto find opcodes these days?

I'd like to be more help round here than I am currently.

Simplest explanation is probably something like this:

0) Hurry up and read this post before the next EQ patch comes out
1) Startup a stable version of ShowEQ
2) Click Network -> Log -> Zone Data (or hit F7)
3) Login a pet-class character to EQ to a mostly quiet zone like Arena, Guild Hall, etc.
4) Create a pet
5) Dismiss the pet
6) Kill a mob
7) Rename ~/.showeq/logs/zone.log to ~/.showeq/logs/zone.log.yyyyMMdd
8) Preserve that renamed zone log file for when the next patch comes out
9) On patch day, repeat steps 1-6
10) Compare the new zone.log with the preserved zone.log and try to match the packets with the new opcodes
11) Update zoneopcodes.xml with new opcodes
12) Rinse and repeat until satisfied

Those steps will work for patches that don't change structs. For heavier patches, it will likely require digging through the zone.log packet dumps with a fine tooth come to re-align the structs.

fransick
10-26-2012, 02:59 PM
Working on more opcode updates tonight... already have a bunch updated but you guys had most of the critical ones done already!

Spanners
10-28-2012, 07:26 AM
Thanks r6express, I'll do 1-8 now and await patch day ;)

great stuff.

fransick
10-29-2012, 09:02 AM
SVN updated with opcode updates. Also made a slight change to interface.cpp to ignore struct match on groupinvite.

Didn't increment the version number just yet as I am hopeful I'll be able to make a few other fixes this week (not traveling for change). Just need to better understand r6express' changes... now if Sandy doesn't knock out the power...

r6express
11-02-2012, 07:22 AM
SVN updated with opcode updates. Also made a slight change to interface.cpp to ignore struct match on groupinvite.

Didn't increment the version number just yet as I am hopeful I'll be able to make a few other fixes this week (not traveling for change). Just need to better understand r6express' changes... now if Sandy doesn't knock out the power...

Fransick,

The charProfileStruct change is now modeled after how the spawnStruct is populated. Instead of doing a simple byte copy from the packet data into the charProfileStruct, it now starts at data byte 0 and dynamically reads each piece of information and then puts it into the correct struct location. I had to make this change because EQ now sends dynamically sized information, primarily related to string sizes. Specifically, the potion belt or bandolier data segments were compacted to a set of dynamically sized strings instead of a hardcoded string length. This made the packet smaller but forced us to read the charProfileStruct more intelligently. If you look at the new function called fillProfileStruct(), you can see how it starts at byte 0 of the packet's data array and starts to read each individual piece of info. Also, I noticed that apparently for a very long time showeq was making a lot of assumptions about how many array elements are in the object arrays embedded in the packet data. However, I found that each array inside the packet is prefaced with the array length. So my new function first reads the array length and then iterates across that count, populating each new array element. So it's now less brittle for those occasions when SOE increases the amount of elements stored in the arrays. That said, there are still several MAX_*** constants that should be removed from showeq and instead the charProfileStruct array should be instantiated based on the dynamic count I'm now reading in the packet. I didn't take the time to clean that up because it was busy work and I didn't have a lot of time to spend on it. Also, some more cleanup would be to remove all those now unneeded filler struct members like unknown00801, etc. Since we don't fill the struct in one big byte copy those filler members are pointless now.

I'll try to check the forums more frequently in case you have more questions.

fransick
11-02-2012, 10:59 AM
Fransick,

The charProfileStruct change is now modeled after how the spawnStruct is populated. Instead of doing a simple byte copy from the packet data into the charProfileStruct, it now starts at data byte 0 and dynamically reads each piece of information and then puts it into the correct struct location. I had to make this change because EQ now sends dynamically sized information, primarily related to string sizes. Specifically, the potion belt or bandolier data segments were compacted to a set of dynamically sized strings instead of a hardcoded string length. This made the packet smaller but forced us to read the charProfileStruct more intelligently. If you look at the new function called fillProfileStruct(), you can see how it starts at byte 0 of the packet's data array and starts to read each individual piece of info. Also, I noticed that apparently for a very long time showeq was making a lot of assumptions about how many array elements are in the object arrays embedded in the packet data. However, I found that each array inside the packet is prefaced with the array length. So my new function first reads the array length and then iterates across that count, populating each new array element. So it's now less brittle for those occasions when SOE increases the amount of elements stored in the arrays. That said, there are still several MAX_*** constants that should be removed from showeq and instead the charProfileStruct array should be instantiated based on the dynamic count I'm now reading in the packet. I didn't take the time to clean that up because it was busy work and I didn't have a lot of time to spend on it. Also, some more cleanup would be to remove all those now unneeded filler struct members like unknown00801, etc. Since we don't fill the struct in one big byte copy those filler members are pointless now.

I'll try to check the forums more frequently in case you have more questions.

Very cool... I'll see if I can make heads or tails of it all and do some of the busy cleanup. I have very little programming experience (read that as none in fact) so it is a bit of a jigsaw puzzle exercise for me but I enjoy the challenge and the learning that comes with it! As soon as I have some time at home, I'll see if I can get after that busy work.

Somewhere Ratt, Dophaz and others are cringing that I am playing with code...

r6express
11-02-2012, 12:21 PM
Very cool... I'll see if I can make heads or tails of it all and do some of the busy cleanup. I have very little programming experience (read that as none in fact) so it is a bit of a jigsaw puzzle exercise for me but I enjoy the challenge and the learning that comes with it! As soon as I have some time at home, I'll see if I can get after that busy work.

Somewhere Ratt, Dophaz and others are cringing that I am playing with code...

I just turned on email notifications for my forum account, so if you want me to do a quick review when you're finished, PM me or reply here and I'll come a'running.

BlueAdept
11-02-2012, 01:43 PM
Just a quick FYI. Got hit hard with sandy. Still no power. 3 1/2 feet of water. Heater and water heater shot. No inet at place Im staying. Hope to get back to normal soon.

purple
11-02-2012, 01:53 PM
Fransick, no one is going to cringe. It's great that you're getting your hands dirty. It is people like you that have showeq going over the years through many different sets of developers. I didn't know what I was doing when I started either, but through the patience and help of ksmith, Doodman, FatherNitWit, Quackrabbit and others, I eventually knew what I was doing.

Some of those MAX_ constants are used cross-struct in everquest.h. Some are used to malloc UI data. Someone who wants to clean things up should just remove them all, see what horrors happen, and clean up the remains.

Razzle
11-02-2012, 02:02 PM
Just a quick FYI. Got hit hard with sandy. Still no power. 3 1/2 feet of water. Heater and water heater shot. No inet at place Im staying. Hope to get back to normal soon.
i feel for those in need. Good luck BA.

You are doing a bang up job Fran. Keep at it. Everyone appreciates your hard work.

Razzle