PDA

View Full Version : 3/15 - CTD Issues



fransick
03-16-2012, 05:52 AM
Latest patch looks to have changed structs again and is causing seqfault. I struggle a bit more with struct changes so hoping someone smarter than me is able to take a look at the playerprofile struct. Once stable, more than happy to go about fixing any changed opcodes.

Pehaps the FTP will bring a few more back to these boards! One can hope right?

Edit: Adding 128 bytes to the end of the playerprofile struct has eliminated the immediate CTD on zoning. Will see about digging into the changes more this weekend.

Razzle
03-16-2012, 12:28 PM
From updating myseq offsets, it looks like they changed the size of the items from 12 to 16. I will start looking at structs in about an hour. I have a little free time today.

Razzle

fransick
03-17-2012, 09:07 AM
By no means complete, but the following patch got maps and skittles and stopped SegFaulting for me. It's a diff against the latest SVN (revision 760) that Razzle just recently uploaded.


diff -rubp /root/seq/showeq/ /showeq-current/
diff -rubp /root/seq/showeq/conf/zoneopcodes.xml showeq-current/conf/zoneopcodes.xml
--- showeq-current/conf/zoneopcodes.xml 2012-03-17 09:54:54.871986279 -0400
+++ showeq/conf/zoneopcodes.xml 2012-03-17 09:16:53.000000000 -0400
@@ -9,11 +9,11 @@
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="45d7" name="OP_MovementHistory" updated="12/17/11">
+ <opcode id="1910" name="OP_MovementHistory" updated="03/16/12">
<comment></comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="0CAE" name="OP_DeleteSpawn" updated="11/16/11">
+ <opcode id="28c7" name="OP_DeleteSpawn" updated="03/16/12">
<comment>old DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>
@@ -26,7 +26,7 @@
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>
- <opcode id="0C54" name="OP_InspectAnswer" updated="11/15/11">
+ <opcode id="0c54" name="OP_InspectAnswer" updated="03/16/12">
<comment>old InspectDataCode</comment>
<payload dir="both" typename="inspectDataStruct" sizechecktype="match"/>
</opcode>
@@ -34,7 +34,7 @@
<comment>Coords in a zone that will port you to another zone</comment>
<payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
</opcode>
- <opcode id="3EDC" name="OP_TargetMouse" updated="11/15/11">
+ <opcode id="3edc" name="OP_TargetMouse" updated="03/16/12">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>
@@ -46,23 +46,23 @@
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>You join a group</comment>
</opcode>
- <opcode id="44C2" name="OP_GroupFollow2" updated="11/15/11">
+ <opcode id="74e9" name="OP_GroupFollow2" updated="03/16/12">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>Player joins your group</comment>
</opcode>
- <opcode id="7139" name="OP_GroupUpdate" updated="11/15/11">
+ <opcode id="367f" name="OP_GroupUpdate" updated="03/16/12">
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
<comment>Variable length packet with group member names</comment>
</opcode>
- <opcode id="74E9" name="OP_GroupDisband" updated="11/15/11">
+ <opcode id="367b" name="OP_GroupDisband" updated="03/16/12">
<comment>You disband from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3C58" name="OP_GroupDisband2" updated="11/15/11">
+ <opcode id="4b82" name="OP_GroupDisband2" updated="03/16/12">
<comment>Other disbands from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
- <opcode id="4B82" name="OP_GroupLeader" updated="11/15/11">
+ <opcode id="5fe3" name="OP_GroupLeader" updated="03/16/12">
<comment>Group leader change</comment>
<payload dir="server" typename="groupLeaderChangeStruct" sizechecktype="match"/>
</opcode>
@@ -78,7 +78,7 @@
<comment>old FormattedMessageCode</comment>
<payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="0E24" name="OP_SpawnDoor" updated="11/15/11">
+ <opcode id="7113" name="OP_SpawnDoor" updated="03/16/12">
<comment>old DoorSpawnsCode</comment>
<payload dir="server" typename="doorStruct" sizechecktype="modulus"/>
</opcode>
@@ -108,7 +108,7 @@
<payload dir="server" typename="groupInviteStruct" sizechecktype="match"/>
<comment>You got invited to a group</comment>
</opcode>
- <opcode id="3288" name="OP_GroupInvite" updated="11/15/11">
+ <opcode id="3288" name="OP_GroupInvite" updated="03/16/12">
<payload dir="both" typename="groupInviteStruct" sizechecktype="none"/>
<comment>You invite or get invited</comment>
</opcode>
@@ -154,7 +154,7 @@
<comment>Server updating on hunger/thirst</comment>
<payload dir="server" typename="staminaStruct" sizechecktype="match"/>
</opcode>
- <opcode id="70C6" name="OP_Consider" updated="11/16/11">
+ <opcode id="70c6" name="OP_Consider" updated="03/16/12">
<comment>old ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>
@@ -170,19 +170,19 @@
<comment></comment>
<payload dir="server" typename="none" sizechecktype="match"/>
</opcode>
- <opcode id="2736" name="OP_GroupInvite2" updated="11/15/11">
+ <opcode id="5251" name="OP_GroupInvite2" updated="03/16/12">
<payload dir="client" typename="groupInviteStruct" sizechecktype="match"/>
<comment>You're inviting someone and you are grouped</comment>
</opcode>
- <opcode id="6C16" name="OP_GroupCancelInvite" updated="11/15/11">
+ <opcode id="2736" name="OP_GroupCancelInvite" updated="03/16/12">
<payload dir="both" typename="groupDeclineStruct" sizechecktype="match"/>
<comment>Declining to join a group</comment>
</opcode>
- <opcode id="4118" name="OP_NewZone" updated="11/16/11">
+ <opcode id="43ac" name="OP_NewZone" updated="03/16/12">
<comment>old NewZoneCode</comment>
<payload dir="server" typename="newZoneStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5C85" name="OP_GroundSpawn" updated="11/15/11">
+ <opcode id="33e5" name="OP_GroundSpawn" updated="03/16/12">
<comment>old MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="none"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
@@ -191,7 +191,7 @@
<comment>old ExpUpdateCode</comment>
<payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="58c5" name="OP_RemoveSpawn" updated="11/16/11">
+ <opcode id="3164" name="OP_RemoveSpawn" updated="03/16/12">
<comment>Remove spawn from zone</comment>
<payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>
@@ -199,16 +199,16 @@
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="33E5" name="OP_ClickObject" updated="11/15/11">
+ <opcode id="5f0d" name="OP_ClickObject" updated="03/16/12">
<comment>old RemDropCode</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7F9E" name="OP_Action" updated="11/15/11">
+ <opcode id="1b85" name="OP_Action" updated="03/16/12">
<comment></comment>
<payload dir="both" typename="actionStruct" sizechecktype="match"/>
<payload dir="both" typename="actionAltStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3EA8" name="OP_Action2" updated="11/15/11">
+ <opcode id="631a" name="OP_Action2" updated="03/16/12">
<comment>old ActionCode</comment>
<payload dir="both" typename="action2Struct" sizechecktype="match"/>
</opcode>
@@ -216,7 +216,7 @@
<comment>Spawn being illusioned (changing forms)</comment>
<payload dir="both" typename="spawnIllusionStruct" sizechecktype="match"/>
</opcode>
- <opcode id="8543" name="OP_BuffFadeMsg" updated="11/15/11">
+ <opcode id="3887" name="OP_BuffFadeMsg" updated="03/16/12">
<comment>old SpellFadeCode</comment>
<payload dir="both" typename="spellFadedStruct" sizechecktype="none"/>
</opcode>
@@ -228,7 +228,7 @@
<comment>old MemSpellCode</comment>
<payload dir="both" typename="memSpellStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3164" name="OP_Emote" updated="11/15/11">
+ <opcode id="0000" name="OP_Emote" updated="11/15/11">
<comment>old EmoteTextCode</comment>
<payload dir="both" typename="emoteTextStruct" sizechecktype="none"/>
</opcode>
@@ -309,13 +309,13 @@
<opcode id="4e99" name="OP_Claims" updated="12/17/11">
<comment>Contents of claims window</comment>
</opcode>
- <opcode id="2864" name="OP_PollQuestions" updated="12/17/11">
+ <opcode id="47b3" name="OP_PollQuestions" updated="03/16/12">
<comment>SOE in-game player poll questions</comment>
</opcode>
- <opcode id="0f6d" name="OP_PollResponses" updated="12/17/11">
+ <opcode id="a1e6" name="OP_PollResponses" updated="03/16/12">
<comment>Poll response choices</comment>
</opcode>
- <opcode id="2071" name="OP_ShroudProgression" updated="12/17/11">
+ <opcode id="064d" name="OP_ShroudProgression" updated="03/16/12">
<comment>Unlocked shrouds</comment>
</opcode>
<opcode id="01e5" name="OP_Fellowship" updated="12/17/11">
@@ -324,7 +324,7 @@
<opcode id="4274" name="OP_ExpandedGuildInfo" updated="12/17/11">
<comment>Variable length guild ranks and other misc guild data</comment>
</opcode>
- <opcode id="6255" name="OP_GuildBank" updated="12/17/11">
+ <opcode id="7b22" name="OP_GuildBank" updated="03/16/12">
<comment>Guild bank contents</comment>
</opcode>
<opcode id="1d40" name="OP_OpenTradeskillContainer" updated="12/17/11">
@@ -360,7 +360,7 @@
<opcode id="71fb" name="OP_TributeUpdate" updated="03/14/07">
<comment>Tribute information</comment>
</opcode>
- <opcode id="4849" name="OP_ItemPlayerPacket" updated="11/15/11">
+ <opcode id="6cfe" name="OP_ItemPlayerPacket" updated="03/16/12">
<comment>Inventory/bank items coming over during zone</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
@@ -440,7 +440,7 @@
<opcode id="61ac" name="OP_LoadSpellSet" updated="02/13/07">
<comment>/mem spellsetname</comment>
</opcode>
- <opcode id="2683" name="OP_InspectRequest" updated="12/17/11">
+ <opcode id="2683" name="OP_InspectRequest" updated="03/16/12">
<comment>old InspectRequestCode</comment>
</opcode>
<opcode id="1B7B" name="OP_GetGuildMOTD" updated="12/17/11">
diff -rubp showeq/src/everquest.h showeq-current/src/everquest.h
--- showeq-current/src/everquest.h 2012-03-17 09:54:57.945934074 -0400
+++ showeq/src/everquest.h 2012-03-16 21:03:27.203892766 -0400
@@ -816,8 +816,8 @@ struct charProfileStruct
/*28502*/ uint8_t guildAutoconsent; // 0=off, 1=on
/*28503*/ uint8_t unknown26759[5]; // ***Placeholder (6/29/2005)
/*28508*/ uint32_t showhelm; // 0=no, 1=yes
-/*28512*/ uint8_t unknown26768[1048]; // ***Placeholder (2/13/2007)
-/*29560*/
+/*28512*/ uint8_t unknown26768[1176]; // ***Placeholder (2/13/2007) changed from 1048 to 1176 3/16/2012
+/*29688*/
};

#if 0
@@ -2198,7 +2198,7 @@ struct leadExpUpdateStruct

/*
** Player Spawn Update
-** Length: 19 Octets
+** Length: 23 Octets
** OpCode: SpawnUpdateCode
*/

@@ -2209,8 +2209,8 @@ struct SpawnUpdateStruct
/*0004*/ int16_t arg1; // first option
/*0006*/ int16_t arg2; // second option
/*0008*/ uint8_t arg3; // third option?
-/*0009*/ uint8_t unknown0009[10];
-/*0019*/
+/*0009*/ uint8_t unknown0009[14];
+/*0023*/
};

/*


Still have a fair number of opcodes to verify. Waiting in the hopes someone will update the PlayerProfile struct before going full on trying to piece together the opcodes. Your mileage may vary...

Fransick

Razzle
03-17-2012, 06:20 PM
I took some packet captures and will start on structs later. I am kind of slow since i don't do this often. But i took some pre-patch data so i should be able to work them out pretty quick. Just getting time to look at them is the trick.

Razzle

Razzle
03-17-2012, 10:22 PM
Quick? Ha! I guess quick was dependent on the structs being all correct prior to the patch. Ok, the critical stuff lined up where it needs to be originally. Can get it realigned with all the important stuff. I see how stuff is off. Much is related to adding the prestige flags to items. So gonna work through it and try to fix some of the places other things are off while I am at it. Taking a guess on some stuff, but working on making it better.

Razzle

fransick
03-18-2012, 07:11 AM
Quick? Ha! I guess quick was dependent on the structs being all correct prior to the patch. Ok, the critical stuff lined up where it needs to be originally. Can get it realigned with all the important stuff. I see how stuff is off. Much is related to adding the prestige flags to items. So gonna work through it and try to fix some of the places other things are off while I am at it. Taking a guess on some stuff, but working on making it better.

Razzle

Wish I were more help here... structs are not my forte. Perhaps with them fixed they'll make more sense and I'll be able to figure out enough to be useful. Good luck!

fransick

Razzle
03-18-2012, 03:22 PM
I got most of player profile struct worked out. Only part left is to determine if length of lastname was increased from 32 to 36 or if there is just a new value after the lastname. I will decompile the exe later tonight and find out for sure.

But i got the rest of the struct to align.

Will post some changes later. The two year old got up from nap early so my time was up.

Razzle

Newby
03-18-2012, 08:11 PM
This is what I've figured out for changes to playerProfileStruct and subsequently to charProfileStruct. Still some opcodes to be found, things aren't dying properly.



*** showeq-5.13.10.4.virgin/src/everquest.h Sun Mar 4 15:07:47 2012
--- showeq-5.13.10.4/src/everquest.h Sun Mar 18 22:09:31 2012
***************
*** 682,737 ****
/*00229*/ uint8_t eyecolor2; // Player right eye color
/*00230*/ uint8_t hairstyle; // Player hair style
/*00231*/ uint8_t beard; // Player beard type
! /*00232*/ uint8_t unknown00232[22];
! /*00254*/ uint32_t item_material[9]; // Item texture/material of worn items
! /*00290*/ uint8_t unknown00290[222];
! /*00512*/ Color_Struct item_tint[9]; // RR GG BB 00
! /*00548*/ AA_Array aa_array[MAX_AA]; // AAs
! /*04148*/ uint32_t points; // Unspent Practice points
! /*04152*/ uint32_t MANA; // Current MANA
! /*04156*/ uint32_t curHp; // Current HP without +HP equipment
! /*04160*/ uint32_t STR; // Strength
! /*04164*/ uint32_t STA; // Stamina
! /*04168*/ uint32_t CHA; // Charisma
! /*04172*/ uint32_t DEX; // Dexterity
! /*04176*/ uint32_t INT; // Intelligence
! /*04180*/ uint32_t AGI; // Agility
! /*04184*/ uint32_t WIS; // Wisdom
! /*04188*/ uint8_t face; // Player face
! /*04189*/ uint8_t unknown04189[175];
! /*04364*/ int32_t sSpellBook[720]; // List of the Spells in spellbook
! /*07244*/ int32_t sMemSpells[MAX_SPELL_SLOTS]; // List of spells memorized
! /*07292*/ uint8_t unknown07292[20];
! /*07312*/ uint32_t platinum; // Platinum Pieces on player
! /*07316*/ uint32_t gold; // Gold Pieces on player
! /*07320*/ uint32_t silver; // Silver Pieces on player
! /*07324*/ uint32_t copper; // Copper Pieces on player
! /*07328*/ uint32_t platinum_cursor; // Platinum Pieces on cursor
! /*07332*/ uint32_t gold_cursor; // Gold Pieces on cursor
! /*07336*/ uint32_t silver_cursor; // Silver Pieces on cursor
! /*07340*/ uint32_t copper_cursor; // Copper Pieces on cursor
! /*07344*/ uint32_t skills[MAX_KNOWN_SKILLS]; // List of skills
! /*07744*/ uint32_t innateSkills[25];
! /*07844*/ uint8_t unknown07844[16];
! /*07860*/ uint32_t toxicity; // Potion Toxicity (15=too toxic, each potion adds 3)
! /*07864*/ uint32_t thirst; // Drink (ticks till next drink)
! /*07868*/ uint32_t hunger; // Food (ticks till next eat)
! /*07872*/ uint8_t unknown07872[20];
! /*07892*/ spellBuff buffs[MAX_BUFFS]; // Buffs currently on the player
! /*11588*/ uint32_t disciplines[MAX_DISCIPLINES]; // Known disciplines
! /*11988*/ uint8_t unknown10932[400];
! /*12188*/ uint32_t recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
! /*12468*/ uint8_t unknown11412[480];
! /*12948*/ uint32_t endurance; // Current endurance
! /*12952*/ uint32_t aa_spent; // Number of spent AA points (including glyphs)
! /*12956*/ uint32_t aa_assigned; // Number of points currently assigned to AAs
! /*12960*/ uint32_t unknown11904[4];
! /*12976*/ uint32_t aa_unspent; // Unspent AA points
! /*12980*/ uint8_t unknown11924[4];
! /*12984*/ BandolierStruct bandoliers[MAX_BANDOLIERS]; // bandolier contents
! /*19384*/ InlineItem potionBelt[MAX_POTIONS_IN_BELT]; // potion belt
! /*19744*/ uint8_t unknown18008[92];
! /*19836*/
};

/*
--- 682,737 ----
/*00229*/ uint8_t eyecolor2; // Player right eye color
/*00230*/ uint8_t hairstyle; // Player hair style
/*00231*/ uint8_t beard; // Player beard type
! /*00232*/ uint8_t unknown00232[110];
! /*00342*/ uint32_t item_material[9]; // Item texture/material of worn items
! /*00378*/ uint8_t unknown00290[222];
! /*00600*/ Color_Struct item_tint[9]; // RR GG BB 00
! /*00636*/ AA_Array aa_array[MAX_AA]; // AAs
! /*04236*/ uint32_t points; // Unspent Practice points
! /*04240*/ uint32_t MANA; // Current MANA
! /*04244*/ uint32_t curHp; // Current HP without +HP equipment
! /*04248*/ uint32_t STR; // Strength
! /*04252*/ uint32_t STA; // Stamina
! /*04256*/ uint32_t CHA; // Charisma
! /*04260*/ uint32_t DEX; // Dexterity
! /*04264*/ uint32_t INT; // Intelligence
! /*04268*/ uint32_t AGI; // Agility
! /*04272*/ uint32_t WIS; // Wisdom
! /*04276*/ uint8_t face; // Player face
! /*04277*/ uint8_t unknown04189[211];
! /*04488*/ int32_t sSpellBook[720]; // List of the Spells in spellbook
! /*07368*/ int32_t sMemSpells[MAX_SPELL_SLOTS]; // List of spells memorized
! /*07416*/ uint8_t unknown07292[20];
! /*07436*/ uint32_t platinum; // Platinum Pieces on player
! /*07440*/ uint32_t gold; // Gold Pieces on player
! /*07444*/ uint32_t silver; // Silver Pieces on player
! /*07448*/ uint32_t copper; // Copper Pieces on player
! /*07452*/ uint32_t platinum_cursor; // Platinum Pieces on cursor
! /*07456*/ uint32_t gold_cursor; // Gold Pieces on cursor
! /*07460*/ uint32_t silver_cursor; // Silver Pieces on cursor
! /*07464*/ uint32_t copper_cursor; // Copper Pieces on cursor
! /*07468*/ uint32_t skills[MAX_KNOWN_SKILLS]; // List of skills
! /*07868*/ uint32_t innateSkills[25];
! /*07968*/ uint8_t unknown07844[16];
! /*07984*/ uint32_t toxicity; // Potion Toxicity (15=too toxic, each potion adds 3)
! /*07988*/ uint32_t thirst; // Drink (ticks till next drink)
! /*07992*/ uint32_t hunger; // Food (ticks till next eat)
! /*07996*/ uint8_t unknown07872[20];
! /*08016*/ spellBuff buffs[MAX_BUFFS]; // Buffs currently on the player
! /*11712*/ uint32_t disciplines[MAX_DISCIPLINES]; // Known disciplines
! /*12112*/ uint8_t unknown10932[400];
! /*12512*/ uint32_t recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
! /*12592*/ uint8_t unknown11412[480];
! /*13072*/ uint32_t endurance; // Current endurance
! /*13076*/ uint32_t aa_spent; // Number of spent AA points (including glyphs)
! /*13080*/ uint32_t aa_assigned; // Number of points currently assigned to AAs
! /*13084*/ uint32_t unknown11904[4];
! /*13100*/ uint32_t aa_unspent; // Unspent AA points
! /*13104*/ uint8_t unknown11924[4];
! /*13108*/ BandolierStruct bandoliers[MAX_BANDOLIERS]; // bandolier contents
! /*19508*/ InlineItem potionBelt[MAX_POTIONS_IN_BELT]; // potion belt
! /*19868*/ uint8_t unknown18008[92];
! /*19960*/
};

/*
***************
*** 743,823 ****
{
/*00000*/ uint32_t checksum; //
/*00004*/ playerProfileStruct profile; // Profile
! /*19836*/ char name[64]; // Name of player
! /*19900*/ char lastName[32]; // Last name of player
! /*19932*/ uint8_t unknown18196[8]; //***Placeholder (1/18/2006)
! /*19940*/ int32_t guildID; // guildID
! /*19944*/ uint32_t birthdayTime; // character birthday
! /*19948*/ uint32_t lastSaveTime; // character last save time
! /*19952*/ uint32_t timePlayedMin; // time character played
! /*19956*/ uint8_t unknown18220[4];
! /*19960*/ uint8_t pvp; // 1=pvp, 0=not pvp
! /*19961*/ uint8_t anon; // 2=roleplay, 1=anon, 0=not anon
! /*19962*/ uint8_t gm; // 0=no, 1=yes (guessing!)
! /*19963*/ int8_t guildstatus; // 0=member, 1=officer, 2=guildleader
! /*19964*/ uint8_t unknown18228[16];
! /*19980*/ uint32_t exp; // Current Experience
! /*19984*/ uint8_t unknown18240[12];
! /*19996*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages ccc
! /*20022*/ uint8_t unknown18277[6]; // All 0x00 (language buffer?)
! /*20028*/ float y; // Players y position
! /*20032*/ float x; // Players x position
! /*20036*/ float z; // Players z position
! /*20040*/ float heading; // Players heading
! /*20044*/ uint32_t standState; // 0x64 = stand
! /*20048*/ uint32_t platinum_bank; // Platinum Pieces in Bank
! /*20052*/ uint32_t gold_bank; // Gold Pieces in Bank
! /*20056*/ uint32_t silver_bank; // Silver Pieces in Bank
! /*20060*/ uint32_t copper_bank; // Copper Pieces in Bank
! /*20064*/ uint32_t platinum_shared; // Shared platinum pieces ccc
! /*20068*/ uint8_t unknown18324[2124]; // Added 1088 for HoT
! /*22192*/ uint32_t expansions; // Bitmask for expansions ccc
! /*22196*/ uint8_t unknown20452[12];
! /*22208*/ uint32_t autosplit; // 0 = off, 1 = on ccc
! /*22212*/ uint8_t unknown20468[16];
! /*22228*/ uint16_t zoneId; // see zones.h ccc
! /*22230*/ uint16_t zoneInstance; // Instance id ccc
! /*22232*/ uint8_t unknown20486[992];
! /*23224*/ uint32_t leadAAActive; // 0 = leader AA off, 1 = leader AA on ccc
! /*23228*/ uint8_t unknown21484[4];
! /*23232*/ uint32_t ldon_guk_points; // Earned GUK points ccc
! /*23236*/ uint32_t ldon_mir_points; // Earned MIR points ccc
! /*23240*/ uint32_t ldon_mmc_points; // Earned MMC points ccc
! /*23244*/ uint32_t ldon_ruj_points; // Earned RUJ points ccc
! /*23248*/ uint32_t ldon_tak_points; // Earned TAK points ccc
! /*23252*/ uint32_t ldon_avail_points; // Available LDON points ccc
! /*23256*/ uint8_t unknown21512[144];
! /*23400*/ uint32_t tributeTime; // Time remaining on tribute (millisecs) ccc
! /*23404*/ uint32_t careerTribute; // Total favor points for this char ccc
! /*23408*/ uint32_t unknown21656; // *** Placeholder ccc
! /*23412*/ uint32_t currentTribute; // Current tribute points ccc
! /*23416*/ uint32_t unknown21664; // *** Placeholder
! /*23420*/ uint32_t tributeActive; // 0 = off, 1=on
! /*23424*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout ccc
! /*23464*/ uint8_t unknown21712[84]; // Added 208 bytes for HoT BETA ccc
! /*23548*/ float expGroupLeadAA; // Current group lead exp points ccc
! /*23552*/ uint32_t unknown21808;
! /*23556*/ float expRaidLeadAA; // Current raid lead AA exp points ccc
! /*23560*/ uint32_t unknown21816;
! /*23564*/ uint32_t groupLeadAAUnspent; // Unspent group lead AA points ccc
! /*23568*/ uint32_t raidLeadAAUnspent; // Unspent raid lead AA points ccc
! /*23572*/ uint32_t leadershipAAs[MAX_LEAD_AA]; // Leader AA ranks ccc
! /*23700*/ uint8_t unknown21956[128];
! /*23828*/ uint32_t airRemaining; // Air supply (seconds) ccc
! /*23832*/ uint8_t unknown22088[4608];
! /*28440*/ uint32_t expAA; // Exp earned in current AA point ccc
! /*28444*/ uint8_t unknown26700[40];
! /*28484*/ uint32_t currentRadCrystals; // Current count of radiant crystals ccc
! /*28488*/ uint32_t careerRadCrystals; // Total count of radiant crystals ever ccc
! /*28492*/ uint32_t currentEbonCrystals;// Current count of ebon crystals ccc
! /*28496*/ uint32_t careerEbonCrystals; // Total count of ebon crystals ever ccc
! /*28500*/ uint8_t groupAutoconsent; // 0=off, 1=on
! /*28501*/ uint8_t raidAutoconsent; // 0=off, 1=on
! /*28502*/ uint8_t guildAutoconsent; // 0=off, 1=on
! /*28503*/ uint8_t unknown26759[5]; // ***Placeholder (6/29/2005)
! /*28508*/ uint32_t showhelm; // 0=no, 1=yes
! /*28512*/ uint8_t unknown26768[1048]; // ***Placeholder (2/13/2007)
! /*29560*/
};

#if 0
--- 743,824 ----
{
/*00000*/ uint32_t checksum; //
/*00004*/ playerProfileStruct profile; // Profile
! /*19960*/ char name[64]; // Name of player
! /*20024*/ char lastName[32]; // Last name of player
! /*20056*/ uint8_t unknown18196[12]; //***Placeholder (1/18/2006)
! /*20068*/ int32_t guildID; // guildID
! /*20072*/ uint32_t birthdayTime; // character birthday
! /*20076*/ uint32_t unknown20076;
! /*20080*/ uint32_t lastSaveTime; // character last save time
! /*20084*/ uint32_t timePlayedMin; // time character played
! /*20088*/ uint8_t unknown18220[5];
! /*20093*/ uint8_t pvp; // 1=pvp, 0=not pvp
! /*20094*/ uint8_t anon; // 2=roleplay, 1=anon, 0=not anon
! /*20095*/ uint8_t gm; // 0=no, 1=yes (guessing!)
! /*20096*/ int8_t guildstatus; // 0=member, 1=officer, 2=guildleader
! /*20097*/ uint8_t unknown18228[11];
! /*20108*/ uint32_t exp; // Current Experience
! /*20112*/ uint8_t unknown18240[12];
! /*20124*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages
! /*20150*/ uint8_t unknown18277[6]; // All 0x00 (language buffer?)
! /*20156*/ float y; // Players y position
! /*20160*/ float x; // Players x position
! /*20164*/ float z; // Players z position
! /*20168*/ float heading; // Players heading
! /*20172*/ uint32_t standState; // 0x64 = stand
! /*20176*/ uint32_t platinum_bank; // Platinum Pieces in Bank
! /*20180*/ uint32_t gold_bank; // Gold Pieces in Bank
! /*20184*/ uint32_t silver_bank; // Silver Pieces in Bank
! /*20188*/ uint32_t copper_bank; // Copper Pieces in Bank
! /*20192*/ uint32_t platinum_shared; // Shared platinum pieces
! /*20196*/ uint8_t unknown18324[2124]; // Added 1088 for HoT
! /*22320*/ uint32_t expansions; // Bitmask for expansions
! /*22324*/ uint8_t unknown20452[12];
! /*22336*/ uint32_t autosplit; // 0 = off, 1 = on
! /*22340*/ uint8_t unknown20468[16];
! /*22356*/ uint16_t zoneId; // see zones.h
! /*22358*/ uint16_t zoneInstance; // Instance id
! /*22360*/ uint8_t unknown20486[992];
! /*23352*/ uint32_t leadAAActive; // 0 = leader AA off, 1 = leader AA on
! /*23356*/ uint8_t unknown21484[4];
! /*23360*/ uint32_t ldon_guk_points; // Earned GUK points
! /*23364*/ uint32_t ldon_mir_points; // Earned MIR points
! /*23368*/ uint32_t ldon_mmc_points; // Earned MMC points
! /*23372*/ uint32_t ldon_ruj_points; // Earned RUJ points
! /*23376*/ uint32_t ldon_tak_points; // Earned TAK points
! /*23380*/ uint32_t ldon_avail_points; // Available LDON points
! /*23384*/ uint8_t unknown21512[144];
! /*23528*/ uint32_t tributeTime; // Time remaining on tribute (millisecs)
! /*23532*/ uint32_t careerTribute; // Total favor points for this char
! /*23536*/ uint32_t unknown21656; // *** Placeholder
! /*23540*/ uint32_t currentTribute; // Current tribute points
! /*23544*/ uint32_t unknown21664; // *** Placeholder
! /*23548*/ uint32_t tributeActive; // 0 = off, 1=on
! /*23552*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout
! /*23592*/ uint8_t unknown21712[84]; // Added 208 bytes for HoT BETA
! /*23676*/ float expGroupLeadAA; // Current group lead exp points
! /*23680*/ uint32_t unknown21808;
! /*23684*/ float expRaidLeadAA; // Current raid lead AA exp points
! /*23688*/ uint32_t unknown21816;
! /*23692*/ uint32_t groupLeadAAUnspent; // Unspent group lead AA points
! /*23696*/ uint32_t raidLeadAAUnspent; // Unspent raid lead AA points
! /*23700*/ uint32_t leadershipAAs[MAX_LEAD_AA]; // Leader AA ranks
! /*23828*/ uint8_t unknown21956[128];
! /*23956*/ uint32_t airRemaining; // Air supply (seconds)
! /*23960*/ uint8_t unknown22088[4608];
! /*28568*/ uint32_t expAA; // Exp earned in current AA point
! /*28572*/ uint8_t unknown26700[40];
! /*28612*/ uint32_t currentRadCrystals; // Current count of radiant crystals
! /*28616*/ uint32_t careerRadCrystals; // Total count of radiant crystals ever
! /*28620*/ uint32_t currentEbonCrystals;// Current count of ebon crystals
! /*28624*/ uint32_t careerEbonCrystals; // Total count of ebon crystals ever
! /*28628*/ uint8_t groupAutoconsent; // 0=off, 1=on
! /*28629*/ uint8_t raidAutoconsent; // 0=off, 1=on
! /*28630*/ uint8_t guildAutoconsent; // 0=off, 1=on
! /*28631*/ uint8_t unknown26759[5]; // ***Placeholder (6/29/2005)
! /*28636*/ uint32_t showhelm; // 0=no, 1=yes
! /*28640*/ uint8_t unknown26768[1048]; // ***Placeholder (2/13/2007)
! /*29688*/
};

#if 0

Razzle
03-18-2012, 08:39 PM
I would almost swear Newby copied that off my computer downstairs. Spot on what i had for player profile.

Razzle

Newby
03-18-2012, 10:06 PM
You should change your password more often.

Razzle
03-19-2012, 11:38 AM
I got the spawnstruct all worked out.

Will get a patch up later so others can use. Then after we get through filling in opcodes and are happy will put up a tarball.

Razzle

fransick
03-19-2012, 11:52 AM
I am away this week on business but can work on opcodes this coming weekend if that helps. thanks for all the struct work!

fransick

Erik467
03-19-2012, 12:07 PM
Been ages since I was around using SEQ, but now I started to play a bit again. You say you will get patches up later, where can those be found? Or are they only for a chosen few to test?

Razzle
03-19-2012, 12:51 PM
I can update here so all can get. We don't have a dedicated developer on this part of project. Mostly it is a group effort. I know i have only gotten about three hours to work on this since patch. I usually only help when others get stuck. I will try to help get svn updated and tarballs posted as i have time. Life is pretty busy lately so mostly i just help.

Razzle

hug
03-19-2012, 01:50 PM
Erick467, you can get the pre patch tar ball at http://www.showeq.net/forums/showthread.php?6614-ShowEQ-5-13-10-4-for-Live-12-14-2011&p=46477#post46477 then make the changes in Fransick's patch and Newby's diff in this thread. It will get you up and running, although you will see some structure errors and corpses don't show the x when they are dead.

Razzle
03-19-2012, 02:32 PM
I am away this week on business but can work on opcodes this coming weekend if that helps. thanks for all the struct work!

fransick
Whenever you can help, that is fine. This is a team effort. I run linux in a virtual machine myself. So to gather data, i set my laptop on floor and cable in to the back of the modem and record a stream. Then i get stuff working offline with the data i capured. With everything wireless at home now, just not set up for seq. Thats why i run myseq these days.

Razzle

Razzle
03-19-2012, 06:04 PM
Here is the latest patch I have against the latest tarball, or what is in SVN.

There are still opcodes to be found, but this mostly gets it up and running.

Razzle


diff -rupb ./showeq/conf/zoneopcodes.xml ./showeq-current/conf/zoneopcodes.xml
--- ./showeq/conf/zoneopcodes.xml 2012-03-04 13:07:47.000000000 -0700
+++ ./showeq-current/conf/zoneopcodes.xml 2012-03-18 06:58:23.000000000 -0600
@@ -9,11 +9,11 @@
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="45d7" name="OP_MovementHistory" updated="12/17/11">
+ <opcode id="1910" name="OP_MovementHistory" updated="03/16/12">
<comment></comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="0CAE" name="OP_DeleteSpawn" updated="11/16/11">
+ <opcode id="28c7" name="OP_DeleteSpawn" updated="03/16/12">
<comment>old DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>
@@ -26,7 +26,7 @@
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>
- <opcode id="0C54" name="OP_InspectAnswer" updated="11/15/11">
+ <opcode id="0c54" name="OP_InspectAnswer" updated="03/16/12">
<comment>old InspectDataCode</comment>
<payload dir="both" typename="inspectDataStruct" sizechecktype="match"/>
</opcode>
@@ -34,7 +34,7 @@
<comment>Coords in a zone that will port you to another zone</comment>
<payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
</opcode>
- <opcode id="3EDC" name="OP_TargetMouse" updated="11/15/11">
+ <opcode id="3edc" name="OP_TargetMouse" updated="03/16/12">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>
@@ -46,23 +46,23 @@
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>You join a group</comment>
</opcode>
- <opcode id="44C2" name="OP_GroupFollow2" updated="11/15/11">
+ <opcode id="74e9" name="OP_GroupFollow2" updated="03/16/12">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>Player joins your group</comment>
</opcode>
- <opcode id="7139" name="OP_GroupUpdate" updated="11/15/11">
+ <opcode id="367f" name="OP_GroupUpdate" updated="03/16/12">
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
<comment>Variable length packet with group member names</comment>
</opcode>
- <opcode id="74E9" name="OP_GroupDisband" updated="11/15/11">
+ <opcode id="367b" name="OP_GroupDisband" updated="03/16/12">
<comment>You disband from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3C58" name="OP_GroupDisband2" updated="11/15/11">
+ <opcode id="4b82" name="OP_GroupDisband2" updated="03/16/12">
<comment>Other disbands from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
- <opcode id="4B82" name="OP_GroupLeader" updated="11/15/11">
+ <opcode id="5fe3" name="OP_GroupLeader" updated="03/16/12">
<comment>Group leader change</comment>
<payload dir="server" typename="groupLeaderChangeStruct" sizechecktype="match"/>
</opcode>
@@ -78,7 +78,7 @@
<comment>old FormattedMessageCode</comment>
<payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="0E24" name="OP_SpawnDoor" updated="11/15/11">
+ <opcode id="7113" name="OP_SpawnDoor" updated="03/16/12">
<comment>old DoorSpawnsCode</comment>
<payload dir="server" typename="doorStruct" sizechecktype="modulus"/>
</opcode>
@@ -108,7 +108,7 @@
<payload dir="server" typename="groupInviteStruct" sizechecktype="match"/>
<comment>You got invited to a group</comment>
</opcode>
- <opcode id="3288" name="OP_GroupInvite" updated="11/15/11">
+ <opcode id="3288" name="OP_GroupInvite" updated="03/16/12">
<payload dir="both" typename="groupInviteStruct" sizechecktype="none"/>
<comment>You invite or get invited</comment>
</opcode>
@@ -154,7 +154,7 @@
<comment>Server updating on hunger/thirst</comment>
<payload dir="server" typename="staminaStruct" sizechecktype="match"/>
</opcode>
- <opcode id="70C6" name="OP_Consider" updated="11/16/11">
+ <opcode id="70c6" name="OP_Consider" updated="03/16/12">
<comment>old ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>
@@ -170,19 +170,19 @@
<comment></comment>
<payload dir="server" typename="none" sizechecktype="match"/>
</opcode>
- <opcode id="2736" name="OP_GroupInvite2" updated="11/15/11">
+ <opcode id="5251" name="OP_GroupInvite2" updated="03/16/12">
<payload dir="client" typename="groupInviteStruct" sizechecktype="match"/>
<comment>You're inviting someone and you are grouped</comment>
</opcode>
- <opcode id="6C16" name="OP_GroupCancelInvite" updated="11/15/11">
+ <opcode id="2736" name="OP_GroupCancelInvite" updated="03/16/12">
<payload dir="both" typename="groupDeclineStruct" sizechecktype="match"/>
<comment>Declining to join a group</comment>
</opcode>
- <opcode id="4118" name="OP_NewZone" updated="11/16/11">
+ <opcode id="43ac" name="OP_NewZone" updated="03/16/12">
<comment>old NewZoneCode</comment>
<payload dir="server" typename="newZoneStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5C85" name="OP_GroundSpawn" updated="11/15/11">
+ <opcode id="33e5" name="OP_GroundSpawn" updated="03/16/12">
<comment>old MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="none"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
@@ -191,24 +191,24 @@
<comment>old ExpUpdateCode</comment>
<payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="58c5" name="OP_RemoveSpawn" updated="11/16/11">
+ <opcode id="3164" name="OP_RemoveSpawn" updated="03/16/12">
<comment>Remove spawn from zone</comment>
<payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>
- <opcode id="799C" name="OP_Death" updated="11/16/11">
+ <opcode id="6685" name="OP_Death" updated="03/16/12">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="33E5" name="OP_ClickObject" updated="11/15/11">
+ <opcode id="5f0d" name="OP_ClickObject" updated="03/16/12">
<comment>old RemDropCode</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7F9E" name="OP_Action" updated="11/15/11">
+ <opcode id="1b85" name="OP_Action" updated="03/16/12">
<comment></comment>
<payload dir="both" typename="actionStruct" sizechecktype="match"/>
<payload dir="both" typename="actionAltStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3EA8" name="OP_Action2" updated="11/15/11">
+ <opcode id="631a" name="OP_Action2" updated="03/16/12">
<comment>old ActionCode</comment>
<payload dir="both" typename="action2Struct" sizechecktype="match"/>
</opcode>
@@ -216,7 +216,7 @@
<comment>Spawn being illusioned (changing forms)</comment>
<payload dir="both" typename="spawnIllusionStruct" sizechecktype="match"/>
</opcode>
- <opcode id="8543" name="OP_BuffFadeMsg" updated="11/15/11">
+ <opcode id="3887" name="OP_BuffFadeMsg" updated="03/16/12">
<comment>old SpellFadeCode</comment>
<payload dir="both" typename="spellFadedStruct" sizechecktype="none"/>
</opcode>
@@ -228,7 +228,7 @@
<comment>old MemSpellCode</comment>
<payload dir="both" typename="memSpellStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3164" name="OP_Emote" updated="11/15/11">
+ <opcode id="0000" name="OP_Emote" updated="11/15/11">
<comment>old EmoteTextCode</comment>
<payload dir="both" typename="emoteTextStruct" sizechecktype="none"/>
</opcode>
@@ -309,13 +309,13 @@
<opcode id="4e99" name="OP_Claims" updated="12/17/11">
<comment>Contents of claims window</comment>
</opcode>
- <opcode id="2864" name="OP_PollQuestions" updated="12/17/11">
+ <opcode id="47b3" name="OP_PollQuestions" updated="03/16/12">
<comment>SOE in-game player poll questions</comment>
</opcode>
- <opcode id="0f6d" name="OP_PollResponses" updated="12/17/11">
+ <opcode id="a1e6" name="OP_PollResponses" updated="03/16/12">
<comment>Poll response choices</comment>
</opcode>
- <opcode id="2071" name="OP_ShroudProgression" updated="12/17/11">
+ <opcode id="064d" name="OP_ShroudProgression" updated="03/16/12">
<comment>Unlocked shrouds</comment>
</opcode>
<opcode id="01e5" name="OP_Fellowship" updated="12/17/11">
@@ -324,7 +324,7 @@
<opcode id="4274" name="OP_ExpandedGuildInfo" updated="12/17/11">
<comment>Variable length guild ranks and other misc guild data</comment>
</opcode>
- <opcode id="6255" name="OP_GuildBank" updated="12/17/11">
+ <opcode id="7b22" name="OP_GuildBank" updated="03/16/12">
<comment>Guild bank contents</comment>
</opcode>
<opcode id="1d40" name="OP_OpenTradeskillContainer" updated="12/17/11">
@@ -360,7 +360,7 @@
<opcode id="71fb" name="OP_TributeUpdate" updated="03/14/07">
<comment>Tribute information</comment>
</opcode>
- <opcode id="4849" name="OP_ItemPlayerPacket" updated="11/15/11">
+ <opcode id="6cfe" name="OP_ItemPlayerPacket" updated="03/16/12">
<comment>Inventory/bank items coming over during zone</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
@@ -440,7 +440,7 @@
<opcode id="61ac" name="OP_LoadSpellSet" updated="02/13/07">
<comment>/mem spellsetname</comment>
</opcode>
- <opcode id="2683" name="OP_InspectRequest" updated="12/17/11">
+ <opcode id="2683" name="OP_InspectRequest" updated="03/16/12">
<comment>old InspectRequestCode</comment>
</opcode>
<opcode id="1B7B" name="OP_GetGuildMOTD" updated="12/17/11">
diff -rupb ./showeq/src/everquest.h ./showeq-current/src/everquest.h
--- ./showeq/src/everquest.h 2012-03-04 13:07:47.000000000 -0700
+++ ./showeq-current/src/everquest.h 2012-03-18 06:29:06.000000000 -0600
@@ -513,14 +513,15 @@ struct BindStruct

/*
* Visible equiptment.
- * Size: 12 Octets
+ * Size: 16 Octets
*/
struct EquipStruct
{
/*00*/ uint32_t equip0;
/*04*/ uint32_t equip1;
-/*08*/ uint32_t itemId;
-/*12*/
+/*08*/ uint32_t equip2;
+/*12*/ uint32_t itemId;
+/*16*/
};

/*
@@ -682,142 +683,158 @@ struct playerProfileStruct
/*00229*/ uint8_t eyecolor2; // Player right eye color
/*00230*/ uint8_t hairstyle; // Player hair style
/*00231*/ uint8_t beard; // Player beard type
-/*00232*/ uint8_t unknown00232[22];
-/*00254*/ uint32_t item_material[9]; // Item texture/material of worn items
-/*00290*/ uint8_t unknown00290[222];
-/*00512*/ Color_Struct item_tint[9]; // RR GG BB 00
-/*00548*/ AA_Array aa_array[MAX_AA]; // AAs
-/*04148*/ uint32_t points; // Unspent Practice points
-/*04152*/ uint32_t MANA; // Current MANA
-/*04156*/ uint32_t curHp; // Current HP without +HP equipment
-/*04160*/ uint32_t STR; // Strength
-/*04164*/ uint32_t STA; // Stamina
-/*04168*/ uint32_t CHA; // Charisma
-/*04172*/ uint32_t DEX; // Dexterity
-/*04176*/ uint32_t INT; // Intelligence
-/*04180*/ uint32_t AGI; // Agility
-/*04184*/ uint32_t WIS; // Wisdom
-/*04188*/ uint8_t face; // Player face
-/*04189*/ uint8_t unknown04189[175];
-/*04364*/ int32_t sSpellBook[720]; // List of the Spells in spellbook
-/*07244*/ int32_t sMemSpells[MAX_SPELL_SLOTS]; // List of spells memorized
-/*07292*/ uint8_t unknown07292[20];
-/*07312*/ uint32_t platinum; // Platinum Pieces on player
-/*07316*/ uint32_t gold; // Gold Pieces on player
-/*07320*/ uint32_t silver; // Silver Pieces on player
-/*07324*/ uint32_t copper; // Copper Pieces on player
-/*07328*/ uint32_t platinum_cursor; // Platinum Pieces on cursor
-/*07332*/ uint32_t gold_cursor; // Gold Pieces on cursor
-/*07336*/ uint32_t silver_cursor; // Silver Pieces on cursor
-/*07340*/ uint32_t copper_cursor; // Copper Pieces on cursor
-/*07344*/ uint32_t skills[MAX_KNOWN_SKILLS]; // List of skills
-/*07744*/ uint32_t innateSkills[25];
-/*07844*/ uint8_t unknown07844[16];
-/*07860*/ uint32_t toxicity; // Potion Toxicity (15=too toxic, each potion adds 3)
-/*07864*/ uint32_t thirst; // Drink (ticks till next drink)
-/*07868*/ uint32_t hunger; // Food (ticks till next eat)
-/*07872*/ uint8_t unknown07872[20];
-/*07892*/ spellBuff buffs[MAX_BUFFS]; // Buffs currently on the player
-/*11588*/ uint32_t disciplines[MAX_DISCIPLINES]; // Known disciplines
-/*11988*/ uint8_t unknown10932[400];
-/*12188*/ uint32_t recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
-/*12468*/ uint8_t unknown11412[480];
-/*12948*/ uint32_t endurance; // Current endurance
-/*12952*/ uint32_t aa_spent; // Number of spent AA points (including glyphs)
-/*12956*/ uint32_t aa_assigned; // Number of points currently assigned to AAs
-/*12960*/ uint32_t unknown11904[4];
-/*12976*/ uint32_t aa_unspent; // Unspent AA points
-/*12980*/ uint8_t unknown11924[4];
-/*12984*/ BandolierStruct bandoliers[MAX_BANDOLIERS]; // bandolier contents
-/*19384*/ InlineItem potionBelt[MAX_POTIONS_IN_BELT]; // potion belt
-/*19744*/ uint8_t unknown18008[92];
-/*19836*/
+/*00232*/ uint8_t unknown00232[4];
+/*00236*/ union
+ {
+ struct
+ {
+ /*00236*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
+ /*00252*/ EquipStruct equip_chest; // Equiptment: Chest visual
+ /*00268*/ EquipStruct equip_arms; // Equiptment: Arms visual
+ /*00284*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
+ /*00300*/ EquipStruct equip_hands; // Equiptment: Hands visual
+ /*00316*/ EquipStruct equip_legs; // Equiptment: Legs visual
+ /*00332*/ EquipStruct equip_feet; // Equiptment: Boots visual
+ /*00348*/ EquipStruct equip_primary; // Equiptment: Main visual
+ /*00364*/ EquipStruct equip_secondary; // Equiptment: Off visual
+ } equip;
+ /*00380*/ EquipStruct equipment[9];
+ };
+/*00380*/ uint8_t unknown00380[220];
+/*00600*/ Color_Struct item_tint[9]; // RR GG BB 00
+/*00636*/ AA_Array aa_array[MAX_AA]; // AAs
+/*04236*/ uint32_t points; // Unspent Practice points
+/*04240*/ uint32_t MANA; // Current MANA
+/*04244*/ uint32_t curHp; // Current HP without +HP equipment
+/*04248*/ uint32_t STR; // Strength
+/*04252*/ uint32_t STA; // Stamina
+/*04256*/ uint32_t CHA; // Charisma
+/*04260*/ uint32_t DEX; // Dexterity
+/*04264*/ uint32_t INT; // Intelligence
+/*04268*/ uint32_t AGI; // Agility
+/*04272*/ uint32_t WIS; // Wisdom
+/*04276*/ uint8_t unknown04276[28];
+/*04304*/ uint32_t face; // Player face
+/*04308*/ uint8_t unknown04308[180];
+/*04488*/ int32_t sSpellBook[720]; // List of the Spells in spellbook
+/*07368*/ int32_t sMemSpells[MAX_SPELL_SLOTS]; // List of spells memorized
+/*07416*/ uint8_t unknown07416[20];
+/*07436*/ uint32_t platinum; // Platinum Pieces on player
+/*07442*/ uint32_t gold; // Gold Pieces on player
+/*07444*/ uint32_t silver; // Silver Pieces on player
+/*07448*/ uint32_t copper; // Copper Pieces on player
+/*07452*/ uint32_t platinum_cursor; // Platinum Pieces on cursor
+/*07456*/ uint32_t gold_cursor; // Gold Pieces on cursor
+/*07460*/ uint32_t silver_cursor; // Silver Pieces on cursor
+/*07464*/ uint32_t copper_cursor; // Copper Pieces on cursor
+/*07468*/ uint32_t skills[MAX_KNOWN_SKILLS]; // List of skills
+/*07868*/ uint32_t innateSkills[25];
+/*07968*/ uint8_t unknown07968[16];
+/*07984*/ uint32_t toxicity; // Potion Toxicity (15=too toxic, each potion adds 3)
+/*07988*/ uint32_t thirst; // Drink (ticks till next drink)
+/*07992*/ uint32_t hunger; // Food (ticks till next eat)
+/*07996*/ uint8_t unknown07996[20];
+/*08016*/ spellBuff buffs[MAX_BUFFS]; // Buffs currently on the player
+/*11712*/ uint32_t disciplines[MAX_DISCIPLINES]; // Known disciplines
+/*12112*/ uint8_t unknown12112[400];
+/*12312*/ uint32_t recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
+/*12592*/ uint8_t unknown12592[480];
+/*13072*/ uint32_t endurance; // Current endurance
+/*13076*/ uint32_t aa_spent; // Number of spent AA points (including glyphs)
+/*13080*/ uint32_t aa_assigned; // Number of points currently assigned to AAs
+/*13084*/ uint32_t unknown13084[4];
+/*13100*/ uint32_t aa_unspent; // Unspent AA points
+/*13104*/ uint8_t unknown13104[4];
+/*13108*/ BandolierStruct bandoliers[MAX_BANDOLIERS]; // bandolier contents
+/*19508*/ InlineItem potionBelt[MAX_POTIONS_IN_BELT]; // potion belt
+/*19868*/ uint8_t unknown19868[92];
+/*19960*/
};

/*
** Player Profile
-** Length: 29560 Octets
+** Length: 29688 Octets
** OpCode: CharProfileCode
*/
struct charProfileStruct
{
/*00000*/ uint32_t checksum; //
/*00004*/ playerProfileStruct profile; // Profile
-/*19836*/ char name[64]; // Name of player
-/*19900*/ char lastName[32]; // Last name of player
-/*19932*/ uint8_t unknown18196[8]; //***Placeholder (1/18/2006)
-/*19940*/ int32_t guildID; // guildID
-/*19944*/ uint32_t birthdayTime; // character birthday
-/*19948*/ uint32_t lastSaveTime; // character last save time
-/*19952*/ uint32_t timePlayedMin; // time character played
-/*19956*/ uint8_t unknown18220[4];
-/*19960*/ uint8_t pvp; // 1=pvp, 0=not pvp
-/*19961*/ uint8_t anon; // 2=roleplay, 1=anon, 0=not anon
-/*19962*/ uint8_t gm; // 0=no, 1=yes (guessing!)
-/*19963*/ int8_t guildstatus; // 0=member, 1=officer, 2=guildleader
-/*19964*/ uint8_t unknown18228[16];
-/*19980*/ uint32_t exp; // Current Experience
-/*19984*/ uint8_t unknown18240[12];
-/*19996*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages ccc
-/*20022*/ uint8_t unknown18277[6]; // All 0x00 (language buffer?)
-/*20028*/ float y; // Players y position
-/*20032*/ float x; // Players x position
-/*20036*/ float z; // Players z position
-/*20040*/ float heading; // Players heading
-/*20044*/ uint32_t standState; // 0x64 = stand
-/*20048*/ uint32_t platinum_bank; // Platinum Pieces in Bank
-/*20052*/ uint32_t gold_bank; // Gold Pieces in Bank
-/*20056*/ uint32_t silver_bank; // Silver Pieces in Bank
-/*20060*/ uint32_t copper_bank; // Copper Pieces in Bank
-/*20064*/ uint32_t platinum_shared; // Shared platinum pieces ccc
-/*20068*/ uint8_t unknown18324[2124]; // Added 1088 for HoT
-/*22192*/ uint32_t expansions; // Bitmask for expansions ccc
-/*22196*/ uint8_t unknown20452[12];
-/*22208*/ uint32_t autosplit; // 0 = off, 1 = on ccc
-/*22212*/ uint8_t unknown20468[16];
-/*22228*/ uint16_t zoneId; // see zones.h ccc
-/*22230*/ uint16_t zoneInstance; // Instance id ccc
-/*22232*/ uint8_t unknown20486[992];
-/*23224*/ uint32_t leadAAActive; // 0 = leader AA off, 1 = leader AA on ccc
-/*23228*/ uint8_t unknown21484[4];
-/*23232*/ uint32_t ldon_guk_points; // Earned GUK points ccc
-/*23236*/ uint32_t ldon_mir_points; // Earned MIR points ccc
-/*23240*/ uint32_t ldon_mmc_points; // Earned MMC points ccc
-/*23244*/ uint32_t ldon_ruj_points; // Earned RUJ points ccc
-/*23248*/ uint32_t ldon_tak_points; // Earned TAK points ccc
-/*23252*/ uint32_t ldon_avail_points; // Available LDON points ccc
-/*23256*/ uint8_t unknown21512[144];
-/*23400*/ uint32_t tributeTime; // Time remaining on tribute (millisecs) ccc
-/*23404*/ uint32_t careerTribute; // Total favor points for this char ccc
-/*23408*/ uint32_t unknown21656; // *** Placeholder ccc
-/*23412*/ uint32_t currentTribute; // Current tribute points ccc
-/*23416*/ uint32_t unknown21664; // *** Placeholder
-/*23420*/ uint32_t tributeActive; // 0 = off, 1=on
-/*23424*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout ccc
-/*23464*/ uint8_t unknown21712[84]; // Added 208 bytes for HoT BETA ccc
-/*23548*/ float expGroupLeadAA; // Current group lead exp points ccc
-/*23552*/ uint32_t unknown21808;
-/*23556*/ float expRaidLeadAA; // Current raid lead AA exp points ccc
-/*23560*/ uint32_t unknown21816;
-/*23564*/ uint32_t groupLeadAAUnspent; // Unspent group lead AA points ccc
-/*23568*/ uint32_t raidLeadAAUnspent; // Unspent raid lead AA points ccc
-/*23572*/ uint32_t leadershipAAs[MAX_LEAD_AA]; // Leader AA ranks ccc
-/*23700*/ uint8_t unknown21956[128];
-/*23828*/ uint32_t airRemaining; // Air supply (seconds) ccc
-/*23832*/ uint8_t unknown22088[4608];
-/*28440*/ uint32_t expAA; // Exp earned in current AA point ccc
-/*28444*/ uint8_t unknown26700[40];
-/*28484*/ uint32_t currentRadCrystals; // Current count of radiant crystals ccc
-/*28488*/ uint32_t careerRadCrystals; // Total count of radiant crystals ever ccc
-/*28492*/ uint32_t currentEbonCrystals;// Current count of ebon crystals ccc
-/*28496*/ uint32_t careerEbonCrystals; // Total count of ebon crystals ever ccc
-/*28500*/ uint8_t groupAutoconsent; // 0=off, 1=on
-/*28501*/ uint8_t raidAutoconsent; // 0=off, 1=on
-/*28502*/ uint8_t guildAutoconsent; // 0=off, 1=on
-/*28503*/ uint8_t unknown26759[5]; // ***Placeholder (6/29/2005)
-/*28508*/ uint32_t showhelm; // 0=no, 1=yes
-/*28512*/ uint8_t unknown26768[1048]; // ***Placeholder (2/13/2007)
-/*29560*/
+/*19960*/ char name[64]; // Name of player
+/*20024*/ char lastName[32]; // Last name of player
+/*20054*/ uint8_t unknown20054[12]; //***Placeholder (1/18/2006)
+/*20066*/ int32_t guildID; // guildID
+/*20070*/ uint32_t birthdayTime; // character birthday
+/*20074*/ uint32_t lastSaveTime; // character last save time
+/*20078*/ uint32_t timePlayedMin; // time character played
+/*20082*/ uint8_t unknown20082[4];
+/*20086*/ uint8_t pvp; // 1=pvp, 0=not pvp
+/*20087*/ uint8_t anon; // 2=roleplay, 1=anon, 0=not anon
+/*20088*/ uint8_t gm; // 0=no, 1=yes (guessing!)
+/*20089*/ int8_t guildstatus; // 0=member, 1=officer, 2=guildleader
+/*20090*/ uint8_t unknown20090[16];
+/*20106*/ uint32_t exp; // Current Experience
+/*20110*/ uint8_t unknown20110[12];
+/*20122*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages ccc
+/*20150*/ uint8_t unknown20150[6]; // All 0x00 (language buffer?)
+/*20156*/ float y; // Players y position
+/*20160*/ float x; // Players x position
+/*20164*/ float z; // Players z position
+/*20168*/ float heading; // Players heading
+/*20172*/ uint32_t standState; // 0x64 = stand
+/*20176*/ uint32_t platinum_bank; // Platinum Pieces in Bank
+/*20180*/ uint32_t gold_bank; // Gold Pieces in Bank
+/*20184*/ uint32_t silver_bank; // Silver Pieces in Bank
+/*20188*/ uint32_t copper_bank; // Copper Pieces in Bank
+/*20192*/ uint32_t platinum_shared; // Shared platinum pieces ccc
+/*20196*/ uint8_t unknown20196[2124]; // Added 1088 for HoT
+/*22320*/ uint32_t expansions; // Bitmask for expansions ccc
+/*22324*/ uint8_t unknown22324[12];
+/*22336*/ uint32_t autosplit; // 0 = off, 1 = on ccc
+/*22340*/ uint8_t unknown22340[16];
+/*22356*/ uint16_t zoneId; // see zones.h ccc
+/*22358*/ uint16_t zoneInstance; // Instance id ccc
+/*22360*/ uint8_t unknown22360[992];
+/*23352*/ uint32_t leadAAActive; // 0 = leader AA off, 1 = leader AA on ccc
+/*23356*/ uint8_t unknown23356[4];
+/*23360*/ uint32_t ldon_guk_points; // Earned GUK points ccc
+/*23364*/ uint32_t ldon_mir_points; // Earned MIR points ccc
+/*23368*/ uint32_t ldon_mmc_points; // Earned MMC points ccc
+/*23372*/ uint32_t ldon_ruj_points; // Earned RUJ points ccc
+/*23376*/ uint32_t ldon_tak_points; // Earned TAK points ccc
+/*23380*/ uint32_t ldon_avail_points; // Available LDON points ccc
+/*23384*/ uint8_t unknown23384[144];
+/*23528*/ uint32_t tributeTime; // Time remaining on tribute (millisecs) ccc
+/*23532*/ uint32_t careerTribute; // Total favor points for this char ccc
+/*23536*/ uint32_t unknown23536; // *** Placeholder ccc
+/*23540*/ uint32_t currentTribute; // Current tribute points ccc
+/*23544*/ uint32_t unknown23544; // *** Placeholder
+/*23548*/ uint32_t tributeActive; // 0 = off, 1=on
+/*23552*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout ccc
+/*23592*/ uint8_t unknown23592[84]; // Added 208 bytes for HoT BETA ccc
+/*23676*/ float expGroupLeadAA; // Current group lead exp points ccc
+/*23680*/ uint32_t unknown23680;
+/*23684*/ float expRaidLeadAA; // Current raid lead AA exp points ccc
+/*23688*/ uint32_t unknown23688;
+/*23692*/ uint32_t groupLeadAAUnspent; // Unspent group lead AA points ccc
+/*23696*/ uint32_t raidLeadAAUnspent; // Unspent raid lead AA points ccc
+/*23700*/ uint32_t leadershipAAs[MAX_LEAD_AA]; // Leader AA ranks ccc
+/*23828*/ uint8_t unknown23828[128];
+/*23956*/ uint32_t airRemaining; // Air supply (seconds) ccc
+/*23960*/ uint8_t unknown23960[4608];
+/*28568*/ uint32_t expAA; // Exp earned in current AA point ccc
+/*28572*/ uint8_t unknown28572[40];
+/*28612*/ uint32_t currentRadCrystals; // Current count of radiant crystals ccc
+/*28616*/ uint32_t careerRadCrystals; // Total count of radiant crystals ever ccc
+/*28620*/ uint32_t currentEbonCrystals;// Current count of ebon crystals ccc
+/*28624*/ uint32_t careerEbonCrystals; // Total count of ebon crystals ever ccc
+/*28628*/ uint8_t groupAutoconsent; // 0=off, 1=on
+/*28629*/ uint8_t raidAutoconsent; // 0=off, 1=on
+/*28630*/ uint8_t guildAutoconsent; // 0=off, 1=on
+/*28631*/ uint8_t unknown28631[5]; // ***Placeholder (6/29/2005)
+/*28636*/ uint32_t showhelm; // 0=no, 1=yes
+/*28640*/ uint8_t unknown28640[1048]; // ***Placeholder (2/13/2007)
+/*29688*/
};

#if 0
@@ -1110,7 +1127,7 @@ struct spawnStruct

#if 0
// Basic structure of how the packet looks on the wire, for reference.
-// May 29, 2008 eqgame.exe
+// March 16, 2012 eqgame.exe
struct spawnStruct
{
/*0000*/ char name[0];
@@ -1138,7 +1155,7 @@ struct spawnStruct
unsigned padding1:2;
unsigned trader:1;
unsigned buyer:1;
-/*0000*/ uint8_t otherData; // & 4 - has title, & 8 - has suffix, & 1 - it's a chest or untargetable
+/*0000*/ uint8_t otherData; // & 8 - has title, & 16 - has suffix, & 2 - auras, & 1 - it's a chest or untargetable
/*0000*/ uint32_t unknown3;
/*0000*/ uint32_t unknown4;
/*0000*/ uint32_t unknown5;
@@ -1146,7 +1163,7 @@ struct spawnStruct
/*0000*/ float walkspeed;
/*0000*/ float runspeed;
/*0000*/ uint32_t race;
-/*0000*/ uint8_t charProperties; // for body types
+/*0000*/ uint8_t charProperties; // for body types - value indicates how many properties are present
/*0000*/ uint32_t bodytype;
/*0000*/ uint32_t bodytype2; // this is only present if charProperties==2
// are there more than two possible properties?
@@ -1197,6 +1214,18 @@ struct spawnStruct
signed padding0014:1; // ***Placeholder
/*0000*/ signed z:19; // z coord
signed deltaZ:13; // change in z
+// If not a valid player race (skip these if a valid player race)
+/*0000*/ union
+ {
+ struct
+ {
+ /*0000*/ EquipStruct equip_helmet; // Equipment: Helmet visual (maybe)
+ /*0000*/ EquipStruct equip_primary; // Equipment: Main visual
+ /*0000*/ EquipStruct equip_secondary; // Equipment: Off visual
+ } equip;
+ /*0000*/ EquipStruct equipment[3];
+ };
+// skip these bytes if not a valid player race - colors[9] and equipment[9]
/*0000*/ union
{
struct
@@ -1212,9 +1241,7 @@ struct spawnStruct
/*0000*/ Color_Struct color_secondary; // Color of secondary item
} equipment_colors;
/*0000*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above
- };
-
-// skip these bytes if not a valid player race
+ }
/*0000*/ union
{
struct
@@ -1231,12 +1258,11 @@ struct spawnStruct
} equip;
/*0000*/ EquipStruct equipment[9];
};
-
-/*0000*/ char title[0]; // only read if(hasTitleOrSuffix & 4)
-/*0000*/ char suffix[0]; // only read if(hasTitleOrSuffix & 8)
+/*0000*/ char title[0]; // only read if(otherData & 8)
+/*0000*/ char suffix[0]; // only read if(otherData & 16)
/*0000*/ char unknown20[8];
/*0000*/ uint8_t isMercenary;
-/*0000*/ char unknown20[24];
+/*0000*/ char unknown21[54];
};
#endif

@@ -2198,7 +2224,7 @@ struct leadExpUpdateStruct

/*
** Player Spawn Update
-** Length: 19 Octets
+** Length: 23 Octets
** OpCode: SpawnUpdateCode
*/

@@ -2209,8 +2235,8 @@ struct SpawnUpdateStruct
/*0004*/ int16_t arg1; // first option
/*0006*/ int16_t arg2; // second option
/*0008*/ uint8_t arg3; // third option?
-/*0009*/ uint8_t unknown0009[10];
-/*0019*/
+/*0009*/ uint8_t unknown0009[14];
+/*0023*/
};

/*
diff -rupb ./showeq/src/filter.cpp ./showeq-current/src/filter.cpp
--- ./showeq/src/filter.cpp 2012-03-04 12:47:14.000000000 -0700
+++ ./showeq-current/src/filter.cpp 2012-03-18 01:13:30.000000000 -0600
@@ -56,8 +56,8 @@ protected:
/* FilterItem Class - allows easy creation / deletion of regex types */
FilterItem::FilterItem(const QString& filterPattern, bool caseSensitive)
{
- uint8_t minLevel = 0;
- uint8_t maxLevel = 0;
+ uint32_t minLevel = 0;
+ uint32_t maxLevel = 0;

QString workString = filterPattern;

diff -rupb ./showeq/src/spawnshell.cpp ./showeq-current/src/spawnshell.cpp
--- ./showeq/src/spawnshell.cpp 2012-03-04 13:07:47.000000000 -0700
+++ ./showeq-current/src/spawnshell.cpp 2012-03-18 04:11:53.000000000 -0600
@@ -654,20 +654,31 @@ int32_t SpawnShell::fillSpawnStruct(spaw
spawn->posData[3] = netStream.readUInt32NC();
spawn->posData[4] = netStream.readUInt32NC();

- // skip color
- netStream.skipBytes(36);
-
race = spawn->race;

// this is how the client checks if equipment should be read.
if(spawn->NPC == 0 || race <= 12 || race == 128 || race == 130 || race == 330 || race == 522)
{
+ // skip color
+ netStream.skipBytes(36);
for(i = 0; i < 9; i++)
{
spawn->equipment[i].itemId = netStream.readUInt32NC();
+ spawn->equipment[i].equip2 = netStream.readUInt32NC();
spawn->equipment[i].equip1 = netStream.readUInt32NC();
spawn->equipment[i].equip0 = netStream.readUInt32NC();
}
+ } else {
+ netStream.skipBytes(16);
+ spawn->equipment[7].itemId = netStream.readUInt32NC();
+ spawn->equipment[7].equip2 = netStream.readUInt32NC();
+ spawn->equipment[7].equip1 = netStream.readUInt32NC();
+ spawn->equipment[7].equip0 = netStream.readUInt32NC();
+ // secondary
+ spawn->equipment[8].itemId = netStream.readUInt32NC();
+ spawn->equipment[8].equip2 = netStream.readUInt32NC();
+ spawn->equipment[8].equip1 = netStream.readUInt32NC();
+ spawn->equipment[8].equip0 = netStream.readUInt32NC();
}

if(spawn->otherData & 8)

seqfan
03-19-2012, 08:13 PM
You should change your password more often.I almost fell out of my chair when I read that!

Erik467
03-22-2012, 05:33 AM
I have tried this patch now, and unfortunately it doesnt seem to be flawless. When been in a zone for a while it SEQ will freeze and eventually give seg fault. This behaviour is the same in any zone, it is just a matter of time.

I think you have done a great work though, just giving my feedback.

Regards

Razzle
03-22-2012, 06:56 PM
I would bet there are some structs that need fixed. Once they are identified i can fix them. I have only got on once this week for abt 30 min. I will try to start recording a session in a busy zone so i can look at it later.

Razzle

Roads
03-22-2012, 07:29 PM
anyway to get this patch or have to manually edit the files listed?


P.S. nevermind... figured how to patch.. but i got 1 back hunk in the zoneopcodes file and everquest.h i manually edited those and have skittles:) and non stop crc errors.. i can live with those.. thanks guys!

Fluxcapacitor
03-22-2012, 10:48 PM
Zone: EntryCode: Client
Warning: OP_PlayerProfile (0x6afd) (dataLen: 29688) doesn't match: sizeof(charProfileStruct):29685


Did something change, or did I mess something up applying the patch?



Thanks
Flux

Fluxcapacitor
03-23-2012, 07:46 PM
User error. I have skittles now.

Thanks to everyone for keeping SEQ alive.

rogues
03-24-2012, 05:56 AM
User error. I have skittles now.

Thanks to everyone for keeping SEQ alive.

Ok, what'd you do, I got the same error. :)

rogues
03-27-2012, 07:22 PM
After manually applying the changes to the opcodes and everquest.h I'm back up and running. Thanks!

fransick
03-28-2012, 04:48 AM
I spent a most of the past weekend going through opcodes and have most of them updated. I just wanted/needed some online time to make sure everything is working before psting here. Should have them up this weekend.

Fransick

Razzle
03-28-2012, 06:25 AM
I spent a most of the past weekend going through opcodes and have most of them updated. I just wanted/needed some online time to make sure everything is working before psting here. Should have them up this weekend.

Fransick
Awesome. I have not even logged in the last week. With the wife having a baby in 3 to 4 weeks I am thinking I might even have less time real soon. But i will get a tarball posted when its ready. Let me know if any structs need looked at.

Razzle

Razzle

Roads
03-29-2012, 06:10 AM
Congrats on the kid raz, hope all goes well:) And thanks for all the work you guys do on this... really loving eq now and no way i could ever play without seq:)

fransick
04-01-2012, 06:04 AM
Well was close to posting changes then ran into this on my main... it only happens on 1 toon. Any thoughts?


Program received signal SIGSEGV, Segmentation fault.
0x0445c52d in QString::QString(QString const&) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
Missing separate debuginfos, use: debuginfo-install expat-2.0.1-10.fc13.i686 fontconfig-2.8.0-2.fc14.i686 freetype-2.4.2-7.fc14.i686 glibc-2.13-2.i686
lcms-libs-1.19-2.fc14.i686 libICE-1.0.6-2.fc13.i686 libSM-1.1.0-7.fc12.i686 libX11-1.3.4-4.fc14.i686 libXau-1.0.6-1.fc14.i686 libXcursor-1.1.10-5.fc14.i686
libXext-1.1.2-2.fc14.i686 libXfixes-4.0.5-1.fc14.i686 libXft-2.1.14-1.fc13.i686 libXi-1.3.2-1.fc14.i686 libXinerama-1.1-2.fc13.i686
libXrandr-1.3.0-5.fc13.i686 libXrender-0.9.6-1.fc14.i686 libgcc-4.5.1-4.fc14.i686 libjpeg-turbo-1.1.1-1.fc14.i686 libmng-1.0.10-4.fc12.i686
libpcap-1.1.1-3.fc14.i686 libpng-1.2.46-1.fc14.i686libstdc++-4.5.1-4.fc14.i686 libuuid-2.18-4.8.fc14.i686 libxcb-1.7-1.fc14.i686 qt3-3.3.8b-37.fc14.i686
zlib-1.2.5-2.fc14.i686

(gdb) bt
#0 0x0445c52d in QString::QString(QString const&) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#1 0x0447bcfb in QUType_QString::set(QUObject*, QString const&) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#2 0x080fa04a in Player::expGained (this=0x847d118, t0=..., t1=84, t2=0, t3=...) at player.moc:592
#3 0x080fa340 in Player::updateExp (this=0x847d118, data=0x856d41d "^") at player.cpp:669
#4 0x080fc99c in Player::qt_invoke (this=0x847d118, _id=15, _o=0xbfffc380) at player.moc:737
#5 0x04185642 in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#6 0x080906cf in EQPacketDispatch::signal (this=0x841b230, t0=0x856d41d "^", t1=8, t2=2 '\002') at packetinfo.moc:99
#7 0x08089e19 in EQPacketStream::dispatchPacket (this=0x8307590, data=0x856d41d "^", len=8, opCode=8730, opcodeEntry=0x843e1f0) at packetstream.cpp:435
#8 0x0808c16a in EQPacketStream::processPacket (this=0x8307590, packet=..., isSubpacket=true) at packetstream.cpp:717
#9 0x0808c44a in EQPacketStream::processPacket (this=0x8307590, packet=..., isSubpacket=false) at packetstream.cpp:805
#10 0x0808ccc8 in EQPacketStream::handlePacket (this=0x8307590, packet=...) at packetstream.cpp:570
#11 0x08093322 in EQPacket::dispatchPacket (this=0x82cfbb0, packet=...) at packet.cpp:659
#12 0x08095bf5 in dispatchPacket (this=0x82cfbb0) at packet.cpp:583
#13 EQPacket::processPackets (this=0x82cfbb0) at packet.cpp:400
#14 0x08095ed0 in EQPacket::qt_invoke (this=0x82cfbb0, _id=2, _o=0xbfffe788) 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=0xbffff414) at main.cpp:737

fransick
04-01-2012, 10:36 AM
Narrowed it down to OP_ExpUpdate... struct looks correct for updates but it definitely doesn't like whatever is being sent when logging on my main. Commenting it out fixed the issue for now but still looking at it to see if I can figure out what the problem is. Will post changes here shortly.

fransick
04-01-2012, 04:56 PM
Below is a patch against the latest svn (revision 760). Still not sure why the ExpUpdate opcode is seg faulting some toons and not others. I set it to a bogus value in the patch below. It's a fairly large patch mainly due to the fact I rearranged opcodes so I could keep track of what I was doing. Working well for me, but looking for others to validate and check my work. There's a still a few opcodes with corresponding structs that I cannot find in the stream. Learning as I go.

Was able to work out the bazaarSearchResponseStruct to enable the old bazaar search log function. Baby steps, right?


--- conf/zoneopcodes.xml 2012-04-03 22:02:26.139390619 -0400
+++ conf/zoneopcodes.xml 2012-04-03 22:13:47.823949556 -0400
@@ -2,376 +2,516 @@
<!DOCTYPE seqopcodes SYSTEM "seqopcodes.dtd">
<seqopcodes>

- <!--
- Critical opcodes used directly by ShowEQ
- -->
- <opcode id="2339" name="OP_NpcMoveUpdate" updated="11/16/11">
+ <!-- Critical opcodes used directly by ShowEQ -->
+ <opcode id="2339" name="OP_NpcMoveUpdate" updated="03/23/12">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="45d7" name="OP_MovementHistory" updated="12/17/11">
- <comment></comment>
+ <opcode id="1910" name="OP_MovementHistory" updated="03/23/12">
+ <comment>Movement data... rewind info?</comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="0CAE" name="OP_DeleteSpawn" updated="11/16/11">
- <comment>old DeleteSpawnCode</comment>
+ <opcode id="28c7" name="OP_DeleteSpawn" updated="03/23/12">
+ <comment>DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5821" name="OP_ZoneEntry" updated="11/16/11">
- <comment>old ZoneEntryCode</comment>
+ <opcode id="5821" name="OP_ZoneEntry" updated="03/23/12">
+ <comment>ZoneEntryCode</comment>
<payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="102F" name="OP_GuildMOTD" updated="11/15/11">
+ <opcode id="1b7b" name="OP_GuildMOTD" updated="03/23/12">
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>
- <opcode id="0C54" name="OP_InspectAnswer" updated="11/15/11">
- <comment>old InspectDataCode</comment>
+ <opcode id="0c54" name="OP_InspectAnswer" updated="03/23/12">
+ <comment>InspectDataCode</comment>
<payload dir="both" typename="inspectDataStruct" sizechecktype="match"/>
</opcode>
- <opcode id="000F" name="OP_SendZonePoints" updated="10/15/10">
- <comment>Coords in a zone that will port you to another zone</comment>
- <payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
- </opcode>
- <opcode id="3EDC" name="OP_TargetMouse" updated="11/15/11">
+ <opcode id="3edc" name="OP_TargetMouse" updated="03/23/12">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>
- <opcode id="4878" name="OP_Shroud" updated="11/15/11">
+ <opcode id="1d51" name="OP_Shroud" updated="03/23/12">
<comment>Server putting players into shroud form</comment>
<payload dir="server" typename="spawnShroudSelf" sizechecktype="none"/>
</opcode>
- <opcode id="3671" name="OP_GroupFollow" updated="11/15/11">
+ <opcode id="3288" name="OP_GroupInvite" updated="03/23/12">
+ <payload dir="both" typename="groupInviteStruct" sizechecktype="none"/>
+ <comment>You invite someone while ungrouped or get invited by someone ungrouped </comment>
+ </opcode>
+ <opcode id="5251" name="OP_GroupInvite2" updated="03/23/12">
+ <payload dir="client" typename="groupInviteStruct" sizechecktype="match"/>
+ <comment>You're inviting someone and you are grouped or get invited by a group</comment>
+ </opcode>
+ <opcode id="74e9" name="OP_GroupFollow" updated="03/23/12">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
- <comment>You join a group</comment>
+ <comment>You join a group or player joins group</comment>
</opcode>
- <opcode id="44C2" name="OP_GroupFollow2" updated="11/15/11">
+ <opcode id="44c2" name="OP_GroupFollow2" updated="03/23/12">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>Player joins your group</comment>
</opcode>
- <opcode id="7139" name="OP_GroupUpdate" updated="11/15/11">
- <payload dir="server" typename="uint8_t" sizechecktype="none"/>
- <comment>Variable length packet with group member names</comment>
- </opcode>
- <opcode id="74E9" name="OP_GroupDisband" updated="11/15/11">
+ <opcode id="367b" name="OP_GroupDisband" updated="03/23/12">
<comment>You disband from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3C58" name="OP_GroupDisband2" updated="11/15/11">
+ <opcode id="4b82" name="OP_GroupDisband2" updated="03/23/12">
<comment>Other disbands from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
- <opcode id="4B82" name="OP_GroupLeader" updated="11/15/11">
+ <opcode id="5fe3" name="OP_GroupLeader" updated="03/23/12">
<comment>Group leader change</comment>
<payload dir="server" typename="groupLeaderChangeStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3BDD" name="OP_DzSwitchInfo" updated="10/21/09">
- <comment></comment>
+ <opcode id="2736" name="OP_GroupCancelInvite" updated="03/23/12">
+ <payload dir="both" typename="groupDeclineStruct" sizechecktype="match"/>
+ <comment>Declining to join a group</comment>
+ </opcode>
+ <opcode id="28ce" name="OP_DzSwitchInfo" updated="03/23/12">
+ <comment>Expedition compass etc</comment>
<payload dir="server" typename="dzSwitchInfo" sizechecktype="none"/>
</opcode>
- <opcode id="4C14" name="OP_DzInfo" updated="10/21/09">
- <comment></comment>
+ <opcode id="6c75" name="OP_DzInfo" updated="03/23/12">
+ <comment>Expedition Information</comment>
<payload dir="server" typename="dzInfo" sizechecktype="match"/>
</opcode>
- <opcode id="4675" name="OP_FormattedMessage" updated="11/15/11">
- <comment>old FormattedMessageCode</comment>
+ <opcode id="4675" name="OP_FormattedMessage" updated="03/23/12">
+ <comment>FormattedMessageCode</comment>
<payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="0E24" name="OP_SpawnDoor" updated="11/15/11">
- <comment>old DoorSpawnsCode</comment>
+ <opcode id="7113" name="OP_SpawnDoor" updated="03/23/12">
+ <comment>DoorSpawnsCode</comment>
<payload dir="server" typename="doorStruct" sizechecktype="modulus"/>
</opcode>
- <opcode id="1318" name="OP_AAExpUpdate" updated="12/17/11">
+ <opcode id="1318" name="OP_AAExpUpdate" updated="03/23/12">
<comment>Receiving AA experience. Also when percent to AA changes.</comment>
<payload dir="server" typename="altExpUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="2370" name="OP_HPUpdate" updated="11/16/11">
- <comment>old NpcHpUpdateCode Update HP % of a PC or NPC</comment>
+ <opcode id="2369" name="OP_HPUpdate" updated="03/23/12">
+ <comment>NpcHpUpdateCode Update HP % of a PC or NPC</comment>
<payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0ff4" name="OP_ManaUpdate" updated="04/18/11">
- <comment>Mana Update opcode</comment>
- </opcode>
- <opcode id="2370" name="OP_EndUpdate" updated="05/19/11">
- <comment>Endurance Update opcode</comment>
- </opcode>
- <opcode id="589f" name="OP_GuildMemberUpdate" updated="12/17/11">
- <comment></comment>
+ <opcode id="589f" name="OP_GuildMemberUpdate" updated="03/23/12">
+ <comment>Info regarding guild members</comment>
<payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/>
</opcode>
- <opcode id="1055" name="OP_SpawnRename" updated="12/17/11">
+ <opcode id="0598" name="OP_SpawnRename" updated="03/23/12">
<comment>Spawns getting renamed after initial NewSpawn</comment>
<payload dir="server" typename="spawnRenameStruct" sizechecktype="match"/>
</opcode>
- <opcode id="03CC" name="OP_GroupInvited" updated="11/15/11">
- <payload dir="server" typename="groupInviteStruct" sizechecktype="match"/>
- <comment>You got invited to a group</comment>
- </opcode>
- <opcode id="3288" name="OP_GroupInvite" updated="11/15/11">
- <payload dir="both" typename="groupInviteStruct" sizechecktype="none"/>
- <comment>You invite or get invited</comment>
- </opcode>
- <opcode id="28A7" name="OP_SwapSpell" updated="11/15/11">
- <comment>old TradeSpellBookSlotsCode</comment>
+ <opcode id="28a7" name="OP_SwapSpell" updated="03/23/12">
+ <comment>TradeSpellBookSlotsCode</comment>
<payload dir="both" typename="tradeSpellBookSlotsStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0698" name="OP_SimpleMessage" updated="11/15/11">
- <comment>old SimpleMessageCode</comment>
+ <opcode id="0698" name="OP_SimpleMessage" updated="03/23/12">
+ <comment>SimpleMessageCode</comment>
<payload dir="server" typename="simpleMessageStruct" sizechecktype="match"/>
</opcode>
- <opcode id="039D" name="OP_SpecialMesg" updated="11/15/11">
+ <opcode id="039d" name="OP_SpecialMesg" updated="03/23/12">
<comment>Communicate textual info to client</comment>
<payload dir="server" typename="specialMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="303E" name="OP_RandomReq" updated="11/15/11">
- <comment>old RandomReqCode</comment>
+ <opcode id="303E" name="OP_RandomReq" updated="03/23/12">
+ <comment>RandomReqCode</comment>
<payload dir="client" typename="randomReqStruct" sizechecktype="match"/>
</opcode>
- <opcode id="2C03" name="OP_ConsentResponse" updated="11/15/11">
+ <opcode id="35c6" name="OP_ConsentResponse" updated="03/23/12">
<comment>Server replying with consent information after /consent</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="0AAA" name="OP_DenyResponse" updated="11/15/11">
+ <opcode id="0370" name="OP_DenyResponse" updated="03/23/12">
<comment>Server replying with deny information after /deny</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="2881" name="OP_BazaarSearch" updated="12/17/11">
+ <opcode id="2881" name="OP_BazaarSearch" updated="03/23/12">
<payload dir="client" typename="bazaarSearchQueryStruct" sizechecktype="none"/>
<payload dir="server" typename="bazaarSearchResponseStruct" sizechecktype="modulus"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
<comment>Bazaar search tool</comment>
</opcode>
- <opcode id="1A58" name="OP_WearChange" updated="11/15/11">
- <comment>old SpawnUpdateCode</comment>
+ <opcode id="1a58" name="OP_WearChange" updated="03/23/12">
+ <comment>SpawnUpdateCode</comment>
<payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3E17" name="OP_SpawnAppearance" updated="10/21/09">
- <comment>old SpawnAppearanceCode</comment>
- <payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/>
- </opcode>
- <opcode id="7686" name="OP_Stamina" updated="12/17/11">
+ <opcode id="7686" name="OP_Stamina" updated="03/23/12">
<comment>Server updating on hunger/thirst</comment>
<payload dir="server" typename="staminaStruct" sizechecktype="match"/>
</opcode>
- <opcode id="70C6" name="OP_Consider" updated="11/16/11">
- <comment>old ConsiderCode</comment>
+ <opcode id="70c6" name="OP_Consider" updated="03/23/12">
+ <comment>ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1111" name="OP_ZoneChange" updated="04/18/11">
- <comment>old ZoneChangeCode</comment>
- <payload dir="both" typename="zoneChangeStruct" sizechecktype="match"/>
- </opcode>
- <opcode id="0000" name="OP_Buff" updated="11/15/11">
- <comment>old BuffDropCode</comment>
- <payload dir="both" typename="buffStruct" sizechecktype="match"/>
- </opcode>
- <opcode id="44AE" name="OP_Logout" updated="10/21/09">
- <comment></comment>
- <payload dir="server" typename="none" sizechecktype="match"/>
- </opcode>
- <opcode id="2736" name="OP_GroupInvite2" updated="11/15/11">
- <payload dir="client" typename="groupInviteStruct" sizechecktype="match"/>
- <comment>You're inviting someone and you are grouped</comment>
- </opcode>
- <opcode id="6C16" name="OP_GroupCancelInvite" updated="11/15/11">
- <payload dir="both" typename="groupDeclineStruct" sizechecktype="match"/>
- <comment>Declining to join a group</comment>
- </opcode>
- <opcode id="4118" name="OP_NewZone" updated="11/16/11">
- <comment>old NewZoneCode</comment>
+ <opcode id="43ac" name="OP_NewZone" updated="03/23/12">
+ <comment>NewZoneCode</comment>
<payload dir="server" typename="newZoneStruct" sizechecktype="match"/>
</opcode>
- <opcode id="5C85" name="OP_GroundSpawn" updated="11/15/11">
- <comment>old MakeDropCode</comment>
+ <opcode id="33e5" name="OP_GroundSpawn" updated="03/23/12">
+ <comment>MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="none"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="0555" name="OP_ExpUpdate" updated="06/12/09">
- <comment>old ExpUpdateCode</comment>
- <payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
- </opcode>
- <opcode id="58c5" name="OP_RemoveSpawn" updated="11/16/11">
+ <opcode id="3164" name="OP_RemoveSpawn" updated="03/23/12">
<comment>Remove spawn from zone</comment>
<payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>
- <opcode id="799C" name="OP_Death" updated="11/16/11">
+ <opcode id="6685" name="OP_Death" updated="03/23/12">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="33E5" name="OP_ClickObject" updated="11/15/11">
- <comment>old RemDropCode</comment>
+ <opcode id="5f0d" name="OP_ClickObject" updated="03/23/12">
+ <comment>Items dropped on the ground</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>
- <opcode id="7F9E" name="OP_Action" updated="11/15/11">
- <comment></comment>
+ <opcode id="1b85" name="OP_Action" updated="03/23/12">
+ <comment>Spells cast etc</comment>
<payload dir="both" typename="actionStruct" sizechecktype="match"/>
<payload dir="both" typename="actionAltStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3EA8" name="OP_Action2" updated="11/15/11">
- <comment>old ActionCode</comment>
+ <opcode id="631a" name="OP_Action2" updated="03/23/12">
+ <comment>Combat actions i.e. bash, kick etc</comment>
<payload dir="both" typename="action2Struct" sizechecktype="match"/>
</opcode>
- <opcode id="4843" name="OP_Illusion" updated="11/15/11">
+ <opcode id="10b7" name="OP_Illusion" updated="03/23/12">
<comment>Spawn being illusioned (changing forms)</comment>
<payload dir="both" typename="spawnIllusionStruct" sizechecktype="match"/>
</opcode>
- <opcode id="8543" name="OP_BuffFadeMsg" updated="11/15/11">
- <comment>old SpellFadeCode</comment>
+ <opcode id="3887" name="OP_BuffFadeMsg" updated="03/23/12">
+ <comment>SpellFadeCode</comment>
<payload dir="both" typename="spellFadedStruct" sizechecktype="none"/>
</opcode>
- <opcode id="569A" name="OP_CastSpell" updated="11/15/11">
- <comment>old StartCastCode</comment>
+ <opcode id="71bf" name="OP_CastSpell" updated="03/23/12">
+ <comment>StartCastCode</comment>
<payload dir="both" typename="startCastStruct" sizechecktype="match"/>
</opcode>
- <opcode id="1B8A" name="OP_MemorizeSpell" updated="11/15/11">
- <comment>old MemSpellCode</comment>
+ <opcode id="2917" name="OP_MemorizeSpell" updated="03/23/12">
+ <comment>MemSpellCode</comment>
<payload dir="both" typename="memSpellStruct" sizechecktype="match"/>
</opcode>
- <opcode id="3164" name="OP_Emote" updated="11/15/11">
- <comment>old EmoteTextCode</comment>
+ <opcode id="7434" name="OP_Emote" updated="03/23/12">
+ <comment>EmoteTextCode</comment>
<payload dir="both" typename="emoteTextStruct" sizechecktype="none"/>
</opcode>
- <opcode id="07FB" name="OP_RandomReply" updated="11/15/11">
- <comment>old RandomCode</comment>
+ <opcode id="07fb" name="OP_RandomReply" updated="03/23/12">
+ <comment>RandomCode</comment>
<payload dir="server" typename="randomStruct" sizechecktype="match"/>
</opcode>
- <opcode id="71BF" name="OP_ManaChange" updated="11/15/11">
+ <opcode id="8543" name="OP_ManaChange" updated="03/23/12">
<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"/>
</opcode>
- <opcode id="7165" name="OP_MoneyOnCorpse" updated="11/15/11">
- <comment>old MoneyOnCorpseCode</comment>
+ <opcode id="4074" name="OP_MoneyOnCorpse" updated="03/23/12">
+ <comment>MoneyOnCorpseCode</comment>
<payload dir="server" typename="moneyOnCorpseStruct" sizechecktype="match"/>
</opcode>
- <opcode id="2222" name="OP_CorpseLocResponse" updated="06/12/09">
- <comment>old CorpseLocCode:</comment>
- <payload dir="server" typename="corpseLocStruct" sizechecktype="match"/>
- </opcode>
- <opcode id="6AFD" name="OP_PlayerProfile" updated="11/16/11">
- <comment>old CharProfileCode</comment>
+ <opcode id="6afd" name="OP_PlayerProfile" updated="03/23/12">
+ <comment>CharProfileCode</comment>
<payload dir="server" typename="charProfileStruct" sizechecktype="match"/>
</opcode>
- <opcode id="6015" name="OP_TimeOfDay" updated="01/17/08">
- <comment>old TimeOfDayCode</comment>
+ <opcode id="6015" name="OP_TimeOfDay" updated="03/23/12">
+ <comment>TimeOfDayCode</comment>
<payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/>
</opcode>
- <opcode id="51BC" name="OP_GuildMemberList" updated="12/17/11">
- <comment></comment>
- <payload dir="server" typename="uint8_t" sizechecktype="none"/>
- </opcode>
- <opcode id="7062" name="OP_ClientUpdate" updated="11/15/11">
+ <opcode id="7062" name="OP_ClientUpdate" updated="03/23/12">
<comment>Position updates</comment>
<payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/>
<payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/>
</opcode>
- <opcode id="4656" name="OP_MobUpdate" updated="01/17/08">
- <comment>old MobUpdateCode</comment>
- <payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/>
- </opcode>
- <opcode id="0D5A" name="OP_BeginCast" updated="01/17/08">
- <comment>old BeginCastCode</comment>
+ <opcode id="0d5a" name="OP_BeginCast" updated="03/23/12">
+ <comment>BeginCastCode</comment>
<payload dir="both" typename="beginCastStruct" sizechecktype="match"/>
</opcode>
- <opcode id="2E79" name="OP_CommonMessage" updated="11/15/11">
- <comment>old ChannelMessageCode</comment>
+ <opcode id="2e79" name="OP_CommonMessage" updated="03/23/12">
+ <comment>ChannelMessageCode</comment>
<payload dir="both" typename="channelMessageStruct" sizechecktype="none"/>
</opcode>
- <opcode id="7F01" name="OP_SkillUpdate" updated="11/15/11">
- <comment>old SkillIncCode</comment>
+ <opcode id="7f01" name="OP_SkillUpdate" updated="03/23/12">
+ <comment>Skill up code</comment>
<payload dir="server" typename="skillIncStruct" sizechecktype="match"/>
</opcode>
- <opcode id="6A99" name="OP_LevelUpdate" updated="01/17/08">
- <comment>old LevelUpUpdateCode</comment>
+ <opcode id="3f55" name="OP_SpawnAppearance" updated="03/23/12">
+ <comment>SpawnAppearanceCode</comment>
+ <payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/>
+ </opcode>
+ <opcode id="0000" name="OP_ExpUpdate" updated="03/23/12">
+ <comment>ExpUpdateCode - opcode looks to be 221a as of 03/23/12 but that value causes seg faults for some reason</comment>
+ <payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
+ </opcode>
+ <opcode id="6e1c" name="OP_LevelUpdate" updated="03/23/12">
+ <comment>LevelUpUpdateCode</comment>
<payload dir="server" typename="levelUpUpdateStruct" sizechecktype="match"/>
</opcode>
+ <opcode id="3703" name="OP_LeaderExpUpdate" updated="03/23/12">
+ <comment>Leadership AA Exp Update</comment>
+ <payload dir="server" typename="leadExpUpdateStruct" sizechecktype="match"/>
+ </opcode>
+ <opcode id="4656" name="OP_MobUpdate" updated="03/23/12">
+ <comment>MobUpdateCode</comment>
+ <payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/>
+ </opcode>
+ <opcode id="358a" name="OP_Trader" updated="03/23/12">
+ <comment>PC's turning trader on and off</comment>
+ <payload dir="server" typename="bazaarTraderRequest" sizechecktype="match"/>
+ </opcode>
+ <opcode id="6bb9" name="OP_Consent" updated="03/23/12">
+ <comment>/consent someone</comment>
+ <payload dir="client" typename="consentRequestStruct" sizechecktype="none"/>
+ </opcode>
+ <opcode id="6b7f" name="OP_ConsentDeny" updated="03/23/12">
+ <comment>/deny someone</comment>
+ <payload dir="client" typename="consentRequestStruct" sizechecktype="none"/>
+ </opcode>
+ <opcode id="2dd3" name="OP_ItemPacket" updated="03/23/12">
+ <comment>ItemCode</comment>
+ <payload dir="server" typename="itemPacketStruct" sizechecktype="none"/>
+ </opcode>
+ <opcode id="24c9" name="OP_ItemLinkResponse" updated="03/23/12">
+ <comment>ItemInfoCode</comment>
+ <payload dir="server" typename="itemInfoStruct" sizechecktype="none"/>
+ <payload dir="client" typename="itemInfoReqStruct" sizechecktype="none"/>
+ </opcode>
+ <opcode id="2730" name="OP_EnvDamage" updated="03/23/12">
+ <comment>Environmental Damage</comment>
+ <payload dir="client" typename="environmentDamageStruct" sizechecktype="match"/>
+ </opcode>

<!-- Not necessary for SEQ to run but here to name packets in logs. -->
- <opcode id="758c" name="OP_Marketplace" updated="12/17/11">
- <comment>Marketplace data</comment>
+ <opcode id="367f" name="OP_GroupUpdate" updated="03/23/12">
+ <payload dir="server" typename="uint8_t" sizechecktype="none"/>
+ <comment>Variable length packet with group member names</comment>
</opcode>
- <opcode id="097f" name="OP_WelcomeScreenTitle" updated="05/16/11">
- <comment></comment>
+ <opcode id="51bc" name="OP_GuildMemberList" updated="03/23/12">
+ <comment>List of guild members</comment>
+ <payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
- <opcode id="5d0f" name="OP_VeteranRewards" update="04/18/11">
- <comment></comment>
+ <opcode id="7c94" name="OP_ManaUpdate" updated="03/23/121">
+ <comment>Mana Update opcode</comment>
</opcode>
- <opcode id="7209" name="OP_WelcomeScreenURL" updated="05/16/11">
- <comment></comment>
+ <opcode id="5851" name="OP_EndUpdate" updated="03/23/12">
+ <comment>Endurance Update opcode</comment>
</opcode>
- <opcode id="3B85" name="OP_SendAATable" updated="08/12/09">
- <comment></comment>
+ <opcode id="7c11" name="OP_Marketplace" updated="03/23/12">
+ <comment>Marketplace data</comment>
</opcode>
- <opcode id="5832" name="OP_SendAAStats" updated="08/12/09">
- <comment></comment>
+ <opcode id="012f" name="OP_DzMembers" updated="03/23/12">
+ <comment>Expedition Members</comment>
</opcode>
- <opcode id="4e99" name="OP_Claims" updated="12/17/11">
+ <opcode id="4292" name="OP_Campfire" updated="03/23/12">
+ <comment>Fellowship campfire information</comment>
+ </opcode>
+ <opcode id="3637" name="OP_Claims" updated="03/23/12">
<comment>Contents of claims window</comment>
</opcode>
- <opcode id="2864" name="OP_PollQuestions" updated="12/17/11">
+ <opcode id="0fd3" name="OP_VoiceChat" updated="03/23/12">
+ <comment>Voice chat server info?</comment>
+ </opcode>
+ <opcode id="47b3" name="OP_PollQuestions" updated="03/23/12">
<comment>SOE in-game player poll questions</comment>
</opcode>
- <opcode id="0f6d" name="OP_PollResponses" updated="12/17/11">
+ <opcode id="a1e6" name="OP_PollResponses" updated="03/23/12">
<comment>Poll response choices</comment>
</opcode>
- <opcode id="2071" name="OP_ShroudProgression" updated="12/17/11">
+ <opcode id="064d" name="OP_ShroudProgression" updated="03/23/12">
<comment>Unlocked shrouds</comment>
</opcode>
- <opcode id="01e5" name="OP_Fellowship" updated="12/17/11">
+ <opcode id="01e5" name="OP_Fellowship" updated="03/23/12">
<comment>Fellowship information</comment>
</opcode>
- <opcode id="4274" name="OP_ExpandedGuildInfo" updated="12/17/11">
+ <opcode id="03d1" name="OP_ExpandedGuildInfo" updated="03/23/12">
<comment>Variable length guild ranks and other misc guild data</comment>
</opcode>
- <opcode id="6255" name="OP_GuildBank" updated="12/17/11">
+ <opcode id="7b22" name="OP_GuildBank" updated="03/23/12">
<comment>Guild bank contents</comment>
</opcode>
- <opcode id="1d40" name="OP_OpenTradeskillContainer" updated="12/17/11">
+ <opcode id="29df" name="OP_OpenTradeskillContainer" updated="03/23/12">
<comment>Opens forge, kiln etc</comment>
</opcode>
- <opcode id="6fb9" name="OP_TradeskillRecipes" updated="12/17/11">
+ <opcode id="1ecf" name="OP_TradeskillRecipes" updated="03/23/12">
<comment>Learned recipes</comment>
</opcode>
- <opcode id="2369" name="OP_Unknown1" updated="02/13/07">
- <comment>Unkown packets that spam logs. Marked here to make reading logs easier</comment>
+ <opcode id="6cfe" name="OP_ItemPlayerPacket" updated="03/23/12">
+ <comment>Inventory/bank items coming over during zone</comment>
+ <payload dir="server" typename="uint8_t" sizechecktype="none"/>
+ </opcode>
+ <opcode id="2E4F" name="OP_TaskDescription" updated="03/23/12">
+ <comment>Task descriptions coming down for task window</comment>
+ </opcode>
+ <opcode id="512B" name="OP_TaskActivity" updated="03/23/12">
+ <comment>Task activity descriptions coming down for task window</comment>
+ </opcode>
+ <opcode id="3141" name="OP_CompletedTasks" updated="03/23/12">
+ <comment>Task history for task window</comment>
+ </opcode>
+ <opcode id="6ade" name="OP_CustomTitles" updated="03/23/12">
+ <comment>List of available titles</comment>
+ </opcode>
+ <opcode id="0b93" name="OP_Animation" updated="03/23/12">
+ <comment>Combat animation, emote animations etc</comment>
+ </opcode>
+ <opcode id="177a" name="OP_WhoAllRequest" updated="03/23/12">
+ <comment>old WhoAllReqCode</comment>
+ </opcode>
+ <opcode id="15de" name="OP_WhoAllResponse" updated="03/23/12">
+ <comment>sWhoAllOutputCode</comment>
+ </opcode>
+ <opcode id="2683" name="OP_InspectRequest" updated="03/23/12">
+ <comment>InspectRequestCode</comment>
+ </opcode>
+ <opcode id="709d" name="OP_GetGuildMOTD" updated="03/23/12">
+ <comment>GuildMOTD</comment>
+ </opcode>
+ <opcode id="0c24" name="OP_TradeRequest" updated="03/23/12">
+ <comment>Client request trade session</comment>
+ </opcode>
+ <opcode id="2c03" name="OP_TradeDeny" updated="03/23/12">
+ <comment>Target not ready to trade</comment>
+ </opcode>
+ <opcode id="606a" name="OP_TradeRequestAck" updated="03/23/12">
+ <comment>Trade request recipient is acknowledging they are able to trade</comment>
+ </opcode>
+ <opcode id="527e" name="OP_CancelTrade" updated="03/23/12">
+ <comment>Cancel a trade window</comment>
</opcode>
- <opcode id="7C94" name="OP_Unknown2" updated="02/13/07">
- <comment>Unkown packets that spam logs. Marked here to make reading logs easier</comment>
+ <opcode id="1ebb" name="OP_FinishTrade" updated="03/23/12">
+ <comment>Trade is over</comment>
</opcode>
- <opcode id="5851" name="OP_Unknown3" updated="02/13/07">
- <comment>Unkown packets that spam logs. Marked here to make reading logs easier</comment>
+ <opcode id="1418" name="OP_TradeCoins" updated="03/23/12">
+ <comment>Coins put in trade window</comment>
+ </opcode>
+ <opcode id="064a" name="OP_TradeAcceptClick" updated="03/23/12">
+ <comment>One side clicks Accept on the trade</comment>
</opcode>
- <opcode id="3333" name="OP_Unknown4" updated="02/13/07">
- <comment>Unkown packets that spam logs. Marked here to make reading logs easier</comment>
+ <opcode id="6948" name="OP_ItemLinkClick" updated="03/23/12">
+ <comment>Click on itemlinks</comment>
+ </opcode>
+ <opcode id="00bc" name="OP_EndLootRequest" updated="03/23/12">
+ <comment>DoneLootingCode</comment>
+ </opcode>
+ <opcode id="5bd9" name="OP_LootItem" updated="03/23/12">
+ <comment>Loot item from corpse</comment>
+ </opcode>
+ <opcode id="79e0" name="OP_Track" updated="03/23/12">
+ <comment>Clicked Track</comment>
</opcode>
- <opcode id="4444" name="OP_Unknown5" updated="02/13/07">
- <comment>Unkown packets that spam logs. Marked here to make reading logs easier</comment>
+ <opcode id="49f4" name="OP_TraderShop" updated="03/23/12">
+ <comment>OpenTraderCode right-click on a trader in bazaar</comment>
</opcode>
- <opcode id="5555" name="OP_Unknown6" updated="02/13/07">
- <comment>Unkown packets that spam logs. Marked here to make reading logs easier</comment>
+ <opcode id="2257" name="OP_AutoAttack" updated="03/23/12">
+ <comment>Attack on/off</comment>
+ </opcode>
+ <opcode id="701f" name="OP_AutoAttack2" updated="03/23/12">
+ <comment>Attack on/off appears to be same as OP_AutoAttack</comment>
+ </opcode>
+ <opcode id="48f9" name="OP_ClickDoor" updated="03/23/12">
+ <comment>DoorOpenCode click request from client</comment>
+ <payload dir="client" typename="uint8_t" sizechecktype="none"/>
+ </opcode>
+ <opcode id="231f" name="OP_MoveDoor" updated="03/23/12">
+ <comment>DoorClickCode response from server</comment>
+ <payload dir="server" typename="uint8_t" sizechecktype="none"/>
+ </opcode>
+ <opcode id="2963" name="OP_MoveItem" updated="03/23/12">
+ <comment>Client moving an item from one slot to another</comment>
+ </opcode>
+ <opcode id="783c" name="OP_TraderBuy" updated="03/23/12">
+ <comment>buy from a trader in bazaar</comment>
+ </opcode>
+ <opcode id="1d85" name="OP_LootRequest" updated="03/23/12">
+ <comment>LootCorpseCode</comment>
+ <payload dir="client" typename="unknown" sizechecktype="none"/>
+ </opcode>
+ <opcode id="08b3" name="OP_Jump" updated="03/23/12">
+ <comment>JumpCode</comment>
+ <payload dir="client" typename="unknown" sizechecktype="none"/>
+ </opcode>
+ <opcode id="3672" name="OP_TGB" updated="03/23/12">
+ <comment>Client telling server to set targetgroupbuff</comment>
+ </opcode>
+ <opcode id="488b" name="OP_Lockouts" updated="03/23/12">
+ <comment>Client requesting lockouts</comment>
+ </opcode>
+ <opcode id="3ef9" name="OP_WelcomeScreenURL" updated="03/23/12">
+ <comment>URLs for the welcome screen window</comment>
+ </opcode>
+ <opcode id="550f" name="OP_RaidJoin" updated="03/23/12">
+ <comment>Client side raid invite requests</comment>
+ <payload dir="client" typename="unknown" sizechecktype="none"/>
+ </opcode>
+ <opcode id="0c08" name="OP_RaidInvite" updated="03/23/12">
+ <comment>Server side raid information</comment>
+ <payload dir="server" typename="unknown" sizechecktype="none"/>
+ </opcode>
+ <opcode id="52b5" name="OP_Feedback" updated="03/23/12">
+ <comment>Client sending feedback to server</comment>
+ </opcode>
+ <opcode id="5b0b" name="OP_GuildsList" updated="03/23/12">
+ <comment>Listing of all guilds</comment>
+ </opcode>
+ <opcode id="20c6" name="OP_LFGGetMatchesRequest" updated="03/23/12">
+ <comment>LFG/LFP client request</comment>
+ </opcode>
+ <opcode id="3d0c" name="OP_LFGGetMatchesResponse" updated="03/23/12">
+ <comment>FLG/LFP server response</comment>
</opcode>

+ <!-- 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="5cb0" name="OP_Unknown1" updated="03/23/12">
+ <comment>3 byte opcode that spam logs. Marked here to make reading logs easier</comment>
+ <payload dir="server" typename="unknown" sizechecktype="none"/>
+ </opcode>
+ <opcode id="4d27" name="OP_Unknown2" updated="03/23/12">
+ <comment>3 byte opcode that spam logs. Marked here to make reading logs easier</comment>
+ <payload dir="server" typename="unknown" sizechecktype="none"/>
+ </opcode>
+ <opcode id="190c" name="OP_Unknown3" updated="03/23/12">
+ <comment>3 byte opcode that spam logs. Marked here to make reading logs easier</comment>
+ <payload dir="server" typename="unknown" sizechecktype="none"/>
+ </opcode>

- <!-- Below are unverified as of 12-1-2007 -->
- <opcode id="4d38" name="OP_AckPacket" updated="03/14/07">
- <comment>Appears to be generic ack at the presentation level</comment>
+ <!-- Below are unverified -->
+ <opcode id="0000" name="OP_Buff" updated="11/15/11">
+ <comment>old BuffDropCode</comment>
+ <payload dir="both" typename="buffStruct" sizechecktype="match"/>
</opcode>
- <opcode id="71fb" name="OP_TributeUpdate" updated="03/14/07">
- <comment>Tribute information</comment>
+ <opcode id="0000" name="OP_ZoneChange" updated="04/18/11">
+ <comment>old ZoneChangeCode</comment>
+ <payload dir="both" typename="zoneChangeStruct" sizechecktype="match"/>
</opcode>
- <opcode id="4849" name="OP_ItemPlayerPacket" updated="11/15/11">
- <comment>Inventory/bank items coming over during zone</comment>
- <payload dir="server" typename="uint8_t" sizechecktype="none"/>
+ <opcode id="0000" name="OP_CorpseLocResponse" updated="06/12/09">
+ <comment>old CorpseLocCode:</comment>
+ <payload dir="server" typename="corpseLocStruct" sizechecktype="match"/>
</opcode>
- <opcode id="2E4F" name="OP_TaskDescription" updated="12/17/11">
- <comment>Task descriptions coming down for task window</comment>
+ <opcode id="0000" name="OP_SendZonePoints" updated="10/15/10">
+ <comment>Coords in a zone that will port you to another zone</comment>
+ <payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
</opcode>
- <opcode id="512B" name="OP_TaskActivity" updated="12/17/11">
- <comment>Task activity descriptions coming down for task window</comment>
+ <opcode id="24D8" 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"/>
</opcode>
- <opcode id="6D1F" name="OP_CompletedTasks" updated="12/17/11">
- <comment>Task history for task window</comment>
+ <opcode id="44AE" name="OP_Logout" updated="10/21/09">
+ <comment></comment>
+ <payload dir="server" typename="none" sizechecktype="match"/>
+ </opcode>
+ <opcode id="097f" name="OP_WelcomeScreenTitle" updated="05/16/11">
+ <comment></comment>
+ </opcode>
+ <opcode id="5d0f" name="OP_VeteranRewards" update="04/18/11">
+ <comment></comment>
+ </opcode>
+ <opcode id="3B85" name="OP_SendAATable" updated="08/12/09">
+ <comment></comment>
+ </opcode>
+ <opcode id="5832" name="OP_SendAAStats" updated="08/12/09">
+ <comment></comment>
+ </opcode>
+ <opcode id="4d38" name="OP_AckPacket" updated="03/14/07">
+ <comment>Appears to be generic ack at the presentation level</comment>
+ </opcode>
+ <opcode id="71fb" name="OP_TributeUpdate" updated="03/14/07">
+ <comment>Tribute information</comment>
</opcode>
<opcode id="70a5" name="OP_Weather" updated="03/14/07">
<comment>old WeatherCode</comment>
@@ -379,13 +519,10 @@
<opcode id="5417" name="OP_ReqNewZone" updated="03/14/07">
<comment>Client requesting NewZone_Struct</comment>
</opcode>
- <opcode id="0D8A" name="OP_CustomTitles" updated="11/15/11">
- <comment>List of available titles</comment>
- </opcode>
<opcode id="45d2" name="OP_ReqClientSpawn" updated="03/14/07">
<comment>Client requesting spawn data</comment>
</opcode>
- <opcode id="3703" name="OP_SendExpZonein" updated="03/14/07">
+ <opcode id="0000" name="OP_SendExpZonein" updated="03/14/07">
<comment>Both directions. Negotiating sending of exp info.</comment>
</opcode>
<opcode id="0a4f" name="OP_AAAction" updated="03/14/07">
@@ -397,15 +534,6 @@
<opcode id="3854" name="OP_ClientReady" updated="03/14/07">
<comment></comment>
</opcode>
- <opcode id="0137" name="OP_TGB" updated="03/14/07">
- <comment>Client telling server to set targetgroupbuff</comment>
- </opcode>
- <opcode id="237e" name="OP_RaidJoin" updated="03/14/07">
- <comment></comment>
- </opcode>
- <opcode id="7161" name="OP_GuildExtendedInfo" updated="03/14/07">
- <comment>Extra guild info (i.e. chat channel, url)</comment>
- </opcode>
<opcode id="6774" name="OP_GuildTributeStatus" updated="03/14/07">
<comment>Guild tribute stats send on zone</comment>
</opcode>
@@ -415,9 +543,6 @@
<opcode id="063b" name="OP_RespawnWindow" updated="03/14/07">
<comment>Server telling client enough to populate the respawn window when you die</comment>
</opcode>
- <opcode id="0B93" name="OP_Animation" updated="12/17/11">
- <comment></comment>
- </opcode>
<opcode id="010D" name="OP_InitialMobHealth" updated="03/14/07">
<comment>Initial health sent when a player clicks on the mob. Subsequent updated will be OP_MobHealth</comment>
</opcode>
@@ -427,63 +552,9 @@
<opcode id="16c1" name="OP_DeltaCheck" updated="03/14/07">
<comment>Client sending server delta information.</comment>
</opcode>
- <opcode id="24D8" 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"/>
- </opcode>
- <opcode id="117A" name="OP_WhoAllRequest" updated="11/15/11">
- <comment>old WhoAllReqCode</comment>
- </opcode>
- <opcode id="15DE" name="OP_WhoAllResponse" updated="11/15/11">
- <comment>old sWhoAllOutputCode</comment>
- </opcode>
<opcode id="61ac" name="OP_LoadSpellSet" updated="02/13/07">
<comment>/mem spellsetname</comment>
</opcode>
- <opcode id="2683" name="OP_InspectRequest" updated="12/17/11">
- <comment>old InspectRequestCode</comment>
- </opcode>
- <opcode id="1B7B" name="OP_GetGuildMOTD" updated="12/17/11">
- <comment></comment>
- </opcode>
- <opcode id="00AA" name="OP_TradeRequest" updated="12/17/11">
- <comment>Client request trade session</comment>
- </opcode>
- <opcode id="606A" name="OP_TradeRequestAck" updated="12/17/11">
- <comment>Trade request recipient is acknowledging they are able to trade</comment>
- </opcode>
- <opcode id="527E" name="OP_CancelTrade" updated="12/17/11">
- <comment>Cancel a trade window</comment>
- </opcode>
- <opcode id="1EBB" name="OP_FinishTrade" updated="12/17/11">
- <comment>Trade is over</comment>
- </opcode>
- <opcode id="1418" name="OP_TradeCoins" updated="12/17/11">
- <comment>Coins put in trade window</comment>
- </opcode>
- <opcode id="064A" name="OP_TradeAcceptClick" updated="12/17/11">
- <comment>One side clicks Accept on the trade</comment>
- </opcode>
- <opcode id="6BB9" name="OP_Consent" updated="11/15/11">
- <comment>/consent someone</comment>
- <payload dir="client" typename="consentRequestStruct" sizechecktype="none"/>
- </opcode>
- <opcode id="7CAE" name="OP_ConsentDeny" updated="11/15/11">
- <comment>/deny someone</comment>
- <payload dir="client" typename="consentRequestStruct" sizechecktype="none"/>
- </opcode>
- <opcode id="3DF8" name="OP_ItemPacket" updated="11/15/11">
- <comment>old ItemCode</comment>
- <payload dir="server" typename="itemPacketStruct" sizechecktype="none"/>
- </opcode>
- <opcode id="6948" name="OP_ItemLinkClick" updated="12/17/11">
- <comment></comment>
- </opcode>
- <opcode id="24C9" name="OP_ItemLinkResponse" updated="12/17/11">
- <comment>old ItemInfoCode</comment>
- <payload dir="server" typename="itemInfoStruct" sizechecktype="none"/>
- <payload dir="client" typename="itemInfoReqStruct" sizechecktype="none"/>
- </opcode>
<opcode id="00de" name="OP_Dye" updated="10/27/05">
<comment></comment>
</opcode>
@@ -497,28 +568,9 @@
<opcode id="68ac" name="OP_LFGCommand" updated="10/27/05">
<comment>old LFGReqCode</comment>
</opcode>
- <opcode id="022f" name="OP_LFGGetMatchesRequest" updated="10/27/05">
- <comment></comment>
- </opcode>
- <opcode id="4074" name="OP_EndLootRequest" updated="11/15/11">
- <comment>old cDoneLootingCode</comment>
- </opcode>
- <opcode id="5BD9" name="OP_LootItem" updated="11/15/11">
- <comment></comment>
- </opcode>
<opcode id="7ac3" name="OP_Bug" updated="10/27/05">
<comment>/bug</comment>
</opcode>
- <opcode id="1ac1" name="OP_Track" updated="12/17/11">
- <comment>Clicked Track</comment>
- </opcode>
- <opcode id="0681" name="OP_TraderShop" updated="06/29/05">
- <comment>old OpenTraderCode right-click on a trader in bazaar</comment>
- </opcode>
- <opcode id="66f0" name="OP_Trader" updated="06/29/05">
- <comment>People turning trader on and off</comment>
- <payload dir="server" typename="bazaarTraderRequest" sizechecktype="match"/>
- </opcode>
<opcode id="5c06" name="OP_Save" updated="04/19/06">
<comment>Client asking server to save user state</comment>
</opcode>
@@ -528,12 +580,6 @@
<opcode id="fe13" name="OP_ShopPlayerSell" updated="10/27/05">
<comment>old SellItemCode</comment>
</opcode>
- <opcode id="4b88" name="OP_AutoAttack" updated="02/13/07">
- <comment></comment>
- </opcode>
- <opcode id="3299" name="OP_AutoAttack2" updated="02/13/07">
- <comment></comment>
- </opcode>
<opcode id="10a1" name="OP_PetCommands" updated="10/27/05">
<comment></comment>
</opcode>
@@ -547,9 +593,6 @@
<comment>old CloseVendorCode</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="231F" name="OP_MoveDoor" updated="11/15/11">
- <comment>old DoorClickCode</comment>
- </opcode>
<opcode id="5666" name="OP_SenseTraps" updated="10/27/05">
<comment></comment>
</opcode>
@@ -559,10 +602,6 @@
<opcode id="528F" name="OP_LootComplete" updated="12/07/05">
<comment>old sDoneLootingCode</comment>
</opcode>
- <opcode id="3980" name="OP_EnvDamage" updated="02/13/07">
- <comment>Environmental Damage</comment>
- <payload dir="client" typename="environmentDamageStruct" sizechecktype="match"/>
- </opcode>
<opcode id="10A6" name="OP_Split" updated="10/27/05">
<comment></comment>
</opcode>
@@ -573,9 +612,6 @@
<comment>old OpenVendorCode</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
- <opcode id="2963" name="OP_MoveItem" updated="11/15/11">
- <comment>Client moving an item from one slot to another</comment>
- </opcode>
<opcode id="0f8e" name="OP_FaceChange" updated="10/27/05">
<comment>/face</comment>
</opcode>
@@ -600,25 +636,12 @@
<opcode id="35a6" name="OP_LFPGetMatchesRequest" updated="10/27/05">
<comment></comment>
</opcode>
- <opcode id="5892" name="OP_RaidInvite" updated="10/27/05">
- <comment></comment>
- </opcode>
- <opcode id="6dd8" name="OP_TraderBuy" updated="10/27/05">
- <comment>buy from a trader in bazaar</comment>
- </opcode>
<opcode id="6980" name="OP_GMKill" updated="10/27/05">
<comment>GM /kill - Insta kill mob/pc</comment>
</opcode>
- <opcode id="36e2" name="OP_ClickDoor" updated="02/13/07">
- <comment>old DoorOpenCode</comment>
- <payload dir="both" typename="uint8_t" sizechecktype="none"/>
- </opcode>
<opcode id="17a2" name="OP_GuildPublicNote" updated="10/27/05">
<comment></comment>
</opcode>
- <opcode id="00BC" name="OP_LootRequest" updated="11/15/11">
- <comment>old cLootCorpseCode</comment>
- </opcode>
<opcode id="61ef" name="OP_YellForHelp" updated="10/27/05">
<comment></comment>
</opcode>
@@ -643,9 +666,6 @@
<opcode id="212d" name="OP_LFPGetMatchesResponse" updated="02/13/07">
<comment></comment>
</opcode>
- <opcode id="132F" name="OP_Jump" updated="11/15/11">
- <comment>old cJumpCode?</comment>
- </opcode>
<opcode id="1089" name="OP_FindPersonRequest" updated="02/13/07">
<comment>Control-F Find</comment>
</opcode>
@@ -658,29 +678,15 @@
<opcode id="0840" name="OP_TradeSkillCombine" updated="06/29/05">
<comment></comment>
</opcode>
- <opcode id="355b" name="OP_LFGGetMatchesResponse" updated="06/13/06">
- <comment></comment>
- </opcode>
<opcode id="14ef" name="OP_Mend" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="1ffa" name="OP_MendHPUpdate" updated="05/11/05">
<comment></comment>
</opcode>
- <opcode id="5306" name="OP_Feedback" updated="10/27/05">
- <comment>/feedback</comment>
- </opcode>
<opcode id="4775" name="OP_TributeInfo" updated="02/13/07">
<comment>Tribute information</comment>
</opcode>
- <opcode id="7416" name="OP_LeaderExpUpdate" updated="06/29/05">
- <comment>Leadership AA Exp Update</comment>
- <payload dir="server" typename="leadExpUpdateStruct" sizechecktype="match"/>
- </opcode>
- <opcode id="062c" name="OP_Lockouts" updated="02/13/07">
- <comment>Server telling client lockouts</comment>
- </opcode>
-

<!-- OLD OPCODES. These haven't been mapped in a post 1/26/2005 world. If you
can find any of these in the current stream, please update them and let
diff -u -x '*.moc' -x '*.o' showeq/src/everquest.h showeq/src/everquest.h
--- src/everquest.h 2012-04-03 22:02:27.758366092 -0400
+++ src/everquest.h 2012-04-03 22:21:04.101158364 -0400
@@ -288,7 +288,7 @@
groupFindPathToPC,
groupHealthOfTargetsTarget,
groupUnknown15,
- raidMarkNPC, //0x10
+ raidMarkNPC, //0x10
raidNPCHealth,
raidDelegateMainAssist,
raidDelegateMarkNPC,
@@ -314,14 +314,14 @@
{
RecastTimer0 = 0,
RecastTimer1,
- WeaponHealClickTimer, // 2
- MuramiteBaneNukeClickTimer, // 3
+ WeaponHealClickTimer, // 2
+ MuramiteBaneNukeClickTimer, // 3
RecastTimer4,
- DispellClickTimer, // 5 (also click heal orbs?)
- EpicTimer, // 6
- OoWBPClickTimer, // 7
- VishQuestClassItemTimer, // 8
- HealPotionTimer, // 9
+ DispellClickTimer, // 5 (also click heal orbs?)
+ EpicTimer, // 6
+ OoWBPClickTimer, // 7
+ VishQuestClassItemTimer, // 8
+ HealPotionTimer, // 9
RecastTimer10,
RecastTimer11,
RecastTimer12,
@@ -331,8 +331,8 @@
RecastTimer16,
RecastTimer17,
RecastTimer18,
- ModRodTimer, // 19
- MAX_RECAST_TYPES // 20
+ ModRodTimer, // 19
+ MAX_RECAST_TYPES // 20
};


@@ -433,16 +433,16 @@
*/
struct spellBuff
{
-/*0000*/ uint8_t unknown0000; //
-/*0001*/ int8_t level; // Level of person who cast buff
-/*0002*/ uint8_t unknown0002; //
-/*0003*/ uint8_t unknown0003; //
+/*0000*/ uint8_t unknown0000; //
+/*0001*/ int8_t level; // Level of person who cast buff
+/*0002*/ uint8_t unknown0002; //
+/*0003*/ uint8_t unknown0003; //
/*0004*/ float unknown0004;
-/*0008*/ int32_t spellid; // Spell
-/*0012*/ int32_t duration; // Time remaining in ticks
-/*0016*/ int32_t effect; // holds the dmg absorb amount on runes
-/*0020*/ uint8_t unknown0020[4]; // *** this might need to be swapped with playerId
-/*0024*/ uint32_t playerId; // Global id of caster (for wear off)
+/*0008*/ int32_t spellid; // Spell
+/*0012*/ int32_t duration; // Time remaining in ticks
+/*0016*/ int32_t effect; // holds the dmg absorb amount on runes
+/*0020*/ uint8_t unknown0020[4]; // *** this might need to be swapped with playerId
+/*0024*/ uint32_t playerId; // Global id of caster (for wear off)
/*0028*/ uint8_t unknown0028[60];
/*0088*/
};
@@ -513,14 +513,15 @@

/*
* Visible equiptment.
- * Size: 12 Octets
+ * Size: 16 Octets
*/
struct EquipStruct
{
/*00*/ uint32_t equip0;
/*04*/ uint32_t equip1;
-/*08*/ uint32_t itemId;
-/*12*/
+/*08*/ uint32_t equip2;
+/*12*/ uint32_t itemId;
+/*16*/
};

/*
@@ -530,12 +531,12 @@
*/
struct zoneChangeStruct
{
-/*0000*/ char name[64]; // Character Name
-/*0064*/ uint16_t zoneId; // zone Id
-/*0066*/ uint16_t zoneInstance; // zone Instance
-/*0068*/ uint8_t unknown0068[8]; // unknown
-/*0076*/ uint8_t unknown0076[12]; // ***Placeholder (6/29/2005)
-/*0088*/ uint8_t unknown0088[4]; // HoT Beta (9/7/2010)
+/*0000*/ char name[64]; // Character Name
+/*0064*/ uint16_t zoneId; // zone Id
+/*0066*/ uint16_t zoneInstance; // zone Instance
+/*0068*/ uint8_t unknown0068[8]; // unknown
+/*0076*/ uint8_t unknown0076[12]; // ***Placeholder (6/29/2005)
+/*0088*/ uint8_t unknown0088[4]; // HoT Beta (9/7/2010)
/*0092*/
};

@@ -546,28 +547,28 @@
*/
struct requestZoneChangeStruct
{
-/*0000*/ uint16_t zoneId; // Zone to change to
-/*0002*/ uint16_t zoneInstance; // Instance to change to
-/*0004*/ float x; // Zone in x coord in next zone
-/*0008*/ float y; // Zone in y coord in next zone
-/*0012*/ float z; // Zone in z coord in next zone
-/*0016*/ float heading; // Zone in heading in next zone
-/*0020*/ uint32_t unknown0020; // *** Placeholder
+/*0000*/ uint16_t zoneId; // Zone to change to
+/*0002*/ uint16_t zoneInstance; // Instance to change to
+/*0004*/ float x; // Zone in x coord in next zone
+/*0008*/ float y; // Zone in y coord in next zone
+/*0012*/ float z; // Zone in z coord in next zone
+/*0016*/ float heading; // Zone in heading in next zone
+/*0020*/ uint32_t unknown0020; // *** Placeholder
/*0024*/
};

/*
** Client Zone Entry struct
-** Length: 68 Octets
+** Length: 76 Octets
** OpCode: ZoneEntryCode (when direction == client)
*/
struct ClientZoneEntryStruct
{
-/*0000*/ uint32_t unknown0000; // ***Placeholder
-/*0004*/ char name[32]; // Player firstname
-/*0036*/ uint8_t unknown0036[28]; // ***Placeholder
-/*0064*/ uint32_t unknown0064[3]; // unknown
-/*0068*/
+/*0000*/ uint32_t unknown0000; // ***Placeholder
+/*0004*/ char name[32]; // Player firstname
+/*0036*/ uint8_t unknown0036[28]; // ***Placeholder
+/*0064*/ uint32_t unknown0064[3]; // unknown
+/*0076*/
};


@@ -578,44 +579,44 @@
*/
struct newZoneStruct
{
-/*0000*/ char name[64]; // Character name
-/*0064*/ char shortName[32]; // Zone Short Name (maybe longer?)
+/*0000*/ char name[64]; // Character name
+/*0064*/ char shortName[32]; // Zone Short Name (maybe longer?)
/*0096*/ char unknown0096[96];
-/*0192*/ char longName[278]; // Zone Long Name
-/*0470*/ uint8_t ztype; // Zone type
-/*0471*/ uint8_t fog_red[4]; // Zone fog (red)
-/*0475*/ uint8_t fog_green[4]; // Zone fog (green)
-/*0479*/ uint8_t fog_blue[4]; // Zone fog (blue)
-/*0483*/ uint8_t unknown0483[87]; // *** Placeholder
-/*0570*/ uint8_t sky; // Zone sky
-/*0571*/ uint8_t unknown0571[13]; // *** Placeholder
-/*0584*/ float zone_exp_multiplier; // Experience Multiplier
-/*0588*/ float safe_y; // Zone Safe Y
-/*0592*/ float safe_x; // Zone Safe X
-/*0596*/ float safe_z; // Zone Safe Z
-/*0600*/ float unknown0600; // *** Placeholder
-/*0604*/ float unknown0604; // *** Placeholder
-/*0608*/ float underworld; // Underworld
-/*0612*/ float minclip; // Minimum view distance
-/*0616*/ float maxclip; // Maximum view distance
-/*0620*/ uint8_t unknown0616[84]; // *** Placeholder
-/*0704*/ char zonefile[64]; // Zone file name?
-/*0768*/ uint8_t unknown0764[36]; // *** Placeholder (12/05/2006)
-/*0804*/ uint8_t unknown0800[32]; // *** Placeholder (02/13/2007)
-/*0836*/ uint8_t unknown0832[12]; // *** Placeholder
-/*0848*/ uint8_t unknown0844[4]; // *** Placeholder (06/29/2005)
-/*0852*/ uint8_t unknown0848[4]; // *** Placeholder (09/13/2005)
-/*0856*/ uint8_t unknown0852[4]; // *** Placeholder (02/21/2006)
-/*0860*/ uint8_t unknown0856[36]; // *** Placeholder (06/13/2006)
-/*0896*/ uint8_t unknown0892[12]; // *** Placeholder (12/05/2006)
-/*0908*/ uint8_t unknown0904[8]; // *** Placeholder (02/13/2007)
-/*0916*/ uint8_t unknown0916[4]; // *** Placeholder (11/24/2007)
-/*0920*/ uint8_t unknown0920[4]; // *** Placeholder (01/17/2008)
-/*0924*/ uint8_t unknown0924[4]; // *** Placeholder (09/03/2008)
-/*0928*/ uint8_t unknown0928[4]; // *** Placeholder (10/07/2008)
-/*0932*/ uint8_t unknown0932[8]; // *** Placeholder (11/04/2009)
-/*0940*/ uint8_t unknown0940[4]; // *** Placeholder (12/15/2009)
-/*0944*/ uint8_t unknown0944[4]; // *** Placeholder (11/15/2011)
+/*0192*/ char longName[278]; // Zone Long Name
+/*0470*/ uint8_t ztype; // Zone type
+/*0471*/ uint8_t fog_red[4]; // Zone fog (red)
+/*0475*/ uint8_t fog_green[4]; // Zone fog (green)
+/*0479*/ uint8_t fog_blue[4]; // Zone fog (blue)
+/*0483*/ uint8_t unknown0483[87]; // *** Placeholder
+/*0570*/ uint8_t sky; // Zone sky
+/*0571*/ uint8_t unknown0571[13]; // *** Placeholder
+/*0584*/ float zone_exp_multiplier; // Experience Multiplier
+/*0588*/ float safe_y; // Zone Safe Y
+/*0592*/ float safe_x; // Zone Safe X
+/*0596*/ float safe_z; // Zone Safe Z
+/*0600*/ float unknown0600; // *** Placeholder
+/*0604*/ float unknown0604; // *** Placeholder
+/*0608*/ float underworld; // Underworld
+/*0612*/ float minclip; // Minimum view distance
+/*0616*/ float maxclip; // Maximum view distance
+/*0620*/ uint8_t unknown0616[84]; // *** Placeholder
+/*0704*/ char zonefile[64]; // Zone file name?
+/*0768*/ uint8_t unknown0764[36]; // *** Placeholder (12/05/2006)
+/*0804*/ uint8_t unknown0800[32]; // *** Placeholder (02/13/2007)
+/*0836*/ uint8_t unknown0832[12]; // *** Placeholder
+/*0848*/ uint8_t unknown0844[4]; // *** Placeholder (06/29/2005)
+/*0852*/ uint8_t unknown0848[4]; // *** Placeholder (09/13/2005)
+/*0856*/ uint8_t unknown0852[4]; // *** Placeholder (02/21/2006)
+/*0860*/ uint8_t unknown0856[36]; // *** Placeholder (06/13/2006)
+/*0896*/ uint8_t unknown0892[12]; // *** Placeholder (12/05/2006)
+/*0908*/ uint8_t unknown0904[8]; // *** Placeholder (02/13/2007)
+/*0916*/ uint8_t unknown0916[4]; // *** Placeholder (11/24/2007)
+/*0920*/ uint8_t unknown0920[4]; // *** Placeholder (01/17/2008)
+/*0924*/ uint8_t unknown0924[4]; // *** Placeholder (09/03/2008)
+/*0928*/ uint8_t unknown0928[4]; // *** Placeholder (10/07/2008)
+/*0932*/ uint8_t unknown0932[8]; // *** Placeholder (11/04/2009)
+/*0940*/ uint8_t unknown0940[4]; // *** Placeholder (12/15/2009)
+/*0944*/ uint8_t unknown0944[4]; // *** Placeholder (11/15/2011)
/*0948*/
};

@@ -627,10 +628,10 @@
struct dzSwitchInfo
{
/*0000*/ uint32_t unknown0000;
-/*0004*/ uint32_t show; // Show compass line
+/*0004*/ uint32_t show; // Show compass line
/*0008*/ uint16_t zoneID;
/*0010*/ uint16_t instanceID;
-/*0012*/ uint32_t type; // if(type != 1 && type > 2 && type <= 5) { color = green; } else { color = pink; }
+/*0012*/ uint32_t type; // if(type != 1 && type > 2 && type <= 5) { color = green; } else { color = pink; }
/*0016*/ uint32_t unknown0016;
/*0020*/ float y;
/*0024*/ float x;
@@ -650,8 +651,8 @@
/*0008*/ uint8_t newDZ;
/*0009*/ uint8_t padding0009[3];
/*0012*/ uint32_t maxPlayers;
-/*0016*/ char dzName[128]; // Instance name
-/*0144*/ char name[64]; // Your player's name
+/*0016*/ char dzName[128]; // Instance name
+/*0144*/ char name[64]; // Your player's name
/*0208*/
};

@@ -664,167 +665,183 @@
*/
struct playerProfileStruct
{
-/*00004*/ uint32_t gender; // Player Gender - 0 Male, 1 Female
-/*00008*/ uint32_t race; // Player race
-/*00012*/ uint32_t class_; // Player class
-/*00016*/ uint8_t unknown00016[40]; // ***Placeholder
-/*00056*/ uint8_t level; // Level of player
-/*00057*/ uint8_t level1; // Level of player (again?)
-/*00058*/ uint8_t unknown00058[2]; // ***Placeholder
-/*00060*/ BindStruct binds[5]; // Bind points (primary is first)
-/*00160*/ uint32_t deity; // deity
-/*00164*/ uint32_t intoxication; // Alcohol level (in ticks till sober?)
-/*00168*/ uint32_t spellSlotRefresh[13]; // Refresh time (millis)
-/*00220*/ uint8_t haircolor; // Player hair color
-/*00221*/ uint8_t beardcolor; // Player beard color
+/*00004*/ uint32_t gender; // Player Gender - 0 Male, 1 Female
+/*00008*/ uint32_t race; // Player race
+/*00012*/ uint32_t class_; // Player class
+/*00016*/ uint8_t unknown00016[40]; // ***Placeholder
+/*00056*/ uint8_t level; // Level of player
+/*00057*/ uint8_t level1; // Level of player (again?)
+/*00058*/ uint8_t unknown00058[2]; // ***Placeholder
+/*00060*/ BindStruct binds[5]; // Bind points (primary is first)
+/*00160*/ uint32_t deity; // deity
+/*00164*/ uint32_t intoxication; // Alcohol level (in ticks till sober?)
+/*00168*/ uint32_t spellSlotRefresh[13]; // Refresh time (millis)
+/*00220*/ uint8_t haircolor; // Player hair color
+/*00221*/ uint8_t beardcolor; // Player beard color
/*00222*/ uint8_t unknown00222[6];
-/*00228*/ uint8_t eyecolor1; // Player left eye color
-/*00229*/ uint8_t eyecolor2; // Player right eye color
-/*00230*/ uint8_t hairstyle; // Player hair style
-/*00231*/ uint8_t beard; // Player beard type
-/*00232*/ uint8_t unknown00232[22];
-/*00254*/ uint32_t item_material[9]; // Item texture/material of worn items
-/*00290*/ uint8_t unknown00290[222];
-/*00512*/ Color_Struct item_tint[9]; // RR GG BB 00
-/*00548*/ AA_Array aa_array[MAX_AA]; // AAs
-/*04148*/ uint32_t points; // Unspent Practice points
-/*04152*/ uint32_t MANA; // Current MANA
-/*04156*/ uint32_t curHp; // Current HP without +HP equipment
-/*04160*/ uint32_t STR; // Strength
-/*04164*/ uint32_t STA; // Stamina
-/*04168*/ uint32_t CHA; // Charisma
-/*04172*/ uint32_t DEX; // Dexterity
-/*04176*/ uint32_t INT; // Intelligence
-/*04180*/ uint32_t AGI; // Agility
-/*04184*/ uint32_t WIS; // Wisdom
-/*04188*/ uint8_t face; // Player face
-/*04189*/ uint8_t unknown04189[175];
-/*04364*/ int32_t sSpellBook[720]; // List of the Spells in spellbook
-/*07244*/ int32_t sMemSpells[MAX_SPELL_SLOTS]; // List of spells memorized
-/*07292*/ uint8_t unknown07292[20];
-/*07312*/ uint32_t platinum; // Platinum Pieces on player
-/*07316*/ uint32_t gold; // Gold Pieces on player
-/*07320*/ uint32_t silver; // Silver Pieces on player
-/*07324*/ uint32_t copper; // Copper Pieces on player
-/*07328*/ uint32_t platinum_cursor; // Platinum Pieces on cursor
-/*07332*/ uint32_t gold_cursor; // Gold Pieces on cursor
-/*07336*/ uint32_t silver_cursor; // Silver Pieces on cursor
-/*07340*/ uint32_t copper_cursor; // Copper Pieces on cursor
-/*07344*/ uint32_t skills[MAX_KNOWN_SKILLS]; // List of skills
-/*07744*/ uint32_t innateSkills[25];
-/*07844*/ uint8_t unknown07844[16];
-/*07860*/ uint32_t toxicity; // Potion Toxicity (15=too toxic, each potion adds 3)
-/*07864*/ uint32_t thirst; // Drink (ticks till next drink)
-/*07868*/ uint32_t hunger; // Food (ticks till next eat)
-/*07872*/ uint8_t unknown07872[20];
-/*07892*/ spellBuff buffs[MAX_BUFFS]; // Buffs currently on the player
-/*11588*/ uint32_t disciplines[MAX_DISCIPLINES]; // Known disciplines
-/*11988*/ uint8_t unknown10932[400];
-/*12188*/ uint32_t recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
-/*12468*/ uint8_t unknown11412[480];
-/*12948*/ uint32_t endurance; // Current endurance
-/*12952*/ uint32_t aa_spent; // Number of spent AA points (including glyphs)
-/*12956*/ uint32_t aa_assigned; // Number of points currently assigned to AAs
-/*12960*/ uint32_t unknown11904[4];
-/*12976*/ uint32_t aa_unspent; // Unspent AA points
-/*12980*/ uint8_t unknown11924[4];
-/*12984*/ BandolierStruct bandoliers[MAX_BANDOLIERS]; // bandolier contents
-/*19384*/ InlineItem potionBelt[MAX_POTIONS_IN_BELT]; // potion belt
-/*19744*/ uint8_t unknown18008[92];
-/*19836*/
-};
+/*00228*/ uint8_t eyecolor1; // Player left eye color
+/*00229*/ uint8_t eyecolor2; // Player right eye color
+/*00230*/ uint8_t hairstyle; // Player hair style
+/*00231*/ uint8_t beard; // Player beard type
+/*00232*/ uint8_t unknown00232[4];
+/*00236*/ union
+ {
+ struct
+ {
+ /*00236*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
+ /*00252*/ EquipStruct equip_chest; // Equiptment: Chest visual
+ /*00268*/ EquipStruct equip_arms; // Equiptment: Arms visual
+ /*00284*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
+ /*00300*/ EquipStruct equip_hands; // Equiptment: Hands visual
+ /*00316*/ EquipStruct equip_legs; // Equiptment: Legs visual
+ /*00332*/ EquipStruct equip_feet; // Equiptment: Boots visual
+ /*00348*/ EquipStruct equip_primary; // Equiptment: Main visual
+ /*00364*/ EquipStruct equip_secondary; // Equiptment: Off visual
+ } equip;
+ /*00380*/ EquipStruct equipment[9];
+ };
+/*00380*/ uint8_t unknown00380[220];
+/*00600*/ Color_Struct item_tint[9]; // RR GG BB 00
+/*00636*/ AA_Array aa_array[MAX_AA]; // AAs
+/*04236*/ uint32_t points; // Unspent Practice points
+/*04240*/ uint32_t MANA; // Current MANA
+/*04244*/ uint32_t curHp; // Current HP without +HP equipment
+/*04248*/ uint32_t STR; // Strength
+/*04252*/ uint32_t STA; // Stamina
+/*04256*/ uint32_t CHA; // Charisma
+/*04260*/ uint32_t DEX; // Dexterity
+/*04264*/ uint32_t INT; // Intelligence
+/*04268*/ uint32_t AGI; // Agility
+/*04272*/ uint32_t WIS; // Wisdom
+/*04276*/ uint8_t unknown04276[28];
+/*04304*/ uint32_t face; // Player face
+/*04308*/ uint8_t unknown04308[180];
+/*04488*/ int32_t sSpellBook[720]; // List of the Spells in spellbook
+/*07368*/ int32_t sMemSpells[MAX_SPELL_SLOTS]; // List of spells memorized
+/*07416*/ uint8_t unknown07416[20];
+/*07436*/ uint32_t platinum; // Platinum Pieces on player
+/*07442*/ uint32_t gold; // Gold Pieces on player
+/*07444*/ uint32_t silver; // Silver Pieces on player
+/*07448*/ uint32_t copper; // Copper Pieces on player
+/*07452*/ uint32_t platinum_cursor; // Platinum Pieces on cursor
+/*07456*/ uint32_t gold_cursor; // Gold Pieces on cursor
+/*07460*/ uint32_t silver_cursor; // Silver Pieces on cursor
+/*07464*/ uint32_t copper_cursor; // Copper Pieces on cursor
+/*07468*/ uint32_t skills[MAX_KNOWN_SKILLS]; // List of skills
+/*07868*/ uint32_t innateSkills[25];
+/*07968*/ uint8_t unknown07968[16];
+/*07984*/ uint32_t toxicity; // Potion Toxicity (15=too toxic, each potion adds 3)
+/*07988*/ uint32_t thirst; // Drink (ticks till next drink)
+/*07992*/ uint32_t hunger; // Food (ticks till next eat)
+/*07996*/ uint8_t unknown07996[20];
+/*08016*/ spellBuff buffs[MAX_BUFFS]; // Buffs currently on the player
+/*11712*/ uint32_t disciplines[MAX_DISCIPLINES];// Known disciplines
+/*12112*/ uint8_t unknown12112[400];
+/*12312*/ uint32_t recastTimers[MAX_RECAST_TYPES];// Timers (GMT of last use)
+/*12592*/ uint8_t unknown12592[480];
+/*13072*/ uint32_t endurance; // Current endurance
+/*13076*/ uint32_t aa_spent; // Number of spent AA points (including glyphs)
+/*13080*/ uint32_t aa_assigned; // Number of points currently assigned to AAs
+/*13084*/ uint32_t unknown13084[4];
+/*13100*/ uint32_t aa_unspent; // Unspent AA points
+/*13104*/ uint8_t unknown13104[4];
+/*13108*/ BandolierStruct bandoliers[MAX_BANDOLIERS]; // bandolier contents
+/*19508*/ InlineItem potionBelt[MAX_POTIONS_IN_BELT]; // potion belt
+/*19868*/ uint8_t unknown19868[92];
+/*19960*/
+ };

/*
** Player Profile
-** Length: 29560 Octets
+** Length: 29688 Octets
** OpCode: CharProfileCode
*/
struct charProfileStruct
{
-/*00000*/ uint32_t checksum; //
-/*00004*/ playerProfileStruct profile; // Profile
-/*19836*/ char name[64]; // Name of player
-/*19900*/ char lastName[32]; // Last name of player
-/*19932*/ uint8_t unknown18196[8]; //***Placeholder (1/18/2006)
-/*19940*/ int32_t guildID; // guildID
-/*19944*/ uint32_t birthdayTime; // character birthday
-/*19948*/ uint32_t lastSaveTime; // character last save time
-/*19952*/ uint32_t timePlayedMin; // time character played
-/*19956*/ uint8_t unknown18220[4];
-/*19960*/ uint8_t pvp; // 1=pvp, 0=not pvp
-/*19961*/ uint8_t anon; // 2=roleplay, 1=anon, 0=not anon
-/*19962*/ uint8_t gm; // 0=no, 1=yes (guessing!)
-/*19963*/ int8_t guildstatus; // 0=member, 1=officer, 2=guildleader
-/*19964*/ uint8_t unknown18228[16];
-/*19980*/ uint32_t exp; // Current Experience
-/*19984*/ uint8_t unknown18240[12];
-/*19996*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages ccc
-/*20022*/ uint8_t unknown18277[6]; // All 0x00 (language buffer?)
-/*20028*/ float y; // Players y position
-/*20032*/ float x; // Players x position
-/*20036*/ float z; // Players z position
-/*20040*/ float heading; // Players heading
-/*20044*/ uint32_t standState; // 0x64 = stand
-/*20048*/ uint32_t platinum_bank; // Platinum Pieces in Bank
-/*20052*/ uint32_t gold_bank; // Gold Pieces in Bank
-/*20056*/ uint32_t silver_bank; // Silver Pieces in Bank
-/*20060*/ uint32_t copper_bank; // Copper Pieces in Bank
-/*20064*/ uint32_t platinum_shared; // Shared platinum pieces ccc
-/*20068*/ uint8_t unknown18324[2124]; // Added 1088 for HoT
-/*22192*/ uint32_t expansions; // Bitmask for expansions ccc
-/*22196*/ uint8_t unknown20452[12];
-/*22208*/ uint32_t autosplit; // 0 = off, 1 = on ccc
-/*22212*/ uint8_t unknown20468[16];
-/*22228*/ uint16_t zoneId; // see zones.h ccc
-/*22230*/ uint16_t zoneInstance; // Instance id ccc
-/*22232*/ uint8_t unknown20486[992];
-/*23224*/ uint32_t leadAAActive; // 0 = leader AA off, 1 = leader AA on ccc
-/*23228*/ uint8_t unknown21484[4];
-/*23232*/ uint32_t ldon_guk_points; // Earned GUK points ccc
-/*23236*/ uint32_t ldon_mir_points; // Earned MIR points ccc
-/*23240*/ uint32_t ldon_mmc_points; // Earned MMC points ccc
-/*23244*/ uint32_t ldon_ruj_points; // Earned RUJ points ccc
-/*23248*/ uint32_t ldon_tak_points; // Earned TAK points ccc
-/*23252*/ uint32_t ldon_avail_points; // Available LDON points ccc
-/*23256*/ uint8_t unknown21512[144];
-/*23400*/ uint32_t tributeTime; // Time remaining on tribute (millisecs) ccc
-/*23404*/ uint32_t careerTribute; // Total favor points for this char ccc
-/*23408*/ uint32_t unknown21656; // *** Placeholder ccc
-/*23412*/ uint32_t currentTribute; // Current tribute points ccc
-/*23416*/ uint32_t unknown21664; // *** Placeholder
-/*23420*/ uint32_t tributeActive; // 0 = off, 1=on
-/*23424*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout ccc
-/*23464*/ uint8_t unknown21712[84]; // Added 208 bytes for HoT BETA ccc
-/*23548*/ float expGroupLeadAA; // Current group lead exp points ccc
-/*23552*/ uint32_t unknown21808;
-/*23556*/ float expRaidLeadAA; // Current raid lead AA exp points ccc
-/*23560*/ uint32_t unknown21816;
-/*23564*/ uint32_t groupLeadAAUnspent; // Unspent group lead AA points ccc
-/*23568*/ uint32_t raidLeadAAUnspent; // Unspent raid lead AA points ccc
-/*23572*/ uint32_t leadershipAAs[MAX_LEAD_AA]; // Leader AA ranks ccc
-/*23700*/ uint8_t unknown21956[128];
-/*23828*/ uint32_t airRemaining; // Air supply (seconds) ccc
-/*23832*/ uint8_t unknown22088[4608];
-/*28440*/ uint32_t expAA; // Exp earned in current AA point ccc
-/*28444*/ uint8_t unknown26700[40];
-/*28484*/ uint32_t currentRadCrystals; // Current count of radiant crystals ccc
-/*28488*/ uint32_t careerRadCrystals; // Total count of radiant crystals ever ccc
-/*28492*/ uint32_t currentEbonCrystals;// Current count of ebon crystals ccc
-/*28496*/ uint32_t careerEbonCrystals; // Total count of ebon crystals ever ccc
-/*28500*/ uint8_t groupAutoconsent; // 0=off, 1=on
-/*28501*/ uint8_t raidAutoconsent; // 0=off, 1=on
-/*28502*/ uint8_t guildAutoconsent; // 0=off, 1=on
-/*28503*/ uint8_t unknown26759[5]; // ***Placeholder (6/29/2005)
-/*28508*/ uint32_t showhelm; // 0=no, 1=yes
-/*28512*/ uint8_t unknown26768[1048]; // ***Placeholder (2/13/2007)
-/*29560*/
-};
+/*00000*/ uint32_t checksum; //
+/*00004*/ playerProfileStruct profile; // Profile
+/*19960*/ char name[64]; // Name of player
+/*20024*/ char lastName[32]; // Last name of player
+/*20054*/ uint8_t unknown20054[12]; //***Placeholder (1/18/2006)
+/*20066*/ int32_t guildID; // guildID
+/*20070*/ uint32_t birthdayTime; // character birthday
+/*20074*/ uint32_t lastSaveTime; // character last save time
+/*20078*/ uint32_t timePlayedMin; // time character played
+/*20082*/ uint8_t unknown20082[4];
+/*20086*/ uint8_t pvp; // 1=pvp, 0=not pvp
+/*20087*/ uint8_t anon; // 2=roleplay, 1=anon, 0=not anon
+/*20088*/ uint8_t gm; // 0=no, 1=yes (guessing!)
+/*20089*/ int8_t guildstatus; // 0=member, 1=officer, 2=guildleader
+/*20090*/ uint8_t unknown20090[16];
+/*20106*/ uint32_t exp; // Current Experience
+/*20110*/ uint8_t unknown20110[12];
+/*20122*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages ccc
+/*20150*/ uint8_t unknown20150[6]; // All 0x00 (language buffer?)
+/*20156*/ float y; // Players y position
+/*20160*/ float x; // Players x position
+/*20164*/ float z; // Players z position
+/*20168*/ float heading; // Players heading
+/*20172*/ uint32_t standState; // 0x64 = stand
+/*20176*/ uint32_t platinum_bank; // Platinum Pieces in Bank
+/*20180*/ uint32_t gold_bank; // Gold Pieces in Bank
+/*20184*/ uint32_t silver_bank; // Silver Pieces in Bank
+/*20188*/ uint32_t copper_bank; // Copper Pieces in Bank
+/*20192*/ uint32_t platinum_shared; // Shared platinum pieces
+/*20196*/ uint8_t unknown20196[2124]; // Added 1088 for HoT
+/*22320*/ uint32_t expansions; // Bitmask for expansions
+/*22324*/ uint8_t unknown22324[12];
+/*22336*/ uint32_t autosplit; // 0 = off, 1 = on
+/*22340*/ uint8_t unknown22340[16];
+/*22356*/ uint16_t zoneId; // see zones.h
+/*22358*/ uint16_t zoneInstance; // Instance id
+/*22360*/ uint8_t unknown22360[992];
+/*23352*/ uint32_t leadAAActive; // 0 = leader AA off, 1 = leader AA on
+/*23356*/ uint8_t unknown23356[4];
+/*23360*/ uint32_t ldon_guk_points; // Earned GUK points
+/*23364*/ uint32_t ldon_mir_points; // Earned MIR points
+/*23368*/ uint32_t ldon_mmc_points; // Earned MMC points
+/*23372*/ uint32_t ldon_ruj_points; // Earned RUJ points
+/*23376*/ uint32_t ldon_tak_points; // Earned TAK points
+/*23380*/ uint32_t ldon_avail_points; // Available LDON points
+/*23384*/ uint8_t unknown23384[144];
+/*23528*/ uint32_t tributeTime; // Time remaining on tribute (millisecs)
+/*23532*/ uint32_t careerTribute; // Total favor points for this char
+/*23536*/ uint32_t unknown23536; // *** Placeholder
+/*23540*/ uint32_t currentTribute; // Current tribute points
+/*23544*/ uint32_t unknown23544; // *** Placeholder
+/*23548*/ uint32_t tributeActive; // 0 = off, 1=on
+/*23552*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout
+/*23592*/ uint8_t unknown23592[84]; // Added 208 bytes for HoT BETA
+/*23676*/ float expGroupLeadAA; // Current group lead exp points
+/*23680*/ uint32_t unknown23680;
+/*23684*/ float expRaidLeadAA; // Current raid lead AA exp points
+/*23688*/ uint32_t unknown23688;
+/*23692*/ uint32_t groupLeadAAUnspent; // Unspent group lead AA points
+/*23696*/ uint32_t raidLeadAAUnspent; // Unspent raid lead AA points
+/*23700*/ uint32_t leadershipAAs[MAX_LEAD_AA]; // Leader AA ranks
+/*23828*/ uint8_t unknown23828[128];
+/*23956*/ uint32_t airRemaining; // Air supply (seconds)
+/*23960*/ uint8_t unknown23960[4608];
+/*28568*/ uint32_t expAA; // Exp earned in current AA point
+/*28572*/ uint8_t unknown28572[40];
+/*28612*/ uint32_t currentRadCrystals; // Current count of radiant crystals
+/*28616*/ uint32_t careerRadCrystals; // Total count of radiant crystals ever
+/*28620*/ uint32_t currentEbonCrystals; // Current count of ebon crystals
+/*28624*/ uint32_t careerEbonCrystals; // Total count of ebon crystals ever
+/*28628*/ uint8_t groupAutoconsent; // 0=off, 1=on
+/*28629*/ uint8_t raidAutoconsent; // 0=off, 1=on
+/*28630*/ uint8_t guildAutoconsent; // 0=off, 1=on
+/*28631*/ uint8_t unknown28631[5]; // ***Placeholder (6/29/2005)
+/*28636*/ uint32_t showhelm; // 0=no, 1=yes
+/*28640*/ uint8_t unknown28640[1048]; // ***Placeholder (2/13/2007)
+/*29688*/
+ };

#if 0
// The following seem to be totally gone from charProfileStruct (9/13/05)
-/*2384*/ char title[32]; // Current character title
-/*2352*/ char servername[32]; // server the char was created on
-/*2416*/ char suffix[32]; // Current character suffix
+/*2384*/ char title[32]; // Current character title
+/*2352*/ char servername[32]; // server the char was created on
+/*2416*/ char suffix[32]; // Current character suffix
#endif

#if 1
@@ -877,23 +894,23 @@
union {
uint8_t unnamed[93];
struct _name {
-/* 35 */ uint8_t mass_group_buff; // All group-buff-casting classes(?)
+/* 35 */ uint8_t mass_group_buff; // All group-buff-casting classes(?)
// ===== Cleric =====
/* 36 */ uint8_t divine_resurrection;
-/* 37 */ uint8_t innate_invis_to_undead; // cleric, necromancer
+/* 37 */ uint8_t innate_invis_to_undead; // cleric, necromancer
/* 38 */ uint8_t celestial_regeneration;
/* 39 */ uint8_t bestow_divine_aura;
/* 40 */ uint8_t turn_undead;
/* 41 */ uint8_t purify_soul;
// ===== Druid =====
-/* 42 */ uint8_t quick_evacuation; // wizard, druid
-/* 43 */ uint8_t exodus; // wizard, druid
-/* 44 */ uint8_t quick_damage; // wizard, druid
-/* 45 */ uint8_t enhanced_root; // druid
-/* 46 */ uint8_t dire_charm; // enchanter, druid, necromancer
+/* 42 */ uint8_t quick_evacuation; // wizard, druid
+/* 43 */ uint8_t exodus; // wizard, druid
+/* 44 */ uint8_t quick_damage; // wizard, druid
+/* 45 */ uint8_t enhanced_root; // druid
+/* 46 */ uint8_t dire_charm; // enchanter, druid, necromancer
// ===== Shaman =====
/* 47 */ uint8_t cannibalization;
-/* 48 */ uint8_t quick_buff; // shaman, enchanter
+/* 48 */ uint8_t quick_buff; // shaman, enchanter
/* 49 */ uint8_t alchemy_mastery;
/* 50 */ uint8_t rabid_bear;
// ===== Wizard =====
@@ -906,7 +923,7 @@
/* 56 */ uint8_t jewel_craft_mastery;
/* 57 */ uint8_t gather_mana;
// ===== Mage =====
-/* 58 */ uint8_t mend_companion; // mage, necromancer
+/* 58 */ uint8_t mend_companion; // mage, necromancer
/* 59 */ uint8_t quick_summoning;
/* 60 */ uint8_t frenzied_burnout;
/* 61 */ uint8_t elemental_form_fire;
@@ -928,15 +945,15 @@
/* 75 */ uint8_t slay_undead;
/* 76 */ uint8_t act_of_valor;
/* 77 */ uint8_t holy_steed;
-/* 78 */ uint8_t fearless; // paladin, shadowknight
+/* 78 */ uint8_t fearless; // paladin, shadowknight

-/* 79 */ uint8_t two_hand_bash; // paladin, shadowknight
+/* 79 */ uint8_t two_hand_bash; // paladin, shadowknight
// ===== Ranger =====
-/* 80 */ uint8_t innate_camouflage; // ranger, druid
-/* 81 */ uint8_t ambidexterity; // all "dual-wield" users
-/* 82 */ uint8_t archery_mastery; // ranger
+/* 80 */ uint8_t innate_camouflage; // ranger, druid
+/* 81 */ uint8_t ambidexterity; // all "dual-wield" users
+/* 82 */ uint8_t archery_mastery; // ranger
/* 83 */ uint8_t unknown83;
-/* 84 */ uint8_t endless_quiver; // ranger
+/* 84 */ uint8_t endless_quiver; // ranger
// ===== Shadow Knight =====
/* 85 */ uint8_t unholy_steed;
/* 86 */ uint8_t improved_harm_touch;
@@ -960,10 +977,10 @@
// ===== Rogue =====
/* 102 */ uint8_t escape;
/* 103 */ uint8_t poison_mastery;
-/* 104 */ uint8_t double_riposte; // all "riposte" users
+/* 104 */ uint8_t double_riposte; // all "riposte" users
/* 105 */ uint8_t unknown105;
/* 106 */ uint8_t unknown106;
-/* 107 */ uint8_t purge_poison; // rogue
+/* 107 */ uint8_t purge_poison; // rogue
// ===== Warrior =====
/* 108 */ uint8_t flurry;
/* 109 */ uint8_t rampage;
@@ -973,17 +990,17 @@
// ===== (Other) =====
/* 113 */ uint8_t spell_casting_reinforcement_mastery; // all "pure" casters
/* 114 */ uint8_t unknown114;
-/* 115 */ uint8_t extended_notes; // bard
-/* 116 */ uint8_t dragon_punch; // monk
-/* 117 */ uint8_t strong_root; // wizard
-/* 118 */ uint8_t singing_mastery; // bard
-/* 119 */ uint8_t body_and_mind_rejuvenation; // paladin, ranger, bard
-/* 120 */ uint8_t physical_enhancement; // paladin, ranger, bard
-/* 121 */ uint8_t adv_trap_negotiation; // rogue, bard
-/* 122 */ uint8_t acrobatics; // all "safe-fall" users
-/* 123 */ uint8_t scribble_notes; // bard
-/* 124 */ uint8_t chaotic_stab; // rogue
-/* 125 */ uint8_t pet_discipline; // all pet classes except enchanter
+/* 115 */ uint8_t extended_notes; // bard
+/* 116 */ uint8_t dragon_punch; // monk
+/* 117 */ uint8_t strong_root; // wizard
+/* 118 */ uint8_t singing_mastery; // bard
+/* 119 */ uint8_t body_and_mind_rejuvenation; // paladin, ranger, bard
+/* 120 */ uint8_t physical_enhancement; // paladin, ranger, bard
+/* 121 */ uint8_t adv_trap_negotiation; // rogue, bard
+/* 122 */ uint8_t acrobatics; // all "safe-fall" users
+/* 123 */ uint8_t scribble_notes; // bard
+/* 124 */ uint8_t chaotic_stab; // rogue
+/* 125 */ uint8_t pet_discipline; // all pet classes except enchanter
/* 126 */ uint8_t unknown126;
/* 127 */ uint8_t unknown127;
} named;
@@ -1008,7 +1025,7 @@
/*0000*/ char name[64];
/*0000*/ uint32_t spawnId;
/*0000*/ uint8_t level;
-/*0000*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse
+/*0000*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse
/*0000*/ union
{
struct
@@ -1021,9 +1038,9 @@
unsigned invis:1;
unsigned padding5:11;
unsigned gm:1;
- unsigned anon:1; // 0=normal, 1=anon, 2=roleplay
+ unsigned anon:1; // 0=normal, 1=anon, 2=roleplay
unsigned padding4:1;
- unsigned gender:1; // Gender (0=male, 1=female)
+ unsigned gender:1; // Gender (0=male, 1=female)
unsigned padding3:1;
unsigned linkdead:1;
unsigned betabuffed:1;
@@ -1036,7 +1053,7 @@
};
int32_t miscData;
};
-/*0000*/ uint8_t otherData; // & 4 - has title, & 8 - has suffix, & 1 - it's a chest or untargetable
+/*0000*/ uint8_t otherData; // & 4 - has title, & 8 - has suffix, & 1 - it's a chest or untargetable
/*0000*/ uint32_t race;
/*0000*/ uint8_t charProperties;
/*0000*/ uint32_t bodytype;
@@ -1045,9 +1062,9 @@
/*0000*/ uint8_t holding;
/*0000*/ uint32_t deity;
/*0000*/ uint32_t guildID;
-/*0000*/ uint32_t guildstatus; // 0=member, 1=officer, 2=leader, -1=not guilded
+/*0000*/ uint32_t guildstatus; // 0=member, 1=officer, 2=leader, -1=not guilded
/*0000*/ uint8_t class_;
-/*0000*/ uint8_t state; // stand state
+/*0000*/ uint8_t state; // stand state
/*0000*/ uint8_t light;
/*0000*/ char lastName[32];
/*0000*/ uint32_t petOwnerId;
@@ -1055,19 +1072,19 @@
{
struct
{
-/*0000*/ signed padding0000:12; // ***Placeholder
- signed deltaX:13; // change in x
- signed padding0005:7; // ***Placeholder
-/*0000*/ signed deltaHeading:10;// change in heading
- signed deltaY:13; // change in y
- signed padding0006:9; // ***Placeholder
-/*0000*/ signed y:19; // y coord
- signed animation:13; // animation
-/*0000*/ unsigned heading:12; // heading
- signed x:19; // x coord
- signed padding0014:1; // ***Placeholder
-/*0000*/ signed z:19; // z coord
- signed deltaZ:13; // change in z
+/*0000*/ signed padding0000:12; // ***Placeholder
+ signed deltaX:13; // change in x
+ signed padding0005:7; // ***Placeholder
+/*0000*/ signed deltaHeading:10; // change in heading
+ signed deltaY:13; // change in y
+ signed padding0006:9; // ***Placeholder
+/*0000*/ signed y:19; // y coord
+ signed animation:13; // animation
+/*0000*/ unsigned heading:12; // heading
+ signed x:19; // x coord
+ signed padding0014:1; // ***Placeholder
+/*0000*/ signed z:19; // z coord
+ signed deltaZ:13; // change in z
};
int32_t posData[5];
};
@@ -1110,14 +1127,14 @@

#if 0
// Basic structure of how the packet looks on the wire, for reference.
-// May 29, 2008 eqgame.exe
+// March 16, 2012 eqgame.exe
struct spawnStruct
{
/*0000*/ char name[0];
/*0000*/ uint32_t spawnId;
/*0000*/ uint8_t level;
/*0000*/ float unknown1;
-/*0000*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse
+/*0000*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse
/*0000*/ unsigned padding7:1;
unsigned AFK:1;
unsigned sneak:1;
@@ -1126,9 +1143,9 @@
unsigned invis:1;
unsigned padding5:11;
unsigned gm:1;
- unsigned anon:1; // 0=normal, 1=anon, 2=roleplay
+ unsigned anon:1; // 0=normal, 1=anon, 2=roleplay
unsigned padding4:1;
- unsigned gender:1; // Gender (0=male, 1=female)
+ unsigned gender:1; // Gender (0=male, 1=female)
unsigned padding3:1;
unsigned linkdead:1;
unsigned betabuffed:1;
@@ -1138,7 +1155,7 @@
unsigned padding1:2;
unsigned trader:1;
unsigned buyer:1;
-/*0000*/ uint8_t otherData; // & 4 - has title, & 8 - has suffix, & 1 - it's a chest or untargetable
+/*0000*/ uint8_t otherData; // & 8 - has title, & 16 - has suffix, & 2 - auras, & 1 - it's a chest or untargetable
/*0000*/ uint32_t unknown3;
/*0000*/ uint32_t unknown4;
/*0000*/ uint32_t unknown5;
@@ -1146,10 +1163,10 @@
/*0000*/ float walkspeed;
/*0000*/ float runspeed;
/*0000*/ uint32_t race;
-/*0000*/ uint8_t charProperties; // for body types
+/*0000*/ uint8_t charProperties; // for body types - value indicates how many properties are present
/*0000*/ uint32_t bodytype;
-/*0000*/ uint32_t bodytype2; // this is only present if charProperties==2
- // are there more than two possible properties?
+/*0000*/ uint32_t bodytype2; // this is only present if charProperties==2
+ // are there more than two possible properties?
/*0000*/ uint8_t curHp;
/*0000*/ uint8_t haircolor;
/*0000*/ uint8_t facialhaircolor;
@@ -1163,10 +1180,10 @@
/*0000*/ uint8_t holding;
/*0000*/ uint32_t deity;
/*0000*/ uint32_t guildID;
-/*0000*/ uint32_t guildstatus; // 0=member, 1=officer, 2=leader, -1=not guilded
+/*0000*/ uint32_t guildstatus; // 0=member, 1=officer, 2=leader, -1=not guilded
/*0000*/ uint8_t class_;
/*0000*/ uint8_t PVP;
-/*0000*/ uint8_t state; // stand state
+/*0000*/ uint8_t state; // stand state
/*0000*/ uint8_t light;
/*0000*/ uint8_t unknown7;
/*0000*/ uint8_t unknown8;
@@ -1184,19 +1201,31 @@
/*0000*/ uint32_t unknown17;
/*0000*/ uint32_t unknown18;
/*0000*/ uint32_t unknown19;
-/*0000*/ signed padding0000:12; // ***Placeholder
- signed deltaX:13; // change in x
- signed padding0005:7; // ***Placeholder
-/*0000*/ signed deltaHeading:10;// change in heading
- signed deltaY:13; // change in y
- signed padding0006:9; // ***Placeholder
-/*0000*/ signed y:19; // y coord
- signed animation:13; // animation
-/*0000*/ unsigned heading:12; // heading
- signed x:19; // x coord
- signed padding0014:1; // ***Placeholder
-/*0000*/ signed z:19; // z coord
- signed deltaZ:13; // change in z
+/*0000*/ signed padding0000:12; // ***Placeholder
+ signed deltaX:13; // change in x
+ signed padding0005:7; // ***Placeholder
+/*0000*/ signed deltaHeading:10; // change in heading
+ signed deltaY:13; // change in y
+ signed padding0006:9; // ***Placeholder
+/*0000*/ signed y:19; // y coord
+ signed animation:13; // animation
+/*0000*/ unsigned heading:12; // heading
+ signed x:19; // x coord
+ signed padding0014:1; // ***Placeholder
+/*0000*/ signed z:19; // z coord
+ signed deltaZ:13; // change in z
+// If not a valid player race (skip these if a valid player race)
+/*0000*/ union
+ {
+ struct
+ {
+ /*0000*/ EquipStruct equip_helmet; // Equipment: Helmet visual (maybe)
+ /*0000*/ EquipStruct equip_primary; // Equipment: Main visual
+ /*0000*/ EquipStruct equip_secondary; // Equipment: Off visual
+ } equip;
+ /*0000*/ EquipStruct equipment[3];
+ };
+// skip these bytes if not a valid player race - colors[9] and equipment[9]
/*0000*/ union
{
struct
@@ -1212,9 +1241,7 @@
/*0000*/ Color_Struct color_secondary; // Color of secondary item
} equipment_colors;
/*0000*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above
- };
-
-// skip these bytes if not a valid player race
+ }
/*0000*/ union
{
struct
@@ -1231,12 +1258,11 @@
} equip;
/*0000*/ EquipStruct equipment[9];
};
-
-/*0000*/ char title[0]; // only read if(hasTitleOrSuffix & 4)
-/*0000*/ char suffix[0]; // only read if(hasTitleOrSuffix & 8)
+/*0000*/ char title[0]; // only read if(otherData & 8)
+/*0000*/ char suffix[0]; // only read if(otherData & 16)
/*0000*/ char unknown20[8];
/*0000*/ uint8_t isMercenary;
-/*0000*/ char unknown20[24];
+/*0000*/ char unknown21[54];
};
#endif

@@ -1244,31 +1270,31 @@
#if 0
// Old stuff from spawnStruct seq doesn't actually use at all..
//
-/*0004*/ float size; // Model size
-/*0078*/ int8_t aa_title; // 0=none, 1=general, 2=archtype, 3=class
-/*0074*/ uint8_t invis; // Invis (0=not, 1=invis)
-/*0117*/ uint8_t lfg; // 0=off, 1=lfg on
-/*0196*/ uint8_t afk; // 0=no, 1=afk
-/*0207*/ int8_t guildrank; // 0=normal, 1=officer, 2=leader
-/*0213*/ uint8_t face; // Face id for players
-/*0247*/ uint8_t is_pet; // 0=no, 1=yes
-/*0284*/ uint8_t beardcolor; // Beard color
-/*0500*/ uint8_t showhelm; // 0=no, 1=yes
-/*0501*/ uint8_t helm; // Helm texture
-/*0660*/ uint8_t hairstyle; // Hair style
-/*0090*/ uint8_t eyecolor1; // Player's left eye color
-/*0542*/ uint8_t eyecolor2; // Left eye color
-/*0547*/ uint8_t haircolor; // Hair color
-/*0574*/ uint8_t is_npc; // 0=no, 1=yes
-/*0575*/ uint8_t findable; // 0=can't be found, 1=can be found
-/*0728*/ uint8_t beard; // Beard style (not totally, sure but maybe!)
-/*0723*/ uint8_t max_hp; // (name prolly wrong)takes on the value 100 for players, 100 or 110 for NPCs and 120 for PC corpses...
-/*122*/ uint8_t pvp; // 0=Not pvp,1=pvp
+/*0004*/ float size; // Model size
+/*0078*/ int8_t aa_title; // 0=none, 1=general, 2=archtype, 3=class
+/*0074*/ uint8_t invis; // Invis (0=not, 1=invis)
+/*0117*/ uint8_t lfg; // 0=off, 1=lfg on
+/*0196*/ uint8_t afk; // 0=no, 1=afk
+/*0207*/ int8_t guildrank; // 0=normal, 1=officer, 2=leader
+/*0213*/ uint8_t face; // Face id for players
+/*0247*/ uint8_t is_pet; // 0=no, 1=yes
+/*0284*/ uint8_t beardcolor; // Beard color
+/*0500*/ uint8_t showhelm; // 0=no, 1=yes
+/*0501*/ uint8_t helm; // Helm texture
+/*0660*/ uint8_t hairstyle; // Hair style
+/*0090*/ uint8_t eyecolor1; // Player's left eye color
+/*0542*/ uint8_t eyecolor2; // Left eye color
+/*0547*/ uint8_t haircolor; // Hair color
+/*0574*/ uint8_t is_npc; // 0=no, 1=yes
+/*0575*/ uint8_t findable; // 0=can't be found, 1=can be found
+/*0728*/ uint8_t beard; // Beard style (not totally, sure but maybe!)
+/*0723*/ uint8_t max_hp; // (name prolly wrong)takes on the value 100 for PCs, 100 or 110 for NPCs and 120 for PC corpses...
+/*122*/ uint8_t pvp; // 0=Not pvp,1=pvp
union
{
-/*0091*/ int8_t equip_chest2; // Second place in packet for chest texture (usually 0xFF in live packets)
- // Not sure why there are 2 of them, but it effects chest texture!
-/*0091*/ int8_t mount_color; // drogmor: 0=white, 1=black, 2=green, 3=red
+/*0091*/ int8_t equip_chest2; // Second place in packet for chest texture (usually 0xFF in live packets)
+ // Not sure why there are 2 of them, but it effects chest texture!
+/*0091*/ int8_t mount_color; // drogmor: 0=white, 1=black, 2=green, 3=red
};
#endif

@@ -1293,21 +1319,21 @@

struct doorStruct
{
-/*0000*/ char name[32]; // Filename of Door?
-/*0016*/ // uint8_t unknown016[16]; // ***Placeholder
-/*0032*/ float y; // y loc
-/*0036*/ float x; // x loc
-/*0040*/ float z; // z loc
-/*0044*/ float heading; // heading
-/*0048*/ uint32_t incline; // incline
-/*0052*/ uint32_t size; // size
-/*0056*/ uint8_t unknown0056[4]; // ***Placeholder
-/*0060*/ uint8_t doorId; // door's id #
-/*0061*/ uint8_t opentype; // open type
-/*0062*/ uint8_t spawnstate; // spawn state
-/*0063*/ uint8_t invertstate; // invert state
+/*0000*/ char name[32]; // Filename of Door?
+/*0016*/ // uint8_t unknown016[16]; // ***Placeholder
+/*0032*/ float y; // y loc
+/*0036*/ float x; // x loc
+/*0040*/ float z; // z loc
+/*0044*/ float heading; // heading
+/*0048*/ uint32_t incline; // incline
+/*0052*/ uint32_t size; // size
+/*0056*/ uint8_t unknown0056[4]; // ***Placeholder
+/*0060*/ uint8_t doorId; // door's id #
+/*0061*/ uint8_t opentype; // open type
+/*0062*/ uint8_t spawnstate; // spawn state
+/*0063*/ uint8_t invertstate; // invert state
/*0064*/ uint32_t zonePoint;
-/*0068*/ uint8_t unknown068[28]; // ***Placeholder
+/*0068*/ uint8_t unknown068[28]; // ***Placeholder
/*0096*/
};

@@ -1320,13 +1346,13 @@
// now only fill this with data we need from the serialized packet
struct makeDropStruct
{
- uint32_t dropId; // DropID
- float heading; // Heading
- float z; // Z Position
- float x; // X Position
- float y; // Y Position
- char idFile[30]; // ACTOR ID - The client reads 30 bytes from the packet
- // - 20100210 eqgame.exe in EQItemList::UnpackNetData
+ uint32_t dropId; // DropID
+ float heading; // Heading
+ float z; // Z Position
+ float x; // X Position
+ float y; // Y Position
+ char idFile[30]; // ACTOR ID - The client reads 30 bytes from the packet
+ // - 20100210 eqgame.exe in EQItemList::UnpackNetData
};

/*
@@ -1367,12 +1393,12 @@
*/
struct timeOfDayStruct
{
-/*0000*/ uint8_t hour; // Hour (1-24)
-/*0001*/ uint8_t minute; // Minute (0-59)
-/*0002*/ uint8_t day; // Day (1-28)
-/*0003*/ uint8_t month; // Month (1-12)
-/*0004*/ uint16_t year; // Year
-/*0006*/ uint16_t unknown0016; // Placeholder
+/*0000*/ uint8_t hour; // Hour (1-24)
+/*0001*/ uint8_t minute; // Minute (0-59)
+/*0002*/ uint8_t day; // Day (1-28)
+/*0003*/ uint8_t month; // Month (1-12)
+/*0004*/ uint16_t year; // Year
+/*0006*/ uint16_t unknown0016; // Placeholder
/*0008*/
};

@@ -1384,7 +1410,7 @@
*/
struct itemPacketStruct
{
-/*000*/ ItemPacketType packetType; // See ItemPacketType for more info.
+/*000*/ ItemPacketType packetType; // See ItemPacketType for more info.
/*004*/ char serializedItem[0];
/*xx*/
};
@@ -1396,9 +1422,9 @@
*/
struct itemInfoReqStruct
{
-/*000*/ uint32_t itemNr; // ItemNr
-/*005*/ uint32_t requestSeq; // Request sequence number
-/*008*/ char name[64]; // Item name
+/*000*/ uint32_t itemNr; // ItemNr
+/*005*/ uint32_t requestSeq; // Request sequence number
+/*008*/ char name[64]; // Item name
/*072*/
};

@@ -1409,7 +1435,7 @@
*/
struct itemInfoStruct
{
-/*000*/ uint32_t requestSeq; // Corresponds to sequence # in req
+/*000*/ uint32_t requestSeq; // Corresponds to sequence # in req
/*004*/ char serializedItem[0];
/*xxx*/
};
@@ -1424,7 +1450,7 @@
struct spawnPositionUpdate
{
/*0000*/ int16_t spawnId;
-/*0002*/ uint8_t unk1[2]; // BSH 13 Apr 2011
+/*0002*/ uint8_t unk1[2]; // BSH 13 Apr 2011
/*0004*/ int64_t y:19, z:19, x:19, u3:7;
unsigned heading:12;
signed unused2:4;
@@ -1433,38 +1459,38 @@

/*
** Rename a spawn
-** Length: 200 Octets
+** Length: 232 Octets
** OpCode: SpawnRename
*/
struct spawnRenameStruct
{
/*000*/ char old_name[64];
-/*064*/ char old_name_again[64]; //not sure what the difference is
+/*064*/ char old_name_again[64]; //not sure what the difference is
/*128*/ char new_name[64];
-/*192*/ uint32_t unknown192; //set to 0
-/*196*/ uint32_t unknown196; //set to 1
-/*200*/ uint8_t unknown0084[32]; // ***Placeholder
+/*192*/ uint32_t unknown192; //set to 0
+/*196*/ uint32_t unknown196; //set to 1
+/*200*/ uint8_t unknown0084[32]; // ***Placeholder
/*232*/
};

/*
** Illusion a spawn
-** Length: 264 Octets
+** Length: 300 Octets
** OpCode: Illusion
*/
struct spawnIllusionStruct
{
-/*0000*/ uint32_t spawnId; // Spawn id of the target
-/*0004*/ char name[64]; // Name of the target
-/*0068*/ uint32_t race; // New race
-/*0072*/ uint8_t gender; // New gender (0=male, 1=female)
-/*0073*/ uint8_t texture; // ???
-/*0074*/ uint8_t helm; // ???
-/*0075*/ uint8_t unknown0075; // ***Placeholder
-/*0076*/ uint32_t unknown0076; // ***Placeholder
-/*0080*/ uint32_t face; // New face
-/*0084*/ uint8_t unknown0084[180]; // ***Placeholder
-/*0264*/
+/*0000*/ uint32_t spawnId; // Spawn id of the target
+/*0004*/ char name[64]; // Name of the target
+/*0068*/ uint32_t race; // New race
+/*0072*/ uint8_t gender; // New gender (0=male, 1=female)
+/*0073*/ uint8_t texture; // ???
+/*0074*/ uint8_t helm; // ???
+/*0075*/ uint8_t unknown0075; // ***Placeholder
+/*0076*/ uint32_t unknown0076; // ***Placeholder
+/*0080*/ uint32_t face; // New face
+/*0084*/ uint8_t unknown0084[216]; // ***Placeholder
+/*0300*/
};

/**
@@ -1476,9 +1502,9 @@
*/
struct spawnShroudOther
{
-/*00000*/ uint32_t spawnId; // Spawn Id of the shrouded player
-/*00004*/ uint16_t spawnStructSize; // Size of spawnStruct (or start of)
-/*00006*/ spawnStruct spawn; // Updated spawn struct for the player (variable length)
+/*00000*/ uint32_t spawnId; // Spawn Id of the shrouded player
+/*00004*/ uint16_t spawnStructSize; // Size of spawnStruct (or start of)
+/*00006*/ spawnStruct spawn; // Updated spawn struct for the player (variable length)
/*xxxxx*/
};

@@ -1493,11 +1519,11 @@
*/
struct spawnShroudSelf
{
-/*00000*/ uint32_t spawnId; // Spawn Id of you
-/*00004*/ uint16_t ppStart; // Start of playerProfile data (spawnId+ppStart+spawnStruct)
-/*00004*/ spawnStruct spawn; // Updated spawnStruct for you (variable length)
-/*xxxxx*/ playerProfileStruct profile; // Character profile for shrouded char
-/*xxxxx*/ uint8_t items; // Items on the player
+/*00000*/ uint32_t spawnId; // Spawn Id of you
+/*00004*/ uint16_t ppStart; // Start of playerProfile data (spawnId+ppStart+spawnStruct)
+/*00004*/ spawnStruct spawn; // Updated spawnStruct for you (variable length)
+/*xxxxx*/ playerProfileStruct profile; // Character profile for shrouded char
+/*xxxxx*/ uint8_t items; // Items on the player
/*xxxxx*/
};

@@ -1524,8 +1550,8 @@

struct dbSpawnStruct
{
-/*0000*/ struct spawnStruct spawn; // Spawn Information
-/*0258*/ char zoneName[40]; // Zone Information
+/*0000*/ struct spawnStruct spawn; // Spawn Information
+/*0258*/ char zoneName[40]; // Zone Information
};

/*
@@ -1534,8 +1560,8 @@

struct petStruct
{
-/*0000*/ struct spawnStruct owner; // Pet Owner Information
-/*0258*/ struct spawnStruct pet; // Pet Infromation
+/*0000*/ struct spawnStruct owner; // Pet Owner Information
+/*0258*/ struct spawnStruct pet; // Pet Infromation
};

/*
@@ -1546,7 +1572,7 @@

struct sysMsgStruct
{
-/*0000*/ char message[0]; // Variable length message
+/*0000*/ char message[0]; // Variable length message
};

/*
@@ -1557,8 +1583,8 @@

struct emoteTextStruct
{
-/*0000*/ uint8_t unknown0002[4]; // ***Placeholder
-/*0002*/ char text[0]; // Emote `Text
+/*0000*/ uint8_t unknown0002[4]; // ***Placeholder
+/*0002*/ char text[0]; // Emote `Text
};

/*
@@ -1568,19 +1594,19 @@

This is how channelMessageStruct looks on the wire, for reference (8/12/09 eqgame.exe)

-char sender[0]; // Variable length senders name
-char target[0]; // Variable length target characters name
+char sender[0]; // Variable length senders name
+char target[0]; // Variable length target characters name
uint32_t unknown;
-uint32_t language; // Language
-uint32_t chanNum; // Channel
+uint32_t language; // Language
+uint32_t chanNum; // Channel
uint32_t unknown;
uint8_t unknown;
-uint32_t skillInLanguage; // senders skill in language
-char message[0]; // Variable length message
+uint32_t skillInLanguage; // senders skill in language
+char message[0]; // Variable length message
uint8_t unknown;
uint32_t unknown;
uint32_t unknown;
-char unknown[0]; // Variable legth unknown text
+char unknown[0]; // Variable legth unknown text
uint8_t unknown;
uint32_t unknown;

@@ -1594,7 +1620,7 @@
/*0128*/ uint32_t language;
/*0132*/ uint32_t chanNum;
/*0144*/ uint32_t skillInLanguage;
-/*0148*/ char message[2048]; // Maximum message size according to eqgame.exe
+/*0148*/ char message[2048]; // Maximum message size according to eqgame.exe
};

/*
@@ -1605,11 +1631,11 @@

struct formattedMessageStruct
{
-/*0000*/ uint8_t unknown0002[4]; // ***Placeholder
-/*0004*/ uint32_t messageFormat; // Indicates the message format
-/*0008*/ ChatColor messageColor; // Message color
-/*0012*/ char messages[0]; // messages(NULL delimited)
-/*0???*/ uint8_t unknownXXXX[8]; // ***Placeholder
+/*0000*/ uint8_t unknown0002[4]; // ***Placeholder
+/*0004*/ uint32_t messageFormat; // Indicates the message format
+/*0008*/ ChatColor messageColor; // Message color
+/*0012*/ char messages[0]; // messages(NULL delimited)
+/*0???*/ uint8_t unknownXXXX[8]; // ***Placeholder
};

/*
@@ -1620,9 +1646,9 @@

struct simpleMessageStruct
{
-/*0000*/ uint32_t messageFormat; // Indicates the message format
-/*0004*/ ChatColor messageColor; // Message color
-/*0008*/ uint32_t unknown; // ***Placeholder
+/*0000*/ uint32_t messageFormat; // Indicates the message format
+/*0004*/ ChatColor messageColor; // Message color
+/*0008*/ uint32_t unknown; // ***Placeholder
/*0012*/
};

@@ -1634,13 +1660,13 @@

struct specialMessageStruct
{
- /*0000*/ uint8_t unknown0000[3]; // message style?
- /*0003*/ ChatColor messageColor; // message color
- /*0007*/ uint16_t target; // message target
- /*0009*/ uint16_t padding; // padding
- /*0011*/ char source[0]; // message text
- /*0xxx*/ uint32_t unknown0xxx[3]; //***Placeholder
- /*0yyy*/ char message[0]; // message text
+ /*0000*/ uint8_t unknown0000[3]; // message style?
+ /*0003*/ ChatColor messageColor; // message color
+ /*0007*/ uint16_t target; // message target
+ /*0009*/ uint16_t padding; // padding
+ /*0011*/ char source[0]; // message text
+ /*0xxx*/ uint32_t unknown0xxx[3]; //***Placeholder
+ /*0yyy*/ char message[0]; // message text
};

/*
@@ -1650,10 +1676,10 @@
*/
struct guildMOTDStruct
{
- /*0000*/ uint32_t unknown0000; //***Placeholder
- /*0004*/ char target[64]; // motd target
- /*0068*/ char sender[64]; // motd "sender" (who set it)
- /*0132*/ uint32_t unknown0132; //***Placeholder
+ /*0000*/ uint32_t unknown0000; //***Placeholder
+ /*0004*/ char target[64]; // motd target
+ /*0068*/ char sender[64]; // motd "sender" (who set it)
+ /*0132*/ uint32_t unknown0132; //***Placeholder
/*0136*/ char message[0];
};

@@ -1679,7 +1705,7 @@

struct consentRequestStruct
{
-/*0000*/ char consentee[0]; // Name of player who was consented
+/*0000*/ char consentee[0]; // Name of player who was consented
};

/*
@@ -1689,10 +1715,10 @@

struct consentResponseStruct
{
-/*0000*/ char consentee[64]; // Name of player who was consented
-/*0064*/ char consenter[64]; // Name of player who consented
-/*0128*/ uint8_t allow; // 00 = deny, 01 = allow
-/*0129*/ char corpseZoneName[64]; // Zone where the corpse is
+/*0000*/ char consentee[64]; // Name of player who was consented
+/*0064*/ char consenter[64]; // Name of player who consented
+/*0128*/ uint8_t allow; // 00 = deny, 01 = allow
+/*0129*/ char corpseZoneName[64]; // Zone where the corpse is
/*0193*/
};

@@ -1704,10 +1730,10 @@

struct groupUpdateStruct
{
-/*0000*/ int32_t action; // Group update action
-/*0004*/ char yourname[64]; // Group Member Names
-/*0068*/ char membername[64]; // Group leader name
-/*0132*/ uint8_t unknown0132[324]; // ***Placeholder
+/*0000*/ int32_t action; // Group update action
+/*0004*/ char yourname[64]; // Group Member Names
+/*0068*/ char membername[64]; // Group leader name
+/*0132*/ uint8_t unknown0132[324]; // ***Placeholder
/*456*/
};

@@ -1736,9 +1762,9 @@

struct groupInviteStruct
{
-/*0000*/ char invitee[64]; // Invitee's Name
-/*0064*/ char inviter[64]; // Inviter's Name
-/*0128*/ uint8_t unknown0128[24]; // ***Placeholder
+/*0000*/ char invitee[64]; // Invitee's Name
+/*0064*/ char inviter[64]; // Inviter's Name
+/*0128*/ uint8_t unknown0128[24]; // ***Placeholder
/*0152*/
};

@@ -1750,11 +1776,11 @@

struct groupDeclineStruct
{
-/*0000*/ char yourname[64]; // Player Name
-/*0064*/ char membername[64]; // Invited Member Name
-/*0128*/ uint8_t unknown0128[20]; // ***Placeholder
-/*0148*/ uint8_t reason; // Already in Group = 1, Declined Invite = 3
-/*0149*/ uint8_t unknown0141[3]; // ***Placeholder
+/*0000*/ char yourname[64]; // Player Name
+/*0064*/ char membername[64]; // Invited Member Name
+/*0128*/ uint8_t unknown0128[20]; // ***Placeholder
+/*0148*/ uint8_t reason; // Already in Group = 1, Declined Invite = 3
+/*0149*/ uint8_t unknown0141[3]; // ***Placeholder
/*0152*/
};

@@ -1766,11 +1792,11 @@

struct groupFollowStruct
{
-/*0000*/ char unknown0000[64]; // ***Placeholder (zeros)
-/*0064*/ char invitee[64]; // Invitee's Member Name
-/*0128*/ uint8_t unknown0132[4]; // ***Placeholder
-/*0132*/ uint32_t level; // Invitee's level
-/*0136*/ uint8_t unknown0136[12]; // ***Placeholder (zeros)
+/*0000*/ char unknown0000[64]; // ***Placeholder (zeros)
+/*0064*/ char invitee[64]; // Invitee's Member Name
+/*0128*/ uint8_t unknown0132[4]; // ***Placeholder
+/*0132*/ uint32_t level; // Invitee's level
+/*0136*/ uint8_t unknown0136[12]; // ***Placeholder (zeros)
/*0148*/
};

@@ -1782,9 +1808,9 @@

struct groupDisbandStruct
{
-/*0000*/ char yourname[64]; // Player Name
-/*0064*/ char membername[64]; // Invited Member Name
-/*0128*/ uint8_t unknown0128[20]; // ***Placeholder
+/*0000*/ char yourname[64]; // Player Name
+/*0064*/ char membername[64]; // Invited Member Name
+/*0128*/ uint8_t unknown0128[20]; // ***Placeholder
/*0148*/
};

@@ -1796,9 +1822,9 @@

struct groupLeaderChangeStruct
{
-/*0000*/ char unknown0000[64]; // ***Placeholder
-/*0064*/ char membername[64]; // Invited Member Name
-/*0128*/ uint8_t unknown0128[20]; // ***Placeholder
+/*0000*/ char unknown0000[64]; // ***Placeholder
+/*0064*/ char membername[64]; // Invited Member Name
+/*0128*/ uint8_t unknown0128[20]; // ***Placeholder
/*0148*/
};

@@ -1810,7 +1836,7 @@

struct deleteSpawnStruct
{
-/*0000*/ uint32_t spawnId; // Spawn ID to delete
+/*0000*/ uint32_t spawnId; // Spawn ID to delete
/*0004*/
};

@@ -1822,8 +1848,8 @@

struct removeSpawnStruct
{
-/*0000*/ uint32_t spawnId; // Spawn ID to delete
-/*0004*/ uint8_t removeSpawn; // 0 if spawn is not in your update radius
+/*0000*/ uint32_t spawnId; // Spawn ID to delete
+/*0004*/ uint8_t removeSpawn; // 0 if spawn is not in your update radius
/*0005*/
};

@@ -1835,10 +1861,10 @@

struct remDropStruct
{
-/*0000*/ uint16_t dropId; // DropID - Guess
-/*0002*/ uint8_t unknown0004[2]; // ***Placeholder
-/*0004*/ uint16_t spawnId; // Pickup ID - Guess
-/*0006*/ uint8_t unknown0008[2]; // ***Placeholder
+/*0000*/ uint16_t dropId; // ID assigned to drop
+/*0002*/ uint8_t unknown0004[2]; // ***Placeholder
+/*0004*/ uint16_t spawnId; // ID of player picking item up
+/*0006*/ uint8_t unknown0008[2]; // ***Placeholder
/*0008*/
};

@@ -1850,11 +1876,11 @@

struct considerStruct
{
-/*0000*/ uint32_t playerid; // PlayerID
-/*0004*/ uint32_t targetid; // TargetID
-/*0008*/ int32_t faction; // Faction
-/*0012*/ int32_t level; // Level
-/*0016*/ int32_t unknown0016; // unknown
+/*0000*/ uint32_t playerid; // PlayerID
+/*0004*/ uint32_t targetid; // TargetID
+/*0008*/ int32_t faction; // Faction
+/*0012*/ int32_t level; // Level
+/*0016*/ int32_t unknown0016; // unknown
/*0020*/
};

@@ -1866,13 +1892,13 @@

struct castOnStruct
{
-/*0000*/ uint16_t targetId; // Target ID
-/*0002*/ uint8_t unknown0002[2]; // ***Placeholder
-/*0004*/ int16_t sourceId; // ***Source ID
-/*0006*/ uint8_t unknown0006[2]; // ***Placeholder
-/*0008*/ uint8_t unknown0008[24]; // might be some spell info?
-/*0032*/ uint16_t spellId; // Spell Id
-/*0034*/ uint8_t unknown0034[2]; // ***Placeholder
+/*0000*/ uint16_t targetId; // Target ID
+/*0002*/ uint8_t unknown0002[2]; // ***Placeholder
+/*0004*/ int16_t sourceId; // ***Source ID
+/*0006*/ uint8_t unknown0006[2]; // ***Placeholder
+/*0008*/ uint8_t unknown0008[24]; // might be some spell info?
+/*0032*/ uint16_t spellId; // Spell Id
+/*0034*/ uint8_t unknown0034[2]; // ***Placeholder
/*0036*/
};

@@ -1884,32 +1910,32 @@

struct newCorpseStruct
{
-/*0000*/ uint32_t spawnId; // Id of spawn that died
-/*0004*/ uint32_t killerId; // Killer
-/*0008*/ uint32_t corpseid; // corpses id
-/*0012*/ int32_t type; // corpse type?
-/*0016*/ uint32_t spellId; // ID of Spell
-/*0020*/ uint16_t zoneId; // Bind zone id
-/*0022*/ uint16_t zoneInstance; // Bind zone instance
-/*0024*/ uint32_t damage; // Damage
-/*0028*/ uint8_t unknown0028[4]; // ***Placeholder
+/*0000*/ uint32_t spawnId; // Id of spawn that died
+/*0004*/ uint32_t killerId; // Killer
+/*0008*/ uint32_t corpseid; // corpses id
+/*0012*/ int32_t type; // corpse type?
+/*0016*/ uint32_t spellId; // ID of Spell
+/*0020*/ uint16_t zoneId; // Bind zone id
+/*0022*/ uint16_t zoneInstance; // Bind zone instance
+/*0024*/ uint32_t damage; // Damage
+/*0028*/ uint8_t unknown0028[4]; // ***Placeholder
/*0032*/
};

/**
** Environmental damage (lava, falls)
-** Length: 31 Octets
+** Length: 39 Octets
*/

struct environmentDamageStruct
{
-/*0000*/ uint32_t spawnId; // Who is taking the damage
+/*0000*/ uint32_t spawnId; // Who is taking the damage
/*0004*/ uint8_t unknown0004[2];
-/*0006*/ uint32_t damage; // how much damage?
+/*0006*/ uint32_t damage; // how much damage?
/*0010*/ uint8_t unknown0010[12];
-/*0022*/ uint8_t type; // Damage type. FC = fall. FA = lava.
-/*0023*/ uint8_t unknown0023[8];
-/*0031*/
+/*0022*/ uint8_t type; // Damage type. FC = fall. FA = lava.
+/*0023*/ uint8_t unknown0023[16];
+/*0039*/
};

/*
@@ -1920,11 +1946,11 @@

struct moneyOnCorpseStruct
{
-/*0000*/ uint8_t unknown0002[4]; // ***Placeholder
-/*0004*/ uint32_t platinum; // Platinum Pieces
-/*0008*/ uint32_t gold; // Gold Pieces
-/*0012*/ uint32_t silver; // Silver Pieces
-/*0016*/ uint32_t copper; // Copper Pieces
+/*0000*/ uint8_t unknown0002[4]; // ***Placeholder
+/*0004*/ uint32_t platinum; // Platinum Pieces
+/*0008*/ uint32_t gold; // Gold Pieces
+/*0012*/ uint32_t silver; // Silver Pieces
+/*0016*/ uint32_t copper; // Copper Pieces
/*0020*/
};

@@ -1936,8 +1962,8 @@

struct staminaStruct
{
-/*0000*/ uint32_t food; // Hunger, in ticks till next eat
-/*0004*/ uint32_t water; // Thirst, in ticks till next eat
+/*0000*/ uint32_t food; // Hunger, in ticks till next eat
+/*0004*/ uint32_t water; // Thirst, in ticks till next eat
/*0008*/
};

@@ -1950,28 +1976,28 @@
// This can be used to gather info on spells cast on us
struct action2Struct
{
-/*0000*/ uint16_t target; // Target ID
-/*0002*/ uint16_t source; // Source ID
-/*0004*/ uint8_t type; // Bash, kick, cast, etc.
-/*0005*/ int16_t spell; // SpellID
+/*0000*/ uint16_t target; // Target ID
+/*0002*/ uint16_t source; // Source ID
+/*0004*/ uint8_t type; // Bash, kick, cast, etc.
+/*0005*/ int16_t spell; // SpellID
/*0007*/ int32_t damage;
-/*0011*/ uint8_t unknown0011[13]; // ***Placeholder
-/*0024*/ uint8_t unknown0024[4]; // ***Placeholder (11/24/07)
+/*0011*/ uint8_t unknown0011[13]; // ***Placeholder
+/*0024*/ uint8_t unknown0024[4]; // ***Placeholder (11/24/07)
/*0028*/
};

// This can be used to gather info on spells cast on us
struct actionStruct
{
-/*0000*/ uint16_t target; // Target ID
-/*0002*/ uint16_t source; // SourceID
-/*0004*/ uint8_t level; // Caster level
-/*0005*/ uint8_t unknown0005[21]; // ***Placeholder
-/*0026*/ uint8_t type; // Casts, Falls, Bashes, etc...
+/*0000*/ uint16_t target; // Target ID
+/*0002*/ uint16_t source; // SourceID
+/*0004*/ uint8_t level; // Caster level
+/*0005*/ uint8_t unknown0005[21]; // ***Placeholder
+/*0026*/ uint8_t type; // Casts, Falls, Bashes, etc...
/*0027*/ uint8_t unknown0031[6];
-/*0033*/ int16_t spell; // SpellID
-/*0035*/ uint8_t unknown0035[2]; // ***Placeholder
-/*0037*/ uint8_t unknown0037[2]; // ***Placeholder
+/*0033*/ int16_t spell; // SpellID
+/*0035*/ uint8_t unknown0035[2]; // ***Placeholder
+/*0037*/ uint8_t unknown0037[2]; // ***Placeholder
/*0039*/
};

@@ -1980,14 +2006,14 @@
// has to do with buff blocking??
struct actionAltStruct
{
-/*0000*/ uint16_t target; // Target ID
-/*0002*/ uint16_t source; // SourceID
-/*0004*/ uint8_t level; // Caster level
-/*0005*/ uint8_t unknown0005[21]; // ***Placeholder
-/*0026*/ uint8_t type; // Casts, Falls, Bashes, etc...
+/*0000*/ uint16_t target; // Target ID
+/*0002*/ uint16_t source; // SourceID
+/*0004*/ uint8_t level; // Caster level
+/*0005*/ uint8_t unknown0005[21]; // ***Placeholder
+/*0026*/ uint8_t type; // Casts, Falls, Bashes, etc...
/*0027*/ uint8_t unknown0031[6];
-/*0033*/ int16_t spell; // SpellID
-/*0035*/ uint8_t unknown0035[2]; // ***Placeholder
+/*0033*/ int16_t spell; // SpellID
+/*0035*/ uint8_t unknown0035[2]; // ***Placeholder
/*0037*/ uint32_t unknown0037;
/*0041*/ uint8_t unknown0041[15];
/*0056*/
@@ -2001,7 +2027,7 @@

struct clientTargetStruct
{
-/*0000*/ uint32_t newTarget; // Target ID
+/*0000*/ uint32_t newTarget; // Target ID
/*0004*/
};

@@ -2013,13 +2039,13 @@

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

@@ -2031,11 +2057,11 @@

struct manaDecrementStruct
{
-/*0000*/ int32_t newMana; // New Mana AMount
+/*0000*/ int32_t newMana; // New Mana AMount
/*0004*/ int32_t unknown;
-/*0008*/ int32_t spellId; // Last Spell Cast
+/*0008*/ int32_t spellId; // Last Spell Cast
/*0012*/ uint8_t unknown0012[4];
-/*0016*/ uint8_t unknown0016[4]; //*** Placeholder (02/13/07)
+/*0016*/ uint8_t unknown0016[4]; //*** Placeholder (02/13/07)
/*0020*/
};

@@ -2046,8 +2072,8 @@
*/
struct spMesgStruct
{
-/*0000*/ int32_t msgType; // Type of message
-/*0004*/ char message[0]; // Message, followed by four Octets?
+/*0000*/ int32_t msgType; // Type of message
+/*0004*/ char message[0]; // Message, followed by four Octets?
};

/*
@@ -2057,9 +2083,9 @@
*/
struct spellFadedStruct
{
-/*0000*/ uint32_t color; // color of the spell fade message
-/*0004*/ char message[0]; // fade message
-/*0???*/ uint8_t paddingXXX[3]; // always 0's
+/*0000*/ uint32_t color; // color of the spell fade message
+/*0004*/ char message[0]; // fade message
+/*0???*/ uint8_t paddingXXX[3]; // always 0's
};

/*
@@ -2069,10 +2095,10 @@
*/
struct beginCastStruct
{
-/*0000*/ uint16_t spawnId; // Id of who is casting
-/*0002*/ uint16_t spellId; // Id of spell
-/*0004*/ int16_t param1; // Paramater 1
-/*0006*/ int16_t param2; // Paramater 2
+/*0000*/ uint16_t spawnId; // Id of who is casting
+/*0002*/ uint16_t spellId; // Id of spell
+/*0004*/ int16_t param1; // Paramater 1
+/*0006*/ int16_t param2; // Paramater 2
/*0008*/
};

@@ -2084,11 +2110,11 @@

struct memSpellStruct
{
-/*0000*/ uint32_t slotId; // Slot spell is being memorized in
-/*0004*/ uint32_t spellId; // Id of spell
-/*0008*/ int16_t param1; // Paramater 1
-/*0010*/ int16_t param2; // Paramater 2
-/*0012*/ uint8_t unknown0012[4]; // *** Placeholder
+/*0000*/ uint32_t slotId; // Slot spell is being memorized in
+/*0004*/ uint32_t spellId; // Id of spell
+/*0008*/ int16_t param1; // Paramater 1
+/*0010*/ int16_t param2; // Paramater 2
+/*0012*/ uint8_t unknown0012[4]; // *** Placeholder
/*0016*/
};

@@ -2100,9 +2126,9 @@

struct skillTrainStruct
{
-/*0000*/ int32_t playerid; // player doing the training
-/*0004*/ int32_t type; // type of training?
-/*0008*/ uint32_t skillId; // Id of skill
+/*0000*/ int32_t playerid; // player doing the training
+/*0004*/ int32_t type; // type of training?
+/*0008*/ uint32_t skillId; // Id of skill
/*0012*/
};

@@ -2114,9 +2140,9 @@

struct skillIncStruct
{
-/*0000*/ uint32_t skillId; // Id of skill
-/*0004*/ int32_t value; // New value of skill
-/*0008*/ uint8_t unknown0008[4]; // *** Placeholder
+/*0000*/ uint32_t skillId; // Id of skill
+/*0004*/ int32_t value; // New value of skill
+/*0008*/ uint8_t unknown0008[4]; // *** Placeholder
/*0012*/
};

@@ -2130,10 +2156,10 @@
// ZBTEMP: Find newItemID
struct wearChangeStruct
{
-/*0000*/ uint16_t spawnId; // SpawnID
-/*0002*/ Color_Struct color; // item color
-/*0006*/ uint8_t wearSlotId; // Slot ID
-/*0007*/ uint8_t unknown0007[7]; // unknown
+/*0000*/ uint16_t spawnId; // SpawnID
+/*0002*/ Color_Struct color; // item color
+/*0006*/ uint8_t wearSlotId; // Slot ID
+/*0007*/ uint8_t unknown0007[7]; // unknown
/*0014*/
};

@@ -2145,9 +2171,9 @@

struct levelUpUpdateStruct
{
-/*0000*/ uint32_t level; // New level
-/*0004*/ uint32_t levelOld; // Old level
-/*0008*/ uint32_t exp; // Current Experience
+/*0000*/ uint32_t level; // New level
+/*0004*/ uint32_t levelOld; // Old level
+/*0008*/ uint32_t exp; // Current Experience
/*0012*/
};

@@ -2159,8 +2185,8 @@

struct expUpdateStruct
{
-/*0000*/ uint32_t exp; // experience value x/330
-/*0004*/ uint32_t type; // 0=set, 2=update
+/*0000*/ uint32_t exp; // experience value x/330
+/*0004*/ uint32_t type; // 0=set, 2=update
/*0008*/
};

@@ -2171,10 +2197,10 @@
*/
struct altExpUpdateStruct
{
-/*0000*/ uint32_t altexp; // alt exp x/330
-/*0004*/ uint32_t aapoints; // current number of AA points
-/*0008*/ uint8_t percent; // percentage in integer form
-/*0009*/ uint8_t unknown0009[3]; // ***Place Holder
+/*0000*/ uint32_t altexp; // alt exp x/330
+/*0004*/ uint32_t aapoints; // current number of AA points
+/*0008*/ uint8_t percent; // percentage in integer form
+/*0009*/ uint8_t unknown0009[3]; // ***Place Holder
/*0012*/
};

@@ -2185,32 +2211,32 @@
*/
struct leadExpUpdateStruct
{
-/*0000*/ uint32_t unknown0000; // All zeroes?
-/*0004*/ uint32_t groupLeadExp; // Group leadership exp value
-/*0008*/ uint32_t unspentGroupPoints; // Unspent group points
-/*0012*/ uint32_t unknown0012; // Type?
-/*0016*/ uint32_t unknown0016; // All zeroes?
-/*0020*/ uint32_t raidLeadExp; // Raid leadership exp value
-/*0024*/ uint32_t unspentRaidPoints; // Unspent raid points
+/*0000*/ uint32_t unknown0000; // All zeroes?
+/*0004*/ uint32_t groupLeadExp; // Group leadership exp value
+/*0008*/ uint32_t unspentGroupPoints; // Unspent group points
+/*0012*/ uint32_t unknown0012; // Type?
+/*0016*/ uint32_t unknown0016; // All zeroes?
+/*0020*/ uint32_t raidLeadExp; // Raid leadership exp value
+/*0024*/ uint32_t unspentRaidPoints; // Unspent raid points
/*0028*/ uint32_t unknown0028;
/*0032*/
};

/*
** Player Spawn Update
-** Length: 19 Octets
+** Length: 23 Octets
** OpCode: SpawnUpdateCode
*/

struct SpawnUpdateStruct
{
-/*0000*/ uint16_t spawnId; // Id of spawn to update
-/*0002*/ uint16_t subcommand; // some sort of subcommand type
-/*0004*/ int16_t arg1; // first option
-/*0006*/ int16_t arg2; // second option
-/*0008*/ uint8_t arg3; // third option?
-/*0009*/ uint8_t unknown0009[10];
-/*0019*/
+/*0000*/ uint16_t spawnId; // Id of spawn to update
+/*0002*/ uint16_t subcommand; // some sort of subcommand type
+/*0004*/ int16_t arg1; // first option
+/*0006*/ int16_t arg2; // second option
+/*0008*/ uint8_t arg3; // third option?
+/*0009*/ uint8_t unknown0009[14];
+/*0023*/
};

/*
@@ -2235,12 +2261,12 @@

struct inspectDataStruct
{
-/*0000*/ uint8_t unknown0000[8]; // ***Placeholder
-/*0008*/ char itemNames[23][64]; // 23 items with names
- // 64 characters long.
-/*1480*/ int32_t icons[23]; // Icon Information
-/*1572*/ char mytext[200]; // Player Defined Text Info
-/*1772*/ uint8_t unknown1772[88]; // ***Placeholder
+/*0000*/ uint8_t unknown0000[8]; // ***Placeholder
+/*0008*/ char itemNames[23][64]; // 23 items with names
+ // 64 characters long.
+/*1480*/ int32_t icons[23]; // Icon Information
+/*1572*/ char mytext[200]; // Player Defined Text Info
+/*1772*/ uint8_t unknown1772[88]; // ***Placeholder
/*1860*/
};

@@ -2253,7 +2279,7 @@
struct bookTextStruct
{
/*0000*/ uint16_t unknown0000;
-/*0002*/ char text[0]; // Text of item reading
+/*0002*/ char text[0]; // Text of item reading
};

/*
@@ -2264,8 +2290,8 @@

struct badCastStruct
{
-/*0000*/ uint32_t spawnId; // Id of who is casting
-/*0004*/ char message[0]; // Text Message
+/*0000*/ uint32_t spawnId; // Id of who is casting
+/*0004*/ char message[0]; // Text Message
};

/*
@@ -2275,8 +2301,8 @@
*/
struct randomReqStruct
{
-/*0000*/ uint32_t bottom; // Low number
-/*0004*/ uint32_t top; // High number
+/*0000*/ uint32_t bottom; // Low number
+/*0004*/ uint32_t top; // High number
/*0008*/
};

@@ -2287,10 +2313,10 @@
*/
struct randomStruct
{
-/*0000*/ uint32_t bottom; // Low number
-/*0004*/ uint32_t top; // High number
-/*0008*/ uint32_t result; // result number
-/*0012*/ char name[64]; // name rolled by
+/*0000*/ uint32_t bottom; // Low number
+/*0004*/ uint32_t top; // High number
+/*0008*/ uint32_t result; // result number
+/*0012*/ char name[64]; // name rolled by
/*0076*/
};

@@ -2303,21 +2329,21 @@
struct playerSpawnPosStruct
{
/*0000*/ uint16_t spawnId;
- uint8_t unk[2]; // BSH 13 Apr 2011
-/*0002*/ signed padding0000:12; // ***Placeholder
- signed deltaX:13; // change in x
- signed padding0005:7; // ***Placeholder
-/*0006*/ signed deltaHeading:10;// change in heading
- signed deltaY:13; // change in y
- signed padding0006:9; // ***Placeholder
-/*0010*/ signed y:19; // y coord
- signed animation:10; // animation
- signed padding0010:3; // ***Placeholder
-/*0014*/ unsigned heading:12; // heading
- signed x:19; // x coord
- signed padding0014:1; // ***Placeholder
-/*0020*/ signed z:19; // z coord
- signed deltaZ:13; // change in z
+ uint8_t unk[2]; // BSH 13 Apr 2011
+/*0002*/ signed padding0000:12; // ***Placeholder
+ signed deltaX:13; // change in x
+ signed padding0005:7; // ***Placeholder
+/*0006*/ signed deltaHeading:10; // change in heading
+ signed deltaY:13; // change in y
+ signed padding0006:9; // ***Placeholder
+/*0010*/ signed y:19; // y coord
+ signed animation:10; // animation
+ signed padding0010:3; // ***Placeholder
+/*0014*/ unsigned heading:12; // heading
+ signed x:19; // x coord
+ signed padding0014:1; // ***Placeholder
+/*0020*/ signed z:19; // z coord
+ signed deltaZ:13; // change in z
/*0024*/
};

@@ -2329,21 +2355,21 @@

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

@@ -2356,9 +2382,9 @@

struct spawnAppearanceStruct
{
-/*0000*/ uint16_t spawnId; // ID of the spawn
-/*0002*/ uint16_t type; // Type of data sent
-/*0004*/ uint32_t parameter; // Values associated with the type
+/*0000*/ uint16_t spawnId; // ID of the spawn
+/*0002*/ uint16_t type; // Type of data sent
+/*0004*/ uint32_t parameter; // Values associated with the type
/*0008*/
};

@@ -2370,55 +2396,55 @@

struct bindWoundStruct
{
-/*0000*/ uint16_t playerid; // TargetID
-/*0002*/ uint8_t unknown0002[2]; // ***Placeholder
-/*0004*/ uint32_t hpmaybe; // Hitpoints -- Guess
+/*0000*/ uint16_t playerid; // TargetID
+/*0002*/ uint8_t unknown0002[2]; // ***Placeholder
+/*0004*/ uint32_t hpmaybe; // Hitpoints -- Guess
/*0008*/
};

struct inspectedStruct
{
-/*0000*/ uint16_t inspectorid; // Source ID
-/*0002*/ uint8_t unknown0002[2]; // ***Placeholder
-/*0004*/ uint16_t inspectedid; // Target ID - Should be you
-/*0006*/ uint8_t unknown0006[2]; // ***Placeholder
+/*0000*/ uint16_t inspectorid; // Source ID
+/*0002*/ uint8_t unknown0002[2]; // ***Placeholder
+/*0004*/ uint16_t inspectedid; // Target ID - Should be you
+/*0006*/ uint8_t unknown0006[2]; // ***Placeholder
/*0008*/
};

struct attack1Struct
{
-/*0000*/ uint16_t spawnId; // Spawn ID
-/*0002*/ int16_t param1; // ***Placeholder
-/*0004*/ int16_t param2; // ***Placeholder
-/*0006*/ int16_t param3; // ***Placeholder
-/*0008*/ int16_t param4; // ***Placeholder
-/*0010*/ int16_t param5; // ***Placeholder
+/*0000*/ uint16_t spawnId; // Spawn ID
+/*0002*/ int16_t param1; // ***Placeholder
+/*0004*/ int16_t param2; // ***Placeholder
+/*0006*/ int16_t param3; // ***Placeholder
+/*0008*/ int16_t param4; // ***Placeholder
+/*0010*/ int16_t param5; // ***Placeholder
/*0012*/
};

struct attack2Struct
{
-/*0000*/ uint16_t spawnId; // Spawn ID
-/*0002*/ int16_t param1; // ***Placeholder
-/*0004*/ int16_t param2; // ***Placeholder
-/*0006*/ int16_t param3; // ***Placeholder
-/*0008*/ int16_t param4; // ***Placeholder
-/*0010*/ int16_t param5; // ***Placeholder
+/*0000*/ uint16_t spawnId; // Spawn ID
+/*0002*/ int16_t param1; // ***Placeholder
+/*0004*/ int16_t param2; // ***Placeholder
+/*0006*/ int16_t param3; // ***Placeholder
+/*0008*/ int16_t param4; // ***Placeholder
+/*0010*/ int16_t param5; // ***Placeholder
/*0012*/
};

struct newGuildInZoneStruct
{
-/*0000*/ uint8_t unknown0000[8]; // ***Placeholder
-/*0008*/ char guildname[56]; // Guildname
+/*0000*/ uint8_t unknown0000[8]; // ***Placeholder
+/*0008*/ char guildname[56]; // Guildname
/*0064*/
};

struct moneyUpdateStruct
{
-/*0000*/ uint32_t spawnid; // ***Placeholder
-/*0004*/ uint32_t cointype; // Coin Type
-/*0008*/ uint32_t amount; // Amount
+/*0000*/ uint32_t spawnid; // ***Placeholder
+/*0004*/ uint32_t cointype; // Coin Type
+/*0008*/ uint32_t amount; // Amount
/*0012*/
};

@@ -2426,43 +2452,43 @@

struct memorizeSlotStruct
{
-/*0000*/ uint32_t slot; // Memorization slot (0-7)
-/*0004*/ uint32_t spellId; // Id of spell
- // (offset of spell in spdat.eff)
-/*0008*/ uint32_t action; // 1-memming,0-scribing,2-forget
+/*0000*/ uint32_t slot; // Memorization slot (0-7)
+/*0004*/ uint32_t spellId; // Id of spell
+ // (offset of spell in spdat.eff)
+/*0008*/ uint32_t action; // 1-memming,0-scribing,2-forget
/*0012*/
};

struct cRunToggleStruct
{
-/*0000*/ uint32_t status; //01=run 00=walk
+/*0000*/ uint32_t status; //01=run 00=walk
};

struct cChatFiltersStruct
{
-/*0000*/ uint32_t DamageShields; //00=on 01=off
-/*0004*/ uint32_t NPCSpells; //00=on 01=off
-/*0008*/ uint32_t PCSpells; //00=all 01=off 02=grp
-/*0012*/ uint32_t BardSongs; //00=all 01=me 02=grp 03=off
+/*0000*/ uint32_t DamageShields; //00=on 01=off
+/*0004*/ uint32_t NPCSpells; //00=on 01=off
+/*0008*/ uint32_t PCSpells; //00=all 01=off 02=grp
+/*0012*/ uint32_t BardSongs; //00=all 01=me 02=grp 03=off
/*0016*/ uint32_t Unused;
-/*0020*/ uint32_t GuildChat; //00=off 01=on
-/*0024*/ uint32_t Socials; //00=off 01=on
-/*0028*/ uint32_t GroupChat; //00=off 01=on
-/*0032*/ uint32_t Shouts; //00=off 01=on
-/*0036*/ uint32_t Auctions; //00=off 01=on
-/*0040*/ uint32_t OOC; //00=off 01=on
-/*0044*/ uint32_t MyMisses; //00=off 01=on
-/*0048*/ uint32_t OthersMisses; //00=off 01=on
-/*0052*/ uint32_t OthersHits; //00=off 01=on
-/*0056*/ uint32_t AttackerMisses; //00=off 01=on
-/*0060*/ uint32_t CriticalSpells; //00=all 01=me 02=off
-/*0064*/ uint32_t CriticalMelee; //00=all 01=me 02=off
+/*0020*/ uint32_t GuildChat; //00=off 01=on
+/*0024*/ uint32_t Socials; //00=off 01=on
+/*0028*/ uint32_t GroupChat; //00=off 01=on
+/*0032*/ uint32_t Shouts; //00=off 01=on
+/*0036*/ uint32_t Auctions; //00=off 01=on
+/*0040*/ uint32_t OOC; //00=off 01=on
+/*0044*/ uint32_t MyMisses; //00=off 01=on
+/*0048*/ uint32_t OthersMisses; //00=off 01=on
+/*0052*/ uint32_t OthersHits; //00=off 01=on
+/*0056*/ uint32_t AttackerMisses; //00=off 01=on
+/*0060*/ uint32_t CriticalSpells; //00=all 01=me 02=off
+/*0064*/ uint32_t CriticalMelee; //00=all 01=me 02=off
/*0068*/
};

struct cOpenSpellBookStruct
{
-/*0000*/ int32_t status; //01=open 00=close
+/*0000*/ int32_t status; //01=open 00=close
/*0004*/
};

@@ -2484,7 +2510,7 @@
{
/*0000*/ uint16_t spawnID;
/*0002*/ uint16_t unknown0004;
-/*0004*/ uint16_t LFG; //1=LFG
+/*0004*/ uint16_t LFG; //1=LFG
/*0006*/ uint16_t unknown0008;
/*0008*/
};
@@ -2498,7 +2524,7 @@
struct clientLFGStruct
{
/*0000*/ uint8_t name[64];
-/*0064*/ uint16_t LFG; //1=LFG
+/*0064*/ uint16_t LFG; //1=LFG
/*0066*/ uint16_t unknown0008;
};

@@ -2510,16 +2536,16 @@

struct buffStruct
{
-/*0000*/ uint32_t spawnid; //spawn id
+/*0000*/ uint32_t spawnid; //spawn id
/*0004*/ uint8_t unknown0004[4];
/*0008*/ float unknown0008;
-/*0012*/ uint32_t spellid; // spellid
-/*0016*/ uint32_t duration; // duration
+/*0012*/ uint32_t spellid; // spellidbegin
+/*0016*/ uint32_t duration; // duration
/*0024*/ uint8_t unknown0024[8];
-/*0028*/ uint32_t playerId; // Player id who cast the buff
+/*0028*/ uint32_t playerId; // Player id who cast the buff
/*0032*/ uint8_t unknown0032[4];
-/*0036*/ uint32_t spellslot; // spellslot
-/*0040*/ uint32_t changetype; // 1=buff fading,2=buff duration
+/*0036*/ uint32_t spellslot; // spellslot
+/*0040*/ uint32_t changetype; // 1=buff fading,2=buff duration
/*0044*/
};

@@ -2531,46 +2557,56 @@

struct GuildMemberUpdate
{
-/*000*/ uint32_t guildId; // guild id
-/*004*/ char name[64]; // member name
-/*068*/ uint16_t zoneId; // zone id
-/*070*/ uint16_t zoneInstance; // zone instance
-/*072*/ uint32_t lastOn; // time the player was last on.
+/*000*/ uint32_t guildId; // guild id
+/*004*/ char name[64]; // member name
+/*068*/ uint16_t zoneId; // zone id
+/*070*/ uint16_t zoneInstance; // zone instance
+/*072*/ uint32_t lastOn; // time the player was last on.
/*076*/
};

/*
** Bazaar trader on/off struct
-** Length: 8 Octets
+** Length: 76 Octets
**
*/
struct bazaarTraderRequest
{
-/*000*/ uint32_t spawnId; // Spawn id of person turning trader on/off
-/*004*/ uint8_t mode; // 0=off, 1=on
-/*005*/ uint8_t uknown005[3]; //
-/*008*/
+/*000*/ uint32_t spawnId; // Spawn id of person turning trader on/off
+/*004*/ uint8_t mode; // 0=off, 1=on
+/*005*/ uint8_t uknown005[3]; //
+/*008*/ char name[64]; // trader name
+/*072*/ uint8_t uknown072[4]; //
+/*076*/
};

struct bazaarSearchQueryStruct
{
uint32_t mark;
uint32_t type;
- char unknownXXX0[20]; // Value seems to always be the same
- char searchstring[64];
+ char unknownXXX0[20]; // Value seems to always be the same
+ char searchstring[64];
uint32_t unknownXXX1;
uint32_t unknownXXX2;
};

+/*
+** Item Bazaar Search Result
+** Length: 160 Octets
+** OpCode: BazaarSearch
+*/
struct bazaarSearchResponseStruct
{
- uint32_t mark;
- uint32_t count;
- uint32_t item_id;
- uint32_t player_id;
- uint32_t price;
- uint32_t status; // XXX Still poorly understood. 0=simple search
- char item_name[64]; // nul-padded name with appended "(count)"
+/*0000*/ uint32_t mark; // ***unknown***
+/*0004*/ uint32_t player_id; // trader ID
+/*0008*/ char merchant_name[64]; // trader name
+/*0072*/ uint32_t count; // Count of items for sale
+/*0076*/ uint32_t item_id; // ID of item for sale
+/*0080*/ uint8_t uknown0080[8]; // ***unknown***
+/*0088*/ char item_name[64]; // nul-padded name with appended "(count)"
+/*0152*/ uint32_t price; // price in copper
+/*0156*/ uint8_t uknown0156[4]; // ***unknown***
+/*0160*/
};

/*
@@ -2608,7 +2644,7 @@
{
/*000*/ uint8_t unknown000[64];
/*064*/ uint32_t numberOfGuilds; // ?
-/*068*/ guildListStruct guilds[MAX_GUILDS]; // MAX_GUILDS varies by server now
+/*068*/ guildListStruct guilds[MAX_GUILDS]; // MAX_GUILDS varies by server now
};

struct worldMOTDStruct
diff -u -x '*.moc' -x '*.o' showeq/src/filter.cpp showeq/src/filter.cpp
--- src/filter.cpp 2012-04-03 22:02:27.725366591 -0400
+++ src/filter.cpp 2012-03-22 17:57:06.000000000 -0400
@@ -56,8 +56,8 @@
/* FilterItem Class - allows easy creation / deletion of regex types */
FilterItem::FilterItem(const QString& filterPattern, bool caseSensitive)
{
- uint8_t minLevel = 0;
- uint8_t maxLevel = 0;
+ uint32_t minLevel = 0;
+ uint32_t maxLevel = 0;

QString workString = filterPattern;

diff -u -x '*.moc' -x '*.o' showeq/src/spawnshell.cpp showeq/src/spawnshell.cpp
--- src/spawnshell.cpp 2012-04-03 22:02:27.807365349 -0400
+++ src/spawnshell.cpp 2012-03-22 17:57:06.000000000 -0400
@@ -654,20 +654,31 @@
spawn->posData[3] = netStream.readUInt32NC();
spawn->posData[4] = netStream.readUInt32NC();

- // skip color
- netStream.skipBytes(36);
-
race = spawn->race;

// this is how the client checks if equipment should be read.
if(spawn->NPC == 0 || race <= 12 || race == 128 || race == 130 || race == 330 || race == 522)
{
+ // skip color
+ netStream.skipBytes(36);
for(i = 0; i < 9; i++)
{
spawn->equipment[i].itemId = netStream.readUInt32NC();
+ spawn->equipment[i].equip2 = netStream.readUInt32NC();
spawn->equipment[i].equip1 = netStream.readUInt32NC();
spawn->equipment[i].equip0 = netStream.readUInt32NC();
}
+ } else {
+ netStream.skipBytes(16);
+ spawn->equipment[7].itemId = netStream.readUInt32NC();
+ spawn->equipment[7].equip2 = netStream.readUInt32NC();
+ spawn->equipment[7].equip1 = netStream.readUInt32NC();
+ spawn->equipment[7].equip0 = netStream.readUInt32NC();
+ // secondary
+ spawn->equipment[8].itemId = netStream.readUInt32NC();
+ spawn->equipment[8].equip2 = netStream.readUInt32NC();
+ spawn->equipment[8].equip1 = netStream.readUInt32NC();
+ spawn->equipment[8].equip0 = netStream.readUInt32NC();
}

if(spawn->otherData & 8)
diff -u -x '*.moc' -x '*.o' showeq/src/terminal.cpp showeq/src/terminal.cpp
--- src/terminal.cpp 2012-04-03 22:02:27.834364940 -0400
+++ src/terminal.cpp 2012-03-22 18:08:19.000000000 -0400
@@ -27,7 +27,7 @@
"\e[0;32m", // 5 - OOC
NULL, // 6
"\e[0;35m", // 7 - Tell
- "\e[1;37m", // 8 - Say
+ "\e[1;38m", // 8 - Say
NULL, // 9
NULL, // 10
"\e[5;31m", // 11 - GM Say
diff -u -x '*.moc' -x '*.o' showeq/configure.in showeq/configure.in
--- configure.in 2012-04-03 22:02:28.020362122 -0400
+++ configure.in 2012-04-03 20:54:21.300570447 -0400
@@ -4,6 +4,7 @@
AC_PREREQ(2.59)
AC_INIT(showeq, 5.13.10.4)
AC_CONFIG_SRCDIR(src/main.cpp)
+AC_CONFIG_MACRO_DIR([m4])
AC_CANONICAL_SYSTEM

AM_CONFIG_HEADER(config.h)
diff -u -x '*.moc' -x '*.o' showeq/m4/doxygen.m4 showeq/m4/doxygen.m4
--- m4/doxygen.m4 2012-04-03 22:02:26.033392223 -0400
+++ m4/doxygen.m4 2012-04-03 20:55:40.368429065 -0400
@@ -78,7 +78,7 @@
AC_PATH_TOOL([$1], [$2])
if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then
AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION])
- AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0)
+ AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0)
fi
])

@@ -101,7 +101,7 @@
# ----------------------------------------------------------
# Turn off the DX_CURRENT_FEATURE if the required feature is off.
AC_DEFUN([DX_CLEAR_DEPEND], [
-test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0)
+test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0)
])

# DX_FEATURE_ARG(FEATURE, DESCRIPTION,


Fransick

fransick
04-03-2012, 10:21 AM
The following change was purely aesthetic as my terminal window has a white background so /say wasn't showing up very well so I changed the color to black. You can ignore if you don't have the same issue.


diff -u -x '*.moc' -x '*.o' showeq/src/terminal.cpp showeq/src/terminal.cpp
--- showeq/src/terminal.cpp 2012-04-01 18:23:52.909569776 -0400
+++ showeq/src/terminal.cpp 2012-03-22 18:08:19.000000000 -0400
@@ -27,7 +27,7 @@
"\e[0;32m", // 5 - OOC
NULL, // 6
"\e[0;35m", // 7 - Tell
- "\e[1;37m", // 8 - Say
+ "\e[1;38m", // 8 - Say
NULL, // 9
NULL, // 10
"\e[5;31m", // 11 - GM Say

Other than that, so far so good as I had it running for 24 hrs+ without any issues or error messages. Enjoy and grats Razzle on the addition to your family!

Fransick

Roads
04-03-2012, 08:18 PM
Nice work fran.. i need to learn how to patch better.. takes me forever cause i have to relearn everytime:)

fransick
04-03-2012, 09:15 PM
I am editing the patch to make it easier to apply... so if you re-copy it from the post above and drop it into your showeq directory the following works for me:


patch -p0 < whateveryounamedthepatch.patch

Fransick

rogues
04-04-2012, 03:22 AM
Thanks for all the effort, it's really appreciated. I'm trying to patch as well and just can't get it to take for some reason. I figured I was doing something really wrong, but now Roads has me thinking I'm not. I download a clean 5-13.10.4 (which as far as I can tell is revision 760) and copy that patch into emacs and save it, but I get this:

[root@eq222 showeq-5.13.10.4]# patch -p0 < VoA7
patching file conf/zoneopcodes.xml
Hunk #1 FAILED at 2.
1 out of 13 hunks FAILED -- saving rejects to file conf/zoneopcodes.xml.rej
patching file src/everquest.h
Hunk #6 FAILED at 531.
Hunk #11 FAILED at 665.
Hunk #30 FAILED at 1270.
Hunk #34 FAILED at 1410.
Hunk #36 FAILED at 1435.
Hunk #37 FAILED at 1450.
Hunk #38 FAILED at 1459.
Hunk #67 FAILED at 1976.
Hunk #70 FAILED at 2039.
Hunk #88 FAILED at 2329.
10 out of 97 hunks FAILED -- saving rejects to file src/everquest.h.rej
patching file src/filter.cpp
patching file src/spawnshell.cpp
patching file src/terminal.cpp
patching file configure.in
patching file m4/doxygen.m4
[root@eq222 showeq-5.13.10.4]#

And those .rej files are huge. It can only lead me to believe I really am bad at copying and pasting, or I'm using the wrong src. Any thoughts?

Nstalkerga
04-04-2012, 05:30 AM
hmmm I got the same failures as rogues.
When i get some time later this afternoon, ill go through the process see if i misread something during the process

fransick
04-04-2012, 06:24 AM
I'm no expert but downloading a clean copy via SVN and applying the patch as described above works flawlessly for me. Not sure about the tarball version. I'll create a diff off of that later if I have time. It's possible the tarball is slightly different from the last SVN commit.

Nstalkerga
04-04-2012, 06:46 AM
wow you know ive been reading SVN .. and still downloading off the CVS .... (old habit)
lets see if i can get that figured out and try this again.

Nstalkerga
04-04-2012, 06:58 AM
ok well crap ... better .. but not quite ...
If i can figure it out ill update what i find.


# svn checkout https://seq.svn.sf.net/svnroot/seq/showeq/trunk
Checked out revision 760.
# cd trunk
# patch -p0 <patch
patching file conf/zoneopcodes.xml
Hunk #1 FAILED at 2.
1 out of 13 hunks FAILED -- saving rejects to file conf/zoneopcodes.xml.rej
patching file src/everquest.h
Hunk #6 FAILED at 531.
Hunk #11 FAILED at 665.
Hunk #30 FAILED at 1254.
Hunk #34 FAILED at 1394.
Hunk #36 FAILED at 1419.
Hunk #37 FAILED at 1434.
Hunk #38 FAILED at 1443.
Hunk #67 FAILED at 1960.
Hunk #70 FAILED at 2023.
Hunk #88 FAILED at 2313.
10 out of 97 hunks FAILED -- saving rejects to file src/everquest.h.rej
patching file src/filter.cpp
patching file src/spawnshell.cpp
patching file src/terminal.cpp
patching file configure.in
patching file m4/doxygen.m4

rogues
04-04-2012, 09:26 AM
Thanks, I'll try to figure out where to grab the svn when I get home. I've just been going to the download link that's provided in the announcement forum, but maybe it varies somewhat.

Roads
04-04-2012, 09:28 AM
i always grab the tarball off the sourceforge.. didnt know bout the svn:)

rogues
04-04-2012, 10:40 AM
Here's a link I think, just click "download GNU tarball". Can't wait to try it when I get home!!!

http://seq.svn.sourceforge.net/viewvc/seq/showeq/

fransick
04-04-2012, 12:09 PM
Here's a link I think, just click "download GNU tarball". Can't wait to try it when I get home!!!

http://seq.svn.sourceforge.net/viewvc/seq/showeq/

And here's the command to download using svn...


svn co https://seq.svn.sf.net/svnroot/seq/showeq/trunk showeq

Roads
04-04-2012, 12:11 PM
ah thank you fran.. i just know enough linux to make some things work... i never know enough it seems:)

Nstalkerga
04-04-2012, 01:37 PM
rogues- i found a little bit of info on the SVN.

run
svn checkout https://seq.svn.sf.net/svnroot/seq/showeq/trunk

that will create a directory called trunk wherever you run it from.
the entire showeq structure (not the full file set) the layout is just like what your used to from the tarballs

pita
04-04-2012, 03:47 PM
I am getting the same hunks failed as Nstalkerga, using the svn trunk.

rogues
04-04-2012, 03:57 PM
Me too.

fransick
04-04-2012, 05:05 PM
Well here's one way to fix the issue... not sexy but effective.Below are complete files for zoneopcodes.xml and everquest.h:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE seqopcodes SYSTEM "seqopcodes.dtd">
<seqopcodes>

<!-- Critical opcodes used directly by ShowEQ -->
<opcode id="2339" name="OP_NpcMoveUpdate" updated="03/23/12">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="1910" name="OP_MovementHistory" updated="03/23/12">
<comment>Movement data... rewind info?</comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="28c7" name="OP_DeleteSpawn" updated="03/23/12">
<comment>DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>
<opcode id="5821" name="OP_ZoneEntry" updated="03/23/12">
<comment>ZoneEntryCode</comment>
<payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="1b7b" name="OP_GuildMOTD" updated="03/23/12">
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>
<opcode id="0c54" name="OP_InspectAnswer" updated="03/23/12">
<comment>InspectDataCode</comment>
<payload dir="both" typename="inspectDataStruct" sizechecktype="match"/>
</opcode>
<opcode id="3edc" name="OP_TargetMouse" updated="03/23/12">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>
<opcode id="1d51" name="OP_Shroud" updated="03/23/12">
<comment>Server putting players into shroud form</comment>
<payload dir="server" typename="spawnShroudSelf" sizechecktype="none"/>
</opcode>
<opcode id="3288" name="OP_GroupInvite" updated="03/23/12">
<payload dir="both" typename="groupInviteStruct" sizechecktype="none"/>
<comment>You invite someone while ungrouped or get invited by someone ungrouped </comment>
</opcode>
<opcode id="5251" name="OP_GroupInvite2" updated="03/23/12">
<payload dir="client" typename="groupInviteStruct" sizechecktype="match"/>
<comment>You're inviting someone and you are grouped or get invited by a group</comment>
</opcode>
<opcode id="74e9" name="OP_GroupFollow" updated="03/23/12">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>You join a group or player joins group</comment>
</opcode>
<opcode id="44c2" name="OP_GroupFollow2" updated="03/23/12">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>Player joins your group</comment>
</opcode>
<opcode id="367b" name="OP_GroupDisband" updated="03/23/12">
<comment>You disband from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
<opcode id="4b82" name="OP_GroupDisband2" updated="03/23/12">
<comment>Other disbands from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
<opcode id="5fe3" name="OP_GroupLeader" updated="03/23/12">
<comment>Group leader change</comment>
<payload dir="server" typename="groupLeaderChangeStruct" sizechecktype="match"/>
</opcode>
<opcode id="2736" name="OP_GroupCancelInvite" updated="03/23/12">
<payload dir="both" typename="groupDeclineStruct" sizechecktype="match"/>
<comment>Declining to join a group</comment>
</opcode>
<opcode id="28ce" name="OP_DzSwitchInfo" updated="03/23/12">
<comment>Expedition compass etc</comment>
<payload dir="server" typename="dzSwitchInfo" sizechecktype="none"/>
</opcode>
<opcode id="6c75" name="OP_DzInfo" updated="03/23/12">
<comment>Expedition Information</comment>
<payload dir="server" typename="dzInfo" sizechecktype="match"/>
</opcode>
<opcode id="4675" name="OP_FormattedMessage" updated="03/23/12">
<comment>FormattedMessageCode</comment>
<payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/>
</opcode>
<opcode id="7113" name="OP_SpawnDoor" updated="03/23/12">
<comment>DoorSpawnsCode</comment>
<payload dir="server" typename="doorStruct" sizechecktype="modulus"/>
</opcode>
<opcode id="1318" name="OP_AAExpUpdate" updated="03/23/12">
<comment>Receiving AA experience. Also when percent to AA changes.</comment>
<payload dir="server" typename="altExpUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="2369" name="OP_HPUpdate" updated="03/23/12">
<comment>NpcHpUpdateCode Update HP % of a PC or NPC</comment>
<payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="589f" name="OP_GuildMemberUpdate" updated="03/23/12">
<comment>Info regarding guild members</comment>
<payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/>
</opcode>
<opcode id="0598" name="OP_SpawnRename" updated="03/23/12">
<comment>Spawns getting renamed after initial NewSpawn</comment>
<payload dir="server" typename="spawnRenameStruct" sizechecktype="match"/>
</opcode>
<opcode id="28a7" name="OP_SwapSpell" updated="03/23/12">
<comment>TradeSpellBookSlotsCode</comment>
<payload dir="both" typename="tradeSpellBookSlotsStruct" sizechecktype="match"/>
</opcode>
<opcode id="0698" name="OP_SimpleMessage" updated="03/23/12">
<comment>SimpleMessageCode</comment>
<payload dir="server" typename="simpleMessageStruct" sizechecktype="match"/>
</opcode>
<opcode id="039d" name="OP_SpecialMesg" updated="03/23/12">
<comment>Communicate textual info to client</comment>
<payload dir="server" typename="specialMessageStruct" sizechecktype="none"/>
</opcode>
<opcode id="303E" name="OP_RandomReq" updated="03/23/12">
<comment>RandomReqCode</comment>
<payload dir="client" typename="randomReqStruct" sizechecktype="match"/>
</opcode>
<opcode id="35c6" name="OP_ConsentResponse" updated="03/23/12">
<comment>Server replying with consent information after /consent</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
<opcode id="0370" name="OP_DenyResponse" updated="03/23/12">
<comment>Server replying with deny information after /deny</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
<opcode id="2881" name="OP_BazaarSearch" updated="03/23/12">
<payload dir="client" typename="bazaarSearchQueryStruct" sizechecktype="none"/>
<payload dir="server" typename="bazaarSearchResponseStruct" sizechecktype="modulus"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
<comment>Bazaar search tool</comment>
</opcode>
<opcode id="1a58" name="OP_WearChange" updated="03/23/12">
<comment>SpawnUpdateCode</comment>
<payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="7686" name="OP_Stamina" updated="03/23/12">
<comment>Server updating on hunger/thirst</comment>
<payload dir="server" typename="staminaStruct" sizechecktype="match"/>
</opcode>
<opcode id="70c6" name="OP_Consider" updated="03/23/12">
<comment>ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>
<opcode id="43ac" name="OP_NewZone" updated="03/23/12">
<comment>NewZoneCode</comment>
<payload dir="server" typename="newZoneStruct" sizechecktype="match"/>
</opcode>
<opcode id="33e5" name="OP_GroundSpawn" updated="03/23/12">
<comment>MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="none"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="3164" name="OP_RemoveSpawn" updated="03/23/12">
<comment>Remove spawn from zone</comment>
<payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>
<opcode id="6685" name="OP_Death" updated="03/23/12">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>
<opcode id="5f0d" name="OP_ClickObject" updated="03/23/12">
<comment>Items dropped on the ground</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>
<opcode id="1b85" name="OP_Action" updated="03/23/12">
<comment>Spells cast etc</comment>
<payload dir="both" typename="actionStruct" sizechecktype="match"/>
<payload dir="both" typename="actionAltStruct" sizechecktype="match"/>
</opcode>
<opcode id="631a" name="OP_Action2" updated="03/23/12">
<comment>Combat actions i.e. bash, kick etc</comment>
<payload dir="both" typename="action2Struct" sizechecktype="match"/>
</opcode>
<opcode id="10b7" name="OP_Illusion" updated="03/23/12">
<comment>Spawn being illusioned (changing forms)</comment>
<payload dir="both" typename="spawnIllusionStruct" sizechecktype="match"/>
</opcode>
<opcode id="3887" name="OP_BuffFadeMsg" updated="03/23/12">
<comment>SpellFadeCode</comment>
<payload dir="both" typename="spellFadedStruct" sizechecktype="none"/>
</opcode>
<opcode id="71bf" name="OP_CastSpell" updated="03/23/12">
<comment>StartCastCode</comment>
<payload dir="both" typename="startCastStruct" sizechecktype="match"/>
</opcode>
<opcode id="2917" name="OP_MemorizeSpell" updated="03/23/12">
<comment>MemSpellCode</comment>
<payload dir="both" typename="memSpellStruct" sizechecktype="match"/>
</opcode>
<opcode id="7434" name="OP_Emote" updated="03/23/12">
<comment>EmoteTextCode</comment>
<payload dir="both" typename="emoteTextStruct" sizechecktype="none"/>
</opcode>
<opcode id="07fb" name="OP_RandomReply" updated="03/23/12">
<comment>RandomCode</comment>
<payload dir="server" typename="randomStruct" sizechecktype="match"/>
</opcode>
<opcode id="8543" name="OP_ManaChange" updated="03/23/12">
<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"/>
</opcode>
<opcode id="4074" name="OP_MoneyOnCorpse" updated="03/23/12">
<comment>MoneyOnCorpseCode</comment>
<payload dir="server" typename="moneyOnCorpseStruct" sizechecktype="match"/>
</opcode>
<opcode id="6afd" name="OP_PlayerProfile" updated="03/23/12">
<comment>CharProfileCode</comment>
<payload dir="server" typename="charProfileStruct" sizechecktype="match"/>
</opcode>
<opcode id="6015" name="OP_TimeOfDay" updated="03/23/12">
<comment>TimeOfDayCode</comment>
<payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/>
</opcode>
<opcode id="7062" name="OP_ClientUpdate" updated="03/23/12">
<comment>Position updates</comment>
<payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/>
<payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/>
</opcode>
<opcode id="0d5a" name="OP_BeginCast" updated="03/23/12">
<comment>BeginCastCode</comment>
<payload dir="both" typename="beginCastStruct" sizechecktype="match"/>
</opcode>
<opcode id="2e79" name="OP_CommonMessage" updated="03/23/12">
<comment>ChannelMessageCode</comment>
<payload dir="both" typename="channelMessageStruct" sizechecktype="none"/>
</opcode>
<opcode id="7f01" name="OP_SkillUpdate" updated="03/23/12">
<comment>Skill up code</comment>
<payload dir="server" typename="skillIncStruct" sizechecktype="match"/>
</opcode>
<opcode id="3f55" name="OP_SpawnAppearance" updated="03/23/12">
<comment>SpawnAppearanceCode</comment>
<payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/>
</opcode>
<opcode id="0000" name="OP_ExpUpdate" updated="03/23/12">
<comment>ExpUpdateCode - opcode looks to be 221a as of 03/23/12 but that value causes seg faults for some reason</comment>
<payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="6e1c" name="OP_LevelUpdate" updated="03/23/12">
<comment>LevelUpUpdateCode</comment>
<payload dir="server" typename="levelUpUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="3703" name="OP_LeaderExpUpdate" updated="03/23/12">
<comment>Leadership AA Exp Update</comment>
<payload dir="server" typename="leadExpUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="4656" name="OP_MobUpdate" updated="03/23/12">
<comment>MobUpdateCode</comment>
<payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/>
</opcode>
<opcode id="358a" name="OP_Trader" updated="03/23/12">
<comment>PC's turning trader on and off</comment>
<payload dir="server" typename="bazaarTraderRequest" sizechecktype="match"/>
</opcode>
<opcode id="6bb9" name="OP_Consent" updated="03/23/12">
<comment>/consent someone</comment>
<payload dir="client" typename="consentRequestStruct" sizechecktype="none"/>
</opcode>
<opcode id="6b7f" name="OP_ConsentDeny" updated="03/23/12">
<comment>/deny someone</comment>
<payload dir="client" typename="consentRequestStruct" sizechecktype="none"/>
</opcode>
<opcode id="2dd3" name="OP_ItemPacket" updated="03/23/12">
<comment>ItemCode</comment>
<payload dir="server" typename="itemPacketStruct" sizechecktype="none"/>
</opcode>
<opcode id="24c9" name="OP_ItemLinkResponse" updated="03/23/12">
<comment>ItemInfoCode</comment>
<payload dir="server" typename="itemInfoStruct" sizechecktype="none"/>
<payload dir="client" typename="itemInfoReqStruct" sizechecktype="none"/>
</opcode>
<opcode id="2730" name="OP_EnvDamage" updated="03/23/12">
<comment>Environmental Damage</comment>
<payload dir="client" typename="environmentDamageStruct" sizechecktype="match"/>
</opcode>

<!-- Not necessary for SEQ to run but here to name packets in logs. -->
<opcode id="367f" name="OP_GroupUpdate" updated="03/23/12">
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
<comment>Variable length packet with group member names</comment>
</opcode>
<opcode id="51bc" name="OP_GuildMemberList" updated="03/23/12">
<comment>List of guild members</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="7c94" name="OP_ManaUpdate" updated="03/23/121">
<comment>Mana Update opcode</comment>
</opcode>
<opcode id="5851" name="OP_EndUpdate" updated="03/23/12">
<comment>Endurance Update opcode</comment>
</opcode>
<opcode id="7c11" name="OP_Marketplace" updated="03/23/12">
<comment>Marketplace data</comment>
</opcode>
<opcode id="012f" name="OP_DzMembers" updated="03/23/12">
<comment>Expedition Members</comment>
</opcode>
<opcode id="4292" name="OP_Campfire" updated="03/23/12">
<comment>Fellowship campfire information</comment>
</opcode>
<opcode id="3637" name="OP_Claims" updated="03/23/12">
<comment>Contents of claims window</comment>
</opcode>
<opcode id="0fd3" name="OP_VoiceChat" updated="03/23/12">
<comment>Voice chat server info?</comment>
</opcode>
<opcode id="47b3" name="OP_PollQuestions" updated="03/23/12">
<comment>SOE in-game player poll questions</comment>
</opcode>
<opcode id="a1e6" name="OP_PollResponses" updated="03/23/12">
<comment>Poll response choices</comment>
</opcode>
<opcode id="064d" name="OP_ShroudProgression" updated="03/23/12">
<comment>Unlocked shrouds</comment>
</opcode>
<opcode id="01e5" name="OP_Fellowship" updated="03/23/12">
<comment>Fellowship information</comment>
</opcode>
<opcode id="03d1" name="OP_ExpandedGuildInfo" updated="03/23/12">
<comment>Variable length guild ranks and other misc guild data</comment>
</opcode>
<opcode id="7b22" name="OP_GuildBank" updated="03/23/12">
<comment>Guild bank contents</comment>
</opcode>
<opcode id="29df" name="OP_OpenTradeskillContainer" updated="03/23/12">
<comment>Opens forge, kiln etc</comment>
</opcode>
<opcode id="1ecf" name="OP_TradeskillRecipes" updated="03/23/12">
<comment>Learned recipes</comment>
</opcode>
<opcode id="6cfe" name="OP_ItemPlayerPacket" updated="03/23/12">
<comment>Inventory/bank items coming over during zone</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="2E4F" name="OP_TaskDescription" updated="03/23/12">
<comment>Task descriptions coming down for task window</comment>
</opcode>
<opcode id="512B" name="OP_TaskActivity" updated="03/23/12">
<comment>Task activity descriptions coming down for task window</comment>
</opcode>
<opcode id="3141" name="OP_CompletedTasks" updated="03/23/12">
<comment>Task history for task window</comment>
</opcode>
<opcode id="6ade" name="OP_CustomTitles" updated="03/23/12">
<comment>List of available titles</comment>
</opcode>
<opcode id="0b93" name="OP_Animation" updated="03/23/12">
<comment>Combat animation, emote animations etc</comment>
</opcode>
<opcode id="177a" name="OP_WhoAllRequest" updated="03/23/12">
<comment>old WhoAllReqCode</comment>
</opcode>
<opcode id="15de" name="OP_WhoAllResponse" updated="03/23/12">
<comment>sWhoAllOutputCode</comment>
</opcode>
<opcode id="2683" name="OP_InspectRequest" updated="03/23/12">
<comment>InspectRequestCode</comment>
</opcode>
<opcode id="709d" name="OP_GetGuildMOTD" updated="03/23/12">
<comment>GuildMOTD</comment>
</opcode>
<opcode id="0c24" name="OP_TradeRequest" updated="03/23/12">
<comment>Client request trade session</comment>
</opcode>
<opcode id="2c03" name="OP_TradeDeny" updated="03/23/12">
<comment>Target not ready to trade</comment>
</opcode>
<opcode id="606a" name="OP_TradeRequestAck" updated="03/23/12">
<comment>Trade request recipient is acknowledging they are able to trade</comment>
</opcode>
<opcode id="527e" name="OP_CancelTrade" updated="03/23/12">
<comment>Cancel a trade window</comment>
</opcode>
<opcode id="1ebb" name="OP_FinishTrade" updated="03/23/12">
<comment>Trade is over</comment>
</opcode>
<opcode id="1418" name="OP_TradeCoins" updated="03/23/12">
<comment>Coins put in trade window</comment>
</opcode>
<opcode id="064a" name="OP_TradeAcceptClick" updated="03/23/12">
<comment>One side clicks Accept on the trade</comment>
</opcode>
<opcode id="6948" name="OP_ItemLinkClick" updated="03/23/12">
<comment>Click on itemlinks</comment>
</opcode>
<opcode id="00bc" name="OP_EndLootRequest" updated="03/23/12">
<comment>DoneLootingCode</comment>
</opcode>
<opcode id="5bd9" name="OP_LootItem" updated="03/23/12">
<comment>Loot item from corpse</comment>
</opcode>
<opcode id="79e0" name="OP_Track" updated="03/23/12">
<comment>Clicked Track</comment>
</opcode>
<opcode id="49f4" name="OP_TraderShop" updated="03/23/12">
<comment>OpenTraderCode right-click on a trader in bazaar</comment>
</opcode>
<opcode id="2257" name="OP_AutoAttack" updated="03/23/12">
<comment>Attack on/off</comment>
</opcode>
<opcode id="701f" name="OP_AutoAttack2" updated="03/23/12">
<comment>Attack on/off appears to be same as OP_AutoAttack</comment>
</opcode>
<opcode id="48f9" name="OP_ClickDoor" updated="03/23/12">
<comment>DoorOpenCode click request from client</comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="231f" name="OP_MoveDoor" updated="03/23/12">
<comment>DoorClickCode response from server</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="2963" name="OP_MoveItem" updated="03/23/12">
<comment>Client moving an item from one slot to another</comment>
</opcode>
<opcode id="783c" name="OP_TraderBuy" updated="03/23/12">
<comment>buy from a trader in bazaar</comment>
</opcode>
<opcode id="1d85" name="OP_LootRequest" updated="03/23/12">
<comment>LootCorpseCode</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="08b3" name="OP_Jump" updated="03/23/12">
<comment>JumpCode</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="3672" name="OP_TGB" updated="03/23/12">
<comment>Client telling server to set targetgroupbuff</comment>
</opcode>
<opcode id="488b" name="OP_Lockouts" updated="03/23/12">
<comment>Client requesting lockouts</comment>
</opcode>
<opcode id="3ef9" name="OP_WelcomeScreenURL" updated="03/23/12">
<comment>URLs for the welcome screen window</comment>
</opcode>
<opcode id="550f" name="OP_RaidJoin" updated="03/23/12">
<comment>Client side raid invite requests</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0c08" name="OP_RaidInvite" updated="03/23/12">
<comment>Server side raid information</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="52b5" name="OP_Feedback" updated="03/23/12">
<comment>Client sending feedback to server</comment>
</opcode>
<opcode id="5b0b" name="OP_GuildsList" updated="03/23/12">
<comment>Listing of all guilds</comment>
</opcode>
<opcode id="20c6" name="OP_LFGGetMatchesRequest" updated="03/23/12">
<comment>LFG/LFP client request</comment>
</opcode>
<opcode id="3d0c" name="OP_LFGGetMatchesResponse" updated="03/23/12">
<comment>FLG/LFP server response</comment>
</opcode>

<!-- 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="5cb0" name="OP_Unknown1" updated="03/23/12">
<comment>3 byte opcode that spam logs. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="4d27" name="OP_Unknown2" updated="03/23/12">
<comment>3 byte opcode that spam logs. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="190c" name="OP_Unknown3" updated="03/23/12">
<comment>3 byte opcode that spam logs. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>

<!-- Below are unverified -->
<opcode id="0000" name="OP_Buff" updated="11/15/11">
<comment>old BuffDropCode</comment>
<payload dir="both" typename="buffStruct" sizechecktype="match"/>
</opcode>
<opcode id="0000" name="OP_ZoneChange" updated="04/18/11">
<comment>old ZoneChangeCode</comment>
<payload dir="both" typename="zoneChangeStruct" sizechecktype="match"/>
</opcode>
<opcode id="0000" name="OP_CorpseLocResponse" updated="06/12/09">
<comment>old CorpseLocCode:</comment>
<payload dir="server" typename="corpseLocStruct" sizechecktype="match"/>
</opcode>
<opcode id="0000" name="OP_SendZonePoints" updated="10/15/10">
<comment>Coords in a zone that will port you to another zone</comment>
<payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
</opcode>
<opcode id="24D8" 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"/>
</opcode>
<opcode id="44AE" name="OP_Logout" updated="10/21/09">
<comment></comment>
<payload dir="server" typename="none" sizechecktype="match"/>
</opcode>
<opcode id="097f" name="OP_WelcomeScreenTitle" updated="05/16/11">
<comment></comment>
</opcode>
<opcode id="5d0f" name="OP_VeteranRewards" update="04/18/11">
<comment></comment>
</opcode>
<opcode id="3B85" name="OP_SendAATable" updated="08/12/09">
<comment></comment>
</opcode>
<opcode id="5832" name="OP_SendAAStats" updated="08/12/09">
<comment></comment>
</opcode>
<opcode id="4d38" name="OP_AckPacket" updated="03/14/07">
<comment>Appears to be generic ack at the presentation level</comment>
</opcode>
<opcode id="71fb" name="OP_TributeUpdate" updated="03/14/07">
<comment>Tribute information</comment>
</opcode>
<opcode id="70a5" name="OP_Weather" updated="03/14/07">
<comment>old WeatherCode</comment>
</opcode>
<opcode id="5417" name="OP_ReqNewZone" updated="03/14/07">
<comment>Client requesting NewZone_Struct</comment>
</opcode>
<opcode id="45d2" name="OP_ReqClientSpawn" updated="03/14/07">
<comment>Client requesting spawn data</comment>
</opcode>
<opcode id="0000" name="OP_SendExpZonein" updated="03/14/07">
<comment>Both directions. Negotiating sending of exp info.</comment>
</opcode>
<opcode id="0a4f" name="OP_AAAction" updated="03/14/07">
<comment>Used for changing percent, buying? and activating skills</comment>
</opcode>
<opcode id="7038" name="OP_SetServerFilter" updated="03/14/07">
<comment>Client telling server /filter information</comment>
</opcode>
<opcode id="3854" name="OP_ClientReady" updated="03/14/07">
<comment></comment>
</opcode>
<opcode id="6774" name="OP_GuildTributeStatus" updated="03/14/07">
<comment>Guild tribute stats send on zone</comment>
</opcode>
<opcode id="28c1" name="OP_GuildTributeInfo" updated="06/13/06">
<comment>Guild tribute loadout, only if on</comment>
</opcode>
<opcode id="063b" name="OP_RespawnWindow" updated="03/14/07">
<comment>Server telling client enough to populate the respawn window when you die</comment>
</opcode>
<opcode id="010D" name="OP_InitialMobHealth" updated="03/14/07">
<comment>Initial health sent when a player clicks on the mob. Subsequent updated will be OP_MobHealth</comment>
</opcode>
<opcode id="311a" name="OP_MobHealth" updated="03/14/07">
<comment>health sent when a player clicks on the mob</comment>
</opcode>
<opcode id="16c1" name="OP_DeltaCheck" updated="03/14/07">
<comment>Client sending server delta information.</comment>
</opcode>
<opcode id="61ac" name="OP_LoadSpellSet" updated="02/13/07">
<comment>/mem spellsetname</comment>
</opcode>
<opcode id="00de" name="OP_Dye" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="31c2" name="OP_Consume" updated="12/07/05">
<comment>Client force feeding food/drink</comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="13e7" name="OP_Begging" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="68ac" name="OP_LFGCommand" updated="10/27/05">
<comment>old LFGReqCode</comment>
</opcode>
<opcode id="7ac3" name="OP_Bug" updated="10/27/05">
<comment>/bug</comment>
</opcode>
<opcode id="5c06" name="OP_Save" updated="04/19/06">
<comment>Client asking server to save user state</comment>
</opcode>
<opcode id="2eeb" name="OP_Camp" updated="02/13/07">
<comment>old cStartCampingCode</comment>
</opcode>
<opcode id="fe13" name="OP_ShopPlayerSell" updated="10/27/05">
<comment>old SellItemCode</comment>
</opcode>
<opcode id="10a1" name="OP_PetCommands" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="4ed9" name="OP_SetRunMode" updated="02/13/07">
<comment>old cRunToggleCode</comment>
</opcode>
<opcode id="1103" name="OP_SaveOnZoneReq" updated="03/14/07">
<comment></comment>
</opcode>
<opcode id="7e03" name="OP_ShopEnd" updated="10/27/05">
<comment>old CloseVendorCode</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="5666" name="OP_SenseTraps" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="05ac" name="OP_SenseHeading" updated="10/27/05">
<comment>old cSenseHeadingCode</comment>
</opcode>
<opcode id="528F" name="OP_LootComplete" updated="12/07/05">
<comment>old sDoneLootingCode</comment>
</opcode>
<opcode id="10A6" name="OP_Split" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="4668" name="OP_Surname" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="45f9" name="OP_ShopRequest" updated="10/27/05">
<comment>old OpenVendorCode</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0f8e" name="OP_FaceChange" updated="10/27/05">
<comment>/face</comment>
</opcode>
<opcode id="4312" name="OP_Sneak" updated="06/29/05">
<comment>Clicked sneak</comment>
</opcode>
<opcode id="6f64" name="OP_Hide" updated="06/29/05">
<comment></comment>
</opcode>
<opcode id="34e8" name="OP_DisarmTraps" updated="05/11/05">
<comment>Clicked disarm traps</comment>
</opcode>
<opcode id="7c33" name="OP_Forage" updated="10/27/05">
<comment>old ForageCode</comment>
</opcode>
<opcode id="4298" name="OP_BoardBoat" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="67c9" name="OP_LeaveBoat" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="35a6" name="OP_LFPGetMatchesRequest" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="6980" name="OP_GMKill" updated="10/27/05">
<comment>GM /kill - Insta kill mob/pc</comment>
</opcode>
<opcode id="17a2" name="OP_GuildPublicNote" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="61ef" name="OP_YellForHelp" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0af6" name="OP_ShopPlayerBuy" updated="05/11/05">
<comment>old BuyItemCode</comment>
</opcode>
<opcode id="6f82" name="OP_LFPCommand" updated="10/27/05">
<comment>looking for players</comment>
</opcode>
<opcode id="00dd" name="OP_ConsiderCorpse" updated="12/07/05">
<comment>old cConCorpseCode</comment>
</opcode>
<opcode id="3838" name="OP_ConfirmDelete" updated="10/27/05">
<comment>Client sends this to server to confirm op_deletespawn</comment>
</opcode>
<opcode id="0375" name="OP_Report" updated="06/29/05">
<comment></comment>
</opcode>
<opcode id="40b6" name="OP_TargetCommand" updated="02/13/07">
<comment>Target user</comment>
</opcode>
<opcode id="212d" name="OP_LFPGetMatchesResponse" updated="02/13/07">
<comment></comment>
</opcode>
<opcode id="1089" name="OP_FindPersonRequest" updated="02/13/07">
<comment>Control-F Find</comment>
</opcode>
<opcode id="71b1" name="OP_FindResponse" updated="02/13/07">
<comment>Response to control-F</comment>
</opcode>
<opcode id="23a1" name="OP_GMLastName" updated="10/27/05">
<comment>GM /lastname - Change user lastname</comment>
</opcode>
<opcode id="0840" name="OP_TradeSkillCombine" updated="06/29/05">
<comment></comment>
</opcode>
<opcode id="14ef" name="OP_Mend" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="1ffa" name="OP_MendHPUpdate" updated="05/11/05">
<comment></comment>
</opcode>
<opcode id="4775" name="OP_TributeInfo" updated="02/13/07">
<comment>Tribute information</comment>
</opcode>

<!-- OLD OPCODES. These haven't been mapped in a post 1/26/2005 world. If you
can find any of these in the current stream, please update them and let
us know!

<opcode id="1900" name="OP_ZoneSpawns" updated="05/29/08">
<comment>old ZoneSpawnsCode</comment>
<payload dir="server" typename="spawnStruct" sizechecktype="none"/>
</opcode>
<opcode id="0020" name="OP_GMServers" updated="05/26/04">
<comment>GM /servers - ?</comment>
</opcode>
<opcode id="790e" name="OP_GMKick" updated="01/26/05">
<comment>GM /kick - Boot player</comment>
</opcode>
<opcode id="0068" name="OP_Petition" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0074" name="OP_GMBecomeNPC" updated="05/26/04">
<comment>GM /becomenpc - Become an NPC</comment>
</opcode>
<opcode id="0076" name="OP_PetitionCheckout" updated="05/26/04">
<comment>Petition Checkout</comment>
</opcode>
<opcode id="007e" name="OP_PetitionCheckIn" updated="05/26/04">
<comment>Petition Checkin</comment>
</opcode>
<opcode id="688f" name="OP_PetitionResolve" updated="05/11/05">
<comment>Client Petition Resolve Request</comment>
</opcode>
<opcode id="0165" name="OP_DeletePetition" updated="01/26/05">
<comment>Player /deletepetition</comment>
</opcode>
<opcode id="0082" name="OP_PetitionQue" updated="05/26/04">
<comment>GM looking at petitions</comment>
</opcode>
<opcode id="0090" name="OP_PetitionUnCheckout" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0097" name="OP_GMSearchCorpse" updated="05/26/04">
<comment>GM /searchcorpse - Search all zones for named corpse</comment>
</opcode>
<opcode id="009a" name="OP_GuildPeace" updated="05/26/04">
<comment>/guildpeace</comment>
</opcode>
<opcode id="00a4" name="OP_GuildWar" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="00a7" name="OP_GuildLeader" updated="05/26/04">
<comment>/guildleader</comment>
</opcode>
<opcode id="00b6" name="OP_ApplyPoison" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="00da" name="OP_GMInquire" updated="05/26/04">
<comment>GM /inquire - Search soulmark data</comment>
</opcode>
<opcode id="00dc" name="OP_GMSoulmark" updated="05/26/04">
<comment>GM /praise /warn - Add soulmark comment to user file</comment>
</opcode>
<opcode id="00de" name="OP_GMHideMe" updated="05/26/04">
<comment>GM /hideme - Remove self from spawn lists and make invis</comment>
</opcode>
<opcode id="00ef" name="OP_SafePoint" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="010b" name="OP_GMGoto" updated="05/26/04">
<comment>GM /goto - Transport to another loc</comment>
</opcode>
<opcode id="012d" name="OP_BindWound" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0132" name="OP_GuildRemove" updated="05/26/04">
<comment>/guildremove</comment>
</opcode>
<opcode id="013b" name="OP_GMTraining" updated="05/26/04">
<comment>old OpenGMCode</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="013c" name="OP_GMEndTraining" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0152" name="OP_MoveCash" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0160" name="OP_Taunt" updated="05/26/04">
<comment>old ConsumeCode</comment>
</opcode>
<opcode id="016c" name="OP_Stun" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0175" name="OP_GMTrainSkill" updated="05/26/04">
<comment>old SkillTrainCode</comment>
</opcode>
<opcode id="0178" name="OP_GMEndTrainingResponse" updated="05/26/04">
<comment>old CloseGMCode</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="0183" name="OP_GMZoneRequest" updated="05/26/04">
<comment>/zone</comment>
</opcode>
<opcode id="018f" name="OP_BecomePK" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0197" name="OP_SetDataRate" updated="05/26/04">
<comment>Client sending datarate.txt value</comment>
</opcode>
<opcode id="0198" name="OP_GMDelCorpse" updated="05/26/04">
<comment>/delcorpse</comment>
</opcode>
<opcode id="0199" name="OP_Sacrifice" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="01af" name="OP_GMApproval" updated="05/26/04">
<comment>GM /approval - Name approval duty?</comment>
</opcode>
<opcode id="01b2" name="OP_GMToggle" updated="05/26/04">
<comment>GM /toggle - Toggle ability to receive tells from other PC's</comment>
</opcode>
<opcode id="01bc" name="OP_MoneyUpdate" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="01ba" name="OP_ReqZoneObjects" updated="05/26/04">
<comment>Client requesting zone objects</comment>
</opcode>
<opcode id="01c4" name="OP_Translocate" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="01ea" name="OP_RespondAA" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="01ed" name="OP_IncreaseStats" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="01ef" name="OP_ViewPetition" updated="05/26/04">
<comment>Player /viewpetition</comment>
</opcode>
<opcode id="01ff" name="OP_ExpansionSetting" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0205" name="OP_GainMoney" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0225" name="OP_GMZoneRequest2" updated="05/26/04">
<comment>/zone 2</comment>
</opcode>
<opcode id="0245" name="?" implicitlen="6" updated="07/14/04">
<comment>Unknown, but has implicit length</comment>
</opcode>
<opcode id="0261" name="OP_CrashDump" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0263" name="OP_GuildDemote" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="0264" name="OP_ZoneUnavail" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="028b" name="OP_GMSummon" updated="05/26/04">
<comment>GM /summon - Summon PC to self</comment>
</opcode>
<opcode id="0296" name="OP_ItemTextFile" updated="05/26/04">
<comment>old BookTextCode</comment>
<payload dir="server" typename="bookTextStruct" sizechecktype="none"/>
</opcode>
<opcode id="029e" name="OP_OpenObject" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="028e" name="OP_GMEmoteZone" updated="05/26/04">
<comment>GM /emotezone - Send zonewide emote</comment>
</opcode>
<opcode id="0296" name="OP_ReadBook" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="02b4" name="OP_SummonCorpse" updated="05/26/04">
<comment>/summoncorpse</comment>
</opcode>
<opcode id="02cc" name="OP_ShopItem" updated="05/26/04">
<comment>Merchant Item data</comment>
</opcode>
<opcode id="02d0" name="OP_AdventureRequest" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="02d1" name="OP_AdventureMerchantResponse" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="02d2" name="OP_AdventureMerchantPurchase" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="02e2" name="OP_AdventurePointsUpdate" updated="05/26/04">
<comment></comment>
</opcode>
<opcode id="02ef" name="OP_Adventure" updated="05/26/04">
<comment>/adventure</comment>
</opcode>
<opcode id="1ee8" name="OP_CombatAbility" updated="02/15/05">
<comment></comment>
</opcode>
-->
</seqopcodes>


/*
* everquest.h
*
* ShowEQ Distributed under GPL
* http://seq.sourceforge.net/
*/


/*
** Please be kind and remember to correctly re-order
** the values in here whenever you add a new item,
** thanks. - Andon
*/

/*
** Structures used in the network layer of Everquest
*/

#ifndef EQSTRUCT_H
#define EQSTRUCT_H

#include "config.h"

#ifdef __FreeBSD__
#include <sys/types.h>
#else
#include <stdint.h>
#endif

/*
** ShowEQ specific definitions
*/
// Statistical list defines
#define LIST_HP 0
#define LIST_MANA 1
#define LIST_STAM 2
#define LIST_EXP 3
#define LIST_FOOD 4
#define LIST_WATR 5
#define LIST_STR 6
#define LIST_STA 7
#define LIST_CHA 8
#define LIST_DEX 9
#define LIST_INT 10
#define LIST_AGI 11
#define LIST_WIS 12
#define LIST_MR 13
#define LIST_FR 14
#define LIST_CR 15
#define LIST_DR 16
#define LIST_PR 17
#define LIST_AC 18
#define LIST_ALTEXP 19
#define LIST_MAXLIST 20

/*
** MOB Spawn Type
*/
#define SPAWN_PLAYER 0
#define SPAWN_NPC 1
#define SPAWN_PC_CORPSE 2
#define SPAWN_NPC_CORPSE 3
#define SPAWN_NPC_UNKNOWN 4
#define SPAWN_DROP 6
#define SPAWN_DOOR 7
#define SPAWN_SELF 10

/*
** Diety List
*/
#define DEITY_UNKNOWN 0
#define DEITY_AGNOSTIC 396
#define DEITY_BRELL 202
#define DEITY_CAZIC 203
#define DEITY_EROL 204
#define DEITY_BRISTLE 205
#define DEITY_INNY 206
#define DEITY_KARANA 207
#define DEITY_MITH 208
#define DEITY_PREXUS 209
#define DEITY_QUELLIOUS 210
#define DEITY_RALLOS 211
#define DEITY_SOLUSEK 213
#define DEITY_TRIBUNAL 214
#define DEITY_TUNARE 215
#define DEITY_BERT 201
#define DEITY_RODCET 212
#define DEITY_VEESHAN 216

//Team numbers for Deity teams
#define DTEAM_GOOD 1
#define DTEAM_NEUTRAL 2
#define DTEAM_EVIL 3
#define DTEAM_OTHER 5

//Team numbers for Race teams
#define RTEAM_HUMAN 1
#define RTEAM_ELF 2
#define RTEAM_DARK 3
#define RTEAM_SHORT 4
#define RTEAM_OTHER 5

//Maximum limits of certain types of data
#define MAX_KNOWN_SKILLS 100
#define MAX_SPELL_SLOTS 12
#define MAX_KNOWN_LANGS 26
#define MAX_SPELLBOOK_SLOTS 400
#define MAX_GROUP_MEMBERS 6
#define MAX_BUFFS 42
#define MAX_GUILDS 8192
#define MAX_AA 300
#define MAX_BANDOLIERS 20
#define MAX_POTIONS_IN_BELT 5
#define MAX_TRIBUTES 5
#define MAX_DISCIPLINES 100

//Item Flags
#define ITEM_NORMAL 0x0000
#define ITEM_NORMAL1 0x0031
#define ITEM_NORMAL2 0x0036
#define ITEM_NORMAL3 0x315f
#define ITEM_NORMAL4 0x3336
#define ITEM_NORMAL5 0x0032
#define ITEM_NORMAL6 0x0033
#define ITEM_NORMAL7 0x0034
#define ITEM_NORMAL8 0x0039
#define ITEM_CONTAINER 0x7900
#define ITEM_CONTAINER_PLAIN 0x7953
#define ITEM_BOOK 0x7379
#define ITEM_VERSION 0xFFFF

// Item spellId no spell value
#define ITEM_SPELLID_NOSPELL 0xffff

// Item Field Count
#define ITEM_FIELD_SEPERATOR_COUNT 117
#define ITEM_CMN_FIELD_SEPERATOR_COUNT 102

//Combat Flags
#define COMBAT_MISS 0
#define COMBAT_BLOCK -1
#define COMBAT_PARRY -2
#define COMBAT_RIPOSTE -3
#define COMBAT_DODGE -4

#define PLAYER_CLASSES 16
#define PLAYER_RACES 15

/*
** Item Packet Type
*/
enum ItemPacketType
{
ItemPacketViewLink = 0x00,
ItemPacketMerchant = 0x64,
ItemPacketLoot = 0x66,
ItemPacketTrade = 0x67,
ItemPacketSummonItem = 0x6a,
ItemPacketWorldContainer = 0x6b
};

/*
** Item types
*/
enum ItemType
{
ItemTypeCommon = 0,
ItemTypeContainer = 1,
ItemTypeBook = 2
};

/*
** Chat Colors
*/
enum ChatColor
{
CC_Default = 0,
CC_DarkGrey = 1,
CC_DarkGreen = 2,
CC_DarkBlue = 3,
CC_Purple = 5,
CC_LightGrey = 6,
CC_User_Say = 256,
CC_User_Tell = 257,
CC_User_Group = 258,
CC_User_Guild = 259,
CC_User_OOC = 260,
CC_User_Auction = 261,
CC_User_Shout = 262,
CC_User_Emote = 263,
CC_User_Spells = 264,
CC_User_YouHitOther = 265,
CC_User_OtherHitYou = 266,
CC_User_YouMissOther = 267,
CC_User_OtherMissYou = 268,
CC_User_Duels = 269,
CC_User_Skills = 270,
CC_User_Disciplines = 271,
CC_User_Default = 273,
CC_User_MerchantOffer = 275,
CC_User_MerchantExchange = 276,
CC_User_YourDeath = 277,
CC_User_OtherDeath = 278,
CC_User_OtherHitOther = 279,
CC_User_OtherMissOther = 280,
CC_User_Who = 281,
CC_User_Yell = 282,
CC_User_NonMelee = 283,
CC_User_SpellWornOff = 284,
CC_User_MoneySplit = 285,
CC_User_Loot = 286,
CC_User_Random = 287,
CC_User_OtherSpells = 288,
CC_User_SpellFailure = 289,
CC_User_ChatChannel = 290,
CC_User_Chat1 = 291,
CC_User_Chat2 = 292,
CC_User_Chat3 = 293,
CC_User_Chat4 = 294,
CC_User_Chat5 = 295,
CC_User_Chat6 = 296,
CC_User_Chat7 = 297,
CC_User_Chat8 = 298,
CC_User_Chat9 = 299,
CC_User_Chat10 = 300,
CC_User_MeleeCrit = 301,
CC_User_SpellCrit = 302,
CC_User_TooFarAway = 303,
CC_User_NPCRampage = 304,
CC_User_NPCFurry = 305,
CC_User_NPCEnrage = 306,
CC_User_EchoSay = 307,
CC_User_EchoTell = 308,
CC_User_EchoGroup = 309,
CC_User_EchoGuild = 310,
CC_User_EchoOOC = 311,
CC_User_EchoAuction = 312,
CC_User_EchoShout = 313,
CC_User_EchoEmote = 314,
CC_User_EchoChat1 = 315,
CC_User_EchoChat2 = 316,
CC_User_EchoChat3 = 317,
CC_User_EchoChat4 = 318,
CC_User_EchoChat5 = 319,
CC_User_EchoChat6 = 320,
CC_User_EchoChat7 = 321,
CC_User_EchoChat8 = 322,
CC_User_EchoChat9 = 323,
CC_User_EchoChat10 = 324,
CC_User_UnusedAtThisTime = 325,
CC_User_ItemTags = 326,
CC_User_RaidSay = 327,
CC_User_MyPet = 328,
CC_User_DamageShield = 329,
};

/*
** Group Update actions
*/
enum GroupUpdateAction
{
GUA_Joined = 0,
GUA_Left = 1,
GUA_LastLeft = 6,
GUA_FullGroupInfo = 7,
GUA_MakeLeader = 8,
GUA_Started = 9,
};

/**
* Leadership AAs enum, used to index into leadershipAAs in charProfileStruct
*/
enum LeadershipAAIndex
{
groupMarkNPC = 0,
groupNPCHealth,
groupDelegateMainAssist,
groupDelegateMarkNPC,
groupUnknown4,
groupUnknown5,
groupInspectBuffs,
groupUnknown7,
groupSpellAwareness,
groupOffenseEnhancement,
groupManaEnhancement,
groupHealthEnhancement,
groupHealthRegeneration,
groupFindPathToPC,
groupHealthOfTargetsTarget,
groupUnknown15,
raidMarkNPC, //0x10
raidNPCHealth,
raidDelegateMainAssist,
raidDelegateMarkNPC,
raidUnknown4,
raidUnknown5,
raidUnknown6,
raidSpellAwareness,
raidOffenseEnhancement,
raidManaEnhancement,
raidHealthEnhancement,
raidHealthRegeneration,
raidFindPathToPC,
raidHealthOfTargetsTarget,
raidUnknown14,
raidUnknown15,
MAX_LEAD_AA //=32
};

/**
* Recast timer types. Used as an off set to charProfileStruct timers.
*/
enum RecastTypes
{
RecastTimer0 = 0,
RecastTimer1,
WeaponHealClickTimer, // 2
MuramiteBaneNukeClickTimer, // 3
RecastTimer4,
DispellClickTimer, // 5 (also click heal orbs?)
EpicTimer, // 6
OoWBPClickTimer, // 7
VishQuestClassItemTimer, // 8
HealPotionTimer, // 9
RecastTimer10,
RecastTimer11,
RecastTimer12,
RecastTimer13,
RecastTimer14,
RecastTimer15,
RecastTimer16,
RecastTimer17,
RecastTimer18,
ModRodTimer, // 19
MAX_RECAST_TYPES // 20
};


/*
** Compiler override to ensure
** byte aligned structures
*/
#pragma pack(1)

/*
** Generic Structures used in specific
** structures below
*/

// OpCode stuff (all kinda silly, but until we stop including the OpCode everywhere)...
struct opCodeStruct
{
int16_t opCode;

// kinda silly -- this is required for us to be able to stuff them in a QValueList
bool operator== ( const opCodeStruct t ) const
{
return ( opCode == t.opCode);
}
bool operator== ( uint16_t opCode2 ) const
{
return ( opCode == opCode2 );
}
};

/**
* Session request on a stream. This is sent by the client to initiate
* a session with the zone or world server.
*
* Size: 12 Octets
*/
struct SessionRequestStruct
{
/*0000*/ uint32_t unknown0000;
/*0004*/ uint32_t sessionId;
/*0008*/ uint32_t maxLength;
/*0012*/
};

/**
* Session response on a stream. This is the server replying to a session
* request with session information.
*
* Size: 19 Octets
*/
struct SessionResponseStruct
{
/*0000*/ uint32_t sessionId;
/*0004*/ uint32_t key;
/*0008*/ uint16_t unknown0008;
/*0010*/ uint8_t unknown0010;
/*0011*/ uint32_t maxLength;
/*0015*/ uint32_t unknown0015;
/*0019*/
};

/**
* Session disconnect on a stream. This is the server telling the client to
* close a stream.
*
* Size: 8 Octets
*/
struct SessionDisconnectStruct
{
/*0000*/ uint8_t unknown[8];
/*0008*/
};

/*
* Used in charProfileStruct
* Size: 4 bytes
*/
struct Color_Struct
{
union
{
struct
{
/*0000*/uint8_t blue;
/*0001*/uint8_t red;
/*0002*/uint8_t green;
/*0003*/uint8_t unknown0003;
} rgb;
/*0000*/uint32_t color;
};
};

/*
** Buffs
** Length: 88 Octets
** Used in:
** charProfileStruct
*/
struct spellBuff
{
/*0000*/ uint8_t unknown0000; //
/*0001*/ int8_t level; // Level of person who cast buff
/*0002*/ uint8_t unknown0002; //
/*0003*/ uint8_t unknown0003; //
/*0004*/ float unknown0004;
/*0008*/ int32_t spellid; // Spell
/*0012*/ int32_t duration; // Time remaining in ticks
/*0016*/ int32_t effect; // holds the dmg absorb amount on runes
/*0020*/ uint8_t unknown0020[4]; // *** this might need to be swapped with playerId
/*0024*/ uint32_t playerId; // Global id of caster (for wear off)
/*0028*/ uint8_t unknown0028[60];
/*0088*/
};


/*
* Used in charProfileStruct
* Size: 12 octets
*/
struct AA_Array
{
/*000*/ uint32_t AA;
/*004*/ uint32_t value;
/*008*/ uint32_t unknown008;
/*012*/
};

/**
* An item inline in the stream, used in Bandolier and Potion Belt.
* Size: 72 Octets
*/
struct InlineItem
{
/*000*/ uint32_t itemId;
/*004*/ uint32_t icon;
/*008*/ char itemName[64];
/*072*/
};

/**
* Used in charProfileStruct. Contents of a Bandolier.
* Size: 320 Octets
*/
struct BandolierStruct
{
/*000*/ char bandolierName[32];
/*032*/ InlineItem mainHand;
/*104*/ InlineItem offHand;
/*176*/ InlineItem range;
/*248*/ InlineItem ammo;
/*320*/
};

/**
* A tribute a player can have loaded.
* Size: 8 Octets
*/
struct TributeStruct
{
/*000*/ uint32_t tribute;
/*004*/ uint32_t rank;
/*008*/
};

/**
* A bind point.
* Size: 20 Octets
*/
struct BindStruct
{
/*000*/ uint32_t zoneId;
/*004*/ float x;
/*008*/ float y;
/*012*/ float z;
/*016*/ float heading;
/*020*/
};

/*
* Visible equiptment.
* Size: 16 Octets
*/
struct EquipStruct
{
/*00*/ uint32_t equip0;
/*04*/ uint32_t equip1;
/*08*/ uint32_t equip2;
/*12*/ uint32_t itemId;
/*16*/
};

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

/*
** Type: Request Zone Change (server asking the client to change zones)
** Size: 24 Octets
** OpCode: OP_RequestZoneChange
*/
struct requestZoneChangeStruct
{
/*0000*/ uint16_t zoneId; // Zone to change to
/*0002*/ uint16_t zoneInstance; // Instance to change to
/*0004*/ float x; // Zone in x coord in next zone
/*0008*/ float y; // Zone in y coord in next zone
/*0012*/ float z; // Zone in z coord in next zone
/*0016*/ float heading; // Zone in heading in next zone
/*0020*/ uint32_t unknown0020; // *** Placeholder
/*0024*/
};

/*
** Client Zone Entry struct
** Length: 76 Octets
** OpCode: ZoneEntryCode (when direction == client)
*/
struct ClientZoneEntryStruct
{
/*0000*/ uint32_t unknown0000; // ***Placeholder
/*0004*/ char name[32]; // Player firstname
/*0036*/ uint8_t unknown0036[28]; // ***Placeholder
/*0064*/ uint32_t unknown0064[3]; // unknown
/*0076*/
};


/*
** New Zone Code
** Length: 948 Octets
** OpCode: NewZoneCode
*/
struct newZoneStruct
{
/*0000*/ char name[64]; // Character name
/*0064*/ char shortName[32]; // Zone Short Name (maybe longer?)
/*0096*/ char unknown0096[96];
/*0192*/ char longName[278]; // Zone Long Name
/*0470*/ uint8_t ztype; // Zone type
/*0471*/ uint8_t fog_red[4]; // Zone fog (red)
/*0475*/ uint8_t fog_green[4]; // Zone fog (green)
/*0479*/ uint8_t fog_blue[4]; // Zone fog (blue)
/*0483*/ uint8_t unknown0483[87]; // *** Placeholder
/*0570*/ uint8_t sky; // Zone sky
/*0571*/ uint8_t unknown0571[13]; // *** Placeholder
/*0584*/ float zone_exp_multiplier; // Experience Multiplier
/*0588*/ float safe_y; // Zone Safe Y
/*0592*/ float safe_x; // Zone Safe X
/*0596*/ float safe_z; // Zone Safe Z
/*0600*/ float unknown0600; // *** Placeholder
/*0604*/ float unknown0604; // *** Placeholder
/*0608*/ float underworld; // Underworld
/*0612*/ float minclip; // Minimum view distance
/*0616*/ float maxclip; // Maximum view distance
/*0620*/ uint8_t unknown0616[84]; // *** Placeholder
/*0704*/ char zonefile[64]; // Zone file name?
/*0768*/ uint8_t unknown0764[36]; // *** Placeholder (12/05/2006)
/*0804*/ uint8_t unknown0800[32]; // *** Placeholder (02/13/2007)
/*0836*/ uint8_t unknown0832[12]; // *** Placeholder
/*0848*/ uint8_t unknown0844[4]; // *** Placeholder (06/29/2005)
/*0852*/ uint8_t unknown0848[4]; // *** Placeholder (09/13/2005)
/*0856*/ uint8_t unknown0852[4]; // *** Placeholder (02/21/2006)
/*0860*/ uint8_t unknown0856[36]; // *** Placeholder (06/13/2006)
/*0896*/ uint8_t unknown0892[12]; // *** Placeholder (12/05/2006)
/*0908*/ uint8_t unknown0904[8]; // *** Placeholder (02/13/2007)
/*0916*/ uint8_t unknown0916[4]; // *** Placeholder (11/24/2007)
/*0920*/ uint8_t unknown0920[4]; // *** Placeholder (01/17/2008)
/*0924*/ uint8_t unknown0924[4]; // *** Placeholder (09/03/2008)
/*0928*/ uint8_t unknown0928[4]; // *** Placeholder (10/07/2008)
/*0932*/ uint8_t unknown0932[8]; // *** Placeholder (11/04/2009)
/*0940*/ uint8_t unknown0940[4]; // *** Placeholder (12/15/2009)
/*0944*/ uint8_t unknown0944[4]; // *** Placeholder (11/15/2011)
/*0948*/
};

/*
** Dynamic Zone Switch Info Struct
** Length: 32 Octets
** OpCode: DzSwitchInfo
*/
struct dzSwitchInfo
{
/*0000*/ uint32_t unknown0000;
/*0004*/ uint32_t show; // Show compass line
/*0008*/ uint16_t zoneID;
/*0010*/ uint16_t instanceID;
/*0012*/ uint32_t type; // if(type != 1 && type > 2 && type <= 5) { color = green; } else { color = pink; }
/*0016*/ uint32_t unknown0016;
/*0020*/ float y;
/*0024*/ float x;
/*0028*/ float z;
/*0032*/
};

/*
** Dynamic Zone Info Struct
** Length: 208 Octets
** OpCode: DzInfo
*/
struct dzInfo
{
/*0000*/ uint32_t unknown0000;
/*0004*/ uint32_t unknown0004;
/*0008*/ uint8_t newDZ;
/*0009*/ uint8_t padding0009[3];
/*0012*/ uint32_t maxPlayers;
/*0016*/ char dzName[128]; // Instance name
/*0144*/ char name[64]; // Your player's name
/*0208*/
};

/**
* Player Profile. Common part of charProfileStruct shared between
* shrouding and zoning profiles.
*
* NOTE: Offsets are kept in here relative to OP_PlayerProfile to ease in
* diagnosing changes in that struct.
*/
struct playerProfileStruct
{
/*00004*/ uint32_t gender; // Player Gender - 0 Male, 1 Female
/*00008*/ uint32_t race; // Player race
/*00012*/ uint32_t class_; // Player class
/*00016*/ uint8_t unknown00016[40]; // ***Placeholder
/*00056*/ uint8_t level; // Level of player
/*00057*/ uint8_t level1; // Level of player (again?)
/*00058*/ uint8_t unknown00058[2]; // ***Placeholder
/*00060*/ BindStruct binds[5]; // Bind points (primary is first)
/*00160*/ uint32_t deity; // deity
/*00164*/ uint32_t intoxication; // Alcohol level (in ticks till sober?)
/*00168*/ uint32_t spellSlotRefresh[13]; // Refresh time (millis)
/*00220*/ uint8_t haircolor; // Player hair color
/*00221*/ uint8_t beardcolor; // Player beard color
/*00222*/ uint8_t unknown00222[6];
/*00228*/ uint8_t eyecolor1; // Player left eye color
/*00229*/ uint8_t eyecolor2; // Player right eye color
/*00230*/ uint8_t hairstyle; // Player hair style
/*00231*/ uint8_t beard; // Player beard type
/*00232*/ uint8_t unknown00232[4];
/*00236*/ union
{
struct
{
/*00236*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
/*00252*/ EquipStruct equip_chest; // Equiptment: Chest visual
/*00268*/ EquipStruct equip_arms; // Equiptment: Arms visual
/*00284*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
/*00300*/ EquipStruct equip_hands; // Equiptment: Hands visual
/*00316*/ EquipStruct equip_legs; // Equiptment: Legs visual
/*00332*/ EquipStruct equip_feet; // Equiptment: Boots visual
/*00348*/ EquipStruct equip_primary; // Equiptment: Main visual
/*00364*/ EquipStruct equip_secondary; // Equiptment: Off visual
} equip;
/*00380*/ EquipStruct equipment[9];
};
/*00380*/ uint8_t unknown00380[220];
/*00600*/ Color_Struct item_tint[9]; // RR GG BB 00
/*00636*/ AA_Array aa_array[MAX_AA]; // AAs
/*04236*/ uint32_t points; // Unspent Practice points
/*04240*/ uint32_t MANA; // Current MANA
/*04244*/ uint32_t curHp; // Current HP without +HP equipment
/*04248*/ uint32_t STR; // Strength
/*04252*/ uint32_t STA; // Stamina
/*04256*/ uint32_t CHA; // Charisma
/*04260*/ uint32_t DEX; // Dexterity
/*04264*/ uint32_t INT; // Intelligence
/*04268*/ uint32_t AGI; // Agility
/*04272*/ uint32_t WIS; // Wisdom
/*04276*/ uint8_t unknown04276[28];
/*04304*/ uint32_t face; // Player face
/*04308*/ uint8_t unknown04308[180];
/*04488*/ int32_t sSpellBook[720]; // List of the Spells in spellbook
/*07368*/ int32_t sMemSpells[MAX_SPELL_SLOTS]; // List of spells memorized
/*07416*/ uint8_t unknown07416[20];
/*07436*/ uint32_t platinum; // Platinum Pieces on player
/*07442*/ uint32_t gold; // Gold Pieces on player
/*07444*/ uint32_t silver; // Silver Pieces on player
/*07448*/ uint32_t copper; // Copper Pieces on player
/*07452*/ uint32_t platinum_cursor; // Platinum Pieces on cursor
/*07456*/ uint32_t gold_cursor; // Gold Pieces on cursor
/*07460*/ uint32_t silver_cursor; // Silver Pieces on cursor
/*07464*/ uint32_t copper_cursor; // Copper Pieces on cursor
/*07468*/ uint32_t skills[MAX_KNOWN_SKILLS]; // List of skills
/*07868*/ uint32_t innateSkills[25];
/*07968*/ uint8_t unknown07968[16];
/*07984*/ uint32_t toxicity; // Potion Toxicity (15=too toxic, each potion adds 3)
/*07988*/ uint32_t thirst; // Drink (ticks till next drink)
/*07992*/ uint32_t hunger; // Food (ticks till next eat)
/*07996*/ uint8_t unknown07996[20];
/*08016*/ spellBuff buffs[MAX_BUFFS]; // Buffs currently on the player
/*11712*/ uint32_t disciplines[MAX_DISCIPLINES];// Known disciplines
/*12112*/ uint8_t unknown12112[400];
/*12312*/ uint32_t recastTimers[MAX_RECAST_TYPES];// Timers (GMT of last use)
/*12592*/ uint8_t unknown12592[480];
/*13072*/ uint32_t endurance; // Current endurance
/*13076*/ uint32_t aa_spent; // Number of spent AA points (including glyphs)
/*13080*/ uint32_t aa_assigned; // Number of points currently assigned to AAs
/*13084*/ uint32_t unknown13084[4];
/*13100*/ uint32_t aa_unspent; // Unspent AA points
/*13104*/ uint8_t unknown13104[4];
/*13108*/ BandolierStruct bandoliers[MAX_BANDOLIERS]; // bandolier contents
/*19508*/ InlineItem potionBelt[MAX_POTIONS_IN_BELT]; // potion belt
/*19868*/ uint8_t unknown19868[92];
/*19960*/
};

/*
** Player Profile
** Length: 29688 Octets
** OpCode: CharProfileCode
*/
struct charProfileStruct
{
/*00000*/ uint32_t checksum; //
/*00004*/ playerProfileStruct profile; // Profile
/*19960*/ char name[64]; // Name of player
/*20024*/ char lastName[32]; // Last name of player
/*20054*/ uint8_t unknown20054[12]; //***Placeholder (1/18/2006)
/*20066*/ int32_t guildID; // guildID
/*20070*/ uint32_t birthdayTime; // character birthday
/*20074*/ uint32_t lastSaveTime; // character last save time
/*20078*/ uint32_t timePlayedMin; // time character played
/*20082*/ uint8_t unknown20082[4];
/*20086*/ uint8_t pvp; // 1=pvp, 0=not pvp
/*20087*/ uint8_t anon; // 2=roleplay, 1=anon, 0=not anon
/*20088*/ uint8_t gm; // 0=no, 1=yes (guessing!)
/*20089*/ int8_t guildstatus; // 0=member, 1=officer, 2=guildleader
/*20090*/ uint8_t unknown20090[16];
/*20106*/ uint32_t exp; // Current Experience
/*20110*/ uint8_t unknown20110[12];
/*20122*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages ccc
/*20150*/ uint8_t unknown20150[6]; // All 0x00 (language buffer?)
/*20156*/ float y; // Players y position
/*20160*/ float x; // Players x position
/*20164*/ float z; // Players z position
/*20168*/ float heading; // Players heading
/*20172*/ uint32_t standState; // 0x64 = stand
/*20176*/ uint32_t platinum_bank; // Platinum Pieces in Bank
/*20180*/ uint32_t gold_bank; // Gold Pieces in Bank
/*20184*/ uint32_t silver_bank; // Silver Pieces in Bank
/*20188*/ uint32_t copper_bank; // Copper Pieces in Bank
/*20192*/ uint32_t platinum_shared; // Shared platinum pieces
/*20196*/ uint8_t unknown20196[2124]; // Added 1088 for HoT
/*22320*/ uint32_t expansions; // Bitmask for expansions
/*22324*/ uint8_t unknown22324[12];
/*22336*/ uint32_t autosplit; // 0 = off, 1 = on
/*22340*/ uint8_t unknown22340[16];
/*22356*/ uint16_t zoneId; // see zones.h
/*22358*/ uint16_t zoneInstance; // Instance id
/*22360*/ uint8_t unknown22360[992];
/*23352*/ uint32_t leadAAActive; // 0 = leader AA off, 1 = leader AA on
/*23356*/ uint8_t unknown23356[4];
/*23360*/ uint32_t ldon_guk_points; // Earned GUK points
/*23364*/ uint32_t ldon_mir_points; // Earned MIR points
/*23368*/ uint32_t ldon_mmc_points; // Earned MMC points
/*23372*/ uint32_t ldon_ruj_points; // Earned RUJ points
/*23376*/ uint32_t ldon_tak_points; // Earned TAK points
/*23380*/ uint32_t ldon_avail_points; // Available LDON points
/*23384*/ uint8_t unknown23384[144];
/*23528*/ uint32_t tributeTime; // Time remaining on tribute (millisecs)
/*23532*/ uint32_t careerTribute; // Total favor points for this char
/*23536*/ uint32_t unknown23536; // *** Placeholder
/*23540*/ uint32_t currentTribute; // Current tribute points
/*23544*/ uint32_t unknown23544; // *** Placeholder
/*23548*/ uint32_t tributeActive; // 0 = off, 1=on
/*23552*/ TributeStruct tributes[MAX_TRIBUTES]; // Current tribute loadout
/*23592*/ uint8_t unknown23592[84]; // Added 208 bytes for HoT BETA
/*23676*/ float expGroupLeadAA; // Current group lead exp points
/*23680*/ uint32_t unknown23680;
/*23684*/ float expRaidLeadAA; // Current raid lead AA exp points
/*23688*/ uint32_t unknown23688;
/*23692*/ uint32_t groupLeadAAUnspent; // Unspent group lead AA points
/*23696*/ uint32_t raidLeadAAUnspent; // Unspent raid lead AA points
/*23700*/ uint32_t leadershipAAs[MAX_LEAD_AA]; // Leader AA ranks
/*23828*/ uint8_t unknown23828[128];
/*23956*/ uint32_t airRemaining; // Air supply (seconds)
/*23960*/ uint8_t unknown23960[4608];
/*28568*/ uint32_t expAA; // Exp earned in current AA point
/*28572*/ uint8_t unknown28572[40];
/*28612*/ uint32_t currentRadCrystals; // Current count of radiant crystals
/*28616*/ uint32_t careerRadCrystals; // Total count of radiant crystals ever
/*28620*/ uint32_t currentEbonCrystals; // Current count of ebon crystals
/*28624*/ uint32_t careerEbonCrystals; // Total count of ebon crystals ever
/*28628*/ uint8_t groupAutoconsent; // 0=off, 1=on
/*28629*/ uint8_t raidAutoconsent; // 0=off, 1=on
/*28630*/ uint8_t guildAutoconsent; // 0=off, 1=on
/*28631*/ uint8_t unknown28631[5]; // ***Placeholder (6/29/2005)
/*28636*/ uint32_t showhelm; // 0=no, 1=yes
/*28640*/ uint8_t unknown28640[1048]; // ***Placeholder (2/13/2007)
/*29688*/
};

#if 0
// The following seem to be totally gone from charProfileStruct (9/13/05)
/*2384*/ char title[32]; // Current character title
/*2352*/ char servername[32]; // server the char was created on
/*2416*/ char suffix[32]; // Current character suffix
#endif

#if 1
struct playerAAStruct {
/* 0 */ uint8_t unknown0;
union {
uint8_t unnamed[17];
struct _named {
/* 1 */ uint8_t innate_strength;
/* 2 */ uint8_t innate_stamina;
/* 3 */ uint8_t innate_agility;
/* 4 */ uint8_t innate_dexterity;
/* 5 */ uint8_t innate_intelligence;
/* 6 */ uint8_t innate_wisdom;
/* 7 */ uint8_t innate_charisma;
/* 8 */ uint8_t innate_fire_protection;
/* 9 */ uint8_t innate_cold_protection;
/* 10 */ uint8_t innate_magic_protection;
/* 11 */ uint8_t innate_poison_protection;
/* 12 */ uint8_t innate_disease_protection;
/* 13 */ uint8_t innate_run_speed;
/* 14 */ uint8_t innate_regeneration;
/* 15 */ uint8_t innate_metabolism;
/* 16 */ uint8_t innate_lung_capacity;
/* 17 */ uint8_t first_aid;
} named;
} general_skills;
union {
uint8_t unnamed[17];
struct _named {
/* 18 */ uint8_t healing_adept;
/* 19 */ uint8_t healing_gift;
/* 20 */ uint8_t unknown20;
/* 21 */ uint8_t spell_casting_reinforcement;
/* 22 */ uint8_t mental_clarity;
/* 23 */ uint8_t spell_casting_fury;
/* 24 */ uint8_t chanelling_focus;
/* 25 */ uint8_t unknown25;
/* 26 */ uint8_t unknown26;
/* 27 */ uint8_t unknown27;
/* 28 */ uint8_t natural_durability;
/* 29 */ uint8_t natural_healing;
/* 30 */ uint8_t combat_fury;
/* 31 */ uint8_t fear_resistance;
/* 32 */ uint8_t finishing_blow;
/* 33 */ uint8_t combat_stability;
/* 34 */ uint8_t combat_agility;
} named;
} archetype_skills;
union {
uint8_t unnamed[93];
struct _name {
/* 35 */ uint8_t mass_group_buff; // All group-buff-casting classes(?)
// ===== Cleric =====
/* 36 */ uint8_t divine_resurrection;
/* 37 */ uint8_t innate_invis_to_undead; // cleric, necromancer
/* 38 */ uint8_t celestial_regeneration;
/* 39 */ uint8_t bestow_divine_aura;
/* 40 */ uint8_t turn_undead;
/* 41 */ uint8_t purify_soul;
// ===== Druid =====
/* 42 */ uint8_t quick_evacuation; // wizard, druid
/* 43 */ uint8_t exodus; // wizard, druid
/* 44 */ uint8_t quick_damage; // wizard, druid
/* 45 */ uint8_t enhanced_root; // druid
/* 46 */ uint8_t dire_charm; // enchanter, druid, necromancer
// ===== Shaman =====
/* 47 */ uint8_t cannibalization;
/* 48 */ uint8_t quick_buff; // shaman, enchanter
/* 49 */ uint8_t alchemy_mastery;
/* 50 */ uint8_t rabid_bear;
// ===== Wizard =====
/* 51 */ uint8_t mana_burn;
/* 52 */ uint8_t improved_familiar;
/* 53 */ uint8_t nexus_gate;
// ===== Enchanter =====
/* 54 */ uint8_t unknown54;
/* 55 */ uint8_t permanent_illusion;
/* 56 */ uint8_t jewel_craft_mastery;
/* 57 */ uint8_t gather_mana;
// ===== Mage =====
/* 58 */ uint8_t mend_companion; // mage, necromancer
/* 59 */ uint8_t quick_summoning;
/* 60 */ uint8_t frenzied_burnout;
/* 61 */ uint8_t elemental_form_fire;
/* 62 */ uint8_t elemental_form_water;
/* 63 */ uint8_t elemental_form_earth;
/* 64 */ uint8_t elemental_form_air;
/* 65 */ uint8_t improved_reclaim_energy;
/* 66 */ uint8_t turn_summoned;
/* 67 */ uint8_t elemental_pact;
// ===== Necromancer =====
/* 68 */ uint8_t life_burn;
/* 69 */ uint8_t dead_mesmerization;
/* 70 */ uint8_t fearstorm;
/* 71 */ uint8_t flesh_to_bone;
/* 72 */ uint8_t call_to_corpse;
// ===== Paladin =====
/* 73 */ uint8_t divine_stun;
/* 74 */ uint8_t improved_lay_of_hands;
/* 75 */ uint8_t slay_undead;
/* 76 */ uint8_t act_of_valor;
/* 77 */ uint8_t holy_steed;
/* 78 */ uint8_t fearless; // paladin, shadowknight

/* 79 */ uint8_t two_hand_bash; // paladin, shadowknight
// ===== Ranger =====
/* 80 */ uint8_t innate_camouflage; // ranger, druid
/* 81 */ uint8_t ambidexterity; // all "dual-wield" users
/* 82 */ uint8_t archery_mastery; // ranger
/* 83 */ uint8_t unknown83;
/* 84 */ uint8_t endless_quiver; // ranger
// ===== Shadow Knight =====
/* 85 */ uint8_t unholy_steed;
/* 86 */ uint8_t improved_harm_touch;
/* 87 */ uint8_t leech_touch;
/* 88 */ uint8_t unknown88;
/* 89 */ uint8_t soul_abrasion;
// ===== Bard =====
/* 90 */ uint8_t instrument_mastery;
/* 91 */ uint8_t unknown91;
/* 92 */ uint8_t unknown92;
/* 93 */ uint8_t unknown93;
/* 94 */ uint8_t jam_fest;
/* 95 */ uint8_t unknown95;
/* 96 */ uint8_t unknown96;
// ===== Monk =====
/* 97 */ uint8_t critical_mend;
/* 98 */ uint8_t purify_body;
/* 99 */ uint8_t unknown99;
/* 100 */ uint8_t rapid_feign;
/* 101 */ uint8_t return_kick;
// ===== Rogue =====
/* 102 */ uint8_t escape;
/* 103 */ uint8_t poison_mastery;
/* 104 */ uint8_t double_riposte; // all "riposte" users
/* 105 */ uint8_t unknown105;
/* 106 */ uint8_t unknown106;
/* 107 */ uint8_t purge_poison; // rogue
// ===== Warrior =====
/* 108 */ uint8_t flurry;
/* 109 */ uint8_t rampage;
/* 110 */ uint8_t area_taunt;
/* 111 */ uint8_t warcry;
/* 112 */ uint8_t bandage_wound;
// ===== (Other) =====
/* 113 */ uint8_t spell_casting_reinforcement_mastery; // all "pure" casters
/* 114 */ uint8_t unknown114;
/* 115 */ uint8_t extended_notes; // bard
/* 116 */ uint8_t dragon_punch; // monk
/* 117 */ uint8_t strong_root; // wizard
/* 118 */ uint8_t singing_mastery; // bard
/* 119 */ uint8_t body_and_mind_rejuvenation; // paladin, ranger, bard
/* 120 */ uint8_t physical_enhancement; // paladin, ranger, bard
/* 121 */ uint8_t adv_trap_negotiation; // rogue, bard
/* 122 */ uint8_t acrobatics; // all "safe-fall" users
/* 123 */ uint8_t scribble_notes; // bard
/* 124 */ uint8_t chaotic_stab; // rogue
/* 125 */ uint8_t pet_discipline; // all pet classes except enchanter
/* 126 */ uint8_t unknown126;
/* 127 */ uint8_t unknown127;
} named;
} class_skills;
};
#endif

/*
** Generic Spawn Struct
** Length: Variable.
** Used in:
** dbSpawnStruct
** petStruct
** spawnShroudOther
** spawnShroudSelf
*/

// Fixed-length struct that we'll fill with data from the variable-length packet,
// unnecessary fields removed, arranged in order with the packet.
struct spawnStruct
{
/*0000*/ char name[64];
/*0000*/ uint32_t spawnId;
/*0000*/ uint8_t level;
/*0000*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse
/*0000*/ union
{
struct
{
unsigned padding7:1;
unsigned AFK:1;
unsigned sneak:1;
unsigned LFG:1;
unsigned padding6:1;
unsigned invis:1;
unsigned padding5:11;
unsigned gm:1;
unsigned anon:1; // 0=normal, 1=anon, 2=roleplay
unsigned padding4:1;
unsigned gender:1; // Gender (0=male, 1=female)
unsigned padding3:1;
unsigned linkdead:1;
unsigned betabuffed:1;
unsigned padding2:2;
unsigned targetable:1;
unsigned targetcyclable:1;
unsigned padding1:2;
unsigned trader:1;
unsigned buyer:1;
};
int32_t miscData;
};
/*0000*/ uint8_t otherData; // & 4 - has title, & 8 - has suffix, & 1 - it's a chest or untargetable
/*0000*/ uint32_t race;
/*0000*/ uint8_t charProperties;
/*0000*/ uint32_t bodytype;
/*0000*/ uint32_t bodytype2;
/*0000*/ uint8_t curHp;
/*0000*/ uint8_t holding;
/*0000*/ uint32_t deity;
/*0000*/ uint32_t guildID;
/*0000*/ uint32_t guildstatus; // 0=member, 1=officer, 2=leader, -1=not guilded
/*0000*/ uint8_t class_;
/*0000*/ uint8_t state; // stand state
/*0000*/ uint8_t light;
/*0000*/ char lastName[32];
/*0000*/ uint32_t petOwnerId;
union
{
struct
{
/*0000*/ signed padding0000:12; // ***Placeholder
signed deltaX:13; // change in x
signed padding0005:7; // ***Placeholder
/*0000*/ signed deltaHeading:10; // change in heading
signed deltaY:13; // change in y
signed padding0006:9; // ***Placeholder
/*0000*/ signed y:19; // y coord
signed animation:13; // animation
/*0000*/ unsigned heading:12; // heading
signed x:19; // x coord
signed padding0014:1; // ***Placeholder
/*0000*/ signed z:19; // z coord
signed deltaZ:13; // change in z
};
int32_t posData[5];
};
/*0000*/ union
{
struct
{
/*0000*/ Color_Struct color_helmet; // Color of helmet item
/*0000*/ Color_Struct color_chest; // Color of chest item
/*0000*/ Color_Struct color_arms; // Color of arms item
/*0000*/ Color_Struct color_bracers; // Color of bracers item
/*0000*/ Color_Struct color_hands; // Color of hands item
/*0000*/ Color_Struct color_legs; // Color of legs item
/*0000*/ Color_Struct color_feet; // Color of feet item
/*0000*/ Color_Struct color_primary; // Color of primary item
/*0000*/ Color_Struct color_secondary; // Color of secondary item
} equipment_colors;
/*0000*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above
};
/*0000*/ union
{
struct
{
/*0000*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
/*0000*/ EquipStruct equip_chest; // Equiptment: Chest visual
/*0000*/ EquipStruct equip_arms; // Equiptment: Arms visual
/*0000*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
/*0000*/ EquipStruct equip_hands; // Equiptment: Hands visual
/*0000*/ EquipStruct equip_legs; // Equiptment: Legs visual
/*0000*/ EquipStruct equip_feet; // Equiptment: Boots visual
/*0000*/ EquipStruct equip_primary; // Equiptment: Main visual
/*0000*/ EquipStruct equip_secondary; // Equiptment: Off visual
} equip;
/*0000*/ EquipStruct equipment[9];
};
/*0000*/ char title[32];
/*0000*/ char suffix[32];
/*0000*/ uint8_t isMercenary;
};

#if 0
// Basic structure of how the packet looks on the wire, for reference.
// March 16, 2012 eqgame.exe
struct spawnStruct
{
/*0000*/ char name[0];
/*0000*/ uint32_t spawnId;
/*0000*/ uint8_t level;
/*0000*/ float unknown1;
/*0000*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse
/*0000*/ unsigned padding7:1;
unsigned AFK:1;
unsigned sneak:1;
unsigned LFG:1;
unsigned padding6:1;
unsigned invis:1;
unsigned padding5:11;
unsigned gm:1;
unsigned anon:1; // 0=normal, 1=anon, 2=roleplay
unsigned padding4:1;
unsigned gender:1; // Gender (0=male, 1=female)
unsigned padding3:1;
unsigned linkdead:1;
unsigned betabuffed:1;
unsigned padding2:2;
unsigned targetable:1;
unsigned targetcyclable:1;
unsigned padding1:2;
unsigned trader:1;
unsigned buyer:1;
/*0000*/ uint8_t otherData; // & 8 - has title, & 16 - has suffix, & 2 - auras, & 1 - it's a chest or untargetable
/*0000*/ uint32_t unknown3;
/*0000*/ uint32_t unknown4;
/*0000*/ uint32_t unknown5;
/*0000*/ uint8_t facestyle;
/*0000*/ float walkspeed;
/*0000*/ float runspeed;
/*0000*/ uint32_t race;
/*0000*/ uint8_t charProperties; // for body types - value indicates how many properties are present
/*0000*/ uint32_t bodytype;
/*0000*/ uint32_t bodytype2; // this is only present if charProperties==2
// are there more than two possible properties?
/*0000*/ uint8_t curHp;
/*0000*/ uint8_t haircolor;
/*0000*/ uint8_t facialhaircolor;
/*0000*/ uint8_t eyecolor1;
/*0000*/ uint8_t eyecolor2;
/*0000*/ uint8_t hairstyle;
/*0000*/ uint8_t facialhair;
/*0000*/ uint32_t heritage;
/*0000*/ uint32_t tattoo;
/*0000*/ uint32_t details;
/*0000*/ uint8_t holding;
/*0000*/ uint32_t deity;
/*0000*/ uint32_t guildID;
/*0000*/ uint32_t guildstatus; // 0=member, 1=officer, 2=leader, -1=not guilded
/*0000*/ uint8_t class_;
/*0000*/ uint8_t PVP;
/*0000*/ uint8_t state; // stand state
/*0000*/ uint8_t light;
/*0000*/ uint8_t unknown7;
/*0000*/ uint8_t unknown8;
/*0000*/ uint8_t unknown9;
/*0000*/ uint8_t unknown10;
/*0000*/ uint8_t unknown11;
/*0000*/ char lastName[0];
/*0000*/ uint32_t AARank;
/*0000*/ uint8_t unknown12;
/*0000*/ uint32_t petOwnerId;
/*0000*/ uint8_t unknown13;
/*0000*/ uint32_t unknown14;
/*0000*/ uint32_t unknown15;
/*0000*/ uint32_t unknown16;
/*0000*/ uint32_t unknown17;
/*0000*/ uint32_t unknown18;
/*0000*/ uint32_t unknown19;
/*0000*/ signed padding0000:12; // ***Placeholder
signed deltaX:13; // change in x
signed padding0005:7; // ***Placeholder
/*0000*/ signed deltaHeading:10; // change in heading
signed deltaY:13; // change in y
signed padding0006:9; // ***Placeholder
/*0000*/ signed y:19; // y coord
signed animation:13; // animation
/*0000*/ unsigned heading:12; // heading
signed x:19; // x coord
signed padding0014:1; // ***Placeholder
/*0000*/ signed z:19; // z coord
signed deltaZ:13; // change in z
// If not a valid player race (skip these if a valid player race)
/*0000*/ union
{
struct
{
/*0000*/ EquipStruct equip_helmet; // Equipment: Helmet visual (maybe)
/*0000*/ EquipStruct equip_primary; // Equipment: Main visual
/*0000*/ EquipStruct equip_secondary; // Equipment: Off visual
} equip;
/*0000*/ EquipStruct equipment[3];
};
// skip these bytes if not a valid player race - colors[9] and equipment[9]
/*0000*/ union
{
struct
{
/*0000*/ Color_Struct color_helmet; // Color of helmet item
/*0000*/ Color_Struct color_chest; // Color of chest item
/*0000*/ Color_Struct color_arms; // Color of arms item
/*0000*/ Color_Struct color_bracers; // Color of bracers item
/*0000*/ Color_Struct color_hands; // Color of hands item
/*0000*/ Color_Struct color_legs; // Color of legs item
/*0000*/ Color_Struct color_feet; // Color of feet item
/*0000*/ Color_Struct color_primary; // Color of primary item
/*0000*/ Color_Struct color_secondary; // Color of secondary item
} equipment_colors;
/*0000*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above
}
/*0000*/ union
{
struct
{
/*0000*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
/*0000*/ EquipStruct equip_chest; // Equiptment: Chest visual
/*0000*/ EquipStruct equip_arms; // Equiptment: Arms visual
/*0000*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
/*0000*/ EquipStruct equip_hands; // Equiptment: Hands visual
/*0000*/ EquipStruct equip_legs; // Equiptment: Legs visual
/*0000*/ EquipStruct equip_feet; // Equiptment: Boots visual
/*0000*/ EquipStruct equip_primary; // Equiptment: Main visual
/*0000*/ EquipStruct equip_secondary; // Equiptment: Off visual
} equip;
/*0000*/ EquipStruct equipment[9];
};
/*0000*/ char title[0]; // only read if(otherData & 8)
/*0000*/ char suffix[0]; // only read if(otherData & 16)
/*0000*/ char unknown20[8];
/*0000*/ uint8_t isMercenary;
/*0000*/ char unknown21[54];
};
#endif


#if 0
// Old stuff from spawnStruct seq doesn't actually use at all..
//
/*0004*/ float size; // Model size
/*0078*/ int8_t aa_title; // 0=none, 1=general, 2=archtype, 3=class
/*0074*/ uint8_t invis; // Invis (0=not, 1=invis)
/*0117*/ uint8_t lfg; // 0=off, 1=lfg on
/*0196*/ uint8_t afk; // 0=no, 1=afk
/*0207*/ int8_t guildrank; // 0=normal, 1=officer, 2=leader
/*0213*/ uint8_t face; // Face id for players
/*0247*/ uint8_t is_pet; // 0=no, 1=yes
/*0284*/ uint8_t beardcolor; // Beard color
/*0500*/ uint8_t showhelm; // 0=no, 1=yes
/*0501*/ uint8_t helm; // Helm texture
/*0660*/ uint8_t hairstyle; // Hair style
/*0090*/ uint8_t eyecolor1; // Player's left eye color
/*0542*/ uint8_t eyecolor2; // Left eye color
/*0547*/ uint8_t haircolor; // Hair color
/*0574*/ uint8_t is_npc; // 0=no, 1=yes
/*0575*/ uint8_t findable; // 0=can't be found, 1=can be found
/*0728*/ uint8_t beard; // Beard style (not totally, sure but maybe!)
/*0723*/ uint8_t max_hp; // (name prolly wrong)takes on the value 100 for PCs, 100 or 110 for NPCs and 120 for PC corpses...
/*122*/ uint8_t pvp; // 0=Not pvp,1=pvp
union
{
/*0091*/ int8_t equip_chest2; // Second place in packet for chest texture (usually 0xFF in live packets)
// Not sure why there are 2 of them, but it effects chest texture!
/*0091*/ int8_t mount_color; // drogmor: 0=white, 1=black, 2=green, 3=red
};
#endif

/*
** Server Zone Entry struct
** Length: 383 Octets
** OpCode: ZoneEntryCode (when direction == server)
*
* This is just a spawnStruct for the player
*/
struct ServerZoneEntryStruct : public spawnStruct
{
};

/*
** Generic Door Struct
** Length: 96 Octets
** Used in:
** OP_SpawnDoor
**
*/

struct doorStruct
{
/*0000*/ char name[32]; // Filename of Door?
/*0016*/ // uint8_t unknown016[16]; // ***Placeholder
/*0032*/ float y; // y loc
/*0036*/ float x; // x loc
/*0040*/ float z; // z loc
/*0044*/ float heading; // heading
/*0048*/ uint32_t incline; // incline
/*0052*/ uint32_t size; // size
/*0056*/ uint8_t unknown0056[4]; // ***Placeholder
/*0060*/ uint8_t doorId; // door's id #
/*0061*/ uint8_t opentype; // open type
/*0062*/ uint8_t spawnstate; // spawn state
/*0063*/ uint8_t invertstate; // invert state
/*0064*/ uint32_t zonePoint;
/*0068*/ uint8_t unknown068[28]; // ***Placeholder
/*0096*/
};

/*
** Drop Item On Ground
** Length: Variable
** OpCode: MakeDropCode
*/
// Note: Unknowns and other members removed that we don't use since we
// now only fill this with data we need from the serialized packet
struct makeDropStruct
{
uint32_t dropId; // DropID
float heading; // Heading
float z; // Z Position
float x; // X Position
float y; // Y Position
char idFile[30]; // ACTOR ID - The client reads 30 bytes from the packet
// - 20100210 eqgame.exe in EQItemList::UnpackNetData
};

/*
** ZonePoint
** Length: 24 Octets
** Sent as part of zonePointsStruct
*/

struct zonePointStruct
{
/*0000*/ uint32_t zoneTrigger;
/*0004*/ float y;
/*0008*/ float x;
/*0012*/ float z;
/*0016*/ float heading;
/*0020*/ uint16_t zoneId;
/*0022*/ uint16_t zoneInstance;
/*0024*/
};

/*
** ZonePointsStruct
** Length: Variable
** OPCode: OP_SendZonePoints
*/
struct zonePointsStruct
{
/*0000*/ uint32_t count;
/*0004*/ zonePointStruct zonePoints[0];
/*0xxx*/ uint8_t unknown0xxx[24];
/*0yyy*/
};

/*
** Time of Day
** Length: 8 Octets
** OpCode: TimeOfDayCode
*/
struct timeOfDayStruct
{
/*0000*/ uint8_t hour; // Hour (1-24)
/*0001*/ uint8_t minute; // Minute (0-59)
/*0002*/ uint8_t day; // Day (1-28)
/*0003*/ uint8_t month; // Month (1-12)
/*0004*/ uint16_t year; // Year
/*0006*/ uint16_t unknown0016; // Placeholder
/*0008*/
};

/*
** Item Packet Struct - Works on a variety of item operations
** Packet Types: See ItemPacketType enum
** Length: Variable
** OpCode: ItemCode
*/
struct itemPacketStruct
{
/*000*/ ItemPacketType packetType; // See ItemPacketType for more info.
/*004*/ char serializedItem[0];
/*xx*/
};

/*
** Item Info Request Struct
** Length: 72 Octets
** OpCode: ItemInfoCode
*/
struct itemInfoReqStruct
{
/*000*/ uint32_t itemNr; // ItemNr
/*005*/ uint32_t requestSeq; // Request sequence number
/*008*/ char name[64]; // Item name
/*072*/
};

/*
** Item Info Response Struct
** Length: Variable
** OpCode: ItemInfoCode
*/
struct itemInfoStruct
{
/*000*/ uint32_t requestSeq; // Corresponds to sequence # in req
/*004*/ char serializedItem[0];
/*xxx*/
};

/*
** Simple Spawn Update
** Length: 14 Octets
** OpCode: MobUpdateCode
*/


struct spawnPositionUpdate
{
/*0000*/ int16_t spawnId;
/*0002*/ uint8_t unk1[2]; // BSH 13 Apr 2011
/*0004*/ int64_t y:19, z:19, x:19, u3:7;
unsigned heading:12;
signed unused2:4;
/*0014*/
};

/*
** Rename a spawn
** Length: 232 Octets
** OpCode: SpawnRename
*/
struct spawnRenameStruct
{
/*000*/ char old_name[64];
/*064*/ char old_name_again[64]; //not sure what the difference is
/*128*/ char new_name[64];
/*192*/ uint32_t unknown192; //set to 0
/*196*/ uint32_t unknown196; //set to 1
/*200*/ uint8_t unknown0084[32]; // ***Placeholder
/*232*/
};

/*
** Illusion a spawn
** Length: 300 Octets
** OpCode: Illusion
*/
struct spawnIllusionStruct
{
/*0000*/ uint32_t spawnId; // Spawn id of the target
/*0004*/ char name[64]; // Name of the target
/*0068*/ uint32_t race; // New race
/*0072*/ uint8_t gender; // New gender (0=male, 1=female)
/*0073*/ uint8_t texture; // ???
/*0074*/ uint8_t helm; // ???
/*0075*/ uint8_t unknown0075; // ***Placeholder
/*0076*/ uint32_t unknown0076; // ***Placeholder
/*0080*/ uint32_t face; // New face
/*0084*/ uint8_t unknown0084[216]; // ***Placeholder
/*0300*/
};

/**
* Shroud spawn. For others shrouding, this has their spawnId and
* spawnStruct.
*
* Length: variable
* OpCode: OP_Shroud
*/
struct spawnShroudOther
{
/*00000*/ uint32_t spawnId; // Spawn Id of the shrouded player
/*00004*/ uint16_t spawnStructSize; // Size of spawnStruct (or start of)
/*00006*/ spawnStruct spawn; // Updated spawn struct for the player (variable length)
/*xxxxx*/
};

/**
* Shroud yourself. For yourself shrouding, this has your spawnId, spawnStruct,
* bits of your charProfileStruct (no checksum, then charProfile up till
* but not including name), and an itemPlayerPacket for only items on the player
* and not the bank.
*
* Length: Variable
* OpCode: OP_Shroud
*/
struct spawnShroudSelf
{
/*00000*/ uint32_t spawnId; // Spawn Id of you
/*00004*/ uint16_t ppStart; // Start of playerProfile data (spawnId+ppStart+spawnStruct)
/*00004*/ spawnStruct spawn; // Updated spawnStruct for you (variable length)
/*xxxxx*/ playerProfileStruct profile; // Character profile for shrouded char
/*xxxxx*/ uint8_t items; // Items on the player
/*xxxxx*/
};

/*
** Campfire spawn
** Length: 997
** OpCode: OP_ZoneEntry
*/
struct spawnCampfire
{
/*0000*/ spawnStruct spawn;
/*0532*/ uint8_t unknown0532[465];
/*0997*/
};


/*
** ShowEQ Specific Structures
*/

/*
** DB spawn struct (adds zone spawn was in)
*/

struct dbSpawnStruct
{
/*0000*/ struct spawnStruct spawn; // Spawn Information
/*0258*/ char zoneName[40]; // Zone Information
};

/*
** Pet spawn struct (pets pet and owner in one struct)
*/

struct petStruct
{
/*0000*/ struct spawnStruct owner; // Pet Owner Information
/*0258*/ struct spawnStruct pet; // Pet Infromation
};

/*
** Server System Message
** Length: Variable Length
** OpCode: SysMsgCode
*/

struct sysMsgStruct
{
/*0000*/ char message[0]; // Variable length message
};

/*
** Emote text
** Length: Variable Text
** OpCode: emoteTextCode
*/

struct emoteTextStruct
{
/*0000*/ uint8_t unknown0002[4]; // ***Placeholder
/*0002*/ char text[0]; // Emote `Text
};

/*
** Channel Message received or sent
** Length: Variable
** OpCode: ChannelMessageCode

This is how channelMessageStruct looks on the wire, for reference (8/12/09 eqgame.exe)

char sender[0]; // Variable length senders name
char target[0]; // Variable length target characters name
uint32_t unknown;
uint32_t language; // Language
uint32_t chanNum; // Channel
uint32_t unknown;
uint8_t unknown;
uint32_t skillInLanguage; // senders skill in language
char message[0]; // Variable length message
uint8_t unknown;
uint32_t unknown;
uint32_t unknown;
char unknown[0]; // Variable legth unknown text
uint8_t unknown;
uint32_t unknown;

*/

// This will get filled with data from the serialized packet
struct channelMessageStruct
{
/*0000*/ char sender[64];
/*0064*/ char target[64];
/*0128*/ uint32_t language;
/*0132*/ uint32_t chanNum;
/*0144*/ uint32_t skillInLanguage;
/*0148*/ char message[2048]; // Maximum message size according to eqgame.exe
};

/*
** Formatted text messages
** Length: Variable Text
** OpCode: emoteTextCode
*/

struct formattedMessageStruct
{
/*0000*/ uint8_t unknown0002[4]; // ***Placeholder
/*0004*/ uint32_t messageFormat; // Indicates the message format
/*0008*/ ChatColor messageColor; // Message color
/*0012*/ char messages[0]; // messages(NULL delimited)
/*0???*/ uint8_t unknownXXXX[8]; // ***Placeholder
};

/*
** Simple text messages
** Length: 12 Octets
** OpCode: SimpleMessageCode
*/

struct simpleMessageStruct
{
/*0000*/ uint32_t messageFormat; // Indicates the message format
/*0004*/ ChatColor messageColor; // Message color
/*0008*/ uint32_t unknown; // ***Placeholder
/*0012*/
};

/*
** Special Message Struct
** Length: Variable Text
** OPCode: OP_SpecialMesg
*/

struct specialMessageStruct
{
/*0000*/ uint8_t unknown0000[3]; // message style?
/*0003*/ ChatColor messageColor; // message color
/*0007*/ uint16_t target; // message target
/*0009*/ uint16_t padding; // padding
/*0011*/ char source[0]; // message text
/*0xxx*/ uint32_t unknown0xxx[3]; //***Placeholder
/*0yyy*/ char message[0]; // message text
};

/*
** Guild MOTD Struct
** Length: Variable Text
** OPCode: OP_GuildMOTD
*/
struct guildMOTDStruct
{
/*0000*/ uint32_t unknown0000; //***Placeholder
/*0004*/ char target[64]; // motd target
/*0068*/ char sender[64]; // motd "sender" (who set it)
/*0132*/ uint32_t unknown0132; //***Placeholder
/*0136*/ char message[0];
};

/*
** Corpse location
** Length: 18 Octets
** OpCode: corpseLocCode
*/

struct corpseLocStruct
{
/*0000*/ uint32_t spawnId;
/*0004*/ float x;
/*0008*/ float y;
/*0012*/ float z;
/*0018*/
};

/*
** Consent request
** Length: Variable by length of the name of the consentee
*/

struct consentRequestStruct
{
/*0000*/ char consentee[0]; // Name of player who was consented
};

/*
** Consent Response
** Length: 193 Octets
*/

struct consentResponseStruct
{
/*0000*/ char consentee[64]; // Name of player who was consented
/*0064*/ char consenter[64]; // Name of player who consented
/*0128*/ uint8_t allow; // 00 = deny, 01 = allow
/*0129*/ char corpseZoneName[64]; // Zone where the corpse is
/*0193*/
};

/*
** Grouping Information
** Length: 456 Octets
** OpCode: OP_GroupUpdate
*/

struct groupUpdateStruct
{
/*0000*/ int32_t action; // Group update action
/*0004*/ char yourname[64]; // Group Member Names
/*0068*/ char membername[64]; // Group leader name
/*0132*/ uint8_t unknown0132[324]; // ***Placeholder
/*456*/
};


/*
** DEPRECATED
** Grouping Information
** Length: 768 Octets
** OpCode: OP_GroupUpdate
*/

struct groupFullUpdateStruct
{
/*0000*/ int32_t action;
/*0004*/ char membernames[MAX_GROUP_MEMBERS][64]; // Group Member Names
/*0388*/ char leader[64]; // Group leader Name
/*0452*/ char unknown0452[316]; // ***Placeholder
/*0768*/
};

/*
** Grouping Invite
** Length 148 Octets (invite a player) or 152 (you get invited)
** Opcode OP_GroupInvite
*/

struct groupInviteStruct
{
/*0000*/ char invitee[64]; // Invitee's Name
/*0064*/ char inviter[64]; // Inviter's Name
/*0128*/ uint8_t unknown0128[24]; // ***Placeholder
/*0152*/
};

/*
** Grouping Invite Answer - Decline
** Length 152 Octets
** Opcode GroupDeclineCode
*/

struct groupDeclineStruct
{
/*0000*/ char yourname[64]; // Player Name
/*0064*/ char membername[64]; // Invited Member Name
/*0128*/ uint8_t unknown0128[20]; // ***Placeholder
/*0148*/ uint8_t reason; // Already in Group = 1, Declined Invite = 3
/*0149*/ uint8_t unknown0141[3]; // ***Placeholder
/*0152*/
};

/*
** Grouping Invite Answer - Accept
** Length 148 Octets
** Opcode OP_GroupFollow
*/

struct groupFollowStruct
{
/*0000*/ char unknown0000[64]; // ***Placeholder (zeros)
/*0064*/ char invitee[64]; // Invitee's Member Name
/*0128*/ uint8_t unknown0132[4]; // ***Placeholder
/*0132*/ uint32_t level; // Invitee's level
/*0136*/ uint8_t unknown0136[12]; // ***Placeholder (zeros)
/*0148*/
};

/*
** Group Disbanding
** Length 148 Octets
** Opcode
*/

struct groupDisbandStruct
{
/*0000*/ char yourname[64]; // Player Name
/*0064*/ char membername[64]; // Invited Member Name
/*0128*/ uint8_t unknown0128[20]; // ***Placeholder
/*0148*/
};

/*
** Group Leader Change
** Length 148 Octets
** Opcode OP_GroupLeader
*/

struct groupLeaderChangeStruct
{
/*0000*/ char unknown0000[64]; // ***Placeholder
/*0064*/ char membername[64]; // Invited Member Name
/*0128*/ uint8_t unknown0128[20]; // ***Placeholder
/*0148*/
};

/*
** Delete Self
** Length: 4 Octets
** OpCode: OP_DeleteSpawn
*/

struct deleteSpawnStruct
{
/*0000*/ uint32_t spawnId; // Spawn ID to delete
/*0004*/
};

/*
** Remove Spawn
** Length: 5 Octets
** OpCode: OP_RemoveSpawn
*/

struct removeSpawnStruct
{
/*0000*/ uint32_t spawnId; // Spawn ID to delete
/*0004*/ uint8_t removeSpawn; // 0 if spawn is not in your update radius
/*0005*/
};

/*
** Remove Drop Item On Ground
** Length: 8 Octets
** OpCode: RemDropCode
*/

struct remDropStruct
{
/*0000*/ uint16_t dropId; // ID assigned to drop
/*0002*/ uint8_t unknown0004[2]; // ***Placeholder
/*0004*/ uint16_t spawnId; // ID of player picking item up
/*0006*/ uint8_t unknown0008[2]; // ***Placeholder
/*0008*/
};

/*
** Consider Struct
** Length: 20 Octets
** OpCode: considerCode
*/

struct considerStruct
{
/*0000*/ uint32_t playerid; // PlayerID
/*0004*/ uint32_t targetid; // TargetID
/*0008*/ int32_t faction; // Faction
/*0012*/ int32_t level; // Level
/*0016*/ int32_t unknown0016; // unknown
/*0020*/
};

/*
** Spell Casted On
** Length: 36 Octets
** OpCode: castOnCode
*/

struct castOnStruct
{
/*0000*/ uint16_t targetId; // Target ID
/*0002*/ uint8_t unknown0002[2]; // ***Placeholder
/*0004*/ int16_t sourceId; // ***Source ID
/*0006*/ uint8_t unknown0006[2]; // ***Placeholder
/*0008*/ uint8_t unknown0008[24]; // might be some spell info?
/*0032*/ uint16_t spellId; // Spell Id
/*0034*/ uint8_t unknown0034[2]; // ***Placeholder
/*0036*/
};

/*
** Spawn Death Blow
** Length: 32 Octets
** OpCode: NewCorpseCode
*/

struct newCorpseStruct
{
/*0000*/ uint32_t spawnId; // Id of spawn that died
/*0004*/ uint32_t killerId; // Killer
/*0008*/ uint32_t corpseid; // corpses id
/*0012*/ int32_t type; // corpse type?
/*0016*/ uint32_t spellId; // ID of Spell
/*0020*/ uint16_t zoneId; // Bind zone id
/*0022*/ uint16_t zoneInstance; // Bind zone instance
/*0024*/ uint32_t damage; // Damage
/*0028*/ uint8_t unknown0028[4]; // ***Placeholder
/*0032*/
};

/**
** Environmental damage (lava, falls)
** Length: 39 Octets
*/

struct environmentDamageStruct
{
/*0000*/ uint32_t spawnId; // Who is taking the damage
/*0004*/ uint8_t unknown0004[2];
/*0006*/ uint32_t damage; // how much damage?
/*0010*/ uint8_t unknown0010[12];
/*0022*/ uint8_t type; // Damage type. FC = fall. FA = lava.
/*0023*/ uint8_t unknown0023[16];
/*0039*/
};

/*
** Money Loot
** Length: 20 Octets
** OpCode: MoneyOnCorpseCode
*/

struct moneyOnCorpseStruct
{
/*0000*/ uint8_t unknown0002[4]; // ***Placeholder
/*0004*/ uint32_t platinum; // Platinum Pieces
/*0008*/ uint32_t gold; // Gold Pieces
/*0012*/ uint32_t silver; // Silver Pieces
/*0016*/ uint32_t copper; // Copper Pieces
/*0020*/
};

/*
** Stamina
** Length: 8 Octets
** OpCode: staminaCode
*/

struct staminaStruct
{
/*0000*/ uint32_t food; // Hunger, in ticks till next eat
/*0004*/ uint32_t water; // Thirst, in ticks till next eat
/*0008*/
};

/*
** Battle Code
** Length: 28 Octets
** OpCode: ActionCode
*/

// This can be used to gather info on spells cast on us
struct action2Struct
{
/*0000*/ uint16_t target; // Target ID
/*0002*/ uint16_t source; // Source ID
/*0004*/ uint8_t type; // Bash, kick, cast, etc.
/*0005*/ int16_t spell; // SpellID
/*0007*/ int32_t damage;
/*0011*/ uint8_t unknown0011[13]; // ***Placeholder
/*0024*/ uint8_t unknown0024[4]; // ***Placeholder (11/24/07)
/*0028*/
};

// This can be used to gather info on spells cast on us
struct actionStruct
{
/*0000*/ uint16_t target; // Target ID
/*0002*/ uint16_t source; // SourceID
/*0004*/ uint8_t level; // Caster level
/*0005*/ uint8_t unknown0005[21]; // ***Placeholder
/*0026*/ uint8_t type; // Casts, Falls, Bashes, etc...
/*0027*/ uint8_t unknown0031[6];
/*0033*/ int16_t spell; // SpellID
/*0035*/ uint8_t unknown0035[2]; // ***Placeholder
/*0037*/ uint8_t unknown0037[2]; // ***Placeholder
/*0039*/
};

// Starting with 2/21/2006, OP_Actions seem to come in pairs, duplicating
// themselves, with the second one with slightly more information. Maybe this
// has to do with buff blocking??
struct actionAltStruct
{
/*0000*/ uint16_t target; // Target ID
/*0002*/ uint16_t source; // SourceID
/*0004*/ uint8_t level; // Caster level
/*0005*/ uint8_t unknown0005[21]; // ***Placeholder
/*0026*/ uint8_t type; // Casts, Falls, Bashes, etc...
/*0027*/ uint8_t unknown0031[6];
/*0033*/ int16_t spell; // SpellID
/*0035*/ uint8_t unknown0035[2]; // ***Placeholder
/*0037*/ uint32_t unknown0037;
/*0041*/ uint8_t unknown0041[15];
/*0056*/
};

/*
** client changes target struct
** Length: 4 Octets
** OpCode: clientTargetCode
*/

struct clientTargetStruct
{
/*0000*/ uint32_t newTarget; // Target ID
/*0004*/
};

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

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

/*
** New Mana Amount
** Length: 20 Octets
** OpCode: manaDecrementCode
*/

struct manaDecrementStruct
{
/*0000*/ int32_t newMana; // New Mana AMount
/*0004*/ int32_t unknown;
/*0008*/ int32_t spellId; // Last Spell Cast
/*0012*/ uint8_t unknown0012[4];
/*0016*/ uint8_t unknown0016[4]; //*** Placeholder (02/13/07)
/*0020*/
};

/*
** Special Message
** Length: 4 Octets + Variable Text Length
** OpCode: SPMesgCode
*/
struct spMesgStruct
{
/*0000*/ int32_t msgType; // Type of message
/*0004*/ char message[0]; // Message, followed by four Octets?
};

/*
** Spell Fade Struct
** Length: 10 Octets
** OpCode: SpellFadedCode
*/
struct spellFadedStruct
{
/*0000*/ uint32_t color; // color of the spell fade message
/*0004*/ char message[0]; // fade message
/*0???*/ uint8_t paddingXXX[3]; // always 0's
};

/*
** Spell Action Struct
** Length: 8 Octets
** OpCode: BeginCastCode
*/
struct beginCastStruct
{
/*0000*/ uint16_t spawnId; // Id of who is casting
/*0002*/ uint16_t spellId; // Id of spell
/*0004*/ int16_t param1; // Paramater 1
/*0006*/ int16_t param2; // Paramater 2
/*0008*/
};

/*
** Spell Action Struct
** Length: 16 Octets
** OpCode: MemSpellCode
*/

struct memSpellStruct
{
/*0000*/ uint32_t slotId; // Slot spell is being memorized in
/*0004*/ uint32_t spellId; // Id of spell
/*0008*/ int16_t param1; // Paramater 1
/*0010*/ int16_t param2; // Paramater 2
/*0012*/ uint8_t unknown0012[4]; // *** Placeholder
/*0016*/
};

/*
** Train Skill
** Length: 12 Octets
** OpCode: SkillTrainCode
*/

struct skillTrainStruct
{
/*0000*/ int32_t playerid; // player doing the training
/*0004*/ int32_t type; // type of training?
/*0008*/ uint32_t skillId; // Id of skill
/*0012*/
};

/*
** Skill Increment
** Length: 12 Octets
** OpCode: SkillIncCode
*/

struct skillIncStruct
{
/*0000*/ uint32_t skillId; // Id of skill
/*0004*/ int32_t value; // New value of skill
/*0008*/ uint8_t unknown0008[4]; // *** Placeholder
/*0012*/
};

/*
** When somebody changes what they're wearing
** or give a pet a weapon (model changes)
** Length: 14 Octets
** Opcode: WearChangeCode
*/

// ZBTEMP: Find newItemID
struct wearChangeStruct
{
/*0000*/ uint16_t spawnId; // SpawnID
/*0002*/ Color_Struct color; // item color
/*0006*/ uint8_t wearSlotId; // Slot ID
/*0007*/ uint8_t unknown0007[7]; // unknown
/*0014*/
};

/*
** Level Update
** Length: 12 Octets
** OpCode: LevelUpUpdateCode
*/

struct levelUpUpdateStruct
{
/*0000*/ uint32_t level; // New level
/*0004*/ uint32_t levelOld; // Old level
/*0008*/ uint32_t exp; // Current Experience
/*0012*/
};

/*
** Experience Update
** Length: 8 Octets
** OpCode: ExpUpdateCode
*/

struct expUpdateStruct
{
/*0000*/ uint32_t exp; // experience value x/330
/*0004*/ uint32_t type; // 0=set, 2=update
/*0008*/
};

/*
** Alternate Experience Update
** Length: 12 Octets
** OpCode: AltExpUpdateCode
*/
struct altExpUpdateStruct
{
/*0000*/ uint32_t altexp; // alt exp x/330
/*0004*/ uint32_t aapoints; // current number of AA points
/*0008*/ uint8_t percent; // percentage in integer form
/*0009*/ uint8_t unknown0009[3]; // ***Place Holder
/*0012*/
};

/**
* Leadership AA update
* Length: 32 Octets
* OpCode: LeadExpUpdate
*/
struct leadExpUpdateStruct
{
/*0000*/ uint32_t unknown0000; // All zeroes?
/*0004*/ uint32_t groupLeadExp; // Group leadership exp value
/*0008*/ uint32_t unspentGroupPoints; // Unspent group points
/*0012*/ uint32_t unknown0012; // Type?
/*0016*/ uint32_t unknown0016; // All zeroes?
/*0020*/ uint32_t raidLeadExp; // Raid leadership exp value
/*0024*/ uint32_t unspentRaidPoints; // Unspent raid points
/*0028*/ uint32_t unknown0028;
/*0032*/
};

/*
** Player Spawn Update
** Length: 23 Octets
** OpCode: SpawnUpdateCode
*/

struct SpawnUpdateStruct
{
/*0000*/ uint16_t spawnId; // Id of spawn to update
/*0002*/ uint16_t subcommand; // some sort of subcommand type
/*0004*/ int16_t arg1; // first option
/*0006*/ int16_t arg2; // second option
/*0008*/ uint8_t arg3; // third option?
/*0009*/ uint8_t unknown0009[14];
/*0023*/
};

/*
** NPC Hp Update
** Length: 10 Octets
** Opcode NpcHpUpdateCode
*/

struct hpNpcUpdateStruct
{
/*0000*/ int32_t curHP;
/*0004*/ int32_t maxHP;
/*0008*/ uint16_t spawnId;
/*0010*/
};

/*
** Inspecting Information
** Length: 1860 Octets
** OpCode: InspectDataCode
*/

struct inspectDataStruct
{
/*0000*/ uint8_t unknown0000[8]; // ***Placeholder
/*0008*/ char itemNames[23][64]; // 23 items with names
// 64 characters long.
/*1480*/ int32_t icons[23]; // Icon Information
/*1572*/ char mytext[200]; // Player Defined Text Info
/*1772*/ uint8_t unknown1772[88]; // ***Placeholder
/*1860*/
};

/*
** Reading Book Information
** Length: Variable Length Octets
** OpCode: BookTextCode
*/

struct bookTextStruct
{
/*0000*/ uint16_t unknown0000;
/*0002*/ char text[0]; // Text of item reading
};

/*
** Interrupt Casting
** Length: 6 Octets + Variable Length Octets
** Opcode: BadCastCode
*/

struct badCastStruct
{
/*0000*/ uint32_t spawnId; // Id of who is casting
/*0004*/ char message[0]; // Text Message
};

/*
** Random Number Request
** Length: 8 Octets
** OpCode: RandomCode
*/
struct randomReqStruct
{
/*0000*/ uint32_t bottom; // Low number
/*0004*/ uint32_t top; // High number
/*0008*/
};

/*
** Random Number Result
** Length: 76 Octets
** OpCode: RandomCode
*/
struct randomStruct
{
/*0000*/ uint32_t bottom; // Low number
/*0004*/ uint32_t top; // High number
/*0008*/ uint32_t result; // result number
/*0012*/ char name[64]; // name rolled by
/*0076*/
};

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

struct playerSpawnPosStruct
{
/*0000*/ uint16_t spawnId;
uint8_t unk[2]; // BSH 13 Apr 2011
/*0002*/ signed padding0000:12; // ***Placeholder
signed deltaX:13; // change in x
signed padding0005:7; // ***Placeholder
/*0006*/ signed deltaHeading:10; // change in heading
signed deltaY:13; // change in y
signed padding0006:9; // ***Placeholder
/*0010*/ signed y:19; // y coord
signed animation:10; // animation
signed padding0010:3; // ***Placeholder
/*0014*/ unsigned heading:12; // heading
signed x:19; // x coord
signed padding0014:1; // ***Placeholder
/*0020*/ signed z:19; // z coord
signed deltaZ:13; // change in z
/*0024*/
};

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

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


/*
** Spawn Appearance
** Length: 8 Octets
** OpCode: spawnAppearanceCode
*/

struct spawnAppearanceStruct
{
/*0000*/ uint16_t spawnId; // ID of the spawn
/*0002*/ uint16_t type; // Type of data sent
/*0004*/ uint32_t parameter; // Values associated with the type
/*0008*/
};


/*
** Structures that are not being currently used
* (except for logging)
*/

struct bindWoundStruct
{
/*0000*/ uint16_t playerid; // TargetID
/*0002*/ uint8_t unknown0002[2]; // ***Placeholder
/*0004*/ uint32_t hpmaybe; // Hitpoints -- Guess
/*0008*/
};

struct inspectedStruct
{
/*0000*/ uint16_t inspectorid; // Source ID
/*0002*/ uint8_t unknown0002[2]; // ***Placeholder
/*0004*/ uint16_t inspectedid; // Target ID - Should be you
/*0006*/ uint8_t unknown0006[2]; // ***Placeholder
/*0008*/
};

struct attack1Struct
{
/*0000*/ uint16_t spawnId; // Spawn ID
/*0002*/ int16_t param1; // ***Placeholder
/*0004*/ int16_t param2; // ***Placeholder
/*0006*/ int16_t param3; // ***Placeholder
/*0008*/ int16_t param4; // ***Placeholder
/*0010*/ int16_t param5; // ***Placeholder
/*0012*/
};

struct attack2Struct
{
/*0000*/ uint16_t spawnId; // Spawn ID
/*0002*/ int16_t param1; // ***Placeholder
/*0004*/ int16_t param2; // ***Placeholder
/*0006*/ int16_t param3; // ***Placeholder
/*0008*/ int16_t param4; // ***Placeholder
/*0010*/ int16_t param5; // ***Placeholder
/*0012*/
};

struct newGuildInZoneStruct
{
/*0000*/ uint8_t unknown0000[8]; // ***Placeholder
/*0008*/ char guildname[56]; // Guildname
/*0064*/
};

struct moneyUpdateStruct
{
/*0000*/ uint32_t spawnid; // ***Placeholder
/*0004*/ uint32_t cointype; // Coin Type
/*0008*/ uint32_t amount; // Amount
/*0012*/
};

/* Memorize slot operations, mem, forget, etc */

struct memorizeSlotStruct
{
/*0000*/ uint32_t slot; // Memorization slot (0-7)
/*0004*/ uint32_t spellId; // Id of spell
// (offset of spell in spdat.eff)
/*0008*/ uint32_t action; // 1-memming,0-scribing,2-forget
/*0012*/
};

struct cRunToggleStruct
{
/*0000*/ uint32_t status; //01=run 00=walk
};

struct cChatFiltersStruct
{
/*0000*/ uint32_t DamageShields; //00=on 01=off
/*0004*/ uint32_t NPCSpells; //00=on 01=off
/*0008*/ uint32_t PCSpells; //00=all 01=off 02=grp
/*0012*/ uint32_t BardSongs; //00=all 01=me 02=grp 03=off
/*0016*/ uint32_t Unused;
/*0020*/ uint32_t GuildChat; //00=off 01=on
/*0024*/ uint32_t Socials; //00=off 01=on
/*0028*/ uint32_t GroupChat; //00=off 01=on
/*0032*/ uint32_t Shouts; //00=off 01=on
/*0036*/ uint32_t Auctions; //00=off 01=on
/*0040*/ uint32_t OOC; //00=off 01=on
/*0044*/ uint32_t MyMisses; //00=off 01=on
/*0048*/ uint32_t OthersMisses; //00=off 01=on
/*0052*/ uint32_t OthersHits; //00=off 01=on
/*0056*/ uint32_t AttackerMisses; //00=off 01=on
/*0060*/ uint32_t CriticalSpells; //00=all 01=me 02=off
/*0064*/ uint32_t CriticalMelee; //00=all 01=me 02=off
/*0068*/
};

struct cOpenSpellBookStruct
{
/*0000*/ int32_t status; //01=open 00=close
/*0004*/
};

struct tradeSpellBookSlotsStruct
{
/*0000*/ uint32_t slot1;
/*0004*/ uint32_t slot2;
/*0008*/
};


/*
** serverLFGStruct
** Length: 10 Octets
** signifies LFG, maybe afk, role, ld, etc
*/

struct serverLFGStruct
{
/*0000*/ uint16_t spawnID;
/*0002*/ uint16_t unknown0004;
/*0004*/ uint16_t LFG; //1=LFG
/*0006*/ uint16_t unknown0008;
/*0008*/
};

/*
** clientLFGStruct
** Length: 70 Octets
** signifies LFG, maybe afk, role, ld, etc
*/

struct clientLFGStruct
{
/*0000*/ uint8_t name[64];
/*0064*/ uint16_t LFG; //1=LFG
/*0066*/ uint16_t unknown0008;
};

/*
** buffStruct
** Length: 44 Octets
**
*/

struct buffStruct
{
/*0000*/ uint32_t spawnid; //spawn id
/*0004*/ uint8_t unknown0004[4];
/*0008*/ float unknown0008;
/*0012*/ uint32_t spellid; // spellidbegin
/*0016*/ uint32_t duration; // duration
/*0024*/ uint8_t unknown0024[8];
/*0028*/ uint32_t playerId; // Player id who cast the buff
/*0032*/ uint8_t unknown0032[4];
/*0036*/ uint32_t spellslot; // spellslot
/*0040*/ uint32_t changetype; // 1=buff fading,2=buff duration
/*0044*/
};

/*
** Guild Member Update structure
** Length: 76 octets
**
*/

struct GuildMemberUpdate
{
/*000*/ uint32_t guildId; // guild id
/*004*/ char name[64]; // member name
/*068*/ uint16_t zoneId; // zone id
/*070*/ uint16_t zoneInstance; // zone instance
/*072*/ uint32_t lastOn; // time the player was last on.
/*076*/
};

/*
** Bazaar trader on/off struct
** Length: 76 Octets
**
*/
struct bazaarTraderRequest
{
/*000*/ uint32_t spawnId; // Spawn id of person turning trader on/off
/*004*/ uint8_t mode; // 0=off, 1=on
/*005*/ uint8_t uknown005[3]; //
/*008*/ char name[64]; // trader name
/*072*/ uint8_t uknown072[4]; //
/*076*/
};

struct bazaarSearchQueryStruct
{
uint32_t mark;
uint32_t type;
char unknownXXX0[20]; // Value seems to always be the same
char searchstring[64];
uint32_t unknownXXX1;
uint32_t unknownXXX2;
};

/*
** Item Bazaar Search Result
** Length: 160 Octets
** OpCode: BazaarSearch
*/
struct bazaarSearchResponseStruct
{
/*0000*/ uint32_t mark; // ***unknown***
/*0004*/ uint32_t player_id; // trader ID
/*0008*/ char merchant_name[64]; // trader name
/*0072*/ uint32_t count; // Count of items for sale
/*0076*/ uint32_t item_id; // ID of item for sale
/*0080*/ uint8_t uknown0080[8]; // ***unknown***
/*0088*/ char item_name[64]; // nul-padded name with appended "(count)"
/*0152*/ uint32_t price; // price in copper
/*0156*/ uint8_t uknown0156[4]; // ***unknown***
/*0160*/
};

/*
** Item Bazaar Search Result
** Length: Variable
** OpCode: BazaarSearch
*/
union bazaarSearchStruct
{
uint32_t mark;
struct bazaarSearchQueryStruct query;
struct bazaarSearchResponseStruct response[];
};

/*******************************/
/* World Server Structs */

/*
** Guild List (from world server)
** Length: 68 Octets
** used in: worldGuildList
*/

struct guildListStruct
{
/*0000*/ uint32_t guildId;
/*0004*/ char guildName[64];
};

/*
** Guild List (from world server)
** Length: Variable (serialized)
*/
struct worldGuildListStruct
{
/*000*/ uint8_t unknown000[64];
/*064*/ uint32_t numberOfGuilds; // ?
/*068*/ guildListStruct guilds[MAX_GUILDS]; // MAX_GUILDS varies by server now
};

struct worldMOTDStruct
{
/*002*/ char message[0];
/*???*/ uint8_t unknownXXX[3];
};

// Restore structure packing to default
#pragma pack()

#endif // EQSTRUCT_H

//. .7...6....,X....D4.M.\.....P.v..>..W....
//123456789012345678901234567890123456789012
//000000000111111111122222222223333333333444

pita
04-04-2012, 05:28 PM
what patch command line are you using to apply the diffs?

rogues
04-04-2012, 07:47 PM
Thanks fransick, that did the trick, really appreciate all the hard work!!!

Pita, I'm using "patch -p0 < inputfile". I think my exact syntax and the error messages are on the previous page.

pita
04-04-2012, 08:21 PM
Was directed at Fransick. which patch command line.

fransick
04-05-2012, 02:15 AM
With the patch file in my showeq directory I use:


patch -p0 < whateveryounamedthepatch.patch

I don't get any rejected hunks but everyone else seems to for some reason. I am patching against a clean copy downloaded from SVN tree so really don't know why it's working for me and not anyone else. Odd.

Razzle
04-05-2012, 06:40 AM
With the patch file in my showeq directory I use:


patch -p0 < whateveryounamedthepatch.patch

I don't get any rejected hunks but everyone else seems to for some reason. I am patching against a clean copy downloaded from SVN tree so really don't know why it's working for me and not anyone else. Odd.
Are you working with a patch created by copying from this thread? Or are you using your original patch? The problem might be with how the text got posted into this thread.

Razzle

Roads
04-05-2012, 06:47 AM
Just curious.. was this patch supposed to fix the non stop invalid packet errors? I never actually had the program totally crash.. thanks:)

Nstalkerga
04-05-2012, 08:11 AM
If anyone else has crashes with it ..
I noticed that i was continuing to have errors even after applying the patches .. and then downloading the 2 full files and recompiling.
However it was apparently something not getting cleaned up properly. Full steps from no files to installed and working listed below.

I completely deleted the entire SVN tree i had locally.

Download the SVN v760

copy the directory over the top of a latested tarballed version "5.13.10.4"
-most folks can skip this unless you have problems with the make -f Makefile.dist, im currently having system issues on my 6.2 box) my 5.x does not need this step either.

Copy the last full patch file from fransick into the SVN root folder and applied with patch -p0 <patchname
-this gave a couple errors on the everquest.h and zoneopcodes.xml

download and replace the everquest.h and zoneopcodes.xml posted by fransick.
-note this are full files and are ment to replace the files in the /src and /conf directory not patch them.

./configure && make && make install

and that should be everything.

fransick
04-05-2012, 11:19 AM
Are you working with a patch created by copying from this thread? Or are you using your original patch? The problem might be with how the text got posted into this thread.

Razzle

Good call... working with the original patch file and not what I copied from here. Since it's pretty much straight text wonder what could be throwing it off when copying from here.

I had the same issue with your original patch too. Got a handful of rejected hunks and had apply the changes by hand.

Razzle
04-05-2012, 11:54 AM
Good call... working with the original patch file and not what I copied from here. Since it's pretty much straight text wonder what could be throwing it off when copying from here.

I had the same issue with your original patch too. Got a handful of rejected hunks and had apply the changes by hand.
If you do any of it in windows, it likes to change the LF to CRLF which messes all sorts of stuff up. Staying out of windows when working on the code is my recommendation.

Razzle

Squench
04-05-2012, 12:34 PM
Do you think someone will post a patched tarball anytime soon? Thanks for all the hard work guys!

fransick
04-05-2012, 02:48 PM
If you do any of it in windows, it likes to change the LF to CRLF which messes all sorts of stuff up. Staying out of windows when working on the code is my recommendation.

Razzle

Yeah, I've run afoul of that before... didn't think I did anythying in windows but I may have since the linux laptop can be a bit sluggish sometimes.

pita
04-06-2012, 11:27 AM
Dropped the full everquest.h and zoneopcodes.xml into the extracted .4 tarball, and it worked fine.

I really need to figure out why make -f Makefile.dist build blows up on unbuntu. I can run libtoolize manually with the args from the Makefile.dist, but when makes calls it, it says it fails. After that I am stuck at a aclocal.m4

castaneda
04-06-2012, 02:56 PM
Just curious.. was this patch supposed to fix the non stop invalid packet errors? I never actually had the program totally crash.. thanks:)

Fransick, thanks for the patch -- so far so good after a few days. As far as the packet errors, have you tried session tracking? The invalid packet errors seem to me related to unrelated network traffic, eg torrents.

pita
04-09-2012, 12:06 PM
I was in Sepulcher main zone last night, and some of the wandering mob skittles were named different than the actual mob. What would cause that? Static spawns seemed fine. We were killing everything that moved, and had been there a while before I noticed. So, I assume that they were respawns.

purple
04-09-2012, 01:37 PM
OP_SpawnRename is not correct maybe.

Razzle
04-22-2012, 04:13 PM
Anyone looked at the issue associated with the exp opcode? I decompiled the client and saw nothing new. I am guessing an overflow maybe with max exp or exp rate calculations. Anyone have a crashdump indicating where to start looking? I am not actively playing right now. So i have nothing to work with except looking through code. I don't get much time for that either.

Razzle

fransick
04-22-2012, 06:03 PM
Anyone looked at the issue associated with the exp opcode? I decompiled the client and saw nothing new. I am guessing an overflow maybe with max exp or exp rate calculations. Anyone have a crashdump indicating where to start looking? I am not actively playing right now. So i have nothing to work with except looking through code. I don't get much time for that either.

Razzle


I can grab whatever you need but mine's been running rock solid for several weeks now so no crash dumps at the moment. Experience Window is a little flaky but I think that's more the old code of that functionality than any recent packet changes.