PDA

View Full Version : Beta Updates



uRit1u2CBBA=
08-20-2010, 08:51 PM
I tried looking through the everquest.h file to find out how to tell it that I now have 10 inventory slots instead of 8. But either it's hidden very well, or I'm that out of practice, that it's not jumping out at me.

I even tried to do a packet dump, and I don't see anything in the resulting file that's legible.

I'm glad someone's able to figure this stuff out, cause I've never been able to do more than the simplest updates.

Razzle
08-21-2010, 10:16 AM
I am getting better at figuring out the packet structures. But I am real slow. Working on emu servers has helped me a lot.

Razzle

uRit1u2CBBA=
08-21-2010, 10:40 AM
If you know off the top of your head where I should be looking to increase the number of inventory slots, that can help.

Or if you need me to send you a copy of my dumps, I can do that too.

Thanks.

ieatacid
08-21-2010, 02:36 PM
If you know off the top of your head where I should be looking to increase the number of inventory slots, that can help.

Or if you need me to send you a copy of my dumps, I can do that too.

Thanks.

In the spawnStruct.


/*0000*/ union
{
struct
{
/*0000*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
/*0000*/ EquipStruct equip_chest; // Equiptment: Chest visual
/*0000*/ EquipStruct equip_arms; // Equiptment: Arms visual
/*0000*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
/*0000*/ EquipStruct equip_hands; // Equiptment: Hands visual
/*0000*/ EquipStruct equip_legs; // Equiptment: Legs visual
/*0000*/ EquipStruct equip_feet; // Equiptment: Boots visual
/*0000*/ EquipStruct equip_primary; // Equiptment: Main visual
/*0000*/ EquipStruct equip_secondary; // Equiptment: Off visual
} equip;
/*0000*/ EquipStruct equipment[9];
};

Add your new "EquipStruct equip_whatever_new_slot;" and increase the equipment array size by however many you add.

uRit1u2CBBA=
08-21-2010, 04:23 PM
Perfect. Is the existing 9 from the 8 inventory slots and the "cursor"?

So adding 2 more slots, I'd increase this value to 11, right?

Thanks again. There's probably other "unknown" characters that I'd have to account for.

sammie
08-21-2010, 04:29 PM
I think one of you is talking about visible armor slots, and the other is talking about non-visible main inventory slots. Unless there is some new visible slot, you don't want to change EquipStruct.

uRit1u2CBBA=
08-21-2010, 04:35 PM
I think one of you is talking about visible armor slots, and the other is talking about non-visible main inventory slots. Unless there is some new visible slot, you don't want to change EquipStruct.

Hmm .. if he's right, then I think we are talking about two different things.

There are no new item equip slots, but two new inventory slots.

sammie
09-03-2010, 01:44 PM
I moved my changes for Test Server to its own thread, since I was able to try them on beta and they didn't work.

sammie
09-08-2010, 04:50 PM
I was able to get SEQ semi-functional on Beta. Quite a few issues, but I'm still working on it. The biggest outstanding issue so far is that mobs are only decoding inside a small update radius. I ran out of time to work on it last night but I will try to determine in the next few days if this is a change to how mob data is delivered to the client or not. There are still lots of bugs and many many outstanding opcode changes. Any help finding and/or verifying opcodes is appreciated.


Using a fresh copy of SEQ 5.13.10.2:

spawnshell.cpp:


// unknowns
netStream.skipBytes(8);

spawn->isMercenary = netStream.readUInt8();

// unknowns -- changed from 28 to 53 for HoT Beta
netStream.skipBytes(53);

// now we're at the end

retVal = netStream.pos() - netStream.data();



everquest.h


/*
** Type: Zone Change Request (before hand)
** Length: 92 Octets
** OpCode: ZoneChangeCode
*/
struct zoneChangeStruct
{
/*0000*/ char name[64]; // Character Name
/*0064*/ uint16_t zoneId; // zone Id
/*0066*/ uint16_t zoneInstance; // zone Instance
/*0068*/ uint8_t unknown0068[8]; // unknown
/*0076*/ uint8_t unknown0076[12]; // ***Placeholder (6/29/2005)
/*0088*/ uint8_t unknown0088[4]; // HoT Beta (9/7/2010)
/*0092*/
};




