PDA

View Full Version : lookin like Heart of Fear broke us



Reliant
07-16-2013, 06:44 PM
we be down, I think.

nate1280
07-17-2013, 07:51 AM
I think I have most of the updated opcodes, just having troubles updating the structure or code for spawnshell, it seems that the data is bigger and varies even more.

ShortBuss
07-17-2013, 08:45 AM
Information sharing helps speed up the process for everyone involved. Post the op-codes you've found already to help out. If you resolve one area post that part.

For the spawn struct initially it looks like the changes are due to the position data increasing in size. It went from 24 & 42 to 28 & 46. This means you need to make several changes before you can even start to debug the position data. First in everquest.h increase the size of the two position data structures by 4 bytes and also remember to do this in the spawnstruct as well. Then in spawnshell.cpp in fillspawnstruct add in another element ([5]) for setting the position data.

nate1280
07-17-2013, 09:09 AM
I was hunting down 1 last opcode before posting it, but it was coming.


<opcode id="7d34" name="OP_PlayerProfile" updated="07/16/13">
<opcode id="6319" name="OP_TimeOfDay" updated="07/16/13">
<opcode id="0428" name="OP_NewZone" updated="07/16/13">
<opcode id="4003" name="OP_SpawnDoor" updated="06/19/13">
<opcode id="5125" name="OP_GroundSpawn" updated="07/16/13">
<opcode id="439c" name="OP_GuildMOTD" updated="07/16/13">
<opcode id="0489" name="OP_ClientUpdate" updated="07/16/13">
<opcode id="2960" name="OP_NpcMoveUpdate" updated="07/16/13">
<opcode id="6fdb" name="OP_MobUpdate" updated="07/16/13">
<opcode id="1852" name="OP_DeleteSpawn" updated="07/16/13">
<opcode id="7180" name="OP_RemoveSpawn" updated="07/16/13">
<opcode id="444a" name="OP_Death" updated="07/16/13">
<opcode id="64b5" name="OP_WearChange" updated="07/16/13">
<opcode id="2a2e" name="OP_SpawnAppearance" updated="07/16/13">
<opcode id="7bf7" name="OP_GuildMemberUpdate" updated="07/16/13">
<opcode id="6714" name="OP_ClickObject" updated="07/16/13">
<opcode id="6777" name="OP_Action" updated="07/16/13">
<opcode id="4f6c" name="OP_Action2" updated="07/16/13">
<opcode id="7107" name="OP_Consider" updated="07/16/13">
<opcode id="2ff9" name="OP_TargetMouse" updated="07/16/13">


There's the opcode change I have

Also,


<opcode id="1438" name="OP_ZoneEntry" updated="07/16/13">

Is the zoneentry once the structs have been updated, which I'm working on now (more-so to learn)

nate1280
07-17-2013, 09:13 AM
Forgot to mention, I'm not 100% certain on a few of them (NpcMoveUpdate mainly, and possibly MobUpdate)

ShortBuss
07-17-2013, 09:47 AM
Good work, these pretty much match up with mine. OP_ClientUpdate is wrong in your list and that would be problematic for finding the position data. Again the sizes were changed to 28 and 46.


<opcode id="1458" name="OP_SendZonePoints" updated="07/16/13">
<opcode id="2c9b" name="OP_ClientUpdate" updated="07/16/13">


Looks like spawnstruct is stable now with the changes to the size implemented. Again this means adding 4 bytes to the 3 position data locations in everquest.h and then also updating fillspawnstruct in spawnshell.cpp to add another row of position data.

Here's the first of 2 pos data fixes:


/*
** Self Position Update
** Length: 46 Octets
** OpCode: PlayerPosCode
*/

