diff --git a/common/patches/tob.cpp b/common/patches/tob.cpp index 000f5255d..90529b045 100644 --- a/common/patches/tob.cpp +++ b/common/patches/tob.cpp @@ -856,82 +856,70 @@ namespace TOB SETUP_VAR_ENCODE(LogServer_Struct); ALLOC_LEN_ENCODE(1932); - //pvp + // pvp if (emu->enable_pvp) { *(char*)&__packet->pBuffer[0x04] = 1; } if (emu->enable_FV) { - //FV sets these both to 1 - //one appears to enable the no drop flag the other just marks the server as special? - *(char*)&__packet->pBuffer[0x08] = 1; - *(char*)&__packet->pBuffer[0x0a] = 1; + *(char*)&__packet->pBuffer[0x08] = 1; // RP server + *(char*)&__packet->pBuffer[0x0a] = 1; // free loot server } - //This has something to do with heirloom and prestige items but im not sure what it does - //Seems to sit at 0 + // this lets you transfer no drop items in the shared bank *(char*)&__packet->pBuffer[0x75d] = 0; - //not sure what this does, something to do with server select + // disable tutorial at character create/select *(char*)&__packet->pBuffer[0x09] = 0; - //this appears to have some effect on the tradeskill system; disabling made by tags perhaps? + // this is the auto-identify flag *(char*)&__packet->pBuffer[0x0b] = 0; - //not sure, setting it to the value ive seen + // not actually used in the client, has to do with name gen *(char*)&__packet->pBuffer[0x0c] = 1; - //Something to do with languages + // unknown languages are gibberish *(char*)&__packet->pBuffer[0x0d] = 1; - //These seem to affect if server has betabuff enabled - *(char*)&__packet->pBuffer[0x600] = 0; - *(char*)&__packet->pBuffer[0x601] = 0; - //This is set on test so it's probably indicating this is a test server - *(char*)&__packet->pBuffer[0x602] = 0; - - //not sure, but it's grouped with the beta and test stuff - *(char*)&__packet->pBuffer[0x603] = 0; + // is_dev_server flags + *(char*)&__packet->pBuffer[0x600] = 0; // is beta server + *(char*)&__packet->pBuffer[0x601] = 0; // override allow beta buff (for any server) + *(char*)&__packet->pBuffer[0x602] = 0; // is test server (name reservations are unavailable) + *(char*)&__packet->pBuffer[0x603] = 0; // unused in the client //world short name strncpy((char*)&__packet->pBuffer[0x15], emu->worldshortname, 32); - //not sure, affects some player calculation but didn't care to look more + // static base HP/MP regen *(char*)&__packet->pBuffer[0x5ec] = 0; - //Looks right + // use mail system if (emu->enablemail) { *(char*)&__packet->pBuffer[0x5f5] = 1; } - //Looks right + // use voice macros if (emu->enablevoicemacros) { *(char*)&__packet->pBuffer[0x5f4] = 1; } - //Not sure, sending what we've seen + // Disable character select buttons except create character *(char*)&__packet->pBuffer[0x5f6] = 0; - //Not sure sending what we've seen + // enable tutorial at character create/select *(char*)&__packet->pBuffer[0x5f8] = 1; - //Not sure sending what we've seen + // client defaults, unused *(int32_t*)&__packet->pBuffer[0x63c] = -1; - - //Test sets this to 1, everyone else seems to set it to 0 *(int32_t*)&__packet->pBuffer[0x640] = 0; - - //Disassembly puts it next to code dealing with commands, ive not seen anyone send anything but 0 *(char*)&__packet->pBuffer[0x745] = 0; - - //Something about item restrictions, seems to always be set to 1 *(char*)&__packet->pBuffer[0x750] = 1; - //This and 0x724 are often multiplied together in guild favor calcs, live and test send 1.0f + // these are always multiplied together in guild favor calcs for display, live and test send 1.0f *(float*)&__packet->pBuffer[0x760] = 1.0f; *(float*)&__packet->pBuffer[0x764] = 1.0f; - //This and 0x72c are often multiplied together in non-guild favor calcs, live and test send 1.0f + // these are always multiplied together in non-guild favor calcs for display, live and test send 1.0f *(float*)&__packet->pBuffer[0x768] = 1.0f; *(float*)&__packet->pBuffer[0x76c] = 1.0f; @@ -2599,16 +2587,16 @@ namespace TOB eq_cse->Face = emu_cse->Face; for (int equip_index = 0; equip_index < EQ::textures::materialCount; equip_index++) { - eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; - eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; - eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteModel; - eq_cse->Equip[equip_index].HeroForgeModel = emu_cse->Equip[equip_index].HerosForgeModel; - eq_cse->Equip[equip_index].Material2 = emu_cse->Equip[equip_index].Unknown2; - eq_cse->Equip[equip_index].Color = emu_cse->Equip[equip_index].Color; + eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; // type + eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; // variation + eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteModel; // material + eq_cse->Equip[equip_index].HeroForgeModel = emu_cse->Equip[equip_index].HerosForgeModel; // new armor id + eq_cse->Equip[equip_index].Material2 = emu_cse->Equip[equip_index].Unknown2; // new armor type + eq_cse->Equip[equip_index].Color = emu_cse->Equip[equip_index].Color; // tint } - eq_cse->Unknown1 = 255; - eq_cse->Unknown2 = 0; + eq_cse->TextureType = 255; + eq_cse->HeadType = 0; eq_cse->DrakkinTattoo = emu_cse->DrakkinTattoo; eq_cse->DrakkinDetails = emu_cse->DrakkinDetails; eq_cse->Deity = emu_cse->Deity; @@ -2620,18 +2608,16 @@ namespace TOB eq_cse->EyeColor2 = emu_cse->EyeColor2; eq_cse->HairStyle = emu_cse->HairStyle; eq_cse->Beard = emu_cse->Beard; - eq_cse->GoHome = emu_cse->GoHome; + eq_cse->PreFTP = 1; eq_cse->Tutorial = emu_cse->Tutorial; eq_cse->DrakkinHeritage = emu_cse->DrakkinHeritage; - eq_cse->Enabled = emu_cse->Enabled; + eq_cse->GoHome = emu_cse->GoHome; eq_cse->LastLogin = emu_cse->LastLogin; - eq_cse->Unknown3 = 0; - eq_cse->Unknown4 = 0; - eq_cse->Unknown5 = 0; - eq_cse->Unknown6 = 0; - eq_cse->Unknown7 = 0; + eq_cse->TooHighLevel = 0; + eq_cse->Usable = emu_cse->Enabled; // this doesn't seem to do anything + eq_cse->Shrouded = 0; + eq_cse->Unknown = 0; eq_cse->CharacterId = 0; - eq_cse->Unknown8 = 1; emu_ptr += sizeof(CharacterSelectEntry_Struct); eq_ptr += sizeof(structs::CharacterSelectEntry_Struct); @@ -2646,21 +2632,23 @@ namespace TOB ENCODE_LENGTH_EXACT(MaxCharacters_Struct); SETUP_DIRECT_ENCODE(MaxCharacters_Struct, structs::MaxCharacters_Struct); - //OUT(max_chars); - eq->max_chars = 8; //needs to be fixed - eq->marketplace_chars = 0; + *eq = {0}; + eq->total_character_slots = 8; + eq->marketplace_character_slots = 0; eq->unknown008 = -1; - eq->unknown00c = 196608; - eq->unknown010 = 0; - eq->unknown014 = 0; - eq->unknown018 = 0; - eq->unknown01c = 0; - eq->unknown020 = -1; - eq->unknown024 = 0; - eq->unknown028 = 0; - eq->unknown02c = 0; - eq->unknown030 = 0; - eq->unknown034 = 0; + eq->head_start_button = 0; + eq->heroic_related = 0x0003; + eq->heroic_50_count = 0; + eq->heroic_100_count = 0; + eq->disable_character_creation = 0; // this works, but it soft-locks the UI for some reason, needs to be fixed + eq->monthly_claim = -1; + eq->marketplace_related = 0; + eq->add_marketplace_chars = 0; + eq->add_unknown = 0; + eq->legacy_characters_ruleset = 0; + eq->num_max_characters = 0; + eq->num_personas_available = 10; + eq->has_de_ranger = 1; // this is probably an expansion flag only FINISH_ENCODE(); } @@ -3029,13 +3017,13 @@ namespace TOB ENCODE_LENGTH_EXACT(ZoneChange_Struct); SETUP_DIRECT_ENCODE(ZoneChange_Struct, structs::ZoneChange_Struct); - memcpy(eq->char_name, emu->char_name, sizeof(emu->char_name)); + OUT_str(char_name); OUT(zoneID); OUT(instanceID); OUT(y); OUT(x); - OUT(z) - OUT(zone_reason); + OUT(z); + OUT(zone_reason); OUT(success); if (eq->success < 0) @@ -3544,6 +3532,20 @@ namespace TOB FINISH_DIRECT_DECODE(); } + DECODE(OP_ApproveName) + { + DECODE_LENGTH_EXACT(structs::NameApproval_Struct); + SETUP_DIRECT_DECODE(NameApproval_Struct, structs::NameApproval_Struct); + + IN_str(name); + IN(race_id); + IN(class_id); + + // TODO: expand the approval logic to include the rest of the TOB struct values (and remove the direct translation here) + + FINISH_DIRECT_DECODE(); + } + DECODE(OP_AugmentInfo) { DECODE_LENGTH_EXACT(structs::AugmentInfo_Struct); @@ -3642,6 +3644,39 @@ namespace TOB delete[] __eq_buffer; } + DECODE(OP_CharacterCreate) { + DECODE_LENGTH_EXACT(structs::CharCreate_Struct); + SETUP_DIRECT_DECODE(CharCreate_Struct, structs::CharCreate_Struct); + + IN(gender); + IN(race); + IN(class_); + IN(deity); + IN(start_zone); + IN(haircolor); + IN(beard); + IN(beardcolor); + IN(hairstyle); + IN(face); + IN(eyecolor1); + IN(eyecolor2); + IN(drakkin_heritage); + IN(drakkin_tattoo); + IN(drakkin_details); + IN(STR); + IN(STA); + IN(AGI); + IN(DEX); + IN(WIS); + IN(INT); + IN(CHA); + IN(tutorial); + + // TODO: can handle the heroic type here as well (new member) + + FINISH_DIRECT_DECODE(); + } + DECODE(OP_ClickDoor) { DECODE_LENGTH_EXACT(structs::ClickDoor_Struct); @@ -3868,7 +3903,7 @@ namespace TOB DECODE_LENGTH_EXACT(structs::ClientZoneEntry_Struct); SETUP_DIRECT_DECODE(ClientZoneEntry_Struct, structs::ClientZoneEntry_Struct); - memcpy(emu->char_name, eq->char_name, sizeof(emu->char_name)); + IN_str(char_name); FINISH_DIRECT_DECODE(); } diff --git a/common/patches/tob_ops.h b/common/patches/tob_ops.h index 22a32b403..afaf305c3 100644 --- a/common/patches/tob_ops.h +++ b/common/patches/tob_ops.h @@ -66,11 +66,13 @@ E(OP_ZoneSpawns) //list of packets we need to decode on the way in: D(OP_Animation) D(OP_ApplyPoison) +D(OP_ApproveName) D(OP_AugmentInfo) D(OP_AugmentItem) D(OP_BlockedBuffs) D(OP_CastSpell) D(OP_ChannelMessage) +D(OP_CharacterCreate) D(OP_ClientUpdate) D(OP_ClickDoor) D(OP_Consider) diff --git a/common/patches/tob_structs.h b/common/patches/tob_structs.h index e70e0a1db..5f9803f3c 100644 --- a/common/patches/tob_structs.h +++ b/common/patches/tob_structs.h @@ -75,21 +75,28 @@ namespace TOB { }; struct MaxCharacters_Struct { - /*000*/ uint32 max_chars; - /*004*/ uint32 marketplace_chars; - /*008*/ int32 unknown008; //some of these probably deal with heroic characters or something - /*00c*/ int32 unknown00c; - /*010*/ int32 unknown010; - /*014*/ int32 unknown014; - /*018*/ int32 unknown018; - /*01c*/ int32 unknown01c; - /*020*/ int32 unknown020; - /*024*/ int32 unknown024; - /*028*/ int32 unknown028; - /*02c*/ int32 unknown02c; - /*030*/ int32 unknown030; - /*034*/ int32 unknown034; - /*038*/ + /*000*/ uint32 total_character_slots; // total character slots, different than max characters + /*004*/ uint32 marketplace_character_slots; + /*008*/ uint32 unknown008; // definitely 4 bytes, read in client, value for CEverQuest::Unknown0x0608 + /*00c*/ uint8 head_start_button; + /*00d*/ uint8 unused00d; + /*00e*/ uint16 heroic_related; + /*010*/ int64 heroic_50_count; // read as 64 bits in the client + /*018*/ int32 heroic_100_count; + /*01c*/ uint8 disable_character_creation; + /*01d*/ uint8 unused01d[3]; + /*020*/ int32 monthly_claim; // (-1 for don't set) + /*024*/ uint8 marketplace_related; // marketplace related boolean (int32 for convenience here, it's 4 bytes) + /*025*/ uint8 unused025[3]; + /*028*/ int32 unused028; + /*02c*/ uint8 add_marketplace_chars; // boolean on whether to add or set marketplace characters + /*02d*/ uint8 add_unknown; // boolean on whether to add unknown008 or set marketplace characters to some unknown global + /*02e*/ uint8 legacy_characters_ruleset; + /*02f*/ uint8 unused02f; + /*030*/ int32 num_max_characters; // used for legacy exp calculation + /*034*/ int32 num_personas_available; + /*038*/ int32 has_de_ranger; + /*03c*/ }; struct ExpansionInfo_Struct { @@ -98,16 +105,16 @@ namespace TOB { }; /* - * Visible equiptment. + * Visible equipment. * Size: 20 Octets */ struct Texture_Struct { - uint32 Material; - uint32 Unknown1; - uint32 EliteMaterial; - uint32 HeroForgeModel; - uint32 Material2; // Same as material? + uint32 Material; // type + uint32 Unknown1; // material + uint32 EliteMaterial; // variation + uint32 HeroForgeModel; // new armor ID + uint32 Material2; // new armor type }; /* @@ -145,10 +152,10 @@ namespace TOB { uint8 Gender; uint8 Face; CharSelectEquip Equip[9]; - uint8 Unknown1; //Seen 256 - uint8 Unknown2; //Seen 0 - uint32 DrakkinTattoo; - uint32 DrakkinDetails; + uint8 TextureType; //Seen 256 + uint8 HeadType; //Seen 0 + uint32 DrakkinTattoo; // tattoo index + uint32 DrakkinDetails; // face attachment index uint32 Deity; uint32 PrimaryIDFile; uint32 SecondaryIDFile; @@ -158,18 +165,16 @@ namespace TOB { uint8 EyeColor2; uint8 HairStyle; uint8 Beard; - uint8 Enabled; - uint8 Tutorial; - uint32 DrakkinHeritage; - uint8 Unknown3; uint8 GoHome; + uint8 Tutorial; + uint32 DrakkinHeritage; // parent ID + uint8 TooHighLevel; + uint8 PreFTP; uint32 LastLogin; - uint8 Unknown4; // Seen 0 - uint8 Unknown5; // Seen 0 - uint8 Unknown6; // Seen 0 - uint8 Unknown7; // Seen 0 - uint32 CharacterId; //A Guess, Character I made a little bit after has a number a few hundred after the first - uint32 Unknown8; // Seen 1 + uint8 Usable; + uint16 Shrouded; + uint8 Unknown; + uint64 CharacterId; // A Guess, Character I made a little bit after has a number a few hundred after the first }; /* @@ -181,6 +186,50 @@ namespace TOB { /*000*/ uint32 CharCount; //number of chars in this packet }; + /* + ** Character Creation struct + ** Length: 168 Bytes + ** OpCode: 0x1859 + */ + struct CharCreate_Struct + { + /*00*/ uint8 padding[72]; + /*48*/ uint32 gender; + /*4c*/ uint32 race; + /*50*/ uint32 class_; + /*54*/ uint32 deity; + /*58*/ uint32 start_zone; // this is the zone ID of the start zone + /*5c*/ uint32 haircolor; + /*60*/ uint32 beard; + /*64*/ uint32 beardcolor; + /*68*/ uint32 hairstyle; + /*6c*/ uint32 face; + /*70*/ uint32 eyecolor1; + /*74*/ uint32 eyecolor2; + /*78*/ uint32 drakkin_heritage; + /*7c*/ uint32 drakkin_tattoo; + /*80*/ uint32 drakkin_details; + /*84*/ uint32 STR; + /*88*/ uint32 STA; + /*8c*/ uint32 AGI; + /*90*/ uint32 DEX; + /*94*/ uint32 WIS; + /*98*/ uint32 INT; + /*9c*/ uint32 CHA; + /*a0*/ uint32 tutorial; + /*a4*/ uint32 heroic_type; + /*a8*/ + }; + + struct NameApproval_Struct { + char name[64]; + uint32 race_id; + uint32 class_id; + uint32 deity_id; + uint32 heroic_type; // seen 0, client can also send 1-4 + uint32 unknown; // always 0? + }; + enum TOBAppearance : uint32 { None, @@ -285,21 +334,21 @@ namespace TOB { struct { signed deltaHeading : 10; signed animation : 10; - // unsigned pad1 : 12; + unsigned pad1 : 12; signed deltaX : 13; signed z : 19; signed y : 19; unsigned heading : 12; - // unsigned pad2 : 1; + unsigned pad2 : 1; signed x : 19; signed deltaZ : 13; unsigned pitch : 12; signed deltaY : 13; - // unsigned pad3 : 7; + unsigned pad3 : 7; }; uint32_t raw[5]; }; @@ -311,15 +360,15 @@ namespace TOB { /*0x04*/ float delta_y; /*0x08*/ float x; /*0x0c*/ int animation : 10; - // signed padding1 : 22; + signed padding1 : 22; /*0x10*/ float delta_x; /*0x14*/ float z; /*0x18*/ float delta_z; /*0x1c*/ int heading : 12; int pitch : 12; - // signed padding2 : 8; + signed padding2 : 8; /*0x20*/ int delta_heading : 10; - // signed padding3 : 22; + signed padding3 : 22; /*0x24*/ }; @@ -399,8 +448,8 @@ namespace TOB { struct EnterWorld_Struct { /*000*/ char name[64]; - /*064*/ int32 unknown1; - /*068*/ int32 unknown2; //tob handles these differently so for now im just going to ignore them till i figure it out + /*064*/ int32 unknown1; // this appears to always be 0 + /*068*/ int32 zoneID; // this is -1 for "last zone" }; struct ZoneChange_Struct { @@ -427,7 +476,7 @@ namespace TOB { /*016*/ float z; /*020*/ float heading; /*024*/ uint32 type; //unknown... values - /*032*/ uint8 unknown032[144]; + /*032*/ uint8 unknown032[144]; // this is mostly a string passed to the teleport function (follow starting at 0x1401F71BA), it appears to be an override for a message /*172*/ uint32 unknown172; /*176*/ }; diff --git a/tob/opcodes.md b/tob/opcodes.md index fbafc2ae3..5337728e6 100644 --- a/tob/opcodes.md +++ b/tob/opcodes.md @@ -6,631 +6,631 @@ Below is a status list for the 450 opcodes we currently use on the server for th ### World/Zone Opcode Implementation Status -| Opcode | Status | Notes | Working On | -| :--- | :--- | :--- | :--- | -| `OP_AAAction` | 🟡 Unverified | | | -| `OP_AAExpUpdate` | 🟡 Unverified | | | -| `OP_AcceptNewTask` | 🔴 Not-Set | | | -| `OP_AckPacket` | 🟡 Unverified | | | -| `OP_Action` | 🟡 Unverified | | | -| `OP_Action2` | 🔴 Not-Set | | | -| `OP_AddNimbusEffect` | 🟡 Unverified | | | -| `OP_AdventureData` | 🔴 Not-Set | | | -| `OP_AdventureDetails` | 🔴 Not-Set | | | -| `OP_AdventureFinish` | 🔴 Not-Set | | | -| `OP_AdventureInfo` | 🔴 Not-Set | | | -| `OP_AdventureInfoRequest` | 🔴 Not-Set | | | -| `OP_AdventureLeaderboardReply` | 🔴 Not-Set | | | -| `OP_AdventureLeaderboardRequest` | 🔴 Not-Set | | | -| `OP_AdventureMerchantPurchase` | 🔴 Not-Set | | | -| `OP_AdventureMerchantRequest` | 🔴 Not-Set | | | -| `OP_AdventureMerchantResponse` | 🔴 Not-Set | | | -| `OP_AdventureMerchantSell` | 🔴 Not-Set | | | -| `OP_AdventurePointsUpdate` | 🔴 Not-Set | | | -| `OP_AdventureRequest` | 🔴 Not-Set | | | -| `OP_AdventureStatsReply` | 🔴 Not-Set | | | -| `OP_AdventureStatsRequest` | 🔴 Not-Set | | | -| `OP_AdventureUpdate` | 🔴 Not-Set | | | -| `OP_AggroMeterLockTarget` | 🔴 Not-Set | | | -| `OP_AggroMeterTargetInfo` | 🔴 Not-Set | | | -| `OP_AggroMeterUpdate` | 🔴 Not-Set | | | -| `OP_AltCurrency` | 🔴 Not-Set | | | -| `OP_AltCurrencyMerchantReply` | 🔴 Not-Set | | | -| `OP_AltCurrencyMerchantRequest` | 🔴 Not-Set | | | -| `OP_AltCurrencyPurchase` | 🔴 Not-Set | | | -| `OP_AltCurrencyReclaim` | 🔴 Not-Set | | | -| `OP_AltCurrencySell` | 🔴 Not-Set | | | -| `OP_AltCurrencySellSelection` | 🔴 Not-Set | | | -| `OP_Animation` | 🟡 Unverified | | | -| `OP_AnnoyingZoneUnknown` | 🔴 Not-Set | | | -| `OP_ApplyPoison` | 🟡 Unverified | | | -| `OP_ApproveName` | 🟡 Unverified | | | -| `OP_ApproveWorld` | 🔴 Not-Set | | | -| `OP_ApproveZone` | 🔴 Not-Set | | | -| `OP_Assist` | 🟡 Unverified | | | -| `OP_AssistGroup` | 🟡 Unverified | | | -| `OP_AugmentInfo` | 🟡 Unverified | | | -| `OP_AugmentItem` | 🟡 Unverified | | | -| `OP_AutoAttack` | 🟡 Unverified | | | -| `OP_AutoAttack2` | 🟡 Unverified | | | -| `OP_AutoFire` | 🟡 Unverified | | | -| `OP_Bandolier` | 🔴 Not-Set | | | -| `OP_BankerChange` | 🟡 Unverified | | | -| `OP_Barter` | 🔴 Not-Set | | | -| `OP_Bazaar` | 🔴 Not-Set | | | -| `OP_BazaarInspect` | 🔴 Not-Set | | | -| `OP_BazaarSearch` | 🔴 Not-Set | | | -| `OP_BecomeCorpse` | 🔴 Not-Set | | | -| `OP_BecomeTrader` | 🔴 Not-Set | | | -| `OP_Begging` | 🟡 Unverified | | | -| `OP_BeginCast` | 🟡 Unverified | | | -| `OP_Bind_Wound` | 🟡 Unverified | | | -| `OP_BlockedBuffs` | 🟡 Unverified | | | -| `OP_BoardBoat` | 🟡 Unverified | | | -| `OP_BookButton` | 🟡 Unverified | | | -| `OP_Buff` | 🟡 Unverified | | | -| `OP_BuffCreate` | 🟡 Unverified | | | -| `OP_BuffRemoveRequest` | 🟡 Unverified | | | -| `OP_Bug` | 🟡 Unverified | | | -| `OP_BuyerItems` | 🔴 Not-Set | | | -| `OP_CameraEffect` | 🟡 Unverified | | | -| `OP_Camp` | 🟡 Unverified | | | -| `OP_CancelSneakHide` | 🟡 Unverified | | | -| `OP_CancelTask` | 🔴 Not-Set | | | -| `OP_CancelTrade` | 🟡 Unverified | | | -| `OP_CashReward` | 🟡 Unverified | | | -| `OP_CastSpell` | 🟡 Unverified | | | -| `OP_ChangeSize` | 🟡 Unverified | | | -| `OP_ChannelMessage` | 🟡 Unverified | | | -| `OP_ChangePetName` | 🔴 Not-Set | | | -| `OP_CharacterCreate` | 🟡 Unverified | Wasn't sure on the status of this | | -| `OP_CharacterCreateRequest` | 🟡 Unverified | Wasn't sure on status of this | | -| `OP_CharInventory` | 🟡 Unverified | | | -| `OP_Charm` | 🟡 Unverified | | | -| `OP_ChatMessage` | 🔴 Not-Set | | | -| `OP_ClearAA` | 🟡 Unverified | | | -| `OP_ClearBlockedBuffs` | 🟡 Unverified | | | -| `OP_ClearLeadershipAbilities` | 🔴 Not-Set | | | -| `OP_ClearNPCMarks` | 🔴 Not-Set | | | -| `OP_ClearObject` | 🟡 Unverified | | | -| `OP_ClearSurname` | 🔴 Not-Set | | | -| `OP_ClickDoor` | 🟡 Unverified | | | -| `OP_ClickObject` | 🟡 Unverified | | | -| `OP_ClickObjectAction` | 🟡 Unverified | | | -| `OP_ClientError` | 🔴 Not-Set | | | -| `OP_ClientReady` | 🟡 Unverified | | | -| `OP_ClientTimeStamp` | 🔴 Not-Set | | | -| `OP_ClientUpdate` | 🟡 Unverified | | | -| `OP_CloseContainer` | 🔴 Not-Set | | | -| `OP_CloseTributeMaster` | 🔴 Not-Set | | | -| `OP_ColoredText` | 🟡 Unverified | | | -| `OP_CombatAbility` | 🟡 Unverified | | | -| `OP_Command` | 🔴 Not-Set | | | -| `OP_CompletedTasks` | 🔴 Not-Set | | | -| `OP_ConfirmDelete` | 🟡 Unverified | | | -| `OP_Consent` | 🟡 Unverified | | | -| `OP_ConsentDeny` | 🟡 Unverified | | | -| `OP_ConsentResponse` | 🟡 Unverified | | | -| `OP_Consider` | 🟡 Unverified | | | -| `OP_ConsiderCorpse` | 🟡 Unverified | | | -| `OP_Consume` | 🟡 Unverified | | | -| `OP_ControlBoat` | 🟡 Unverified | | | -| `OP_CorpseDrag` | 🟡 Unverified | | | -| `OP_CorpseDrop` | 🟡 Unverified | | | -| `OP_CrashDump` | 🔴 Not-Set | | | -| `OP_CrystalCountUpdate` | 🔴 Not-Set | | | -| `OP_CrystalCreate` | 🔴 Not-Set | | | -| `OP_CrystalReclaim` | 🔴 Not-Set | | | -| `OP_CustomTitles` | 🔴 Not-Set | | | -| `OP_Damage` | 🟡 Unverified | | | -| `OP_Death` | 🟡 Unverified | | | -| `OP_DelegateAbility` | 🔴 Not-Set | | | -| `OP_DeleteCharacter` | 🟡 Unverified | | | -| `OP_DeleteCharge` | 🟡 Unverified | | | -| `OP_DeleteItem` | 🟡 Unverified | | | -| `OP_DeletePetition` | 🔴 Not-Set | | | -| `OP_DeleteSpawn` | 🟡 Unverified | | | -| `OP_DeleteSpell` | 🟡 Unverified | | | -| `OP_DenyResponse` | 🟡 Unverified | | | -| `OP_Disarm` | 🟡 Unverified | | | -| `OP_DisarmTraps` | 🟡 Unverified | | | -| `OP_DisciplineTimer` | 🟡 Unverified | | | -| `OP_DisciplineUpdate` | 🟡 Unverified | | | -| `OP_DiscordMerchantInventory` | 🔴 Not-Set | | | -| `OP_DoGroupLeadershipAbility` | 🔴 Not-Set | | | -| `OP_DuelDecline` | 🔴 Not-Set | | | -| `OP_DuelAccept` | 🔴 Not-Set | | | -| `OP_DumpName` | 🔴 Not-Set | | | -| `OP_Dye` | 🔴 Not-Set | | | -| `OP_DynamicWall` | 🔴 Not-Set | | | -| `OP_DzAddPlayer` | 🔴 Not-Set | | | -| `OP_DzChooseZone` | 🔴 Not-Set | | | -| `OP_DzChooseZoneReply` | 🔴 Not-Set | | | -| `OP_DzCompass` | 🔴 Not-Set | | | -| `OP_DzExpeditionEndsWarning` | 🔴 Not-Set | | | -| `OP_DzExpeditionInfo` | 🔴 Not-Set | | | -| `OP_DzExpeditionInvite` | 🔴 Not-Set | | | -| `OP_DzExpeditionInviteResponse` | 🔴 Not-Set | | | -| `OP_DzExpeditionLockoutTimers` | 🔴 Not-Set | | | -| `OP_DzListTimers` | 🔴 Not-Set | | | -| `OP_DzMakeLeader` | 🔴 Not-Set | | | -| `OP_DzMemberList` | 🔴 Not-Set | | | -| `OP_DzMemberListName` | 🔴 Not-Set | | | -| `OP_DzMemberListStatus` | 🔴 Not-Set | | | -| `OP_DzPlayerList` | 🔴 Not-Set | | | -| `OP_DzQuit` | 🔴 Not-Set | | | -| `OP_DzRemovePlayer` | 🔴 Not-Set | | | -| `OP_DzSetLeaderName` | 🔴 Not-Set | | | -| `OP_DzSwapPlayer` | 🔴 Not-Set | | | -| `OP_Emote` | 🔴 Not-Set | | | -| `OP_EndLootRequest` | 🟡 Unverified | | | -| `OP_EnduranceUpdate` | 🔴 Not-Set | | | -| `OP_EnterChat` | 🔴 Not-Set | | | -| `OP_EnterWorld` | 🟢 Verified | Seems to largely work | | -| `OP_EnvDamage` | 🟡 Unverified | | | -| `OP_EvolveItem` | 🔴 Not-Set | | | -| `OP_ExpansionInfo` | 🟢 Verified | Updated from u32 to u64 and works now | | -| `OP_ExpUpdate` | 🟡 Unverified | | | -| `OP_FaceChange` | 🔴 Not-Set | | | -| `OP_Feedback` | 🔴 Not-Set | | | -| `OP_FeignDeath` | 🟡 Unverified | | | -| `OP_FellowshipUpdate` | 🔴 Not-Set | | | -| `OP_FindPersonReply` | 🔴 Not-Set | | | -| `OP_FindPersonRequest` | 🔴 Not-Set | | | -| `OP_FinishTrade` | 🟡 Unverified | | | -| `OP_FinishWindow` | 🟡 Unverified | | | -| `OP_FinishWindow2` | 🟡 Unverified | | | -| `OP_Fishing` | 🟡 Unverified | | | -| `OP_Fling` | 🟡 Unverified | | | -| `OP_FloatListThing` | 🟡 Unverified | | | -| `OP_Forage` | 🟡 Unverified | | | -| `OP_ForceFindPerson` | 🔴 Not-Set | | | -| `OP_FormattedMessage` | 🟡 Unverified | | | -| `OP_FriendsWho` | 🟡 Unverified | | | -| `OP_GetGuildMOTD` | 🔴 Not-Set | | | -| `OP_GetGuildMOTDReply` | 🔴 Not-Set | | | -| `OP_GetGuildsList` | 🔴 Not-Set | | | -| `OP_GiveMoney` | 🔴 Not-Set | | | -| `OP_GMApproval` | 🔴 Not-Set | | | -| `OP_GMBecomeNPC` | 🔴 Not-Set | | | -| `OP_GMDelCorpse` | 🔴 Not-Set | | | -| `OP_GMEmoteZone` | 🔴 Not-Set | | | -| `OP_GMEndTraining` | 🟡 Unverified | | | -| `OP_GMEndTrainingResponse` | 🔴 Not-Set | | | -| `OP_GMFind` | 🔴 Not-Set | | | -| `OP_GMGoto` | 🔴 Not-Set | | | -| `OP_GMHideMe` | 🔴 Not-Set | | | -| `OP_GMKick` | 🔴 Not-Set | | | -| `OP_GMKill` | 🔴 Not-Set | | | -| `OP_GMLastName` | 🔴 Not-Set | | | -| `OP_GMNameChange` | 🔴 Not-Set | | | -| `OP_GMSearchCorpse` | 🔴 Not-Set | | | -| `OP_GMServers` | 🔴 Not-Set | | | -| `OP_GMSummon` | 🔴 Not-Set | | | -| `OP_GMToggle` | 🔴 Not-Set | | | -| `OP_GMTraining` | 🟡 Unverified | | | -| `OP_GMTrainSkill` | 🟡 Unverified | | | -| `OP_GMTrainSkillConfirm` | 🟡 Unverified | | | -| `OP_GMZoneRequest` | 🔴 Not-Set | | | -| `OP_GMZoneRequest2` | 🔴 Not-Set | | | -| `OP_GroundSpawn` | 🟡 Unverified | | | -| `OP_GroupAcknowledge` | 🔴 Not-Set | | | -| `OP_GroupCancelInvite` | 🔴 Not-Set | | | -| `OP_GroupDelete` | 🔴 Not-Set | | | -| `OP_GroupDisband` | 🟡 Unverified | | | -| `OP_GroupDisbandOther` | 🔴 Not-Set | | | -| `OP_GroupDisbandYou` | 🔴 Not-Set | | | -| `OP_GroupFollow` | 🔴 Not-Set | | | -| `OP_GroupFollow2` | 🔴 Not-Set | | | -| `OP_GroupInvite` | 🟡 Unverified | | | -| `OP_GroupInvite2` | 🔴 Not-Set | | | -| `OP_GroupLeaderChange` | 🔴 Not-Set | | | -| `OP_GroupLeadershipAAUpdate` | 🔴 Not-Set | | | -| `OP_GroupMakeLeader` | 🔴 Not-Set | | | -| `OP_GroupMentor` | 🔴 Not-Set | | | -| `OP_GroupRoles` | 🔴 Not-Set | | | -| `OP_GroupUpdate` | 🔴 Not-Set | | | -| `OP_GroupUpdateB` | 🔴 Not-Set | | | -| `OP_GroupUpdateLeaderAA` | 🔴 Not-Set | | | -| `OP_GuildBank` | 🔴 Not-Set | | | -| `OP_GuildBankItemList` | 🔴 Not-Set | | | -| `OP_GuildCreate` | 🔴 Not-Set | | | -| `OP_GuildDelete` | 🔴 Not-Set | | | -| `OP_GuildDeleteGuild` | 🔴 Not-Set | | | -| `OP_GuildDemote` | 🔴 Not-Set | | | -| `OP_GuildInvite` | 🔴 Not-Set | | | -| `OP_GuildInviteAccept` | 🔴 Not-Set | | | -| `OP_GuildLeader` | 🔴 Not-Set | | | -| `OP_GuildManageAdd` | 🔴 Not-Set | | | -| `OP_GuildManageBanker` | 🔴 Not-Set | | | -| `OP_GuildManageRemove` | 🔴 Not-Set | | | -| `OP_GuildManageStatus` | 🔴 Not-Set | | | -| `OP_GuildMemberLevelUpdate` | 🔴 Not-Set | | | -| `OP_GuildMemberList` | 🔴 Not-Set | | | -| `OP_GuildMemberUpdate` | 🔴 Not-Set | | | -| `OP_GuildMemberLevel` | 🔴 Not-Set | | | -| `OP_GuildMemberRankAltBanker` | 🔴 Not-Set | | | -| `OP_GuildMemberPublicNote` | 🔴 Not-Set | | | -| `OP_GuildMemberAdd` | 🔴 Not-Set | | | -| `OP_GuildMemberRename` | 🔴 Not-Set | | | -| `OP_GuildMemberDelete` | 🔴 Not-Set | | | -| `OP_GuildMemberDetails` | 🔴 Not-Set | | | -| `OP_GuildRenameGuild` | 🔴 Not-Set | | | -| `OP_GuildMOTD` | 🔴 Not-Set | | | -| `OP_GuildPeace` | 🔴 Not-Set | | | -| `OP_GuildPromote` | 🔴 Not-Set | | | -| `OP_GuildPublicNote` | 🔴 Not-Set | | | -| `OP_GuildRemove` | 🔴 Not-Set | | | -| `OP_GuildSelectTribute` | 🔴 Not-Set | | | -| `OP_GuildModifyBenefits` | 🔴 Not-Set | | | -| `OP_GuildTributeToggleReq` | 🔴 Not-Set | | | -| `OP_GuildTributeToggleReply` | 🔴 Not-Set | | | -| `OP_GuildOptInOut` | 🔴 Not-Set | | | -| `OP_GuildSaveActiveTributes` | 🔴 Not-Set | | | -| `OP_GuildSendActiveTributes` | 🔴 Not-Set | | | -| `OP_GuildTributeFavorAndTimer` | 🔴 Not-Set | | | -| `OP_GuildsList` | 🔴 Not-Set | | | -| `OP_GuildStatus` | 🔴 Not-Set | | | -| `OP_GuildTributeInfo` | 🔴 Not-Set | | | -| `OP_GuildUpdate` | 🔴 Not-Set | | | -| `OP_GuildTributeDonateItem` | 🔴 Not-Set | | | -| `OP_GuildTributeDonatePlat` | 🔴 Not-Set | | | -| `OP_GuildWar` | 🔴 Not-Set | | | -| `OP_Heartbeat` | 🔴 Not-Set | | | -| `OP_Hide` | 🟡 Unverified | | | -| `OP_HideCorpse` | 🟡 Unverified | | | -| `OP_HPUpdate` | 🟡 Unverified | | | -| `OP_Illusion` | 🟡 Unverified | | | -| `OP_IncreaseStats` | 🟡 Unverified | | | -| `OP_InitialHPUpdate` | 🔴 Not-Set | | | -| `OP_InitialMobHealth` | 🔴 Not-Set | | | -| `OP_InspectAnswer` | 🔴 Not-Set | | | -| `OP_InspectBuffs` | 🔴 Not-Set | | | -| `OP_InspectMessageUpdate` | 🔴 Not-Set | | | -| `OP_InspectRequest` | 🔴 Not-Set | | | -| `OP_InstillDoubt` | 🟡 Unverified | | | -| `OP_InterruptCast` | 🟡 Unverified | | | -| `OP_InvokeChangePetName` | 🔴 Not-Set | | | -| `OP_InvokeChangePetNameImmediate` | 🔴 Not-Set | | | -| `OP_InvokeNameChangeImmediate` | 🔴 Not-Set | | | -| `OP_InvokeNameChangeLazy` | 🔴 Not-Set | | | -| `OP_ItemLinkClick` | 🔴 Not-Set | | | -| `OP_ItemLinkResponse` | 🔴 Not-Set | | | -| `OP_ItemLinkText` | 🔴 Not-Set | | | -| `OP_ItemName` | 🔴 Not-Set | | | -| `OP_ItemPacket` | 🟡 Unverified | | | -| `OP_ItemPreview` | 🔴 Not-Set | | | -| `OP_ItemPreviewRequest` | 🔴 Not-Set | | | -| `OP_ItemRecastDelay` | 🟡 Unverified | | | -| `OP_ItemVerifyReply` | 🟡 Unverified | | | -| `OP_ItemVerifyRequest` | 🟡 Unverified | | | -| `OP_ItemViewUnknown` | 🔴 Not-Set | | | -| `OP_Jump` | 🟡 Unverified | | | -| `OP_KeyRing` | 🔴 Not-Set | | | -| `OP_KickPlayers` | 🟡 Unverified | | | -| `OP_KnowledgeBase` | 🔴 Not-Set | | | -| `OP_LDoNButton` | 🔴 Not-Set | | | -| `OP_LDoNDisarmTraps` | 🔴 Not-Set | | | -| `OP_LDoNInspect` | 🔴 Not-Set | | | -| `OP_LDoNOpen` | 🟡 Unverified | | | -| `OP_LDoNPickLock` | 🟡 Unverified | | | -| `OP_LDoNSenseTraps` | 🟡 Unverified | | | -| `OP_LeadershipExpToggle` | 🔴 Not-Set | | | -| `OP_LeadershipExpUpdate` | 🔴 Not-Set | | | -| `OP_LeaveAdventure` | 🔴 Not-Set | | | -| `OP_LeaveBoat` | 🟡 Unverified | | | -| `OP_LevelAppearance` | 🟡 Unverified | | | -| `OP_LevelUpdate` | 🟡 Unverified | | | -| `OP_LFGAppearance` | 🔴 Not-Set | | | -| `OP_LFGCommand` | 🔴 Not-Set | | | -| `OP_LFGGetMatchesRequest` | 🔴 Not-Set | | | -| `OP_LFGGetMatchesResponse` | 🔴 Not-Set | | | -| `OP_LFGResponse` | 🔴 Not-Set | | | -| `OP_LFGuild` | 🔴 Not-Set | | | -| `OP_LFPCommand` | 🔴 Not-Set | | | -| `OP_LFPGetMatchesRequest` | 🔴 Not-Set | | | -| `OP_LFPGetMatchesResponse` | 🔴 Not-Set | | | -| `OP_LinkedReuse` | 🟡 Unverified | | | -| `OP_LoadSpellSet` | 🔴 Not-Set | | | -| `OP_LocInfo` | 🔴 Not-Set | | | -| `OP_LockoutTimerInfo` | 🔴 Not-Set | | | -| `OP_Login` | 🔴 Not-Set | | | -| `OP_LoginAccepted` | 🔴 Not-Set | | | -| `OP_LoginComplete` | 🔴 Not-Set | | | -| `OP_LoginExpansionPacketData` | 🔴 Not-Set | | | -| `OP_LoginUnknown1` | 🔴 Not-Set | | | -| `OP_LoginUnknown2` | 🔴 Not-Set | | | -| `OP_Logout` | 🟡 Unverified | | | -| `OP_LogoutReply` | 🔴 Not-Set | | | -| `OP_LogServer` | 🟡 Unverified | Set via disassembly, lots of unknowns still | | -| `OP_LootComplete` | 🟡 Unverified | | | -| `OP_LootItem` | 🟡 Unverified | | | -| `OP_LootRequest` | 🟡 Unverified | | | -| `OP_ManaChange` | 🟡 Unverified | | | -| `OP_ManaUpdate` | 🔴 Not-Set | | | -| `OP_MarkNPC` | 🔴 Not-Set | | | -| `OP_MarkRaidNPC` | 🔴 Not-Set | | | -| `OP_Marquee` | 🟡 Unverified | | | -| `OP_MemorizeSpell` | 🟡 Unverified | | | -| `OP_Mend` | 🟡 Unverified | | | -| `OP_MendHPUpdate` | 🔴 Not-Set | | | -| `OP_MercenaryAssign` | 🔴 Not-Set | | | -| `OP_MercenaryCommand` | 🔴 Not-Set | | | -| `OP_MercenaryDataRequest` | 🔴 Not-Set | | | -| `OP_MercenaryDataResponse` | 🔴 Not-Set | | | -| `OP_MercenaryDataUpdate` | 🔴 Not-Set | | | -| `OP_MercenaryDataUpdateRequest` | 🔴 Not-Set | | | -| `OP_MercenaryDismiss` | 🔴 Not-Set | | | -| `OP_MercenaryHire` | 🔴 Not-Set | | | -| `OP_MercenarySuspendRequest` | 🔴 Not-Set | | | -| `OP_MercenarySuspendResponse` | 🔴 Not-Set | | | -| `OP_MercenaryTimer` | 🔴 Not-Set | | | -| `OP_MercenaryTimerRequest` | 🔴 Not-Set | | | -| `OP_MercenaryUnknown1` | 🔴 Not-Set | | | -| `OP_MercenaryUnsuspendResponse` | 🔴 Not-Set | | | -| `OP_MerchantBulkItems` | 🔴 Not-Set | | | -| `OP_MobEnduranceUpdate` | 🔴 Not-Set | | | -| `OP_MobHealth` | 🟡 Unverified | | | -| `OP_MobManaUpdate` | 🔴 Not-Set | | | -| `OP_MobRename` | 🔴 Not-Set | | | -| `OP_MobUpdate` | 🔴 Not-Set | | | -| `OP_MoneyOnCorpse` | 🟡 Unverified | | | -| `OP_MoneyUpdate` | 🟡 Unverified | | | -| `OP_MOTD` | 🟡 Unverified | | | -| `OP_MoveCoin` | 🟡 Unverified | | | -| `OP_MoveDoor` | 🟡 Unverified | | | -| `OP_MoveItem` | 🟡 Unverified | | | -| `OP_MoveMultipleItems` | 🟡 Unverified | | | -| `OP_MoveLogDisregard` | 🔴 Not-Set | | | -| `OP_MoveLogRequest` | 🔴 Not-Set | | | -| `OP_MultiLineMsg` | 🔴 Not-Set | | | -| `OP_NewSpawn` | 🟡 Unverified | | | -| `OP_NewTitlesAvailable` | 🔴 Not-Set | | | -| `OP_NewZone` | 🟢 Verified | | | -| `OP_NPCMoveUpdate` | 🔴 Not-Set | | | -| `OP_OnLevelMessage` | 🟡 Unverified | | | -| `OP_OpenContainer` | 🟡 Unverified | | | -| `OP_OpenDiscordMerchant` | 🔴 Not-Set | | | -| `OP_OpenGuildTributeMaster` | 🔴 Not-Set | | | -| `OP_OpenInventory` | 🔴 Not-Set | | | -| `OP_OpenTributeMaster` | 🔴 Not-Set | | | -| `OP_PDeletePetition` | 🔴 Not-Set | | | -| `OP_PetBuffWindow` | 🔴 Not-Set | | | -| `OP_PetCommands` | 🔴 Not-Set | | | -| `OP_PetCommandState` | 🔴 Not-Set | | | -| `OP_PetHoTT` | 🔴 Not-Set | | | -| `OP_Petition` | 🔴 Not-Set | | | -| `OP_PetitionBug` | 🔴 Not-Set | | | -| `OP_PetitionCheckIn` | 🔴 Not-Set | | | -| `OP_PetitionCheckout` | 🔴 Not-Set | | | -| `OP_PetitionCheckout2` | 🔴 Not-Set | | | -| `OP_PetitionDelete` | 🔴 Not-Set | | | -| `OP_PetitionQue` | 🔴 Not-Set | | | -| `OP_PetitionRefresh` | 🔴 Not-Set | | | -| `OP_PetitionResolve` | 🔴 Not-Set | | | -| `OP_PetitionSearch` | 🔴 Not-Set | | | -| `OP_PetitionSearchResults` | 🔴 Not-Set | | | -| `OP_PetitionSearchText` | 🔴 Not-Set | | | -| `OP_PetitionUnCheckout` | 🔴 Not-Set | | | -| `OP_PetitionUpdate` | 🔴 Not-Set | | | -| `OP_PickPocket` | 🟡 Unverified | | | -| `OP_PickZone` | 🔴 Not-Set | | | -| `OP_PickZoneWindow` | 🔴 Not-Set | | | -| `OP_PlayerProfile` | 🟢 Verified | | | -| `OP_PlayerStateAdd` | 🟡 Unverified | | | -| `OP_PlayerStateRemove` | 🟡 Unverified | | | -| `OP_PlayEverquestRequest` | 🔴 Not-Set | | | -| `OP_PlayEverquestResponse` | 🔴 Not-Set | | | -| `OP_PlayMP3` | 🟡 Unverified | | | -| `OP_Poll` | 🔴 Not-Set | | | -| `OP_PollResponse` | 🔴 Not-Set | | | -| `OP_PopupResponse` | 🟡 Unverified | | | -| `OP_PostEnterWorld` | 🟢 Verified | | | -| `OP_PotionBelt` | 🔴 Not-Set | | | -| `OP_PreLogoutReply` | 🔴 Not-Set | | | -| `OP_PurchaseLeadershipAA` | 🔴 Not-Set | | | -| `OP_PVPLeaderBoardDetailsReply` | 🔴 Not-Set | | | -| `OP_PVPLeaderBoardDetailsRequest` | 🔴 Not-Set | | | -| `OP_PVPLeaderBoardReply` | 🔴 Not-Set | | | -| `OP_PVPLeaderBoardRequest` | 🔴 Not-Set | | | -| `OP_PVPStats` | 🔴 Not-Set | | | -| `OP_QueryResponseThing` | 🔴 Not-Set | | | -| `OP_QueryUCSServerStatus` | 🟡 Unverified | | | -| `OP_RaidDelegateAbility` | 🔴 Not-Set | | | -| `OP_RaidClearNPCMarks` | 🔴 Not-Set | | | -| `OP_RaidInvite` | 🔴 Not-Set | | | -| `OP_RaidJoin` | 🔴 Not-Set | | | -| `OP_RaidUpdate` | 🔴 Not-Set | | | -| `OP_RandomNameGenerator` | 🟡 Unverified | | | -| `OP_RandomReply` | 🟡 Unverified | | | -| `OP_RandomReq` | 🟡 Unverified | | | -| `OP_ReadBook` | 🟡 Unverified | | | -| `OP_RecipeAutoCombine` | 🟡 Unverified | | | -| `OP_RecipeDetails` | 🟡 Unverified | | | -| `OP_RecipeReply` | 🟡 Unverified | | | -| `OP_RecipesFavorite` | 🟡 Unverified | | | -| `OP_RecipesSearch` | 🟡 Unverified | | | -| `OP_ReclaimCrystals` | 🔴 Not-Set | | | -| `OP_ReloadUI` | 🔴 Not-Set | | | -| `OP_RemoveAllDoors` | 🟡 Unverified | | | -| `OP_RemoveBlockedBuffs` | 🟡 Unverified | | | -| `OP_RemoveNimbusEffect` | 🟡 Unverified | | | -| `OP_RemoveTrap` | 🔴 Not-Set | | | -| `OP_Report` | 🟡 Unverified | | | -| `OP_ReqClientSpawn` | 🟢 Verified | | | -| `OP_ReqNewZone` | 🟢 Verified | | | -| `OP_RequestClientZoneChange` | 🟡 Unverified | | | -| `OP_RequestDuel` | 🔴 Not-Set | | | -| `OP_RequestGuildTributes` | 🔴 Not-Set | | | -| `OP_RequestKnowledgeBase` | 🔴 Not-Set | | | -| `OP_RequestTitles` | 🔴 Not-Set | | | -| `OP_RespawnWindow` | 🟡 Unverified | | | -| `OP_RespondAA` | 🟡 Unverified | | | -| `OP_RestState` | 🟡 Unverified | | | -| `OP_Rewind` | 🟡 Unverified | | | -| `OP_RezzAnswer` | 🔴 Not-Set | | | -| `OP_RezzComplete` | 🔴 Not-Set | | | -| `OP_RezzRequest` | 🔴 Not-Set | | | -| `OP_Sacrifice` | 🟡 Unverified | | | -| `OP_SafeFallSuccess` | 🟡 Unverified | | | -| `OP_SafePoint` | 🔴 Not-Set | | | -| `OP_Save` | 🟡 Unverified | | | -| `OP_SaveOnZoneReq` | 🟡 Unverified | | | -| `OP_SelectTribute` | 🔴 Not-Set | | | -| `OP_SendAAStats` | 🟡 Unverified | | | -| `OP_SendAATable` | 🟡 Unverified | | | -| `OP_SendCharInfo` | 🟢 Verified | Seems to largely work correctly | | -| `OP_SendExpZonein` | 🟡 Unverified | | | -| `OP_SendFindableNPCs` | 🔴 Not-Set | | | -| `OP_SendGuildTributes` | 🔴 Not-Set | | | -| `OP_SendLoginInfo` | 🟢 Verified | | | -| `OP_SendMaxCharacters` | 🟢 Verified | | | -| `OP_SendMembership` | 🟡 Unverified | Seems right but may be new stuff we need to figure out | | -| `OP_SendMembershipDetails` | 🟡 Unverified | Seems right but may be new stuff we need to figure out | | -| `OP_SendSystemStats` | 🔴 Not-Set | | | -| `OP_SendTitleList` | 🔴 Not-Set | | | -| `OP_SendTributes` | 🔴 Not-Set | | | -| `OP_SendZonepoints` | 🟡 Unverified | | | -| `OP_SenseHeading` | 🟡 Unverified | | | -| `OP_SenseTraps` | 🟡 Unverified | | | -| `OP_ServerListRequest` | 🔴 Not-Set | | | -| `OP_ServerListResponse` | 🔴 Not-Set | | | -| `OP_SessionReady` | 🔴 Not-Set | | | -| `OP_SetChatServer` | 🔴 Not-Set | | | -| `OP_SetChatServer2` | 🟡 Unverified | | | -| `OP_SetFace` | 🔴 Not-Set | | | -| `OP_SetGroupTarget` | 🔴 Not-Set | | | -| `OP_SetGuildMOTD` | 🔴 Not-Set | | | -| `OP_SetGuildRank` | 🔴 Not-Set | | | -| `OP_SetRunMode` | 🟡 Unverified | | | -| `OP_SetServerFilter` | 🟡 Unverified | | | -| `OP_SetStartCity` | 🔴 Not-Set | | | -| `OP_SetTitle` | 🔴 Not-Set | | | -| `OP_SetTitleReply` | 🔴 Not-Set | | | -| `OP_SharedTaskMemberList` | 🔴 Not-Set | | | -| `OP_SharedTaskAddPlayer` | 🔴 Not-Set | | | -| `OP_SharedTaskRemovePlayer` | 🔴 Not-Set | | | -| `OP_SharedTaskMakeLeader` | 🔴 Not-Set | | | -| `OP_SharedTaskMemberInvite` | 🔴 Not-Set | | | -| `OP_SharedTaskInvite` | 🔴 Not-Set | | | -| `OP_SharedTaskInviteResponse` | 🔴 Not-Set | | | -| `OP_SharedTaskAcceptNew` | 🔴 Not-Set | | | -| `OP_SharedTaskMemberChange` | 🔴 Not-Set | | | -| `OP_SharedTaskPlayerList` | 🔴 Not-Set | | | -| `OP_SharedTaskSelectWindow` | 🔴 Not-Set | | | -| `OP_SharedTaskQuit` | 🔴 Not-Set | | | -| `OP_TaskTimers` | 🔴 Not-Set | | | -| `OP_Shielding` | 🔴 Not-Set | | | -| `OP_ShopDelItem` | 🟡 Unverified | | | -| `OP_ShopEnd` | 🟡 Unverified | | | -| `OP_ShopEndConfirm` | 🟡 Unverified | | | -| `OP_ShopItem` | 🔴 Not-Set | | | -| `OP_ShopPlayerBuy` | 🟡 Unverified | | | -| `OP_ShopPlayerSell` | 🟡 Unverified | | | -| `OP_ShopSendParcel` | 🟡 Unverified | | | -| `OP_ShopDeleteParcel` | 🟡 Unverified | | | -| `OP_ShopRespondParcel` | 🔴 Not-Set | | | -| `OP_ShopRetrieveParcel` | 🟡 Unverified | | | -| `OP_ShopParcelIcon` | 🟡 Unverified | | | -| `OP_ShopRequest` | 🟡 Unverified | | | -| `OP_SimpleMessage` | 🟡 Unverified | | | -| `OP_SkillUpdate` | 🟡 Unverified | | | -| `OP_Sneak` | 🟡 Unverified | | | -| `OP_Some3ByteHPUpdate` | 🔴 Not-Set | | | -| `OP_Some6ByteHPUpdate` | 🔴 Not-Set | | | -| `OP_SomeItemPacketMaybe` | 🔴 Not-Set | | | -| `OP_Sound` | 🟡 Unverified | | | -| `OP_SpawnAppearance` | 🟡 Unverified | | | -| `OP_SpawnDoor` | 🟡 Unverified | | | -| `OP_SpawnPositionUpdate` | 🔴 Not-Set | | | -| `OP_SpecialMesg` | 🟡 Unverified | | | -| `OP_SpellEffect` | 🟡 Unverified | | | -| `OP_Split` | 🟡 Unverified | | | -| `OP_Stamina` | 🟡 Unverified | | | -| `OP_Stun` | 🟡 Unverified | | | -| `OP_Surname` | 🔴 Not-Set | | | -| `OP_SwapSpell` | 🟡 Unverified | | | -| `OP_SystemFingerprint` | 🔴 Not-Set | | | -| `OP_TargetBuffs` | 🔴 Not-Set | | | -| `OP_TargetCommand` | 🟡 Unverified | | | -| `OP_TargetHoTT` | 🔴 Not-Set | | | -| `OP_TargetMouse` | 🟡 Unverified | | | -| `OP_TargetReject` | 🔴 Not-Set | | | -| `OP_TaskActivity` | 🔴 Not-Set | | | -| `OP_TaskActivityComplete` | 🔴 Not-Set | | | -| `OP_TaskDescription` | 🔴 Not-Set | | | -| `OP_TaskHistoryReply` | 🔴 Not-Set | | | -| `OP_TaskHistoryRequest` | 🔴 Not-Set | | | -| `OP_TaskRequestTimer` | 🔴 Not-Set | | | -| `OP_TaskSelectWindow` | 🔴 Not-Set | | | -| `OP_Taunt` | 🟡 Unverified | | | -| `OP_TestBuff` | 🔴 Not-Set | | | -| `OP_TGB` | 🔴 Not-Set | | | -| `OP_TimeOfDay` | 🟡 Unverified | | | -| `OP_Track` | 🟡 Unverified | | | -| `OP_TrackTarget` | 🟡 Unverified | | | -| `OP_TrackUnknown` | 🟡 Unverified | | | -| `OP_TradeAcceptClick` | 🟡 Unverified | | | -| `OP_TradeBusy` | 🟡 Unverified | | | -| `OP_TradeCoins` | 🟡 Unverified | | | -| `OP_TradeMoneyUpdate` | 🟡 Unverified | | | -| `OP_Trader` | 🔴 Not-Set | | | -| `OP_TraderBulkSend` | 🔴 Not-Set | | | -| `OP_TraderBuy` | 🔴 Not-Set | | | -| `OP_TraderDelItem` | 🔴 Not-Set | | | -| `OP_TradeRequest` | 🟡 Unverified | | | -| `OP_TradeRequestAck` | 🟡 Unverified | | | -| `OP_TraderItemUpdate` | 🔴 Not-Set | | | -| `OP_TraderShop` | 🔴 Not-Set | | | -| `OP_TradeSkillCombine` | 🟡 Unverified | | | -| `OP_TradeSkillRecipeInspect` | 🔴 Not-Set | | | -| `OP_Translocate` | 🟡 Unverified | | | -| `OP_TributeInfo` | 🔴 Not-Set | | | -| `OP_TributeItem` | 🔴 Not-Set | | | -| `OP_TributeMoney` | 🔴 Not-Set | | | -| `OP_TributeNPC` | 🔴 Not-Set | | | -| `OP_TributePointUpdate` | 🔴 Not-Set | | | -| `OP_TributeTimer` | 🔴 Not-Set | | | -| `OP_TributeToggle` | 🔴 Not-Set | | | -| `OP_TributeUpdate` | 🔴 Not-Set | | | -| `OP_Untargetable` | 🟡 Unverified | | | -| `OP_UpdateAA` | 🟡 Unverified | | | -| `OP_UpdateAura` | 🔴 Not-Set | | | -| `OP_UpdateLeadershipAA` | 🔴 Not-Set | | | -| `OP_VetClaimReply` | 🔴 Not-Set | | | -| `OP_VetClaimRequest` | 🔴 Not-Set | | | -| `OP_VetRewardsAvaliable` | 🔴 Not-Set | | | -| `OP_VoiceMacroIn` | 🟡 Unverified | | | -| `OP_VoiceMacroOut` | 🟡 Unverified | | | -| `OP_WeaponEquip1` | 🔴 Not-Set | | | -| `OP_WearChange` | 🟡 Unverified | | | -| `OP_Weather` | 🟡 Unverified | | | -| `OP_Weblink` | 🟡 Unverified | | | -| `OP_WhoAllRequest` | 🟡 Unverified | | | -| `OP_WhoAllResponse` | 🟡 Unverified | | | -| `OP_World_Client_CRC1` | 🟡 Unverified | | | -| `OP_World_Client_CRC2` | 🟡 Unverified | | | -| `OP_World_Client_CRC3` | 🟡 Unverified | | | -| `OP_WorldClientReady` | 🟡 Unverified | | | -| `OP_WorldComplete` | 🟡 Unverified | | | -| `OP_WorldLogout` | 🔴 Not-Set | | | -| `OP_WorldObjectsSent` | 🟡 Unverified | | | -| `OP_WorldUnknown001` | 🟡 Unverified | | | -| `OP_XTargetAutoAddHaters` | 🔴 Not-Set | | | -| `OP_XTargetOpen` | 🔴 Not-Set | | | -| `OP_XTargetOpenResponse` | 🔴 Not-Set | | | -| `OP_XTargetRequest` | 🔴 Not-Set | | | -| `OP_XTargetResponse` | 🔴 Not-Set | | | -| `OP_YellForHelp` | 🟡 Unverified | | | -| `OP_ZoneChange` | 🟡 Unverified | | | -| `OP_ZoneComplete` | 🔴 Not-Set | | | -| `OP_ZoneEntry` | 🟢 Verified | | | -| `OP_ZoneGuildList` | 🔴 Not-Set | | | -| `OP_ZoneInUnknown` | 🔴 Not-Set | | | -| `OP_ZonePlayerToBind` | 🟡 Unverified | | | -| `OP_ZoneServerInfo` | 🟢 Verified | | | -| `OP_ZoneServerReady` | 🔴 Not-Set | | | -| `OP_ZoneSpawns` | 🟢 Verified | | | -| `OP_ZoneUnavail` | 🟡 Unverified | | | -| `OP_ResetAA` | 🟡 Unverified | | | -| `OP_UnderWorld` | 🟡 Unverified | | | +| Opcode | Status | Notes | Working On | +|:----------------------------------|:--------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------| +| `OP_AAAction` | 🟡 Unverified | | | +| `OP_AAExpUpdate` | 🟡 Unverified | | | +| `OP_AcceptNewTask` | 🔴 Not-Set | | | +| `OP_AckPacket` | 🟢 Verified | | | +| `OP_Action` | 🟡 Unverified | | | +| `OP_Action2` | 🔴 Not-Set | | | +| `OP_AddNimbusEffect` | 🟡 Unverified | | | +| `OP_AdventureData` | 🔴 Not-Set | | | +| `OP_AdventureDetails` | 🔴 Not-Set | | | +| `OP_AdventureFinish` | 🔴 Not-Set | | | +| `OP_AdventureInfo` | 🔴 Not-Set | | | +| `OP_AdventureInfoRequest` | 🔴 Not-Set | | | +| `OP_AdventureLeaderboardReply` | 🔴 Not-Set | | | +| `OP_AdventureLeaderboardRequest` | 🔴 Not-Set | | | +| `OP_AdventureMerchantPurchase` | 🔴 Not-Set | | | +| `OP_AdventureMerchantRequest` | 🔴 Not-Set | | | +| `OP_AdventureMerchantResponse` | 🔴 Not-Set | | | +| `OP_AdventureMerchantSell` | 🔴 Not-Set | | | +| `OP_AdventurePointsUpdate` | 🔴 Not-Set | | | +| `OP_AdventureRequest` | 🔴 Not-Set | | | +| `OP_AdventureStatsReply` | 🔴 Not-Set | | | +| `OP_AdventureStatsRequest` | 🔴 Not-Set | | | +| `OP_AdventureUpdate` | 🔴 Not-Set | | | +| `OP_AggroMeterLockTarget` | 🔴 Not-Set | | | +| `OP_AggroMeterTargetInfo` | 🔴 Not-Set | | | +| `OP_AggroMeterUpdate` | 🔴 Not-Set | | | +| `OP_AltCurrency` | 🔴 Not-Set | | | +| `OP_AltCurrencyMerchantReply` | 🔴 Not-Set | | | +| `OP_AltCurrencyMerchantRequest` | 🔴 Not-Set | | | +| `OP_AltCurrencyPurchase` | 🔴 Not-Set | | | +| `OP_AltCurrencyReclaim` | 🔴 Not-Set | | | +| `OP_AltCurrencySell` | 🔴 Not-Set | | | +| `OP_AltCurrencySellSelection` | 🔴 Not-Set | | | +| `OP_Animation` | 🟡 Unverified | | | +| `OP_AnnoyingZoneUnknown` | 🔴 Not-Set | | | +| `OP_ApplyPoison` | 🟡 Unverified | | | +| `OP_ApproveName` | 🟡 Unverified | This takes multiple parameters from the client, and it can take multiple integer values from the server | | +| `OP_ApproveWorld` | 🔴 Not-Set | | | +| `OP_ApproveZone` | 🔴 Not-Set | | | +| `OP_Assist` | 🟡 Unverified | | | +| `OP_AssistGroup` | 🟡 Unverified | | | +| `OP_AugmentInfo` | 🟡 Unverified | | | +| `OP_AugmentItem` | 🟡 Unverified | | | +| `OP_AutoAttack` | 🟡 Unverified | | | +| `OP_AutoAttack2` | 🟡 Unverified | | | +| `OP_AutoFire` | 🟡 Unverified | | | +| `OP_Bandolier` | 🔴 Not-Set | | | +| `OP_BankerChange` | 🟡 Unverified | | | +| `OP_Barter` | 🔴 Not-Set | | | +| `OP_Bazaar` | 🔴 Not-Set | | | +| `OP_BazaarInspect` | 🔴 Not-Set | | | +| `OP_BazaarSearch` | 🔴 Not-Set | | | +| `OP_BecomeCorpse` | 🔴 Not-Set | | | +| `OP_BecomeTrader` | 🔴 Not-Set | | | +| `OP_Begging` | 🟡 Unverified | | | +| `OP_BeginCast` | 🟡 Unverified | | | +| `OP_Bind_Wound` | 🟡 Unverified | | | +| `OP_BlockedBuffs` | 🟡 Unverified | | | +| `OP_BoardBoat` | 🟡 Unverified | | | +| `OP_BookButton` | 🟡 Unverified | | | +| `OP_Buff` | 🟡 Unverified | | | +| `OP_BuffCreate` | 🟡 Unverified | | | +| `OP_BuffRemoveRequest` | 🟡 Unverified | | | +| `OP_Bug` | 🟡 Unverified | | | +| `OP_BuyerItems` | 🔴 Not-Set | | | +| `OP_CameraEffect` | 🟡 Unverified | | | +| `OP_Camp` | 🟡 Unverified | | | +| `OP_CancelSneakHide` | 🟡 Unverified | | | +| `OP_CancelTask` | 🔴 Not-Set | | | +| `OP_CancelTrade` | 🟡 Unverified | | | +| `OP_CashReward` | 🟡 Unverified | | | +| `OP_CastSpell` | 🟡 Unverified | | | +| `OP_ChangeSize` | 🟡 Unverified | | | +| `OP_ChannelMessage` | 🟡 Unverified | | | +| `OP_ChangePetName` | 🔴 Not-Set | | | +| `OP_CharacterCreate` | 🟢 Verified | Sends heroic type, can be used for something? | | +| `OP_CharacterCreateRequest` | 🟢 Verified | | | +| `OP_CharInventory` | 🟡 Unverified | | | +| `OP_Charm` | 🟡 Unverified | | | +| `OP_ChatMessage` | 🔴 Not-Set | | | +| `OP_ClearAA` | 🟡 Unverified | | | +| `OP_ClearBlockedBuffs` | 🟡 Unverified | | | +| `OP_ClearLeadershipAbilities` | 🔴 Not-Set | | | +| `OP_ClearNPCMarks` | 🔴 Not-Set | | | +| `OP_ClearObject` | 🟡 Unverified | | | +| `OP_ClearSurname` | 🔴 Not-Set | | | +| `OP_ClickDoor` | 🟡 Unverified | | | +| `OP_ClickObject` | 🟡 Unverified | | | +| `OP_ClickObjectAction` | 🟡 Unverified | | | +| `OP_ClientError` | 🔴 Not-Set | | | +| `OP_ClientReady` | 🟡 Unverified | | | +| `OP_ClientTimeStamp` | 🔴 Not-Set | | | +| `OP_ClientUpdate` | 🟡 Unverified | | | +| `OP_CloseContainer` | 🔴 Not-Set | | | +| `OP_CloseTributeMaster` | 🔴 Not-Set | | | +| `OP_ColoredText` | 🟡 Unverified | | | +| `OP_CombatAbility` | 🟡 Unverified | | | +| `OP_Command` | 🔴 Not-Set | | | +| `OP_CompletedTasks` | 🔴 Not-Set | | | +| `OP_ConfirmDelete` | 🟡 Unverified | | | +| `OP_Consent` | 🟡 Unverified | | | +| `OP_ConsentDeny` | 🟡 Unverified | | | +| `OP_ConsentResponse` | 🟡 Unverified | | | +| `OP_Consider` | 🟡 Unverified | | | +| `OP_ConsiderCorpse` | 🟡 Unverified | | | +| `OP_Consume` | 🟡 Unverified | | | +| `OP_ControlBoat` | 🟡 Unverified | | | +| `OP_CorpseDrag` | 🟡 Unverified | | | +| `OP_CorpseDrop` | 🟡 Unverified | | | +| `OP_CrashDump` | 🔴 Not-Set | | | +| `OP_CrystalCountUpdate` | 🔴 Not-Set | | | +| `OP_CrystalCreate` | 🔴 Not-Set | | | +| `OP_CrystalReclaim` | 🔴 Not-Set | | | +| `OP_CustomTitles` | 🔴 Not-Set | | | +| `OP_Damage` | 🟡 Unverified | | | +| `OP_Death` | 🟡 Unverified | | | +| `OP_DelegateAbility` | 🔴 Not-Set | | | +| `OP_DeleteCharacter` | 🟢 Verified | | | +| `OP_DeleteCharge` | 🟡 Unverified | | | +| `OP_DeleteItem` | 🟡 Unverified | | | +| `OP_DeletePetition` | 🔴 Not-Set | | | +| `OP_DeleteSpawn` | 🟡 Unverified | | | +| `OP_DeleteSpell` | 🟡 Unverified | | | +| `OP_DenyResponse` | 🟡 Unverified | | | +| `OP_Disarm` | 🟡 Unverified | | | +| `OP_DisarmTraps` | 🟡 Unverified | | | +| `OP_DisciplineTimer` | 🟡 Unverified | | | +| `OP_DisciplineUpdate` | 🟡 Unverified | | | +| `OP_DiscordMerchantInventory` | 🔴 Not-Set | | | +| `OP_DoGroupLeadershipAbility` | 🔴 Not-Set | | | +| `OP_DuelDecline` | 🔴 Not-Set | | | +| `OP_DuelAccept` | 🔴 Not-Set | | | +| `OP_DumpName` | 🔴 Not-Set | | | +| `OP_Dye` | 🔴 Not-Set | | | +| `OP_DynamicWall` | 🔴 Not-Set | | | +| `OP_DzAddPlayer` | 🔴 Not-Set | | | +| `OP_DzChooseZone` | 🔴 Not-Set | | | +| `OP_DzChooseZoneReply` | 🔴 Not-Set | | | +| `OP_DzCompass` | 🔴 Not-Set | | | +| `OP_DzExpeditionEndsWarning` | 🔴 Not-Set | | | +| `OP_DzExpeditionInfo` | 🔴 Not-Set | | | +| `OP_DzExpeditionInvite` | 🔴 Not-Set | | | +| `OP_DzExpeditionInviteResponse` | 🔴 Not-Set | | | +| `OP_DzExpeditionLockoutTimers` | 🔴 Not-Set | | | +| `OP_DzListTimers` | 🔴 Not-Set | | | +| `OP_DzMakeLeader` | 🔴 Not-Set | | | +| `OP_DzMemberList` | 🔴 Not-Set | | | +| `OP_DzMemberListName` | 🔴 Not-Set | | | +| `OP_DzMemberListStatus` | 🔴 Not-Set | | | +| `OP_DzPlayerList` | 🔴 Not-Set | | | +| `OP_DzQuit` | 🔴 Not-Set | | | +| `OP_DzRemovePlayer` | 🔴 Not-Set | | | +| `OP_DzSetLeaderName` | 🔴 Not-Set | | | +| `OP_DzSwapPlayer` | 🔴 Not-Set | | | +| `OP_Emote` | 🔴 Not-Set | | | +| `OP_EndLootRequest` | 🟡 Unverified | | | +| `OP_EnduranceUpdate` | 🔴 Not-Set | | | +| `OP_EnterChat` | 🔴 Not-Set | | | +| `OP_EnterWorld` | 🟢 Verified | | | +| `OP_EnvDamage` | 🟡 Unverified | | | +| `OP_EvolveItem` | 🔴 Not-Set | | | +| `OP_ExpansionInfo` | 🟢 Verified | Updated from u32 to u64 and works now | | +| `OP_ExpUpdate` | 🟡 Unverified | | | +| `OP_FaceChange` | 🔴 Not-Set | | | +| `OP_Feedback` | 🔴 Not-Set | | | +| `OP_FeignDeath` | 🟡 Unverified | | | +| `OP_FellowshipUpdate` | 🔴 Not-Set | | | +| `OP_FindPersonReply` | 🔴 Not-Set | | | +| `OP_FindPersonRequest` | 🔴 Not-Set | | | +| `OP_FinishTrade` | 🟡 Unverified | | | +| `OP_FinishWindow` | 🟡 Unverified | | | +| `OP_FinishWindow2` | 🟡 Unverified | | | +| `OP_Fishing` | 🟡 Unverified | | | +| `OP_Fling` | 🟡 Unverified | | | +| `OP_FloatListThing` | 🟢 Verified | Movement History. Sent from client, but emu doesn't use it so setting it as varified. Reference is 0x1402FFAD0 | | +| `OP_Forage` | 🟡 Unverified | | | +| `OP_ForceFindPerson` | 🔴 Not-Set | | | +| `OP_FormattedMessage` | 🟡 Unverified | | | +| `OP_FriendsWho` | 🟡 Unverified | | | +| `OP_GetGuildMOTD` | 🔴 Not-Set | | | +| `OP_GetGuildMOTDReply` | 🔴 Not-Set | | | +| `OP_GetGuildsList` | 🔴 Not-Set | | | +| `OP_GiveMoney` | 🔴 Not-Set | | | +| `OP_GMApproval` | 🔴 Not-Set | | | +| `OP_GMBecomeNPC` | 🔴 Not-Set | | | +| `OP_GMDelCorpse` | 🔴 Not-Set | | | +| `OP_GMEmoteZone` | 🔴 Not-Set | | | +| `OP_GMEndTraining` | 🟡 Unverified | | | +| `OP_GMEndTrainingResponse` | 🔴 Not-Set | | | +| `OP_GMFind` | 🔴 Not-Set | | | +| `OP_GMGoto` | 🔴 Not-Set | | | +| `OP_GMHideMe` | 🔴 Not-Set | | | +| `OP_GMKick` | 🔴 Not-Set | | | +| `OP_GMKill` | 🔴 Not-Set | | | +| `OP_GMLastName` | 🔴 Not-Set | | | +| `OP_GMNameChange` | 🔴 Not-Set | | | +| `OP_GMSearchCorpse` | 🔴 Not-Set | | | +| `OP_GMServers` | 🔴 Not-Set | | | +| `OP_GMSummon` | 🔴 Not-Set | | | +| `OP_GMToggle` | 🔴 Not-Set | | | +| `OP_GMTraining` | 🟡 Unverified | | | +| `OP_GMTrainSkill` | 🟡 Unverified | | | +| `OP_GMTrainSkillConfirm` | 🟡 Unverified | | | +| `OP_GMZoneRequest` | 🔴 Not-Set | | | +| `OP_GMZoneRequest2` | 🔴 Not-Set | | | +| `OP_GroundSpawn` | 🟡 Unverified | | | +| `OP_GroupAcknowledge` | 🔴 Not-Set | | | +| `OP_GroupCancelInvite` | 🔴 Not-Set | | | +| `OP_GroupDelete` | 🔴 Not-Set | | | +| `OP_GroupDisband` | 🟡 Unverified | | | +| `OP_GroupDisbandOther` | 🔴 Not-Set | | | +| `OP_GroupDisbandYou` | 🔴 Not-Set | | | +| `OP_GroupFollow` | 🔴 Not-Set | | | +| `OP_GroupFollow2` | 🔴 Not-Set | | | +| `OP_GroupInvite` | 🟡 Unverified | | | +| `OP_GroupInvite2` | 🔴 Not-Set | | | +| `OP_GroupLeaderChange` | 🔴 Not-Set | | | +| `OP_GroupLeadershipAAUpdate` | 🔴 Not-Set | | | +| `OP_GroupMakeLeader` | 🔴 Not-Set | | | +| `OP_GroupMentor` | 🔴 Not-Set | | | +| `OP_GroupRoles` | 🔴 Not-Set | | | +| `OP_GroupUpdate` | 🔴 Not-Set | | | +| `OP_GroupUpdateB` | 🔴 Not-Set | | | +| `OP_GroupUpdateLeaderAA` | 🔴 Not-Set | | | +| `OP_GuildBank` | 🔴 Not-Set | | | +| `OP_GuildBankItemList` | 🔴 Not-Set | | | +| `OP_GuildCreate` | 🔴 Not-Set | | | +| `OP_GuildDelete` | 🔴 Not-Set | | | +| `OP_GuildDeleteGuild` | 🔴 Not-Set | | | +| `OP_GuildDemote` | 🔴 Not-Set | | | +| `OP_GuildInvite` | 🔴 Not-Set | | | +| `OP_GuildInviteAccept` | 🔴 Not-Set | | | +| `OP_GuildLeader` | 🔴 Not-Set | | | +| `OP_GuildManageAdd` | 🔴 Not-Set | | | +| `OP_GuildManageBanker` | 🔴 Not-Set | | | +| `OP_GuildManageRemove` | 🔴 Not-Set | | | +| `OP_GuildManageStatus` | 🔴 Not-Set | | | +| `OP_GuildMemberLevelUpdate` | 🔴 Not-Set | | | +| `OP_GuildMemberList` | 🔴 Not-Set | | | +| `OP_GuildMemberUpdate` | 🔴 Not-Set | | | +| `OP_GuildMemberLevel` | 🔴 Not-Set | | | +| `OP_GuildMemberRankAltBanker` | 🔴 Not-Set | | | +| `OP_GuildMemberPublicNote` | 🔴 Not-Set | | | +| `OP_GuildMemberAdd` | 🔴 Not-Set | | | +| `OP_GuildMemberRename` | 🔴 Not-Set | | | +| `OP_GuildMemberDelete` | 🔴 Not-Set | | | +| `OP_GuildMemberDetails` | 🔴 Not-Set | | | +| `OP_GuildRenameGuild` | 🔴 Not-Set | | | +| `OP_GuildMOTD` | 🔴 Not-Set | | | +| `OP_GuildPeace` | 🔴 Not-Set | | | +| `OP_GuildPromote` | 🔴 Not-Set | | | +| `OP_GuildPublicNote` | 🔴 Not-Set | | | +| `OP_GuildRemove` | 🔴 Not-Set | | | +| `OP_GuildSelectTribute` | 🔴 Not-Set | | | +| `OP_GuildModifyBenefits` | 🔴 Not-Set | | | +| `OP_GuildTributeToggleReq` | 🔴 Not-Set | | | +| `OP_GuildTributeToggleReply` | 🔴 Not-Set | | | +| `OP_GuildOptInOut` | 🔴 Not-Set | | | +| `OP_GuildSaveActiveTributes` | 🔴 Not-Set | | | +| `OP_GuildSendActiveTributes` | 🔴 Not-Set | | | +| `OP_GuildTributeFavorAndTimer` | 🔴 Not-Set | | | +| `OP_GuildsList` | 🔴 Not-Set | | | +| `OP_GuildStatus` | 🔴 Not-Set | | | +| `OP_GuildTributeInfo` | 🔴 Not-Set | | | +| `OP_GuildUpdate` | 🔴 Not-Set | | | +| `OP_GuildTributeDonateItem` | 🔴 Not-Set | | | +| `OP_GuildTributeDonatePlat` | 🔴 Not-Set | | | +| `OP_GuildWar` | 🔴 Not-Set | | | +| `OP_Heartbeat` | 🔴 Not-Set | | | +| `OP_Hide` | 🟡 Unverified | | | +| `OP_HideCorpse` | 🟡 Unverified | | | +| `OP_HPUpdate` | 🟡 Unverified | | | +| `OP_Illusion` | 🟡 Unverified | | | +| `OP_IncreaseStats` | 🟡 Unverified | | | +| `OP_InitialHPUpdate` | 🔴 Not-Set | | | +| `OP_InitialMobHealth` | 🔴 Not-Set | | | +| `OP_InspectAnswer` | 🔴 Not-Set | | | +| `OP_InspectBuffs` | 🔴 Not-Set | | | +| `OP_InspectMessageUpdate` | 🔴 Not-Set | | | +| `OP_InspectRequest` | 🔴 Not-Set | | | +| `OP_InstillDoubt` | 🟡 Unverified | | | +| `OP_InterruptCast` | 🟡 Unverified | | | +| `OP_InvokeChangePetName` | 🔴 Not-Set | | | +| `OP_InvokeChangePetNameImmediate` | 🔴 Not-Set | | | +| `OP_InvokeNameChangeImmediate` | 🔴 Not-Set | | | +| `OP_InvokeNameChangeLazy` | 🔴 Not-Set | | | +| `OP_ItemLinkClick` | 🔴 Not-Set | | | +| `OP_ItemLinkResponse` | 🔴 Not-Set | | | +| `OP_ItemLinkText` | 🔴 Not-Set | | | +| `OP_ItemName` | 🔴 Not-Set | | | +| `OP_ItemPacket` | 🟡 Unverified | | | +| `OP_ItemPreview` | 🔴 Not-Set | | | +| `OP_ItemPreviewRequest` | 🔴 Not-Set | | | +| `OP_ItemRecastDelay` | 🟡 Unverified | | | +| `OP_ItemVerifyReply` | 🟡 Unverified | | | +| `OP_ItemVerifyRequest` | 🟡 Unverified | | | +| `OP_ItemViewUnknown` | 🔴 Not-Set | | | +| `OP_Jump` | 🟡 Unverified | | | +| `OP_KeyRing` | 🔴 Not-Set | | | +| `OP_KickPlayers` | 🟡 Unverified | | | +| `OP_KnowledgeBase` | 🔴 Not-Set | | | +| `OP_LDoNButton` | 🔴 Not-Set | | | +| `OP_LDoNDisarmTraps` | 🔴 Not-Set | | | +| `OP_LDoNInspect` | 🔴 Not-Set | | | +| `OP_LDoNOpen` | 🟡 Unverified | | | +| `OP_LDoNPickLock` | 🟡 Unverified | | | +| `OP_LDoNSenseTraps` | 🟡 Unverified | | | +| `OP_LeadershipExpToggle` | 🔴 Not-Set | | | +| `OP_LeadershipExpUpdate` | 🔴 Not-Set | | | +| `OP_LeaveAdventure` | 🔴 Not-Set | | | +| `OP_LeaveBoat` | 🟡 Unverified | | | +| `OP_LevelAppearance` | 🟡 Unverified | | | +| `OP_LevelUpdate` | 🟢 Verified | | | +| `OP_LFGAppearance` | 🔴 Not-Set | | | +| `OP_LFGCommand` | 🔴 Not-Set | | | +| `OP_LFGGetMatchesRequest` | 🔴 Not-Set | | | +| `OP_LFGGetMatchesResponse` | 🔴 Not-Set | | | +| `OP_LFGResponse` | 🔴 Not-Set | | | +| `OP_LFGuild` | 🔴 Not-Set | | | +| `OP_LFPCommand` | 🔴 Not-Set | | | +| `OP_LFPGetMatchesRequest` | 🔴 Not-Set | | | +| `OP_LFPGetMatchesResponse` | 🔴 Not-Set | | | +| `OP_LinkedReuse` | 🟡 Unverified | | | +| `OP_LoadSpellSet` | 🔴 Not-Set | | | +| `OP_LocInfo` | 🔴 Not-Set | | | +| `OP_LockoutTimerInfo` | 🔴 Not-Set | | | +| `OP_Login` | 🔴 Not-Set | | | +| `OP_LoginAccepted` | 🔴 Not-Set | | | +| `OP_LoginComplete` | 🔴 Not-Set | | | +| `OP_LoginExpansionPacketData` | 🔴 Not-Set | | | +| `OP_LoginUnknown1` | 🔴 Not-Set | | | +| `OP_LoginUnknown2` | 🔴 Not-Set | | | +| `OP_Logout` | 🟡 Unverified | | | +| `OP_LogoutReply` | 🔴 Not-Set | | | +| `OP_LogServer` | 🟢 Verified | Mostly unused values | | +| `OP_LootComplete` | 🟡 Unverified | | | +| `OP_LootItem` | 🟡 Unverified | | | +| `OP_LootRequest` | 🟡 Unverified | | | +| `OP_ManaChange` | 🟡 Unverified | | | +| `OP_ManaUpdate` | 🔴 Not-Set | | | +| `OP_MarkNPC` | 🔴 Not-Set | | | +| `OP_MarkRaidNPC` | 🔴 Not-Set | | | +| `OP_Marquee` | 🟡 Unverified | | | +| `OP_MemorizeSpell` | 🟡 Unverified | | | +| `OP_Mend` | 🟡 Unverified | | | +| `OP_MendHPUpdate` | 🔴 Not-Set | | | +| `OP_MercenaryAssign` | 🔴 Not-Set | | | +| `OP_MercenaryCommand` | 🔴 Not-Set | | | +| `OP_MercenaryDataRequest` | 🔴 Not-Set | | | +| `OP_MercenaryDataResponse` | 🔴 Not-Set | | | +| `OP_MercenaryDataUpdate` | 🔴 Not-Set | | | +| `OP_MercenaryDataUpdateRequest` | 🔴 Not-Set | | | +| `OP_MercenaryDismiss` | 🔴 Not-Set | | | +| `OP_MercenaryHire` | 🔴 Not-Set | | | +| `OP_MercenarySuspendRequest` | 🔴 Not-Set | | | +| `OP_MercenarySuspendResponse` | 🔴 Not-Set | | | +| `OP_MercenaryTimer` | 🔴 Not-Set | | | +| `OP_MercenaryTimerRequest` | 🔴 Not-Set | | | +| `OP_MercenaryUnknown1` | 🔴 Not-Set | | | +| `OP_MercenaryUnsuspendResponse` | 🔴 Not-Set | | | +| `OP_MerchantBulkItems` | 🔴 Not-Set | | | +| `OP_MobEnduranceUpdate` | 🔴 Not-Set | | | +| `OP_MobHealth` | 🟡 Unverified | | | +| `OP_MobManaUpdate` | 🔴 Not-Set | | | +| `OP_MobRename` | 🔴 Not-Set | | | +| `OP_MobUpdate` | 🔴 Not-Set | | | +| `OP_MoneyOnCorpse` | 🟡 Unverified | | | +| `OP_MoneyUpdate` | 🟡 Unverified | | | +| `OP_MOTD` | 🟢 Verified | | | +| `OP_MoveCoin` | 🟡 Unverified | | | +| `OP_MoveDoor` | 🟡 Unverified | | | +| `OP_MoveItem` | 🟡 Unverified | | | +| `OP_MoveMultipleItems` | 🟡 Unverified | | | +| `OP_MoveLogDisregard` | 🔴 Not-Set | | | +| `OP_MoveLogRequest` | 🔴 Not-Set | | | +| `OP_MultiLineMsg` | 🔴 Not-Set | | | +| `OP_NewSpawn` | 🟢 Verified | Deprecated in the client, already handled in emu | | +| `OP_NewTitlesAvailable` | 🔴 Not-Set | | | +| `OP_NewZone` | 🟢 Verified | | | +| `OP_NPCMoveUpdate` | 🔴 Not-Set | | | +| `OP_OnLevelMessage` | 🟡 Unverified | | | +| `OP_OpenContainer` | 🟡 Unverified | | | +| `OP_OpenDiscordMerchant` | 🔴 Not-Set | | | +| `OP_OpenGuildTributeMaster` | 🔴 Not-Set | | | +| `OP_OpenInventory` | 🔴 Not-Set | | | +| `OP_OpenTributeMaster` | 🔴 Not-Set | | | +| `OP_PDeletePetition` | 🔴 Not-Set | | | +| `OP_PetBuffWindow` | 🔴 Not-Set | | | +| `OP_PetCommands` | 🔴 Not-Set | | | +| `OP_PetCommandState` | 🔴 Not-Set | | | +| `OP_PetHoTT` | 🔴 Not-Set | | | +| `OP_Petition` | 🔴 Not-Set | | | +| `OP_PetitionBug` | 🔴 Not-Set | | | +| `OP_PetitionCheckIn` | 🔴 Not-Set | | | +| `OP_PetitionCheckout` | 🔴 Not-Set | | | +| `OP_PetitionCheckout2` | 🔴 Not-Set | | | +| `OP_PetitionDelete` | 🔴 Not-Set | | | +| `OP_PetitionQue` | 🔴 Not-Set | | | +| `OP_PetitionRefresh` | 🔴 Not-Set | | | +| `OP_PetitionResolve` | 🔴 Not-Set | | | +| `OP_PetitionSearch` | 🔴 Not-Set | | | +| `OP_PetitionSearchResults` | 🔴 Not-Set | | | +| `OP_PetitionSearchText` | 🔴 Not-Set | | | +| `OP_PetitionUnCheckout` | 🔴 Not-Set | | | +| `OP_PetitionUpdate` | 🔴 Not-Set | | | +| `OP_PickPocket` | 🟡 Unverified | | | +| `OP_PickZone` | 🔴 Not-Set | | | +| `OP_PickZoneWindow` | 🔴 Not-Set | | | +| `OP_PlayerProfile` | 🟢 Verified | | | +| `OP_PlayerStateAdd` | 🟡 Unverified | | | +| `OP_PlayerStateRemove` | 🟡 Unverified | | | +| `OP_PlayEverquestRequest` | 🔴 Not-Set | | | +| `OP_PlayEverquestResponse` | 🔴 Not-Set | | | +| `OP_PlayMP3` | 🟡 Unverified | | | +| `OP_Poll` | 🔴 Not-Set | | | +| `OP_PollResponse` | 🔴 Not-Set | | | +| `OP_PopupResponse` | 🟡 Unverified | | | +| `OP_PostEnterWorld` | 🟢 Verified | | | +| `OP_PotionBelt` | 🔴 Not-Set | | | +| `OP_PreLogoutReply` | 🔴 Not-Set | | | +| `OP_PurchaseLeadershipAA` | 🔴 Not-Set | | | +| `OP_PVPLeaderBoardDetailsReply` | 🔴 Not-Set | | | +| `OP_PVPLeaderBoardDetailsRequest` | 🔴 Not-Set | | | +| `OP_PVPLeaderBoardReply` | 🔴 Not-Set | | | +| `OP_PVPLeaderBoardRequest` | 🔴 Not-Set | | | +| `OP_PVPStats` | 🔴 Not-Set | | | +| `OP_QueryResponseThing` | 🔴 Not-Set | | | +| `OP_QueryUCSServerStatus` | 🟡 Unverified | | | +| `OP_RaidDelegateAbility` | 🔴 Not-Set | | | +| `OP_RaidClearNPCMarks` | 🔴 Not-Set | | | +| `OP_RaidInvite` | 🔴 Not-Set | | | +| `OP_RaidJoin` | 🔴 Not-Set | | | +| `OP_RaidUpdate` | 🔴 Not-Set | | | +| `OP_RandomNameGenerator` | 🟢 Verified | The client no longer sends this packet (random name generation is done entirely in the client). The client will still accept this packet to set name (emu doesn't do this, but it's always been supported) | | +| `OP_RandomReply` | 🟡 Unverified | | | +| `OP_RandomReq` | 🟡 Unverified | | | +| `OP_ReadBook` | 🟡 Unverified | | | +| `OP_RecipeAutoCombine` | 🟡 Unverified | | | +| `OP_RecipeDetails` | 🟡 Unverified | | | +| `OP_RecipeReply` | 🟡 Unverified | | | +| `OP_RecipesFavorite` | 🟡 Unverified | | | +| `OP_RecipesSearch` | 🟡 Unverified | | | +| `OP_ReclaimCrystals` | 🔴 Not-Set | | | +| `OP_ReloadUI` | 🔴 Not-Set | | | +| `OP_RemoveAllDoors` | 🟡 Unverified | | | +| `OP_RemoveBlockedBuffs` | 🟡 Unverified | | | +| `OP_RemoveNimbusEffect` | 🟡 Unverified | | | +| `OP_RemoveTrap` | 🔴 Not-Set | | | +| `OP_Report` | 🟡 Unverified | | | +| `OP_ReqClientSpawn` | 🟢 Verified | | | +| `OP_ReqNewZone` | 🟢 Verified | Client does not send this (in LS or TOB), but it does receive it. emu does not send it | | +| `OP_RequestClientZoneChange` | 🟢 Verified | parity with RoF2, there's a string that gets passed to teleport at the end that's not known | | +| `OP_RequestDuel` | 🔴 Not-Set | | | +| `OP_RequestGuildTributes` | 🔴 Not-Set | | | +| `OP_RequestKnowledgeBase` | 🔴 Not-Set | | | +| `OP_RequestTitles` | 🔴 Not-Set | | | +| `OP_RespawnWindow` | 🟡 Unverified | | | +| `OP_RespondAA` | 🟡 Unverified | | | +| `OP_RestState` | 🟡 Unverified | | | +| `OP_Rewind` | 🟡 Unverified | | | +| `OP_RezzAnswer` | 🔴 Not-Set | | | +| `OP_RezzComplete` | 🔴 Not-Set | | | +| `OP_RezzRequest` | 🔴 Not-Set | | | +| `OP_Sacrifice` | 🟡 Unverified | | | +| `OP_SafeFallSuccess` | 🟡 Unverified | | | +| `OP_SafePoint` | 🔴 Not-Set | | | +| `OP_Save` | 🟡 Unverified | | | +| `OP_SaveOnZoneReq` | 🟡 Unverified | | | +| `OP_SelectTribute` | 🔴 Not-Set | | | +| `OP_SendAAStats` | 🟡 Unverified | | | +| `OP_SendAATable` | 🟡 Unverified | | | +| `OP_SendCharInfo` | 🟢 Verified | | | +| `OP_SendExpZonein` | 🟡 Unverified | | | +| `OP_SendFindableNPCs` | 🔴 Not-Set | | | +| `OP_SendGuildTributes` | 🔴 Not-Set | | | +| `OP_SendLoginInfo` | 🟢 Verified | | | +| `OP_SendMaxCharacters` | 🟢 Verified | | | +| `OP_SendMembership` | 🟢 Verified | | | +| `OP_SendMembershipDetails` | 🟢 Verified | The struct is correct, will need reversing for actual option keys/values | | +| `OP_SendSystemStats` | 🔴 Not-Set | | | +| `OP_SendTitleList` | 🔴 Not-Set | | | +| `OP_SendTributes` | 🔴 Not-Set | | | +| `OP_SendZonepoints` | 🟡 Unverified | | | +| `OP_SenseHeading` | 🟡 Unverified | | | +| `OP_SenseTraps` | 🟡 Unverified | | | +| `OP_ServerListRequest` | 🔴 Not-Set | | | +| `OP_ServerListResponse` | 🔴 Not-Set | | | +| `OP_SessionReady` | 🔴 Not-Set | | | +| `OP_SetChatServer` | 🔴 Not-Set | | | +| `OP_SetChatServer2` | 🟢 Verified | | | +| `OP_SetFace` | 🔴 Not-Set | | | +| `OP_SetGroupTarget` | 🔴 Not-Set | | | +| `OP_SetGuildMOTD` | 🔴 Not-Set | | | +| `OP_SetGuildRank` | 🔴 Not-Set | | | +| `OP_SetRunMode` | 🟡 Unverified | | | +| `OP_SetServerFilter` | 🟡 Unverified | | | +| `OP_SetStartCity` | 🔴 Not-Set | | | +| `OP_SetTitle` | 🔴 Not-Set | | | +| `OP_SetTitleReply` | 🔴 Not-Set | | | +| `OP_SharedTaskMemberList` | 🔴 Not-Set | | | +| `OP_SharedTaskAddPlayer` | 🔴 Not-Set | | | +| `OP_SharedTaskRemovePlayer` | 🔴 Not-Set | | | +| `OP_SharedTaskMakeLeader` | 🔴 Not-Set | | | +| `OP_SharedTaskMemberInvite` | 🔴 Not-Set | | | +| `OP_SharedTaskInvite` | 🔴 Not-Set | | | +| `OP_SharedTaskInviteResponse` | 🔴 Not-Set | | | +| `OP_SharedTaskAcceptNew` | 🔴 Not-Set | | | +| `OP_SharedTaskMemberChange` | 🔴 Not-Set | | | +| `OP_SharedTaskPlayerList` | 🔴 Not-Set | | | +| `OP_SharedTaskSelectWindow` | 🔴 Not-Set | | | +| `OP_SharedTaskQuit` | 🔴 Not-Set | | | +| `OP_TaskTimers` | 🔴 Not-Set | | | +| `OP_Shielding` | 🔴 Not-Set | | | +| `OP_ShopDelItem` | 🟡 Unverified | | | +| `OP_ShopEnd` | 🟡 Unverified | | | +| `OP_ShopEndConfirm` | 🟡 Unverified | | | +| `OP_ShopItem` | 🔴 Not-Set | | | +| `OP_ShopPlayerBuy` | 🟡 Unverified | | | +| `OP_ShopPlayerSell` | 🟡 Unverified | | | +| `OP_ShopSendParcel` | 🟡 Unverified | | | +| `OP_ShopDeleteParcel` | 🟡 Unverified | | | +| `OP_ShopRespondParcel` | 🔴 Not-Set | | | +| `OP_ShopRetrieveParcel` | 🟡 Unverified | | | +| `OP_ShopParcelIcon` | 🟡 Unverified | | | +| `OP_ShopRequest` | 🟡 Unverified | | | +| `OP_SimpleMessage` | 🟡 Unverified | | | +| `OP_SkillUpdate` | 🟡 Unverified | | | +| `OP_Sneak` | 🟡 Unverified | | | +| `OP_Some3ByteHPUpdate` | 🔴 Not-Set | | | +| `OP_Some6ByteHPUpdate` | 🔴 Not-Set | | | +| `OP_SomeItemPacketMaybe` | 🔴 Not-Set | | | +| `OP_Sound` | 🟡 Unverified | | | +| `OP_SpawnAppearance` | 🟡 Unverified | | | +| `OP_SpawnDoor` | 🟡 Unverified | | | +| `OP_SpawnPositionUpdate` | 🔴 Not-Set | | | +| `OP_SpecialMesg` | 🟡 Unverified | | | +| `OP_SpellEffect` | 🟡 Unverified | | | +| `OP_Split` | 🟡 Unverified | | | +| `OP_Stamina` | 🟢 Verified | These values are 0-32k instead of 0-127 | | +| `OP_Stun` | 🟡 Unverified | | | +| `OP_Surname` | 🔴 Not-Set | | | +| `OP_SwapSpell` | 🟡 Unverified | | | +| `OP_SystemFingerprint` | 🔴 Not-Set | | | +| `OP_TargetBuffs` | 🔴 Not-Set | | | +| `OP_TargetCommand` | 🟡 Unverified | | | +| `OP_TargetHoTT` | 🔴 Not-Set | | | +| `OP_TargetMouse` | 🟡 Unverified | | | +| `OP_TargetReject` | 🔴 Not-Set | | | +| `OP_TaskActivity` | 🔴 Not-Set | | | +| `OP_TaskActivityComplete` | 🔴 Not-Set | | | +| `OP_TaskDescription` | 🔴 Not-Set | | | +| `OP_TaskHistoryReply` | 🔴 Not-Set | | | +| `OP_TaskHistoryRequest` | 🔴 Not-Set | | | +| `OP_TaskRequestTimer` | 🔴 Not-Set | | | +| `OP_TaskSelectWindow` | 🔴 Not-Set | | | +| `OP_Taunt` | 🟡 Unverified | | | +| `OP_TestBuff` | 🔴 Not-Set | | | +| `OP_TGB` | 🔴 Not-Set | | | +| `OP_TimeOfDay` | 🟢 Verified | | | +| `OP_Track` | 🟡 Unverified | | | +| `OP_TrackTarget` | 🟡 Unverified | | | +| `OP_TrackUnknown` | 🟡 Unverified | | | +| `OP_TradeAcceptClick` | 🟡 Unverified | | | +| `OP_TradeBusy` | 🟡 Unverified | | | +| `OP_TradeCoins` | 🟡 Unverified | | | +| `OP_TradeMoneyUpdate` | 🟡 Unverified | | | +| `OP_Trader` | 🔴 Not-Set | | | +| `OP_TraderBulkSend` | 🔴 Not-Set | | | +| `OP_TraderBuy` | 🔴 Not-Set | | | +| `OP_TraderDelItem` | 🔴 Not-Set | | | +| `OP_TradeRequest` | 🟡 Unverified | | | +| `OP_TradeRequestAck` | 🟡 Unverified | | | +| `OP_TraderItemUpdate` | 🔴 Not-Set | | | +| `OP_TraderShop` | 🔴 Not-Set | | | +| `OP_TradeSkillCombine` | 🟡 Unverified | | | +| `OP_TradeSkillRecipeInspect` | 🔴 Not-Set | | | +| `OP_Translocate` | 🟡 Unverified | | | +| `OP_TributeInfo` | 🔴 Not-Set | | | +| `OP_TributeItem` | 🔴 Not-Set | | | +| `OP_TributeMoney` | 🔴 Not-Set | | | +| `OP_TributeNPC` | 🔴 Not-Set | | | +| `OP_TributePointUpdate` | 🔴 Not-Set | | | +| `OP_TributeTimer` | 🔴 Not-Set | | | +| `OP_TributeToggle` | 🔴 Not-Set | | | +| `OP_TributeUpdate` | 🔴 Not-Set | | | +| `OP_Untargetable` | 🟡 Unverified | | | +| `OP_UpdateAA` | 🟡 Unverified | | | +| `OP_UpdateAura` | 🔴 Not-Set | | | +| `OP_UpdateLeadershipAA` | 🔴 Not-Set | | | +| `OP_VetClaimReply` | 🔴 Not-Set | | | +| `OP_VetClaimRequest` | 🔴 Not-Set | | | +| `OP_VetRewardsAvaliable` | 🔴 Not-Set | | | +| `OP_VoiceMacroIn` | 🟡 Unverified | | | +| `OP_VoiceMacroOut` | 🟡 Unverified | | | +| `OP_WeaponEquip1` | 🔴 Not-Set | | | +| `OP_WearChange` | 🟡 Unverified | | | +| `OP_Weather` | 🟡 Unverified | | | +| `OP_Weblink` | 🟡 Unverified | | | +| `OP_WhoAllRequest` | 🟡 Unverified | | | +| `OP_WhoAllResponse` | 🟡 Unverified | | | +| `OP_World_Client_CRC1` | 🟢 Verified | | | +| `OP_World_Client_CRC2` | 🟢 Verified | | | +| `OP_World_Client_CRC3` | 🟢 Verified | | | +| `OP_WorldClientReady` | 🟢 Verified | | | +| `OP_WorldComplete` | 🟢 Verified | | | +| `OP_WorldLogout` | 🔴 Not-Set | | | +| `OP_WorldObjectsSent` | 🟡 Unverified | | | +| `OP_WorldUnknown001` | 🟢 Verified | SetServerTime. emu doesn't currently send it so setting it to verified, but the reference is 0x140292550 | | +| `OP_XTargetAutoAddHaters` | 🔴 Not-Set | | | +| `OP_XTargetOpen` | 🔴 Not-Set | | | +| `OP_XTargetOpenResponse` | 🔴 Not-Set | | | +| `OP_XTargetRequest` | 🔴 Not-Set | | | +| `OP_XTargetResponse` | 🔴 Not-Set | | | +| `OP_YellForHelp` | 🟡 Unverified | | | +| `OP_ZoneChange` | 🟢 Verified | | | +| `OP_ZoneComplete` | 🔴 Not-Set | | | +| `OP_ZoneEntry` | 🟢 Verified | unknown fields in C->S struct are various CRCs, emu doesn't use them | | +| `OP_ZoneGuildList` | 🔴 Not-Set | | | +| `OP_ZoneInUnknown` | 🔴 Not-Set | | | +| `OP_ZonePlayerToBind` | 🟡 Unverified | | | +| `OP_ZoneServerInfo` | 🟢 Verified | | | +| `OP_ZoneServerReady` | 🔴 Not-Set | | | +| `OP_ZoneSpawns` | 🟢 Verified | This is deprecated in the client (and emu never sends it directly) | | +| `OP_ZoneUnavail` | 🟢 Verified | The client discards all content of this packet | | +| `OP_ResetAA` | 🟡 Unverified | | | +| `OP_UnderWorld` | 🟡 Unverified | | | diff --git a/utils/patches/patch_TOB.conf b/utils/patches/patch_TOB.conf index 819e7f835..3102e24a3 100644 --- a/utils/patches/patch_TOB.conf +++ b/utils/patches/patch_TOB.conf @@ -14,18 +14,18 @@ OP_ExploreUnknown=0x0000 # used for unknown explorer # world packets # Required to reach Char Select: -OP_SendLoginInfo=0x722A +OP_SendLoginInfo=0x722a OP_ApproveWorld=0x0000 OP_LogServer=0x2cae OP_SendCharInfo=0x5d1a OP_ExpansionInfo=0x393a OP_EnterWorld=0x7fb8 -OP_PostEnterWorld=0x1945 -OP_World_Client_CRC1=0x777f -OP_World_Client_CRC2=0x492 -OP_World_Client_CRC3=0x690 -OP_SendSpellChecksum=0x0000 -OP_SendSkillCapsChecksum=0x0000 +OP_PostEnterWorld=0x1945 # unused +OP_World_Client_CRC1=0x777f # This is OP_SendExeChecksum +OP_World_Client_CRC2=0x0492 # This is OP_SendBaseDataChecksum +OP_World_Client_CRC3=0x0690 # This is OP_SendSkillCapsChecksum +OP_SendSpellChecksum=0x0000 # There is no spell checksum in TOB +OP_SendSkillCapsChecksum=0x0690 # Character Select Related: OP_SendMaxCharacters=0x25eb @@ -34,15 +34,15 @@ OP_SendMembershipDetails=0x2373 OP_CharacterCreateRequest=0x6b67 OP_CharacterCreate=0x1859 OP_DeleteCharacter=0x71ca -OP_RandomNameGenerator=0x7f4a +OP_RandomNameGenerator=0x7f4a # TOB client no longer sends this, and the S->C packet isn't used by emu OP_ApproveName=0x5306 OP_MOTD=0x1eef OP_SetChatServer=0x0000 OP_SetChatServer2=0x34c1 OP_ZoneServerInfo=0x2323 OP_WorldComplete=0x1223 -OP_WorldUnknown001=0x7723 -OP_FloatListThing=0x504f +OP_WorldUnknown001=0x7723 # SetServerTime, S->C +OP_FloatListThing=0x504f # Movement History, C->S # Reasons for Disconnect: OP_ZoneUnavail=0x29a6 @@ -54,8 +54,8 @@ OP_WorldLogout=0x0000 OP_WorldLevelTooHigh=0x0000 OP_CharInacessable=0x0000 OP_UserCompInfo=0x0000 -OP_SendExeChecksum=0x0000 -OP_SendBaseDataChecksum=0x0000 +OP_SendExeChecksum=0x777f +OP_SendBaseDataChecksum=0x0492 # Zone in opcodes OP_AckPacket=0x776d