/*20584*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout
/*20624*/ uint8_t unknown20624[212]; // Added 208 bytes for HoT BETA
/*20628*/ float expGroupLeadAA; // Current group lead exp points




/*
** Info sent when you start to cast a spell
** Length: 44 Octets
** OpCode: StartCastCode
*/

struct startCastStruct
{
/*0000*/ int32_t slot; // ***Placeholder
/*0004*/ uint32_t spellId; // Spell ID
/*0008*/ int32_t inventorySlot; // ***Placeholder
/*0012*/ uint8_t unknown0012[8]; // ***Placeholder (9/1/2010)
/*0020*/ uint32_t targetId; // The current selected target
/*0024*/ uint8_t unknown0024[4]; // ***Placeholder
/*0028*/ uint8_t unknown0028[16]; // ***Placeholder (4/7/2009)
/*0044*/
};



zoneopcodes.xml


<opcode id="4540" name="OP_NpcMoveUpdate" updated="09/07/10">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>

<opcode id="7EEB" name="OP_DeleteSpawn" updated="09/07/10">
<comment>old DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>

<opcode id="002B" name="OP_ZoneEntry" updated="09/07/10">
<comment>old ZoneEntryCode</comment>
<payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>

<opcode id="0B93" name="OP_ZoneChange" updated="09/07/10">
<comment>old ZoneChangeCode</comment>
<payload dir="both" typename="zoneChangeStruct" sizechecktype="match"/>
</opcode>

<opcode id="3237" name="OP_Death" updated="09/07/10">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>

<opcode id="5DBC" name="OP_ItemPlayerPacket" updated="09/07/10">
<comment>Inventory/bank items coming over during zone</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>

uRit1u2CBBA=
10-12-2010, 12:34 PM
It's not perfect, but it compiles and gives you maps.

I followed the steps sammie gave above, with one change. In everquest.h, his new line was:

/*20624*/ uint8_t unknown20624[212]; // Added 208 bytes for HoT BETA

That needs to be changed to:

/*20624*/ uint8_t unknown20624[92]; // Added 88 bytes for HoT


There are other problems, that I've never been able to figure out, but at least this works for now. (Map and radar, but no skittles)

sammie
10-14-2010, 03:44 AM
If you have no skittles it sounds like you need to find the opcode for OP_ZoneEntry on live. It was 002b on beta and is also now on test after HoT was published. I'm surprised it isn't the same on live servers, too. Should be easy to find, just log unknown packets, zone to a new zone with lots of NPCs, look at the log and look for a packet that contains the names of the mobs. Plug in that opcode and restart SEQ and see if that works.

Also, OP_NpcMoveUpdate is now 38f9 on Test, and OP_DeleteSpawn is now 59a8. If you get ZoneEntry working and skittles appear but don't move and won't disappear after being killed, you might try these 2 codes.

I'd do it myself but patching to live with my connection would take over 2 hours and I don't have the time or energy right now.

Newby
10-14-2010, 06:43 AM
New at this so bear with me. 59a8 for Op_DeleteSpawn works, but only if you change the opcode for Op_GroupFollow2 from 59a8 to something else. I didn't have anyone else on to check what the group opcodes should be, so I just changed it to something that wasn't already used. Needs work.

OP_Consider appears to be 3E50.

OP_CastSpell appears to be 7286.

Helix2
10-14-2010, 10:49 AM
Thanks for the Op codes guys. And the info on how to find them sammie, took me a while to find the logs in /.showeq though =P.
I figured out the OP_TargetMouse is: 2257.

Most critical codes in then, just in time for the weekend =)

uRit1u2CBBA=
10-14-2010, 08:03 PM
Thanks for the codes.

