PDA

View Full Version : 1/16/13 changes



rogues
01-16-2013, 05:00 PM
Just got home a bit ago, got a chance to try to fix some opcodes. Looks like they messed with the x,y,z coordinates again. Hopefully it's not as bad as last time. Will try to post the opcodes I found in a while.

showeq42
01-18-2013, 11:08 AM
first time i've played with seq in years, got it mostly working:

opcode id="5772" name="OP_PlayerProfile"
opcode id="60a8" name="OP_ZoneEntry"
opcode id="18cd" name="OP_NewZone"
opcode id="4788" name="OP_NpcMoveUpdate"
opcode id="2c22" name="OP_Death"
opcode id="4234" name="OP_DeleteSpawn"
opcode id="781f" name="OP_RemoveSpawn"


undo these previous changes to spawnshell.cpp and spawn.cpp:

- int16_t y = pupdate->y >> 3;
+ int16_t y = (pupdate->y + pupdate->y) >> 3;

- setPos(s->x >> 3, s->y >> 3, s->z >> 3);
+ setPos(s->x >> 3, (s->y + s->y) >> 3, s->z >> 3);


x/y/z are correct, not sure about the rest:

signed deltaZ:13; // change in z
unsigned heading:12; // heading
signed padding0020:7;

signed deltaHeading:10;// change in heading
signed x:19; // x coord
signed padding0004:3;

signed animation:10; // animation
signed deltaX:13; // change in x
signed padding0008:9;

signed deltaY:13; // change in y
signed y:19; // y coord

signed padding0001:10;
signed z:19; // z coord
signed padding0016:3;

rogues
01-18-2013, 07:15 PM
Thanks!

I've applied the changes but I don't know if I've applied them correctly. Are you saying to change the x/y/z coordinates in every location that they show up in everquest.h? I've changed them all I think and things are mostly working. The two most obvious things I see now are that I don't see my own character and the heading, and NPCs (mobs, pets, mercs) move ok but PCs don't seem to. Is that what you expect or have I applied something incorrectly?

Again, much appreciation. I'm ok with the opcodes but those other changes really get me. Why do they change them so much from patch to patch? Isn't that a reflection of how they are passing/storing the information between the server and the client?

ieatacid
01-18-2013, 07:52 PM
Thanks!

I've applied the changes but I don't know if I've applied them correctly. Are you saying to change the x/y/z coordinates in every location that they show up in everquest.h? I've changed them all I think and things are mostly working. The two most obvious things I see now are that I don't see my own character and the heading, and NPCs (mobs, pets, mercs) move ok but PCs don't seem to. Is that what you expect or have I applied something incorrectly?

Again, much appreciation. I'm ok with the opcodes but those other changes really get me. Why do they change them so much from patch to patch? Isn't that a reflection of how they are passing/storing the information between the server and the client?
Any changes in the way the client decodes information have to be changed in ShowEQ too. In the previous patch, it was adding the 'y' coordinate to itself at the start of the function where it unpacks physics data -- for some reason they reverted that and only they (Sony) can say for sure why.

rogues
01-18-2013, 07:59 PM
Heh, thought so. I think they're doing it to screw with us...

OP_GroundSpawn is now 56b2

showeq42
01-18-2013, 08:21 PM
Thanks!
I've applied the changes but I don't know if I've applied them correctly. Are you saying to change the x/y/z coordinates in every location that they show up in everquest.h? I've changed them all I think and things are mostly working. The two most obvious things I see now are that I don't see my own character and the heading, and NPCs (mobs, pets, mercs) move ok but PCs don't seem to. Is that what you expect or have I applied something incorrectly?


Yup, I ran out of time to work on it so posted what I had.



Again, much appreciation. I'm ok with the opcodes but those other changes really get me. Why do they change them so much from patch to patch? Isn't that a reflection of how they are passing/storing the information between the server and the client?

I'm thinking just to screw with us, I can't think of any practical purpose for randomly reordering those things.

rogues
01-18-2013, 08:38 PM
Ok, I have other PCs moving now but they aren't in the right location. I must have messed up one of the changes above regarding player x/y/z.

I reverted the playerselfpos structure back to what it was pre-code and with the opcode changes I've made the player shows up on the map but not in the right spot. The structure appears to have changed for players but maybe not in the same way it did for npcs?

Oh, the other big spawn change I found is 0be5 for OP_ClientUpdate

Fluxcapacitor
01-18-2013, 08:39 PM
No matter what I do, I get what looks like Missile Command on crack. What structs need to be changed in everquest.h? Do I change the pos structs in spawnshell.cpp?

Thanks!!

showeq42
01-18-2013, 09:04 PM
I reverted the playerselfpos structure back to what it was pre-code and with the opcode changes I've made the player shows up on the map but not in the right spot. The structure appears to have changed for players but maybe not in the same way it did for npcs?

Yeah, the player pos struct is different and uses floats instead of unsigned

opcode id="142c" name="OP_MobUpdate"
opcode id="607d" name="OP_ClickObject"

showeq42
01-18-2013, 09:37 PM
got deltaX/deltaY in the right places now so movement vector lines are correct.
do heading/deltaHeading/deltaZ/animation do anything useful for seq?

signed deltaZ:13; // change in z
unsigned heading:12; // heading
signed padding0020:7;

signed deltaHeading:10;// change in heading
signed x:19; // x coord
signed padding0004:3;

signed padding0008:12;
signed deltaY:13; // change in y
signed padding0001:7;

signed deltaX:13; // change in x
signed y:19; // y coord

signed animation:10; // animation
signed z:19; // z coord
signed padding0016:3;

ShortBuss
01-18-2013, 09:38 PM
OP_Consider = 1184
OP_TargetMouse = 0a2d

ieatacid
01-18-2013, 11:39 PM
This is what I have so far


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

<!-- Critical opcodes used directly by ShowEQ -->
- <opcode id="46bb" name="OP_PlayerProfile" updated="12/12/12">
+ <opcode id="5772" name="OP_PlayerProfile" updated="01/16/13">
<comment>CharProfileCode</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="1665" name="OP_ZoneEntry" updated="12/12/12">
+ <opcode id="60A8" name="OP_ZoneEntry" updated="01/16/13">
<comment>ZoneEntryCode</comment>
<payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="3be2" name="OP_TimeOfDay" updated="12/12/12">
+ <opcode id="5824" name="OP_TimeOfDay" updated="01/16/13">
<comment>TimeOfDayCode</comment>
<payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7fff" name="OP_NewZone" updated="12/12/12">
+ <opcode id="18CD" name="OP_NewZone" updated="01/16/13">
<comment>NewZoneCode</comment>
<payload dir="server" typename="newZoneStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7b6c" name="OP_SpawnDoor" updated="12/12/12">
+ <opcode id="31ED" name="OP_SpawnDoor" updated="01/16/13">
<comment>DoorSpawnsCode</comment>
<payload dir="server" typename="doorStruct" sizechecktype="modulus"/>
</opcode>
- <opcode id="4286" name="OP_GroundSpawn" updated="12/12/12">
+ <opcode id="56B2" name="OP_GroundSpawn" updated="01/16/13">
<comment>MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="none"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="7922" name="OP_SendZonePoints" updated="12/12/12">
+ <opcode id="0D72" name="OP_SendZonePoints" updated="01/16/13">
<comment>Coords in a zone that will port you to another zone</comment>
<payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
</opcode>
- <opcode id="25C5" name="OP_AAExpUpdate" updated="12/12/12">
+ <opcode id="4212" name="OP_AAExpUpdate" updated="01/16/13">
<comment>Receiving AA experience. Also when percent to AA changes.</comment>
<payload dir="server" typename="altExpUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="47E3" name="OP_ExpUpdate" updated="12/12/12">
+ <opcode id="4ECC" name="OP_ExpUpdate" updated="01/16/13">
<comment>ExpUpdateCode</comment>
<payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0561" name="OP_GuildMOTD" updated="12/12/12">
+ <opcode id="5531" name="OP_GuildMOTD" updated="01/16/13">
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>
- <opcode id="455d" name="OP_ClientUpdate" updated="12/12/12">
+ <opcode id="0BE5" name="OP_ClientUpdate" updated="01/16/13">
<comment>Position updates - looks to be 455d and 42 bytes as of 12/12/12</comment>
<payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/>
<payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5BD9" name="OP_NpcMoveUpdate" updated="12/12/12">
+ <opcode id="4788" name="OP_NpcMoveUpdate" updated="01/16/13">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="6b5a" name="OP_MobUpdate" updated="12/12/12">
+ <opcode id="142C" name="OP_MobUpdate" updated="01/16/13">
<comment>MobUpdateCode</comment>
<payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/>
</opcode>
- <opcode id="3c8e" name="OP_DeleteSpawn" updated="12/12/12">
+ <opcode id="4234" name="OP_DeleteSpawn" updated="01/16/13">
<comment>DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3B06" name="OP_RemoveSpawn" updated="12/12/12">
+ <opcode id="781F" name="OP_RemoveSpawn" updated="01/16/13">
<comment>Remove spawn from zone</comment>
<payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>
- <opcode id="3a65" name="OP_Death" updated="12/12/12">
+ <opcode id="2C22" name="OP_Death" updated="01/16/13">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1ad3" name="OP_WearChange" updated="12/12/12">
+ <opcode id="32FB" name="OP_WearChange" updated="01/16/13">
<comment>SpawnUpdateCode</comment>
<payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7360" name="OP_SpawnAppearance" updated="12/12/12">
+ <opcode id="201A" name="OP_SpawnAppearance" updated="01/16/13">
<comment>SpawnAppearanceCode</comment>
<payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1949" name="OP_Stamina" updated="12/12/12">
+ <opcode id="4932" name="OP_Stamina" updated="01/16/13">
<comment>Server updating on hunger/thirst</comment>
<payload dir="server" typename="staminaStruct" sizechecktype="match"/>
</opcode>
- <opcode id="07b8" name="OP_HPUpdate" updated="12/12/12">
+ <opcode id="65E7" name="OP_HPUpdate" updated="01/16/13">
<comment>NpcHpUpdateCode Update HP % of a PC or NPC</comment>
<payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0048" name="OP_GuildMemberUpdate" updated="12/12/12">
+ <opcode id="24DA" name="OP_GuildMemberUpdate" updated="01/16/13">
<comment>Info regarding guild members</comment>
<payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/>
</opcode>
- <opcode id="7992" name="OP_ClickObject" updated="12/12/12">
+ <opcode id="607D" name="OP_ClickObject" updated="01/16/13">
<comment>Items dropped on the ground</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0ea7" name="OP_Action" updated="12/12/12">
+ <opcode id="31B6" name="OP_Action" updated="01/16/13">
<comment>Spells cast etc</comment>
<payload dir="both" typename="actionStruct" sizechecktype="match"/>
<payload dir="both" typename="actionAltStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5428" name="OP_Action2" updated="12/12/12">
+ <opcode id="4598" name="OP_Action2" updated="01/16/13">
<comment>Combat actions i.e. bash, kick etc</comment>
<payload dir="both" typename="action2Struct" sizechecktype="match"/>
</opcode>
- <opcode id="4d8d" name="OP_Consider" updated="12/12/12">
+ <opcode id="1184" name="OP_Consider" updated="01/16/13">
<comment>ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0e25" name="OP_TargetMouse" updated="12/12/12">
+ <opcode id="1740" name="OP_TargetMouse" updated="01/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 782)
+++ src/everquest.h (working copy)
@@ -1076,23 +1076,24 @@
{
struct
{
- signed padding0004:13;
- signed y:19; // y coord
-
- signed deltaX:13; // change in x
- signed deltaHeading:10;// change in heading
- signed padding0008:9;
-
- signed deltaY:13; // change in y
- signed z:19; // z coord
-
- signed x:19; // x coord
- signed animation:10; // animation
- signed padding0016:3;
-
- unsigned heading:12; // heading
- signed deltaZ:13; // change in z
- signed padding0020:7;
+ signed padding0004:12;
+ signed deltaZ:13; // change in z
+ signed padding00042:7;
+
+ signed deltaHeading:10;// change in heading
+ signed x:19; // x coord
+ signed padding0008:3;
+
+ unsigned heading:12; // heading
+ signed deltaY:13; // change in y
+ signed padding0012:7;
+
+ signed deltaX:13; // change in x
+ signed y:19; // y coord
+
+ signed animation:10; // animation
+ signed z:19; // z coord
+ signed padding0020:3;
};
int32_t posData[5];
};
@@ -2339,19 +2340,20 @@
{
/*0000*/ uint16_t spawnId;
/*0002*/ uint16_t spawnId2;
-/*0004*/ signed padding0004:13;
- signed y:19; // y coord
-/*0008*/ signed deltaX:13; // change in x
- signed deltaHeading:10;// change in heading
- signed padding0008:9;
-/*0012*/ signed deltaY:13; // change in y
+/*0004*/ signed padding0004:12;
+ signed deltaZ:13; // change in z
+ signed padding00042:7;
+/*0008*/ signed deltaHeading:10;// change in heading
+ signed x:19; // x coord
+ signed padding0008:3;
+/*0012*/ unsigned heading:12; // heading
+ signed deltaY:13; // change in y
+ signed padding0012:7;
+/*0016*/ signed deltaX:13; // change in x
+ signed y:19; // y coord
+/*0020*/ signed animation:10; // animation
signed z:19; // z coord
-/*0016*/ signed x:19; // x coord
- signed animation:10; // animation
- signed padding0016:3;
-/*0020*/ unsigned heading:12; // heading
- signed deltaZ:13; // change in z
- signed padding0020:7;
+ signed padding0020:3;
/*0024*/
};

