PDA

View Full Version : RoF thread



rogues
11-28-2012, 05:56 PM
Haven't had too much of a chance to do things, but change OP_ZoneEntry from 3257 to 3b49 and you get skittles. Good news that nothing huge seems changed, hopefully this will mostly be opcode hunting.

BlueAdept
11-28-2012, 08:51 PM
You rock.

rogues
11-29-2012, 05:36 AM
Haha, not so much, it's still pretty broken, but it could be worse.

A couple more OPCodes:
NpcMoveUpdate = 1b21
I think OP_DeleteSpawn is 4697

Movement history, TargetMouse and RemoveSpawn are the other big ones I'd like to find but won't get a chance until tonight. Unfortunately I don't have a good log of npc kills pre-patch, which is going to slow me down.

I can't figure out why it can't determine the zone, the position in the structure for that does not seem to have changed.

rogues
11-29-2012, 06:37 AM
OP_TargetMouse is 1d80

BOHICA1021
11-29-2012, 06:07 PM
Just guessing, but the reason it can't determine the zone is there was probably changes that need to be made to the zones.h. Otherwise, nice work so far on the OPCodes.

rogues
11-29-2012, 06:18 PM
I thought about that, but I'm using zones like the guild hall and guild lobby, whose numbers don't seem to change. For example, the guild hall is 344 (or 158 in hex). "58 01" shows up in the same exact location today as it did last week, indicating to me that the zone number for older zones haven't changed and the location hasn't changed. Maybe that's not a valid test but I haven't been able to find a flaw in my logic. The new zone numbers will have to be found, but I'm not focusing on that yet.

Keep those ideas coming!

fransick
11-29-2012, 06:58 PM
Set OP_NewZone = 4dae will get maps back up...

Might have time to look at the changes this weekend and update opcodes... if the schedule gods permit me a few quiet minutes

BOHICA1021
11-29-2012, 07:56 PM
Thanks fransick, That got the old zone maps loading. I am trying to look at the new zones, but I'm a noob at this. Got the map files updated, just not the zones.h.

BlueAdept
11-29-2012, 08:16 PM
if the schedule gods permit me a few quiet minutes

I hear you fransick...I guess I should be happy that I still have a job but working 50+ (usually 60 hours) a week sucks... Its even worse since Im salary.

Razzle
11-29-2012, 10:26 PM
I hear you fransick...I guess I should be happy that I still have a job but working 50+ (usually 60 hours) a week sucks... Its even worse since Im salary.
I totally hear you there. As I work my ass off and watch my neighbor mooching off welfare. I am begining to wonder who the lame ass loser really is.

Spanners
11-30-2012, 03:16 AM
I totally hear you there. As I work my ass off and watch my neighbor mooching off welfare. I am begining to wonder who the lame ass loser really is.

Likewise I work my ass off, but I'm wondering f that really makes me the winner too...

Good work guys, I'll have a play with maps and zones.h later, I've been into that one before and found my way round it quite easily, so hopefully I'll be able to be of some use ;)

fransick
11-30-2012, 09:38 PM
Most of the critical opcodes are updated... will see about mapping the ones that don't have associated structs (read that as non-critical to SEQ functionality) this weekend if I have time. If I get it in a good state, I'll upload to SVN.

Playerprofile is out of whack again, spawnshell is throwing tons of warnings and buffs/spells are off again too. Nothing major but beyond my ability to debug at this point.


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

