diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-02-24 23:16:55 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-02-24 23:16:55 +0100 |
commit | 9f30afe3528441571f89cb2e1775c756774fa0cd (patch) | |
tree | 389fbe1f77dced54fa1aeb475584951f34ff9cfe | |
parent | f96c8cc39ba15d7c9f0784428b9bbcbca4665370 (diff) |
Core/PacketIO: Updated packet structures to 9.2.0
54 files changed, 1406 insertions, 1067 deletions
diff --git a/sql/updates/world/master/2022_02_22_00_world.sql b/sql/updates/world/master/2022_02_22_00_world.sql new file mode 100644 index 00000000000..91036b68b79 --- /dev/null +++ b/sql/updates/world/master/2022_02_22_00_world.sql @@ -0,0 +1,14 @@ +ALTER TABLE `areatrigger_create_properties` + ADD `ShapeData6` float NOT NULL DEFAULT 0 AFTER `ShapeData5`, + ADD `ShapeData7` float NOT NULL DEFAULT 0 AFTER `ShapeData6`; + +ALTER TABLE `areatrigger_template` + ADD `Data6` float NOT NULL DEFAULT 0 AFTER `Data5`, + ADD `Data7` float NOT NULL DEFAULT 0 AFTER `Data6`; + +ALTER TABLE `gossip_menu_option` ADD `Language` int unsigned NOT NULL DEFAULT 0 AFTER `OptionNpcFlag`; + +ALTER TABLE `playerchoice` + ADD `CloseSoundKitId` int unsigned NOT NULL DEFAULT 0 AFTER `SoundKitId`, + ADD `Duration` bigint NOT NULL DEFAULT 0 AFTER `CloseSoundKitId`, + ADD `PendingChoiceText` VARCHAR(255) NOT NULL DEFAULT '' AFTER `Duration`; diff --git a/src/server/game/Chat/Hyperlinks.cpp b/src/server/game/Chat/Hyperlinks.cpp index bb628a3224f..6426d165c71 100644 --- a/src/server/game/Chat/Hyperlinks.cpp +++ b/src/server/game/Chat/Hyperlinks.cpp @@ -463,7 +463,7 @@ struct LinkValidator<LinkTags::quest> if (i == DEFAULT_LOCALE) continue; - std::string_view name = ObjectMgr::GetLocaleString(locale->LogTitle, i); + std::string_view name = ObjectMgr::GetLocaleString(locale->LogTitle, LocaleConstant(i)); if (!name.empty() && (text == name)) return true; } diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp index 401cf6598ac..e1ccf312e74 100644 --- a/src/server/game/DungeonFinding/LFGScripts.cpp +++ b/src/server/game/DungeonFinding/LFGScripts.cpp @@ -27,6 +27,7 @@ #include "Map.h" #include "ObjectAccessor.h" #include "Player.h" +#include "QueryPackets.h" #include "ScriptMgr.h" #include "SharedDefines.h" #include "WorldSession.h" @@ -92,9 +93,11 @@ void LFGPlayerScript::OnMapChanged(Player* player) return; } - for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next()) - if (Player* member = itr->GetSource()) - player->GetSession()->SendNameQueryOpcode(member->GetGUID()); + WorldPackets::Query::QueryPlayerNameResponse response; + for (Group::MemberSlot const& memberSlot : group->GetMemberSlots()) + player->GetSession()->BuildNameQueryData(memberSlot.guid, response.Players.emplace_back()); + + player->SendDirectMessage(response.Write()); if (sLFGMgr->selectedRandomLfgDungeon(player->GetGUID())) player->CastSpell(player, LFG_SPELL_LUCK_OF_THE_DRAW, true); diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index cd39c461f29..84d0a97af0b 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -374,6 +374,9 @@ void AreaTrigger::UpdateTargetList() case AREATRIGGER_TYPE_CYLINDER: SearchUnitInCylinder(targetList); break; + case AREATRIGGER_TYPE_DISK: + SearchUnitInDisk(targetList); + break; default: break; } @@ -469,6 +472,21 @@ void AreaTrigger::SearchUnitInCylinder(std::vector<Unit*>& targetList) }), targetList.end()); } +void AreaTrigger::SearchUnitInDisk(std::vector<Unit*>& targetList) +{ + SearchUnits(targetList, GetMaxSearchRadius(), false); + + float innerRadius = _shape.DiskDatas.InnerRadius; + float height = _shape.DiskDatas.Height; + float minZ = GetPositionZ() - height; + float maxZ = GetPositionZ() + height; + + targetList.erase(std::remove_if(targetList.begin(), targetList.end(), [this, innerRadius, minZ, maxZ](Unit const* unit) -> bool + { + return unit->IsInDist2d(this, innerRadius) || unit->GetPositionZ() < minZ || unit->GetPositionZ() > maxZ; + }), targetList.end()); +} + void AreaTrigger::HandleUnitEnterExit(std::vector<Unit*> const& newTargetList) { GuidUnorderedSet exitUnits(std::move(_insideUnits)); diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h index 3ba82809ec3..ba5aaf7f69f 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h @@ -128,6 +128,7 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge void SearchUnitInBox(std::vector<Unit*>& targetList); void SearchUnitInPolygon(std::vector<Unit*>& targetList); void SearchUnitInCylinder(std::vector<Unit*>& targetList); + void SearchUnitInDisk(std::vector<Unit*>& targetList); bool CheckIsInPolygon2D(Position const* pos) const; void HandleUnitEnterExit(std::vector<Unit*> const& targetList); diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp index c0a623a4b52..322a0bf44d6 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp @@ -41,7 +41,9 @@ float AreaTriggerShapeInfo::GetMaxSearchRadius() const case AREATRIGGER_TYPE_BOX: return std::sqrt(BoxDatas.Extents[0] * BoxDatas.Extents[0] / 4 + BoxDatas.Extents[1] * BoxDatas.Extents[1] / 4); case AREATRIGGER_TYPE_CYLINDER: - return CylinderDatas.Radius; + return std::max(CylinderDatas.Radius, CylinderDatas.RadiusTarget); + case AREATRIGGER_TYPE_DISK: + return std::max(DiskDatas.OuterRadius, DiskDatas.OuterRadiusTarget); default: break; } diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h index 0eb87f833d1..46e79be387f 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h +++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h @@ -24,7 +24,7 @@ #include "SpawnData.h" #include <vector> -#define MAX_AREATRIGGER_ENTITY_DATA 6 +#define MAX_AREATRIGGER_ENTITY_DATA 8 #define MAX_AREATRIGGER_SCALE 7 enum AreaTriggerFlags @@ -50,7 +50,8 @@ enum AreaTriggerTypes AREATRIGGER_TYPE_UNK = 2, AREATRIGGER_TYPE_POLYGON = 3, AREATRIGGER_TYPE_CYLINDER = 4, - AREATRIGGER_TYPE_MAX = 5 + AREATRIGGER_TYPE_DISK = 5, + AREATRIGGER_TYPE_MAX }; enum AreaTriggerActionTypes @@ -123,6 +124,7 @@ struct AreaTriggerShapeInfo bool IsBox() const { return Type == AREATRIGGER_TYPE_BOX; } bool IsPolygon() const { return Type == AREATRIGGER_TYPE_POLYGON; } bool IsCylinder() const { return Type == AREATRIGGER_TYPE_CYLINDER; } + bool IsDisk() const { return Type == AREATRIGGER_TYPE_DISK; } float GetMaxSearchRadius() const; AreaTriggerTypes Type; @@ -165,6 +167,19 @@ struct AreaTriggerShapeInfo float LocationZOffset; float LocationZOffsetTarget; } CylinderDatas; + + // AREATRIGGER_TYPE_DISK + struct + { + float InnerRadius; + float InnerRadiusTarget; + float OuterRadius; + float OuterRadiusTarget; + float Height; + float HeightTarget; + float LocationZOffset; + float LocationZOffsetTarget; + } DiskDatas; }; }; diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index ca8d013999f..784de37b4cf 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -225,6 +225,7 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID) opt.OptionNPC = item.MenuItemIcon; opt.OptionFlags = item.IsCoded; // makes pop up box password opt.OptionCost = item.BoxMoney; // money required to open menu, 2.0.3 + opt.OptionLanguage = item.Language; opt.Text = item.Message; // text for gossip item opt.Confirm = item.BoxMessage; // accept text (related to money) pop up box, 2.0.3 opt.Status = GossipOptionStatus::Available; diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h index 6c5391ae352..6d12a85f94a 100644 --- a/src/server/game/Entities/Creature/GossipDef.h +++ b/src/server/game/Entities/Creature/GossipDef.h @@ -131,6 +131,7 @@ struct GossipMenuItem uint32 OptionType; std::string BoxMessage; uint32 BoxMoney; + uint32 Language; }; // need an ordered container diff --git a/src/server/game/Entities/Object/MovementInfo.h b/src/server/game/Entities/Object/MovementInfo.h index 97d10d86105..f587d71e710 100644 --- a/src/server/game/Entities/Object/MovementInfo.h +++ b/src/server/game/Entities/Object/MovementInfo.h @@ -19,6 +19,7 @@ #define MovementInfo_h__ #include "ObjectGuid.h" +#include "Optional.h" #include "Position.h" #include <algorithm> #include <vector> @@ -29,6 +30,7 @@ struct MovementInfo ObjectGuid guid; uint32 flags; uint32 flags2; + uint32 flags3; Position pos; uint32 time; @@ -56,6 +58,17 @@ struct MovementInfo // swimming/flying float pitch; + struct Inertia + { + Inertia() : lifetime(0) { } + + ObjectGuid guid; + Position force; + uint32 lifetime; + }; + + Optional<Inertia> inertia; + // jumping struct JumpInfo { @@ -75,7 +88,7 @@ struct MovementInfo float splineElevation; MovementInfo() : - flags(0), flags2(0), time(0), pitch(0.0f), splineElevation(0.0f) + flags(0), flags2(0), flags3(0), time(0), pitch(0.0f), splineElevation(0.0f) { pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f); transport.Reset(); @@ -94,6 +107,12 @@ struct MovementInfo void RemoveExtraMovementFlag(uint32 flag) { flags2 &= ~flag; } bool HasExtraMovementFlag(uint32 flag) const { return (flags2 & flag) != 0; } + uint32 GetExtraMovementFlags2() const { return flags3; } + void SetExtraMovementFlags2(uint32 flag) { flags3 = flag; } + void AddExtraMovementFlag2(uint32 flag) { flags3 |= flag; } + void RemoveExtraMovementFlag2(uint32 flag) { flags3 &= ~flag; } + bool HasExtraMovementFlag2(uint32 flag) const { return (flags3 & flag) != 0; } + uint32 GetFallTime() const { return jump.fallTime; } void SetFallTime(uint32 fallTime) { jump.fallTime = fallTime; } diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index e2df959e8d7..995f1b7b29c 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -299,9 +299,14 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe bool HasFallDirection = unit->HasUnitMovementFlag(MOVEMENTFLAG_FALLING); bool HasFall = HasFallDirection || unit->m_movementInfo.jump.fallTime != 0; bool HasSpline = unit->IsSplineEnabled(); + bool HasInertia = unit->m_movementInfo.inertia.has_value(); *data << GetGUID(); // MoverGUID + *data << uint32(unit->GetUnitMovementFlags()); + *data << uint32(unit->GetExtraUnitMovementFlags()); + *data << uint32(unit->GetExtraUnitMovementFlags2()); + *data << uint32(unit->m_movementInfo.time); // MoveTime *data << float(unit->GetPositionX()); *data << float(unit->GetPositionY()); @@ -317,17 +322,23 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe //for (std::size_t i = 0; i < RemoveForcesIDs.size(); ++i) // *data << ObjectGuid(RemoveForcesIDs); - data->WriteBits(unit->GetUnitMovementFlags(), 30); - data->WriteBits(unit->GetExtraUnitMovementFlags(), 18); data->WriteBit(!unit->m_movementInfo.transport.guid.IsEmpty()); // HasTransport data->WriteBit(HasFall); // HasFall data->WriteBit(HasSpline); // HasSpline - marks that the unit uses spline movement data->WriteBit(false); // HeightChangeFailed data->WriteBit(false); // RemoteTimeValid + data->WriteBit(HasInertia); // HasInertia if (!unit->m_movementInfo.transport.guid.IsEmpty()) *data << unit->m_movementInfo.transport; + if (HasInertia) + { + *data << unit->m_movementInfo.inertia->guid; + *data << unit->m_movementInfo.inertia->force.PositionXYZStream(); + *data << uint32(unit->m_movementInfo.inertia->lifetime); + } + if (HasFall) { *data << uint32(unit->m_movementInfo.jump.fallTime); // Time @@ -454,6 +465,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe bool hasAreaTriggerBox = shape.IsBox(); bool hasAreaTriggerPolygon = createProperties && shape.IsPolygon(); bool hasAreaTriggerCylinder = shape.IsCylinder(); + bool hasDisk = shape.IsDisk(); bool hasAreaTriggerSpline = areaTrigger->HasSplines(); bool hasOrbit = areaTrigger->HasOrbit(); bool hasMovementScript = false; @@ -473,6 +485,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe data->WriteBit(hasAreaTriggerBox); data->WriteBit(hasAreaTriggerPolygon); data->WriteBit(hasAreaTriggerCylinder); + data->WriteBit(hasDisk); data->WriteBit(hasAreaTriggerSpline); data->WriteBit(hasOrbit); data->WriteBit(hasMovementScript); @@ -542,6 +555,18 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe *data << float(shape.CylinderDatas.LocationZOffsetTarget); } + if (hasDisk) + { + *data << float(shape.DiskDatas.InnerRadius); + *data << float(shape.DiskDatas.InnerRadiusTarget); + *data << float(shape.DiskDatas.OuterRadius); + *data << float(shape.DiskDatas.OuterRadiusTarget); + *data << float(shape.DiskDatas.Height); + *data << float(shape.DiskDatas.HeightTarget); + *data << float(shape.DiskDatas.LocationZOffset); + *data << float(shape.DiskDatas.LocationZOffsetTarget); + } + //if (hasMovementScript) // *data << *areaTrigger->GetMovementScript(); // AreaTriggerMovementScriptInfo diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h index edb07858d30..877c2b72ec8 100644 --- a/src/server/game/Entities/Object/Updates/UpdateField.h +++ b/src/server/game/Entities/Object/Updates/UpdateField.h @@ -756,7 +756,7 @@ namespace UF return Size; } - T const& operator[](uint32 index) const + T const& operator[](std::size_t index) const { return _values[index]; } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 230216889ad..dae7ea5e396 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -328,13 +328,13 @@ void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } -void ItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void ItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) allowedMaskForTarget |= { 0x03FB1B00u, 0x00000000u }; } -void ItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void ItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { Mask allowedMaskForTarget({ 0xFC04E4FFu, 0x000000FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); @@ -713,13 +713,13 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } -void AzeriteItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void AzeriteItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) allowedMaskForTarget |= { 0x000003E2u }; } -void AzeriteItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void AzeriteItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { Mask allowedMaskForTarget({ 0x0000001Du }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); @@ -1114,7 +1114,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi data << uint32(PassiveSpells.size()); data << uint32(WorldEffects.size()); data << uint32(ChannelObjects.size()); - data << SkinningOwnerGUID; data << uint32(SilencedSchoolMask); data << NameplateAttachToGUID; for (std::size_t i = 0; i < PassiveSpells.size(); ++i) @@ -1133,24 +1132,24 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0xFE0007FFu, 0x00000000u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x7F0003FFu, 0x00000000u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } -void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x1000007Eu, 0x01FFF800u, 0xFFFFFFFFu, 0x00000007u }; + allowedMaskForTarget |= { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x0800007Eu, 0x80FFFC00u, 0xFFFFFFFFu, 0x00000003u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) - allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x10000000u, 0x01FFF800u, 0x00000000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x08000000u, 0x00FFFC00u, 0x00000000u, 0x00000000u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) - allowedMaskForTarget |= { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x001FE000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000FF000u, 0x00000000u }; } -void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0xFE0007FFu, 0x00000000u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x7F0003FFu, 0x00000000u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -1682,100 +1681,96 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } if (changesMask[118]) { - data << SkinningOwnerGUID; - } - if (changesMask[119]) - { data << uint32(SilencedSchoolMask); } - if (changesMask[120]) + if (changesMask[119]) { data << NameplateAttachToGUID; } } - if (changesMask[121]) + if (changesMask[120]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[122 + i]) + if (changesMask[121 + i]) { data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, i, owner, receiver)); } } } - if (changesMask[124]) + if (changesMask[123]) { for (std::size_t i = 0; i < 7; ++i) { - if (changesMask[125 + i]) + if (changesMask[124 + i]) { data << int32(Power[i]); } - if (changesMask[132 + i]) + if (changesMask[131 + i]) { data << int32(MaxPower[i]); } - if (changesMask[139 + i]) + if (changesMask[138 + i]) { data << float(PowerRegenFlatModifier[i]); } - if (changesMask[146 + i]) + if (changesMask[145 + i]) { data << float(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[153]) + if (changesMask[152]) { for (std::size_t i = 0; i < 3; ++i) { - if (changesMask[154 + i]) + if (changesMask[153 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[157]) + if (changesMask[156]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[158 + i]) + if (changesMask[157 + i]) { data << uint32(AttackRoundBaseTime[i]); } } } - if (changesMask[160]) + if (changesMask[159]) { for (std::size_t i = 0; i < 4; ++i) { - if (changesMask[161 + i]) + if (changesMask[160 + i]) { data << int32(Stats[i]); } - if (changesMask[165 + i]) + if (changesMask[164 + i]) { data << int32(StatPosBuff[i]); } - if (changesMask[169 + i]) + if (changesMask[168 + i]) { data << int32(StatNegBuff[i]); } } } - if (changesMask[173]) + if (changesMask[172]) { for (std::size_t i = 0; i < 7; ++i) { - if (changesMask[174 + i]) + if (changesMask[173 + i]) { data << int32(Resistances[i]); } - if (changesMask[181 + i]) + if (changesMask[180 + i]) { data << int32(BonusResistanceMods[i]); } - if (changesMask[188 + i]) + if (changesMask[187 + i]) { data << int32(ManaCostModifier[i]); } @@ -1899,7 +1894,6 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(LookAtControllerID); Base::ClearChangesMask(TaxiNodesID); Base::ClearChangesMask(GuildGUID); - Base::ClearChangesMask(SkinningOwnerGUID); Base::ClearChangesMask(SilencedSchoolMask); Base::ClearChangesMask(NameplateAttachToGUID); Base::ClearChangesMask(NpcFlags); @@ -2170,13 +2164,13 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } -void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) allowedMaskForTarget |= { 0x00000012u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000001u }; } -void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x00000007u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0FFFFFFEu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); @@ -4434,11 +4428,11 @@ void GameObjectData::ClearChangesMask() void DynamicObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const { data << Caster; + data << uint8(Type); SpellVisual->WriteCreate(data, owner, receiver); data << int32(SpellID); data << float(Radius); data << uint32(CastTime); - data << uint8(Type); } void DynamicObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const @@ -4459,23 +4453,23 @@ void DynamicObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, b } if (changesMask[2]) { - SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << uint8(Type); } if (changesMask[3]) { - data << int32(SpellID); + SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[4]) { - data << float(Radius); + data << int32(SpellID); } if (changesMask[5]) { - data << uint32(CastTime); + data << float(Radius); } if (changesMask[6]) { - data << uint8(Type); + data << uint32(CastTime); } } } @@ -4483,11 +4477,11 @@ void DynamicObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, b void DynamicObjectData::ClearChangesMask() { Base::ClearChangesMask(Caster); + Base::ClearChangesMask(Type); Base::ClearChangesMask(SpellVisual); Base::ClearChangesMask(SpellID); Base::ClearChangesMask(Radius); Base::ClearChangesMask(CastTime); - Base::ClearChangesMask(Type); _changesMask.ResetAll(); } @@ -4752,7 +4746,9 @@ void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi data << float(BoundsRadius2D); data << uint32(DecalPropertiesID); data << CreatingEffectGUID; - data << Field_80; + data << uint32(Field_80); + data << uint32(Field_84); + data << Field_88; ExtraScaleCurve->WriteCreate(data, owner, receiver); VisualAnim->WriteCreate(data, owner, receiver); } @@ -4764,7 +4760,7 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi void AreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlock(0), 16); + data.WriteBits(changesMask.GetBlock(0), 18); data.FlushBits(); if (changesMask[0]) @@ -4819,13 +4815,21 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, boo } if (changesMask[14]) { - data << Field_80; + data << uint32(Field_80); + } + if (changesMask[15]) + { + data << uint32(Field_84); + } + if (changesMask[16]) + { + data << Field_88; } if (changesMask[2]) { ExtraScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[15]) + if (changesMask[17]) { VisualAnim->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } @@ -4848,6 +4852,8 @@ void AreaTriggerData::ClearChangesMask() Base::ClearChangesMask(DecalPropertiesID); Base::ClearChangesMask(CreatingEffectGUID); Base::ClearChangesMask(Field_80); + Base::ClearChangesMask(Field_84); + Base::ClearChangesMask(Field_88); Base::ClearChangesMask(VisualAnim); _changesMask.ResetAll(); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 01afa7941cb..a9967827f7a 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -139,8 +139,8 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40> void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Item const* owner, Player const* receiver) const; - void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const; - void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + static void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags); + static void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags); void ClearChangesMask(); }; @@ -202,8 +202,8 @@ struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteItem const* owner, Player const* receiver) const; - void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const; - void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + static void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags); + static void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags); void ClearChangesMask(); }; @@ -252,7 +252,7 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); } }; -struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<195> +struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<194> { UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs; DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells; @@ -373,29 +373,28 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<195> UpdateField<int32, 96, 115> LookAtControllerID; UpdateField<int32, 96, 116> TaxiNodesID; UpdateField<ObjectGuid, 96, 117> GuildGUID; - UpdateField<ObjectGuid, 96, 118> SkinningOwnerGUID; - UpdateField<uint32, 96, 119> SilencedSchoolMask; - UpdateField<ObjectGuid, 96, 120> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object - UpdateFieldArray<uint32, 2, 121, 122> NpcFlags; + UpdateField<uint32, 96, 118> SilencedSchoolMask; + UpdateField<ObjectGuid, 96, 119> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object + UpdateFieldArray<uint32, 2, 120, 121> NpcFlags; struct NpcFlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateFieldArray<int32, 7, 124, 125> Power; - UpdateFieldArray<int32, 7, 124, 132> MaxPower; - UpdateFieldArray<float, 7, 124, 139> PowerRegenFlatModifier; - UpdateFieldArray<float, 7, 124, 146> PowerRegenInterruptedFlatModifier; - UpdateFieldArray<UF::VisibleItem, 3, 153, 154> VirtualItems; - UpdateFieldArray<uint32, 2, 157, 158> AttackRoundBaseTime; - UpdateFieldArray<int32, 4, 160, 161> Stats; - UpdateFieldArray<int32, 4, 160, 165> StatPosBuff; - UpdateFieldArray<int32, 4, 160, 169> StatNegBuff; - UpdateFieldArray<int32, 7, 173, 174> Resistances; - UpdateFieldArray<int32, 7, 173, 181> BonusResistanceMods; - UpdateFieldArray<int32, 7, 173, 188> ManaCostModifier; + UpdateFieldArray<int32, 7, 123, 124> Power; + UpdateFieldArray<int32, 7, 123, 131> MaxPower; + UpdateFieldArray<float, 7, 123, 138> PowerRegenFlatModifier; + UpdateFieldArray<float, 7, 123, 145> PowerRegenInterruptedFlatModifier; + UpdateFieldArray<UF::VisibleItem, 3, 152, 153> VirtualItems; + UpdateFieldArray<uint32, 2, 156, 157> AttackRoundBaseTime; + UpdateFieldArray<int32, 4, 159, 160> Stats; + UpdateFieldArray<int32, 4, 159, 164> StatPosBuff; + UpdateFieldArray<int32, 4, 159, 168> StatNegBuff; + UpdateFieldArray<int32, 7, 172, 173> Resistances; + UpdateFieldArray<int32, 7, 172, 180> BonusResistanceMods; + UpdateFieldArray<int32, 7, 172, 187> ManaCostModifier; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Unit const* owner, Player const* receiver) const; - void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const; - void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + static void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags); + static void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags); void ClearChangesMask(); }; @@ -493,8 +492,8 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<188> void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const; - void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const; - void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + static void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags); + static void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags); void ClearChangesMask(); bool IsQuestLogChangesMaskSkipped() const { return false; } // bandwidth savings aren't worth the cpu time }; @@ -823,11 +822,11 @@ struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask< struct DynamicObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<7> { UpdateField<ObjectGuid, 0, 1> Caster; - UpdateField<UF::SpellCastVisual, 0, 2> SpellVisual; - UpdateField<int32, 0, 3> SpellID; - UpdateField<float, 0, 4> Radius; - UpdateField<uint32, 0, 5> CastTime; - UpdateField<uint8, 0, 6> Type; + UpdateField<uint8, 0, 2> Type; + UpdateField<UF::SpellCastVisual, 0, 3> SpellVisual; + UpdateField<int32, 0, 4> SpellID; + UpdateField<float, 0, 5> Radius; + UpdateField<uint32, 0, 6> CastTime; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const; @@ -881,7 +880,7 @@ struct VisualAnim : public IsUpdateFieldStructureTag, public HasChangesMask<5> void ClearChangesMask(); }; -struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<16> +struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<18> { UpdateField<UF::ScaleCurve, 0, 1> OverrideScaleCurve; UpdateField<UF::ScaleCurve, 0, 2> ExtraScaleCurve; @@ -896,8 +895,10 @@ struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask UpdateField<float, 0, 11> BoundsRadius2D; UpdateField<uint32, 0, 12> DecalPropertiesID; UpdateField<ObjectGuid, 0, 13> CreatingEffectGUID; - UpdateField<ObjectGuid, 0, 14> Field_80; - UpdateField<UF::VisualAnim, 0, 15> VisualAnim; + UpdateField<uint32, 0, 14> Field_80; + UpdateField<uint32, 0, 15> Field_84; + UpdateField<ObjectGuid, 0, 16> Field_88; + UpdateField<UF::VisualAnim, 0, 17> VisualAnim; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index da41e6bfa72..a5c11f6e736 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -28528,11 +28528,11 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId) if (playerChoiceResponseTemplate.MawPower) { WorldPackets::Quest::PlayerChoiceResponseMawPower& mawPower = playerChoiceResponse.MawPower.emplace(); - mawPower.TypeArtFileID = playerChoiceResponse.MawPower->TypeArtFileID; - mawPower.Rarity = playerChoiceResponse.MawPower->Rarity; - mawPower.RarityColor = playerChoiceResponse.MawPower->RarityColor; - mawPower.SpellID = playerChoiceResponse.MawPower->SpellID; - mawPower.MaxStacks = playerChoiceResponse.MawPower->MaxStacks; + mawPower.TypeArtFileID = playerChoiceResponseTemplate.MawPower->TypeArtFileID; + mawPower.Rarity = playerChoiceResponseTemplate.MawPower->Rarity; + mawPower.RarityColor = playerChoiceResponseTemplate.MawPower->RarityColor; + mawPower.SpellID = playerChoiceResponseTemplate.MawPower->SpellID; + mawPower.MaxStacks = playerChoiceResponseTemplate.MawPower->MaxStacks; } } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 36b257543c3..1301968399b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -1519,7 +1519,7 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss) } } -void Unit::HandleEmoteCommand(Emote emoteId, Player* target /*=nullptr*/, Trinity::IteratorPair<int32 const*> spellVisualKitIds /*= {}*/) +void Unit::HandleEmoteCommand(Emote emoteId, Player* target /*=nullptr*/, Trinity::IteratorPair<int32 const*> spellVisualKitIds /*= {}*/, int32 sequenceVariation /*= 0*/) { WorldPackets::Chat::Emote packet; packet.Guid = GetGUID(); @@ -1529,6 +1529,8 @@ void Unit::HandleEmoteCommand(Emote emoteId, Player* target /*=nullptr*/, Trinit if (emotesEntry->AnimID == ANIM_MOUNT_SPECIAL || emotesEntry->AnimID == ANIM_MOUNT_SELF_SPECIAL) std::copy(spellVisualKitIds.begin(), spellVisualKitIds.end(), std::back_inserter(packet.SpellVisualKitIDs)); + packet.SequenceVariation = sequenceVariation; + if (target) target->SendDirectMessage(packet.Write()); else diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 50acbb61055..11f5b856aee 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1041,7 +1041,7 @@ class TC_GAME_API Unit : public WorldObject DamageInfo* damageInfo, HealInfo* healInfo); void TriggerAurasProcOnEvent(ProcEventInfo& eventInfo, AuraApplicationProcContainer& procAuras); - void HandleEmoteCommand(Emote emoteId, Player* target = nullptr, Trinity::IteratorPair<int32 const*> spellVisualKitIds = {}); + void HandleEmoteCommand(Emote emoteId, Player* target = nullptr, Trinity::IteratorPair<int32 const*> spellVisualKitIds = {}, int32 sequenceVariation = 0); void AttackerStateUpdate (Unit* victim, WeaponAttackType attType = BASE_ATTACK, bool extra = false); void CalculateMeleeDamage(Unit* victim, CalcDamageInfo* damageInfo, WeaponAttackType attackType = BASE_ATTACK); @@ -1738,6 +1738,13 @@ class TC_GAME_API Unit : public WorldObject bool HasExtraUnitMovementFlag(uint32 f) const { return m_movementInfo.HasExtraMovementFlag(f); } uint32 GetExtraUnitMovementFlags() const { return m_movementInfo.GetExtraMovementFlags(); } void SetExtraUnitMovementFlags(uint32 f) { m_movementInfo.SetExtraMovementFlags(f); } + + void AddExtraUnitMovementFlag2(uint32 f) { m_movementInfo.AddExtraMovementFlag2(f); } + void RemoveExtraUnitMovementFlag2(uint32 f) { m_movementInfo.RemoveExtraMovementFlag2(f); } + bool HasExtraUnitMovementFlag2(uint32 f) const { return m_movementInfo.HasExtraMovementFlag2(f); } + uint32 GetExtraUnitMovementFlags2() const { return m_movementInfo.GetExtraMovementFlags2(); } + void SetExtraUnitMovementFlags2(uint32 f) { m_movementInfo.SetExtraMovementFlags2(f); } + bool IsSplineEnabled() const; void SetControlled(bool apply, UnitState state); diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index 3e3d124dc28..2377fac002b 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -333,6 +333,12 @@ enum MovementFlags2 : uint32 MOVEMENTFLAG2_INTERPOLATED_PITCHING = 0x00080000 }; +enum MovementFlags3 : uint32 +{ + MOVEMENTFLAG3_NONE = 0x00000000, + MOVEMENTFLAG3_DISABLE_INERTIA = 0x00000001, +}; + enum HitInfo { HITINFO_NORMALSWING = 0x00000000, diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 7c91d048869..ad8dd328747 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -9557,8 +9557,8 @@ void ObjectMgr::LoadGossipMenuItems() _gossipMenuItemsStore.clear(); QueryResult result = WorldDatabase.Query( - // 0 1 2 3 4 5 6 7 8 9 10 11 12 - "SELECT MenuID, OptionID, OptionIcon, OptionText, OptionBroadcastTextID, OptionType, OptionNpcFlag, ActionMenuID, ActionPoiID, BoxCoded, BoxMoney, BoxText, BoxBroadcastTextID " + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + "SELECT MenuID, OptionID, OptionIcon, OptionText, OptionBroadcastTextID, OptionType, OptionNpcFlag, Language, ActionMenuID, ActionPoiID, BoxCoded, BoxMoney, BoxText, BoxBroadcastTextID " "FROM gossip_menu_option ORDER BY MenuID, OptionID"); if (!result) @@ -9580,12 +9580,13 @@ void ObjectMgr::LoadGossipMenuItems() gMenuItem.OptionBroadcastTextID = fields[4].GetUInt32(); gMenuItem.OptionType = fields[5].GetUInt32(); gMenuItem.OptionNpcFlag = fields[6].GetUInt64(); - gMenuItem.ActionMenuID = fields[7].GetUInt32(); - gMenuItem.ActionPoiID = fields[8].GetUInt32(); - gMenuItem.BoxCoded = fields[9].GetBool(); - gMenuItem.BoxMoney = fields[10].GetUInt32(); - gMenuItem.BoxText = fields[11].GetString(); - gMenuItem.BoxBroadcastTextID = fields[12].GetUInt32(); + gMenuItem.Language = fields[7].GetUInt32(); + gMenuItem.ActionMenuID = fields[8].GetUInt32(); + gMenuItem.ActionPoiID = fields[9].GetUInt32(); + gMenuItem.BoxCoded = fields[10].GetBool(); + gMenuItem.BoxMoney = fields[11].GetUInt32(); + gMenuItem.BoxText = fields[12].GetString(); + gMenuItem.BoxBroadcastTextID = fields[13].GetUInt32(); if (gMenuItem.OptionIcon >= GossipOptionIcon::Count) { @@ -9605,6 +9606,12 @@ void ObjectMgr::LoadGossipMenuItems() if (gMenuItem.OptionType >= GOSSIP_OPTION_MAX) TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has unknown option id %u. Option will not be used", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.OptionType); + if (gMenuItem.Language && !sLanguagesStore.LookupEntry(gMenuItem.Language)) + { + TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u use non-existing Language %u, ignoring", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.Language); + gMenuItem.Language = 0; + } + if (gMenuItem.ActionPoiID && !GetPointOfInterest(gMenuItem.ActionPoiID)) { TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u use non-existing ActionPoiID %u, ignoring", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.ActionPoiID); @@ -10814,7 +10821,8 @@ void ObjectMgr::LoadPlayerChoices() uint32 oldMSTime = getMSTime(); _playerChoices.clear(); - QueryResult choices = WorldDatabase.Query("SELECT ChoiceId, UiTextureKitId, SoundKitId, Question, HideWarboardHeader, KeepOpenAfterChoice FROM playerchoice"); + // 0 1 2 3 4 5 6 7 8 + QueryResult choices = WorldDatabase.Query("SELECT ChoiceId, UiTextureKitId, SoundKitId, CloseSoundKitId, Duration, Question, PendingChoiceText, HideWarboardHeader, KeepOpenAfterChoice FROM playerchoice"); if (!choices) { @@ -10840,9 +10848,12 @@ void ObjectMgr::LoadPlayerChoices() choice.ChoiceId = choiceId; choice.UiTextureKitId = fields[1].GetInt32(); choice.SoundKitId = fields[2].GetUInt32(); - choice.Question = fields[3].GetString(); - choice.HideWarboardHeader = fields[4].GetBool(); - choice.KeepOpenAfterChoice = fields[5].GetBool(); + choice.CloseSoundKitId = fields[3].GetUInt32(); + choice.Duration = fields[4].GetInt64(); + choice.Question = fields[5].GetString(); + choice.PendingChoiceText = fields[6].GetString(); + choice.HideWarboardHeader = fields[7].GetBool(); + choice.KeepOpenAfterChoice = fields[8].GetBool(); } while (choices->NextRow()); @@ -11172,8 +11183,10 @@ void ObjectMgr::LoadPlayerChoices() PlayerChoiceResponseMawPower& mawPower = responseItr->MawPower.emplace(); mawPower.TypeArtFileID = fields[2].GetInt32(); - mawPower.Rarity = fields[3].GetInt32(); - mawPower.RarityColor = fields[4].GetUInt32(); + if (!fields[3].IsNull()) + mawPower.Rarity = fields[3].GetInt32(); + if (!fields[4].IsNull()) + mawPower.RarityColor = fields[4].GetUInt32(); mawPower.SpellID = fields[5].GetInt32(); mawPower.MaxStacks = fields[6].GetInt32(); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index f145129b234..5aa7bed0eda 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -753,6 +753,7 @@ struct GossipMenuItems uint32 OptionBroadcastTextID; uint32 OptionType; uint32 OptionNpcFlag; + uint32 Language; uint32 ActionMenuID; uint32 ActionPoiID; bool BoxCoded; @@ -898,8 +899,8 @@ struct PlayerChoiceResponseReward struct PlayerChoiceResponseMawPower { int32 TypeArtFileID = 0; - int32 Rarity = 0; - uint32 RarityColor = 0; + Optional<int32> Rarity; + Optional<uint32> RarityColor; int32 SpellID = 0; int32 MaxStacks = 0; }; @@ -931,7 +932,10 @@ struct PlayerChoice int32 ChoiceId; int32 UiTextureKitId; uint32 SoundKitId; + uint32 CloseSoundKitId; + int64 Duration; std::string Question; + std::string PendingChoiceText; std::vector<PlayerChoiceResponse> Responses; bool HideWarboardHeader; bool KeepOpenAfterChoice; @@ -1684,7 +1688,7 @@ class TC_GAME_API ObjectMgr GraveyardContainer GraveyardStore; static void AddLocaleString(std::string&& value, LocaleConstant localeConstant, std::vector<std::string>& data); - static std::string_view GetLocaleString(std::vector<std::string> const& data, size_t locale) + static std::string_view GetLocaleString(std::vector<std::string> const& data, LocaleConstant locale) { if (locale < data.size()) return data[locale]; @@ -1693,10 +1697,16 @@ class TC_GAME_API ObjectMgr } static void GetLocaleString(std::vector<std::string> const& data, LocaleConstant localeConstant, std::string& value) { - if (std::string_view str = GetLocaleString(data, static_cast<size_t>(localeConstant)); !str.empty()) + if (std::string_view str = GetLocaleString(data, localeConstant); !str.empty()) value.assign(str); } + static void GetLocaleString(std::vector<std::string> const& data, LocaleConstant localeConstant, std::string_view& value) + { + if (std::string_view str = GetLocaleString(data, localeConstant); !str.empty()) + value = str; + } + CharacterConversionMap FactionChangeAchievements; CharacterConversionMap FactionChangeItemsAllianceToHorde; CharacterConversionMap FactionChangeItemsHordeToAlliance; diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 10dc3e31c5b..bbbb639d33c 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1339,11 +1339,10 @@ void Guild::HandleRoster(WorldSession* session) session->SendPacket(roster.Write()); } -void Guild::SendQueryResponse(WorldSession* session, ObjectGuid const& playerGuid) +void Guild::SendQueryResponse(WorldSession* session) { WorldPackets::Guild::QueryGuildInfoResponse response; response.GuildGuid = GetGUID(); - response.PlayerGuid = playerGuid; response.Info.emplace(); response.Info->GuildGUID = GetGUID(); @@ -1488,7 +1487,7 @@ void Guild::HandleSetEmblem(WorldSession* session, EmblemInfo const& emblemInfo) SendSaveEmblemResult(session, ERR_GUILDEMBLEM_SUCCESS); // "Guild Emblem saved." - SendQueryResponse(session, ObjectGuid::Empty); + SendQueryResponse(session); } } diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index 794d5aad8c1..d02feb29fed 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -737,7 +737,7 @@ class TC_GAME_API Guild // Handle client commands void HandleRoster(WorldSession* session); - void SendQueryResponse(WorldSession* session, ObjectGuid const& playerGuid); + void SendQueryResponse(WorldSession* session); void HandleSetAchievementTracking(WorldSession* session, uint32 const* achievementIdsBegin, uint32 const* achievementIdsEnd); void HandleGetAchievementMembers(WorldSession* session, uint32 achievementId) const; void HandleSetMOTD(WorldSession* session, std::string_view motd); diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index a23952b1431..f13a3e6e33e 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1112,10 +1112,10 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) // Send PVPSeason { WorldPackets::Battleground::SeasonInfo seasonInfo; - seasonInfo.PreviousSeason = sWorld->getIntConfig(CONFIG_ARENA_SEASON_ID) - sWorld->getBoolConfig(CONFIG_ARENA_SEASON_IN_PROGRESS); + seasonInfo.PreviousArenaSeason = sWorld->getIntConfig(CONFIG_ARENA_SEASON_ID) - sWorld->getBoolConfig(CONFIG_ARENA_SEASON_IN_PROGRESS); if (sWorld->getBoolConfig(CONFIG_ARENA_SEASON_IN_PROGRESS)) - seasonInfo.CurrentSeason = sWorld->getIntConfig(CONFIG_ARENA_SEASON_ID); + seasonInfo.CurrentArenaSeason = sWorld->getIntConfig(CONFIG_ARENA_SEASON_ID); SendPacket(seasonInfo.Write()); } diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index b050c179f93..8d3cca11b69 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -686,7 +686,7 @@ void WorldSession::HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet) // Only allow text-emotes for "dead" entities (feign death included) if (_player->HasUnitState(UNIT_STATE_DIED)) break; - _player->HandleEmoteCommand(emote, nullptr, { packet.SpellVisualKitIDs.data(), packet.SpellVisualKitIDs.data() + packet.SpellVisualKitIDs.size() }); + _player->HandleEmoteCommand(emote, nullptr, { packet.SpellVisualKitIDs.data(), packet.SpellVisualKitIDs.data() + packet.SpellVisualKitIDs.size() }, packet.SequenceVariation); break; } diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp index e40d773b768..ce0e4b0681d 100644 --- a/src/server/game/Handlers/GuildHandler.cpp +++ b/src/server/game/Handlers/GuildHandler.cpp @@ -32,15 +32,13 @@ void WorldSession::HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& q GetPlayerInfo().c_str(), query.GuildGuid.ToString().c_str(), query.PlayerGuid.ToString().c_str()); if (Guild* guild = sGuildMgr->GetGuildByGuid(query.GuildGuid)) - if (guild->IsMember(query.PlayerGuid)) - { - guild->SendQueryResponse(this, query.PlayerGuid); - return; - } + { + guild->SendQueryResponse(this); + return; + } WorldPackets::Guild::QueryGuildInfoResponse response; response.GuildGuid = query.GuildGuid; - response.PlayerGuid = query.PlayerGuid; SendPacket(response.Write()); TC_LOG_DEBUG("guild", "SMSG_GUILD_QUERY_RESPONSE [%s]", GetPlayerInfo().c_str()); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index facc120c789..519f98aaf31 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -1142,6 +1142,7 @@ void WorldSession::HandleMountSpecialAnimOpcode(WorldPackets::Misc::MountSpecial WorldPackets::Misc::SpecialMountAnim specialMountAnim; specialMountAnim.UnitGUID = _player->GetGUID(); std::copy(mountSpecial.SpellVisualKitIDs.begin(), mountSpecial.SpellVisualKitIDs.end(), std::back_inserter(specialMountAnim.SpellVisualKitIDs)); + specialMountAnim.SequenceVariation = mountSpecial.SequenceVariation; GetPlayer()->SendMessageToSet(specialMountAnim.Write(), false); } diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 4bfb1962c89..5627305c2f3 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -32,24 +32,26 @@ #include "Realm.h" #include "World.h" -void WorldSession::SendNameQueryOpcode(ObjectGuid guid) +void WorldSession::BuildNameQueryData(ObjectGuid guid, WorldPackets::Query::NameCacheLookupResult& lookupData) { Player* player = ObjectAccessor::FindConnectedPlayer(guid); - WorldPackets::Query::QueryPlayerNameResponse response; - response.Player = guid; + lookupData.Player = guid; - if (response.Data.Initialize(guid, player)) - response.Result = RESPONSE_SUCCESS; // name known + lookupData.Data.emplace(); + if (lookupData.Data->Initialize(guid, player)) + lookupData.Result = RESPONSE_SUCCESS; // name known else - response.Result = RESPONSE_FAILURE; // name unknown - - SendPacket(response.Write()); + lookupData.Result = RESPONSE_FAILURE; // name unknown } void WorldSession::HandleNameQueryOpcode(WorldPackets::Query::QueryPlayerName& packet) { - SendNameQueryOpcode(packet.Player); + WorldPackets::Query::QueryPlayerNameResponse response; + for (ObjectGuid guid : packet.Players) + BuildNameQueryData(guid, response.Players.emplace_back()); + + SendPacket(response.Write()); } void WorldSession::HandleQueryTimeOpcode(WorldPackets::Query::QueryTime& /*queryTime*/) diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index c8c46eaf2a3..08ac3bd490d 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -19,9 +19,10 @@ WorldPacket const* WorldPackets::Battleground::SeasonInfo::Write() { - _worldPacket << int32(MythicPlusSeasonID); - _worldPacket << int32(CurrentSeason); - _worldPacket << int32(PreviousSeason); + _worldPacket << int32(MythicPlusDisplaySeasonID); + _worldPacket << int32(MythicPlusMilestoneSeasonID); + _worldPacket << int32(CurrentArenaSeason); + _worldPacket << int32(PreviousArenaSeason); _worldPacket << int32(ConquestWeeklyProgressCurrencyID); _worldPacket << int32(PvpSeasonID); _worldPacket.WriteBit(WeeklyRewardChestsEnabled); @@ -87,6 +88,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPMatchSta data << int32(playerData.Class); data << int32(playerData.CreatureID); data << int32(playerData.HonorLevel); + data << int32(playerData.Role); for (WorldPackets::Battleground::PVPMatchStatistics::PVPMatchPlayerPVPStat const& pvpStat : playerData.Stats) data << pvpStat; @@ -205,6 +207,7 @@ WorldPacket const* WorldPackets::Battleground::BattlefieldStatusQueued::Write() _worldPacket << Hdr; _worldPacket << uint32(AverageWaitTime); _worldPacket << uint32(WaitTime); + _worldPacket << int32(Unused920); _worldPacket.WriteBit(AsGroup); _worldPacket.WriteBit(EligibleForMatchmaking); _worldPacket.WriteBit(SuspendedQueue); @@ -362,6 +365,7 @@ WorldPacket const* WorldPackets::Battleground::PVPMatchComplete::Write() _worldPacket << uint8(Winner); _worldPacket << Duration; _worldPacket.WriteBit(LogData.has_value()); + _worldPacket.WriteBits(SoloShuffleStatus, 2); _worldPacket.FlushBits(); if (LogData) diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index 8fb18dd241f..f5af61fe805 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -37,9 +37,10 @@ namespace WorldPackets WorldPacket const* Write() override; - int32 MythicPlusSeasonID = 0; - int32 PreviousSeason = 0; - int32 CurrentSeason = 0; + int32 MythicPlusDisplaySeasonID = 0; + int32 MythicPlusMilestoneSeasonID = 0; + int32 PreviousArenaSeason = 0; + int32 CurrentArenaSeason = 0; int32 PvpSeasonID = 0; int32 ConquestWeeklyProgressCurrencyID = 0; bool WeeklyRewardChestsEnabled = false; @@ -141,6 +142,7 @@ namespace WorldPackets int32 Class = 0; int32 CreatureID = 0; int32 HonorLevel = 0; + int32 Role = 0; }; std::vector<PVPMatchPlayerStatistics> Statistics; @@ -221,6 +223,7 @@ namespace WorldPackets bool SuspendedQueue = false; bool EligibleForMatchmaking = false; uint32 WaitTime = 0; + int32 Unused920 = 0; }; class BattlefieldStatusFailed final : public ServerPacket @@ -493,6 +496,7 @@ namespace WorldPackets uint8 Winner = 0; WorldPackets::Duration<Seconds> Duration; Optional<PVPMatchStatistics> LogData; + uint32 SoloShuffleStatus = 0; }; } } diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp index efb1eb4809e..2cf1eec9701 100644 --- a/src/server/game/Server/Packets/ChatPackets.cpp +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -205,6 +205,7 @@ WorldPacket const* WorldPackets::Chat::Emote::Write() _worldPacket << Guid; _worldPacket << uint32(EmoteID); _worldPacket << uint32(SpellVisualKitIDs.size()); + _worldPacket << int32(SequenceVariation); if (!SpellVisualKitIDs.empty()) _worldPacket.append(SpellVisualKitIDs.data(), SpellVisualKitIDs.size()); @@ -217,6 +218,7 @@ void WorldPackets::Chat::CTextEmote::Read() _worldPacket >> EmoteID; _worldPacket >> SoundIndex; SpellVisualKitIDs.resize(_worldPacket.read<uint32>()); + _worldPacket >> SequenceVariation; for (int32& spellVisualKitId : SpellVisualKitIDs) _worldPacket >> spellVisualKitId; } diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index 2b23f2f2562..6c6515a6848 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -189,6 +189,7 @@ namespace WorldPackets ObjectGuid Guid; uint32 EmoteID = 0; std::vector<int32> SpellVisualKitIDs; + int32 SequenceVariation = 0; }; class CTextEmote final : public ClientPacket @@ -202,6 +203,7 @@ namespace WorldPackets int32 EmoteID = 0; int32 SoundIndex = -1; Array<int32, 2> SpellVisualKitIDs; + int32 SequenceVariation = 0; }; class STextEmote final : public ServerPacket diff --git a/src/server/game/Server/Packets/ClientConfigPackets.h b/src/server/game/Server/Packets/ClientConfigPackets.h index c5b6762330d..5d6ffcccec6 100644 --- a/src/server/game/Server/Packets/ClientConfigPackets.h +++ b/src/server/game/Server/Packets/ClientConfigPackets.h @@ -29,7 +29,7 @@ namespace WorldPackets class AccountDataTimes final : public ServerPacket { public: - AccountDataTimes() : ServerPacket(SMSG_ACCOUNT_DATA_TIMES, 4 + 4 * NUM_ACCOUNT_DATA_TYPES) { } + AccountDataTimes() : ServerPacket(SMSG_ACCOUNT_DATA_TIMES, 16 + 8 + 8 * NUM_ACCOUNT_DATA_TYPES) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/GameObjectPackets.cpp b/src/server/game/Server/Packets/GameObjectPackets.cpp index 2baf6ec206d..4e6cc5d7324 100644 --- a/src/server/game/Server/Packets/GameObjectPackets.cpp +++ b/src/server/game/Server/Packets/GameObjectPackets.cpp @@ -74,6 +74,7 @@ WorldPacket const* WorldPackets::GameObject::GameObjectUILink::Write() { _worldPacket << ObjectGUID; _worldPacket << int32(UILink); + _worldPacket << int32(UIItemInteractionID); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/GameObjectPackets.h b/src/server/game/Server/Packets/GameObjectPackets.h index 234cf0dee6c..91d795a15ae 100644 --- a/src/server/game/Server/Packets/GameObjectPackets.h +++ b/src/server/game/Server/Packets/GameObjectPackets.h @@ -128,6 +128,7 @@ namespace WorldPackets ObjectGuid ObjectGUID; int32 UILink = 0; + int32 UIItemInteractionID = 0; }; class GameObjectPlaySpellVisual final : public ServerPacket diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index 86cba613250..b37b438046c 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -29,7 +29,6 @@ WorldPackets::Guild::QueryGuildInfoResponse::QueryGuildInfoResponse() WorldPacket const* WorldPackets::Guild::QueryGuildInfoResponse::Write() { _worldPacket << GuildGuid; - _worldPacket << PlayerGuid; _worldPacket.WriteBit(Info.has_value()); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h index e195e185904..abba85cf2e5 100644 --- a/src/server/game/Server/Packets/GuildPackets.h +++ b/src/server/game/Server/Packets/GuildPackets.h @@ -75,7 +75,6 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid GuildGuid; - ObjectGuid PlayerGuid; Optional<GuildInfo> Info; }; diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index b32a182d916..efb9da38cc6 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -640,6 +640,7 @@ WorldPacket const* WorldPackets::Misc::AccountHeirloomUpdate::Write() void WorldPackets::Misc::MountSpecial::Read() { SpellVisualKitIDs.resize(_worldPacket.read<uint32>()); + _worldPacket >> SequenceVariation; for (int32& spellVisualKitId : SpellVisualKitIDs) _worldPacket >> spellVisualKitId; } @@ -648,6 +649,7 @@ WorldPacket const* WorldPackets::Misc::SpecialMountAnim::Write() { _worldPacket << UnitGUID; _worldPacket << uint32(SpellVisualKitIDs.size()); + _worldPacket << int32(SequenceVariation); if (!SpellVisualKitIDs.empty()) _worldPacket.append(SpellVisualKitIDs.data(), SpellVisualKitIDs.size()); diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index fe552a4df20..5bf83f35970 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -833,6 +833,7 @@ namespace WorldPackets void Read() override; Array<int32, 2> SpellVisualKitIDs; + int32 SequenceVariation = 0; }; class SpecialMountAnim final : public ServerPacket @@ -844,6 +845,7 @@ namespace WorldPackets ObjectGuid UnitGUID; std::vector<int32> SpellVisualKitIDs; + int32 SequenceVariation = 0; }; class CrossedInebriationThreshold final : public ServerPacket diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 5aac9eaffca..91bc6753d4c 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -28,51 +28,60 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo) bool hasFallDirection = movementInfo.HasMovementFlag(MOVEMENTFLAG_FALLING | MOVEMENTFLAG_FALLING_FAR); bool hasFallData = hasFallDirection || movementInfo.jump.fallTime != 0; bool hasSpline = false; // todo 6.x send this infos + bool hasInertia = movementInfo.inertia.has_value(); data << movementInfo.guid; - data << movementInfo.time; + data << uint32(movementInfo.flags); + data << uint32(movementInfo.flags2); + data << uint32(movementInfo.flags3); + data << uint32(movementInfo.time); data << movementInfo.pos.PositionXYZOStream(); - data << movementInfo.pitch; - data << movementInfo.splineElevation; + data << float(movementInfo.pitch); + data << float(movementInfo.splineElevation); uint32 removeMovementForcesCount = 0; data << removeMovementForcesCount; - uint32 int168 = 0; - data << int168; + uint32 moveIndex = 0; + data << moveIndex; /*for (uint32 i = 0; i < removeMovementForcesCount; ++i) { data << ObjectGuid; }*/ - data.WriteBits(movementInfo.flags, 30); - data.WriteBits(movementInfo.flags2, 18); - data.WriteBit(hasTransportData); data.WriteBit(hasFallData); data.WriteBit(hasSpline); data.WriteBit(false); // HeightChangeFailed data.WriteBit(false); // RemoteTimeValid + data.WriteBit(hasInertia); data.FlushBits(); if (hasTransportData) data << movementInfo.transport; + if (hasInertia) + { + data << movementInfo.inertia->guid; + data << movementInfo.inertia->force.PositionXYZStream(); + data << uint32(movementInfo.inertia->lifetime); + } + if (hasFallData) { - data << movementInfo.jump.fallTime; - data << movementInfo.jump.zspeed; + data << uint32(movementInfo.jump.fallTime); + data << float(movementInfo.jump.zspeed); data.WriteBit(hasFallDirection); data.FlushBits(); if (hasFallDirection) { - data << movementInfo.jump.sinAngle; - data << movementInfo.jump.cosAngle; - data << movementInfo.jump.xyspeed; + data << float(movementInfo.jump.sinAngle); + data << float(movementInfo.jump.cosAngle); + data << float(movementInfo.jump.xyspeed); } } @@ -84,6 +93,9 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo) //bool hasSpline = false; data >> movementInfo.guid; + data >> movementInfo.flags; + data >> movementInfo.flags2; + data >> movementInfo.flags3; data >> movementInfo.time; data >> movementInfo.pos.PositionXYZOStream(); data >> movementInfo.pitch; @@ -101,19 +113,26 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo) data >> guid; } - movementInfo.flags = data.ReadBits(30); - movementInfo.flags2 = data.ReadBits(18); - bool hasTransport = data.ReadBit(); bool hasFall = data.ReadBit(); /*hasSpline = */data.ReadBit(); // todo 6.x read this infos data.ReadBit(); // HeightChangeFailed data.ReadBit(); // RemoteTimeValid + bool hasInertia = data.ReadBit(); if (hasTransport) data >> movementInfo.transport; + if (hasInertia) + { + movementInfo.inertia.emplace(); + + data >> movementInfo.inertia->guid; + data >> movementInfo.inertia->force.PositionXYZStream(); + data >> movementInfo.inertia->lifetime; + } + if (hasFall) { data >> movementInfo.jump.fallTime; @@ -347,9 +366,9 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(:: bool hasFadeObjectTime = data.WriteBit(moveSpline.splineflags.fadeObject && moveSpline.effect_start_time < moveSpline.Duration()); data.WriteBits(moveSpline.getPath().size(), 16); data.WriteBit(false); // HasSplineFilter - data.WriteBit(moveSpline.spell_effect_extra.has_value()); // HasSpellEffectExtraData + data.WriteBit(moveSpline.spell_effect_extra.has_value()); // HasSpellEffectExtraData bool hasJumpExtraData = data.WriteBit(moveSpline.splineflags.parabolic && (!moveSpline.spell_effect_extra || moveSpline.effect_start_time)); - data.WriteBit(moveSpline.anim_tier.has_value()); // HasAnimationTierTransition + data.WriteBit(moveSpline.anim_tier.has_value()); // HasAnimationTierTransition data.WriteBit(false); // HasUnknown901 data.FlushBits(); @@ -1000,6 +1019,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound data.WriteBit(stateChange.CollisionHeight.has_value()); data.WriteBit(stateChange.MovementForce_.has_value()); data.WriteBit(stateChange.MovementForceGUID.has_value()); + data.WriteBit(stateChange.MovementInertiaGUID.has_value()); + data.WriteBit(stateChange.MovementInertiaLifetimeMs.has_value()); data.FlushBits(); if (stateChange.MovementForce_) @@ -1028,6 +1049,12 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound if (stateChange.MovementForceGUID) data << *stateChange.MovementForceGUID; + if (stateChange.MovementInertiaGUID) + data << *stateChange.MovementInertiaGUID; + + if (stateChange.MovementInertiaLifetimeMs) + data << uint32(*stateChange.MovementInertiaLifetimeMs); + return data; } diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index 25a7cbd85b0..a44b9bf2871 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -682,6 +682,8 @@ namespace WorldPackets Optional<CollisionHeightInfo> CollisionHeight; Optional<MovementForce> MovementForce_; Optional<ObjectGuid> MovementForceGUID; + Optional<ObjectGuid> MovementInertiaGUID; + Optional<uint32> MovementInertiaLifetimeMs; }; MoveSetCompoundState() : ServerPacket(SMSG_MOVE_SET_COMPOUND_STATE, 4 + 1) { } diff --git a/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp b/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp index fd20e6fd25c..296e62bd3f0 100644 --- a/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp +++ b/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp @@ -36,6 +36,7 @@ ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreMapSummary const& dungeonSc ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreSummary const& dungeonScoreSummary) { data << float(dungeonScoreSummary.CurrentSeasonScore); + data << float(dungeonScoreSummary.LifetimeBestSeasonScore); data << uint32(dungeonScoreSummary.Runs.size()); for (DungeonScoreMapSummary const& dungeonScoreMapSummary : dungeonScoreSummary.Runs) data << dungeonScoreMapSummary; @@ -51,7 +52,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MythicPlusMember const& mythicPlusMembe data << mythicPlusMember.GuildGUID; data << uint32(mythicPlusMember.NativeRealmAddress); data << uint32(mythicPlusMember.VirtualRealmAddress); - data << int16(mythicPlusMember.ChrSpecializationID); + data << int32(mythicPlusMember.ChrSpecializationID); data << int16(mythicPlusMember.RaceID); data << int32(mythicPlusMember.ItemLevel); data << int32(mythicPlusMember.CovenantID); @@ -104,7 +105,12 @@ ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreSeasonData const& dungeonSc { data << int32(dungeonScoreSeasonData.Season); data << uint32(dungeonScoreSeasonData.Maps.size()); + data << uint32(0); data << float(dungeonScoreSeasonData.SeasonScore); + data << float(0); + for (DungeonScoreMapData const& map : dungeonScoreSeasonData.Maps) + data << map; + for (DungeonScoreMapData const& map : dungeonScoreSeasonData.Maps) data << map; diff --git a/src/server/game/Server/Packets/MythicPlusPacketsCommon.h b/src/server/game/Server/Packets/MythicPlusPacketsCommon.h index c78c07fa3ad..2e938f8b5c7 100644 --- a/src/server/game/Server/Packets/MythicPlusPacketsCommon.h +++ b/src/server/game/Server/Packets/MythicPlusPacketsCommon.h @@ -28,7 +28,7 @@ namespace WorldPackets struct DungeonScoreMapSummary { int32 ChallengeModeID = 0; - float MapScore = 0; + float MapScore = 0.0f; int32 BestRunLevel = 0; int32 BestRunDurationMS = 0; bool FinishedSuccess = false; @@ -36,7 +36,8 @@ namespace WorldPackets struct DungeonScoreSummary { - float CurrentSeasonScore = 0; + float CurrentSeasonScore = 0.0f; + float LifetimeBestSeasonScore = 0.0f; std::vector<DungeonScoreMapSummary> Runs; }; @@ -48,7 +49,7 @@ namespace WorldPackets ObjectGuid GuildGUID; uint32 NativeRealmAddress = 0; uint32 VirtualRealmAddress = 0; - int16 ChrSpecializationID = 0; + int32 ChrSpecializationID = 0; int16 RaceID = 0; int32 ItemLevel = 0; int32 CovenantID = 0; @@ -63,9 +64,9 @@ namespace WorldPackets int32 DurationMs = 0; Timestamp<> StartDate; Timestamp<> CompletionDate; - int32 Season; + int32 Season = 0; std::vector<MythicPlusMember> Members; - float RunScore; + float RunScore = 0.0f; std::array<int32, 4> KeystoneAffixIDs; }; @@ -73,14 +74,14 @@ namespace WorldPackets { int32 KeystoneAffixID = 0; MythicPlusRun Run; - float Score = 0; + float Score = 0.0f; }; struct DungeonScoreMapData { int32 MapChallengeModeID = 0; std::vector<DungeonScoreBestRunForAffix> BestRuns; - float OverAllScore = 0; + float OverAllScore = 0.0f; }; @@ -88,7 +89,7 @@ namespace WorldPackets { int32 Season = 0; std::vector<DungeonScoreMapData> Maps; - float SeasonScore = 0; + float SeasonScore = 0.0f; }; struct DungeonScoreData diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp index 1ddf5378c4e..a15163200ed 100644 --- a/src/server/game/Server/Packets/NPCPackets.cpp +++ b/src/server/game/Server/Packets/NPCPackets.cpp @@ -77,6 +77,7 @@ WorldPacket const* GossipMessage::Write() _worldPacket << uint8(options.OptionNPC); _worldPacket << int8(options.OptionFlags); _worldPacket << int32(options.OptionCost); + _worldPacket << uint32(options.OptionLanguage); _worldPacket.WriteBits(options.Text.size(), 12); _worldPacket.WriteBits(options.Confirm.size(), 12); _worldPacket.WriteBits(AsUnderlyingType(options.Status), 2); @@ -170,6 +171,14 @@ void GossipSelectOption::Read() PromotionCode = _worldPacket.ReadString(length); } +WorldPacket const* GossipComplete::Write() +{ + _worldPacket.WriteBit(SuppressSound); + _worldPacket.FlushBits(); + + return &_worldPacket; +} + WorldPacket const* PlayerTabardVendorActivate::Write() { _worldPacket << Vendor; diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index 320594ffd2f..f6740feb703 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -67,6 +67,7 @@ namespace WorldPackets GossipOptionIcon OptionNPC = GossipOptionIcon(0); uint8 OptionFlags = 0; int32 OptionCost = 0; + uint32 OptionLanguage = 0; GossipOptionStatus Status = GossipOptionStatus(0); std::string Text; std::string Confirm; @@ -119,7 +120,9 @@ namespace WorldPackets public: GossipComplete() : ServerPacket(SMSG_GOSSIP_COMPLETE, 0) { } - WorldPacket const* Write() override { return &_worldPacket; } + WorldPacket const* Write() override; + + bool SuppressSound = false; }; struct VendorItem diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index 8cb66be37f3..360fa5d1bf6 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -102,7 +102,9 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write() void WorldPackets::Query::QueryPlayerName::Read() { - _worldPacket >> Player; + Players.resize(_worldPacket.read<uint32>()); + for (ObjectGuid& player : Players) + _worldPacket >> player; } ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupHint const& lookupHint) @@ -188,13 +190,40 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupDa return data; } -WorldPacket const* WorldPackets::Query::QueryPlayerNameResponse::Write() +ByteBuffer operator<<(ByteBuffer& data, WorldPackets::Query::NameCacheUnused920 const& thing) { - _worldPacket << uint8(Result); - _worldPacket << Player; + data << uint32(thing.Unused1); + data << thing.Unused2; + data.WriteBits(thing.Unused3.length(), 7); + data.FlushBits(); + + data.WriteString(thing.Unused3); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::NameCacheLookupResult const& result) +{ + data << uint8(result.Result); + data << result.Player; + data.WriteBit(result.Data.has_value()); + data.WriteBit(result.Unused920.has_value()); + data.FlushBits(); + + if (result.Data) + data << *result.Data; - if (Result == RESPONSE_SUCCESS) - _worldPacket << Data; + if (result.Unused920) + data << *result.Unused920; + + return data; +} + +WorldPacket const* WorldPackets::Query::QueryPlayerNameResponse::Write() +{ + _worldPacket << uint32(Players.size()); + for (NameCacheLookupResult const& lookupResult : Players) + _worldPacket << lookupResult; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index 90c467fb372..b429c9f1052 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -111,7 +111,7 @@ namespace WorldPackets void Read() override; - ObjectGuid Player; + Array<ObjectGuid, 500> Players; }; struct PlayerGuidLookupData @@ -133,6 +133,21 @@ namespace WorldPackets DeclinedName DeclinedNames; }; + struct NameCacheUnused920 + { + uint32 Unused1 = 0; + ObjectGuid Unused2; + std::string_view Unused3; + }; + + struct NameCacheLookupResult + { + ObjectGuid Player; + uint8 Result = 0; // 0 - full packet, != 0 - only guid + Optional<PlayerGuidLookupData> Data; + Optional<NameCacheUnused920> Unused920; + }; + class QueryPlayerNameResponse final : public ServerPacket { public: @@ -140,9 +155,7 @@ namespace WorldPackets WorldPacket const* Write() override; - ObjectGuid Player; - uint8 Result = 0; // 0 - full packet, != 0 - only guid - PlayerGuidLookupData Data; + std::vector<NameCacheLookupResult> Players; }; class QueryPageText final : public ClientPacket diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 4fa60c84f52..955c792faff 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -683,11 +683,18 @@ ByteBuffer& operator<<(ByteBuffer& data, PlayerChoiceResponseMawPower const& pla { data << int32(playerChoiceResponseMawPower.Unused901_1); data << int32(playerChoiceResponseMawPower.TypeArtFileID); - data << int32(playerChoiceResponseMawPower.Rarity); - data << uint32(playerChoiceResponseMawPower.RarityColor); data << int32(playerChoiceResponseMawPower.Unused901_2); data << int32(playerChoiceResponseMawPower.SpellID); data << int32(playerChoiceResponseMawPower.MaxStacks); + data.WriteBit(playerChoiceResponseMawPower.Rarity.has_value()); + data.WriteBit(playerChoiceResponseMawPower.RarityColor.has_value()); + data.FlushBits(); + + if (playerChoiceResponseMawPower.Rarity) + data << int32(*playerChoiceResponseMawPower.Rarity); + + if (playerChoiceResponseMawPower.RarityColor) + data << uint32(*playerChoiceResponseMawPower.RarityColor); return data; } @@ -741,8 +748,11 @@ WorldPacket const* DisplayPlayerChoice::Write() _worldPacket << SenderGUID; _worldPacket << int32(UiTextureKitID); _worldPacket << uint32(SoundKitID); + _worldPacket << uint32(CloseUISoundKitID); _worldPacket << uint8(NumRerolls); + _worldPacket << Duration; _worldPacket.WriteBits(Question.length(), 8); + _worldPacket.WriteBits(PendingChoiceText.length(), 8); _worldPacket.WriteBit(CloseChoiceFrame); _worldPacket.WriteBit(HideWarboardHeader); _worldPacket.WriteBit(KeepOpenAfterChoice); @@ -752,6 +762,7 @@ WorldPacket const* DisplayPlayerChoice::Write() _worldPacket << response; _worldPacket.WriteString(Question); + _worldPacket.WriteString(PendingChoiceText); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 22d5d79acc7..69580d036b8 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -678,8 +678,8 @@ namespace WorldPackets { int32 Unused901_1 = 0; int32 TypeArtFileID = 0; - int32 Rarity = 0; - uint32 RarityColor = 0; + Optional<int32> Rarity; + Optional<uint32> RarityColor; int32 Unused901_2 = 0; int32 SpellID = 0; int32 MaxStacks = 0; @@ -696,12 +696,12 @@ namespace WorldPackets uint32 SoundKitID = 0; uint8 GroupID = 0; int32 UiTextureKitID = 0; - std::string Answer; - std::string Header; - std::string SubHeader; - std::string ButtonTooltip; - std::string Description; - std::string Confirmation; + std::string_view Answer; + std::string_view Header; + std::string_view SubHeader; + std::string_view ButtonTooltip; + std::string_view Description; + std::string_view Confirmation; Optional<PlayerChoiceResponseReward> Reward; Optional<uint32> RewardQuestID; Optional<PlayerChoiceResponseMawPower> MawPower; @@ -718,8 +718,11 @@ namespace WorldPackets int32 ChoiceID = 0; int32 UiTextureKitID = 0; uint32 SoundKitID = 0; + uint32 CloseUISoundKitID = 0; uint8 NumRerolls = 0; - std::string Question; + WorldPackets::Duration<Seconds> Duration; + std::string_view Question; + std::string_view PendingChoiceText; std::vector<PlayerChoiceResponse> Responses; bool CloseChoiceFrame = false; bool HideWarboardHeader = false; diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index fbb59fea3a8..00df82c311f 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -43,6 +43,13 @@ ByteBuffer& operator<<(ByteBuffer& data, EuropaTicketConfig const& europaTicketS return data; } +WorldPacket operator<<(WorldPacket& data, GameRuleValuePair const& gameRuleValue) +{ + data << int32(gameRuleValue.Rule); + data << int32(gameRuleValue.Value); + return data; +} + WorldPacket const* FeatureSystemStatus::Write() { _worldPacket << uint8(ComplaintStatus); @@ -70,6 +77,14 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket << uint32(ClubsPresenceUpdateTimer); _worldPacket << uint32(HiddenUIClubsPresenceUpdateTimer); + _worldPacket << int32(GameRuleUnknown1); + _worldPacket << uint32(GameRuleValues.size()); + + _worldPacket << int16(MaxPlayerNameQueriesPerPacket); + + for (GameRuleValuePair const& gameRuleValue : GameRuleValues) + _worldPacket << gameRuleValue; + _worldPacket.WriteBit(VoiceEnabled); _worldPacket.WriteBit(EuropaTicketSystemStatus.has_value()); _worldPacket.WriteBit(ScrollOfResurrectionEnabled); @@ -189,10 +204,16 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket << int32(ActiveClassTrialBoostType); _worldPacket << int32(MinimumExpansionLevel); _worldPacket << int32(MaximumExpansionLevel); + _worldPacket << int32(GameRuleUnknown1); + _worldPacket << uint32(GameRuleValues.size()); + _worldPacket << int16(MaxPlayerNameQueriesPerPacket); if (!LiveRegionCharacterCopySourceRegions.empty()) _worldPacket.append(LiveRegionCharacterCopySourceRegions.data(), LiveRegionCharacterCopySourceRegions.size()); + for (GameRuleValuePair const& gameRuleValue : GameRuleValues) + _worldPacket << gameRuleValue; + return &_worldPacket; } diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index 6fe675f18eb..adbd9886088 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -44,6 +44,12 @@ namespace WorldPackets SavedThrottleObjectState ThrottleState; }; + struct GameRuleValuePair + { + int32 Rule = 0; + int32 Value = 0; + }; + class FeatureSystemStatus final : public ServerPacket { public: @@ -122,6 +128,8 @@ namespace WorldPackets uint32 ClubsPresenceUpdateTimer = 0; uint32 HiddenUIClubsPresenceUpdateTimer = 0; ///< Timer for updating club presence when communities ui frame is hidden uint32 KioskSessionMinutes = 0; + int32 GameRuleUnknown1 = 0; + int16 MaxPlayerNameQueriesPerPacket = 50; bool ItemRestorationButtonEnabled = false; bool CharUndeleteEnabled = false; ///< Implemented bool BpayStoreDisabledByParentalControls = false; @@ -154,6 +162,7 @@ namespace WorldPackets SocialQueueConfig QuickJoinConfig; SquelchInfo Squelch; RafSystemFeatureInfo RAFSystem; + std::vector<GameRuleValuePair> GameRuleValues; }; class FeatureSystemStatusGlueScreen final : public ServerPacket @@ -191,6 +200,9 @@ namespace WorldPackets int32 MinimumExpansionLevel = 0; int32 MaximumExpansionLevel = 0; uint32 KioskSessionMinutes = 0; + int32 GameRuleUnknown1 = 0; + std::vector<GameRuleValuePair> GameRuleValues; + int16 MaxPlayerNameQueriesPerPacket = 50; }; class MOTD final : public ServerPacket diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 8b72d1e3bd0..928aa56fd54 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -334,6 +334,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CLUB_PRESENCE_SUBSCRIBE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COLLECTION_ITEM_SET_FAVORITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCollectionItemSetFavorite); + DEFINE_HANDLER(CMSG_COMMENTATOR_SPECTATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COMMENTATOR_ENABLE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COMMENTATOR_ENTER_INSTANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COMMENTATOR_EXIT_INSTANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -555,6 +556,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_MOUNT_CLEAR_FANFARE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOUNT_SET_FAVORITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMountSetFavorite); DEFINE_HANDLER(CMSG_MOUNT_SPECIAL_ANIM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMountSpecialAnimOpcode); + DEFINE_HANDLER(CMSG_MOVE_APPLY_INERTIA_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveApplyMovementForceAck); DEFINE_HANDLER(CMSG_MOVE_CHANGE_TRANSPORT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); DEFINE_HANDLER(CMSG_MOVE_CHANGE_VEHICLE_SEATS, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveChangeVehicleSeats); @@ -583,9 +585,12 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_MOVE_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveGuildBankItem); DEFINE_HANDLER(CMSG_MOVE_HEARTBEAT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); + DEFINE_HANDLER(CMSG_MOVE_INERTIA_DISABLE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_INERTIA_ENABLE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_JUMP, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); DEFINE_HANDLER(CMSG_MOVE_KNOCK_BACK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveKnockBackAck); + DEFINE_HANDLER(CMSG_MOVE_REMOVE_INERTIA_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCES, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveRemoveMovementForceAck); DEFINE_HANDLER(CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); @@ -593,6 +598,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_SET_COLLISION_HEIGHT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetCollisionHeightAck); DEFINE_HANDLER(CMSG_MOVE_SET_FACING, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); + DEFINE_HANDLER(CMSG_MOVE_SET_FACING_HEARTBEAT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); DEFINE_HANDLER(CMSG_MOVE_SET_FLY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); DEFINE_HANDLER(CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSetModMovementForceMagnitudeAck); @@ -899,6 +905,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_USE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUseEquipmentSet); DEFINE_HANDLER(CMSG_USE_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUseItemOpcode); DEFINE_HANDLER(CMSG_USE_TOY, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUseToy); + DEFINE_HANDLER(CMSG_VAS_ASSIGN_DISTRIBUTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_VAS_CHECK_TRANSFER_OK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_VAS_GET_QUEUE_MINUTES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_VAS_GET_SERVICE_STATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -1007,6 +1014,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_PORT_DENIED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_ACTIVE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_GROUP_PROPOSAL_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_NONE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_STATUS_QUEUED, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1143,6 +1151,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLAIM_RAF_REWARD_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_ALL_SPELL_CHARGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_ARENA_UNIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_BOSS_EMOTES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_COOLDOWNS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1209,7 +1218,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_DESTROY_ARENA_UNIT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DIFFERENT_INSTANCE_FROM_PARTY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISCONNECT_REASON, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISENCHANT_CREDIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISMOUNT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISPEL_FAILED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1467,6 +1475,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_ENCHANT_TIME_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_EXPIRE_PURCHASE_REFUND, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_INTERACTION_CHARGE_INFO_UPDATED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_INTERACTION_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_PURCHASE_REFUND_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_PUSH_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1544,16 +1553,20 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOTD, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOUNT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVEMENT_ENFORCEMENT_ALERT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_APPLY_INERTIA, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_APPLY_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_COLLISION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_DOUBLE_JUMP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_INERTIA, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_GRAVITY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_COLLISION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_DOUBLE_JUMP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_INERTIA, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_GRAVITY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_KNOCK_BACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_REMOVE_INERTIA, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_REMOVE_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ROOT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ACTIVE_MOVER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1613,6 +1626,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVERING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_APPLY_INERTIA, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_COLLISION_HEIGHT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1620,6 +1634,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_KNOCK_BACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_MOD_MOVEMENT_FORCE_MAGNITUDE,STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_PITCH_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_REMOVE_INERTIA, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1661,6 +1676,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_PARTIAL_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PASSED_TIME_EVENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PAUSE_MIRROR_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PENDING_RAID_LOCK, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_ALREADY_SIGNED, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2007,6 +2023,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_REMOVE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_USE_EQUIPMENT_SET_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_VAS_ASSIGN_DISTRIBUTION_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VAS_GET_SERVICE_STATUS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 61cb9c1460b..9ea2c9fa15e 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -44,31 +44,31 @@ enum OpcodeMisc : uint16 enum OpcodeClient : uint16 { - CMSG_ABANDON_NPE_RESPONSE = 0x33F0, + CMSG_ABANDON_NPE_RESPONSE = 0x33F2, CMSG_ACCEPT_GUILD_INVITE = 0x35FC, CMSG_ACCEPT_TRADE = 0x315A, CMSG_ACCEPT_WARGAME_INVITE = 0x35E0, CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3732, - CMSG_ACTIVATE_SOULBIND = 0x33DF, + CMSG_ACTIVATE_SOULBIND = 0x33E1, CMSG_ACTIVATE_TAXI = 0x34B1, CMSG_ADDON_LIST = 0x35D8, - CMSG_ADD_ACCOUNT_COSMETIC = 0x32AA, + CMSG_ADD_ACCOUNT_COSMETIC = 0x32A9, CMSG_ADD_BATTLENET_FRIEND = 0x365A, CMSG_ADD_FRIEND = 0x36CD, CMSG_ADD_IGNORE = 0x36D1, - CMSG_ADD_TOY = 0x32A9, - CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3206, - CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33E2, - CMSG_ADVENTURE_MAP_START_QUEST = 0x335F, + CMSG_ADD_TOY = 0x32A8, + CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3205, + CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33E4, + CMSG_ADVENTURE_MAP_START_QUEST = 0x3360, CMSG_ALTER_APPEARANCE = 0x3503, CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B6, CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B7, - CMSG_AREA_TRIGGER = 0x31D9, + CMSG_AREA_TRIGGER = 0x31D8, CMSG_ARTIFACT_ADD_POWER = 0x31AB, CMSG_ARTIFACT_SET_APPEARANCE = 0x31AD, - CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3212, - CMSG_ATTACK_STOP = 0x3261, - CMSG_ATTACK_SWING = 0x3260, + CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3211, + CMSG_ATTACK_STOP = 0x3260, + CMSG_ATTACK_SWING = 0x325F, CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E3, CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E4, CMSG_AUCTION_BROWSE_QUERY = 0x34D6, @@ -98,15 +98,15 @@ enum OpcodeClient : uint16 CMSG_AUTO_GUILD_BANK_ITEM = 0x34BD, CMSG_AUTO_STORE_BAG_ITEM = 0x399B, CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x34C6, - CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3387, - CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x336A, - CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x3389, - CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3388, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3388, + CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x336B, + CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x338A, + CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3389, CMSG_BANKER_ACTIVATE = 0x34B9, CMSG_BATTLEFIELD_LEAVE = 0x3173, CMSG_BATTLEFIELD_LIST = 0x317F, CMSG_BATTLEFIELD_PORT = 0x3537, - CMSG_BATTLEMASTER_HELLO = 0x32C4, + CMSG_BATTLEMASTER_HELLO = 0x32C5, CMSG_BATTLEMASTER_JOIN = 0x3530, CMSG_BATTLEMASTER_JOIN_ARENA = 0x3531, CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3535, @@ -132,21 +132,21 @@ enum OpcodeClient : uint16 CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362D, CMSG_BATTLE_PET_SET_FLAGS = 0x3630, CMSG_BATTLE_PET_SUMMON = 0x3629, - CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31E3, - CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E2, + CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31E2, + CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E1, CMSG_BEGIN_TRADE = 0x3157, CMSG_BINDER_ACTIVATE = 0x34B8, CMSG_BLACK_MARKET_BID_ON_ITEM = 0x353F, CMSG_BLACK_MARKET_OPEN = 0x353D, CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x353E, - CMSG_BONUS_ROLL = 0x338A, + CMSG_BONUS_ROLL = 0x338B, CMSG_BUG_REPORT = 0x3685, CMSG_BUSY_TRADE = 0x3158, CMSG_BUY_BACK_ITEM = 0x34AA, CMSG_BUY_BANK_SLOT = 0x34BA, CMSG_BUY_ITEM = 0x34A9, CMSG_BUY_REAGENT_BANK = 0x34BB, - CMSG_CAGE_BATTLE_PET = 0x31F5, + CMSG_CAGE_BATTLE_PET = 0x31F4, CMSG_CALENDAR_ADD_EVENT = 0x367D, CMSG_CALENDAR_COMMUNITY_INVITE = 0x3671, CMSG_CALENDAR_COMPLAIN = 0x3679, @@ -164,22 +164,22 @@ enum OpcodeClient : uint16 CMSG_CALENDAR_UPDATE_EVENT = 0x367E, CMSG_CANCEL_AURA = 0x31AF, CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34F5, - CMSG_CANCEL_CAST = 0x32B0, - CMSG_CANCEL_CHANNELLING = 0x3279, - CMSG_CANCEL_GROWTH_AURA = 0x327E, - CMSG_CANCEL_MASTER_LOOT_ROLL = 0x321A, + CMSG_CANCEL_CAST = 0x32AF, + CMSG_CANCEL_CHANNELLING = 0x3278, + CMSG_CANCEL_GROWTH_AURA = 0x327D, + CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3219, CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AE, - CMSG_CANCEL_MOUNT_AURA = 0x3291, + CMSG_CANCEL_MOUNT_AURA = 0x3290, CMSG_CANCEL_QUEUED_SPELL = 0x3180, CMSG_CANCEL_TEMP_ENCHANTMENT = 0x3500, CMSG_CANCEL_TRADE = 0x315C, CMSG_CAN_DUEL = 0x3662, CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3704, - CMSG_CAST_SPELL = 0x32AD, + CMSG_CAST_SPELL = 0x32AC, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x3090, - CMSG_CHANGE_BAG_SLOT_FLAG = 0x3344, - CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3345, - CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3325, + CMSG_CHANGE_BAG_SLOT_FLAG = 0x3345, + CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3346, + CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3326, CMSG_CHANGE_REALM_TICKET = 0x36F7, CMSG_CHANGE_SUB_GROUP = 0x364C, CMSG_CHARACTER_CHECK_UPGRADE = 0x36C3, @@ -226,17 +226,17 @@ enum OpcodeClient : uint16 CMSG_CHAT_REPORT_IGNORED = 0x37CB, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE, CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3645, - CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3252, + CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3251, CMSG_CHOICE_RESPONSE = 0x32B4, - CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33DE, - CMSG_CLAIM_WEEKLY_REWARD = 0x33BB, + CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33E0, + CMSG_CLAIM_WEEKLY_REWARD = 0x33BC, CMSG_CLEAR_NEW_APPEARANCE = 0x312F, CMSG_CLEAR_RAID_MARKER = 0x31A7, CMSG_CLEAR_TRADE_ITEM = 0x315E, CMSG_CLIENT_PORT_GRAVEYARD = 0x3539, CMSG_CLOSE_INTERACTION = 0x3499, CMSG_CLOSE_QUEST_CHOICE = 0x32B5, - CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E6, + CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E8, CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371B, CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x3719, CMSG_CLUB_FINDER_POST = 0x3716, @@ -254,6 +254,7 @@ enum OpcodeClient : uint16 CMSG_COMMENTATOR_GET_MAP_INFO = 0x35F1, CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x35F3, CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F2, + CMSG_COMMENTATOR_SPECTATE = 0x3737, CMSG_COMMENTATOR_START_WARGAME = 0x35EF, CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E1, CMSG_COMMERCE_TOKEN_GET_LOG = 0x36EB, @@ -262,29 +263,29 @@ enum OpcodeClient : uint16 CMSG_COMPLETE_CINEMATIC = 0x3557, CMSG_COMPLETE_MOVIE = 0x34EB, CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AC, - CMSG_CONFIRM_RESPEC_WIPE = 0x3214, + CMSG_CONFIRM_RESPEC_WIPE = 0x3213, CMSG_CONNECT_TO_FAILED = 0x35D4, CMSG_CONSUMABLE_TOKEN_BUY = 0x36E6, CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36E7, CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E5, CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36E9, CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36EA, - CMSG_CONTRIBUTION_CONTRIBUTE = 0x356A, - CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x356B, + CMSG_CONTRIBUTION_CONTRIBUTE = 0x356B, + CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x356C, CMSG_CONVERSATION_CINEMATIC_READY = 0x3559, CMSG_CONVERSATION_LINE_STARTED = 0x3558, CMSG_CONVERT_RAID = 0x364E, - CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x357E, + CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x357F, CMSG_CREATE_CHARACTER = 0x3644, - CMSG_CREATE_SHIPMENT = 0x3311, + CMSG_CREATE_SHIPMENT = 0x3312, CMSG_DB_QUERY_BULK = 0x35E4, CMSG_DECLINE_GUILD_INVITES = 0x352D, CMSG_DECLINE_PETITION = 0x3546, CMSG_DELETE_EQUIPMENT_SET = 0x3519, CMSG_DEL_FRIEND = 0x36CE, CMSG_DEL_IGNORE = 0x36D2, - CMSG_DEPOSIT_REAGENT_BANK = 0x334D, - CMSG_DESTROY_ITEM = 0x32A3, + CMSG_DEPOSIT_REAGENT_BANK = 0x334E, + CMSG_DESTROY_ITEM = 0x32A2, CMSG_DF_BOOT_PLAYER_VOTE = 0x3616, CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x3608, CMSG_DF_GET_JOIN_STATUS = 0x3614, @@ -295,13 +296,13 @@ enum OpcodeClient : uint16 CMSG_DF_READY_CHECK_RESPONSE = 0x3619, CMSG_DF_SET_ROLES = 0x3615, CMSG_DF_TELEPORT = 0x3617, - CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A3E, + CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A42, CMSG_DISMISS_CRITTER = 0x3507, CMSG_DO_COUNTDOWN = 0x3715, - CMSG_DO_MASTER_LOOT_ROLL = 0x3219, + CMSG_DO_MASTER_LOOT_ROLL = 0x3218, CMSG_DO_READY_CHECK = 0x3634, CMSG_DUEL_RESPONSE = 0x34F0, - CMSG_EJECT_PASSENGER = 0x3247, + CMSG_EJECT_PASSENGER = 0x3246, CMSG_EMOTE = 0x3553, CMSG_ENABLE_NAGLE = 0x376B, CMSG_ENABLE_TAXI_NODE = 0x34AF, @@ -314,51 +315,51 @@ enum OpcodeClient : uint16 CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B2, CMSG_GAME_OBJ_REPORT_USE = 0x34FD, CMSG_GAME_OBJ_USE = 0x34FC, - CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x330C, - CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32F2, - CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32DF, - CMSG_GARRISON_CHECK_UPGRADEABLE = 0x3340, - CMSG_GARRISON_COMPLETE_MISSION = 0x3332, - CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x330D, - CMSG_GARRISON_GENERATE_RECRUITS = 0x32F5, - CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3304, - CMSG_GARRISON_GET_MAP_DATA = 0x330B, - CMSG_GARRISON_GET_MISSION_REWARD = 0x3363, - CMSG_GARRISON_LEARN_TALENT = 0x3300, - CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3334, - CMSG_GARRISON_PURCHASE_BUILDING = 0x32DB, - CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32F7, - CMSG_GARRISON_REMOVE_FOLLOWER = 0x3329, - CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32F3, - CMSG_GARRISON_RENAME_FOLLOWER = 0x32F4, - CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32DA, - CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x330F, - CMSG_GARRISON_RESEARCH_TALENT = 0x32F8, - CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32DC, - CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32F0, - CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32E8, - CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32F6, - CMSG_GARRISON_SOCKET_TALENT = 0x33F3, - CMSG_GARRISON_START_MISSION = 0x3331, - CMSG_GARRISON_SWAP_BUILDINGS = 0x32E0, + CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x330D, + CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32F3, + CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32E0, + CMSG_GARRISON_CHECK_UPGRADEABLE = 0x3341, + CMSG_GARRISON_COMPLETE_MISSION = 0x3333, + CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x330E, + CMSG_GARRISON_GENERATE_RECRUITS = 0x32F6, + CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3305, + CMSG_GARRISON_GET_MAP_DATA = 0x330C, + CMSG_GARRISON_GET_MISSION_REWARD = 0x3364, + CMSG_GARRISON_LEARN_TALENT = 0x3301, + CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3335, + CMSG_GARRISON_PURCHASE_BUILDING = 0x32DC, + CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32F8, + CMSG_GARRISON_REMOVE_FOLLOWER = 0x332A, + CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32F4, + CMSG_GARRISON_RENAME_FOLLOWER = 0x32F5, + CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32DB, + CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3310, + CMSG_GARRISON_RESEARCH_TALENT = 0x32F9, + CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32DD, + CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32F1, + CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32E9, + CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32F7, + CMSG_GARRISON_SOCKET_TALENT = 0x33F5, + CMSG_GARRISON_START_MISSION = 0x3332, + CMSG_GARRISON_SWAP_BUILDINGS = 0x32E1, CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7, CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B3, CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3731, - CMSG_GET_GARRISON_INFO = 0x32D5, + CMSG_GET_GARRISON_INFO = 0x32D6, CMSG_GET_ITEM_PURCHASE_DATA = 0x3541, - CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x3310, - CMSG_GET_MIRROR_IMAGE_DATA = 0x32A7, + CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x3311, + CMSG_GET_MIRROR_IMAGE_DATA = 0x32A6, CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE, CMSG_GET_RAF_ACCOUNT_INFO = 0x371F, CMSG_GET_REMAINING_GAME_TIME = 0x36E8, - CMSG_GET_TROPHY_LIST = 0x3322, + CMSG_GET_TROPHY_LIST = 0x3323, CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DC, CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36ED, CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36EE, CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3690, CMSG_GM_TICKET_GET_CASE_STATUS = 0x368F, CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368E, - CMSG_GOSSIP_REFRESH_OPTIONS = 0x357D, + CMSG_GOSSIP_REFRESH_OPTIONS = 0x357E, CMSG_GOSSIP_SELECT_OPTION = 0x349A, CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308E, CMSG_GUILD_ADD_RANK = 0x3065, @@ -411,56 +412,56 @@ enum OpcodeClient : uint16 CMSG_INITIATE_TRADE = 0x3156, CMSG_INSPECT = 0x353B, CMSG_INSTANCE_LOCK_RESPONSE = 0x351A, - CMSG_ISLAND_QUEUE = 0x33B7, + CMSG_ISLAND_QUEUE = 0x33B8, CMSG_ITEM_PURCHASE_REFUND = 0x3542, - CMSG_ITEM_TEXT_QUERY = 0x3341, - CMSG_JOIN_PET_BATTLE_QUEUE = 0x31E0, + CMSG_ITEM_TEXT_QUERY = 0x3342, + CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DF, CMSG_JOIN_RATED_BATTLEGROUND = 0x3179, CMSG_KEEP_ALIVE = 0x367F, - CMSG_KEYBOUND_OVERRIDE = 0x322C, - CMSG_LATENCY_REPORT = 0x3772, - CMSG_LEARN_PVP_TALENTS = 0x3569, - CMSG_LEARN_TALENTS = 0x3567, + CMSG_KEYBOUND_OVERRIDE = 0x322B, + CMSG_LATENCY_REPORT = 0x3771, + CMSG_LEARN_PVP_TALENTS = 0x356A, + CMSG_LEARN_TALENTS = 0x3568, CMSG_LEAVE_GROUP = 0x3649, - CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31E1, + CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31E0, CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360D, CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360E, CMSG_LFG_LIST_DECLINE_APPLICANT = 0x360F, CMSG_LFG_LIST_GET_STATUS = 0x360B, CMSG_LFG_LIST_INVITE_APPLICANT = 0x3610, CMSG_LFG_LIST_INVITE_RESPONSE = 0x3611, - CMSG_LFG_LIST_JOIN = 0x3385, + CMSG_LFG_LIST_JOIN = 0x3386, CMSG_LFG_LIST_LEAVE = 0x360A, CMSG_LFG_LIST_SEARCH = 0x360C, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x3386, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x3387, CMSG_LIST_INVENTORY = 0x34A7, CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B6, CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B5, CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B4, CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B7, CMSG_LOADING_SCREEN_NOTIFY = 0x35F8, - CMSG_LOAD_SELECTED_TROPHY = 0x3323, + CMSG_LOAD_SELECTED_TROPHY = 0x3324, CMSG_LOGOUT_CANCEL = 0x34E6, CMSG_LOGOUT_INSTANT = 0x34E7, CMSG_LOGOUT_REQUEST = 0x34E4, CMSG_LOG_DISCONNECT = 0x3769, CMSG_LOG_STREAMING_ERROR = 0x376D, - CMSG_LOOT_ITEM = 0x3217, - CMSG_LOOT_MONEY = 0x3216, - CMSG_LOOT_RELEASE = 0x321B, - CMSG_LOOT_ROLL = 0x321C, - CMSG_LOOT_UNIT = 0x3215, + CMSG_LOOT_ITEM = 0x3216, + CMSG_LOOT_MONEY = 0x3215, + CMSG_LOOT_RELEASE = 0x321A, + CMSG_LOOT_ROLL = 0x321B, + CMSG_LOOT_UNIT = 0x3214, CMSG_LOW_LEVEL_RAID1 = 0x369F, CMSG_LOW_LEVEL_RAID2 = 0x3521, CMSG_MAIL_CREATE_TEXT_ITEM = 0x354D, - CMSG_MAIL_DELETE = 0x322E, + CMSG_MAIL_DELETE = 0x322D, CMSG_MAIL_GET_LIST = 0x3548, CMSG_MAIL_MARK_AS_READ = 0x354C, CMSG_MAIL_RETURN_TO_SENDER = 0x3655, CMSG_MAIL_TAKE_ITEM = 0x354A, CMSG_MAIL_TAKE_MONEY = 0x3549, - CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3230, - CMSG_MASTER_LOOT_ITEM = 0x3218, + CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x322F, + CMSG_MASTER_LOOT_ITEM = 0x3217, CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x34C7, CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x34C4, CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x34C2, @@ -468,110 +469,115 @@ enum OpcodeClient : uint16 CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318B, CMSG_MOUNT_CLEAR_FANFARE = 0x312D, CMSG_MOUNT_SET_FAVORITE = 0x3632, - CMSG_MOUNT_SPECIAL_ANIM = 0x3292, - CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A14, - CMSG_MOVE_CHANGE_TRANSPORT = 0x3A2E, - CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A33, - CMSG_MOVE_COLLISION_DISABLE_ACK = 0x3A36, - CMSG_MOVE_COLLISION_ENABLE_ACK = 0x3A37, - CMSG_MOVE_DISMISS_VEHICLE = 0x3A32, + CMSG_MOUNT_SPECIAL_ANIM = 0x3291, + CMSG_MOVE_APPLY_INERTIA_ACK = 0x3A4F, + CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A16, + CMSG_MOVE_CHANGE_TRANSPORT = 0x3A30, + CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A35, + CMSG_MOVE_COLLISION_DISABLE_ACK = 0x3A3A, + CMSG_MOVE_COLLISION_ENABLE_ACK = 0x3A3B, + CMSG_MOVE_DISMISS_VEHICLE = 0x3A34, CMSG_MOVE_DOUBLE_JUMP = 0x39EB, - CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK = 0x3A1D, - CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x3A23, - CMSG_MOVE_FALL_LAND = 0x39FA, - CMSG_MOVE_FALL_RESET = 0x3A18, - CMSG_MOVE_FEATHER_FALL_ACK = 0x3A1B, - CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3A2D, - CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3A2C, - CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3A31, - CMSG_MOVE_FORCE_ROOT_ACK = 0x3A0D, - CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x3A0B, - CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x3A0A, - CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK = 0x3A21, - CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK = 0x3A0C, - CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x3A22, - CMSG_MOVE_FORCE_UNROOT_ACK = 0x3A0E, - CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK = 0x3A20, - CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x3A34, - CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x3A35, + CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK = 0x3A1F, + CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x3A25, + CMSG_MOVE_FALL_LAND = 0x39FB, + CMSG_MOVE_FALL_RESET = 0x3A1A, + CMSG_MOVE_FEATHER_FALL_ACK = 0x3A1D, + CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3A2F, + CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3A2E, + CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3A33, + CMSG_MOVE_FORCE_ROOT_ACK = 0x3A0F, + CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x3A0D, + CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x3A0C, + CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK = 0x3A23, + CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK = 0x3A0E, + CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x3A24, + CMSG_MOVE_FORCE_UNROOT_ACK = 0x3A10, + CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK = 0x3A22, + CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x3A36, + CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x3A37, CMSG_MOVE_GUILD_BANK_ITEM = 0x34C1, - CMSG_MOVE_HEARTBEAT = 0x3A0F, - CMSG_MOVE_HOVER_ACK = 0x3A12, - CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x3A43, + CMSG_MOVE_HEARTBEAT = 0x3A11, + CMSG_MOVE_HOVER_ACK = 0x3A14, + CMSG_MOVE_INERTIA_DISABLE_ACK = 0x3A38, + CMSG_MOVE_INERTIA_ENABLE_ACK = 0x3A39, + CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x3A47, CMSG_MOVE_JUMP = 0x39EA, - CMSG_MOVE_KNOCK_BACK_ACK = 0x3A11, - CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x3A16, - CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x3A15, - CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE = 0x3A41, - CMSG_MOVE_SET_CAN_FLY_ACK = 0x3A26, - CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x3A24, - CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x3A38, - CMSG_MOVE_SET_FACING = 0x3A08, - CMSG_MOVE_SET_FLY = 0x3A27, - CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK = 0x3A25, - CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x3A3F, - CMSG_MOVE_SET_PITCH = 0x3A09, + CMSG_MOVE_KNOCK_BACK_ACK = 0x3A13, + CMSG_MOVE_REMOVE_INERTIA_ACK = 0x3A50, + CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x3A18, + CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x3A17, + CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE = 0x3A45, + CMSG_MOVE_SET_CAN_FLY_ACK = 0x3A28, + CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x3A26, + CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x3A3C, + CMSG_MOVE_SET_FACING = 0x3A09, + CMSG_MOVE_SET_FACING_HEARTBEAT = 0x3A0A, + CMSG_MOVE_SET_FLY = 0x3A29, + CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK = 0x3A27, + CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x3A43, + CMSG_MOVE_SET_PITCH = 0x3A0B, CMSG_MOVE_SET_RUN_MODE = 0x39F2, - CMSG_MOVE_SET_TURN_RATE_CHEAT = 0x3A05, - CMSG_MOVE_SET_VEHICLE_REC_ID_ACK = 0x3A13, + CMSG_MOVE_SET_TURN_RATE_CHEAT = 0x3A06, + CMSG_MOVE_SET_VEHICLE_REC_ID_ACK = 0x3A15, CMSG_MOVE_SET_WALK_MODE = 0x39F3, - CMSG_MOVE_SPLINE_DONE = 0x3A17, - CMSG_MOVE_START_ASCEND = 0x3A28, + CMSG_MOVE_SPLINE_DONE = 0x3A19, + CMSG_MOVE_START_ASCEND = 0x3A2A, CMSG_MOVE_START_BACKWARD = 0x39E5, - CMSG_MOVE_START_DESCEND = 0x3A2F, + CMSG_MOVE_START_DESCEND = 0x3A31, CMSG_MOVE_START_FORWARD = 0x39E4, CMSG_MOVE_START_PITCH_DOWN = 0x39F0, CMSG_MOVE_START_PITCH_UP = 0x39EF, CMSG_MOVE_START_STRAFE_LEFT = 0x39E7, CMSG_MOVE_START_STRAFE_RIGHT = 0x39E8, - CMSG_MOVE_START_SWIM = 0x39FB, + CMSG_MOVE_START_SWIM = 0x39FC, CMSG_MOVE_START_TURN_LEFT = 0x39EC, CMSG_MOVE_START_TURN_RIGHT = 0x39ED, CMSG_MOVE_STOP = 0x39E6, - CMSG_MOVE_STOP_ASCEND = 0x3A29, + CMSG_MOVE_STOP_ASCEND = 0x3A2B, CMSG_MOVE_STOP_PITCH = 0x39F1, CMSG_MOVE_STOP_STRAFE = 0x39E9, - CMSG_MOVE_STOP_SWIM = 0x39FC, + CMSG_MOVE_STOP_SWIM = 0x39FD, CMSG_MOVE_STOP_TURN = 0x39EE, - CMSG_MOVE_TELEPORT_ACK = 0x39F9, - CMSG_MOVE_TIME_SKIPPED = 0x3A1A, - CMSG_MOVE_UPDATE_FALL_SPEED = 0x3A19, - CMSG_MOVE_WATER_WALK_ACK = 0x3A1C, + CMSG_MOVE_TELEPORT_ACK = 0x39FA, + CMSG_MOVE_TIME_SKIPPED = 0x3A1C, + CMSG_MOVE_UPDATE_FALL_SPEED = 0x3A1B, + CMSG_MOVE_WATER_WALK_ACK = 0x3A1E, CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x308F, - CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D6, + CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D5, CMSG_NEXT_CINEMATIC_CAMERA = 0x3556, CMSG_OBJECT_UPDATE_FAILED = 0x3181, CMSG_OBJECT_UPDATE_RESCUED = 0x3182, - CMSG_OFFER_PETITION = 0x33DD, + CMSG_OFFER_PETITION = 0x33DF, CMSG_OPENING_CINEMATIC = 0x3555, - CMSG_OPEN_ITEM = 0x3342, - CMSG_OPEN_MISSION_NPC = 0x3306, - CMSG_OPEN_SHIPMENT_NPC = 0x330E, - CMSG_OPEN_TRADESKILL_NPC = 0x3319, + CMSG_OPEN_ITEM = 0x3343, + CMSG_OPEN_MISSION_NPC = 0x3307, + CMSG_OPEN_SHIPMENT_NPC = 0x330F, + CMSG_OPEN_TRADESKILL_NPC = 0x331A, CMSG_OPT_OUT_OF_LOOT = 0x3504, CMSG_OVERRIDE_SCREEN_FLASH = 0x352E, CMSG_PARTY_INVITE = 0x3602, CMSG_PARTY_INVITE_RESPONSE = 0x3604, CMSG_PARTY_UNINVITE = 0x3647, - CMSG_PERFORM_ITEM_INTERACTION = 0x3238, + CMSG_PERFORM_ITEM_INTERACTION = 0x3237, CMSG_PETITION_BUY = 0x34CF, CMSG_PETITION_RENAME_GUILD = 0x36C6, CMSG_PETITION_SHOW_LIST = 0x34CE, CMSG_PETITION_SHOW_SIGNATURES = 0x34D0, CMSG_PET_ABANDON = 0x3493, CMSG_PET_ACTION = 0x3491, - CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E5, + CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E4, CMSG_PET_BATTLE_INPUT = 0x3641, - CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x322D, - CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E4, + CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x322C, + CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E3, CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3642, - CMSG_PET_BATTLE_REQUEST_PVP = 0x31DE, - CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DF, - CMSG_PET_BATTLE_REQUEST_WILD = 0x31DC, - CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E6, - CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DD, + CMSG_PET_BATTLE_REQUEST_PVP = 0x31DD, + CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DE, + CMSG_PET_BATTLE_REQUEST_WILD = 0x31DB, + CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E5, + CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DC, CMSG_PET_CANCEL_AURA = 0x3494, - CMSG_PET_CAST_SPELL = 0x32AC, + CMSG_PET_CAST_SPELL = 0x32AB, CMSG_PET_RENAME = 0x3684, CMSG_PET_SET_ACTION = 0x3490, CMSG_PET_SPELL_AUTOCAST = 0x3495, @@ -580,29 +586,29 @@ enum OpcodeClient : uint16 CMSG_PLAYER_LOGIN = 0x35EA, CMSG_PUSH_QUEST_TO_PARTY = 0x34A5, CMSG_PVP_LOG_DATA = 0x317C, - CMSG_QUERY_BATTLE_PET_NAME = 0x3285, + CMSG_QUERY_BATTLE_PET_NAME = 0x3284, CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3660, CMSG_QUERY_CORPSE_TRANSPORT = 0x3661, CMSG_QUERY_COUNTDOWN_TIMER = 0x31AA, - CMSG_QUERY_CREATURE = 0x327F, - CMSG_QUERY_GAME_OBJECT = 0x3280, - CMSG_QUERY_GARRISON_PET_NAME = 0x3286, + CMSG_QUERY_CREATURE = 0x327E, + CMSG_QUERY_GAME_OBJECT = 0x327F, + CMSG_QUERY_GARRISON_PET_NAME = 0x3285, CMSG_QUERY_GUILD_INFO = 0x368A, CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x350E, CMSG_QUERY_NEXT_MAIL_TIME = 0x354B, - CMSG_QUERY_NPC_TEXT = 0x3281, - CMSG_QUERY_PAGE_TEXT = 0x3283, - CMSG_QUERY_PETITION = 0x3287, - CMSG_QUERY_PET_NAME = 0x3284, - CMSG_QUERY_PLAYER_NAME = 0x376F, - CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x3771, - CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x3770, + CMSG_QUERY_NPC_TEXT = 0x3280, + CMSG_QUERY_PAGE_TEXT = 0x3282, + CMSG_QUERY_PETITION = 0x3286, + CMSG_QUERY_PET_NAME = 0x3283, + CMSG_QUERY_PLAYER_NAME = 0x3772, + CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x3770, + CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x376F, CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3175, - CMSG_QUERY_QUEST_INFO = 0x3282, + CMSG_QUERY_QUEST_INFO = 0x3281, CMSG_QUERY_REALM_NAME = 0x3689, CMSG_QUERY_SCENARIO_POI = 0x3656, CMSG_QUERY_TIME = 0x34E3, - CMSG_QUERY_TREASURE_PICKER = 0x3366, + CMSG_QUERY_TREASURE_PICKER = 0x3367, CMSG_QUERY_VOID_STORAGE = 0x31A3, CMSG_QUEST_CONFIRM_ACCEPT = 0x34A4, CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x349E, @@ -617,8 +623,8 @@ enum OpcodeClient : uint16 CMSG_QUEST_LOG_REMOVE_QUEST = 0x3540, CMSG_QUEST_POI_QUERY = 0x36AD, CMSG_QUEST_PUSH_RESULT = 0x34A6, - CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33CE, - CMSG_QUEST_SESSION_REQUEST_START = 0x33CD, + CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33D0, + CMSG_QUEST_SESSION_REQUEST_START = 0x33CF, CMSG_QUEST_SESSION_REQUEST_STOP = 0x372A, CMSG_QUEUED_MESSAGES_END = 0x376C, CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3703, @@ -632,41 +638,41 @@ enum OpcodeClient : uint16 CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3721, CMSG_RANDOM_ROLL = 0x3654, CMSG_READY_CHECK_RESPONSE = 0x3635, - CMSG_READ_ITEM = 0x3343, + CMSG_READ_ITEM = 0x3344, CMSG_RECLAIM_CORPSE = 0x34E9, - CMSG_REMOVE_NEW_ITEM = 0x3369, + CMSG_REMOVE_NEW_ITEM = 0x336A, CMSG_REMOVE_RAF_RECRUIT = 0x3723, CMSG_REORDER_CHARACTERS = 0x35E9, CMSG_REPAIR_ITEM = 0x34FA, - CMSG_REPLACE_TROPHY = 0x3324, + CMSG_REPLACE_TROPHY = 0x3325, CMSG_REPOP_REQUEST = 0x3538, CMSG_REPORT_CLIENT_VARIABLES = 0x36FD, CMSG_REPORT_ENABLED_ADDONS = 0x36FC, CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FE, CMSG_REPORT_PVP_PLAYER_AFK = 0x3502, - CMSG_REPORT_SERVER_LAG = 0x33C6, - CMSG_REPORT_STUCK_IN_COMBAT = 0x33C7, + CMSG_REPORT_SERVER_LAG = 0x33C8, + CMSG_REPORT_STUCK_IN_COMBAT = 0x33C9, CMSG_REQUEST_ACCOUNT_DATA = 0x3694, - CMSG_REQUEST_AREA_POI_UPDATE = 0x3368, + CMSG_REQUEST_AREA_POI_UPDATE = 0x3369, CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC, CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317E, CMSG_REQUEST_CEMETERY_LIST = 0x3177, CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x368B, - CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32C7, - CMSG_REQUEST_COVENANT_CALLINGS = 0x33B9, + CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32C8, + CMSG_REQUEST_COVENANT_CALLINGS = 0x33BA, CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x353C, - CMSG_REQUEST_FORCED_REACTIONS = 0x3210, - CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33F2, + CMSG_REQUEST_FORCED_REACTIONS = 0x320F, + CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33F4, CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A9, CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A8, - CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C8, + CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33CA, CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32B7, - CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x320A, - CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x320B, + CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3209, + CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x320A, CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7, CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3653, CMSG_REQUEST_PET_INFO = 0x3496, - CMSG_REQUEST_PLAYED_TIME = 0x328A, + CMSG_REQUEST_PLAYED_TIME = 0x3289, CMSG_REQUEST_PVP_REWARDS = 0x3196, CMSG_REQUEST_RAID_INFO = 0x36C7, CMSG_REQUEST_RATED_PVP_INFO = 0x35E3, @@ -674,24 +680,24 @@ enum OpcodeClient : uint16 CMSG_REQUEST_RESEARCH_HISTORY = 0x3167, CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x3197, CMSG_REQUEST_STABLED_PETS = 0x3497, - CMSG_REQUEST_VEHICLE_EXIT = 0x3242, - CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3244, - CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3243, - CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3245, - CMSG_REQUEST_WEEKLY_REWARDS = 0x33BC, - CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3367, - CMSG_RESET_CHALLENGE_MODE = 0x3208, - CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3209, + CMSG_REQUEST_VEHICLE_EXIT = 0x3241, + CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3243, + CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3242, + CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3244, + CMSG_REQUEST_WEEKLY_REWARDS = 0x33BD, + CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3368, + CMSG_RESET_CHALLENGE_MODE = 0x3207, + CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3208, CMSG_RESET_INSTANCES = 0x3668, CMSG_RESURRECT_RESPONSE = 0x3683, - CMSG_REVERT_MONUMENT_APPEARANCE = 0x3326, - CMSG_RIDE_VEHICLE_INTERACT = 0x3246, + CMSG_REVERT_MONUMENT_APPEARANCE = 0x3327, + CMSG_RIDE_VEHICLE_INTERACT = 0x3245, CMSG_SAVE_CUF_PROFILES = 0x318C, CMSG_SAVE_EQUIPMENT_SET = 0x3518, CMSG_SAVE_GUILD_EMBLEM = 0x32BB, - CMSG_SCENE_PLAYBACK_CANCELED = 0x3229, - CMSG_SCENE_PLAYBACK_COMPLETE = 0x3228, - CMSG_SCENE_TRIGGER_EVENT = 0x322A, + CMSG_SCENE_PLAYBACK_CANCELED = 0x3228, + CMSG_SCENE_PLAYBACK_COMPLETE = 0x3227, + CMSG_SCENE_TRIGGER_EVENT = 0x3229, CMSG_SELF_RES = 0x3543, CMSG_SELL_ITEM = 0x34A8, CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F6, @@ -699,25 +705,25 @@ enum OpcodeClient : uint16 CMSG_SEND_MAIL = 0x35FA, CMSG_SEND_TEXT_EMOTE = 0x348E, CMSG_SERVER_TIME_OFFSET_REQUEST = 0x369A, - CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x322F, + CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x322E, CMSG_SET_ACTION_BAR_TOGGLES = 0x3544, CMSG_SET_ACTION_BUTTON = 0x3636, - CMSG_SET_ACTIVE_MOVER = 0x3A39, - CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32C8, + CMSG_SET_ACTIVE_MOVER = 0x3A3D, + CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32C9, CMSG_SET_ASSISTANT_LEADER = 0x364F, - CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3346, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3347, + CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3347, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3348, CMSG_SET_CHAT_DISABLED = 0x3735, CMSG_SET_CONTACT_NOTES = 0x36CF, CMSG_SET_CURRENCY_FLAGS = 0x3169, - CMSG_SET_DIFFICULTY_ID = 0x322B, + CMSG_SET_DIFFICULTY_ID = 0x322A, CMSG_SET_DUNGEON_DIFFICULTY = 0x3682, CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3618, CMSG_SET_FACTION_AT_WAR = 0x34EC, CMSG_SET_FACTION_INACTIVE = 0x34EE, CMSG_SET_FACTION_NOT_AT_WAR = 0x34ED, CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31BA, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3349, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x334A, CMSG_SET_LOOT_METHOD = 0x3648, CMSG_SET_LOOT_SPECIALIZATION = 0x3551, CMSG_SET_PARTY_ASSIGNMENT = 0x3651, @@ -731,22 +737,22 @@ enum OpcodeClient : uint16 CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3686, CMSG_SET_SELECTION = 0x353A, CMSG_SET_SHEATHED = 0x348F, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3348, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3349, CMSG_SET_TAXI_BENCHMARK_MODE = 0x3501, - CMSG_SET_TITLE = 0x3290, + CMSG_SET_TITLE = 0x328F, CMSG_SET_TRADE_CURRENCY = 0x3160, CMSG_SET_TRADE_GOLD = 0x315F, CMSG_SET_TRADE_ITEM = 0x315D, - CMSG_SET_USING_PARTY_GARRISON = 0x3308, + CMSG_SET_USING_PARTY_GARRISON = 0x3309, CMSG_SET_WAR_MODE = 0x32C0, CMSG_SET_WATCHED_FACTION = 0x34EF, CMSG_SHOW_TRADE_SKILL = 0x36BF, CMSG_SIGN_PETITION = 0x3545, CMSG_SILENCE_PARTY_TALKER = 0x3652, CMSG_SOCKET_GEMS = 0x34F9, - CMSG_SORT_BAGS = 0x334A, - CMSG_SORT_BANK_BAGS = 0x334B, - CMSG_SORT_REAGENT_BANK_BAGS = 0x334C, + CMSG_SORT_BAGS = 0x334B, + CMSG_SORT_BANK_BAGS = 0x334C, + CMSG_SORT_REAGENT_BANK_BAGS = 0x334D, CMSG_SPELL_CLICK = 0x349B, CMSG_SPIRIT_HEALER_ACTIVATE = 0x34B5, CMSG_SPLIT_GUILD_BANK_ITEM = 0x34C8, @@ -759,7 +765,7 @@ enum OpcodeClient : uint16 CMSG_START_WAR_GAME = 0x35DE, CMSG_STORE_GUILD_BANK_ITEM = 0x34BE, CMSG_SUBMIT_USER_FEEDBACK = 0x3693, - CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E7, + CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E9, CMSG_SUMMON_RESPONSE = 0x366A, CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3646, CMSG_SURRENDER_ARENA = 0x3174, @@ -776,15 +782,15 @@ enum OpcodeClient : uint16 CMSG_TAXI_NODE_STATUS_QUERY = 0x34AE, CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34B0, CMSG_TAXI_REQUEST_EARLY_LANDING = 0x34B2, - CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3A3D, - CMSG_TIME_SYNC_RESPONSE = 0x3A3A, - CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3C, - CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3B, + CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3A41, + CMSG_TIME_SYNC_RESPONSE = 0x3A3E, + CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A40, + CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3F, CMSG_TOGGLE_DIFFICULTY = 0x3657, CMSG_TOGGLE_PVP = 0x32BE, CMSG_TOTEM_DESTROYED = 0x3506, CMSG_TOY_CLEAR_FANFARE = 0x312E, - CMSG_TRADE_SKILL_SET_FAVORITE = 0x3365, + CMSG_TRADE_SKILL_SET_FAVORITE = 0x3366, CMSG_TRAINER_BUY_SPELL = 0x34B4, CMSG_TRAINER_LIST = 0x34B3, CMSG_TRANSMOGRIFY_ITEMS = 0x3198, @@ -793,26 +799,27 @@ enum OpcodeClient : uint16 CMSG_TWITTER_CHECK_STATUS = 0x312A, CMSG_TWITTER_CONNECT = 0x3127, CMSG_TWITTER_DISCONNECT = 0x312B, - CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B8, + CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B9, CMSG_UNACCEPT_TRADE = 0x315B, CMSG_UNDELETE_CHARACTER = 0x36DB, CMSG_UNLEARN_SKILL = 0x34F3, CMSG_UNLEARN_SPECIALIZATION = 0x31A6, CMSG_UNLOCK_VOID_STORAGE = 0x31A2, CMSG_UPDATE_ACCOUNT_DATA = 0x3695, - CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32AF, + CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32AE, CMSG_UPDATE_CLIENT_SETTINGS = 0x3664, - CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A40, + CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A44, CMSG_UPDATE_RAID_TARGET = 0x3650, - CMSG_UPDATE_SPELL_VISUAL = 0x32AE, + CMSG_UPDATE_SPELL_VISUAL = 0x32AD, CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F0, - CMSG_UPGRADE_GARRISON = 0x32D0, - CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E5, + CMSG_UPGRADE_GARRISON = 0x32D1, + CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E7, CMSG_USED_FOLLOW = 0x3187, - CMSG_USE_CRITTER_ITEM = 0x324C, + CMSG_USE_CRITTER_ITEM = 0x324B, CMSG_USE_EQUIPMENT_SET = 0x3995, - CMSG_USE_ITEM = 0x32A8, - CMSG_USE_TOY = 0x32AB, + CMSG_USE_ITEM = 0x32A7, + CMSG_USE_TOY = 0x32AA, + CMSG_VAS_ASSIGN_DISTRIBUTION = 0x3736, CMSG_VAS_CHECK_TRANSFER_OK = 0x3708, CMSG_VAS_GET_QUEUE_MINUTES = 0x3707, CMSG_VAS_GET_SERVICE_STATUS = 0x3706, @@ -835,204 +842,205 @@ enum OpcodeClient : uint16 enum OpcodeServer : uint16 { SMSG_ABORT_NEW_WORLD = 0x259A, - SMSG_ACCOUNT_COSMETIC_ADDED = 0x2884, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x286A, - SMSG_ACCOUNT_DATA_TIMES = 0x26FB, + SMSG_ACCOUNT_COSMETIC_ADDED = 0x2885, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x286B, + SMSG_ACCOUNT_DATA_TIMES = 0x26FD, SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AC, - SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2883, + SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2884, SMSG_ACCOUNT_TOY_UPDATE = 0x25AD, SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B0, SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25AF, - SMSG_ACHIEVEMENT_DELETED = 0x26DA, - SMSG_ACHIEVEMENT_EARNED = 0x2639, - SMSG_ACTIVATE_ESSENCE_FAILED = 0x3016, - SMSG_ACTIVATE_SOULBIND_FAILED = 0x3018, - SMSG_ACTIVATE_TAXI_REPLY = 0x2672, + SMSG_ACHIEVEMENT_DELETED = 0x26DC, + SMSG_ACHIEVEMENT_EARNED = 0x263A, + SMSG_ACTIVATE_ESSENCE_FAILED = 0x3015, + SMSG_ACTIVATE_SOULBIND_FAILED = 0x3017, + SMSG_ACTIVATE_TAXI_REPLY = 0x2674, SMSG_ACTIVE_GLYPHS = 0x2C54, - SMSG_ADDON_LIST_REQUEST = 0x2638, - SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x2633, + SMSG_ADDON_LIST_REQUEST = 0x2639, + SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x2634, SMSG_ADD_ITEM_PASSIVE = 0x25A8, - SMSG_ADD_LOSS_OF_CONTROL = 0x2666, - SMSG_ADD_RUNE_POWER = 0x26AC, - SMSG_ADJUST_SPLINE_DURATION = 0x25CB, - SMSG_ADVANCED_COMBAT_LOG = 0x2880, - SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x287A, - SMSG_ADVENTURE_MAP_OPEN_NPC = 0x27E3, - SMSG_AE_LOOT_TARGETS = 0x260E, - SMSG_AE_LOOT_TARGET_ACK = 0x260F, - SMSG_AI_REACTION = 0x26A9, - SMSG_ALLIED_RACE_DETAILS = 0x27E9, + SMSG_ADD_LOSS_OF_CONTROL = 0x2668, + SMSG_ADD_RUNE_POWER = 0x26AE, + SMSG_ADJUST_SPLINE_DURATION = 0x25CC, + SMSG_ADVANCED_COMBAT_LOG = 0x2881, + SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x287B, + SMSG_ADVENTURE_MAP_OPEN_NPC = 0x27E4, + SMSG_AE_LOOT_TARGETS = 0x260F, + SMSG_AE_LOOT_TARGET_ACK = 0x2610, + SMSG_AI_REACTION = 0x26AB, + SMSG_ALLIED_RACE_DETAILS = 0x27EA, SMSG_ALL_ACCOUNT_CRITERIA = 0x2571, SMSG_ALL_ACHIEVEMENT_DATA = 0x2570, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8, - SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x2857, + SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x2858, SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2588, - SMSG_AREA_POI_UPDATE_RESPONSE = 0x3011, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x2730, + SMSG_AREA_POI_UPDATE_RESPONSE = 0x3010, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x2732, SMSG_AREA_TRIGGER_DENIED = 0x2902, SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x28FF, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x2707, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x2709, SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x28FE, SMSG_AREA_TRIGGER_RE_PATH = 0x28FD, SMSG_AREA_TRIGGER_RE_SHAPE = 0x2901, SMSG_AREA_TRIGGER_UNATTACH = 0x2900, - SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x2628, - SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x263E, - SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x2793, - SMSG_ARTIFACT_FORGE_ERROR = 0x2791, - SMSG_ARTIFACT_RESPEC_PROMPT = 0x2792, - SMSG_ARTIFACT_XP_GAIN = 0x27DB, - SMSG_ATTACKER_STATE_UPDATE = 0x294C, - SMSG_ATTACK_START = 0x2937, - SMSG_ATTACK_STOP = 0x2938, - SMSG_ATTACK_SWING_ERROR = 0x2946, - SMSG_ATTACK_SWING_LANDED_LOG = 0x2947, - SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27C4, - SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27C3, - SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27C2, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26E4, - SMSG_AUCTION_COMMAND_RESULT = 0x26E1, - SMSG_AUCTION_FAVORITE_LIST = 0x2871, - SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x2868, - SMSG_AUCTION_HELLO_RESPONSE = 0x26DF, - SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x2867, - SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2864, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2865, - SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2866, - SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26E3, - SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26E5, - SMSG_AUCTION_REPLICATE_RESPONSE = 0x26E0, - SMSG_AUCTION_WON_NOTIFICATION = 0x26E2, + SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x2629, + SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x263F, + SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x2795, + SMSG_ARTIFACT_FORGE_ERROR = 0x2793, + SMSG_ARTIFACT_RESPEC_PROMPT = 0x2794, + SMSG_ARTIFACT_XP_GAIN = 0x27DD, + SMSG_ATTACKER_STATE_UPDATE = 0x294D, + SMSG_ATTACK_START = 0x2938, + SMSG_ATTACK_STOP = 0x2939, + SMSG_ATTACK_SWING_ERROR = 0x2947, + SMSG_ATTACK_SWING_LANDED_LOG = 0x2948, + SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27C6, + SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27C5, + SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27C4, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26E6, + SMSG_AUCTION_COMMAND_RESULT = 0x26E3, + SMSG_AUCTION_FAVORITE_LIST = 0x2872, + SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x2869, + SMSG_AUCTION_HELLO_RESPONSE = 0x26E1, + SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x2868, + SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2865, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2866, + SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2867, + SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26E5, + SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26E7, + SMSG_AUCTION_REPLICATE_RESPONSE = 0x26E2, + SMSG_AUCTION_WON_NOTIFICATION = 0x26E4, SMSG_AURA_POINTS_DEPLETED = 0x2C23, SMSG_AURA_UPDATE = 0x2C22, SMSG_AUTH_CHALLENGE = 0x3048, SMSG_AUTH_FAILED = 0x256C, SMSG_AUTH_RESPONSE = 0x256D, SMSG_AVAILABLE_HOTFIXES = 0x290F, - SMSG_AZERITE_RESPEC_NPC = 0x27E6, + SMSG_AZERITE_RESPEC_NPC = 0x27E7, SMSG_BAG_CLEANUP_FINISHED = 0x2DA7, - SMSG_BARBER_SHOP_RESULT = 0x26B1, - SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x2848, + SMSG_BARBER_SHOP_RESULT = 0x26B3, + SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x2849, SMSG_BATTLEFIELD_LIST = 0x2927, SMSG_BATTLEFIELD_PORT_DENIED = 0x292D, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2923, SMSG_BATTLEFIELD_STATUS_FAILED = 0x2926, + SMSG_BATTLEFIELD_STATUS_GROUP_PROPOSAL_FAILED = 0x2930, SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION = 0x2922, SMSG_BATTLEFIELD_STATUS_NONE = 0x2925, SMSG_BATTLEFIELD_STATUS_QUEUED = 0x2924, SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x292F, SMSG_BATTLEGROUND_INFO_THROTTLED = 0x292E, - SMSG_BATTLEGROUND_INIT = 0x2949, + SMSG_BATTLEGROUND_INIT = 0x294A, SMSG_BATTLEGROUND_PLAYER_JOINED = 0x292B, SMSG_BATTLEGROUND_PLAYER_LEFT = 0x292C, SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2928, - SMSG_BATTLEGROUND_POINTS = 0x2948, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x277A, - SMSG_BATTLENET_CHALLENGE_START = 0x2779, - SMSG_BATTLENET_NOTIFICATION = 0x27F4, - SMSG_BATTLENET_RESPONSE = 0x27F3, - SMSG_BATTLE_NET_CONNECTION_STATUS = 0x27F5, - SMSG_BATTLE_PAY_ACK_FAILED = 0x2774, - SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x2769, - SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x276A, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x2773, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2767, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2766, - SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2764, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2765, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x2763, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x2761, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x2762, - SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2768, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x2772, - SMSG_BATTLE_PAY_START_CHECKOUT = 0x2810, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2770, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x276F, - SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2804, - SMSG_BATTLE_PETS_HEALED = 0x25EB, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x266D, - SMSG_BATTLE_PET_DELETED = 0x25E8, - SMSG_BATTLE_PET_ERROR = 0x262E, - SMSG_BATTLE_PET_JOURNAL = 0x25E7, - SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25E5, - SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25E6, - SMSG_BATTLE_PET_LICENSE_CHANGED = 0x25EC, - SMSG_BATTLE_PET_RESTORED = 0x25EA, - SMSG_BATTLE_PET_REVOKED = 0x25E9, - SMSG_BATTLE_PET_TRAP_LEVEL = 0x25E3, - SMSG_BATTLE_PET_UPDATES = 0x25E2, - SMSG_BINDER_CONFIRM = 0x26EE, + SMSG_BATTLEGROUND_POINTS = 0x2949, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x277C, + SMSG_BATTLENET_CHALLENGE_START = 0x277B, + SMSG_BATTLENET_NOTIFICATION = 0x27F5, + SMSG_BATTLENET_RESPONSE = 0x27F4, + SMSG_BATTLE_NET_CONNECTION_STATUS = 0x27F6, + SMSG_BATTLE_PAY_ACK_FAILED = 0x2776, + SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x276B, + SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x276C, + SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x2775, + SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2769, + SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2768, + SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2766, + SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2767, + SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x2765, + SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x2763, + SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x2764, + SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x276A, + SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x2774, + SMSG_BATTLE_PAY_START_CHECKOUT = 0x2811, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2772, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2771, + SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2805, + SMSG_BATTLE_PETS_HEALED = 0x25EC, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x266F, + SMSG_BATTLE_PET_DELETED = 0x25E9, + SMSG_BATTLE_PET_ERROR = 0x262F, + SMSG_BATTLE_PET_JOURNAL = 0x25E8, + SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25E6, + SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25E7, + SMSG_BATTLE_PET_LICENSE_CHANGED = 0x25ED, + SMSG_BATTLE_PET_RESTORED = 0x25EB, + SMSG_BATTLE_PET_REVOKED = 0x25EA, + SMSG_BATTLE_PET_TRAP_LEVEL = 0x25E4, + SMSG_BATTLE_PET_UPDATES = 0x25E3, + SMSG_BINDER_CONFIRM = 0x26F0, SMSG_BIND_POINT_UPDATE = 0x257D, - SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x261E, - SMSG_BLACK_MARKET_OPEN_RESULT = 0x261C, - SMSG_BLACK_MARKET_OUTBID = 0x261F, - SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x261D, - SMSG_BLACK_MARKET_WON = 0x2620, - SMSG_BONUS_ROLL_EMPTY = 0x263B, - SMSG_BOSS_KILL = 0x294B, - SMSG_BREAK_TARGET = 0x2936, + SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x261F, + SMSG_BLACK_MARKET_OPEN_RESULT = 0x261D, + SMSG_BLACK_MARKET_OUTBID = 0x2620, + SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x261E, + SMSG_BLACK_MARKET_WON = 0x2621, + SMSG_BONUS_ROLL_EMPTY = 0x263C, + SMSG_BOSS_KILL = 0x294C, + SMSG_BREAK_TARGET = 0x2937, SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC, - SMSG_BROADCAST_SUMMON_CAST = 0x284A, - SMSG_BROADCAST_SUMMON_RESPONSE = 0x284B, - SMSG_BUY_FAILED = 0x26BA, - SMSG_BUY_SUCCEEDED = 0x26B9, + SMSG_BROADCAST_SUMMON_CAST = 0x284B, + SMSG_BROADCAST_SUMMON_RESPONSE = 0x284C, + SMSG_BUY_FAILED = 0x26BC, + SMSG_BUY_SUCCEEDED = 0x26BB, SMSG_CACHE_INFO = 0x291D, SMSG_CACHE_VERSION = 0x291C, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x2692, - SMSG_CALENDAR_COMMAND_RESULT = 0x2693, - SMSG_CALENDAR_COMMUNITY_INVITE = 0x2682, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x268A, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x268B, - SMSG_CALENDAR_INVITE_ADDED = 0x2683, - SMSG_CALENDAR_INVITE_ALERT = 0x2687, - SMSG_CALENDAR_INVITE_NOTES = 0x268C, - SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x268D, - SMSG_CALENDAR_INVITE_REMOVED = 0x2684, - SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2689, - SMSG_CALENDAR_INVITE_STATUS = 0x2685, - SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2688, - SMSG_CALENDAR_MODERATOR_STATUS = 0x2686, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x268E, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x268F, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2690, - SMSG_CALENDAR_SEND_CALENDAR = 0x2680, - SMSG_CALENDAR_SEND_EVENT = 0x2681, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x2691, - SMSG_CAMERA_EFFECT = 0x2716, - SMSG_CANCEL_AUTO_REPEAT = 0x26D0, - SMSG_CANCEL_COMBAT = 0x2945, + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x2694, + SMSG_CALENDAR_COMMAND_RESULT = 0x2695, + SMSG_CALENDAR_COMMUNITY_INVITE = 0x2684, + SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x268C, + SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x268D, + SMSG_CALENDAR_INVITE_ADDED = 0x2685, + SMSG_CALENDAR_INVITE_ALERT = 0x2689, + SMSG_CALENDAR_INVITE_NOTES = 0x268E, + SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x268F, + SMSG_CALENDAR_INVITE_REMOVED = 0x2686, + SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x268B, + SMSG_CALENDAR_INVITE_STATUS = 0x2687, + SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x268A, + SMSG_CALENDAR_MODERATOR_STATUS = 0x2688, + SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2690, + SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2691, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2692, + SMSG_CALENDAR_SEND_CALENDAR = 0x2682, + SMSG_CALENDAR_SEND_EVENT = 0x2683, + SMSG_CALENDAR_SEND_NUM_PENDING = 0x2693, + SMSG_CAMERA_EFFECT = 0x2718, + SMSG_CANCEL_AUTO_REPEAT = 0x26D2, + SMSG_CANCEL_COMBAT = 0x2946, SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46, - SMSG_CANCEL_SCENE = 0x262D, + SMSG_CANCEL_SCENE = 0x262E, SMSG_CANCEL_SPELL_VISUAL = 0x2C44, SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C48, - SMSG_CAN_DUEL_RESULT = 0x2941, - SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x2803, + SMSG_CAN_DUEL_RESULT = 0x2942, + SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x2804, SMSG_CAPTURE_POINT_REMOVED = 0x292A, SMSG_CAST_FAILED = 0x2C57, SMSG_CATEGORY_COOLDOWN = 0x2C16, - SMSG_CHAIN_MISSILE_BOUNCE = 0x25C3, - SMSG_CHALLENGE_MODE_COMPLETE = 0x2602, - SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2606, - SMSG_CHALLENGE_MODE_RESET = 0x2601, - SMSG_CHALLENGE_MODE_START = 0x25FF, - SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2600, - SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x3005, - SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x27F6, + SMSG_CHAIN_MISSILE_BOUNCE = 0x25C4, + SMSG_CHALLENGE_MODE_COMPLETE = 0x2603, + SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2607, + SMSG_CHALLENGE_MODE_RESET = 0x2602, + SMSG_CHALLENGE_MODE_START = 0x2600, + SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2601, + SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x3004, + SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x27F7, SMSG_CHANNEL_LIST = 0x2BC3, SMSG_CHANNEL_NOTIFY = 0x2BC0, SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC1, SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC2, - SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27AD, - SMSG_CHARACTER_LOGIN_FAILED = 0x26F6, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2778, - SMSG_CHARACTER_RENAME_RESULT = 0x2753, - SMSG_CHARACTER_UPGRADE_ABORTED = 0x27AC, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27AB, - SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27AE, - SMSG_CHARACTER_UPGRADE_STARTED = 0x27AA, - SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26D4, - SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26D5, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x2797, + SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27AF, + SMSG_CHARACTER_LOGIN_FAILED = 0x26F8, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x277A, + SMSG_CHARACTER_RENAME_RESULT = 0x2755, + SMSG_CHARACTER_UPGRADE_ABORTED = 0x27AE, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27AD, + SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27B0, + SMSG_CHARACTER_UPGRADE_STARTED = 0x27AC, + SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26D6, + SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26D7, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x2799, SMSG_CHAT = 0x2BAD, SMSG_CHAT_AUTO_RESPONDED = 0x2BB8, SMSG_CHAT_DOWN = 0x2BBD, @@ -1046,141 +1054,141 @@ enum OpcodeServer : uint16 SMSG_CHAT_RESTRICTED = 0x2BB3, SMSG_CHAT_SERVER_MESSAGE = 0x2BC4, SMSG_CHEAT_IGNORE_DIMISHING_RETURNS = 0x2C12, - SMSG_CHECK_ABANDON_NPE = 0x3019, + SMSG_CHECK_ABANDON_NPE = 0x3018, SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x2584, SMSG_CHECK_WARGAME_ENTRY = 0x2592, - SMSG_CHROMIE_TIME_OPEN_NPC = 0x27EB, - SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2874, - SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x285B, + SMSG_CHROMIE_TIME_OPEN_NPC = 0x27EC, + SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2875, + SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x285C, SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C27, + SMSG_CLEAR_ARENA_UNIT = 0x2640, SMSG_CLEAR_BOSS_EMOTES = 0x25B7, - SMSG_CLEAR_COOLDOWN = 0x26AE, + SMSG_CLEAR_COOLDOWN = 0x26B0, SMSG_CLEAR_COOLDOWNS = 0x2C26, SMSG_CLEAR_RESURRECT = 0x257F, SMSG_CLEAR_SPELL_CHARGES = 0x2C28, - SMSG_CLEAR_TARGET = 0x2942, + SMSG_CLEAR_TARGET = 0x2943, SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA1, - SMSG_CLOSE_ARTIFACT_FORGE = 0x2790, - SMSG_CLOSE_HEART_FORGE = 0x2816, - SMSG_CLOSE_ITEM_FORGE = 0x278E, - SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2853, - SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2856, - SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2854, - SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2851, - SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2855, - SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2852, - SMSG_COIN_REMOVED = 0x260D, - SMSG_COMBAT_EVENT_FAILED = 0x2939, - SMSG_COMMENTATOR_MAP_INFO = 0x26F8, - SMSG_COMMENTATOR_PLAYER_INFO = 0x26F9, - SMSG_COMMENTATOR_STATE_CHANGED = 0x26F7, - SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27BF, - SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27CB, - SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27C1, - SMSG_COMMERCE_TOKEN_UPDATE = 0x27C0, - SMSG_COMPLAINT_RESULT = 0x26A0, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2789, - SMSG_CONFIRM_PARTY_INVITE = 0x2802, + SMSG_CLOSE_ARTIFACT_FORGE = 0x2792, + SMSG_CLOSE_HEART_FORGE = 0x2817, + SMSG_CLOSE_ITEM_FORGE = 0x2790, + SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2854, + SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2857, + SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2855, + SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2852, + SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2856, + SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2853, + SMSG_COIN_REMOVED = 0x260E, + SMSG_COMBAT_EVENT_FAILED = 0x293A, + SMSG_COMMENTATOR_MAP_INFO = 0x26FA, + SMSG_COMMENTATOR_PLAYER_INFO = 0x26FB, + SMSG_COMMENTATOR_STATE_CHANGED = 0x26F9, + SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27C1, + SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27CD, + SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27C3, + SMSG_COMMERCE_TOKEN_UPDATE = 0x27C2, + SMSG_COMPLAINT_RESULT = 0x26A2, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x278B, + SMSG_CONFIRM_PARTY_INVITE = 0x2803, SMSG_CONNECT_TO = 0x304D, - SMSG_CONQUEST_FORMULA_CONSTANTS = 0x2775, - SMSG_CONSOLE_WRITE = 0x262B, - SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27C7, - SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27C6, - SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27C5, - SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27C9, - SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27CA, - SMSG_CONTACT_LIST = 0x2776, - SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2809, - SMSG_CONTROL_UPDATE = 0x263D, - SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x287D, - SMSG_COOLDOWN_CHEAT = 0x2729, - SMSG_COOLDOWN_EVENT = 0x26AD, - SMSG_CORPSE_LOCATION = 0x2644, - SMSG_CORPSE_RECLAIM_DELAY = 0x273A, - SMSG_CORPSE_TRANSPORT_QUERY = 0x2703, + SMSG_CONQUEST_FORMULA_CONSTANTS = 0x2777, + SMSG_CONSOLE_WRITE = 0x262C, + SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27C9, + SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27C8, + SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27C7, + SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27CB, + SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27CC, + SMSG_CONTACT_LIST = 0x2778, + SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x280A, + SMSG_CONTROL_UPDATE = 0x263E, + SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x287E, + SMSG_COOLDOWN_CHEAT = 0x272B, + SMSG_COOLDOWN_EVENT = 0x26AF, + SMSG_CORPSE_LOCATION = 0x2646, + SMSG_CORPSE_RECLAIM_DELAY = 0x273C, + SMSG_CORPSE_TRANSPORT_QUERY = 0x2705, SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA3, - SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27EC, - SMSG_COVENANT_RENOWN_OPEN_NPC = 0x287C, - SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x287E, - SMSG_CREATE_CHAR = 0x26F2, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x2788, - SMSG_CRITERIA_DELETED = 0x26D9, - SMSG_CRITERIA_UPDATE = 0x26D3, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26B5, - SMSG_CUSTOM_LOAD_SCREEN = 0x25C6, + SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27ED, + SMSG_COVENANT_RENOWN_OPEN_NPC = 0x287D, + SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x287F, + SMSG_CREATE_CHAR = 0x26F4, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x278A, + SMSG_CRITERIA_DELETED = 0x26DB, + SMSG_CRITERIA_UPDATE = 0x26D5, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26B7, + SMSG_CUSTOM_LOAD_SCREEN = 0x25C7, SMSG_DAILY_QUESTS_RESET = 0x2A80, - SMSG_DAMAGE_CALC_LOG = 0x27B4, + SMSG_DAMAGE_CALC_LOG = 0x27B6, SMSG_DB_REPLY = 0x290E, - SMSG_DEATH_RELEASE_LOC = 0x26C6, - SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x264A, + SMSG_DEATH_RELEASE_LOC = 0x26C8, + SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x264C, SMSG_DEFENSE_MESSAGE = 0x2BB6, - SMSG_DELETE_CHAR = 0x26F3, + SMSG_DELETE_CHAR = 0x26F5, SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x2980, - SMSG_DESTROY_ARENA_UNIT = 0x2732, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26EA, + SMSG_DESTROY_ARENA_UNIT = 0x2734, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26EC, SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258C, - SMSG_DISCONNECT_REASON = 0x27DD, SMSG_DISENCHANT_CREDIT = 0x25A5, SMSG_DISMOUNT_RESULT = 0x257C, SMSG_DISPEL_FAILED = 0x2C30, SMSG_DISPLAY_GAME_ERROR = 0x259F, SMSG_DISPLAY_PLAYER_CHOICE = 0x2FFC, - SMSG_DISPLAY_PROMOTION = 0x2641, + SMSG_DISPLAY_PROMOTION = 0x2643, SMSG_DISPLAY_QUEST_POPUP = 0x2A9E, - SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2882, - SMSG_DISPLAY_TOAST = 0x261A, - SMSG_DISPLAY_WORLD_TEXT = 0x27DC, - SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25D9, + SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2883, + SMSG_DISPLAY_TOAST = 0x261B, + SMSG_DISPLAY_WORLD_TEXT = 0x27DE, + SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25DA, SMSG_DROP_NEW_CONNECTION = 0x304C, - SMSG_DUEL_ARRANGED = 0x293B, - SMSG_DUEL_COMPLETE = 0x293F, - SMSG_DUEL_COUNTDOWN = 0x293E, - SMSG_DUEL_IN_BOUNDS = 0x293D, - SMSG_DUEL_OUT_OF_BOUNDS = 0x293C, - SMSG_DUEL_REQUESTED = 0x293A, - SMSG_DUEL_WINNER = 0x2940, - SMSG_DURABILITY_DAMAGE_DEATH = 0x2736, - SMSG_EMOTE = 0x27B5, - SMSG_ENABLE_BARBER_SHOP = 0x26B0, - SMSG_ENCHANTMENT_LOG = 0x2704, - SMSG_ENCOUNTER_END = 0x276E, - SMSG_ENCOUNTER_START = 0x276D, - SMSG_END_LIGHTNING_STORM = 0x269D, + SMSG_DUEL_ARRANGED = 0x293C, + SMSG_DUEL_COMPLETE = 0x2940, + SMSG_DUEL_COUNTDOWN = 0x293F, + SMSG_DUEL_IN_BOUNDS = 0x293E, + SMSG_DUEL_OUT_OF_BOUNDS = 0x293D, + SMSG_DUEL_REQUESTED = 0x293B, + SMSG_DUEL_WINNER = 0x2941, + SMSG_DURABILITY_DAMAGE_DEATH = 0x2738, + SMSG_EMOTE = 0x27B7, + SMSG_ENABLE_BARBER_SHOP = 0x26B2, + SMSG_ENCHANTMENT_LOG = 0x2706, + SMSG_ENCOUNTER_END = 0x2770, + SMSG_ENCOUNTER_START = 0x276F, + SMSG_END_LIGHTNING_STORM = 0x269F, SMSG_ENTER_ENCRYPTED_MODE = 0x3049, SMSG_ENUM_CHARACTERS_RESULT = 0x2583, - SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27E2, + SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27E3, SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C21, - SMSG_EQUIPMENT_SET_ID = 0x26A6, + SMSG_EQUIPMENT_SET_ID = 0x26A8, SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1, - SMSG_EXPLORATION_EXPERIENCE = 0x274F, - SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x287B, - SMSG_FACTION_BONUS_INFO = 0x2715, + SMSG_EXPLORATION_EXPERIENCE = 0x2751, + SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x287C, + SMSG_FACTION_BONUS_INFO = 0x2717, SMSG_FAILED_PLAYER_CONDITION = 0x2FFA, - SMSG_FAILED_QUEST_TURN_IN = 0x27FF, + SMSG_FAILED_QUEST_TURN_IN = 0x2800, SMSG_FEATURE_SYSTEM_STATUS = 0x25BB, SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25BC, - SMSG_FEIGN_DEATH_RESISTED = 0x2735, - SMSG_FISH_ESCAPED = 0x26C3, - SMSG_FISH_NOT_HOOKED = 0x26C2, - SMSG_FLIGHT_SPLINE_SYNC = 0x2E29, - SMSG_FORCED_DEATH_UPDATE = 0x26C7, - SMSG_FORCE_ANIM = 0x2741, - SMSG_FORCE_ANIMATIONS = 0x2742, - SMSG_FORCE_OBJECT_RELINK = 0x2640, - SMSG_FRIEND_STATUS = 0x2777, - SMSG_GAIN_MAW_POWER = 0x27D0, - SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25BE, - SMSG_GAME_OBJECT_BASE = 0x2817, - SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25BF, - SMSG_GAME_OBJECT_DESPAWN = 0x25C0, + SMSG_FEIGN_DEATH_RESISTED = 0x2737, + SMSG_FISH_ESCAPED = 0x26C5, + SMSG_FISH_NOT_HOOKED = 0x26C4, + SMSG_FLIGHT_SPLINE_SYNC = 0x2E2B, + SMSG_FORCED_DEATH_UPDATE = 0x26C9, + SMSG_FORCE_ANIM = 0x2743, + SMSG_FORCE_ANIMATIONS = 0x2744, + SMSG_FORCE_OBJECT_RELINK = 0x2642, + SMSG_FRIEND_STATUS = 0x2779, + SMSG_GAIN_MAW_POWER = 0x27D2, + SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25BF, + SMSG_GAME_OBJECT_BASE = 0x2818, + SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C0, + SMSG_GAME_OBJECT_DESPAWN = 0x25C1, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A, - SMSG_GAME_OBJECT_RESET_STATE = 0x270F, - SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27F2, - SMSG_GAME_OBJECT_UI_LINK = 0x270B, - SMSG_GAME_SPEED_SET = 0x2676, - SMSG_GAME_TIME_SET = 0x26FD, - SMSG_GAME_TIME_UPDATE = 0x26FC, + SMSG_GAME_OBJECT_RESET_STATE = 0x2711, + SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27F3, + SMSG_GAME_OBJECT_UI_LINK = 0x270D, + SMSG_GAME_SPEED_SET = 0x2678, + SMSG_GAME_TIME_SET = 0x26FF, + SMSG_GAME_TIME_UPDATE = 0x26FE, SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x2982, SMSG_GARRISON_ADD_EVENT = 0x29A5, SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2974, @@ -1255,33 +1263,33 @@ enum OpcodeServer : uint16 SMSG_GARRISON_UPGRADE_RESULT = 0x296B, SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x297D, SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2585, - SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x280A, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2751, + SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x280B, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2753, SMSG_GET_GARRISON_INFO_RESULT = 0x295E, - SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x278B, - SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27C8, - SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27B2, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x278A, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2786, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x27B1, - SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27DE, - SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27DF, - SMSG_GM_PLAYER_INFO = 0x3006, + SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x278D, + SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27CA, + SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27B4, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x278C, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2788, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x27B3, + SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27DF, + SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27E0, + SMSG_GM_PLAYER_INFO = 0x3005, SMSG_GM_REQUEST_PLAYER_INFO = 0x2FFB, - SMSG_GM_TICKET_CASE_STATUS = 0x2698, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x2697, - SMSG_GOD_MODE = 0x26ED, + SMSG_GM_TICKET_CASE_STATUS = 0x269A, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x2699, + SMSG_GOD_MODE = 0x26EF, SMSG_GOSSIP_COMPLETE = 0x2A97, SMSG_GOSSIP_MESSAGE = 0x2A98, - SMSG_GOSSIP_POI = 0x2783, + SMSG_GOSSIP_POI = 0x2785, SMSG_GOSSIP_QUEST_UPDATE = 0x2A99, SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA6, SMSG_GROUP_ACTION_THROTTLED = 0x2590, - SMSG_GROUP_AUTO_KICK = 0x2781, - SMSG_GROUP_DECLINE = 0x277E, - SMSG_GROUP_DESTROYED = 0x2780, - SMSG_GROUP_NEW_LEADER = 0x2623, - SMSG_GROUP_UNINVITE = 0x277F, + SMSG_GROUP_AUTO_KICK = 0x2783, + SMSG_GROUP_DECLINE = 0x2780, + SMSG_GROUP_DESTROYED = 0x2782, + SMSG_GROUP_NEW_LEADER = 0x2624, + SMSG_GROUP_UNINVITE = 0x2781, SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5, SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4, SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7, @@ -1335,60 +1343,61 @@ enum OpcodeServer : uint16 SMSG_GUILD_ROSTER = 0x29BB, SMSG_GUILD_ROSTER_UPDATE = 0x29BC, SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9, - SMSG_HEALTH_UPDATE = 0x26C4, - SMSG_HIGHEST_THREAT_UPDATE = 0x26CC, + SMSG_HEALTH_UPDATE = 0x26C6, + SMSG_HIGHEST_THREAT_UPDATE = 0x26CE, SMSG_HOTFIX_CONNECT = 0x2911, SMSG_HOTFIX_MESSAGE = 0x2910, - SMSG_INITIALIZE_FACTIONS = 0x2714, + SMSG_INITIALIZE_FACTIONS = 0x2716, SMSG_INITIAL_SETUP = 0x2580, - SMSG_INIT_WORLD_STATES = 0x2737, - SMSG_INSPECT_RESULT = 0x2627, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x279D, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x279C, - SMSG_INSTANCE_ENCOUNTER_END = 0x27A5, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x279B, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27A7, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27A6, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27A0, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x279F, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27A4, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27A8, - SMSG_INSTANCE_ENCOUNTER_START = 0x27A1, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x279E, - SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27A3, - SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27A2, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26EB, - SMSG_INSTANCE_INFO = 0x262A, - SMSG_INSTANCE_RESET = 0x267B, - SMSG_INSTANCE_RESET_FAILED = 0x267C, - SMSG_INSTANCE_SAVE_CREATED = 0x276C, + SMSG_INIT_WORLD_STATES = 0x2739, + SMSG_INSPECT_RESULT = 0x2628, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x279F, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x279E, + SMSG_INSTANCE_ENCOUNTER_END = 0x27A7, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x279D, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27A9, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27A8, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27A2, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27A1, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27A6, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27AA, + SMSG_INSTANCE_ENCOUNTER_START = 0x27A3, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27A0, + SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27A5, + SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27A4, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26ED, + SMSG_INSTANCE_INFO = 0x262B, + SMSG_INSTANCE_RESET = 0x267D, + SMSG_INSTANCE_RESET_FAILED = 0x267E, + SMSG_INSTANCE_SAVE_CREATED = 0x276E, SMSG_INTERRUPT_POWER_REGEN = 0x2C59, SMSG_INVALIDATE_PAGE_TEXT = 0x2918, SMSG_INVALIDATE_PLAYER = 0x2FFF, - SMSG_INVALID_PROMOTION_CODE = 0x2743, + SMSG_INVALID_PROMOTION_CODE = 0x2745, SMSG_INVENTORY_CHANGE_FAILURE = 0x2DA5, - SMSG_INVENTORY_FIXUP_COMPLETE = 0x2801, - SMSG_INVENTORY_FULL_OVERFLOW = 0x2812, - SMSG_ISLANDS_MISSION_NPC = 0x27E8, - SMSG_ISLAND_AZERITE_GAIN = 0x274C, - SMSG_ISLAND_COMPLETE = 0x274D, + SMSG_INVENTORY_FIXUP_COMPLETE = 0x2802, + SMSG_INVENTORY_FULL_OVERFLOW = 0x2813, + SMSG_ISLANDS_MISSION_NPC = 0x27E9, + SMSG_ISLAND_AZERITE_GAIN = 0x274E, + SMSG_ISLAND_COMPLETE = 0x274F, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A84, - SMSG_ITEM_CHANGED = 0x26DC, - SMSG_ITEM_COOLDOWN = 0x27B3, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2745, + SMSG_ITEM_CHANGED = 0x26DE, + SMSG_ITEM_COOLDOWN = 0x27B5, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2747, SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x259E, - SMSG_ITEM_INTERACTION_COMPLETE = 0x2873, + SMSG_ITEM_INTERACTION_CHARGE_INFO_UPDATED = 0x288B, + SMSG_ITEM_INTERACTION_COMPLETE = 0x2874, SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x259C, - SMSG_ITEM_PUSH_RESULT = 0x2619, - SMSG_ITEM_TIME_UPDATE = 0x2744, - SMSG_KICK_REASON = 0x267E, - SMSG_LATENCY_REPORT_PING = 0x2885, + SMSG_ITEM_PUSH_RESULT = 0x261A, + SMSG_ITEM_TIME_UPDATE = 0x2746, + SMSG_KICK_REASON = 0x2680, + SMSG_LATENCY_REPORT_PING = 0x2886, SMSG_LEARNED_SPELLS = 0x2C4D, - SMSG_LEARN_PVP_TALENT_FAILED = 0x25CD, - SMSG_LEARN_TALENT_FAILED = 0x25CC, - SMSG_LEGACY_LOOT_RULES = 0x2818, - SMSG_LEVEL_LINKING_RESULT = 0x2859, - SMSG_LEVEL_UP_INFO = 0x26DB, + SMSG_LEARN_PVP_TALENT_FAILED = 0x25CE, + SMSG_LEARN_TALENT_FAILED = 0x25CD, + SMSG_LEGACY_LOOT_RULES = 0x2819, + SMSG_LEVEL_LINKING_RESULT = 0x285A, + SMSG_LEVEL_UP_INFO = 0x26DD, SMSG_LFG_BOOT_PLAYER = 0x2A35, SMSG_LFG_DISABLED = 0x2A33, SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x2A3B, @@ -1416,61 +1425,65 @@ enum OpcodeServer : uint16 SMSG_LFG_SLOT_INVALID = 0x2A30, SMSG_LFG_TELEPORT_DENIED = 0x2A32, SMSG_LFG_UPDATE_STATUS = 0x2A24, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x275E, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x275D, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2752, - SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x275F, + SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x2760, + SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x275F, + SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2754, + SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2761, SMSG_LOAD_CUF_PROFILES = 0x25B8, - SMSG_LOAD_EQUIPMENT_SET = 0x26FF, - SMSG_LOGIN_SET_TIME_SPEED = 0x26FE, + SMSG_LOAD_EQUIPMENT_SET = 0x2701, + SMSG_LOGIN_SET_TIME_SPEED = 0x2700, SMSG_LOGIN_VERIFY_WORLD = 0x2599, - SMSG_LOGOUT_CANCEL_ACK = 0x267A, - SMSG_LOGOUT_COMPLETE = 0x2679, - SMSG_LOGOUT_RESPONSE = 0x2678, - SMSG_LOG_XP_GAIN = 0x26D7, - SMSG_LOOT_ALL_PASSED = 0x2617, - SMSG_LOOT_LIST = 0x2731, - SMSG_LOOT_MONEY_NOTIFY = 0x2612, - SMSG_LOOT_RELEASE = 0x2611, - SMSG_LOOT_RELEASE_ALL = 0x2610, - SMSG_LOOT_REMOVED = 0x260C, - SMSG_LOOT_RESPONSE = 0x260B, - SMSG_LOOT_ROLL = 0x2614, - SMSG_LOOT_ROLLS_COMPLETE = 0x2616, - SMSG_LOOT_ROLL_WON = 0x2618, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2665, - SMSG_MAIL_COMMAND_RESULT = 0x2631, - SMSG_MAIL_LIST_RESULT = 0x2746, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2747, - SMSG_MAP_OBJECTIVES_INIT = 0x294A, - SMSG_MAP_OBJ_EVENTS = 0x25C1, - SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2615, + SMSG_LOGOUT_CANCEL_ACK = 0x267C, + SMSG_LOGOUT_COMPLETE = 0x267B, + SMSG_LOGOUT_RESPONSE = 0x267A, + SMSG_LOG_XP_GAIN = 0x26D9, + SMSG_LOOT_ALL_PASSED = 0x2618, + SMSG_LOOT_LIST = 0x2733, + SMSG_LOOT_MONEY_NOTIFY = 0x2613, + SMSG_LOOT_RELEASE = 0x2612, + SMSG_LOOT_RELEASE_ALL = 0x2611, + SMSG_LOOT_REMOVED = 0x260D, + SMSG_LOOT_RESPONSE = 0x260C, + SMSG_LOOT_ROLL = 0x2615, + SMSG_LOOT_ROLLS_COMPLETE = 0x2617, + SMSG_LOOT_ROLL_WON = 0x2619, + SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2667, + SMSG_MAIL_COMMAND_RESULT = 0x2632, + SMSG_MAIL_LIST_RESULT = 0x2748, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2749, + SMSG_MAP_OBJECTIVES_INIT = 0x294B, + SMSG_MAP_OBJ_EVENTS = 0x25C2, + SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2616, SMSG_MESSAGE_BOX = 0x2576, - SMSG_MINIMAP_PING = 0x26C1, + SMSG_MINIMAP_PING = 0x26C3, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13, - SMSG_MISSILE_CANCEL = 0x25C2, - SMSG_MODIFY_COOLDOWN = 0x2754, + SMSG_MISSILE_CANCEL = 0x25C3, + SMSG_MODIFY_COOLDOWN = 0x2756, SMSG_MOTD = 0x2BAF, SMSG_MOUNT_RESULT = 0x257B, - SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x2849, - SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E13, - SMSG_MOVE_DISABLE_COLLISION = 0x2E0F, + SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x284A, + SMSG_MOVE_APPLY_INERTIA = 0x2E2E, + SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E15, + SMSG_MOVE_DISABLE_COLLISION = 0x2E11, SMSG_MOVE_DISABLE_DOUBLE_JUMP = 0x2DFD, SMSG_MOVE_DISABLE_GRAVITY = 0x2E0D, + SMSG_MOVE_DISABLE_INERTIA = 0x2E0F, SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x2E0C, - SMSG_MOVE_ENABLE_COLLISION = 0x2E10, + SMSG_MOVE_ENABLE_COLLISION = 0x2E12, SMSG_MOVE_ENABLE_DOUBLE_JUMP = 0x2DFC, SMSG_MOVE_ENABLE_GRAVITY = 0x2E0E, + SMSG_MOVE_ENABLE_INERTIA = 0x2E10, SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x2E0B, SMSG_MOVE_KNOCK_BACK = 0x2E03, - SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x2E14, + SMSG_MOVE_REMOVE_INERTIA = 0x2E2F, + SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x2E16, SMSG_MOVE_ROOT = 0x2DF9, SMSG_MOVE_SET_ACTIVE_MOVER = 0x2DD5, SMSG_MOVE_SET_CAN_FLY = 0x2E05, SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING = 0x2E07, - SMSG_MOVE_SET_COLLISION_HEIGHT = 0x2E11, - SMSG_MOVE_SET_COMPOUND_STATE = 0x2E15, + SMSG_MOVE_SET_COLLISION_HEIGHT = 0x2E13, + SMSG_MOVE_SET_COMPOUND_STATE = 0x2E17, SMSG_MOVE_SET_FEATHER_FALL = 0x2DFF, SMSG_MOVE_SET_FLIGHT_BACK_SPEED = 0x2DF5, SMSG_MOVE_SET_FLIGHT_SPEED = 0x2DF4, @@ -1485,37 +1498,37 @@ enum OpcodeServer : uint16 SMSG_MOVE_SET_SWIM_BACK_SPEED = 0x2DF3, SMSG_MOVE_SET_SWIM_SPEED = 0x2DF2, SMSG_MOVE_SET_TURN_RATE = 0x2DF7, - SMSG_MOVE_SET_VEHICLE_REC_ID = 0x2E12, + SMSG_MOVE_SET_VEHICLE_REC_ID = 0x2E14, SMSG_MOVE_SET_WALK_SPEED = 0x2DF6, SMSG_MOVE_SET_WATER_WALK = 0x2DFB, - SMSG_MOVE_SKIP_TIME = 0x2E16, - SMSG_MOVE_SPLINE_DISABLE_COLLISION = 0x2E1B, - SMSG_MOVE_SPLINE_DISABLE_GRAVITY = 0x2E19, - SMSG_MOVE_SPLINE_ENABLE_COLLISION = 0x2E1C, - SMSG_MOVE_SPLINE_ENABLE_GRAVITY = 0x2E1A, - SMSG_MOVE_SPLINE_ROOT = 0x2E17, - SMSG_MOVE_SPLINE_SET_FEATHER_FALL = 0x2E1D, + SMSG_MOVE_SKIP_TIME = 0x2E18, + SMSG_MOVE_SPLINE_DISABLE_COLLISION = 0x2E1D, + SMSG_MOVE_SPLINE_DISABLE_GRAVITY = 0x2E1B, + SMSG_MOVE_SPLINE_ENABLE_COLLISION = 0x2E1E, + SMSG_MOVE_SPLINE_ENABLE_GRAVITY = 0x2E1C, + SMSG_MOVE_SPLINE_ROOT = 0x2E19, + SMSG_MOVE_SPLINE_SET_FEATHER_FALL = 0x2E1F, SMSG_MOVE_SPLINE_SET_FLIGHT_BACK_SPEED = 0x2DEC, SMSG_MOVE_SPLINE_SET_FLIGHT_SPEED = 0x2DEB, - SMSG_MOVE_SPLINE_SET_FLYING = 0x2E27, - SMSG_MOVE_SPLINE_SET_HOVER = 0x2E1F, - SMSG_MOVE_SPLINE_SET_LAND_WALK = 0x2E22, - SMSG_MOVE_SPLINE_SET_NORMAL_FALL = 0x2E1E, + SMSG_MOVE_SPLINE_SET_FLYING = 0x2E29, + SMSG_MOVE_SPLINE_SET_HOVER = 0x2E21, + SMSG_MOVE_SPLINE_SET_LAND_WALK = 0x2E24, + SMSG_MOVE_SPLINE_SET_NORMAL_FALL = 0x2E20, SMSG_MOVE_SPLINE_SET_PITCH_RATE = 0x2DEF, SMSG_MOVE_SPLINE_SET_RUN_BACK_SPEED = 0x2DE8, - SMSG_MOVE_SPLINE_SET_RUN_MODE = 0x2E25, + SMSG_MOVE_SPLINE_SET_RUN_MODE = 0x2E27, SMSG_MOVE_SPLINE_SET_RUN_SPEED = 0x2DE7, SMSG_MOVE_SPLINE_SET_SWIM_BACK_SPEED = 0x2DEA, SMSG_MOVE_SPLINE_SET_SWIM_SPEED = 0x2DE9, SMSG_MOVE_SPLINE_SET_TURN_RATE = 0x2DEE, - SMSG_MOVE_SPLINE_SET_WALK_MODE = 0x2E26, + SMSG_MOVE_SPLINE_SET_WALK_MODE = 0x2E28, SMSG_MOVE_SPLINE_SET_WALK_SPEED = 0x2DED, - SMSG_MOVE_SPLINE_SET_WATER_WALK = 0x2E21, - SMSG_MOVE_SPLINE_START_SWIM = 0x2E23, - SMSG_MOVE_SPLINE_STOP_SWIM = 0x2E24, - SMSG_MOVE_SPLINE_UNROOT = 0x2E18, - SMSG_MOVE_SPLINE_UNSET_FLYING = 0x2E28, - SMSG_MOVE_SPLINE_UNSET_HOVER = 0x2E20, + SMSG_MOVE_SPLINE_SET_WATER_WALK = 0x2E23, + SMSG_MOVE_SPLINE_START_SWIM = 0x2E25, + SMSG_MOVE_SPLINE_STOP_SWIM = 0x2E26, + SMSG_MOVE_SPLINE_UNROOT = 0x2E1A, + SMSG_MOVE_SPLINE_UNSET_FLYING = 0x2E2A, + SMSG_MOVE_SPLINE_UNSET_HOVER = 0x2E22, SMSG_MOVE_TELEPORT = 0x2E04, SMSG_MOVE_UNROOT = 0x2DFA, SMSG_MOVE_UNSET_CAN_FLY = 0x2E06, @@ -1523,6 +1536,7 @@ enum OpcodeServer : uint16 SMSG_MOVE_UNSET_HOVERING = 0x2E02, SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x2E0A, SMSG_MOVE_UPDATE = 0x2DE0, + SMSG_MOVE_UPDATE_APPLY_INERTIA = 0x2E30, SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE = 0x2DE4, SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0x2DDF, SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0x2DDC, @@ -1530,6 +1544,7 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_KNOCK_BACK = 0x2DE2, SMSG_MOVE_UPDATE_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x2DE3, SMSG_MOVE_UPDATE_PITCH_RATE = 0x2DDE, + SMSG_MOVE_UPDATE_REMOVE_INERTIA = 0x2E31, SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE = 0x2DE5, SMSG_MOVE_UPDATE_RUN_BACK_SPEED = 0x2DD7, SMSG_MOVE_UPDATE_RUN_SPEED = 0x2DD6, @@ -1538,121 +1553,122 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_TELEPORT = 0x2DE1, SMSG_MOVE_UPDATE_TURN_RATE = 0x2DDD, SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DD8, - SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27CD, - SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27CC, - SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x2603, - SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x2605, - SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x2608, - SMSG_MYTHIC_PLUS_SEASON_DATA = 0x2604, - SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25D4, - SMSG_NEW_TAXI_PATH = 0x2673, + SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27CF, + SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27CE, + SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x2604, + SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x2606, + SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x2609, + SMSG_MYTHIC_PLUS_SEASON_DATA = 0x2605, + SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25D5, + SMSG_NEW_TAXI_PATH = 0x2675, SMSG_NEW_WORLD = 0x2598, SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x269F, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A1, SMSG_NOTIFY_MONEY = 0x259B, - SMSG_NOTIFY_RECEIVED_MAIL = 0x2632, - SMSG_OFFER_PETITION_ERROR = 0x26AA, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26D8, + SMSG_NOTIFY_RECEIVED_MAIL = 0x2633, + SMSG_OFFER_PETITION_ERROR = 0x26AC, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26DA, SMSG_ON_MONSTER_MOVE = 0x2DD4, - SMSG_OPEN_ANIMA_DIVERSION_UI = 0x270C, - SMSG_OPEN_ARTIFACT_FORGE = 0x278F, + SMSG_OPEN_ANIMA_DIVERSION_UI = 0x270E, + SMSG_OPEN_ARTIFACT_FORGE = 0x2791, SMSG_OPEN_CONTAINER = 0x2DA6, - SMSG_OPEN_HEART_FORGE = 0x2815, - SMSG_OPEN_ITEM_FORGE = 0x278D, + SMSG_OPEN_HEART_FORGE = 0x2816, + SMSG_OPEN_ITEM_FORGE = 0x278F, SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31, - SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x2785, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2787, - SMSG_OVERRIDE_LIGHT = 0x26AF, - SMSG_PAGE_TEXT = 0x270A, - SMSG_PARTY_COMMAND_RESULT = 0x2782, + SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x2787, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2789, + SMSG_OVERRIDE_LIGHT = 0x26B1, + SMSG_PAGE_TEXT = 0x270C, + SMSG_PARTY_COMMAND_RESULT = 0x2784, SMSG_PARTY_INVITE = 0x25B9, - SMSG_PARTY_KILL_LOG = 0x274A, - SMSG_PARTY_MEMBER_FULL_STATE = 0x2749, - SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2748, - SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x2879, - SMSG_PARTY_UPDATE = 0x25ED, - SMSG_PAUSE_MIRROR_TIMER = 0x2701, - SMSG_PENDING_RAID_LOCK = 0x26E9, + SMSG_PARTY_KILL_LOG = 0x274C, + SMSG_PARTY_MEMBER_FULL_STATE = 0x274B, + SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x274A, + SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x287A, + SMSG_PARTY_UPDATE = 0x25EE, + SMSG_PASSED_TIME_EVENTS = 0x25BE, + SMSG_PAUSE_MIRROR_TIMER = 0x2703, + SMSG_PENDING_RAID_LOCK = 0x26EB, SMSG_PETITION_ALREADY_SIGNED = 0x25A1, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FA, - SMSG_PETITION_SHOW_LIST = 0x26B2, - SMSG_PETITION_SHOW_SIGNATURES = 0x26B3, - SMSG_PETITION_SIGN_RESULTS = 0x273C, - SMSG_PET_ACTION_FEEDBACK = 0x2739, - SMSG_PET_ACTION_SOUND = 0x2695, + SMSG_PETITION_SHOW_LIST = 0x26B4, + SMSG_PETITION_SHOW_SIGNATURES = 0x26B5, + SMSG_PETITION_SIGN_RESULTS = 0x273E, + SMSG_PET_ACTION_FEEDBACK = 0x273B, + SMSG_PET_ACTION_SOUND = 0x2697, SMSG_PET_ADDED = 0x2595, - SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x25FA, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x266A, - SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25F3, - SMSG_PET_BATTLE_FINAL_ROUND = 0x25F8, - SMSG_PET_BATTLE_FINISHED = 0x25F9, - SMSG_PET_BATTLE_FIRST_ROUND = 0x25F5, - SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25F4, - SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x25FB, - SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25F2, - SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x262F, - SMSG_PET_BATTLE_QUEUE_STATUS = 0x2630, - SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25F7, - SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F1, - SMSG_PET_BATTLE_ROUND_RESULT = 0x25F6, - SMSG_PET_BATTLE_SLOT_UPDATES = 0x25E4, + SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x25FB, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x266C, + SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25F4, + SMSG_PET_BATTLE_FINAL_ROUND = 0x25F9, + SMSG_PET_BATTLE_FINISHED = 0x25FA, + SMSG_PET_BATTLE_FIRST_ROUND = 0x25F6, + SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25F5, + SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x25FC, + SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25F3, + SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2630, + SMSG_PET_BATTLE_QUEUE_STATUS = 0x2631, + SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25F8, + SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F2, + SMSG_PET_BATTLE_ROUND_RESULT = 0x25F7, + SMSG_PET_BATTLE_SLOT_UPDATES = 0x25E5, SMSG_PET_CAST_FAILED = 0x2C58, SMSG_PET_CLEAR_SPELLS = 0x2C24, - SMSG_PET_DISMISS_SOUND = 0x2696, - SMSG_PET_GOD_MODE = 0x2670, - SMSG_PET_GUIDS = 0x26F5, + SMSG_PET_DISMISS_SOUND = 0x2698, + SMSG_PET_GOD_MODE = 0x2672, + SMSG_PET_GUIDS = 0x26F7, SMSG_PET_LEARNED_SPELLS = 0x2C4F, SMSG_PET_MODE = 0x258B, - SMSG_PET_NAME_INVALID = 0x26B7, + SMSG_PET_NAME_INVALID = 0x26B9, SMSG_PET_NEWLY_TAMED = 0x2589, SMSG_PET_SLOT_UPDATED = 0x258A, SMSG_PET_SPELLS_MESSAGE = 0x2C25, SMSG_PET_STABLE_LIST = 0x2596, SMSG_PET_STABLE_RESULT = 0x2597, - SMSG_PET_TAME_FAILURE = 0x26A7, + SMSG_PET_TAME_FAILURE = 0x26A9, SMSG_PET_UNLEARNED_SPELLS = 0x2C50, SMSG_PHASE_SHIFT_CHANGE = 0x2578, - SMSG_PLAYED_TIME = 0x26C8, - SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3015, - SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3014, - SMSG_PLAYER_BONUS_ROLL_FAILED = 0x3017, + SMSG_PLAYED_TIME = 0x26CA, + SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3014, + SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3013, + SMSG_PLAYER_BONUS_ROLL_FAILED = 0x3016, SMSG_PLAYER_BOUND = 0x2FF8, SMSG_PLAYER_CHOICE_CLEAR = 0x2FFE, SMSG_PLAYER_CHOICE_DISPLAY_ERROR = 0x2FFD, - SMSG_PLAYER_CONDITION_RESULT = 0x300B, - SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x300A, - SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x300F, + SMSG_PLAYER_CONDITION_RESULT = 0x300A, + SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x3009, + SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x300E, SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F9, - SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x301A, - SMSG_PLAYER_SKINNED = 0x3007, - SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x3008, - SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x300E, - SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x300D, - SMSG_PLAY_MUSIC = 0x2759, - SMSG_PLAY_OBJECT_SOUND = 0x275A, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2721, + SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x3019, + SMSG_PLAYER_SKINNED = 0x3006, + SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x3007, + SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x300D, + SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x300C, + SMSG_PLAY_MUSIC = 0x275B, + SMSG_PLAY_OBJECT_SOUND = 0x275C, + SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2723, SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C47, - SMSG_PLAY_SCENE = 0x262C, - SMSG_PLAY_SOUND = 0x2758, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x275B, + SMSG_PLAY_SCENE = 0x262D, + SMSG_PLAY_SOUND = 0x275A, + SMSG_PLAY_SPEAKERBOT_SOUND = 0x275D, SMSG_PLAY_SPELL_VISUAL = 0x2C45, SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C49, - SMSG_PLAY_TIME_WARNING = 0x26EF, + SMSG_PLAY_TIME_WARNING = 0x26F1, SMSG_PONG = 0x304E, - SMSG_POWER_UPDATE = 0x26C5, + SMSG_POWER_UPDATE = 0x26C7, SMSG_PRELOAD_CHILD_MAP = 0x2579, - SMSG_PREPOPULATE_NAME_CACHE = 0x284C, - SMSG_PRE_RESSURECT = 0x2757, - SMSG_PRINT_NOTIFICATION = 0x25C5, - SMSG_PROC_RESIST = 0x274B, + SMSG_PREPOPULATE_NAME_CACHE = 0x284D, + SMSG_PRE_RESSURECT = 0x2759, + SMSG_PRINT_NOTIFICATION = 0x25C6, + SMSG_PROC_RESIST = 0x274D, SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51, - SMSG_PVP_CREDIT = 0x2944, - SMSG_PVP_MATCH_COMPLETE = 0x294E, - SMSG_PVP_MATCH_INITIALIZE = 0x294F, - SMSG_PVP_MATCH_START = 0x294D, - SMSG_PVP_MATCH_STATISTICS = 0x2931, - SMSG_PVP_OPTIONS_ENABLED = 0x2933, - SMSG_PVP_TIER_RECORD = 0x2886, + SMSG_PVP_CREDIT = 0x2945, + SMSG_PVP_MATCH_COMPLETE = 0x294F, + SMSG_PVP_MATCH_INITIALIZE = 0x2950, + SMSG_PVP_MATCH_START = 0x294E, + SMSG_PVP_MATCH_STATISTICS = 0x2932, + SMSG_PVP_OPTIONS_ENABLED = 0x2934, + SMSG_PVP_TIER_RECORD = 0x2887, SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x291A, SMSG_QUERY_CREATURE_RESPONSE = 0x2914, SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2915, @@ -1664,11 +1680,11 @@ enum OpcodeServer : uint16 SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2917, SMSG_QUERY_PETITION_RESPONSE = 0x291B, SMSG_QUERY_PET_NAME_RESPONSE = 0x2919, - SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x3003, - SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x3002, + SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x3002, + SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x301B, SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A96, SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x29E6, - SMSG_QUERY_TIME_RESPONSE = 0x26D6, + SMSG_QUERY_TIME_RESPONSE = 0x26D8, SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81, SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8F, SMSG_QUEST_FORCE_REMOVED = 0x2A9C, @@ -1686,50 +1702,50 @@ enum OpcodeServer : uint16 SMSG_QUEST_POI_QUERY_RESPONSE = 0x2A9D, SMSG_QUEST_POI_UPDATE_RESPONSE = 0x2A9F, SMSG_QUEST_PUSH_RESULT = 0x2A90, - SMSG_QUEST_SESSION_INFO_RESPONSE = 0x286F, - SMSG_QUEST_SESSION_READY_CHECK = 0x285D, - SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x285E, - SMSG_QUEST_SESSION_RESULT = 0x285C, + SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2870, + SMSG_QUEST_SESSION_READY_CHECK = 0x285E, + SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x285F, + SMSG_QUEST_SESSION_RESULT = 0x285D, SMSG_QUEST_UPDATE_ADD_CREDIT = 0x2A8C, SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x2A8D, SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x2A8E, SMSG_QUEST_UPDATE_COMPLETE = 0x2A89, SMSG_QUEST_UPDATE_FAILED = 0x2A8A, SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8B, - SMSG_QUEUE_SUMMARY_UPDATE = 0x2800, - SMSG_RAF_ACCOUNT_INFO = 0x285A, - SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x286B, - SMSG_RAID_DIFFICULTY_SET = 0x2798, - SMSG_RAID_GROUP_ONLY = 0x279A, + SMSG_QUEUE_SUMMARY_UPDATE = 0x2801, + SMSG_RAF_ACCOUNT_INFO = 0x285B, + SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x286C, + SMSG_RAID_DIFFICULTY_SET = 0x279A, + SMSG_RAID_GROUP_ONLY = 0x279C, SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4, SMSG_RAID_MARKERS_CHANGED = 0x25A2, - SMSG_RANDOM_ROLL = 0x2626, - SMSG_RATED_PVP_INFO = 0x2930, - SMSG_READY_CHECK_COMPLETED = 0x25F0, - SMSG_READY_CHECK_RESPONSE = 0x25EF, - SMSG_READY_CHECK_STARTED = 0x25EE, - SMSG_READ_ITEM_RESULT_FAILED = 0x2794, - SMSG_READ_ITEM_RESULT_OK = 0x278C, - SMSG_REALM_LOOKUP_INFO = 0x27B8, + SMSG_RANDOM_ROLL = 0x2627, + SMSG_RATED_PVP_INFO = 0x2931, + SMSG_READY_CHECK_COMPLETED = 0x25F1, + SMSG_READY_CHECK_RESPONSE = 0x25F0, + SMSG_READY_CHECK_STARTED = 0x25EF, + SMSG_READ_ITEM_RESULT_FAILED = 0x2796, + SMSG_READ_ITEM_RESULT_OK = 0x278E, + SMSG_REALM_LOOKUP_INFO = 0x27BA, SMSG_REALM_QUERY_RESPONSE = 0x2913, - SMSG_REATTACH_RESURRECT = 0x273B, - SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26B4, - SMSG_REFRESH_COMPONENT = 0x2646, + SMSG_REATTACH_RESURRECT = 0x273D, + SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26B6, + SMSG_REFRESH_COMPONENT = 0x2648, SMSG_REFRESH_SPELL_HISTORY = 0x2C2C, SMSG_REMOVE_ITEM_PASSIVE = 0x25A9, SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C52, - SMSG_REPLACE_TROPHY_RESPONSE = 0x27B0, + SMSG_REPLACE_TROPHY_RESPONSE = 0x27B2, SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x3001, SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x2591, - SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2934, - SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2935, + SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2935, + SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2936, SMSG_RESEARCH_COMPLETE = 0x2587, SMSG_RESET_COMPRESSION_CONTEXT = 0x304F, - SMSG_RESET_FAILED_NOTIFY = 0x26AB, + SMSG_RESET_FAILED_NOTIFY = 0x26AD, SMSG_RESET_QUEST_POI = 0x2AA0, - SMSG_RESET_RANGED_COMBAT_TIMER = 0x2943, + SMSG_RESET_RANGED_COMBAT_TIMER = 0x2944, SMSG_RESET_WEEKLY_CURRENCY = 0x2575, - SMSG_RESPEC_WIPE_CONFIRM = 0x2609, + SMSG_RESPEC_WIPE_CONFIRM = 0x260A, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2572, SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C60, SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25B5, @@ -1739,82 +1755,82 @@ enum OpcodeServer : uint16 SMSG_RESUME_TOKEN = 0x25A7, SMSG_RESURRECT_REQUEST = 0x257E, SMSG_RESYNC_RUNES = 0x2C5F, - SMSG_RETURN_APPLICANT_LIST = 0x2850, - SMSG_RETURN_RECRUITING_CLUBS = 0x284F, + SMSG_RETURN_APPLICANT_LIST = 0x2851, + SMSG_RETURN_RECRUITING_CLUBS = 0x2850, SMSG_ROLE_CHANGED_INFORM = 0x258D, SMSG_ROLE_CHOSEN = 0x2A39, SMSG_ROLE_POLL_INFORM = 0x258E, - SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27ED, + SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27EE, SMSG_RUNE_REGEN_DEBUG = 0x25B2, - SMSG_SCENARIO_COMPLETED = 0x27DA, - SMSG_SCENARIO_POIS = 0x2629, - SMSG_SCENARIO_PROGRESS_UPDATE = 0x2622, - SMSG_SCENARIO_SHOW_CRITERIA = 0x27F0, - SMSG_SCENARIO_STATE = 0x2621, - SMSG_SCENARIO_UI_UPDATE = 0x27EF, - SMSG_SCENARIO_VACATE = 0x2795, - SMSG_SCENE_OBJECT_EVENT = 0x25DA, - SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25DF, - SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E0, - SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25DC, - SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25DB, - SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25DE, - SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25DD, + SMSG_SCENARIO_COMPLETED = 0x27DC, + SMSG_SCENARIO_POIS = 0x262A, + SMSG_SCENARIO_PROGRESS_UPDATE = 0x2623, + SMSG_SCENARIO_SHOW_CRITERIA = 0x27F1, + SMSG_SCENARIO_STATE = 0x2622, + SMSG_SCENARIO_UI_UPDATE = 0x27F0, + SMSG_SCENARIO_VACATE = 0x2797, + SMSG_SCENE_OBJECT_EVENT = 0x25DB, + SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E0, + SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E1, + SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25DD, + SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25DC, + SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25DF, + SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25DE, SMSG_SCRIPT_CAST = 0x2C56, SMSG_SEASON_INFO = 0x25BD, - SMSG_SELL_RESPONSE = 0x26B8, + SMSG_SELL_RESPONSE = 0x26BA, SMSG_SEND_ITEM_PASSIVES = 0x25AA, SMSG_SEND_KNOWN_SPELLS = 0x2C2A, - SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x2624, - SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x2625, + SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x2625, + SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x2626, SMSG_SEND_SPELL_CHARGES = 0x2C2D, SMSG_SEND_SPELL_HISTORY = 0x2C2B, SMSG_SEND_UNLEARN_SPELLS = 0x2C2E, - SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x2643, - SMSG_SERVER_TIME = 0x2677, - SMSG_SERVER_TIME_OFFSET = 0x2705, + SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x2645, + SMSG_SERVER_TIME = 0x2679, + SMSG_SERVER_TIME_OFFSET = 0x2707, SMSG_SETUP_CURRENCY = 0x2573, SMSG_SETUP_RESEARCH_HISTORY = 0x2586, - SMSG_SET_AI_ANIM_KIT = 0x2720, - SMSG_SET_ALL_TASK_PROGRESS = 0x277C, - SMSG_SET_ANIM_TIER = 0x2724, - SMSG_SET_CHR_UPGRADE_TIER = 0x25D7, + SMSG_SET_AI_ANIM_KIT = 0x2722, + SMSG_SET_ALL_TASK_PROGRESS = 0x277E, + SMSG_SET_ANIM_TIER = 0x2726, + SMSG_SET_CHR_UPGRADE_TIER = 0x25D8, SMSG_SET_CURRENCY = 0x2574, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E, - SMSG_SET_DUNGEON_DIFFICULTY = 0x2699, - SMSG_SET_FACTION_AT_WAR = 0x26F1, - SMSG_SET_FACTION_NOT_VISIBLE = 0x271B, - SMSG_SET_FACTION_STANDING = 0x271C, - SMSG_SET_FACTION_VISIBLE = 0x271A, + SMSG_SET_DUNGEON_DIFFICULTY = 0x269B, + SMSG_SET_FACTION_AT_WAR = 0x26F3, + SMSG_SET_FACTION_NOT_VISIBLE = 0x271D, + SMSG_SET_FACTION_STANDING = 0x271E, + SMSG_SET_FACTION_VISIBLE = 0x271C, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36, - SMSG_SET_FORCED_REACTIONS = 0x270E, + SMSG_SET_FORCED_REACTIONS = 0x2710, SMSG_SET_ITEM_PURCHASE_DATA = 0x259D, - SMSG_SET_LOOT_METHOD_FAILED = 0x27BE, + SMSG_SET_LOOT_METHOD_FAILED = 0x27C0, SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25A0, - SMSG_SET_MELEE_ANIM_KIT = 0x2723, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x2722, + SMSG_SET_MELEE_ANIM_KIT = 0x2725, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x2724, SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37, - SMSG_SET_PET_SPECIALIZATION = 0x261B, - SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x3004, + SMSG_SET_PET_SPECIALIZATION = 0x261C, + SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x3003, SMSG_SET_PLAY_HOVER_ANIM = 0x25B6, - SMSG_SET_PROFICIENCY = 0x2725, - SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2863, + SMSG_SET_PROFICIENCY = 0x2727, + SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2864, SMSG_SET_SHIPMENT_READY_RESPONSE = 0x2997, SMSG_SET_SPELL_CHARGES = 0x2C29, - SMSG_SET_TASK_COMPLETE = 0x277D, - SMSG_SET_TIME_ZONE_INFORMATION = 0x266C, - SMSG_SET_VEHICLE_REC_ID = 0x26E8, + SMSG_SET_TASK_COMPLETE = 0x277F, + SMSG_SET_TIME_ZONE_INFORMATION = 0x266E, + SMSG_SET_VEHICLE_REC_ID = 0x26EA, SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x2998, - SMSG_SHOW_BANK = 0x2674, - SMSG_SHOW_MAILBOX = 0x2796, - SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25D3, + SMSG_SHOW_BANK = 0x2676, + SMSG_SHOW_MAILBOX = 0x2798, + SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25D4, SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x2A95, - SMSG_SHOW_TAXI_NODES = 0x26C0, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2760, - SMSG_SOCKET_GEMS_FAILURE = 0x2718, - SMSG_SOCKET_GEMS_SUCCESS = 0x2717, - SMSG_SPECIAL_MOUNT_ANIM = 0x2694, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2709, + SMSG_SHOW_TAXI_NODES = 0x26C2, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2762, + SMSG_SOCKET_GEMS_FAILURE = 0x271A, + SMSG_SOCKET_GEMS_SUCCESS = 0x2719, + SMSG_SPECIAL_MOUNT_ANIM = 0x2696, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x270B, SMSG_SPELL_ABSORB_LOG = 0x2C1F, SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C17, SMSG_SPELL_CHANNEL_START = 0x2C34, @@ -1839,94 +1855,95 @@ enum OpcodeServer : uint16 SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C1B, SMSG_SPELL_PREPARE = 0x2C38, SMSG_SPELL_START = 0x2C3A, - SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25C7, - SMSG_SPIRIT_HEALER_CONFIRM = 0x2706, - SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2875, - SMSG_STAND_STATE_UPDATE = 0x270D, - SMSG_START_ELAPSED_TIMER = 0x25FC, - SMSG_START_ELAPSED_TIMERS = 0x25FE, - SMSG_START_LIGHTNING_STORM = 0x269C, - SMSG_START_LOOT_ROLL = 0x2613, - SMSG_START_MIRROR_TIMER = 0x2700, + SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25C8, + SMSG_SPIRIT_HEALER_CONFIRM = 0x2708, + SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2876, + SMSG_STAND_STATE_UPDATE = 0x270F, + SMSG_START_ELAPSED_TIMER = 0x25FD, + SMSG_START_ELAPSED_TIMERS = 0x25FF, + SMSG_START_LIGHTNING_STORM = 0x269E, + SMSG_START_LOOT_ROLL = 0x2614, + SMSG_START_MIRROR_TIMER = 0x2702, SMSG_START_TIMER = 0x25A4, - SMSG_STOP_ELAPSED_TIMER = 0x25FD, - SMSG_STOP_MIRROR_TIMER = 0x2702, - SMSG_STOP_SPEAKERBOT_SOUND = 0x275C, + SMSG_STOP_ELAPSED_TIMER = 0x25FE, + SMSG_STOP_MIRROR_TIMER = 0x2704, + SMSG_STOP_SPEAKERBOT_SOUND = 0x275E, SMSG_STREAMING_MOVIES = 0x25A3, - SMSG_SUMMON_CANCEL = 0x26A5, + SMSG_SUMMON_CANCEL = 0x26A7, SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258F, - SMSG_SUMMON_REQUEST = 0x2712, + SMSG_SUMMON_REQUEST = 0x2714, SMSG_SUPERCEDED_SPELLS = 0x2C4C, SMSG_SUSPEND_COMMS = 0x304A, SMSG_SUSPEND_TOKEN = 0x25A6, - SMSG_SYNC_WOW_ENTITLEMENTS = 0x286D, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2708, - SMSG_TAXI_NODE_STATUS = 0x2671, - SMSG_TEXT_EMOTE = 0x266F, - SMSG_THREAT_CLEAR = 0x26CF, - SMSG_THREAT_REMOVE = 0x26CE, - SMSG_THREAT_UPDATE = 0x26CD, + SMSG_SYNC_WOW_ENTITLEMENTS = 0x286E, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x270A, + SMSG_TAXI_NODE_STATUS = 0x2673, + SMSG_TEXT_EMOTE = 0x2671, + SMSG_THREAT_CLEAR = 0x26D1, + SMSG_THREAT_REMOVE = 0x26D0, + SMSG_THREAT_UPDATE = 0x26CF, SMSG_TIME_ADJUSTMENT = 0x2DD3, SMSG_TIME_SYNC_REQUEST = 0x2DD2, - SMSG_TITLE_EARNED = 0x26CA, - SMSG_TITLE_LOST = 0x26CB, - SMSG_TOTEM_CREATED = 0x26BB, - SMSG_TOTEM_DURATION_CHANGED = 0x26BC, - SMSG_TOTEM_MOVED = 0x26BD, + SMSG_TITLE_EARNED = 0x26CC, + SMSG_TITLE_LOST = 0x26CD, + SMSG_TOTEM_CREATED = 0x26BD, + SMSG_TOTEM_DURATION_CHANGED = 0x26BE, + SMSG_TOTEM_MOVED = 0x26BF, SMSG_TRADE_STATUS = 0x2582, SMSG_TRADE_UPDATED = 0x2581, - SMSG_TRAINER_BUY_FAILED = 0x26D2, - SMSG_TRAINER_LIST = 0x26D1, - SMSG_TRANSFER_ABORTED = 0x26F4, - SMSG_TRANSFER_PENDING = 0x25C8, - SMSG_TRANSMOGRIFY_NPC = 0x27E5, + SMSG_TRAINER_BUY_FAILED = 0x26D4, + SMSG_TRAINER_LIST = 0x26D3, + SMSG_TRANSFER_ABORTED = 0x26F6, + SMSG_TRANSFER_PENDING = 0x25C9, + SMSG_TRANSMOGRIFY_NPC = 0x27E6, SMSG_TREASURE_PICKER_RESPONSE = 0x291F, - SMSG_TRIGGER_CINEMATIC = 0x27B6, - SMSG_TRIGGER_MOVIE = 0x26BE, - SMSG_TURN_IN_PETITION_RESULT = 0x273E, - SMSG_TUTORIAL_FLAGS = 0x27A9, + SMSG_TRIGGER_CINEMATIC = 0x27B8, + SMSG_TRIGGER_MOVIE = 0x26C0, + SMSG_TURN_IN_PETITION_RESULT = 0x2740, + SMSG_TUTORIAL_FLAGS = 0x27AB, SMSG_TWITTER_STATUS = 0x3043, - SMSG_UI_HEALING_RANGE_MODIFIED = 0x2734, - SMSG_UI_ITEM_INTERACTION_NPC = 0x27E7, + SMSG_UI_HEALING_RANGE_MODIFIED = 0x2736, + SMSG_UI_ITEM_INTERACTION_NPC = 0x27E8, SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA2, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27B9, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27BA, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27BB, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27BC, SMSG_UNLEARNED_SPELLS = 0x2C4E, SMSG_UNLOAD_CHILD_MAP = 0x257A, - SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x2887, - SMSG_UPDATE_ACCOUNT_DATA = 0x26FA, - SMSG_UPDATE_ACTION_BUTTONS = 0x25D8, - SMSG_UPDATE_BNET_SESSION_KEY = 0x2811, + SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x2888, + SMSG_UPDATE_ACCOUNT_DATA = 0x26FC, + SMSG_UPDATE_ACTION_BUTTONS = 0x25D9, + SMSG_UPDATE_BNET_SESSION_KEY = 0x2812, SMSG_UPDATE_CAPTURE_POINT = 0x2929, - SMSG_UPDATE_CELESTIAL_BODY = 0x280D, - SMSG_UPDATE_CHARACTER_FLAGS = 0x27AF, - SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2756, - SMSG_UPDATE_COOLDOWN = 0x2755, + SMSG_UPDATE_CELESTIAL_BODY = 0x280E, + SMSG_UPDATE_CHARACTER_FLAGS = 0x27B1, + SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2758, + SMSG_UPDATE_COOLDOWN = 0x2757, SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x297F, - SMSG_UPDATE_EXPANSION_LEVEL = 0x263C, - SMSG_UPDATE_GAME_TIME_STATE = 0x2814, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x269E, - SMSG_UPDATE_LAST_INSTANCE = 0x267D, - SMSG_UPDATE_OBJECT = 0x27B7, - SMSG_UPDATE_PRIMARY_SPEC = 0x25D0, - SMSG_UPDATE_TALENT_DATA = 0x25CF, - SMSG_UPDATE_TASK_PROGRESS = 0x277B, + SMSG_UPDATE_EXPANSION_LEVEL = 0x263D, + SMSG_UPDATE_GAME_TIME_STATE = 0x2815, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A0, + SMSG_UPDATE_LAST_INSTANCE = 0x267F, + SMSG_UPDATE_OBJECT = 0x27B9, + SMSG_UPDATE_PRIMARY_SPEC = 0x25D1, + SMSG_UPDATE_TALENT_DATA = 0x25D0, + SMSG_UPDATE_TASK_PROGRESS = 0x277D, SMSG_UPDATE_WEEKLY_SPELL_USAGE = 0x2C19, - SMSG_UPDATE_WORLD_STATE = 0x2738, + SMSG_UPDATE_WORLD_STATE = 0x273A, SMSG_USERLIST_ADD = 0x2BB9, SMSG_USERLIST_REMOVE = 0x2BBA, SMSG_USERLIST_UPDATE = 0x2BBB, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x273F, - SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2808, - SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2806, - SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2805, - SMSG_VAS_PURCHASE_COMPLETE = 0x27E1, - SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27E0, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x2741, + SMSG_VAS_ASSIGN_DISTRIBUTION_RESPONSE = 0x288A, + SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2809, + SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2807, + SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2806, + SMSG_VAS_PURCHASE_COMPLETE = 0x27E2, + SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27E1, SMSG_VENDOR_INVENTORY = 0x25B4, - SMSG_VIGNETTE_UPDATE = 0x3009, - SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x280C, - SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2881, - SMSG_VOICE_LOGIN_RESPONSE = 0x280B, + SMSG_VIGNETTE_UPDATE = 0x3008, + SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x280D, + SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2882, + SMSG_VOICE_LOGIN_RESPONSE = 0x280C, SMSG_VOID_ITEM_SWAP_RESPONSE = 0x2DA4, SMSG_VOID_STORAGE_CONTENTS = 0x2DA1, SMSG_VOID_STORAGE_FAILED = 0x2DA0, @@ -1935,24 +1952,24 @@ enum OpcodeServer : uint16 SMSG_WAIT_QUEUE_FINISH = 0x256F, SMSG_WAIT_QUEUE_UPDATE = 0x256E, SMSG_WARDEN3_DATA = 0x2577, - SMSG_WARDEN3_DISABLED = 0x280F, - SMSG_WARDEN3_ENABLED = 0x280E, - SMSG_WARFRONT_COMPLETE = 0x274E, - SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x2932, - SMSG_WEATHER = 0x269B, - SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x2878, - SMSG_WEEKLY_REWARDS_RESULT = 0x2876, - SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x2877, + SMSG_WARDEN3_DISABLED = 0x2810, + SMSG_WARDEN3_ENABLED = 0x280F, + SMSG_WARFRONT_COMPLETE = 0x2750, + SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x2933, + SMSG_WEATHER = 0x269D, + SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x2879, + SMSG_WEEKLY_REWARDS_RESULT = 0x2877, + SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x2878, SMSG_WEEKLY_SPELL_USAGE = 0x2C18, SMSG_WHO = 0x2BAE, - SMSG_WHO_IS = 0x269A, - SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x2813, - SMSG_WORLD_MAP_OPEN_NPC = 0x27E4, - SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x3010, + SMSG_WHO_IS = 0x269C, + SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x2814, + SMSG_WORLD_MAP_OPEN_NPC = 0x27E5, + SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x300F, SMSG_WORLD_SERVER_INFO = 0x25AB, - SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x286E, - SMSG_XP_GAIN_ABORTED = 0x25C4, - SMSG_XP_GAIN_ENABLED = 0x2799, + SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x286F, + SMSG_XP_GAIN_ABORTED = 0x25C5, + SMSG_XP_GAIN_ENABLED = 0x279B, SMSG_ZONE_UNDER_ATTACK = 0x2BB5, // Opcodes that are not generated automatically diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index ed50b2d1b95..0c97b79ed05 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -622,6 +622,7 @@ namespace WorldPackets namespace Query { class QueryCreature; + struct NameCacheLookupResult; class QueryPlayerName; class QueryPageText; class QueryNPCText; @@ -832,25 +833,26 @@ namespace pb = google::protobuf; enum AccountDataType { - GLOBAL_CONFIG_CACHE = 0, // 0x01 g - PER_CHARACTER_CONFIG_CACHE = 1, // 0x02 p - GLOBAL_BINDINGS_CACHE = 2, // 0x04 g - PER_CHARACTER_BINDINGS_CACHE = 3, // 0x08 p - GLOBAL_MACROS_CACHE = 4, // 0x10 g - PER_CHARACTER_MACROS_CACHE = 5, // 0x20 p - PER_CHARACTER_LAYOUT_CACHE = 6, // 0x40 p - PER_CHARACTER_CHAT_CACHE = 7, // 0x80 p - GLOBAL_TTS_CACHE = 8, - PER_CHARACTER_TTS_CACHE = 9, - GLOBAL_FLAGGED_CACHE = 10, - PER_CHARACTER_FLAGGED_CACHE = 11 + GLOBAL_CONFIG_CACHE = 0, // 0x01 g + PER_CHARACTER_CONFIG_CACHE = 1, // 0x02 p + GLOBAL_BINDINGS_CACHE = 2, // 0x04 g + PER_CHARACTER_BINDINGS_CACHE = 3, // 0x08 p + GLOBAL_MACROS_CACHE = 4, // 0x10 g + PER_CHARACTER_MACROS_CACHE = 5, // 0x20 p + PER_CHARACTER_LAYOUT_CACHE = 6, // 0x40 p + PER_CHARACTER_CHAT_CACHE = 7, // 0x80 p + GLOBAL_TTS_CACHE = 8, + PER_CHARACTER_TTS_CACHE = 9, + GLOBAL_FLAGGED_CACHE = 10, + PER_CHARACTER_FLAGGED_CACHE = 11, + PER_CHARACTER_CLICK_BINDINGS_CACHE = 12, }; -#define NUM_ACCOUNT_DATA_TYPES 12 +#define NUM_ACCOUNT_DATA_TYPES 13 -#define ALL_ACCOUNT_DATA_CACHE_MASK 0xFFF +#define ALL_ACCOUNT_DATA_CACHE_MASK 0x1FFF #define GLOBAL_CACHE_MASK 0x515 -#define PER_CHARACTER_CACHE_MASK 0xAEA +#define PER_CHARACTER_CACHE_MASK 0x1AEA struct AccountData { @@ -1046,7 +1048,7 @@ class TC_GAME_API WorldSession void SendFeatureSystemStatus(); void SendFeatureSystemStatusGlueScreen(); - void SendNameQueryOpcode(ObjectGuid guid); + void BuildNameQueryData(ObjectGuid guid, WorldPackets::Query::NameCacheLookupResult& lookupData); void SendTrainerList(Creature* npc, uint32 trainerId); void SendListInventory(ObjectGuid guid); diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index 40c3782806d..76b521b9358 100644 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -503,6 +503,12 @@ class TC_SHARED_API ByteBuffer append(str.c_str(), len); } + void WriteString(std::string_view str) + { + if (size_t len = str.length()) + append(str.data(), len); + } + void WriteString(char const* str, size_t len) { if (len) |