Index: src/spawnshell.cpp
================================================== =================
--- src/spawnshell.cpp (revision 782)
+++ src/spawnshell.cpp (working copy)
@@ -882,7 +882,7 @@

if (dir != DIR_Client)
{
- int16_t y = (pupdate->y + pupdate->y) >> 3;
+ int16_t y = pupdate->y >> 3;
int16_t x = pupdate->x >> 3;
int16_t z = pupdate->z >> 3;

Index: src/spawn.cpp
================================================== =================
--- src/spawn.cpp (revision 782)
+++ src/spawn.cpp (working copy)
@@ -418,7 +418,7 @@
{
setName(s->name);
setLastName(s->lastName);
- setPos(s->x >> 3, (s->y + s->y) >> 3, s->z >> 3);
+ setPos(s->x >> 3, s->y >> 3, s->z >> 3);
setPetOwnerID(s->petOwnerId);
setLight(s->light);
setGender(s->gender);

almost got playerSelfPosStruct done

showeq42
01-19-2013, 12:01 AM
dunno if animation/deltaHeading are correct or if seq even uses them. the rest are good.



struct playerSelfPosStruct
{
/*0000*/ uint8_t unknown0000[2]; // ***Placeholder (update time counter?)
/*0002*/ uint16_t spawnId; // Player's spawn id
/*0004*/ uint8_t unknown0004[2]; // ***Placeholder -- BSH 13 Apr 2011
/*0006*/ unsigned padding0001:12; // ***Placeholder
unsigned heading:12; // Directional heading
unsigned padding0002:8; // ***Placeholder
/*0010*/ float y; // y coord (2nd loc value)
/*0014*/ float deltaZ; // Change in z
/*0018*/ float z; // z coord (3rd loc value)
/*0022*/ signed deltaHeading:10; // change in heading
unsigned padding0003:10; // ***Placeholder
unsigned padding0004:12; // ***Placeholder
/*0026*/ float x; // x coord (1st loc value)
/*0030*/ float deltaX; // Change in y
/*0034*/ float deltaY; // Change in x
/*0038*/ unsigned padding0005:12; // ***Placeholder
unsigned padding0006:10; // ***Placeholder
unsigned animation:10; // animation
/*0042*/
};

rogues
01-19-2013, 07:28 AM
Looks pretty good, at least from a couple minutes of use. Will give more feedback later. Really wish I could help with these struct changes.

fransick
01-19-2013, 08:17 AM
Everything checked out pretty well save random crashes after a few kills:


#0 0x0445c794 in QString::deref() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#1 0x0445c86e in QString::operator=(QString const&) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#2 0x080f575f in Player::setLastKill (this=0x8481490, name=..., level=90) at player.cpp:800
#3 0x08074346 in SpawnShell::killSpawn (this=0x82ec458, data=0x8a37e57 "\233_") at spawnshell.cpp:1475
#4 0x08074c87 in SpawnShell::qt_invoke (this=0x82ec458, _id=25, _o=0xbfffc390) at spawnshell.moc:412
#5 0x041855aa in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#6 0x080905ff in EQPacketDispatch::signal (this=0x842e5d8, t0=0x8a37e57 "\233_", t1=32, t2=2 '\002') at packetinfo.moc:99
#7 0x08089eb9 in EQPacketStream::dispatchPacket (this=0x83410b0, data=0x8a37e57 "\233_", len=32, opCode=11298, opcodeEntry=0x82cf0d0)
at packetstream.cpp:435
#8 0x0808c20a in EQPacketStream::processPacket (this=0x83410b0, packet=..., isSubpacket=true) at packetstream.cpp:719
#9 0x0808c4ea in EQPacketStream::processPacket (this=0x83410b0, packet=..., isSubpacket=false) at packetstream.cpp:807
#10 0x0808cc30 in EQPacketStream::handlePacket (this=0x83410b0, packet=...) at packetstream.cpp:572
#11 0x08093252 in EQPacket::dispatchPacket (this=0x8482e18, packet=...) at packet.cpp:659
#12 0x08095b25 in dispatchPacket (this=0x8482e18) at packet.cpp:583
#13 EQPacket::processPackets (this=0x8482e18) at packet.cpp:400
#14 0x08095e00 in EQPacket::qt_invoke (this=0x8482e18, _id=2, _o=0xbfffe768) at packet.moc:577
#15 0x04185642 in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#16 0x04185724 in QObject::activate_signal(int) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#17 0x044ccc5a in QTimer::timeout() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#18 0x041a5e3e in QTimer::event(QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#19 0x04123ffd in QApplication::internalNotify(QObject*, QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#20 0x0412418b in QApplication::notify(QObject*, QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#21 0x0411823c in QEventLoop::activateTimers() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#22 0x040d3182 in QEventLoop::processEvents(unsigned int) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#23 0x04139b50 in QEventLoop::enterLoop() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#24 0x04139ad7 in QEventLoop::exec() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#25 0x04124d20 in QApplication::exec() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#26 0x08067a8b in main (argc=1, argv=0xbffff3f4) at main.cpp:737

Reliant
01-19-2013, 12:50 PM
Which version is thiss off? x.10?

fransick
01-19-2013, 12:56 PM
Which version is thiss off? x.10?

Believe so... I applied Ieatacid's patch to fresh download and then added showeq42's playerselfposstruct changes to everquest.h. Works until I get the occasional crash mentioned in an earlier post.

Reliant
01-19-2013, 05:06 PM
Thanks fran... will give it a go.

Update: tried a normal 'patch' and it failed. what's the proper patch options / command?

Update tp the update.. nevermind ;) 'patch -p0 < file' seems to work. I had -p1 and it didn't.

fransick
01-20-2013, 10:33 AM
Everything checked out pretty well save random crashes after a few kills:


#0 0x0445c794 in QString::deref() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#1 0x0445c86e in QString::operator=(QString const&) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#2 0x080f575f in Player::setLastKill (this=0x8481490, name=..., level=90) at player.cpp:800
#3 0x08074346 in SpawnShell::killSpawn (this=0x82ec458, data=0x8a37e57 "\233_") at spawnshell.cpp:1475
#4 0x08074c87 in SpawnShell::qt_invoke (this=0x82ec458, _id=25, _o=0xbfffc390) at spawnshell.moc:412
#5 0x041855aa in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#6 0x080905ff in EQPacketDispatch::signal (this=0x842e5d8, t0=0x8a37e57 "\233_", t1=32, t2=2 '\002') at packetinfo.moc:99
#7 0x08089eb9 in EQPacketStream::dispatchPacket (this=0x83410b0, data=0x8a37e57 "\233_", len=32, opCode=11298, opcodeEntry=0x82cf0d0)
at packetstream.cpp:435
#8 0x0808c20a in EQPacketStream::processPacket (this=0x83410b0, packet=..., isSubpacket=true) at packetstream.cpp:719
#9 0x0808c4ea in EQPacketStream::processPacket (this=0x83410b0, packet=..., isSubpacket=false) at packetstream.cpp:807
#10 0x0808cc30 in EQPacketStream::handlePacket (this=0x83410b0, packet=...) at packetstream.cpp:572
#11 0x08093252 in EQPacket::dispatchPacket (this=0x8482e18, packet=...) at packet.cpp:659
#12 0x08095b25 in dispatchPacket (this=0x8482e18) at packet.cpp:583
#13 EQPacket::processPackets (this=0x8482e18) at packet.cpp:400
#14 0x08095e00 in EQPacket::qt_invoke (this=0x8482e18, _id=2, _o=0xbfffe768) at packet.moc:577
#15 0x04185642 in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#16 0x04185724 in QObject::activate_signal(int) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#17 0x044ccc5a in QTimer::timeout() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#18 0x041a5e3e in QTimer::event(QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#19 0x04123ffd in QApplication::internalNotify(QObject*, QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#20 0x0412418b in QApplication::notify(QObject*, QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#21 0x0411823c in QEventLoop::activateTimers() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#22 0x040d3182 in QEventLoop::processEvents(unsigned int) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#23 0x04139b50 in QEventLoop::enterLoop() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#24 0x04139ad7 in QEventLoop::exec() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#25 0x04124d20 in QApplication::exec() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#26 0x08067a8b in main (argc=1, argv=0xbffff3f4) at main.cpp:737


A bit more experimentation, and I am no closer to understanding why this happens... hits my main most of the time. if I have SEQ follow an alt in group it happens far less but still eventually will seg out with pretty much the same backtrace above. I messed around with just ignoring the lastkill code but that created downstream issues elsewhere. Any thoughts on what's happening with that code and why it's important?

fransick
01-20-2013, 01:00 PM
Found another consistent segfault. I seem much better at finding issues than solving them lately.

Happens when I zone into bazaar:
#0 0x006a6d80 in strcpy () from /lib/libc.so.6
#1 0x0806f868 in SpawnShell::fillSpawnStruct (this=0x8363b00, spawn=0x87d4da8, data=0x854d93c "", len=469, checkLen=true) at spawnshell.cpp:709
#2 0x08073298 in SpawnShell::zoneEntry (this=0x8363b00, data=0x854d93c "", len=469) at spawnshell.cpp:740
#3 0x08075238 in SpawnShell::qt_invoke (this=0x8363b00, _id=8, _o=0xbfffc390) at spawnshell.moc:395
#4 0x04185642 in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#5 0x080905ff in EQPacketDispatch::signal (this=0x8471ba0, t0=0x854d93c "", t1=469, t2=2 '\002') at packetinfo.moc:99
#6 0x08089eb9 in EQPacketStream::dispatchPacket (this=0x83410a8, data=0x854d93c "", len=469, opCode=24744, opcodeEntry=0x83c37a8)
at packetstream.cpp:435
#7 0x0808c29b in EQPacketStream::processPacket (this=0x83410a8, packet=..., isSubpacket=true) at packetstream.cpp:754
#8 0x0808c5ad in EQPacketStream::processPacket (this=0x83410a8, packet=..., isSubpacket=false) at packetstream.cpp:892
#9 0x0808cc30 in EQPacketStream::handlePacket (this=0x83410a8, packet=...) at packetstream.cpp:572
#10 0x08093252 in EQPacket::dispatchPacket (this=0x8482e30, packet=...) at packet.cpp:659
#11 0x08095b25 in dispatchPacket (this=0x8482e30) at packet.cpp:583
#12 EQPacket::processPackets (this=0x8482e30) at packet.cpp:400
#13 0x08095e00 in EQPacket::qt_invoke (this=0x8482e30, _id=2, _o=0xbfffe768) at packet.moc:577
#14 0x04185642 in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#15 0x04185724 in QObject::activate_signal(int) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#16 0x044ccc5a in QTimer::timeout() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#17 0x041a5e3e in QTimer::event(QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#18 0x04123ffd in QApplication::internalNotify(QObject*, QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#19 0x0412418b in QApplication::notify(QObject*, QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#20 0x0411823c in QEventLoop::activateTimers() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#21 0x040d3182 in QEventLoop::processEvents(unsigned int) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#22 0x04139b50 in QEventLoop::enterLoop() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#23 0x04139ad7 in QEventLoop::exec() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#24 0x04124d20 in QApplication::exec() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#25 0x08067a8b in main (argc=1, argv=0xbffff3f4) at main.cpp:737

rogues
01-20-2013, 04:14 PM
I'm not crashing zoning into the bazaar but I did notice that I only picked up PCs within about 50 feet from my char. I do seem to pick up new chars anywhere in zone when they zone in. For some strange reason I have noticed this problem in other zones. Some effect of them being in trader mode, perhaps?

I haven't had any time to play this weekend, I'll try to get on alter and see if I'm running into the other crash you're talking about.

fransick
01-20-2013, 05:54 PM
I'm not crashing zoning into the bazaar but I did notice that I only picked up PCs within about 50 feet from my char. I do seem to pick up new chars anywhere in zone when they zone in. For some strange reason I have noticed this problem in other zones. Some effect of them being in trader mode, perhaps?

I haven't had any time to play this weekend, I'll try to get on alter and see if I'm running into the other crash you're talking about.

Interesting... I'd be happy if I can get to the bottom of the lastkill segfaults posted earlier as those are far more common and problematic. Bazaar isn't critical but thought it might spark some thought if I posted a backtrace for it.

showeq42
01-20-2013, 08:52 PM
Interesting... I'd be happy if I can get to the bottom of the lastkill segfaults posted earlier as those are far more common and problematic. Bazaar isn't critical but thought it might spark some thought if I posted a backtrace for it.

commenting out line 800 of player.cpp will keep it from crashing until a proper fix is figured out.

updated playerSelfPosStruct, only thing that was in the wrong place was "animation", which is the player's velocity (signed, walking backwards makes it negative).
I can't find anywhere in the code animation is actually used, or why it's called animation. Maybe it used to be something else.

padding2 was always 0x17, rest were 0, during my testing



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 pitch:12; // pitch (up/down heading)
unsigned heading:12; // Directional heading
unsigned padding1:8; // ***Placeholder
/*0010*/ float y; // y coord (2nd loc value)
/*0014*/ float deltaZ; // Change in z
/*0018*/ float z; // z coord (3rd loc value)
/*0022*/ signed deltaHeading:10; // change in heading
unsigned padding2:10; // ***Placeholder
unsigned padding3:12; // ***Placeholder
/*0026*/ float x; // x coord (1st loc value)
/*0030*/ float deltaX; // Change in y
/*0034*/ float deltaY; // Change in x
/*0038*/ signed animation:10; // velocity
unsigned padding4:10; // ***Placeholder
unsigned padding5:12; // ***Placeholder
/*0042*/
};