<!-- Critical opcodes used directly by ShowEQ -->
<opcode id="1b21" name="OP_NpcMoveUpdate" updated="11/28/12">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="517d" name="OP_MovementHistory" updated="11/28/12">
<comment>Movement data... rewind info?</comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="50dc" name="OP_DeleteSpawn" updated="11/28/122">
<comment>DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>
<opcode id="3b49" name="OP_ZoneEntry" updated="11/28/12">
<comment>ZoneEntryCode</comment>
<payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="24cb" name="OP_GuildMOTD" updated="11/28/12">
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>
<opcode id="3a18" name="OP_InspectAnswer" updated="11/28/12">
<comment>InspectDataCode</comment>
<payload dir="both" typename="inspectDataStruct" sizechecktype="match"/>
</opcode>
<opcode id="1d80" name="OP_TargetMouse" updated="11/28/12">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>
<opcode id="3eb2" name="OP_Shroud" updated="10/23/12">
<comment>Server putting players into shroud form</comment>
<payload dir="server" typename="spawnShroudSelf" sizechecktype="none"/>
</opcode>
<opcode id="718f" name="OP_GroupInvite" updated="11/28/12">
<payload dir="both" typename="groupInviteStruct" sizechecktype="none"/>
<comment>You invite someone while ungrouped or get invited by someone ungrouped </comment>
</opcode>
<opcode id="13ec" name="OP_GroupInvite2" updated="11/28/12">
<payload dir="client" typename="groupInviteStruct" sizechecktype="none"/>
<comment>You're inviting someone and you are grouped or get invited by a group</comment>
</opcode>
<opcode id="3389" name="OP_GroupFollow" updated="11/28/12">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>You join a group or player joins group</comment>
</opcode>
<opcode id="0000" name="OP_GroupFollow2" updated="11/28/12">
<payload dir="server" typename="groupFollowStruct" sizechecktype="match"/>
<comment>Player joins your group</comment>
</opcode>
<opcode id="7693" name="OP_GroupDisband" updated="11/28/12">
<comment>You disband from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
<opcode id="12ef" name="OP_GroupDisband2" updated="11/28/12">
<comment>Other disbands from group</comment>
<payload dir="server" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
<opcode id="4bf0" name="OP_GroupLeader" updated="11/28/12">
<comment>Group leader change</comment>
<payload dir="server" typename="groupLeaderChangeStruct" sizechecktype="match"/>
</opcode>
<opcode id="202b" name="OP_GroupCancelInvite" updated="11/28/12">
<payload dir="both" typename="groupDeclineStruct" sizechecktype="match"/>
<comment>Declining to join a group</comment>
</opcode>
<opcode id="63db" name="OP_DzSwitchInfo" updated="11/28/12">
<comment>Expedition compass etc</comment>
<payload dir="server" typename="dzSwitchInfo" sizechecktype="none"/>
</opcode>
<opcode id="629b" name="OP_DzInfo" updated="10/23/12">
<comment>Expedition Information</comment>
<payload dir="server" typename="dzInfo" sizechecktype="match"/>
</opcode>
<opcode id="0aa1" name="OP_FormattedMessage" updated="11/28/12">
<comment>FormattedMessageCode i.e. pet dismissed etc</comment>
<payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/>
</opcode>
<opcode id="5557" name="OP_SpawnDoor" updated="11/28/12">
<comment>DoorSpawnsCode</comment>
<payload dir="server" typename="doorStruct" sizechecktype="modulus"/>
</opcode>
<opcode id="6c45" name="OP_AAExpUpdate" updated="11/28/12">
<comment>Receiving AA experience. Also when percent to AA changes.</comment>
<payload dir="server" typename="altExpUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="16ef" name="OP_HPUpdate" updated="11/28/12">
<comment>NpcHpUpdateCode Update HP % of a PC or NPC</comment>
<payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="0954" name="OP_GuildMemberUpdate" updated="11/28/12">
<comment>Info regarding guild members</comment>
<payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/>
</opcode>
<opcode id="7daa" name="OP_SpawnRename" updated="11/28/12">
<comment>Spawns getting renamed after initial NewSpawn</comment>
<payload dir="server" typename="spawnRenameStruct" sizechecktype="match"/>
</opcode>
<opcode id="5128" name="OP_SwapSpell" updated="11/28/12">
<comment>TradeSpellBookSlotsCode</comment>
<payload dir="both" typename="tradeSpellBookSlotsStruct" sizechecktype="match"/>
</opcode>
<opcode id="0e3b" name="OP_SimpleMessage" updated="11/28/12">
<comment>SimpleMessageCode</comment>
<payload dir="server" typename="simpleMessageStruct" sizechecktype="match"/>
</opcode>
<opcode id="611d" name="OP_SpecialMesg" updated="11/28/12">
<comment>Communicate textual info to client including hail responses etc</comment>
<payload dir="server" typename="specialMessageStruct" sizechecktype="none"/>
</opcode>
<opcode id="2af0" name="OP_RandomReq" updated="11/28/12">
<comment>RandomReqCode</comment>
<payload dir="client" typename="randomReqStruct" sizechecktype="match"/>
</opcode>
<opcode id="4717" name="OP_RandomReply" updated="11/28/12">
<comment>RandomCode</comment>
<payload dir="server" typename="randomStruct" sizechecktype="match"/>
</opcode>
<opcode id="2a1f" name="OP_ConsentResponse" updated="11/28/12">
<comment>Server replying with consent information after /consent</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
<opcode id="760d" name="OP_DenyResponse" updated="11/28/12">
<comment>Server replying with deny information after /deny</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
<opcode id="3116" name="OP_BazaarSearch" updated="10/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="20fd" name="OP_SpawnUpdate" updated="11/28/12">
<comment>SpawnUpdateCode</comment>
<payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="03af" name="OP_Stamina" updated="10/23/12">
<comment>Server updating on hunger/thirst</comment>
<payload dir="server" typename="staminaStruct" sizechecktype="match"/>
</opcode>
<opcode id="1469" name="OP_Consider" updated="11/28/12">
<comment>ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>
<opcode id="4dae" name="OP_NewZone" updated="11/28/12">
<comment>NewZoneCode</comment>
<payload dir="server" typename="newZoneStruct" sizechecktype="match"/>
</opcode>
<opcode id="769a" name="OP_GroundSpawn" updated="11/28/12">
<comment>MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="none"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="7cde" name="OP_RemoveSpawn" updated="11/28/12">
<comment>Remove spawn from zone</comment>
<payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/>
</opcode>
<opcode id="777f" name="OP_Death" updated="11/28/12">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>
<opcode id="20c9" name="OP_ClickObject" updated="11/28/12">
<comment>Items dropped on the ground</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>
<opcode id="7ce4" name="OP_Action" updated="11/28/12">
<comment>Spells cast etc</comment>
<payload dir="both" typename="actionStruct" sizechecktype="match"/>
<payload dir="both" typename="actionAltStruct" sizechecktype="match"/>
</opcode>
<opcode id="01d0" name="OP_Action2" updated="11/28/12">
<comment>Combat actions i.e. bash, kick etc</comment>
<payload dir="both" typename="action2Struct" sizechecktype="match"/>
</opcode>
<opcode id="79ee" name="OP_Illusion" updated="11/28/12">
<comment>Spawn being illusioned (changing forms)</comment>
<payload dir="both" typename="spawnIllusionStruct" sizechecktype="match"/>
</opcode>
<opcode id="0af7" name="OP_BuffFadeMsg" updated="11/28/12">
<comment>SpellFadeCode</comment>
<payload dir="both" typename="spellFadedStruct" sizechecktype="none"/>
</opcode>
<opcode id="62ee" name="OP_CastSpell" updated="11/28/12">
<comment>StartCastCode</comment>
<payload dir="both" typename="startCastStruct" sizechecktype="match"/>
</opcode>
<opcode id="4e39" name="OP_MemorizeSpell" updated="11/28/12">
<comment>MemSpellCode</comment>
<payload dir="both" typename="memSpellStruct" sizechecktype="match"/>
</opcode>
<opcode id="212b" name="OP_Emote" updated="11/28/12">
<comment>EmoteTextCode</comment>
<payload dir="both" typename="emoteTextStruct" sizechecktype="none"/>
</opcode>
<opcode id="6399" name="OP_ManaChange" updated="11/28/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="06f8" name="OP_MoneyOnCorpse" updated="11/28/12">
<comment>MoneyOnCorpseCode</comment>
<payload dir="server" typename="moneyOnCorpseStruct" sizechecktype="match"/>
</opcode>
<opcode id="1603" name="OP_PlayerProfile" updated="11/28/12">
<comment>CharProfileCode</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="2db2" name="OP_TimeOfDay" updated="10/23/12">
<comment>TimeOfDayCode</comment>
<payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/>
</opcode>
<opcode id="44ef" name="OP_ClientUpdate" updated="11/28/12">
<comment>Position updates</comment>
<payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/>
<payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/>
</opcode>
<opcode id="4cc9" name="OP_BeginCast" updated="11/28/12">
<comment>BeginCastCode</comment>
<payload dir="both" typename="beginCastStruct" sizechecktype="match"/>
</opcode>
<opcode id="01cd" name="OP_CommonMessage" updated="11/28/12">
<comment>ChannelMessageCode i.e. /tell /ooc /shout etc</comment>
<payload dir="both" typename="channelMessageStruct" sizechecktype="none"/>
</opcode>
<opcode id="4f2b" name="OP_SkillUpdate" updated="11/28/12">
<comment>Skill up code</comment>
<payload dir="server" typename="skillIncStruct" sizechecktype="match"/>
</opcode>
<opcode id="6128" name="OP_SpawnAppearance" updated="11/28/12">
<comment>SpawnAppearanceCode</comment>
<payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/>
</opcode>
<opcode id="0000" name="OP_ExpUpdate" updated="11/28/12">
<comment>ExpUpdateCode - opcode looks to be 67d1 as of 11/28/12 but that value causes seg faults for some reason</comment>
<payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="5777" name="OP_LevelUpdate" updated="11/28/12">
<comment>LevelUpUpdateCode</comment>
<payload dir="server" typename="levelUpUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="3798" name="OP_LeaderExpUpdate" updated="11/28/12">
<comment>Leadership AA Exp Update</comment>
<payload dir="server" typename="leadExpUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="4daf" name="OP_MobUpdate" updated="11/28/12">
<comment>MobUpdateCode</comment>
<payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/>
</opcode>
<opcode id="21de" name="OP_Trader" updated="10/23/12">
<comment>PC's turning trader on and off</comment>
<payload dir="server" typename="bazaarTraderRequest" sizechecktype="match"/>
</opcode>
<opcode id="071e" name="OP_Consent" updated="11/28/12">
<comment>/consent someone</comment>
<payload dir="client" typename="consentRequestStruct" sizechecktype="none"/>
</opcode>
<opcode id="2860" name="OP_ConsentDeny" updated="11/28/12">
<comment>/deny someone</comment>
<payload dir="client" typename="consentRequestStruct" sizechecktype="none"/>
</opcode>
<opcode id="1d6d" name="OP_ItemPacket" updated="11/28/12">
<comment>ItemCode</comment>
<payload dir="server" typename="itemPacketStruct" sizechecktype="none"/>
</opcode>
<opcode id="4562" name="OP_ItemLinkResponse" updated="10/23/12">
<comment>ItemInfoCode</comment>
<payload dir="server" typename="itemInfoStruct" sizechecktype="none"/>
<payload dir="client" typename="itemInfoReqStruct" sizechecktype="none"/>
</opcode>
<opcode id="2fb1" name="OP_EnvDamage" updated="10/23/12">
<comment>Environmental Damage</comment>
<payload dir="client" typename="environmentDamageStruct" sizechecktype="match"/>
</opcode>
<opcode id="402d" name="OP_SetRunMode" updated="11/28/12">
<comment>old cRunToggleCode</comment>
<payload dir="client" typename="cRunToggleStruct" sizechecktype="match"/>
</opcode>
<opcode id="0000" name="OP_WearChange" updated="03/23/12">
<comment>Armor changes or give a pet a weapon (model changes) This seems to be an artifact from a past patch. Need to fix</comment>
<payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/>
</opcode>

