we be down, I think.
we be down, I think.
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.
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.
I was hunting down 1 last opcode before posting it, but it was coming.
There's the opcode change I haveCode:<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">
Also,
Is the zoneentry once the structs have been updated, which I'm working on now (more-so to learn)Code:<opcode id="1438" name="OP_ZoneEntry" updated="07/16/13">
Last edited by nate1280; 07-17-2013 at 09:31 AM. Reason: forgot to change zoneentry opcode
Forgot to mention, I'm not 100% certain on a few of them (NpcMoveUpdate mainly, and possibly MobUpdate)
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.
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.Code:<opcode id="1458" name="OP_SendZonePoints" updated="07/16/13"> <opcode id="2c9b" name="OP_ClientUpdate" updated="07/16/13">
Here's the first of 2 pos data fixes:
Code:/* ** 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 };
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.
Here's the second pos data struct:
Will post the full patch shortly but I need to test first.Code:/* ** 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*/ };
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.
Here is the patch file:Code:svn checkout http://svn.code.sf.net/p/seq/svn/showeq/trunk showeq
Code: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,
Everything seems to be working, thank you for the patch.
Wish I could have been more helpful.
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/showthr...ll=1#post47759
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?
Disregard.. found the x13 release.
Thanks you two for getting us back up!
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
Last edited by Razzle; 07-18-2013 at 08:50 AM.
There are currently 1 users browsing this thread. (0 members and 1 guests)