struct playerSelfPosStruct
{
/*0000*/ uint16_t unknown0000; // ***Placeholder (update time counter?)
/*0002*/ uint16_t spawnId; // Player's spawn id
/*0004*/ uint16_t unknown0004; // ***Placeholder
/*0006*/ unsigned padding6:10;
unsigned padding4:12; // ***Placeholder
unsigned padding1:10; // ***Placeholder
/*0010*/ float x; // x coord (1st loc value)
/*0014*/ float deltaZ; // Change in z
/*0018*/ signed animation:10; // velocity
unsigned pitch:12; // pitch (up/down heading)
unsigned padding5:10;
/*0022*/ float y; // y coord (2nd loc value)
/*0026*/ unsigned heading:12; // Directional heading
unsigned padding2:10; // ***Placeholder
unsigned padding3:10; // ***Placeholder
/*0030*/ float deltaY; // Change in y
/*0034*/ float z; // z coord (3rd loc value)
/*0038*/ signed deltaHeading:10; // change in heading
unsigned padding7:10;
unsigned padding8:12;
/*0042*/ float deltaX; // Change in x
};

nate1280
07-17-2013, 09:58 AM
Realized after reading and starting to look at posdata that the ClientUpdate was wrong and found the proper opcode. Wasn't aware about the sendzonepoints.

Still just trying to wrap my head around how these structure updates work.

ShortBuss
07-17-2013, 10:57 AM
Here's the second pos data struct:


/*
** Player Position Update
** Length: 28 Octets
** OpCode: PlayerPosCode
*/

struct playerSpawnPosStruct
{
/*0000*/ uint16_t spawnId;
/*0002*/ uint16_t spawnId2;
/*0004*/ unsigned pitch:12;
signed deltaX:13; // change in x
unsigned padding01:07;
/*0008*/ signed x:19; // x coord
unsigned padding06:13;
/*0012*/ signed z:19; // z coord
signed deltaHeading:10; // change in heading
unsigned padding05:03;
/*0016*/ signed deltaZ:13; // change in z
signed animation:10; // velocity
unsigned padding02:06;
/*0020*/ unsigned padding04:3;
unsigned heading:12; // heading
signed deltaY:13; // change in y
unsigned padding03:4;
/*0024*/ unsigned padding07:03;
signed y:19; // y coord
unsigned padding08:10;
/*0028*/
};


Will post the full patch shortly but I need to test first.

ShortBuss
07-17-2013, 11:09 AM
I'm attaching the patch (diff) file. Note that this is based on version 789 / 790 which is at the new check out URL. Make sure you are using the check-out command below which has changed since the month before.


svn checkout http://svn.code.sf.net/p/seq/svn/showeq/trunk showeq


Here is the patch file:


Index: conf/zoneopcodes.xml
================================================== =================
--- conf/zoneopcodes.xml (revision 789)
+++ conf/zoneopcodes.xml (working copy)
@@ -3,33 +3,33 @@
<seqopcodes>