<!-- Not necessary for SEQ to run but here to name packets in logs. -->
<opcode id="238d" name="OP_GroupUpdate" updated="11/28/12">
<comment>Group member names - Variable length</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="4281" name="OP_UIUpdate" updated="11/28/12">
<comment>Seems to be sent to handle a variety of UI updates - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="1aae" name="OP_GroupMemberList" updated="08/17/12">
<comment>List of group members - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="4ea3" name="OP_GuildMemberList" updated="10/23/12">
<comment>List of guild members - Variable length</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="1370" name="OP_ManaUpdate" updated="11/28/12">
<comment>Mana Update opcode - 10 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="1e36" name="OP_EndUpdate" updated="11/28/12">
<comment>Endurance Update opcode - 10 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="2a62" name="OP_Marketplace" updated="10/23/12">
<comment>Marketplace data - Guessing variable length 11252 bytes as of 10/23/12</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="3dbd" name="OP_MarketplaceSelect" updated="10/23/12">
<comment>Sent when highlighting an item in Marketplace - 80 bytes</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="4676" name="OP_DzMembers" updated="10/23/12">
<comment>Expedition Members - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="33d7" name="OP_Campfire" updated="10/23/12">
<comment>Fellowship campfire information - 1076 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="4b6a" name="OP_SelectCampfire" updated="10/23/12">
<comment>Fellowship campfire Choices - Guessing variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="13bd" name="OP_Claims" updated="10/23/12">
<comment>Contents of claims window. /claim then refresh to capture packet - Guessing variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="7b6c" name="OP_VoiceChat" updated="11/28/12">
<comment>Voice chat server info - Variable length (Data sent when joining group,raid etc)</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="758a" name="OP_PollQuestions" updated="11/28/12">
<comment>SOE in-game player poll questions - Variable length</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="5615" name="OP_PollResponses" updated="11/28/12">
<comment>Poll response choices - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0321" name="OP_ShroudProgression" updated="11/28/12">
<comment>Unlocked shrouds - 244 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="ba18" name="OP_ShroudTemplates" updated="10/23/12">
<comment>Shroud templates to choose from on shroud NPC - 18983 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="23ad" name="OP_Fellowship" updated="11/28/12">
<comment>Fellowship information - 2564 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="4234" name="OP_ExpandedGuildInfo" updated="11/28/12">
<comment>Guild ranks and other misc guild data - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="18e7" name="OP_GuildBank" updated="11/28/12">
<comment>Guild bank contents - Guessing variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="38e9" name="OP_OpenTradeskillContainer" updated="10/23/12">
<comment>Opens forge, kiln etc - 92 Bytes</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="7174" name="OP_TradeskillRecipes" updated="10/23/12">
<comment>Learned recipes - 84 Bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="53b8" name="OP_TradeSkillCombine" updated="10/23/12">
<comment>Tradeskill combine using new tradeskill window - 40 Bytes</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="4b65" name="OP_TradeSkillResult" updated="10/23/12">
<comment>Packets sent when tradeskill combine successful equals # of ingredients used in combine?- 12 Bytes</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="0b69" name="OP_TradeSkillCombineOld" updated="10/23/12">
<comment>Tradeskill combine using old tradeskill window - 24 Bytes</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="0adc" name="OP_ItemPlayerPacket" updated="11/28/12">
<comment>Inventory/bank items coming over during zone - Variable length</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="19e1" name="OP_TaskDescription" updated="11/28/12">
<comment>Task descriptions coming down for task window - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="6c31" name="OP_TaskActivity" updated="11/28/12">
<comment>Task activity descriptions coming down for task window - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0525" name="OP_CompletedTasks" updated="11/28/12">
<comment>Task history for task window - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="6f1b" name="OP_CustomTitles" updated="11/28/12">
<comment>List of available titles - 1520 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0233" name="OP_Animation" updated="10/23/12">
<comment>Combat animation, emote animations etc - 4 bytes</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="2bdd" name="OP_WhoAllRequest" updated="10/23/12">
<comment>WhoAllReqCode - 156 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="6678" name="OP_WhoAllResponse" updated="10/23/12">
<comment>WhoAllOutputCode - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="3d3c" name="OP_InspectRequest" updated="11/28/12">
<comment>InspectRequestCode - 8 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="41b9" name="OP_GetGuildMOTD" updated="10/23/12">
<comment>Request guildMOTD - 648 Bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="41b9" name="OP_GuildMOTDResponse" updated="10/23/12">
<comment>Response guildMOTD - 648 Bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="3692" name="OP_TradeRequest" updated="10/23/12">
<comment>You request trade session - 8 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="7689" name="OP_TradeDeny" updated="10/23/12">
<comment>Target not ready to trade - 12 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="1439" name="OP_TradeRequestAck" updated="10/23/12">
<comment>Trade request recipient is acknowledging they are able to trade - 8 bytes</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="66f3" name="OP_CancelTrade" updated="10/23/12">
<comment>Cancel a trade window - 8 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0969" name="OP_FinishTrade" updated="10/23/12">
<comment>Trade is over - 12 bytes</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="29fa" name="OP_TradeCoins" updated="10/23/12">
<comment>You put coins put in a trade window - 20 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="428e" name="OP_TradeCoins2" updated="10/23/12">
<comment>Someone else puts coins put in your trade window - 12 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="4cf9" name="OP_TradeAcceptClick" updated="10/23/12">
<comment>One side clicks Accept on the trade 8 bytes</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="6f69" name="OP_ItemLinkClick" updated="10/23/12">
<comment>Click on itemlinks - 52 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="763b" name="OP_LootRequest" updated="10/23/12">
<comment>LootCorpseCode - 4 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="6fad" name="OP_LootItem" updated="10/23/12">
<comment>Loot item from corpse - 20 bytes</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="6635" name="OP_EndLootRequest" updated="10/23/12">
<comment>DoneLootingCode - 4 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="5372" name="OP_Track" updated="10/23/12">
<comment>Tracking data - Variable length</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="291e" name="OP_TraderShop" updated="10/23/12">
<comment>OpenTraderCode right-click on a trader in bazaar - 16 bytes</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="06fb" name="OP_AutoAttack" updated="10/23/12">
<comment>Attack on/off - 4 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="1e7e" name="OP_AutoAttack2" updated="10/23/12">
<comment>Attack on/off appears to be same as OP_AutoAttack - 4 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="1b5c" name="OP_ClickDoor" updated="10/23/12">
<comment>DoorOpenCode click request from client - 16 bytes</comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="7488" name="OP_MoveDoor" updated="10/23/12">
<comment>DoorClickCode response from server - 2 bytes</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="5143" name="OP_MoveItem" updated="10/23/12">
<comment>Client moving an item from one slot to another - 28 bytes</comment>
<payload dir="both" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="6c45" name="OP_TraderBuy" updated="10/23/12">
<comment>buy from a trader in bazaar - 104 bytes</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="01d5" name="OP_Jump" updated="10/23/12">
<comment>JumpCode - 0 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="441d" name="OP_TGB" updated="10/23/12">
<comment>Client telling server to set targetgroupbuff - 4 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="2cd8" name="OP_Lockouts" updated="10/23/12">
<comment>Client requesting lockouts - 0 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="4ee5" name="OP_RaidInvite" updated="10/23/12">
<comment>Client side raid invite requests 140 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="5dcf" name="OP_RaidJoin" updated="10/23/12">
<comment>Server side raid information - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="24c5" name="OP_Feedback" updated="07/18/12">
<comment>Client sending feedback to server - 1148 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="5f00" name="OP_GuildsList" updated="08/17/12">
<comment>Listing of all guilds. Can be triggered by /lfg search?</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0000" name="OP_LFGGetMatchesRequest" updated="10/23/12">
<comment>LFG/LFP client request - 16 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="4908" name="OP_LFGGetMatchesResponse" updated="10/23/12">
<comment>LFG/LFP server response - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="6f15" name="OP_MercenaryList" updated="11/28/12">
<comment>Listing of hired mercenaries - 429 bytes
<payload dir="server" typename="unknown" sizechecktype="none"/></comment>
</opcode>
<opcode id="1b7b" name="OP_ClickInventory" updated="10/23/12">
<comment>Click items from inventory or armor - 16 bytes 5th byte is Slot ID</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="69ea" name="OP_ClickInventoryAck" updated="10/23/12">
<comment>Server acknowledges click from inventory or armor - 20 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="60e2" name="OP_BuffWindow" updated="11/28/12">
<comment>Changes to buff window or song window - 100 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0000" name="OP_ClickBuffOff" updated="10/23/12">
<comment>Client clicks off buff - 8 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0d4b" name="OP_HouseAddress" updated="11/28/12">
<comment>House and guildhall address information - Variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="7cda" name="OP_HouseContents" updated="11/28/12">
<comment>Server sending house information and contents - variable length</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="238b" name="OP_FriendsList" updated="10/23/12">
<comment>Server sending friends list contents - variable length (Sent when choosing "Welcome" form EQ button)</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="4752" name="OP_FriendsOnline" updated="10/23/12">
<comment>Friends currently online - variable length (Sent when choosing "Welcome" form EQ button)</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="2597" name="OP_Rewards" updated="10/23/12">
<comment>Server sending pending rewards - variable length</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="630b" name="OP_FTPNags" updated="11/28/12">
<comment>Free to play nags and other data - 1852 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="5d95" name="OP_Find" updated="11/28/12">
<comment>Find window data - 112 bytes</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="10cb" name="OP_ConsiderCorpse" updated="10/23/12">
<comment>ConCorpseCode - 20 bytes</comment>
<payload dir="client" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="628a" name="OP_TributeUpdate" updated="10/23/12">
<comment>Tribute and trophy skills - Variable length</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</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="496f" name="OP_Unknown1" updated="11/28/12">
<comment>3 byte opcode that spam logs seemingly only when you have someone targeted. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="7d71" name="OP_Unknown2" updated="11/28/12">
<comment>3 byte opcode that spam logs seemingly only when you have someone targeted. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="4a6e" name="OP_Unknown3" updated="11/28/12">
<comment>3 byte opcode that spam logs seemingly only when you have someone targeted. Marked here to make reading logs easier</comment>
<payload dir="server" typename="unknown" sizechecktype="none"/>
</opcode>