showeq42
01-21-2013, 03:44 AM
I got everything in the right spot in playerSpawnPosStruct, and also found where pitch is and labeled it. For players this is the direction they are looking up/down.



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

rogues
01-21-2013, 10:17 AM
Thanks, it's looking pretty good. I'm not sure if the changes from the last couple bugs fixed something I had wrong but now I get crashes in the baz too. Not a bit deal to me, just thought I'd mention it.

Even without the updates I didn't crash last night during a raid.

Reliant
01-21-2013, 06:25 PM
I believe I understand 'Animation'. Remember, the server does not send an update for every *single* position update for every character on the screen. It provides basically a point and a velocity vector, and the client-side code computes a new positions for every frame based on this. This is what causes the so-called 'rubber-band' effect. The server is delayed, and the client machine continues to project motion along the previous vector, and then discovers, when it finally gets an update, that the actual position is different than the projected position, and instantly corrects it. Animation is, then, used to 'fill in' the character / mob motion between server updates.

rogues
01-21-2013, 07:36 PM
... and I crashed tonight. Line 800 in player.cpp was commented out.

Reliant
01-21-2013, 08:40 PM
Yea, we really need to figure out the segfaults. I cant run for more than ten minutes without dieing -- makes ShowEQ useless cause you have to zone to refresh the display.

rogues
01-21-2013, 08:54 PM
Time to put more money in the ieatacid machine :)

showeq42
01-22-2013, 01:51 AM
I get the same crash when I kill a mob



#0 0x000000000042e3c0 in QShared::deref (this=0xffffff0044495254)
at /usr/lib64/qt-3.3/include/qshared.h:53
53 bool deref() { return !--count; }

#1 0x00007ffff7ab98fa in QString::deref (this=0xc08580)
at tools/qstring.cpp:1552
1552 if ( d && d->deref() ) {

#2 0x00007ffff7ab99ab in QString::operator= (this=0xc08580, s=...)
at tools/qstring.cpp:1597
1597 deref();

#3 0x00000000004c3795 in Player::setLastKill (this=0xc072f0, name=...,
level=1) at player.cpp:800
800 m_lastSpawnKilledName = name;

#4 0x0000000000437c85 in SpawnShell::killSpawn (this=0xa8d2c0,
data=0xc02437 "[]") at spawnshell.cpp:1485
1485 m_player->setLastKill(spawn->name(), spawn->level());

Reliant
01-22-2013, 04:42 PM
Okay, now I'm pissed. Where is the showeq error log located?

BlueAdept
01-22-2013, 06:05 PM
I know there was a crash whith high level toons that did not happen on lower toons. Could there be a crashe due to the level of NPC?

4 0x0000000000437c85 in SpawnShell::killSpawn (this=0xa8d2c0,
data=0xc02437 "[]") at spawnshell.cpp:1485
1485 m_player->setLastKill(spawn->name(), spawn->level());

That is why I was thinking it might be problem with the level.

showeq42
01-22-2013, 07:05 PM
I think I found the problem:

line 24 of player.h:
const int maxSpawnLevel = 100;

I bumped it up to 127 and it stopped crashing. Also buggyness with spawn con colors was fixed.

showeq42
01-22-2013, 07:37 PM
This was corrupting data and causing weird crashes when player level was > 93 and maxSpawnLevel was 100:




player.h:
QColor m_conTable[maxSpawnLevel];