<!-- Critical opcodes used directly by ShowEQ -->
- <opcode id="1434" name="OP_PlayerProfile" updated="06/19/13">
+ <opcode id="7d34" name="OP_PlayerProfile" updated="07/16/13">
<comment>CharProfileCode</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="64d6" name="OP_ZoneEntry" updated="06/19/13">
+ <opcode id="1438" name="OP_ZoneEntry" updated="07/16/13">
<comment>ZoneEntryCode</comment>
<payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="039e" name="OP_TimeOfDay" updated="06/19/13">
+ <opcode id="6319" name="OP_TimeOfDay" updated="07/16/13">
<comment>TimeOfDayCode</comment>
<payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/>
</opcode>
- <opcode id="08f5" name="OP_NewZone" updated="06/19/13">
+ <opcode id="0428" name="OP_NewZone" updated="07/16/13">
<comment>NewZoneCode</comment>
<payload dir="server" typename="newZoneStruct" sizechecktype="match"/>
</opcode>
- <opcode id="12d8" name="OP_SpawnDoor" updated="06/19/13">
+ <opcode id="4003" name="OP_SpawnDoor" updated="07/16/13">
<comment>DoorSpawnsCode</comment>
<payload dir="server" typename="doorStruct" sizechecktype="modulus"/>
</opcode>
- <opcode id="0a1a" name="OP_GroundSpawn" updated="06/19/13">
+ <opcode id="5125" name="OP_GroundSpawn" updated="07/16/13">
<comment>MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="none"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="1cb1" name="OP_SendZonePoints" updated="06/19/13">
+ <opcode id="1458" name="OP_SendZonePoints" updated="07/16/13">
<comment>Coords in a zone that will port you to another zone</comment>
<payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
</opcode>
@@ -41,40 +41,40 @@
<comment>ExpUpdateCode</comment>
<payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3a96" name="OP_GuildMOTD" updated="06/19/13">
+ <opcode id="439c" name="OP_GuildMOTD" updated="07/16/13">
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>
- <opcode id="06c2" name="OP_ClientUpdate" updated="06/19/13">
+ <opcode id="2c9b" name="OP_ClientUpdate" updated="07/16/13">
<comment>Position updates</comment>
<payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/>
<payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/>
</opcode>
- <opcode id="38f4" name="OP_NpcMoveUpdate" updated="06/19/13">
+ <opcode id="2960" name="OP_NpcMoveUpdate" updated="07/16/13">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="2239" name="OP_MobUpdate" updated="06/19/13">
+ <opcode id="6fdb" name="OP_MobUpdate" updated="07/16/13">
<comment>MobUpdateCode</comment>
<payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/>
</opcode>
- <opcode id="4cb5" name="OP_DeleteSpawn" updated="06/19/13">
+ <opcode id="1852" name="OP_DeleteSpawn" updated="07/16/13">
<comment>DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>
- <opcode id="05ed" name="OP_RemoveSpawn" updated="06/19/13">
+ <opcode id="7180" name="OP_RemoveSpawn" updated="07/16/13">
<comment>Remove spawn from zone</comment>
<payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>
- <opcode id="6438" name="OP_Death" updated="06/19/13">
+ <opcode id="444a" name="OP_Death" updated="07/16/13">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="6f8c" name="OP_WearChange" updated="06/19/13">
+ <opcode id="64b5" name="OP_WearChange" updated="07/16/13">
<comment>SpawnUpdateCode</comment>
<payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3943" name="OP_SpawnAppearance" updated="06/19/13">
+ <opcode id="2a2e" name="OP_SpawnAppearance" updated="07/16/13">
<comment>SpawnAppearanceCode</comment>
<payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/>
</opcode>
@@ -86,28 +86,28 @@
<comment>NpcHpUpdateCode Update HP % of a PC or NPC</comment>
<payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="4d7b" name="OP_GuildMemberUpdate" updated="06/19/13">
+ <opcode id="7bf7" name="OP_GuildMemberUpdate" updated="07/16/13">
<comment>Info regarding guild members</comment>
<payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/>
</opcode>
- <opcode id="6cb6" name="OP_ClickObject" updated="04/17/13">
+ <opcode id="6714" name="OP_ClickObject" updated="07/16/13">
<comment>Items dropped on the ground</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1e52" name="OP_Action" updated="06/19/13">
+ <opcode id="6777" name="OP_Action" updated="07/16/13">
<comment>Spells cast etc</comment>
<payload dir="both" typename="actionStruct" sizechecktype="match"/>
<payload dir="both" typename="actionAltStruct" sizechecktype="match"/>
</opcode>
- <opcode id="59d4" name="OP_Action2" updated="06/19/13">
+ <opcode id="4f6c" name="OP_Action2" updated="07/16/13">
<comment>Combat actions i.e. bash, kick etc</comment>
<payload dir="both" typename="action2Struct" sizechecktype="match"/>
</opcode>
- <opcode id="73ac" name="OP_Consider" updated="06/19/13">
+ <opcode id="7107" name="OP_Consider" updated="07/16/13">
<comment>ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7c5c" name="OP_TargetMouse" updated="06/19/13">
+ <opcode id="2ff9" name="OP_TargetMouse" updated="07/16/13">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>
Index: src/everquest.h
================================================== =================
--- src/everquest.h (revision 789)
+++ src/everquest.h (working copy)
@@ -1090,21 +1090,24 @@
{
struct
{
- unsigned pitch:12;
- signed z:19; // z coord
- unsigned padding01:01;
- signed y:19; // y coord
- signed deltaHeading:10; // change in heading
- unsigned padding05:03;
- signed x:19; // x coord
- signed deltaY:13; // change in y
- signed animation:10; // velocity
- signed deltaZ:13; // change in z
- unsigned padding02:06;
- unsigned padding04:3;
- unsigned heading:12; // heading
- signed deltaX:13; // change in x
- unsigned padding03:4;
+ unsigned pitch:12;
+ signed deltaX:13; // change in x
+ unsigned padding01:07;
+ signed x:19; // x coord
+ unsigned padding06:13;
+ signed z:19; // z coord
+ signed deltaHeading:10; // change in heading
+ unsigned padding05:03;
+ signed deltaZ:13; // change in z
+ signed animation:10; // velocity
+ unsigned padding02:06;
+ unsigned padding04:3;
+ unsigned heading:12; // heading
+ signed deltaY:13; // change in y
+ unsigned padding03:4;
+ unsigned padding07:03;
+ signed y:19; // y coord
+ unsigned padding08:10;
};
int32_t posData[5];
};
@@ -2344,7 +2347,7 @@