<!-- Below are unverified -->
<opcode id="0000" name="OP_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="0000" name="OP_RequestZoneChange" updated="10/20/07">
<comment>Send by server when a click causes zone. Also, origin</comment>
<payload dir="server" typename="requestZoneChangeStruct" sizechecktype="match"/>
</opcode>
<opcode id="0000" name="OP_Logout" updated="10/21/09">
<comment></comment>
<payload dir="server" typename="none" sizechecktype="match"/>
</opcode>
<opcode id="0000" name="OP_WelcomeScreenTitle" updated="05/16/11">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_VeteranRewards" update="04/18/11">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_SendAATable" updated="08/12/09">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_SendAAStats" updated="08/12/09">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_AckPacket" updated="03/14/07">
<comment>Appears to be generic ack at the presentation level</comment>
</opcode>
<opcode id="0000" name="OP_Weather" updated="03/14/07">
<comment>old WeatherCode</comment>
</opcode>
<opcode id="0000" name="OP_ReqNewZone" updated="03/14/07">
<comment>Client requesting NewZone_Struct</comment>
</opcode>
<opcode id="0000" 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="0000" name="OP_AAAction" updated="03/14/07">
<comment>Used for changing percent, buying? and activating skills</comment>
</opcode>
<opcode id="0000" name="OP_SetServerFilter" updated="03/14/07">
<comment>Client telling server /filter information</comment>
</opcode>
<opcode id="0000" name="OP_ClientReady" updated="03/14/07">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_GuildTributeStatus" updated="03/14/07">
<comment>Guild tribute stats send on zone</comment>
</opcode>
<opcode id="0000" name="OP_GuildTributeInfo" updated="06/13/06">
<comment>Guild tribute loadout, only if on</comment>
</opcode>
<opcode id="0000" name="OP_RespawnWindow" updated="03/14/07">
<comment>Server telling client enough to populate the respawn window when you die</comment>
</opcode>
<opcode id="0000" name="OP_InitialMobHealth" updated="06/27/12">
<comment>Initial health sent when a player clicks on the mob. Subsequent updated will be OP_MobHealth</comment>
</opcode>
<opcode id="0000" name="OP_MobHealth" updated="03/14/07">
<comment>health sent when a player clicks on the mob</comment>
</opcode>
<opcode id="0000" name="OP_DeltaCheck" updated="03/14/07">
<comment>Client sending server delta information.</comment>
</opcode>
<opcode id="0000" name="OP_LoadSpellSet" updated="02/13/07">
<comment>/mem spellsetname</comment>
</opcode>
<opcode id="0000" name="OP_Dye" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" 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="0000" name="OP_Begging" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_LFGCommand" updated="10/27/05">
<comment>old LFGReqCode</comment>
</opcode>
<opcode id="0000" name="OP_Bug" updated="10/27/05">
<comment>/bug</comment>
</opcode>
<opcode id="0000" name="OP_Save" updated="04/19/06">
<comment>Client asking server to save user state</comment>
</opcode>
<opcode id="0000" name="OP_Camp" updated="02/13/07">
<comment>old cStartCampingCode</comment>
</opcode>
<opcode id="0000" name="OP_ShopPlayerSell" updated="10/27/05">
<comment>old SellItemCode</comment>
</opcode>
<opcode id="0000" name="OP_PetCommands" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_SaveOnZoneReq" updated="03/14/07">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_ShopEnd" updated="10/27/05">
<comment>old CloseVendorCode</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0000" name="OP_SenseTraps" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_SenseHeading" updated="10/27/05">
<comment>old cSenseHeadingCode</comment>
</opcode>
<opcode id="0000" name="OP_LootComplete" updated="12/07/05">
<comment>old sDoneLootingCode</comment>
</opcode>
<opcode id="0000" name="OP_Split" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_Surname" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_ShopRequest" updated="10/27/05">
<comment>old OpenVendorCode</comment>
<payload dir="both" typename="unknown" sizechecktype="none"/>
</opcode>
<opcode id="0000" name="OP_FaceChange" updated="10/27/05">
<comment>/face</comment>
</opcode>
<opcode id="0000" name="OP_Sneak" updated="06/29/05">
<comment>Clicked sneak</comment>
</opcode>
<opcode id="0000" name="OP_Hide" updated="06/29/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_DisarmTraps" updated="05/11/05">
<comment>Clicked disarm traps</comment>
</opcode>
<opcode id="0000" name="OP_Forage" updated="10/27/05">
<comment>old ForageCode</comment>
</opcode>
<opcode id="0000" name="OP_BoardBoat" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_LeaveBoat" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_LFPGetMatchesRequest" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_GMKill" updated="10/27/05">
<comment>GM /kill - Insta kill mob/pc</comment>
</opcode>
<opcode id="0000" name="OP_GuildPublicNote" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_YellForHelp" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_ShopPlayerBuy" updated="05/11/05">
<comment>old BuyItemCode</comment>
</opcode>
<opcode id="0000" name="OP_LFPCommand" updated="10/27/05">
<comment>looking for players</comment>
</opcode>
<opcode id="0000" name="OP_ConfirmDelete" updated="10/27/05">
<comment>Client sends this to server to confirm op_deletespawn</comment>
</opcode>
<opcode id="0000" name="OP_Report" updated="06/29/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_TargetCommand" updated="02/13/07">
<comment>Target user</comment>
</opcode>
<opcode id="0000" name="OP_LFPGetMatchesResponse" updated="02/13/07">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_FindPersonRequest" updated="02/13/07">
<comment>Control-F Find</comment>
</opcode>
<opcode id="0000" name="OP_FindResponse" updated="02/13/07">
<comment>Response to control-F</comment>
</opcode>
<opcode id="0000" name="OP_GMLastName" updated="10/27/05">
<comment>GM /lastname - Change user lastname</comment>
</opcode>
<opcode id="0000" name="OP_Mend" updated="10/27/05">
<comment></comment>
</opcode>
<opcode id="0000" name="OP_MendHPUpdate" updated="05/11/05">
<comment></comment>
</opcode>
<opcode id="0000" 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>