player.cpp:
for (; spawnLevel < level() + 8; spawnLevel++)
{
m_conTable[spawnLevel] = QColor(redColor,

ShortBuss
01-22-2013, 09:11 PM
Applied the max level patch but still getting seg faults zoning into specific zones. So far it's only 2: Field of Scale & DragonScale Hills. These are guaranteed seg faults on every zone in. I see the map open but then seg fault before the spawns start showing.

Razzle
01-22-2013, 09:58 PM
Applied the max level patch but still getting seg faults zoning into specific zones. So far it's only 2: Field of Scale & DragonScale Hills. These are guaranteed seg faults on every zone in. I see the map open but then seg fault before the spawns start showing.
This could be server specific. I have seen similar behavior when a spawn gets far off the map and causes an overflow in a coordinate. What server is this happening on?

ShortBuss
01-22-2013, 10:43 PM
Bristlebane - The Tribunal

showeq42
01-22-2013, 11:08 PM
i see level is uint8_t in some places, so in the event there is ever some high level mob somewhere:

const int maxSpawnLevel = 255;

in player.h



and a couple more opcodes i found:
opcode id="7aba" name="OP_CommonMessage"
opcode id="7ec6" name="OP_BeginCast"

showeq42
01-23-2013, 02:03 AM
Applied the max level patch but still getting seg faults zoning into specific zones. So far it's only 2: Field of Scale & DragonScale Hills. These are guaranteed seg faults on every zone in. I see the map open but then seg fault before the spawns start showing.

Crashed for me in fos, in 2 places,
spawnshell.cpp, lines 708 and 714:
strcpy(spawn->title, name.latin1());
and
strcpy(spawn->suffix, name.latin1());

ShortBuss
01-23-2013, 08:58 AM
Not familiar enough yet with debugging the packets, but maybe there was an increase in max length for Title and Suffix. Current limit from everquest.h is 32:
struct spawnStruct
{
.....
/*0000*/ char title[32];
/*0000*/ char suffix[32];

**Update
I doubled these to both be 64 and that seems to have fixed the crash when zoning into Field of Scale.

fransick
01-23-2013, 11:02 AM
I managed to do a little opcode work over the weekend. The diff below is against the last SVN update.

Still have some non-critical ones to find but this is most of the ones that are mapped in everquest.h


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

<!-- Critical opcodes used directly by ShowEQ -->
- <opcode id="46bb" name="OP_PlayerProfile" updated="12/12/12">
+ <opcode id="5772" name="OP_PlayerProfile" updated="01/16/13">
<comment>CharProfileCode</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="1665" name="OP_ZoneEntry" updated="12/12/12">
+ <opcode id="60a8" name="OP_ZoneEntry" updated="01/16/13">
<comment>ZoneEntryCode</comment>
<payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="3be2" name="OP_TimeOfDay" updated="12/12/12">
+ <opcode id="5824" name="OP_TimeOfDay" updated="01/16/13">
<comment>TimeOfDayCode</comment>
<payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7fff" name="OP_NewZone" updated="12/12/12">
+ <opcode id="18cd" name="OP_NewZone" updated="01/16/13">
<comment>NewZoneCode</comment>
<payload dir="server" typename="newZoneStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7b6c" name="OP_SpawnDoor" updated="12/12/12">
+ <opcode id="31ed" name="OP_SpawnDoor" updated="01/16/13">
<comment>DoorSpawnsCode</comment>
<payload dir="server" typename="doorStruct" sizechecktype="modulus"/>
</opcode>
- <opcode id="4286" name="OP_GroundSpawn" updated="12/12/12">
+ <opcode id="56b2" name="OP_GroundSpawn" updated="01/16/13">
<comment>MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="none"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="7922" name="OP_SendZonePoints" updated="12/12/12">
+ <opcode id="0d72" name="OP_SendZonePoints" updated="01/16/13">
<comment>Coords in a zone that will port you to another zone</comment>
<payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
</opcode>
- <opcode id="25C5" name="OP_AAExpUpdate" updated="12/12/12">
+ <opcode id="4212" name="OP_AAExpUpdate" updated="01/16/13">
<comment>Receiving AA experience. Also when percent to AA changes.</comment>
<payload dir="server" typename="altExpUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="47E3" name="OP_ExpUpdate" updated="12/12/12">
+ <opcode id="4ecc" name="OP_ExpUpdate" updated="01/16/13">
<comment>ExpUpdateCode</comment>
<payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0561" name="OP_GuildMOTD" updated="12/12/12">
+ <opcode id="5531" name="OP_GuildMOTD" updated="01/16/13">
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>
- <opcode id="455d" name="OP_ClientUpdate" updated="12/12/12">
- <comment>Position updates - looks to be 455d and 42 bytes as of 12/12/12</comment>
+ <opcode id="0be5" name="OP_ClientUpdate" updated="01/16/13">
+ <comment>Position updates</comment>
<payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/>
<payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5BD9" name="OP_NpcMoveUpdate" updated="12/12/12">
+ <opcode id="4788" name="OP_NpcMoveUpdate" updated="01/16/13">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="6b5a" name="OP_MobUpdate" updated="12/12/12">
+ <opcode id="142c" name="OP_MobUpdate" updated="01/16/13">
<comment>MobUpdateCode</comment>
<payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/>
</opcode>
- <opcode id="3c8e" name="OP_DeleteSpawn" updated="12/12/12">
+ <opcode id="4234" name="OP_DeleteSpawn" updated="01/16/13">
<comment>DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3B06" name="OP_RemoveSpawn" updated="12/12/12">
+ <opcode id="781f" name="OP_RemoveSpawn" updated="01/16/13">
<comment>Remove spawn from zone</comment>
<payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>
- <opcode id="3a65" name="OP_Death" updated="12/12/12">
+ <opcode id="2c22" name="OP_Death" updated="01/16/13">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1ad3" name="OP_WearChange" updated="12/12/12">
+ <opcode id="32fb" name="OP_WearChange" updated="01/16/13">
<comment>SpawnUpdateCode</comment>
<payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7360" name="OP_SpawnAppearance" updated="12/12/12">
+ <opcode id="201a" name="OP_SpawnAppearance" updated="01/16/13">
<comment>SpawnAppearanceCode</comment>
<payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1949" name="OP_Stamina" updated="12/12/12">
+ <opcode id="4932" name="OP_Stamina" updated="01/16/13">
<comment>Server updating on hunger/thirst</comment>
<payload dir="server" typename="staminaStruct" sizechecktype="match"/>
</opcode>
- <opcode id="07b8" name="OP_HPUpdate" updated="12/12/12">
+ <opcode id="65e7" name="OP_HPUpdate" updated="01/16/13">
<comment>NpcHpUpdateCode Update HP % of a PC or NPC</comment>
<payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0048" name="OP_GuildMemberUpdate" updated="12/12/12">
+ <opcode id="24da" name="OP_GuildMemberUpdate" updated="01/16/13">
<comment>Info regarding guild members</comment>
<payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/>
</opcode>
- <opcode id="7992" name="OP_ClickObject" updated="12/12/12">
+ <opcode id="607d" name="OP_ClickObject" updated="01/16/13">
<comment>Items dropped on the ground</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0ea7" name="OP_Action" updated="12/12/12">
+ <opcode id="31b6" name="OP_Action" updated="01/16/13">
<comment>Spells cast etc</comment>
<payload dir="both" typename="actionStruct" sizechecktype="match"/>
<payload dir="both" typename="actionAltStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5428" name="OP_Action2" updated="12/12/12">
+ <opcode id="4598" name="OP_Action2" updated="01/16/13">
<comment>Combat actions i.e. bash, kick etc</comment>
<payload dir="both" typename="action2Struct" sizechecktype="match"/>
</opcode>
- <opcode id="4d8d" name="OP_Consider" updated="12/12/12">
+ <opcode id="1184" name="OP_Consider" updated="01/16/13">
<comment>ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0e25" name="OP_TargetMouse" updated="12/12/12">
+ <opcode id="1740" name="OP_TargetMouse" updated="01/16/13">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5040" name="OP_SpawnRename" updated="12/12/12">
+ <opcode id="72c5" name="OP_SpawnRename" updated="01/16/13">
<comment>Spawns getting renamed after initial NewSpawn</comment>
<payload dir="server" typename="spawnRenameStruct" sizechecktype="match"/>
</opcode>
- <opcode id="6C43" name="OP_Illusion" updated="12/12/12">
+ <opcode id="02e6" name="OP_Illusion" updated="01/16/13">
<comment>Spawn being illusioned (changing forms)</comment>
<payload dir="both" typename="spawnIllusionStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0747" name="OP_Shroud" updated="12/12/12">
+ <opcode id="3223" name="OP_Shroud" updated="01/16/13">
<comment>Server putting players into shroud form</comment>
<payload dir="server" typename="spawnShroudSelf" sizechecktype="none"/>
</opcode>
- <opcode id="1EB4" name="OP_ZoneChange" updated="12/12/12">
+ <opcode id="1eb4" name="OP_ZoneChange" updated="12/12/12">
<comment>old ZoneChangeCode</comment>
<payload dir="both" typename="zoneChangeStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1602" name="OP_GroupInvite" updated="12/12/12">
+ <opcode id="3877" name="OP_GroupInvite" updated="01/16/13">
<payload dir="both" typename="groupInviteStruct" sizechecktype="none"/>
<comment>You invite someone while ungrouped or get invited by someone ungrouped </comment>
</opcode>
- <opcode id="6E80" name="OP_GroupInvite2" updated="12/12/12">
+ <opcode id="4b77" name="OP_GroupInvite2" updated="01/16/13">
<payload dir="client" typename="groupInviteStruct" sizechecktype="none"/>
<comment>You're inviting someone and you are grouped or get invited by a group</comment>
</opcode>
- <opcode id="2B26" name="OP_GroupCancelInvite" updated="12/12/12">
+ <opcode id="1afc" name="OP_GroupCancelInvite" updated="01/16/13">
<payload dir="both" typename="groupDeclineStruct" sizechecktype="match"/>
<comment>Declining to join a group</comment>
</opcode>
- <opcode id="0BA4" name="OP_GroupFollow" updated="12/12/12">
+ <opcode id="35cc" name="OP_GroupFollow" updated="01/16/13">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>You join a group or player joins group</comment>
</opcode>
- <opcode id="5FAE" name="OP_GroupFollow2" updated="12/12/12">
+ <opcode id="5fae" name="OP_GroupFollow2" updated="12/12/12">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>Player joins your group</comment>
</opcode>
- <opcode id="5A07" name="OP_GroupUpdate" updated="12/12/12">
- <comment>Group member names - Variable length</comment>
+ <opcode id="7056" name="OP_GroupUpdate" updated="01/16/13">
+ <comment>Group updates</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="623D" name="OP_GroupDisband" updated="12/12/12">
+ <opcode id="559d" name="OP_GroupDisband" updated="01/16/13">
<comment>You disband from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
- <opcode id="74FA" name="OP_GroupDisband2" updated="12/12/12">
+ <opcode id="7862" name="OP_GroupDisband2" updated="01/16/13">
<comment>Other disbands from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
- <opcode id="46FC" name="OP_GroupLeader" updated="12/12/12">
+ <opcode id="07d8" name="OP_GroupLeader" updated="01/16/13">
<comment>Group leader change</comment>
<payload dir="server" typename="groupLeaderChangeStruct" sizechecktype="match"/>
</opcode>
- <opcode id="08ED" name="OP_Buff" updated="12/12/12">
+ <opcode id="08ed" name="OP_Buff" updated="12/12/12">
<comment>old BuffDropCode</comment>
<payload dir="both" typename="buffStruct" sizechecktype="match"/>
</opcode>
- <opcode id="41cb" name="OP_BuffFadeMsg" updated="12/12/12">
+ <opcode id="193a" name="OP_BuffFadeMsg" updated="01/16/13">
<comment>SpellFadeCode</comment>
<payload dir="both" typename="spellFadedStruct" sizechecktype="none"/>
</opcode>
- <opcode id="17FF" name="OP_BeginCast" updated="12/12/12">
+ <opcode id="7ec6" name="OP_BeginCast" updated="01/16/13">
<comment>BeginCastCode</comment>
<payload dir="both" typename="beginCastStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1cb5" name="OP_CastSpell" updated="12/12/12">
+ <opcode id="6bd3" name="OP_CastSpell" updated="01/16/13">
<comment>StartCastCode</comment>
<payload dir="both" typename="startCastStruct" sizechecktype="match"/>
</opcode>
- <opcode id="4736" name="OP_SwapSpell" updated="12/12/12">
+ <opcode id="30c2" name="OP_SwapSpell" updated="01/16/13">
<comment>TradeSpellBookSlotsCode</comment>
<payload dir="both" typename="tradeSpellBookSlotsStruct" sizechecktype="match"/>
</opcode>
- <opcode id="2FAC" name="OP_MemorizeSpell" updated="12/12/12">
+ <opcode id="72a0" name="OP_MemorizeSpell" updated="01/16/13">
<comment>MemSpellCode</comment>
<payload dir="both" typename="memSpellStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5794" name="OP_InspectAnswer" updated="12/12/12">
+ <opcode id="3d94" name="OP_InspectAnswer" updated="01/16/13">
<comment>InspectDataCode</comment>
<payload dir="both" typename="inspectDataStruct" sizechecktype="match"/>
</opcode>
- <opcode id="37FD" name="OP_Emote" updated="12/12/12">
+ <opcode id="50d6" name="OP_Emote" updated="01/16/13">
<comment>EmoteTextCode</comment>
<payload dir="both" typename="emoteTextStruct" sizechecktype="none"/>
</opcode>
- <opcode id="02A5" name="OP_SimpleMessage" updated="12/12/12">
+ <opcode id="4926" name="OP_SimpleMessage" updated="01/16/13">
<comment>SimpleMessageCode</comment>
<payload dir="server" typename="simpleMessageStruct" sizechecktype="match"/>
</opcode>
- <opcode id="6AFE" name="OP_FormattedMessage" updated="12/12/12">
+ <opcode id="1bc4" name="OP_FormattedMessage" updated="01/16/13">
<comment>FormattedMessageCode i.e. pet dismissed etc</comment>
<payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="33BC" name="OP_CommonMessage" updated="12/12/12">
+ <opcode id="7aba" name="OP_CommonMessage" updated="01/16/13">
<comment>ChannelMessageCode i.e. /tell /ooc /shout etc</comment>
<payload dir="both" typename="channelMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="362C" name="OP_SpecialMesg" updated="12/12/12">
+ <opcode id="7d26" name="OP_SpecialMesg" updated="01/16/13">
<comment>Communicate textual info to client including hail responses etc</comment>
<payload dir="server" typename="specialMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="59DB" name="OP_RandomReq" updated="12/12/12">
+ <opcode id="5d57" name="OP_RandomReq" updated="01/16/13">
<comment>RandomReqCode</comment>
<payload dir="client" typename="randomReqStruct" sizechecktype="match"/>
</opcode>
- <opcode id="6525" name="OP_RandomReply" updated="12/12/12">
+ <opcode id="0b4b" name="OP_RandomReply" updated="01/16/13">
<comment>RandomCode</comment>
<payload dir="server" typename="randomStruct" sizechecktype="match"/>
</opcode>
- <opcode id="183D" name="OP_ConsentResponse" updated="12/12/12">
+ <opcode id="183d" name="OP_ConsentResponse" updated="12/12/12">
<comment>Server replying with consent information after /consent</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="344A" name="OP_DenyResponse" updated="12/12/12">
+ <opcode id="344a" name="OP_DenyResponse" updated="12/12/12">
<comment>Server replying with deny information after /deny</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1E3B" name="OP_ManaChange" updated="12/12/12">
+ <opcode id="7d4d" name="OP_ManaChange" updated="01/16/13">
<comment>Mana change. Bards send this up with no size. Casters receive this for mana updates.</comment>
<payload dir="server" typename="manaDecrementStruct" sizechecktype="match"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
@@ -242,15 +242,15 @@
<comment>MoneyOnCorpseCode</comment>
<payload dir="server" typename="moneyOnCorpseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="52C6" name="OP_SkillUpdate" updated="12/12/12">
+ <opcode id="52c6" name="OP_SkillUpdate" updated="12/12/12">
<comment>Skill up code</comment>
<payload dir="server" typename="skillIncStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7CE0" name="OP_LevelUpdate" updated="12/12/12">
+ <opcode id="7ce0" name="OP_LevelUpdate" updated="12/12/12">
<comment>LevelUpUpdateCode - causing crashes as of 12/08/12 Investigating</comment>
<payload dir="server" typename="levelUpUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5437" name="OP_CorpseLocResponse" updated="12/12/12">
+ <opcode id="0000" name="OP_CorpseLocResponse" updated="12/12/12">
<comment>old CorpseLocCode:</comment>
<payload dir="server" typename="corpseLocStruct" sizechecktype="match"/>
</opcode>
@@ -258,7 +258,7 @@
<comment></comment>
<payload dir="server" typename="none" sizechecktype="match"/>
</opcode>
- <opcode id="0e01" name="OP_DzSwitchInfo" updated="12/12/12">
+ <opcode id="331d" name="OP_DzSwitchInfo" updated="01/16/13">
<comment>Expedition compass etc</comment>
<payload dir="server" typename="dzSwitchInfo" sizechecktype="none"/>
</opcode>
@@ -268,7 +268,7 @@
</opcode>

<!-- Not necessary for SEQ to run but here to name packets in logs. -->
- <opcode id="7a19" name="OP_MovementHistory" updated="12/12/12">
+ <opcode id="62d2" name="OP_MovementHistory" updated="01/16/13">
<comment>Movement history for speed/movement hack detection</comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
@@ -297,7 +297,7 @@
<payload dir="server" typename="itemInfoStruct" sizechecktype="none"/>
<payload dir="client" typename="itemInfoReqStruct" sizechecktype="none"/>
</opcode>
- <opcode id="28a9" name="OP_EnvDamage" updated="11/28/12">
+ <opcode id="0518" name="OP_EnvDamage" updated="01/16/13">
<comment>Environmental Damage</comment>
<payload dir="client" typename="environmentDamageStruct" sizechecktype="match"/>
</opcode>
@@ -305,23 +305,23 @@
<comment>old cRunToggleCode</comment>
<payload dir="client" typename="cRunToggleStruct" sizechecktype="match"/>
</opcode>
- <opcode id="71f5" name="OP_UIUpdate" updated="12/12/12">
+ <opcode id="1cc2" name="OP_UIUpdate" updated="01/16/13">
<comment>Seems to be sent to handle a variety of UI updates - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="1aae" name="OP_GroupMemberList" updated="08/17/12">
+ <opcode id="2aca" name="OP_GroupMemberList" updated="01/16/13">
<comment>List of group members - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="4053" name="OP_GuildMemberList" updated="12/12/12">
+ <opcode id="183b" name="OP_GuildMemberList" updated="01/16/13">
<comment>List of guild members - Variable length</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="6675" name="OP_ManaUpdate" updated="12/12/12">
+ <opcode id="089f" name="OP_ManaUpdate" updated="01/16/13">
<comment>Mana Update opcode - 10 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="71fb" name="OP_EndUpdate" updated="12/12/12">
+ <opcode id="3a7c" name="OP_EndUpdate" updated="01/16/13">
<comment>Endurance Update opcode - 10 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -341,7 +341,7 @@
<comment>Fellowship campfire information - 1076 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="3c4b" name="OP_SelectCampfire" updated="11/28/12">
+ <opcode id="7802" name="OP_SelectCampfire" updated="01/16/13">
<comment>Fellowship campfire Choices - Guessing variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -349,19 +349,19 @@
<comment>Contents of claims window. /claim then refresh to capture packet - Guessing variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="3bcc" name="OP_VoiceChat" updated="12/12/12">
+ <opcode id="2640" name="OP_VoiceChat" updated="01/16/13">
<comment>Voice chat server info - Variable length (Data sent when joining group,raid etc)</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="6e6c" name="OP_PollQuestions" updated="12/12/12">
+ <opcode id="6e09" name="OP_PollQuestions" updated="01/16/13">
<comment>SOE in-game player poll questions - Variable length</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="17ee" name="OP_PollResponses" updated="12/12/12">
+ <opcode id="7ad7" name="OP_PollResponses" updated="01/16/13">
<comment>Poll response choices - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="7251" name="OP_ShroudProgression" updated="12/12/12">
+ <opcode id="25a2" name="OP_ShroudProgression" updated="01/16/13">
<comment>Unlocked shrouds - 244 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -369,15 +369,15 @@
<comment>Shroud templates to choose from on shroud NPC - 18983 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="40fd" name="OP_Fellowship" updated="12/12/12">
+ <opcode id="7ae9" name="OP_Fellowship" updated="01/16/13">
<comment>Fellowship information - 2564 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="7851" name="OP_ExpandedGuildInfo" updated="12/12/12">
+ <opcode id="11b1" name="OP_ExpandedGuildInfo" updated="01/16/13">
<comment>Guild ranks and other misc guild data - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="1cbf" name="OP_GuildBank" updated="12/12/12">
+ <opcode id="34d3" name="OP_GuildBank" updated="01/16/13">
<comment>Guild bank contents - Guessing variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -401,23 +401,23 @@
<comment>Tradeskill combine using old tradeskill window - 24 Bytes</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="786e" name="OP_ItemPlayerPacket" updated="12/12/12">
+ <opcode id="44db" name="OP_ItemPlayerPacket" updated="01/16/13">
<comment>Inventory/bank items coming over during zone - Variable length</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="2294" name="OP_TaskDescription" updated="12/12/12">
+ <opcode id="5c2a" name="OP_TaskDescription" updated="01/16/13">
<comment>Task descriptions coming down for task window - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="7181" name="OP_TaskActivity" updated="12/12/12">
+ <opcode id="902b" name="OP_TaskActivity" updated="01/16/13">
<comment>Task activity descriptions coming down for task window - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="9495" name="OP_CompletedTasks" updated="12/12/12">
+ <opcode id="2a6f" name="OP_CompletedTasks" updated="01/16/13">
<comment>Task history for task window - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="471a" name="OP_CustomTitles" updated="12/12/12">
+ <opcode id="26eb" name="OP_CustomTitles" updated="01/16/13">
<comment>List of available titles - 1520 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -533,7 +533,7 @@
<comment>Client side raid invite requests 140 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="5dcf" name="OP_RaidJoin" updated="11/28/12">
+ <opcode id="3ab1" name="OP_RaidJoin" updated="01/16/13">
<comment>Server side raid information - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -553,7 +553,7 @@
<comment>LFG/LFP server response - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="5a7c" name="OP_MercenaryList" updated="12/12/12">
+ <opcode id="27a5" name="OP_MercenaryList" updated="01/16/13">
<comment>Listing of hired mercenaries - 429 bytes
<payload dir="server" typename="unknown" sizechecktype="none"/></comment>
</opcode>
@@ -573,11 +573,11 @@
<comment>Client clicks off buff - 8 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="6786" name="OP_HouseAddress" updated="12/12/12">
+ <opcode id="3bf6" name="OP_HouseAddress" updated="01/16/13">
<comment>House and guildhall address information - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="7cda" name="OP_HouseContents" updated="11/28/12">
+ <opcode id="222f" name="OP_HouseContents" updated="01/16/13">
<comment>Server sending house information and contents - variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -593,11 +593,11 @@
<comment>Server sending pending rewards - variable length</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="63ae" name="OP_FTPNags" updated="12/12/12">
+ <opcode id="1874" name="OP_FTPNags" updated="01/16/13">
<comment>Free to play nags and other data - 1852 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="34c3" name="OP_Find" updated="12/12/12">
+ <opcode id="5de1" name="OP_Find" updated="01/16/13">
<comment>Find window data - 112 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -612,23 +612,20 @@

<!-- Below are used to help make sense of the logs when searching for opcodes
Using these marks unknown opcodes in logs for easier reading -->
- <opcode id="218d" name="OP_Unknown1" updated="12/12/12">
+ <opcode id="05c3" name="OP_Unknown1" updated="01/16/13">
<comment>3 byte opcode that spam logs seemingly only when you have someone targeted. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="48b5" name="OP_Unknown2" updated="12/12/12">
+ <opcode id="7d71" name="OP_Unknown2" updated="01/16/13">
<comment>3 byte opcode that spam logs seemingly only when you have someone targeted. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="7cb5" name="OP_Unknown3" updated="12/12/12">
+ <opcode id="68a5" name="OP_Unknown3" updated="01/16/13">
<comment>3 byte opcode that spam logs seemingly only when you have someone targeted. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>

<!-- Below are unverified -->
-
-
-
<opcode id="0000" name="OP_RequestZoneChange" updated="10/20/07">
<comment>Send by server when a click causes zone. Also, origin</comment>
<payload dir="server" typename="requestZoneChangeStruct" sizechecktype="match"/>

ShortBuss
01-23-2013, 11:31 AM
I must be missing something here on OP_TargetMouse = 1740. I tried this value, but when I enabled select on target and target something with mouse, nothing happens. If I change to 0A2D then target with mouse, the spawnlist changes highlight to that target.

fransick
01-23-2013, 12:07 PM
I must be missing something here on OP_TargetMouse = 1740. I tried this value, but when I enabled select on target and target something with mouse, nothing happens. If I change to 0A2D then target with mouse, the spawnlist changes highlight to that target.

You are correct... 0a2d is the right opcode. I only updated the ones that still had a 12/12/12 date on them. Didn't go back and check the ones that had already been updated were correct. Good catch.

Reliant
01-23-2013, 09:42 PM
I fixed the spawnshell.cpp problem on Monday, at least fixed the symptom, not what's causing it. The segfault is due to the fact that name is sometimes longer than 32 characters, and the 'title' is a char[32] array. I replaced both 708 and 714 with something like:

if (spawn && name)
strncpy(spawn->title, name.latin1(), 31);

(31 to leave space for the trailing null character)

that stopped the faults in 708 and 714, but it still was crashing for me, and also raises the question about how bith spawn->title should be.

ShortBuss
01-23-2013, 11:09 PM
The crashing is gone for me, but I still have a random problem. Every now and then ShowEQ just stops updating. If I zone then it starts working again. I don't have an example of it now, but last time I looked at console I saw something about disconnecting. It seemed like it may have thought I camped or started zoning when I hadn't. Tonight it only happened once in about 4 hours of play but a couple nights ago it was happening a lot more frequently. Not sure how to approach debugging this one since it's not faulting, just thinks EQ disconnected. I will try to get a zonelog next time it occurs.

showeq42
01-23-2013, 11:43 PM
Longer title/suffix strings is not the cause of the crash, increasing the field length is just masking the problem by stopping seq from crashing. Something else is wrong.

showeq42
01-24-2013, 01:01 AM
Looks like it's being caused by a player with charProperties = 0

showeq42
01-24-2013, 01:29 AM
here's the fix, spawnshell.cpp, line 613:
edit: fixed the fix



if(i == 0)
{
spawn->bodytype = 0;
}
else
{
do
{
nTmp = netStream.readUInt32NC();

if(i == spawn->charProperties)
{
spawn->bodytype = nTmp;
#ifdef FILLSPAWNSTRUCT_DIAG
seqDebug("bodytype = %d", spawn->bodytype);
#endif
}
}
while(--i);
}

ShortBuss
01-24-2013, 06:48 AM
I reverted the increased lengths in everquest.h and added your fix to spawnshell.cpp. Zoned into Field of Scale and no crash. Tonight I will be able to verify if this has any impact on the disconnect.

fransick
01-24-2013, 07:48 AM
here's the fix, spawnshell.cpp, line 613:
edit: fixed the fix



if(i == 0)
{
spawn->bodytype = 0;
}
else
{
do
{
nTmp = netStream.readUInt32NC();

if(i == spawn->charProperties)
{
spawn->bodytype = nTmp;
#ifdef FILLSPAWNSTRUCT_DIAG
seqDebug("bodytype = %d", spawn->bodytype);
#endif
}
}
while(--i);
}


Does this get added at line 613 or replace the code that is there?

i = spawn->charProperties;
do
{
nTmp = netStream.readUInt32NC();

if(i == spawn->charProperties)
{
spawn->bodytype = nTmp;
#ifdef FILLSPAWNSTRUCT_DIAG
seqDebug("bodytype = %d", spawn->bodytype);
#endif
}
}
while(--i);


line 613 is "do" and replacing there didn't work for me. It's early so maybe I am just being dense...

showeq42
01-24-2013, 07:55 AM
diff against unpatched showeq-5.13.10.10



*** spawnshell.cpp.0 2013-01-13 15:59:33.000000000 -0800
--- spawnshell.cpp 2013-01-24 03:29:29.007054064 -0800
***************
*** 611,627 ****

i = spawn->charProperties;
! do
{
! nTmp = netStream.readUInt32NC();

! if(i == spawn->charProperties)
! {
! spawn->bodytype = nTmp;
#ifdef FILLSPAWNSTRUCT_DIAG
! seqDebug("bodytype = %d", spawn->bodytype);
#endif
! }
}
- while(--i);

spawn->curHp = netStream.readUInt8();
--- 611,634 ----

i = spawn->charProperties;
! if(i == 0)
{
! spawn->bodytype = 0;
! }
! else
! {
! do
! {
! nTmp = netStream.readUInt32NC();

! if(i == spawn->charProperties)
! {
! spawn->bodytype = nTmp;
#ifdef FILLSPAWNSTRUCT_DIAG
! seqDebug("bodytype = %d", spawn->bodytype);
#endif
! }
! }
! while(--i);
}

spawn->curHp = netStream.readUInt8();
***************
*** 883,887 ****
if (dir != DIR_Client)
{
! int16_t y = (pupdate->y + pupdate->y) >> 3;
int16_t x = pupdate->x >> 3;
int16_t z = pupdate->z >> 3;
--- 890,894 ----
if (dir != DIR_Client)
{
! int16_t y = pupdate->y >> 3;
int16_t x = pupdate->x >> 3;
int16_t z = pupdate->z >> 3;

ShortBuss
01-24-2013, 08:26 AM
Here is the patch up to now based on everything I have collected from this thread.



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

<!-- Critical opcodes used directly by ShowEQ -->
- <opcode id="46bb" name="OP_PlayerProfile" updated="12/12/12">
+ <opcode id="5772" name="OP_PlayerProfile" updated="01/16/13">
<comment>CharProfileCode</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="1665" name="OP_ZoneEntry" updated="12/12/12">
+ <opcode id="60a8" name="OP_ZoneEntry" updated="01/16/13">
<comment>ZoneEntryCode</comment>
<payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="3be2" name="OP_TimeOfDay" updated="12/12/12">
+ <opcode id="5824" name="OP_TimeOfDay" updated="01/16/13">
<comment>TimeOfDayCode</comment>
<payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7fff" name="OP_NewZone" updated="12/12/12">
+ <opcode id="18cd" name="OP_NewZone" updated="01/16/13">
<comment>NewZoneCode</comment>
<payload dir="server" typename="newZoneStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7b6c" name="OP_SpawnDoor" updated="12/12/12">
+ <opcode id="31ed" name="OP_SpawnDoor" updated="01/16/13">
<comment>DoorSpawnsCode</comment>
<payload dir="server" typename="doorStruct" sizechecktype="modulus"/>
</opcode>
- <opcode id="4286" name="OP_GroundSpawn" updated="12/12/12">
+ <opcode id="56b2" name="OP_GroundSpawn" updated="01/16/13">
<comment>MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="none"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="7922" name="OP_SendZonePoints" updated="12/12/12">
+ <opcode id="0d72" name="OP_SendZonePoints" updated="01/16/13">
<comment>Coords in a zone that will port you to another zone</comment>
<payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
</opcode>
- <opcode id="25C5" name="OP_AAExpUpdate" updated="12/12/12">
+ <opcode id="4212" name="OP_AAExpUpdate" updated="01/16/13">
<comment>Receiving AA experience. Also when percent to AA changes.</comment>
<payload dir="server" typename="altExpUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="47E3" name="OP_ExpUpdate" updated="12/12/12">
+ <opcode id="4ecc" name="OP_ExpUpdate" updated="01/16/13">
<comment>ExpUpdateCode</comment>
<payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0561" name="OP_GuildMOTD" updated="12/12/12">
+ <opcode id="5531" name="OP_GuildMOTD" updated="01/16/13">
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>
- <opcode id="455d" name="OP_ClientUpdate" updated="12/12/12">
- <comment>Position updates - looks to be 455d and 42 bytes as of 12/12/12</comment>
+ <opcode id="0be5" name="OP_ClientUpdate" updated="01/16/13">
+ <comment>Position updates</comment>
<payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/>
<payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5BD9" name="OP_NpcMoveUpdate" updated="12/12/12">
+ <opcode id="4788" name="OP_NpcMoveUpdate" updated="01/16/13">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="6b5a" name="OP_MobUpdate" updated="12/12/12">
+ <opcode id="142c" name="OP_MobUpdate" updated="01/16/13">
<comment>MobUpdateCode</comment>
<payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/>
</opcode>
- <opcode id="3c8e" name="OP_DeleteSpawn" updated="12/12/12">
+ <opcode id="4234" name="OP_DeleteSpawn" updated="01/16/13">
<comment>DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3B06" name="OP_RemoveSpawn" updated="12/12/12">
+ <opcode id="781f" name="OP_RemoveSpawn" updated="01/16/13">
<comment>Remove spawn from zone</comment>
<payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>
- <opcode id="3a65" name="OP_Death" updated="12/12/12">
+ <opcode id="2c22" name="OP_Death" updated="01/16/13">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1ad3" name="OP_WearChange" updated="12/12/12">
+ <opcode id="32fb" name="OP_WearChange" updated="01/16/13">
<comment>SpawnUpdateCode</comment>
<payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7360" name="OP_SpawnAppearance" updated="12/12/12">
+ <opcode id="201a" name="OP_SpawnAppearance" updated="01/16/13">
<comment>SpawnAppearanceCode</comment>
<payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1949" name="OP_Stamina" updated="12/12/12">
+ <opcode id="4932" name="OP_Stamina" updated="01/16/13">
<comment>Server updating on hunger/thirst</comment>
<payload dir="server" typename="staminaStruct" sizechecktype="match"/>
</opcode>
- <opcode id="07b8" name="OP_HPUpdate" updated="12/12/12">
+ <opcode id="65e7" name="OP_HPUpdate" updated="01/16/13">
<comment>NpcHpUpdateCode Update HP % of a PC or NPC</comment>
<payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0048" name="OP_GuildMemberUpdate" updated="12/12/12">
+ <opcode id="24da" name="OP_GuildMemberUpdate" updated="01/16/13">
<comment>Info regarding guild members</comment>
<payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/>
</opcode>
- <opcode id="7992" name="OP_ClickObject" updated="12/12/12">
+ <opcode id="607d" name="OP_ClickObject" updated="01/16/13">
<comment>Items dropped on the ground</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0ea7" name="OP_Action" updated="12/12/12">
+ <opcode id="31b6" name="OP_Action" updated="01/16/13">
<comment>Spells cast etc</comment>
<payload dir="both" typename="actionStruct" sizechecktype="match"/>
<payload dir="both" typename="actionAltStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5428" name="OP_Action2" updated="12/12/12">
+ <opcode id="4598" name="OP_Action2" updated="01/16/13">
<comment>Combat actions i.e. bash, kick etc</comment>
<payload dir="both" typename="action2Struct" sizechecktype="match"/>
</opcode>
- <opcode id="4d8d" name="OP_Consider" updated="12/12/12">
+ <opcode id="1184" name="OP_Consider" updated="01/16/13">
<comment>ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0e25" name="OP_TargetMouse" updated="12/12/12">
+ <opcode id="0a2d" name="OP_TargetMouse" updated="01/16/13">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5040" name="OP_SpawnRename" updated="12/12/12">
+ <opcode id="72c5" name="OP_SpawnRename" updated="01/16/13">
<comment>Spawns getting renamed after initial NewSpawn</comment>
<payload dir="server" typename="spawnRenameStruct" sizechecktype="match"/>
</opcode>
- <opcode id="6C43" name="OP_Illusion" updated="12/12/12">
+ <opcode id="02e6" name="OP_Illusion" updated="01/16/13">
<comment>Spawn being illusioned (changing forms)</comment>
<payload dir="both" typename="spawnIllusionStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0747" name="OP_Shroud" updated="12/12/12">
+ <opcode id="3223" name="OP_Shroud" updated="01/16/13">
<comment>Server putting players into shroud form</comment>
<payload dir="server" typename="spawnShroudSelf" sizechecktype="none"/>
</opcode>
- <opcode id="1EB4" name="OP_ZoneChange" updated="12/12/12">
+ <opcode id="1eb4" name="OP_ZoneChange" updated="12/12/12">
<comment>old ZoneChangeCode</comment>
<payload dir="both" typename="zoneChangeStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1602" name="OP_GroupInvite" updated="12/12/12">
+ <opcode id="3877" name="OP_GroupInvite" updated="01/16/13">
<payload dir="both" typename="groupInviteStruct" sizechecktype="none"/>
<comment>You invite someone while ungrouped or get invited by someone ungrouped </comment>
</opcode>
- <opcode id="6E80" name="OP_GroupInvite2" updated="12/12/12">
+ <opcode id="4b77" name="OP_GroupInvite2" updated="01/16/13">
<payload dir="client" typename="groupInviteStruct" sizechecktype="none"/>
<comment>You're inviting someone and you are grouped or get invited by a group</comment>
</opcode>
- <opcode id="2B26" name="OP_GroupCancelInvite" updated="12/12/12">
+ <opcode id="1afc" name="OP_GroupCancelInvite" updated="01/16/13">
<payload dir="both" typename="groupDeclineStruct" sizechecktype="match"/>
<comment>Declining to join a group</comment>
</opcode>
- <opcode id="0BA4" name="OP_GroupFollow" updated="12/12/12">
+ <opcode id="35cc" name="OP_GroupFollow" updated="01/16/13">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>You join a group or player joins group</comment>
</opcode>
- <opcode id="5FAE" name="OP_GroupFollow2" updated="12/12/12">
+ <opcode id="5fae" name="OP_GroupFollow2" updated="12/12/12">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>Player joins your group</comment>
</opcode>
- <opcode id="5A07" name="OP_GroupUpdate" updated="12/12/12">
- <comment>Group member names - Variable length</comment>
+ <opcode id="7056" name="OP_GroupUpdate" updated="01/16/13">
+ <comment>Group updates</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="623D" name="OP_GroupDisband" updated="12/12/12">
+ <opcode id="559d" name="OP_GroupDisband" updated="01/16/13">
<comment>You disband from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
- <opcode id="74FA" name="OP_GroupDisband2" updated="12/12/12">
+ <opcode id="7862" name="OP_GroupDisband2" updated="01/16/13">
<comment>Other disbands from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
- <opcode id="46FC" name="OP_GroupLeader" updated="12/12/12">
+ <opcode id="07d8" name="OP_GroupLeader" updated="01/16/13">
<comment>Group leader change</comment>
<payload dir="server" typename="groupLeaderChangeStruct" sizechecktype="match"/>
</opcode>
- <opcode id="08ED" name="OP_Buff" updated="12/12/12">
+ <opcode id="08ed" name="OP_Buff" updated="12/12/12">
<comment>old BuffDropCode</comment>
<payload dir="both" typename="buffStruct" sizechecktype="match"/>
</opcode>
- <opcode id="41cb" name="OP_BuffFadeMsg" updated="12/12/12">
+ <opcode id="193a" name="OP_BuffFadeMsg" updated="01/16/13">
<comment>SpellFadeCode</comment>
<payload dir="both" typename="spellFadedStruct" sizechecktype="none"/>
</opcode>
- <opcode id="17FF" name="OP_BeginCast" updated="12/12/12">
+ <opcode id="7ec6" name="OP_BeginCast" updated="01/16/13">
<comment>BeginCastCode</comment>
<payload dir="both" typename="beginCastStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1cb5" name="OP_CastSpell" updated="12/12/12">
+ <opcode id="6bd3" name="OP_CastSpell" updated="01/16/13">
<comment>StartCastCode</comment>
<payload dir="both" typename="startCastStruct" sizechecktype="match"/>
</opcode>
- <opcode id="4736" name="OP_SwapSpell" updated="12/12/12">
+ <opcode id="30c2" name="OP_SwapSpell" updated="01/16/13">
<comment>TradeSpellBookSlotsCode</comment>
<payload dir="both" typename="tradeSpellBookSlotsStruct" sizechecktype="match"/>
</opcode>
- <opcode id="2FAC" name="OP_MemorizeSpell" updated="12/12/12">
+ <opcode id="72a0" name="OP_MemorizeSpell" updated="01/16/13">
<comment>MemSpellCode</comment>
<payload dir="both" typename="memSpellStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5794" name="OP_InspectAnswer" updated="12/12/12">
+ <opcode id="3d94" name="OP_InspectAnswer" updated="01/16/13">
<comment>InspectDataCode</comment>
<payload dir="both" typename="inspectDataStruct" sizechecktype="match"/>
</opcode>
- <opcode id="37FD" name="OP_Emote" updated="12/12/12">
+ <opcode id="50d6" name="OP_Emote" updated="01/16/13">
<comment>EmoteTextCode</comment>
<payload dir="both" typename="emoteTextStruct" sizechecktype="none"/>
</opcode>
- <opcode id="02A5" name="OP_SimpleMessage" updated="12/12/12">
+ <opcode id="4926" name="OP_SimpleMessage" updated="01/16/13">
<comment>SimpleMessageCode</comment>
<payload dir="server" typename="simpleMessageStruct" sizechecktype="match"/>
</opcode>
- <opcode id="6AFE" name="OP_FormattedMessage" updated="12/12/12">
+ <opcode id="1bc4" name="OP_FormattedMessage" updated="01/16/13">
<comment>FormattedMessageCode i.e. pet dismissed etc</comment>
<payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="33BC" name="OP_CommonMessage" updated="12/12/12">
+ <opcode id="7aba" name="OP_CommonMessage" updated="01/16/13">
<comment>ChannelMessageCode i.e. /tell /ooc /shout etc</comment>
<payload dir="both" typename="channelMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="362C" name="OP_SpecialMesg" updated="12/12/12">
+ <opcode id="7d26" name="OP_SpecialMesg" updated="01/16/13">
<comment>Communicate textual info to client including hail responses etc</comment>
<payload dir="server" typename="specialMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="59DB" name="OP_RandomReq" updated="12/12/12">
+ <opcode id="5d57" name="OP_RandomReq" updated="01/16/13">
<comment>RandomReqCode</comment>
<payload dir="client" typename="randomReqStruct" sizechecktype="match"/>
</opcode>
- <opcode id="6525" name="OP_RandomReply" updated="12/12/12">
+ <opcode id="0b4b" name="OP_RandomReply" updated="01/16/13">
<comment>RandomCode</comment>
<payload dir="server" typename="randomStruct" sizechecktype="match"/>
</opcode>
- <opcode id="183D" name="OP_ConsentResponse" updated="12/12/12">
+ <opcode id="183d" name="OP_ConsentResponse" updated="12/12/12">
<comment>Server replying with consent information after /consent</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="344A" name="OP_DenyResponse" updated="12/12/12">
+ <opcode id="344a" name="OP_DenyResponse" updated="12/12/12">
<comment>Server replying with deny information after /deny</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1E3B" name="OP_ManaChange" updated="12/12/12">
+ <opcode id="7d4d" name="OP_ManaChange" updated="01/16/13">
<comment>Mana change. Bards send this up with no size. Casters receive this for mana updates.</comment>
<payload dir="server" typename="manaDecrementStruct" sizechecktype="match"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
@@ -242,15 +242,15 @@
<comment>MoneyOnCorpseCode</comment>
<payload dir="server" typename="moneyOnCorpseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="52C6" name="OP_SkillUpdate" updated="12/12/12">
+ <opcode id="52c6" name="OP_SkillUpdate" updated="12/12/12">
<comment>Skill up code</comment>
<payload dir="server" typename="skillIncStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7CE0" name="OP_LevelUpdate" updated="12/12/12">
+ <opcode id="7ce0" name="OP_LevelUpdate" updated="12/12/12">
<comment>LevelUpUpdateCode - causing crashes as of 12/08/12 Investigating</comment>
<payload dir="server" typename="levelUpUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5437" name="OP_CorpseLocResponse" updated="12/12/12">
+ <opcode id="0000" name="OP_CorpseLocResponse" updated="12/12/12">
<comment>old CorpseLocCode:</comment>
<payload dir="server" typename="corpseLocStruct" sizechecktype="match"/>
</opcode>
@@ -258,7 +258,7 @@
<comment></comment>
<payload dir="server" typename="none" sizechecktype="match"/>
</opcode>
- <opcode id="0e01" name="OP_DzSwitchInfo" updated="12/12/12">
+ <opcode id="331d" name="OP_DzSwitchInfo" updated="01/16/13">
<comment>Expedition compass etc</comment>
<payload dir="server" typename="dzSwitchInfo" sizechecktype="none"/>
</opcode>
@@ -268,7 +268,7 @@
</opcode>

<!-- Not necessary for SEQ to run but here to name packets in logs. -->
- <opcode id="7a19" name="OP_MovementHistory" updated="12/12/12">
+ <opcode id="62d2" name="OP_MovementHistory" updated="01/16/13">
<comment>Movement history for speed/movement hack detection</comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
@@ -297,7 +297,7 @@
<payload dir="server" typename="itemInfoStruct" sizechecktype="none"/>
<payload dir="client" typename="itemInfoReqStruct" sizechecktype="none"/>
</opcode>
- <opcode id="28a9" name="OP_EnvDamage" updated="11/28/12">
+ <opcode id="0518" name="OP_EnvDamage" updated="01/16/13">
<comment>Environmental Damage</comment>
<payload dir="client" typename="environmentDamageStruct" sizechecktype="match"/>
</opcode>
@@ -305,23 +305,23 @@
<comment>old cRunToggleCode</comment>
<payload dir="client" typename="cRunToggleStruct" sizechecktype="match"/>
</opcode>
- <opcode id="71f5" name="OP_UIUpdate" updated="12/12/12">
+ <opcode id="1cc2" name="OP_UIUpdate" updated="01/16/13">
<comment>Seems to be sent to handle a variety of UI updates - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="1aae" name="OP_GroupMemberList" updated="08/17/12">
+ <opcode id="2aca" name="OP_GroupMemberList" updated="01/16/13">
<comment>List of group members - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="4053" name="OP_GuildMemberList" updated="12/12/12">
+ <opcode id="183b" name="OP_GuildMemberList" updated="01/16/13">
<comment>List of guild members - Variable length</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="6675" name="OP_ManaUpdate" updated="12/12/12">
+ <opcode id="089f" name="OP_ManaUpdate" updated="01/16/13">
<comment>Mana Update opcode - 10 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="71fb" name="OP_EndUpdate" updated="12/12/12">
+ <opcode id="3a7c" name="OP_EndUpdate" updated="01/16/13">
<comment>Endurance Update opcode - 10 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -341,7 +341,7 @@
<comment>Fellowship campfire information - 1076 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="3c4b" name="OP_SelectCampfire" updated="11/28/12">
+ <opcode id="7802" name="OP_SelectCampfire" updated="01/16/13">
<comment>Fellowship campfire Choices - Guessing variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -349,19 +349,19 @@
<comment>Contents of claims window. /claim then refresh to capture packet - Guessing variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="3bcc" name="OP_VoiceChat" updated="12/12/12">
+ <opcode id="2640" name="OP_VoiceChat" updated="01/16/13">
<comment>Voice chat server info - Variable length (Data sent when joining group,raid etc)</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="6e6c" name="OP_PollQuestions" updated="12/12/12">
+ <opcode id="6e09" name="OP_PollQuestions" updated="01/16/13">
<comment>SOE in-game player poll questions - Variable length</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="17ee" name="OP_PollResponses" updated="12/12/12">
+ <opcode id="7ad7" name="OP_PollResponses" updated="01/16/13">
<comment>Poll response choices - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="7251" name="OP_ShroudProgression" updated="12/12/12">
+ <opcode id="25a2" name="OP_ShroudProgression" updated="01/16/13">
<comment>Unlocked shrouds - 244 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -369,15 +369,15 @@
<comment>Shroud templates to choose from on shroud NPC - 18983 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="40fd" name="OP_Fellowship" updated="12/12/12">
+ <opcode id="7ae9" name="OP_Fellowship" updated="01/16/13">
<comment>Fellowship information - 2564 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="7851" name="OP_ExpandedGuildInfo" updated="12/12/12">
+ <opcode id="11b1" name="OP_ExpandedGuildInfo" updated="01/16/13">
<comment>Guild ranks and other misc guild data - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="1cbf" name="OP_GuildBank" updated="12/12/12">
+ <opcode id="34d3" name="OP_GuildBank" updated="01/16/13">
<comment>Guild bank contents - Guessing variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -401,23 +401,23 @@
<comment>Tradeskill combine using old tradeskill window - 24 Bytes</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="786e" name="OP_ItemPlayerPacket" updated="12/12/12">
+ <opcode id="44db" name="OP_ItemPlayerPacket" updated="01/16/13">
<comment>Inventory/bank items coming over during zone - Variable length</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="2294" name="OP_TaskDescription" updated="12/12/12">
+ <opcode id="5c2a" name="OP_TaskDescription" updated="01/16/13">
<comment>Task descriptions coming down for task window - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="7181" name="OP_TaskActivity" updated="12/12/12">
+ <opcode id="902b" name="OP_TaskActivity" updated="01/16/13">
<comment>Task activity descriptions coming down for task window - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="9495" name="OP_CompletedTasks" updated="12/12/12">
+ <opcode id="2a6f" name="OP_CompletedTasks" updated="01/16/13">
<comment>Task history for task window - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="471a" name="OP_CustomTitles" updated="12/12/12">
+ <opcode id="26eb" name="OP_CustomTitles" updated="01/16/13">
<comment>List of available titles - 1520 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -533,7 +533,7 @@
<comment>Client side raid invite requests 140 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="5dcf" name="OP_RaidJoin" updated="11/28/12">
+ <opcode id="3ab1" name="OP_RaidJoin" updated="01/16/13">
<comment>Server side raid information - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -553,7 +553,7 @@
<comment>LFG/LFP server response - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="5a7c" name="OP_MercenaryList" updated="12/12/12">
+ <opcode id="27a5" name="OP_MercenaryList" updated="01/16/13">
<comment>Listing of hired mercenaries - 429 bytes
<payload dir="server" typename="unknown" sizechecktype="none"/></comment>
</opcode>
@@ -573,11 +573,11 @@
<comment>Client clicks off buff - 8 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="6786" name="OP_HouseAddress" updated="12/12/12">
+ <opcode id="3bf6" name="OP_HouseAddress" updated="01/16/13">
<comment>House and guildhall address information - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="7cda" name="OP_HouseContents" updated="11/28/12">
+ <opcode id="222f" name="OP_HouseContents" updated="01/16/13">
<comment>Server sending house information and contents - variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -593,11 +593,11 @@
<comment>Server sending pending rewards - variable length</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="63ae" name="OP_FTPNags" updated="12/12/12">
+ <opcode id="1874" name="OP_FTPNags" updated="01/16/13">
<comment>Free to play nags and other data - 1852 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="34c3" name="OP_Find" updated="12/12/12">
+ <opcode id="5de1" name="OP_Find" updated="01/16/13">
<comment>Find window data - 112 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
@@ -612,15 +612,15 @@

<!-- Below are used to help make sense of the logs when searching for opcodes
Using these marks unknown opcodes in logs for easier reading -->
- <opcode id="218d" name="OP_Unknown1" updated="12/12/12">
+ <opcode id="05c3" name="OP_Unknown1" updated="01/16/13">
<comment>3 byte opcode that spam logs seemingly only when you have someone targeted. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="48b5" name="OP_Unknown2" updated="12/12/12">
+ <opcode id="7d71" name="OP_Unknown2" updated="01/16/13">
<comment>3 byte opcode that spam logs seemingly only when you have someone targeted. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="7cb5" name="OP_Unknown3" updated="12/12/12">
+ <opcode id="68a5" name="OP_Unknown3" updated="01/16/13">
<comment>3 byte opcode that spam logs seemingly only when you have someone targeted. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
Index: src/spawnshell.cpp
================================================== =================
--- src/spawnshell.cpp (revision 783)
+++ src/spawnshell.cpp (working copy)
@@ -610,19 +610,26 @@
#endif

i = spawn->charProperties;
- do
+ if(i == 0)
+ {
+ spawn->bodytype = 0;
+ }
+ else
{
- nTmp = netStream.readUInt32NC();
+ do
+ {
+ nTmp = netStream.readUInt32NC();

- if(i == spawn->charProperties)
- {
- spawn->bodytype = nTmp;
+ if(i == spawn->charProperties)
+ {
+ spawn->bodytype = nTmp;
#ifdef FILLSPAWNSTRUCT_DIAG
- seqDebug("bodytype = %d", spawn->bodytype);
+ seqDebug("bodytype = %d", spawn->bodytype);
#endif
- }
+ }
+ }
+ while(--i);
}
- while(--i);

spawn->curHp = netStream.readUInt8();
#ifdef FILLSPAWNSTRUCT_DIAG
@@ -882,7 +889,7 @@

if (dir != DIR_Client)
{
- int16_t y = (pupdate->y + pupdate->y) >> 3;
+ int16_t y = pupdate->y >> 3;
int16_t x = pupdate->x >> 3;
int16_t z = pupdate->z >> 3;

Index: src/player.h
================================================== =================
--- src/player.h (revision 783)
+++ src/player.h (working copy)
@@ -21,7 +21,7 @@

//----------------------------------------------------------------------
// constants
-const int maxSpawnLevel = 100;
+const int maxSpawnLevel = 255;

enum ColorLevel
{
Index: src/spawn.cpp
================================================== =================
--- src/spawn.cpp (revision 783)
+++ src/spawn.cpp (working copy)
@@ -418,7 +418,7 @@
{
setName(s->name);
setLastName(s->lastName);
- setPos(s->x >> 3, (s->y + s->y) >> 3, s->z >> 3);
+ setPos(s->x >> 3, s->y >> 3, s->z >> 3);
setPetOwnerID(s->petOwnerId);
setLight(s->light);
setGender(s->gender);
Index: src/everquest.h
================================================== =================
--- src/everquest.h (revision 783)
+++ src/everquest.h (working copy)
@@ -1076,23 +1076,24 @@
{
struct
{
- signed padding0004:13;
- signed y:19; // y coord
-
- signed deltaX:13; // change in x
- signed deltaHeading:10;// change in heading
- signed padding0008:9;
-
- signed deltaY:13; // change in y
- signed z:19; // z coord
-
- signed x:19; // x coord
- signed animation:10; // animation
- signed padding0016:3;
-
- unsigned heading:12; // heading
- signed deltaZ:13; // change in z
- signed padding0020:7;
+ signed padding0004:12;
+ signed deltaZ:13; // change in z
+ signed padding00042:7;
+
+ signed deltaHeading:10;// change in heading
+ signed x:19; // x coord
+ signed padding0008:3;
+
+ unsigned heading:12; // heading
+ signed deltaY:13; // change in y
+ signed padding0012:7;
+
+ signed deltaX:13; // change in x
+ signed y:19; // y coord
+
+ signed animation:10; // animation
+ signed z:19; // z coord
+ signed padding0020:3;
};
int32_t posData[5];
};
@@ -2339,19 +2340,20 @@
{
/*0000*/ uint16_t spawnId;
/*0002*/ uint16_t spawnId2;
-/*0004*/ signed padding0004:13;
+/*0004*/ unsigned pitch:12;
+ signed deltaZ:13; // change in z
+ unsigned padding01:7;
+/*0008*/ signed deltaHeading:10;// change in heading
+ signed x:19; // x coord
+ unsigned padding02:3;
+/*0012*/ unsigned heading:12; // heading
+ signed deltaY:13; // change in y
+ unsigned padding03:7;
+/*0016*/ signed deltaX:13; // change in x
signed y:19; // y coord
-/*0008*/ signed deltaX:13; // change in x
- signed deltaHeading:10;// change in heading
- signed padding0008:9;
-/*0012*/ signed deltaY:13; // change in y
+/*0020*/ signed animation:10; // velocity
signed z:19; // z coord
-/*0016*/ signed x:19; // x coord
- signed animation:10; // animation
- signed padding0016:3;
-/*0020*/ unsigned heading:12; // heading
- signed deltaZ:13; // change in z
- signed padding0020:7;
+ unsigned padding04:3;
/*0024*/
};

@@ -2363,21 +2365,24 @@

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

ShortBuss
01-24-2013, 07:29 PM
Still have the random disconnects. I thought maybe I'd see a problem in zone.log, but nothing looks obvious. I was standing in a zone, not moving and it disconnected. A couple days ago I was grouped with another ShowEQ user in the same zone killing the same stuff. We both had the disconnects, but at completely different times.

Here is the end of the console output thought I'm not sure how old some of the lines are:


Warning: EQPacket: Unhandled net opcode c800, stream client-zone, size 106
Warning: EQPacket: Unhandled net opcode 0000, stream zone-client, size 2
Debug: PCAP Filter Set: udp[0:2] > 1024 and udp[2:2] > 1024 and ether proto 0x0800 and host 192.168.0.115
Info: EQPacket: SessionDisconnect detected, awaiting next zone session, pcap filter: EQ Client 192.168.0.115


Seems like it think I zoned or camped, but I didn't. zoning or camping will fix it though.

Is there any log I could enable to maybe catch what is causing this.

I wonder if it's related to the unhandled opcode 0000. I didn't see it in the zone log anywhere, maybe it doesn't get logged. But there's many opcodes set to 0000 in zoneopcodes.xml. One of them is OP_RequestZoneChange. It may be that if the packet size is correct that it's randomly picking up this unhandled 0000 as one of these undefined zone changes. I modified all the 0000 opcodes to be a random value instead that seems to not be used, FFDF. Will see if that has any impact.

purple
01-25-2013, 09:28 AM
Turn on some of the protocol #defines so you can see session operations. That sure looks like something is triggering a session handler for a session disconnect. It could be random network traffic. It could be something else.

You guys shouldn't use 0000 as a garbage opcode. Opcodes that end in 00 I think trigger 3 byte opcodes.

ShortBuss
01-25-2013, 09:43 AM
I think I finally found the cause. I enabled global log and that is helping me see more details. Looks like ShowEQ is picking up my mumble traffic and firing on it sometimes. Digging through the code I found that 0x500 opcode is session disconnect. And right at the time of my last packets in zone log I see a 0x500 opcode picked up going mumble server -> my client.

I hid the IP, but here's what it looks like. This log is about 100ms after my last zone log entry.



Jan 24 2013 22:21:40:311 [<My Mumble Server IP>:7506->client:58368] [Size: 110]
[OPCode: 0x500]
000 | 00 05 61 99 9b 7a da 72 6e e5 42 90 e7 90 88 87 | ..a..z.rn.B.....
016 | 86 d8 95 87 0e 81 e6 a0 59 48 b7 19 95 10 ef c4 | ........YH......
032 | 66 79 c2 23 c6 e2 62 b9 33 97 c0 6a c2 49 cf b4 | fy.#..b.3..j.I..
048 | 1e 02 05 6d 33 6c a8 c8 c6 5d 05 0c e3 39 19 fc | ...m3l...]...9..
064 | f4 e1 5f 21 e1 c7 fb 61 a7 3a 84 01 a0 86 f0 c7 | .._!...a.:......
080 | 57 3c b3 ea fe 9b f5 29 83 fa 90 18 23 cc 52 e0 | W<.....)....#.R.
096 | af bf 36 07 39 df 6f a3 1c ee 42 46 d3 af | ..6.9.o...BF..


So now I just need to figure out a way to block my mumble server IP address from being ready by ShowEQ.

ShortBuss
01-25-2013, 12:29 PM
Seems there's no easy way outside of modifying the code to filter out specific IPs or ports. If there is then I missed it. I modified the pcap filters in packetcapture.cpp to ignore the port, 7506, and a couple of the IPs related to the mumble server. This should at least prevent the false disconnect (0x0500). Unfortunately it means I will be applying a custom patch on top of any built, but that's not a big issue. I see other bad traffic being looked at, like itunes for example, but I'll leave it alone as long as it doesn't cause any problems.

purple
01-25-2013, 12:59 PM
This is what session tracking is for. Turn it on. It should automatically lock the pcap filter tighter for you.

ShortBuss
01-25-2013, 01:03 PM
Thanks, I will give session tracking another try. I thought I had tried before and still had the disconnect, but I may be confusing it with the seg faults that are fixed.

fransick
01-25-2013, 02:32 PM
Seems there's no easy way outside of modifying the code to filter out specific IPs or ports. If there is then I missed it. I modified the pcap filters in packetcapture.cpp to ignore the port, 7506, and a couple of the IPs related to the mumble server. This should at least prevent the false disconnect (0x0500). Unfortunately it means I will be applying a custom patch on top of any built, but that's not a big issue. I see other bad traffic being looked at, like itunes for example, but I'll leave it alone as long as it doesn't cause any problems.

Pardon me if I am suggesting something that's either been tried, painfully obvious or way off base, but have you tried session tracking within SEQ? I recall that for some it was an effective way to ignore unecessary network traffic.

ShortBuss
01-25-2013, 03:03 PM
I turned Session Tracking on again, but for some reason even with it on I'm still seeing mumble traffic being processed by ShowEQ. It could be something to do with my setup. I'm running EQ on Windows (of course). I'm running ShowEQ on Linux from within a VirtualBox VM on the same system as EQ. The VirtualBox network is setup as Bridged and Promiscuous mode set to all.

purple
01-25-2013, 05:16 PM
Are you seeing the proper pcap filter locking with session tracking? Lines like



Debug: PCAP Filter Set: udp[0:2] > 1024 and udp[2:2] > 1024 and ether proto 0x0800 and host 192.168.0.115


... are what you are looking for.

Session tracking should lock down to a specific port when it sees a SessionRequest on the zone channel and then unlock when it gets SessionDisconnect. We used to get crashes from something called MS Teredo and from teamspeak but session tracking fixed it I thought.

purple
01-25-2013, 05:18 PM
Oh and if you're sitting at character select or just not in a zone, session tracking won't have locked down yet. You'll be unlocked watching world server traffic and waiting for zone server traffic to lock on to.

ShortBuss
01-26-2013, 08:51 AM
It seems to work as described now that I've backed out my changes to the pcap filters. I enabled session tracking then zoned in. Starting mumble I didn't see any problems. I then zoned a few times. The first two zones were fine, but on the third the map never changed. It saw the disconnect and waited:



Debug: PCAP Filter Set: udp[0:2] > 1024 and udp[2:2] > 1024 and ether proto 0x0800 and host 192.168.0.115
Info: EQPacket: SessionDisconnect detected, awaiting next zone session, pcap filter: EQ Client 192.168.0.115


But no more console information after that. Looking at global.log I can see it started getting false op codes from my mumble server again. My guess is that mumble got an EQ like packet in first before the EQ server did, after the Disconnect. Maybe it locked down onto the mumble ports.

The timing in global.log seems to line up to this theory. The first op-code from the mumble server shown is just after the last entry shown in the zone.log.

ShortBuss
01-27-2013, 04:11 PM
I happened upon a segfault zoning into bazaar. Details look very similar to the previous post that mentioned it. Before I could do any real debugging on it the character causing the problem logged and the segfault stopped happening. . Here are the details I managed to get before he left:



Program received signal SIGSEGV, Segmentation fault.0xb7618fc0 in strcpy () from /lib/tls/i686/cmov/libc.so.6

#0 0xb7618fc0 in strcpy () from /lib/tls/i686/cmov/libc.so.6
#1 0x08072cac in SpawnShell::fillSpawnStruct (this=0xb080cae8, spawn=0x0, data=0x850c7e4 "XXXXXXXX", len=446, checkLen=true) at /usr/include/bits/string3.h:107
#2 0x08076cd8 in SpawnShell::zoneEntry (this=0xb080cae8, data=0x850c7e4 "Deadrepp", len=446) at spawnshell.cpp:747
#3 0x08077228 in SpawnShell::qt_invoke (this=0xb080cae8, _id=8, _o=0xbfffc370) at spawnshell.moc:395
#4 0xb7b4c19a in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/libqt-mt.so.3
#5 0x08091f7f in EQPacketDispatch::signal (this=0x83c0dc8, t0=0x850c7e4 "Deadrepp", t1=446, t2=2 '\002') at packetinfo.moc:99
#6 0x0808dacd in EQPacketStream::dispatchPacket (this=0x83cdd18, data=0x850c7e4 "Deadrepp", len=446, opCode=24744, opcodeEntry=0x8324510) at packetstream.cpp:435
#7 0x0808fc03 in EQPacketStream::processPacket (this=0x83cdd18, packet=..., isSubpacket=true) at packetstream.cpp:754
#8 0x0808ff13 in EQPacketStream::processPacket (this=0x83cdd18, packet=..., isSubpacket=true) at packetstream.cpp:892
#9 0x0808fc70 in EQPacketStream::processPacket (this=0x83cdd18, packet=..., isSubpacket=false) at packetstream.cpp:659
#10 0x080905d8 in EQPacketStream::handlePacket (this=0x83cdd18, packet=...) at packetstream.cpp:572
#11 0x080997be in EQPacket::dispatchPacket (this=0x8395ef0, packet=...) at packet.cpp:659
#12 0x08099915 in EQPacket::dispatchPacket (this=0x8395ef0) at packet.cpp:583
#13 EQPacket::processPackets (this=0x8395ef0) at packet.cpp:400
#14 0x0809c7f8 in EQPacket::qt_invoke (this=0x8395ef0, _id=2, _o=0xbfffe7b8) at packet.moc:577
#15 0xb7b4c19a in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/libqt-mt.so.3
#16 0xb7b4e168 in QObject::activate_signal(int) () from /usr/lib/libqt-mt.so.3
#17 0xb7eacd99 in QTimer::timeout() () from /usr/lib/libqt-mt.so.3
#18 0xb7b7066e in QTimer::event(QEvent*) () from /usr/lib/libqt-mt.so.3
#19 0xb7ae73d7 in QApplication::internalNotify(QObject*, QEvent*) () from /usr/lib/libqt-mt.so.3
#20 0xb7ae834b in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libqt-mt.so.3
#21 0xb7adce42 in QEventLoop::activateTimers() () from /usr/lib/libqt-mt.so.3
#22 0xb7a921b6 in QEventLoop::processEvents(unsigned int) () from /usr/lib/libqt-mt.so.3
#23 0xb7b003b0 in QEventLoop::enterLoop() () from /usr/lib/libqt-mt.so.3
#24 0xb7b00256 in QEventLoop::exec() () from /usr/lib/libqt-mt.so.3
#25 0xb7ae7a2f in QApplication::exec() () from /usr/lib/libqt-mt.so.3
#26 0x0806a33b in main (argc=1, argv=0xbffff444) at main.cpp:737


And here is the related entry from zone.log that caused the segfault:


Jan 27 2013 XX:XX:XX:XXX [Decoded] [Server->Client] [Size: 446]
[OPCode: 0x60a8]
[Name: OP_ZoneEntry][Updated: 01/16/13][Type: uint8_t (1) nc]
000 | XX XX XX XX XX XX XX XX 00 94 61 00 00 47 41 3a | XXXXXXXX..a..GA:
016 | b2 40 00 20 02 00 38 91 00 00 80 bf 00 00 00 00 | .@. ..8.........
032 | 01 01 00 00 00 64 ff ff 09 09 ff ff 00 00 00 00 | .....d..........
048 | 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 c0 40 | ...............@
064 | 03 1f 85 eb 3e 33 33 33 3f 80 00 00 00 00 cb 00 | ....>333?.......
080 | 00 00 54 01 00 00 05 00 00 00 0b 00 64 00 00 XX | ..T.........d..X
096 | XX XX XX XX XX 00 03 00 00 00 01 00 00 00 00 00 | XXXXX...........
112 | 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .@..............
128 | 00 ff ff ff ff ff ff ff ff 00 00 a0 ff 00 00 a0 | ................
144 | ff 00 14 c8 ff 00 00 a0 ff 00 00 a0 ff 00 14 c8 | ................
160 | ff 00 00 a0 ff 00 00 00 00 00 00 00 00 01 00 00 | ................
176 | 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 | ................
192 | 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
208 | 00 0a 00 00 00 01 00 00 00 00 00 00 00 00 00 00 | ................
224 | 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 | ................
240 | 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 | ................
256 | 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 | ................
272 | 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
288 | 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 | ................
304 | 00 00 00 00 00 01 00 00 00 5a 2b 00 00 00 00 00 | .........Z+.....
320 | 00 00 00 00 00 00 00 00 00 00 00 00 00 da 27 00 | ..............'.
336 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
352 | 00 00 00 00 00 42 84 83 00 dd 03 00 3a 00 c0 9c | .....B......:...
368 | 05 42 58 04 20 4c 69 63 68 20 4c 6f 72 64 00 00 | .BX. Lich Lord..
384 | 00 00 00 00 00 00 00 00 30 30 30 30 30 30 30 30 | ........00000000
400 | 30 30 30 30 30 30 30 30 00 ff ff ff ff ff ff ff | 00000000........
416 | ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
432 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ..............


**Update
Seems like the problem is with the decision on spawn->otherData. In this case the value is 0x91. if(spawn->otherData & 1). True in this case, and based on the comments in the source that means it's a chest or untargettable, which it isn't. Following the logic and the data read for the chest/untargetable block consumes the last name data before it should be read. This means that later in the code when the last name is read it's going to read something random.

ShortBuss
01-27-2013, 06:57 PM
Looks like the bit for identifying chest/untargetable is no longer &1. I see this bit set on players (and it can be unset on players). I confirmed &16 is still title, &32 is still suffix, &4 is still aura. I can't figure out any objects that would fall under the previous &1 to test where this bit may have moved to.

*Update
&1 appears to now be buyer flag for bazaar
&2 seems to be Offline flag for bazaar buyers, though I only found 2 to verify with.

Commented out the if block in spawnshell.cpp (if(spawn->otherData & 1)...). Now when I zone into bazaar I can see the buyers on the map, not just sellers.

Razzle
01-27-2013, 07:50 PM
I hate it when they change those bit fields.

Razzle

ShortBuss
01-27-2013, 11:26 PM
It may be that the old &1 was combined with &4. I found a chest in the bazaar that's has the &4 bit set, which should be auras, based on the code comments. I also saw auras that were still flagged with &4.

purple
01-28-2013, 09:09 AM
Session tracking opens and closes. Each time you zone, the zone server renegotiates a new different port. So when you're zoning, after the original zone server sends the session disconnect but before the new zone server sends a session request, the filter is wide open. You can actually see the negotiation of the new server port on the world server, but I never added handling for it, though I was tempted because I had a perfect log file from BA that I could use for testing. It causes problems for people who two box on the same box too. If you point seq at that box and you zone both characters at the same time, sometimes seq will flip from one character to the other. Anyways, I just never got around to it.

Someone needs to spend time actually methodically going through the spawn flags. Or someone needs to get into disassembly of the client and see what it actually does.

ShortBuss
01-28-2013, 11:19 AM
A little more information on the otherData flags after parsing several log files:

&1 = Buyer in the Bazaar (/buyer)
&2 = Offline mode in the bazar (/buyer or /trader)
&4 = Aura's, NPC corpses (not players), Training Dummies, Chests, some unknown things (Name = _29, _30, _28, _31, _07 ...)
&8 = Have not yet seen this one set on anything
&16 = Has Title
&32 = Has Suffix
&64 = Unknown. Have seen both set and unset on same character. No impact on fillSpawnStruct logic either way.
&128 = Unknown. Have seen both set and unset on same character. No impact on fillSpawnStruct logic either way.

Still unable to figure out 8, 64, & 128. Confirmed both 64 and 128 don't impact the fillSpawnStruct logic by looking at the differences in the same character having the flags set and unset in different instances. I can't find anything with 8 set. I've seen several chests now with 4 set so I think it was maybe combined with auras. I've seen both targetable and untagettable things set with 4.

For now it seems the temporary fix is to comment out the section of fillSpawnStruct code using &1. This patch below is for that change and also includes showeq42's fix for bodytype = 0.


Index: src/spawnshell.cpp
================================================== =================
--- src/spawnshell.cpp (revision 783)
+++ src/spawnshell.cpp (working copy)
@@ -568,6 +568,7 @@
// skip unknown3, unknown4
netStream.skipBytes(8);

+ /* &1 now is for /buyer in auction house. Chest/Untargetable may now be combined in &4.
if(spawn->otherData & 1)
{
// it's a chest or untargetable
@@ -596,6 +597,7 @@
// skip the last long
netStream.skipBytes(4);
}
+ */

if(spawn->otherData & 4) // aura stuff
{
@@ -610,19 +612,26 @@
#endif

i = spawn->charProperties;
- do
+ if(i == 0)
+ {
+ spawn->bodytype = 0;
+ }
+ else
{
- nTmp = netStream.readUInt32NC();
+ do
+ {
+ nTmp = netStream.readUInt32NC();

- if(i == spawn->charProperties)
- {
- spawn->bodytype = nTmp;
+ if(i == spawn->charProperties)
+ {
+ spawn->bodytype = nTmp;
#ifdef FILLSPAWNSTRUCT_DIAG
- seqDebug("bodytype = %d", spawn->bodytype);
+ seqDebug("bodytype = %d", spawn->bodytype);
#endif
- }
+ }
+ }
+ while(--i);
}
- while(--i);

spawn->curHp = netStream.readUInt8();
#ifdef FILLSPAWNSTRUCT_DIAG
@@ -882,7 +891,7 @@

if (dir != DIR_Client)
{
- int16_t y = (pupdate->y + pupdate->y) >> 3;
+ int16_t y = pupdate->y >> 3;
int16_t x = pupdate->x >> 3;
int16_t z = pupdate->z >> 3;


I tried this out last night for several hours and did not have any problems.

Razzy
02-10-2013, 11:17 AM
Hi, thank you all for continuing this. Just one question. I'm having problems to get the maps to show up right on the latest expansion. Is there a new mapconvert that I am missing? EDIT: AH I just noticed I needed to change the time to "Beginning" to see the old threads. Will look through those. Sorry.