/*
** Player Position Update
-** Length: 24 Octets
+** Length: 28 Octets
** OpCode: PlayerPosCode
*/

@@ -2353,26 +2356,29 @@
/*0000*/ uint16_t spawnId;
/*0002*/ uint16_t spawnId2;
/*0004*/ unsigned pitch:12;
- signed z:19; // z coord
- unsigned padding01:01;
-/*0008*/ signed y:19; // y coord
+ signed deltaX:13; // change in x
+ unsigned padding01:07;
+/*0008*/ signed x:19; // x coord
+ unsigned padding06:13;
+/*0012*/ signed z:19; // z coord
signed deltaHeading:10; // change in heading
unsigned padding05:03;
-/*0012*/ signed x:19; // x coord
- signed deltaY:13; // change in y
-/*0016*/ signed animation:10; // velocity
- signed deltaZ:13; // change in z
+/*0016*/ signed deltaZ:13; // change in z
+ signed animation:10; // velocity
unsigned padding02:06;
/*0020*/ unsigned padding04:3;
unsigned heading:12; // heading
- signed deltaX:13; // change in x
+ signed deltaY:13; // change in y
unsigned padding03:4;
-/*0024*/
+/*0024*/ unsigned padding07:03;
+ signed y:19; // y coord
+ unsigned padding08:10;
+/*0028*/
};

/*
** Self Position Update
-** Length: 42 Octets
+** Length: 46 Octets
** OpCode: PlayerPosCode
*/