rogues
11-30-2012, 09:57 PM
Nice work! I wish I could figure out those opcodes as fast as you.

I wish I had some development skills because I bet there is enough agro data being passed to the client to build a nice agro meter in showeq that would show all of the agro on a mob.

fransick
12-01-2012, 07:07 AM
Nice work! I wish I could figure out those opcodes as fast as you.

I wish I had some development skills because I bet there is enough agro data being passed to the client to build a nice agro meter in showeq that would show all of the agro on a mob.

It gets easier as you look at more logs... I keep reference logs from the same toon, usually one where he zones into the guild hall and one where he is in combat. Comparing the new logs to those that have all the opcodes correct nets a lot of the changes very quickly.

For the tougher ones, I look at the struct in everquest.h to see what data is in the packet then look for a piece of data to be in the right spot in the packet. For instance, if you see in everquest.h that action2struct reports damage at octet 7 and is 4 octets long, I'll try to capture a packet where I do spell damage and note from EQ how much damage was done. Say the damage is 2416. Convert that to hex (970) then do a search on the log for "70 09" adding a leading 0 before the 9 because data appears in pairs in the log and because packets are "backwards" for some reason. What you should find is a packet that has "70 09" at octet 7. You can then look at other data in the packet to see if it matches what you expect to see from the action2struct. The size is also a good indicator... if it matches everquest.h you probably have the right opcode.