I misspoke when I said I didn't have skittles. Turned out that I did, but when I targetted anything in-game, it didn't have an effect to SEQ. Sounds like with TargetMouse known, sounds like this should work.

icyman2
10-15-2010, 02:58 PM
Have you guys made any other changes from 5.13.10.2 to get skittles on Live servers?

The reason I am asking, is that I had to put a new HD into my SEQ box yesterday and get everything going from scratch (I even switched from Gentoo to Mandriva - meh). Pretty sure I am handing packets to it properly (via ip_forward = 1 & setting the Linux box as the gateway on my windows box); I can tcpdump & match packets coming from the windows IP.

SEQ says it found a client from the IP of my windows box, so only thing I am left wondering is about opcodes. And if there's more to these changes than what is above (form Sammie), and uRit1u2CBBA='s changes. There hasn't been a "real" release in 80 days, and I seem to recall having some locally modified code on my end before I lost my HD.

To be clear, I don't get skittles, nor even a map. I tried the advice above to try & find the ZoneEntry, but I never saw a packet (in the global.txt log file) with any mob names in it.

hug
10-15-2010, 03:29 PM
Start with a fresh copy of 5.13.10.2

Then make all the changes from sammie's post at 09-08-2010 06:50 PM, skipping the ones for zoneopcodes.xml since these will change after you compile.

Be sure to make the change noted by uRit1u2CBBA=
change /*20624*/ uint8_t unknown20624[212]; // Added 208 bytes for HoT BETA
to /*20624*/ uint8_t unknown20624[92]; // Added 88 bytes for HoT

compile, make, make install

then make the changes from these same posts in zoneopcodes.xml

Should be good after that, although a lot of the opcodes are not yet posted.

Wish I could help further, but finding opcodes is greek to me.

uRit1u2CBBA=
10-15-2010, 03:39 PM
I recall a number of changes that were needed using 5.13.10.2 asw a base to keep the game running before the expansion. So you'll have to dig a little to find them.

zoneopcodes.xml can be modified from the conf directory of the 5.13.10.2 tarball, and when "make && make istall" is run, the updated file will be pushed out to where it gets read in at run time. But updating the run-time version works as well.

I'll see if I can create a patch file of my current version vs. 5.13.10.2 base. I don't think it will be pretty, and will include all the new data in zones.h and races.h. If I get around to it, I'll post it tomorrow. If not, it won't be until next week since I'm travelling for business and will be out most of next week.

hug
10-15-2010, 03:47 PM
Ah well, shows what little I know. didn't realize that I could edit the zoneopcodes.xml before a config. learn something new every day...

icyman2
10-15-2010, 04:36 PM
Redoing on your recommendation now Hug - can't hurt. :)

Would appreciate the patch uRit1u2CBBA=, and in the meantime, I'll see if I can find those previous changes as well.

Ok, nm, things are good now -- turns out I needed to masquerade by network traffic in Mandriva, while (somehow) Gentoo did it by default or something. Dunno. But I am getting skittles now, thanks gents!

uRit1u2CBBA=
10-16-2010, 05:31 PM
Here's a patch, based on the SourceForge version of 5.13.10.2 and compared to the version of the code that I have, which seems to do everything that I need 100%, but other functionality that I don't use much may still be broken.

Hope this helps someone.