@@ -2381,22 +2387,24 @@
/*0000*/ uint16_t unknown0000; // ***Placeholder (update time counter?)
/*0002*/ uint16_t spawnId; // Player's spawn id
/*0004*/ uint16_t unknown0004; // ***Placeholder
-/*0006*/ unsigned pitch:12; // pitch (up/down heading)
- signed animation:10; // velocity
- unsigned padding5:10;
-/*0010*/ float deltaX; // Change in x
-/*0014*/ float y; // y coord (2nd loc value)
-/*0018*/ float deltaZ; // Change in z
-/*0022*/ signed deltaHeading:10; // change in heading
+/*0006*/ unsigned padding6:10;
unsigned padding4:12; // ***Placeholder
unsigned padding1:10; // ***Placeholder
-/*0026*/ float deltaY; // Change in y
-/*0030*/ unsigned heading:12; // Directional heading
+/*0010*/ float x; // x coord (1st loc value)
+/*0014*/ float deltaZ; // Change in z
+/*0018*/ signed animation:10; // velocity
+ unsigned pitch:12; // pitch (up/down heading)
+ unsigned padding5:10;
+/*0022*/ float y; // y coord (2nd loc value)
+/*0026*/ unsigned heading:12; // Directional heading
unsigned padding2:10; // ***Placeholder
unsigned padding3:10; // ***Placeholder
+/*0030*/ float deltaY; // Change in y
/*0034*/ float z; // z coord (3rd loc value)
-/*0038*/ float x; // x coord (1st loc value)
-/*0042*/
+/*0038*/ signed deltaHeading:10; // change in heading
+ unsigned padding7:10;
+ unsigned padding8:12;
+/*0042*/ float deltaX; // Change in x
};


Index: src/player.cpp
================================================== =================
--- src/player.cpp (revision 789)
+++ src/player.cpp (working copy)
@@ -851,32 +851,35 @@
/*0000*/ uint16_t unknown0000; // ***Placeholder (update time counter?)
/*0002*/ uint16_t spawnId; // Player's spawn id
/*0004*/ uint16_t unknown0004; // ***Placeholder
- /*0006*/ unsigned pitch:12; // pitch (up/down heading)
- signed animation:10; // velocity
- unsigned padding5:10;
- /*0010*/ float deltaX; // Change in x
- /*0014*/ float y; // y coord (2nd loc value)
- /*0018*/ float deltaZ; // Change in z
- /*0022*/ signed deltaHeading:10; // change in heading
+ /*0006*/ unsigned padding6:10;
unsigned padding4:12; // ***Placeholder
unsigned padding1:10; // ***Placeholder
- /*0026*/ float deltaY; // Change in y
- /*0030*/ unsigned heading:12; // Directional heading
- unsigned padding2:10; // ***Placeholder
- unsigned padding3:10; // ***Placeholder
+ /*0010*/ float x; // x coord (1st loc value)
+ /*0014*/ float deltaZ; // Change in z
+ /*0018*/ signed animation:10; // velocity
+ unsigned pitch:12; // pitch (up/down heading)
+ unsigned padding5:10;
+ /*0022*/ float y; // y coord (2nd loc value)
+ /*0026*/ unsigned heading:12; // Directional heading
+ unsigned padding2:10; // ***Placeholder
+ unsigned padding3:10; // ***Placeholder
+ /*0030*/ float deltaY; // Change in y
/*0034*/ float z; // z coord (3rd loc value)
- /*0038*/ float x; // x coord (1st loc value)
- /*0042*/
+ /*0038*/ signed deltaHeading:10; // change in heading
+ unsigned padding7:10;
+ unsigned padding8:12;
+ /*0042*/ float deltaX; // Change in x
};
#pragma pack(0)
struct pos *p = (struct pos *)data;
- printf("[%.2x](%f, %f, %f), dx %f dy %f dz %f head %d dhead %d anim %d pitch %d (%x, %x, %x, %x, %x)\n",
+ printf("[%.2x](%f, %f, %f), dx %f dy %f dz %f head %d dhead %d anim %d pitch %d (%x, %x, %x, %x, %x, %x, %x, %x)\n",
p->spawnId, p->x, p->y, p->z,
p->deltaX, p->deltaY, p->deltaZ,
p->heading, p->deltaHeading,
p->animation, p->pitch,
p->padding1, p->padding2, p->padding3,
- p->padding4, p->padding5 );
+ p->padding4, p->padding5,
+ p->padding6, p->padding7, p->padding8 );

#endif