I've been trying to add notes to zoneopcodes.xml to make finding opcodes easier - either things that generate the packet in EQ if it isn't obvious or the size of the last known correct packet. Makes things a little easier.

It's a new age jigsaw puzzle, that for me is more fun than playing EQ sometimes. I am weird like that : )

r6express
12-01-2012, 01:26 PM
... spawnshell is throwing tons of warnings ...

I'm not really playing much these days but I thought I'd drop by to see how it was going with RoF. Doesn't seem like it's needing a major overhaul. Regarding the spawnshell warnings, try changing these values in spawnshell.cpp:

Change the 2 to a 4:


if(spawn->otherData & 4) { // aura stuff


Change the 8 to a 16, and the 16 to a 32:


if(spawn->otherData & 16)
{
name = netStream.readText();
strcpy(spawn->title, name.latin1());
}


if(spawn->otherData & 32)
{
name = netStream.readText();
strcpy(spawn->suffix, name.latin1());
}

fransick
12-01-2012, 03:57 PM
Thanks r6express... changes worked like a charm. Going to see if I can fix the playerprofile data. Don't fully understand how it works when it is variable length but going to try to understand what you did : )

purple
12-03-2012, 04:51 PM
The "reversed" numbers are just the difference between network and host byte order. The network is big endian. Intel is little endian.

The & 2 vs & 4 vs & 8 is bitmasking. There is a byte on the wire that is used as bitmask that determines what comes next. The byte in binary is ######## where each # is 0 or 1. Bitwise AND in C++ is &. 1 is 00000001. 2 is 00000010. 4 is 00000100, etc. So input & 2 is saying "is the second bit in the byte a 1". For code readability, I'd recommending making #defines like #define HAS_AURA 0x00000010 and then you can write code like if (data->flags & HAS_AURA) { .... }.

The variable length handlers just pull data off the wire as needed conditionally pulling fields based on flags on the wire.

It isn't more complicated than this:

I’m a server. You ask me for details, I can:

Tell you my age, as a uint8_t
Tell you whether I like rainbows or not as a uint8_t
Tell you how many times I want to punch you in the face as a uint8_t


Based on your knowledge of the server, you know it may not tell you all of those things. Randomly, it can tell you none, one, two, or three things. You know you are 37 years old.

You see data like:


00
07 25 01 03
01 25
02 01
03 25 01
04 03
06 01 03


So you think, hmm, that first thing looks interesting. If it is 00, you get nothing more. But otherwise you get more data. 37 is 25 in hex. 03 also has the first bit set and also has a 25. 04 03 has only the 3rd bit set and gives a 3 which must be the number of times I want to punch you in the face since it is non-boolean. And you can see from 07 25 01 03 that the order is Age, Likes Rainbows, Wants to Punch Me In The Face.

So you can code (pardon my exceedingly rusty C):



#define HAS_AGE 0x001
#define HAS_RAINBOWS 0x010
#define HAS_FACEPUNCH 0x100

void processInput(uint8_t[] pData) {
int i=1;

if (pData[0] & HAS_AGE) {
this.age = pData[i++];
}
if (pData[0] & HAS_RAINBOWS) {
this.likesRainbows = pData[i++];
}
if (pData[0] & HAS_FACEPUNCH) {
this.wantsToPunchMeInTheFace = pData[i++]
}
}



It's really just knowing your data and finding patterns which is exactly what you're doing with opcodes, just with more complicated patterns.

fransick
12-05-2012, 07:16 PM
Quick Update... have playerProfile half mapped now. With help from r6express, managed to get it mapped past the dreaded variable length bandolier and potion belt. After that it gets pretty messy as a lot of the data moved around and things like last save, guild status and other small hunks of data are all moved around so need another weekend to grind through and see what I can map. There were also a few struct changes in everquest.h that are now fixed. No more "UNKNOWN (ID XXXX) begins casting blah blah spam" now. So happy to report some progress being made.

I lost patience at the end of last weekend with playerProfile packet changes... hopefully I'll regain some momentum and finish up this weekend.

Fran

rogues
12-06-2012, 06:08 AM
Wow, sounds like some great progress! I've been too busy playing/

@purple: thanks for that post, that helps a ton!