diff -r showeq-5.13.10.2.orig/conf/zoneopcodes.xml showeq-5.13.10.2/conf/zoneopcodes.xml
16c16
< <opcode id="0F3E" name="OP_NpcMoveUpdate" updated="3/10/10">
---
> <opcode id="38F9" name="OP_NpcMoveUpdate" updated="3/10/10">
24c24
< <opcode id="7351" name="OP_DeleteSpawn" updated="3/10/10">
---
> <opcode id="59A8" name="OP_DeleteSpawn" updated="3/10/10">
28c28
< <opcode id="4B61" name="OP_ZoneEntry" updated="10/21/09">
---
> <opcode id="002B" name="OP_ZoneEntry" updated="10/21/09">
45c45
< <opcode id="5F5E" name="OP_TargetMouse" updated="10/21/09">
---
> <opcode id="2257" name="OP_TargetMouse" updated="10/21/09">
57c57
< <opcode id="59A8" name="OP_GroupFollow2" updated="10/21/09">
---
> <opcode id="59B8" name="OP_GroupFollow2" updated="10/21/09">
151c151
< <opcode id="3C2D" name="OP_Consider" updated="10/21/09">
---
> <opcode id="3E50" name="OP_Consider" updated="10/21/09">
155c155
< <opcode id="6D37" name="OP_ZoneChange" updated="10/21/09">
---
> <opcode id="0B93" name="OP_ZoneChange" updated="10/21/09">
193c193
< <opcode id="7F9E" name="OP_Death" updated="06/12/09">
---
> <opcode id="3237" name="OP_Death" updated="06/12/09">
218c218
< <opcode id="50C2" name="OP_CastSpell" updated="06/12/09">
---
> <opcode id="7286" name="OP_CastSpell" updated="06/12/09">
308c308
< <opcode id="08a3" name="OP_ItemPlayerPacket" updated="03/14/07">
---
> <opcode id="5DBC" name="OP_ItemPlayerPacket" updated="03/14/07">
diff -r showeq-5.13.10.2.orig/src/everquest.h showeq-5.13.10.2/src/everquest.h
526c526
< ** Length: 88 Octets
---
> ** Length: 92 Octets
536c536,537
< /*0088*/
---
> /*0088*/ uint8_t unknown0088[4]; // ***Placeholder (9/07/2010)
> /*0092*/
790c791
< /*20624*/ uint8_t unknown20624[4];
---
> /*20624*/ uint8_t unknown20624[92]; // Added 88 bytes for HoT
1443c1444
< ** Length: 256 Octets
---
> ** Length: 264 Octets
1457,1458c1458,1459
< /*0084*/ uint8_t unknown0084[176]; // ***Placeholder
< /*0260*/
---
> /*0084*/ uint8_t unknown0084[180]; // ***Placeholder
> /*0264*/
1996c1997
< ** Length: 20 Octets
---
> ** Length: 44 Octets
2005,2008c2006,2010
< /*0012*/ uint32_t targetId; // The current selected target
< /*0016*/ uint8_t unknown0018[4]; // ***Placeholder
< /*0020*/ uint8_t unknown0020[16]; // ***Placeholder (4/7/2009)
< /*0036*/
---
> /*0012*/ uint8_t unknown0012[8]; // ***Placeholder
> /*0020*/ uint32_t targetId; // The current selected target
> /*0024*/ uint8_t unknown0024[4]; // ***Placeholder
> /*0028*/ uint8_t unknown0028[16]; // ***Placeholder (4/7/2009)
> /*0044*/
diff -r showeq-5.13.10.2.orig/src/races.h showeq-5.13.10.2/src/races.h
547,552c547,552
< "Plant", // 538
< "Plant", // 539
< "Plant", // 540
< "Toolbox", // 541
< "Wine Cask", // 542
< "Stone Jug", // 543
---
> "Toolbox", // 538
> "Stone Jug", // 539
> "Small Plant", // 540
> "Medium Plant", // 541
> "Tall Plant", // 542
> "Wine Cask", // 543
608,610c608,610
< "UNKNOWN RACE", // 599
< "UNKNOWN RACE", // 600
< "UNKNOWN RACE", // 601
---
> "Spell Particle 1", // 599
> "Invisible Man of Zomm", // 600
> "Robocopter of Zomm", // 601
662a663,688
> "Spider Mount", // 654
> "Bear Mount", // 655
> "Rat Mount", // 656
> "Sessiloid Mount", // 657
> "Morell Thule", // 658
> "Marionette", // 659
> "Book Dervish", // 660
> "Topiary Lion", // 661
> "Rotdog", // 662
> "Amygdalan", // 663
> "Sandman", // 664
> "Grandfather Clock", // 665
> "Gingerbread Man", // 666
> "Beefeater", // 667
> "Rabbit", // 668
> "Blind Dreamer", // 669
> "Cazic Thule", // 670
> "Topiary Lion Mount", // 671
> "Rot Dog Mount", // 672
> "Goral Mount", // 673
> "Selyran Mount", // 674
> "Sclera Mount", // 675
> "Braxy Mount", // 676
> "Kangon Mount", // 677
> "Erudite", // 678
> "Wurm Mount", // 679
diff -r showeq-5.13.10.2.orig/src/spawnshell.cpp showeq-5.13.10.2/src/spawnshell.cpp
684c684
< netStream.skipBytes(28);
---
> netStream.skipBytes(53);
diff -r showeq-5.13.10.2.orig/src/zones.h showeq-5.13.10.2/src/zones.h
711,716c711,716
< { "thulehouse1", "Thule House 1" }, // 701
< { "thulehouse2", "Thule House 2" }, // 702
< { "housegarden", "House Garden" }, // 703
< { "houselibrary", "House Library" }, // 704
< { "well", "Well" }, // 705
< { "fallen", "Fallen" }, // 706
---
> { "thulehouse1", "House of Thule" }, // 701
> { "thulehouse2", "House of Thule, Upper Floors" }, // 702
> { "housegarden", "The Grounds" }, // 703
> { "houselibrary", "The Library" }, // 704
> { "well", "The Well" }, // 705
> { "fallen", "Erudin Burning" }, // 706
718c718
< { "morelltower", "Morell's Tower" }, // 708
---
> { "somnium", "Sanctum Somnium" }, // 708
721,730c721,730
< { "thuledream", "Thule's Dream" }, // 711
< { NULL, NULL }, // 712
< { NULL, NULL }, // 713
< { NULL, NULL }, // 714
< { NULL, NULL }, // 715
< { NULL, NULL }, // 716
< { NULL, NULL }, // 717
< { NULL, NULL }, // 718
< { NULL, NULL }, // 719
< { NULL, NULL }, // 720
---
> { "thuledream", "Fear Itself" }, // 711
> { "neighborhood", "Sunrise Hills" }, // 712
> { "phylactery", "Miragul's Phylactery" }, // 713
> { "phinterior3a1", "House Interior" }, // 714
> { "phinterior1a1", "House Interior" }, // 715
> { "phinterior3a2", "House Interior" }, // 716
> { "phinterior3a3", "House Interior" }, // 717
> { "phinterior1a2", "House Interior" }, // 718
> { "phinterior1a3", "House Interior" }, // 719
> { "phinterior1b1", "Dragon House Interior" }, // 720
733c733
< { NULL, NULL }, // 723
---
> { "phinterior1d1", "Dragon House Interior" }, // 723

FatBuddha
10-17-2010, 06:00 AM
Thank you for the all in one diffs- made it simple for me to run through these quickly.

Oh its up and working with this too!

Jastur
10-17-2010, 07:53 PM
Logout opcode is now 0x42EF.

Still learning how to update everything, but will edit this post with stuff I come across.

oiji
11-06-2010, 11:42 AM
Can anyone confirm that the changes provided by Sammi and uRit1u2CBBA= work on Live. I have repeatedly checked my changes with diff -r and everquest.h / races.h / zoneopcodes.xml / zones.h and spawnshell.cpp all appear to be updated, but I am experiencing a Segmentation fault generating
Warning: OP_PlayerProfile (0x6022) (dataLen: 27816) doesn't match: sizeof(charProfileStruct):26728

From the build 5.13.10.2
Thanks

uRit1u2CBBA=
11-06-2010, 12:51 PM
Line 791 of everquest.h, do you have the array of uint8_t's set to 92?

oiji
11-06-2010, 02:11 PM
I do have the change at Line 791. Thanks for the quick response. I will start over from scratch and if I continue to have problems with post in the appropriate forum.

Thanks uRit1u2CBBA=