Index: src/spawnshell.cpp
================================================== =================
--- src/spawnshell.cpp (revision 789)
+++ src/spawnshell.cpp (working copy)
@@ -716,6 +716,7 @@
spawn->posData[2] = netStream.readUInt32NC();
spawn->posData[3] = netStream.readUInt32NC();
spawn->posData[4] = netStream.readUInt32NC();
+ spawn->posData[5] = netStream.readUInt32NC();

if(spawn->hasTitle)
{
@@ -918,32 +919,36 @@
/*0000*/ uint16_t spawnId;
/*0002*/ uint16_t spawnId2;
/*0004*/ unsigned pitch:12;
- signed z:19; // z coord
- unsigned padding01:01;
- /*0008*/ signed y:19; // y coord
+ signed deltaX:13; // change in x
+ unsigned padding01:07;
+ /*0008*/ signed x:19; // x coord
+ unsigned padding06:13;
+ /*0012*/ signed z:19; // z coord
signed deltaHeading:10; // change in heading
unsigned padding05:03;
- /*0012*/ signed x:19; // x coord
- signed deltaY:13; // change in y
- /*0016*/ signed animation:10; // velocity
- signed deltaZ:13; // change in z
+ /*0016*/ signed deltaZ:13; // change in z
+ signed animation:10; // velocity
unsigned padding02:06;
/*0020*/ unsigned padding04:3;
unsigned heading:12; // heading
- signed deltaX:13; // change in x
+ signed deltaY:13; // change in y
unsigned padding03:4;
- /*0024*/
+ /*0024*/ unsigned padding07:03;
+ signed y:19; // y coord
+ unsigned padding08:10;
+ /*0028*/
};
#pragma pack(0)
struct pos *p = (struct pos *)data;
if (p->spawnId == 0x1234)
- printf("[%.2x](%f, %f, %f), dx %f dy %f dz %f\n head %d dhead %d anim %d pitch %d (%x, %x, %x, %x, %x)\n",
+ printf("[%.2x](%f, %f, %f), dx %f dy %f dz %f\n head %d dhead %d anim %d pitch %d (%x, %x, %x, %x, %x, %x, %x, %x)\n",
p->spawnId, float(p->x)/8.0, float(p->y/8.0), float(p->z)/8.0,
float(p->deltaX)/4.0, float(p->deltaY)/4.0,
float(p->deltaZ)/4.0,
p->heading, p->deltaHeading,
p->animation, p->pitch,
- p->padding01, p->padding02, p->padding03, p->padding04, p->padding05);
+ p->padding01, p->padding02, p->padding03, p->padding04, p->padding05,
+ p->padding06, p->padding07, p->padding08);
#endif

updateSpawn(pupdate->spawnId, x, y, z, dx, dy, dz,

nate1280
07-17-2013, 12:36 PM
Everything seems to be working, thank you for the patch.

Wish I could have been more helpful.

ShortBuss
07-17-2013, 02:51 PM
It just takes time to learn how to get through it. Keep working at it and you will figure it out. Sounds like you already got the op-codes down. The structs are a bit harder but not too much. I posted last month some details on figuring out the position data: http://www.showeq.net/forums/showthread.php?6739-Updated-SVN&p=47759&viewfull=1#post47759

Reliant
07-17-2013, 04:35 PM
SB... I'm used to getting the code from SourceForge. I checked-out the trunk files from the svn url you gave, but it has no 'configure', and it wont build. What am I missing?

Reliant
07-17-2013, 04:52 PM
Disregard.. found the x13 release.

BluesClues
07-18-2013, 07:06 AM
Thanks you two for getting us back up!

Razzle
07-18-2013, 07:30 AM
If you check out from sourceforge, you need to build the configure. You can
just make the configure by doing "make -f Makefile.dist configure"

Lots can cause errors on that build. Post and someone might be able to figure it out.

Make sure you have automake, autoconf, libtool and m4 installed. I think you need at least version 2.59 of autoconf and 1.11 of automake.

Razzle