diff options
Diffstat (limited to 'src')
96 files changed, 4948 insertions, 3541 deletions
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index ff970015a02..147e8faa0d0 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -501,7 +501,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_ACCOUNT_ONLINE, "UPDATE characters SET online = 0 WHERE account = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHARACTER_CUSTOMIZATION, "INSERT INTO character_customizations (guid, chrCustomizationOptionID, chrCustomizationChoiceID) VALUES (?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHARACTER_CUSTOMIZATIONS, "DELETE FROM character_customizations WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_GROUP, "INSERT INTO `groups` (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raidDifficulty, legacyRaidDifficulty, masterLooterGuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_GROUP, "INSERT INTO `groups` (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raidDifficulty, legacyRaidDifficulty, masterLooterGuid, pingRestriction) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_GROUP_MEMBER, "INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_GROUP_MEMBER, "DELETE FROM group_member WHERE memberGuid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_GROUP_LEADER, "UPDATE `groups` SET leaderGuid = ? WHERE guid = ?", CONNECTION_ASYNC); @@ -511,6 +511,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_GROUP_DIFFICULTY, "UPDATE `groups` SET difficulty = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_GROUP_RAID_DIFFICULTY, "UPDATE `groups` SET raidDifficulty = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_GROUP_LEGACY_RAID_DIFFICULTY, "UPDATE `groups` SET legacyRaidDifficulty = ? WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_GROUP_PING_RESTRICTION, "UPDATE `groups` SET pingRestriction = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_INVALID_SPELL_SPELLS, "DELETE FROM character_spell WHERE spell = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_DELETE_INFO, "UPDATE characters SET deleteInfos_Name = name, deleteInfos_Account = account, deleteDate = UNIX_TIMESTAMP(), name = '', account = 0 WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_RESTORE_DELETE_INFO, "UPDATE characters SET name = ?, account = ?, deleteDate = NULL, deleteInfos_Name = NULL, deleteInfos_Account = NULL WHERE deleteDate IS NOT NULL AND guid = ?", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index 4ae174c7ddb..fd781a223da 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -382,6 +382,7 @@ enum CharacterDatabaseStatements : uint32 CHAR_UPD_GROUP_DIFFICULTY, CHAR_UPD_GROUP_RAID_DIFFICULTY, CHAR_UPD_GROUP_LEGACY_RAID_DIFFICULTY, + CHAR_UPD_GROUP_PING_RESTRICTION, CHAR_DEL_INVALID_SPELL_SPELLS, CHAR_UPD_DELETE_INFO, CHAR_UPD_RESTORE_DELETE_INFO, diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 0634d60af82..0cf8f1f9b33 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -322,6 +322,8 @@ private: return int64(left->BidAmount) - int64(right->BidAmount); case AuctionHouseSortOrder::Buyout: return int64(left->BuyoutOrUnitPrice) - int64(right->BuyoutOrUnitPrice); + case AuctionHouseSortOrder::TimeRemaining: + return (left->EndTime - right->EndTime).count(); default: break; } diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index bdaa0516339..f6354060022 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -116,11 +116,12 @@ DEFINE_ENUM_FLAG(AuctionHouseFilterMask); enum class AuctionHouseSortOrder : uint8 { - Price = 0, - Name = 1, - Level = 2, - Bid = 3, - Buyout = 4 + Price = 0, + Name = 1, + Level = 2, + Bid = 3, + Buyout = 4, + TimeRemaining = 5 }; enum class AuctionHouseBrowseMode : uint8 diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index e1edf02d3c3..fb433ce27d0 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -1892,7 +1892,10 @@ enum class PlayerInteractionType : int32 BarbersChoice = 62, JailersTowerBuffs = 63, MajorFactionRenown = 64, - PersonalTabardVendor = 65 + PersonalTabardVendor = 65, + ForgeMaster = 66, + CharacterBanker = 67, + AccountBanker = 68, }; enum class PowerTypeFlags : int16 diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 84f3c8541cf..03d6e9dcfd5 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -78,8 +78,8 @@ void LFGMgr::_LoadFromDB(Field* fields, ObjectGuid guid) SetLeader(guid, ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64())); - uint32 dungeon = fields[18].GetUInt32(); - uint8 state = fields[19].GetUInt8(); + uint32 dungeon = fields[19].GetUInt32(); + uint8 state = fields[20].GetUInt8(); if (!dungeon || !state) return; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 9b3a159e2f7..205b4440041 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1450,7 +1450,7 @@ void Creature::SaveToDB(uint32 mapid, std::vector<Difficulty> const& spawnDiffic CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_spawnId); uint32 displayId = GetNativeDisplayId(); - uint64 spawnNpcFlags = (uint64(m_unitData->NpcFlags[1]) << 32) | m_unitData->NpcFlags[0]; + uint64 spawnNpcFlags = (uint64(GetNpcFlags2()) << 32) | GetNpcFlags(); Optional<uint64> npcflag; Optional<uint32> unitFlags; Optional<uint32> unitFlags2; diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 142b379770c..818bff310e0 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -246,7 +246,10 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID) packet.GossipGUID = objectGUID; packet.GossipID = _gossipMenu.GetMenuId(); if (GossipMenuAddon const* addon = sObjectMgr->GetGossipMenuAddon(packet.GossipID)) + { packet.FriendshipFactionID = addon->FriendshipFactionID; + packet.LfgDungeonsID = addon->LfgDungeonsID; + } if (NpcText const* text = sObjectMgr->GetNpcText(titleTextId)) packet.BroadcastTextID = Trinity::Containers::SelectRandomWeightedContainerElement(text->Data, [](NpcTextData const& data) { return data.Probability; })->BroadcastTextID; @@ -283,8 +286,11 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID) text.QuestType = item.QuestIcon; text.QuestFlags[0] = quest->GetFlags(); text.QuestFlags[1] = quest->GetFlagsEx(); + text.QuestFlags[2] = quest->GetFlagsEx2(); text.Repeatable = quest->IsTurnIn() && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly(); + text.ResetByScheduler = quest->IsResetByScheduler(); text.Important = quest->IsImportant(); + text.Meta = quest->IsMeta(); text.QuestTitle = quest->GetLogTitle(); LocaleConstant localeConstant = _session->GetSessionDbLocaleIndex(); @@ -411,8 +417,11 @@ void PlayerMenu::SendQuestGiverQuestListMessage(Object* questgiver) text.QuestType = questMenuItem.QuestIcon; text.QuestFlags[0] = quest->GetFlags(); text.QuestFlags[1] = quest->GetFlagsEx(); + text.QuestFlags[2] = quest->GetFlagsEx2(); text.Repeatable = quest->IsTurnIn() && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly(); + text.ResetByScheduler = quest->IsResetByScheduler(); text.Important = quest->IsImportant(); + text.Meta = quest->IsMeta(); text.QuestTitle = quest->GetLogTitle(); LocaleConstant localeConstant = _session->GetSessionDbLocaleIndex(); @@ -478,6 +487,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU packet.PortraitGiverMount = quest->GetQuestGiverPortraitMount(); packet.PortraitGiverModelSceneID = quest->GetQuestGiverPortraitModelSceneId(); packet.PortraitTurnIn = quest->GetQuestTurnInPortrait(); + packet.QuestInfoID = quest->GetQuestInfoID(); packet.QuestSessionBonus = 0; //quest->GetQuestSessionBonus(); // this is only sent while quest session is active packet.AutoLaunched = autoLaunched; packet.DisplayPopup = displayPopup; @@ -510,9 +520,9 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU for (uint32 i = 0; i < objs.size(); ++i) { packet.Objectives[i].ID = objs[i].ID; + packet.Objectives[i].Type = objs[i].Type; packet.Objectives[i].ObjectID = objs[i].ObjectID; packet.Objectives[i].Amount = objs[i].Amount; - packet.Objectives[i].Type = objs[i].Type; } _session->SendPacket(packet.Write()); @@ -582,6 +592,7 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUI offer.QuestID = quest->GetQuestId(); offer.AutoLaunched = autoLaunched; offer.SuggestedPartyMembers = quest->GetSuggestedPlayers(); + offer.QuestInfoID = quest->GetQuestInfoID(); for (uint32 i = 0; i < QUEST_EMOTE_COUNT && quest->OfferRewardEmote[i]; ++i) offer.Emotes.emplace_back(quest->OfferRewardEmote[i], quest->OfferRewardEmoteDelay[i]); @@ -656,6 +667,7 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU packet.QuestFlags[1] = quest->GetFlagsEx(); packet.QuestFlags[2] = quest->GetFlagsEx2(); packet.SuggestPartyMembers = quest->GetSuggestedPlayers(); + packet.QuestInfoID = quest->GetQuestInfoID(); // incomplete: FD // incomplete quest with item objective but item objective is complete DD diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h index 72aa91aae39..e97c1cca3d9 100644 --- a/src/server/game/Entities/Creature/GossipDef.h +++ b/src/server/game/Entities/Creature/GossipDef.h @@ -88,6 +88,9 @@ enum class GossipOptionNpc : uint8 BarbersChoice = 52, MajorFactionRenown = 53, PersonalTabardVendor = 54, + ForgeMaster = 55, + CharacterBanker = 56, + AccountBanker = 57, Count }; @@ -108,8 +111,9 @@ enum class GossipOptionRewardType : uint8 enum class GossipOptionFlags : int32 { - None = 0x0, - QuestLabelPrepend = 0x1 + None = 0x0, + QuestLabelPrepend = 0x1, + HideOptionIDFromClient = 0x2 }; struct GossipMenuItem diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index ebf67292ced..a69813ea53e 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -65,7 +65,7 @@ struct GameObjectTemplate uint32 GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false uint32 InfiniteAOI; // 10 Infinite AOI, enum { false, true, }; Default: false uint32 NotLOSBlocking; // 11 Not LOS Blocking, enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 12 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 Collisionupdatedelayafteropen; // 13 Collision update delay(ms) after open, int, Min value: 0, Max value: 2147483647, Default value: 0 } door; // 1 GAMEOBJECT_TYPE_BUTTON @@ -81,7 +81,7 @@ struct GameObjectTemplate uint32 closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0 uint32 requireLOS; // 8 require LOS, enum { false, true, }; Default: false uint32 conditionID1; // 9 conditionID1, References: PlayerCondition, NoValue = 0 - uint32 InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 10 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } button; // 2 GAMEOBJECT_TYPE_QUESTGIVER struct @@ -98,7 +98,7 @@ struct GameObjectTemplate uint32 GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false uint32 conditionID1; // 10 conditionID1, References: PlayerCondition, NoValue = 0 uint32 NeverUsableWhileMounted; // 11 Never Usable While Mounted, enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 12 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } questgiver; // 3 GAMEOBJECT_TYPE_CHEST struct @@ -112,7 +112,7 @@ struct GameObjectTemplate uint32 triggeredEvent; // 6 triggeredEvent, References: GameEvents, NoValue = 0 uint32 linkedTrap; // 7 linkedTrap, References: GameObjects, NoValue = 0 uint32 questID; // 8 questID, References: QuestV2, NoValue = 0 - uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 requireLOS; // 10 require LOS, enum { false, true, }; Default: false uint32 leaveLoot; // 11 leaveLoot, enum { false, true, }; Default: false uint32 notInCombat; // 12 notInCombat, enum { false, true, }; Default: false @@ -121,9 +121,9 @@ struct GameObjectTemplate uint32 usegrouplootrules; // 15 use group loot rules, enum { false, true, }; Default: false uint32 floatingTooltip; // 16 floatingTooltip, enum { false, true, }; Default: false uint32 conditionID1; // 17 conditionID1, References: PlayerCondition, NoValue = 0 - int32 Unused; // 18 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + int32 xpLevel; // 18 xpLevel, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 uint32 xpDifficulty; // 19 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp - uint32 Unused2; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0 + uint32 Unused; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0 uint32 GroupXP; // 21 Group XP, enum { false, true, }; Default: false uint32 DamageImmuneOK; // 22 Damage Immune OK, enum { false, true, }; Default: false uint32 trivialSkillLow; // 23 trivialSkillLow, int, Min value: 0, Max value: 65535, Default value: 0 @@ -142,7 +142,7 @@ struct GameObjectTemplate // 4 GAMEOBJECT_TYPE_BINDER struct { - uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } binder; // 5 GAMEOBJECT_TYPE_GENERIC struct @@ -156,7 +156,7 @@ struct GameObjectTemplate uint32 conditionID1; // 6 conditionID1, References: PlayerCondition, NoValue = 0 uint32 LargeAOI; // 7 Large AOI, enum { false, true, }; Default: false uint32 UseGarrisonOwnerGuildColors; // 8 Use Garrison Owner Guild Colors, enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } generic; // 6 GAMEOBJECT_TYPE_TRAP struct @@ -182,7 +182,7 @@ struct GameObjectTemplate uint32 requireLOS; // 18 require LOS, enum { false, true, }; Default: false uint32 TriggerCondition; // 19 Trigger Condition, References: PlayerCondition, NoValue = 0 uint32 Checkallunits; // 20 Check all units (spawned traps only check players), enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 21 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 21 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } trap; // 7 GAMEOBJECT_TYPE_CHAIR struct @@ -192,7 +192,7 @@ struct GameObjectTemplate uint32 onlyCreatorUse; // 2 onlyCreatorUse, enum { false, true, }; Default: false uint32 triggeredEvent; // 3 triggeredEvent, References: GameEvents, NoValue = 0 uint32 conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 - uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } chair; // 8 GAMEOBJECT_TYPE_SPELL_FOCUS struct @@ -206,7 +206,7 @@ struct GameObjectTemplate uint32 floatingTooltip; // 6 floatingTooltip, enum { false, true, }; Default: false uint32 floatOnWater; // 7 floatOnWater, enum { false, true, }; Default: false uint32 conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0 - uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 gossipID; // 10 gossipID, References: Gossip, NoValue = 0 uint32 spellFocusType2; // 11 spellFocusType 2, References: SpellFocusObject, NoValue = 0 uint32 spellFocusType3; // 12 spellFocusType 3, References: SpellFocusObject, NoValue = 0 @@ -224,7 +224,7 @@ struct GameObjectTemplate uint32 allowMounted; // 3 allowMounted, enum { false, true, }; Default: false uint32 conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 uint32 NeverUsableWhileMounted; // 5 Never Usable While Mounted, enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } text; // 10 GAMEOBJECT_TYPE_GOOBER struct @@ -262,7 +262,7 @@ struct GameObjectTemplate uint32 SyncAnimationtoObjectLifetime; // 30 Sync Animation to Object Lifetime (global track only), enum { false, true, }; Default: false uint32 NoFuzzyHit; // 31 No Fuzzy Hit, enum { false, true, }; Default: false uint32 LargeAOI; // 32 Large AOI, enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 33 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 33 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } goober; // 11 GAMEOBJECT_TYPE_TRANSPORT struct @@ -291,7 +291,7 @@ struct GameObjectTemplate uint32 Reached10thfloor; // 21 Reached 10th floor, References: GameEvents, NoValue = 0 uint32 onlychargeheightcheck; // 22 only charge height check. (yards), int, Min value: 0, Max value: 65535, Default value: 0 uint32 onlychargetimecheck; // 23 only charge time check, int, Min value: 0, Max value: 65535, Default value: 0 - uint32 InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 24 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } transport; // 12 GAMEOBJECT_TYPE_AREADAMAGE struct @@ -304,7 +304,7 @@ struct GameObjectTemplate uint32 autoClose; // 5 autoClose (ms), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 openTextID; // 6 openTextID, References: BroadcastText, NoValue = 0 uint32 closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0 - uint32 InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } areaDamage; // 13 GAMEOBJECT_TYPE_CAMERA struct @@ -314,7 +314,7 @@ struct GameObjectTemplate uint32 eventID; // 2 eventID, References: GameEvents, NoValue = 0 uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 uint32 conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 - uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } camera; // 14 GAMEOBJECT_TYPE_MAP_OBJECT struct @@ -334,19 +334,19 @@ struct GameObjectTemplate uint32 allowstopping; // 8 allow stopping, enum { false, true, }; Default: false uint32 InitStopped; // 9 Init Stopped, enum { false, true, }; Default: false uint32 TrueInfiniteAOI; // 10 True Infinite AOI (programmer only!), enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 11 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 Allowareaexplorationwhileonthistransport;// 12 Allow area exploration while on this transport, enum { false, true, }; Default: false } moTransport; // 16 GAMEOBJECT_TYPE_DUEL_ARBITER struct { - uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 Willthisduelgountilaplayerdies; // 1 Will this duel go until a player dies?, enum { false, true, }; Default: false } duelFlag; // 17 GAMEOBJECT_TYPE_FISHINGNODE struct { - uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } fishingNode; // 18 GAMEOBJECT_TYPE_RITUAL struct @@ -360,14 +360,14 @@ struct GameObjectTemplate uint32 castersGrouped; // 6 castersGrouped, enum { false, true, }; Default: true uint32 ritualNoTargetCheck; // 7 ritualNoTargetCheck, enum { false, true, }; Default: true uint32 conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0 - uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 Allowunfriendlycrossfactionpartymemberstocollaborateonaritual;// 10 Allow unfriendly cross faction party members to collaborate on a ritual, enum { false, true, }; Default: false } ritual; // 19 GAMEOBJECT_TYPE_MAILBOX struct { uint32 conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0 - uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } mailbox; // 20 GAMEOBJECT_TYPE_DO_NOT_USE struct @@ -379,7 +379,7 @@ struct GameObjectTemplate uint32 creatureID; // 0 creatureID, References: Creature, NoValue = 0 uint32 charges; // 1 charges, int, Min value: 0, Max value: 65535, Default value: 1 uint32 Preferonlyifinlineofsight; // 2 Prefer only if in line of sight (expensive), enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } guardPost; // 22 GAMEOBJECT_TYPE_SPELLCASTER struct @@ -392,7 +392,7 @@ struct GameObjectTemplate uint32 conditionID1; // 5 conditionID1, References: PlayerCondition, NoValue = 0 uint32 playerCast; // 6 playerCast, enum { false, true, }; Default: false uint32 NeverUsableWhileMounted; // 7 Never Usable While Mounted, enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } spellCaster; // 23 GAMEOBJECT_TYPE_MEETINGSTONE struct @@ -400,7 +400,7 @@ struct GameObjectTemplate uint32 Unused; // 0 Unused, int, Min value: 0, Max value: 65535, Default value: 1 uint32 Unused2; // 1 Unused, int, Min value: 1, Max value: 65535, Default value: 60 uint32 areaID; // 2 areaID, References: AreaTable, NoValue = 0 - uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 Preventmeetingstonefromtargetinganunfriendlypartymemberoutsideofinstances;// 4 Prevent meeting stone from targeting an unfriendly party member outside of instances, enum { false, true, }; Default: false } meetingStone; // 24 GAMEOBJECT_TYPE_FLAGSTAND @@ -419,7 +419,7 @@ struct GameObjectTemplate uint32 GiganticAOI; // 10 Gigantic AOI, enum { false, true, }; Default: false uint32 InfiniteAOI; // 11 Infinite AOI, enum { false, true, }; Default: false uint32 cooldown; // 12 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000 - uint32 InteractRadiusOverride; // 13 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 13 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } flagStand; // 25 GAMEOBJECT_TYPE_FISHINGHOLE struct @@ -429,7 +429,7 @@ struct GameObjectTemplate uint32 minRestock; // 2 minRestock, int, Min value: 0, Max value: 65535, Default value: 0 uint32 maxRestock; // 3 maxRestock, int, Min value: 0, Max value: 65535, Default value: 0 uint32 open; // 4 open, References: Lock_, NoValue = 0 - uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } fishingHole; // 26 GAMEOBJECT_TYPE_FLAGDROP struct @@ -444,7 +444,7 @@ struct GameObjectTemplate uint32 GiganticAOI; // 7 Gigantic AOI, enum { false, true, }; Default: false uint32 InfiniteAOI; // 8 Infinite AOI, enum { false, true, }; Default: false uint32 cooldown; // 9 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000 - uint32 InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 10 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } flagDrop; // 27 GAMEOBJECT_TYPE_MINI_GAME struct @@ -485,7 +485,7 @@ struct GameObjectTemplate uint32 UncontestedTime; // 25 Uncontested Time, int, Min value: 0, Max value: 65535, Default value: 0 uint32 FrequentHeartbeat; // 26 Frequent Heartbeat, enum { false, true, }; Default: false uint32 EnablingWorldStateExpression; // 27 Enabling World State Expression, References: WorldStateExpression, NoValue = 0 - uint32 InteractRadiusOverride; // 28 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 28 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } controlZone; // 30 GAMEOBJECT_TYPE_AURA_GENERATOR struct @@ -497,7 +497,7 @@ struct GameObjectTemplate uint32 auraID2; // 4 auraID2, References: Spell, NoValue = 0 uint32 conditionID2; // 5 conditionID2, References: PlayerCondition, NoValue = 0 uint32 serverOnly; // 6 serverOnly, enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 7 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } auraGenerator; // 31 GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY struct @@ -513,7 +513,7 @@ struct GameObjectTemplate uint32 LargeAOI; // 8 Large AOI, enum { false, true, }; Default: false uint32 GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false uint32 Legacy; // 10 Legacy, enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 11 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } dungeonDifficulty; // 32 GAMEOBJECT_TYPE_BARBER_CHAIR struct @@ -521,7 +521,7 @@ struct GameObjectTemplate uint32 chairheight; // 0 chairheight, int, Min value: 0, Max value: 2, Default value: 1 int32 HeightOffset; // 1 Height Offset (inches), int, Min value: -100, Max value: 100, Default value: 0 uint32 SitAnimKit; // 2 Sit Anim Kit, References: AnimKit, NoValue = 0 - uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 CustomizationScope; // 4 Customization Scope, int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 Preventteleportingtheplayeroutofthebarbershopchair;// 5 Prevent teleporting the player out of the barbershop chair, enum { false, true, }; Default: false } barberChair; @@ -555,13 +555,13 @@ struct GameObjectTemplate int32 Thexoffsetofthedestructiblenameplateifitisenabled;// 24 The x offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 int32 Theyoffsetofthedestructiblenameplateifitisenabled;// 25 The y offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 int32 Thezoffsetofthedestructiblenameplateifitisenabled;// 26 The z offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 - uint32 InteractRadiusOverride; // 27 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 27 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } destructibleBuilding; // 34 GAMEOBJECT_TYPE_GUILD_BANK struct { uint32 conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0 - uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } guildbank; // 35 GAMEOBJECT_TYPE_TRAPDOOR struct @@ -574,7 +574,7 @@ struct GameObjectTemplate uint32 GiganticAOI; // 5 Gigantic AOI, enum { false, true, }; Default: false uint32 InfiniteAOI; // 6 Infinite AOI, enum { false, true, }; Default: false uint32 DoorisOpaque; // 7 Door is Opaque (Disable portal on close), enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } trapdoor; // 36 GAMEOBJECT_TYPE_NEW_FLAG struct @@ -593,27 +593,27 @@ struct GameObjectTemplate uint32 worldState1; // 11 worldState1, References: WorldState, NoValue = 0 uint32 ReturnonDefenderInteract; // 12 Return on Defender Interact, enum { false, true, }; Default: false uint32 SpawnVignette; // 13 Spawn Vignette, References: vignette, NoValue = 0 - uint32 InteractRadiusOverride; // 14 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 14 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } newflag; // 37 GAMEOBJECT_TYPE_NEW_FLAG_DROP struct { uint32 open; // 0 open, References: Lock_, NoValue = 0 uint32 SpawnVignette; // 1 Spawn Vignette, References: vignette, NoValue = 0 - uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } newflagdrop; // 38 GAMEOBJECT_TYPE_GARRISON_BUILDING struct { int32 SpawnMap; // 0 Spawn Map, References: Map, NoValue = -1 - uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrisonBuilding; // 39 GAMEOBJECT_TYPE_GARRISON_PLOT struct { uint32 PlotInstance; // 0 Plot Instance, References: GarrPlotInstance, NoValue = 0 int32 SpawnMap; // 1 Spawn Map, References: Map, NoValue = -1 - uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrisonPlot; // 40 GAMEOBJECT_TYPE_CLIENT_CREATURE struct @@ -653,7 +653,7 @@ struct GameObjectTemplate uint32 SpellVisual4; // 20 Spell Visual 4, References: SpellVisual, NoValue = 0 uint32 SpellVisual5; // 21 Spell Visual 5, References: SpellVisual, NoValue = 0 uint32 SpawnVignette; // 22 Spawn Vignette, References: vignette, NoValue = 0 - uint32 InteractRadiusOverride; // 23 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 23 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } capturePoint; // 43 GAMEOBJECT_TYPE_PHASEABLE_MO struct @@ -662,14 +662,14 @@ struct GameObjectTemplate int32 AreaNameSet; // 1 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 uint32 DoodadSetA; // 2 Doodad Set A, int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 DoodadSetB; // 3 Doodad Set B, int, Min value: 0, Max value: 2147483647, Default value: 0 - uint32 InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } phaseableMO; // 44 GAMEOBJECT_TYPE_GARRISON_MONUMENT struct { uint32 TrophyTypeID; // 0 Trophy Type ID, References: TrophyType, NoValue = 0 uint32 TrophyInstanceID; // 1 Trophy Instance ID, References: TrophyInstance, NoValue = 0 - uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrisonMonument; // 45 GAMEOBJECT_TYPE_GARRISON_SHIPMENT struct @@ -677,13 +677,13 @@ struct GameObjectTemplate uint32 ShipmentContainer; // 0 Shipment Container, References: CharShipmentContainer, NoValue = 0 uint32 GiganticAOI; // 1 Gigantic AOI, enum { false, true, }; Default: false uint32 LargeAOI; // 2 Large AOI, enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrisonShipment; // 46 GAMEOBJECT_TYPE_GARRISON_MONUMENT_PLAQUE struct { uint32 TrophyInstanceID; // 0 Trophy Instance ID, References: TrophyInstance, NoValue = 0 - uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrisonMonumentPlaque; // 47 GAMEOBJECT_TYPE_ITEM_FORGE struct @@ -694,7 +694,7 @@ struct GameObjectTemplate uint32 CameraMode; // 3 Camera Mode, References: CameraMode, NoValue = 0 uint32 FadeRegionRadius; // 4 Fade Region Radius, int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 ForgeType; // 5 Forge Type, enum { Artifact Forge, Relic Forge, Heart Forge, Soulbind Forge, Anima Reservoir, }; Default: Relic Forge - uint32 InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 GarrTalentTreeID; // 7 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0 } itemForge; // 48 GAMEOBJECT_TYPE_UI_LINK @@ -705,13 +705,13 @@ struct GameObjectTemplate uint32 GiganticAOI; // 2 Gigantic AOI, enum { false, true, }; Default: false uint32 spellFocusType; // 3 spellFocusType, References: SpellFocusObject, NoValue = 0 uint32 radius; // 4 radius, int, Min value: 0, Max value: 50, Default value: 10 - uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 ItemInteractionID; // 6 Item Interaction ID, References: UiItemInteraction, NoValue = 0 } UILink; // 49 GAMEOBJECT_TYPE_KEYSTONE_RECEPTACLE struct { - uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } KeystoneReceptacle; // 50 GAMEOBJECT_TYPE_GATHERING_NODE struct @@ -740,7 +740,7 @@ struct GameObjectTemplate uint32 PlayOpenAnimationonOpening; // 21 Play Open Animation on Opening, enum { false, true, }; Default: false uint32 turnpersonallootsecurityoff; // 22 turn personal loot security off, enum { false, true, }; Default: false uint32 ClearObjectVignetteonOpening; // 23 Clear Object Vignette on Opening, enum { false, true, }; Default: false - uint32 InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 24 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 Overrideminimaptrackingicon; // 25 Override minimap tracking icon, References: UiTextureAtlasMember, NoValue = 0 } gatheringNode; // 51 GAMEOBJECT_TYPE_CHALLENGE_MODE_REWARD @@ -750,7 +750,7 @@ struct GameObjectTemplate uint32 WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 uint32 open; // 2 open, References: Lock_, NoValue = 0 uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 - uint32 InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } challengeModeReward; // 52 GAMEOBJECT_TYPE_MULTI struct @@ -772,7 +772,7 @@ struct GameObjectTemplate uint32 DoodadSetC; // 3 Doodad Set C, int, Min value: 0, Max value: 2147483647, Default value: 0 int32 SpawnMap; // 4 Spawn Map, References: Map, NoValue = -1 int32 AreaNameSet; // 5 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 - uint32 InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } siegeableMO; // 55 GAMEOBJECT_TYPE_PVP_REWARD struct @@ -781,7 +781,7 @@ struct GameObjectTemplate uint32 WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 uint32 open; // 2 open, References: Lock_, NoValue = 0 uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 - uint32 InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } pvpReward; // 56 GAMEOBJECT_TYPE_PLAYER_CHOICE_CHEST struct @@ -793,7 +793,7 @@ struct GameObjectTemplate uint32 MawPowerFilter; // 4 Maw Power Filter, References: MawPowerFilter, NoValue = 0 uint32 Script; // 5 Script, References: SpellScript, NoValue = 0 uint32 SpellVisual1; // 6 Spell Visual 1, References: SpellVisual, NoValue = 0 - uint32 InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 7 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 Dontupdateplayerinteractability; // 8 Don't update player interactability, enum { false, true, }; Default: false } playerChoiceChest; // 57 GAMEOBJECT_TYPE_LEGENDARY_FORGE @@ -801,21 +801,21 @@ struct GameObjectTemplate { uint32 PlayerChoice; // 0 Player Choice, References: PlayerChoice, NoValue = 0 uint32 CustomItemBonusFilter; // 1 Custom Item Bonus Filter, References: CustomItemBonusFilter, NoValue = 0 - uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } legendaryForge; // 58 GAMEOBJECT_TYPE_GARR_TALENT_TREE struct { uint32 UiMapID; // 0 Ui Map ID, References: UiMap, NoValue = 0 uint32 GarrTalentTreeID; // 1 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0 - uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrTalentTree; // 59 GAMEOBJECT_TYPE_WEEKLY_REWARD_CHEST struct { uint32 WhenAvailable; // 0 When Available, References: GameObjectDisplayInfo, NoValue = 0 uint32 open; // 1 open, References: Lock_, NoValue = 0 - uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 ExpansionLevel; // 3 Expansion Level, int, Min value: 0, Max value: 2147483647, Default value: 0 } weeklyRewardChest; // 60 GAMEOBJECT_TYPE_CLIENT_MODEL diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h index 6ade3bdf974..acd69e9a265 100644 --- a/src/server/game/Entities/Item/Container/Bag.h +++ b/src/server/game/Entities/Item/Container/Bag.h @@ -18,8 +18,8 @@ #ifndef TRINITY_BAG_H #define TRINITY_BAG_H -// Maximum 36 Slots ((CONTAINER_END - CONTAINER_FIELD_SLOT_1)/2 -#define MAX_BAG_SIZE 36 // 2.0.12 +// Maximum 98 Slots ((CONTAINER_END - CONTAINER_FIELD_SLOT_1)/2 +#define MAX_BAG_SIZE 98 // 11.0.0 #include "Item.h" diff --git a/src/server/game/Entities/Item/ItemDefines.h b/src/server/game/Entities/Item/ItemDefines.h index 0632c1e113d..85a7a558e2a 100644 --- a/src/server/game/Entities/Item/ItemDefines.h +++ b/src/server/game/Entities/Item/ItemDefines.h @@ -142,6 +142,7 @@ enum InventoryResult : uint8 EQUIP_ERR_SLOT_ONLY_REAGENTBAG = 116,// Only Reagent Bags can be placed in the reagent bag slot. EQUIP_ERR_REAGENTBAG_ITEM_TYPE = 117,// Only Reagents can be placed in Reagent Bags. EQUIP_ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 118,// Items that can be refunded can't be bulk sold. + EQUIP_ERR_NO_SOULBOUND_ITEM_IN_ACCOUNT_BANK = 119,// Soulbound items cannot be stored in the Warband Bank. }; // EnumUtils: DESCRIBE THIS @@ -287,4 +288,11 @@ enum class AzeriteEssenceActivateResult : uint32 NotEquipped = 12 }; +enum class BankType : int8 +{ + Character = 0, + Guild = 1, + Account = 2 +}; + #endif // ItemDefines_h__ diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index fd868cfc649..03d1948444c 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -663,7 +663,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe // *data << int32(Players[i].Pets[j].Power); // *data << int32(Players[i].Pets[j].Speed); // *data << int32(Players[i].Pets[j].NpcTeamMemberID); - // *data << uint16(Players[i].Pets[j].BreedQuality); + // *data << uint8(Players[i].Pets[j].BreedQuality); // *data << uint16(Players[i].Pets[j].StatusFlags); // *data << int8(Players[i].Pets[j].Slot); diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h index fdad7e0d18e..a845123c3ee 100644 --- a/src/server/game/Entities/Object/Updates/UpdateField.h +++ b/src/server/game/Entities/Object/Updates/UpdateField.h @@ -53,7 +53,7 @@ namespace UF template<typename T, std::size_t Size> class UpdateFieldArrayBase; - template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit> class UpdateFieldArray; template<typename T> @@ -268,7 +268,7 @@ namespace UF return { (_value.*field)._value }; } - template<typename V, std::size_t Size, uint32 Bit, uint32 FirstElementBit, typename U = T> + template<typename V, std::size_t Size, uint32 Bit, int32 FirstElementBit, typename U = T> std::enable_if_t<std::is_base_of_v<HasChangesMaskTag, U>, std::conditional_t<std::is_base_of_v<IsUpdateFieldStructureTag, V>, MutableFieldReference<V, PublicSet>, @@ -278,10 +278,13 @@ namespace UF ModifyValue(UpdateFieldArray<V, Size, Bit, FirstElementBit>(T::* field), uint32 index) { _value._changesMask.Set(Bit); - if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, V>) - _value._changesMask.Set(FirstElementBit + index); - else - _value._changesMask.Set(FirstElementBit); + if constexpr (FirstElementBit >= 0) + { + if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, V>) + _value._changesMask.Set(FirstElementBit + index); + else + _value._changesMask.Set(FirstElementBit); + } return { (_value.*field)._values[index] }; } @@ -469,7 +472,7 @@ namespace UF template<typename T, int32 BlockBit, uint32 Bit> friend class UpdateField; - template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit> friend class UpdateFieldArray; template<typename T, int32 BlockBit, uint32 Bit> @@ -486,7 +489,7 @@ namespace UF return { (static_cast<Derived*>(this)->*field)._value }; } - template<typename Derived, typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + template<typename Derived, typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit> MutableFieldReference<T, false> ModifyValue(UpdateFieldArray<T, Size, Bit, FirstElementBit>(Derived::* field), uint32 index) { MarkChanged(field, index); @@ -534,16 +537,19 @@ namespace UF _changesMask.Set(Bit); } - template<typename Derived, typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + template<typename Derived, typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit> void MarkChanged(UpdateFieldArray<T, Size, Bit, FirstElementBit>(Derived::*), uint32 index) { static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask"); _changesMask.Set(Bit); - if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, T>) - _changesMask.Set(FirstElementBit + index); - else - _changesMask.Set(FirstElementBit); + if constexpr (FirstElementBit >= 0) + { + if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, T>) + _changesMask.Set(FirstElementBit + index); + else + _changesMask.Set(FirstElementBit); + } } template<typename Derived, typename T, int32 BlockBit, uint32 Bit> @@ -576,15 +582,18 @@ namespace UF _changesMask.Reset(Bit); } - template<typename Derived, typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + template<typename Derived, typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit> void ClearChanged(UpdateFieldArray<T, Size, Bit, FirstElementBit>(Derived::*), uint32 index) { static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask"); - if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, T>) - _changesMask.Reset(FirstElementBit + index); - else - _changesMask.Reset(FirstElementBit); + if constexpr (FirstElementBit >= 0) + { + if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, T>) + _changesMask.Reset(FirstElementBit + index); + else + _changesMask.Reset(FirstElementBit); + } } template<typename Derived, typename T, int32 BlockBit, uint32 Bit> @@ -620,16 +629,16 @@ namespace UF field._value.ClearChangesMask(); } - template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit> static void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field) { ClearChangesMask(field, std::disjunction<std::is_base_of<HasChangesMaskTag, T>, std::is_base_of<IsUpdateFieldHolderTag, T>>{}); } - template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit> static void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>&, std::false_type) { } - template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit> static void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field, std::true_type) { for (uint32 i = 0; i < Size; ++i) @@ -804,7 +813,7 @@ namespace UF return sizeof(typename T::value_type); } - template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit> class UpdateFieldArray : public UpdateFieldArrayBase<T, Size> { }; diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index fa0453e412d..8b54351c6c3 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -126,20 +126,20 @@ void ItemEnchantment::ClearChangesMask() void ItemMod::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const { - data << int32(Value); data << uint8(Type); + data << int32(Value); } void ItemMod::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const { - data << int32(Value); data << uint8(Type); + data << int32(Value); } bool ItemMod::operator==(ItemMod const& right) const { - return Value == right.Value - && Type == right.Type; + return Type == right.Type + && Value == right.Value; } void ItemModList::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const @@ -286,7 +286,7 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi data << uint32(MaxDurability); } data << uint32(CreatePlayedTime); - data << int32(Context); + data << uint8(Context); data << int64(CreateTime); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) { @@ -424,7 +424,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } if (changesMask[13]) { - data << int32(Context); + data << uint8(Context); } if (changesMask[14]) { @@ -506,7 +506,7 @@ void ItemData::ClearChangesMask() void ContainerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const { - for (uint32 i = 0; i < 36; ++i) + for (uint32 i = 0; i < 98; ++i) { data << Slots[i]; } @@ -520,8 +520,8 @@ void ContainerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fiel void ContainerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Bag const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlocksMask(0), 2); - for (uint32 i = 0; i < 2; ++i) + data.WriteBits(changesMask.GetBlocksMask(0), 4); + for (uint32 i = 0; i < 4; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -535,7 +535,7 @@ void ContainerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool } if (changesMask[2]) { - for (uint32 i = 0; i < 36; ++i) + for (uint32 i = 0; i < 98; ++i) { if (changesMask[3 + i]) { @@ -930,10 +930,8 @@ bool PassiveSpellHistory::operator==(PassiveSpellHistory const& right) const void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver)); - for (uint32 i = 0; i < 2; ++i) - { - data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, i, owner, receiver)); - } + data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, owner, receiver)); data << uint32(StateSpellVisualID); data << uint32(StateAnimID); data << uint32(StateAnimKitID); @@ -1093,8 +1091,8 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi data << float(MinRangedDamage); data << float(MaxRangedDamage); data << float(ManaCostMultiplier); - data << float(MaxHealthModifier); } + data << float(MaxHealthModifier); data << float(HoverHeight); data << int32(MinItemLevelCutoff); data << int32(MinItemLevel); @@ -1116,10 +1114,12 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi data << uint32(ChannelObjects.size()); data << int32(FlightCapabilityID); data << float(GlideEventSpeedDivisor); - data << uint32(Field_308); - data << uint32(Field_30C); + data << uint32(MaxHealthModifierFlatNeg); + data << uint32(MaxHealthModifierFlatPos); data << uint32(SilencedSchoolMask); data << uint32(CurrentAreaID); + data << float(Field_31C); + data << float(Field_320); data << NameplateAttachToGUID; for (uint32 i = 0; i < PassiveSpells.size(); ++i) { @@ -1133,11 +1133,13 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi { data << ChannelObjects[i]; } + data.WriteBit(Field_314); + data.FlushBits(); } void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xF0FFBFFFu, 0x000F7FFFu, 0xFFFFFF01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x87FDFFFFu, 0x007BFFFFu, 0xFFFFFC01u, 0x03FFFFFFu, 0x001FC000u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1145,16 +1147,16 @@ void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= std::array<uint32, 7>{ 0x00002000u, 0x0F004000u, 0xFFF08000u, 0x000000FEu, 0xFF800004u, 0xFFFC07FFu, 0x01FFFFFFu }; + allowedMaskForTarget |= std::array<uint32, 7>{ 0x00010000u, 0x78020000u, 0xFF840000u, 0x000003FEu, 0xFC000020u, 0xFFE03FFFu, 0x0FFFFFFFu }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) - allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFF800004u, 0x000007FFu, 0x00000000u }; + allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFC000020u, 0x00003FFFu, 0x00000000u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) - allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x0F000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u }; + allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x78000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00003FC0u }; } void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xF0FFBFFFu, 0x000F7FFFu, 0xFFFFFF01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x87FDFFFFu, 0x007BFFFFu, 0xFFFFFC01u, 0x03FFFFFFu, 0x001FC000u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -1170,6 +1172,10 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor { if (changesMask[1]) { + data.WriteBit(Field_314); + } + if (changesMask[2]) + { data.WriteBits(StateWorldEffectIDs->size(), 32); for (uint32 i = 0; i < StateWorldEffectIDs->size(); ++i) { @@ -1180,21 +1186,21 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor data.FlushBits(); if (changesMask[0]) { - if (changesMask[2]) + if (changesMask[3]) { if (!ignoreNestedChangesMask) PassiveSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(PassiveSpells.size(), data); } - if (changesMask[3]) + if (changesMask[4]) { if (!ignoreNestedChangesMask) WorldEffects.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WorldEffects.size(), data); } - if (changesMask[4]) + if (changesMask[5]) { if (!ignoreNestedChangesMask) ChannelObjects.WriteUpdateMask(data); @@ -1205,7 +1211,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor data.FlushBits(); if (changesMask[0]) { - if (changesMask[2]) + if (changesMask[3]) { for (uint32 i = 0; i < PassiveSpells.size(); ++i) { @@ -1215,7 +1221,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } } } - if (changesMask[3]) + if (changesMask[4]) { for (uint32 i = 0; i < WorldEffects.size(); ++i) { @@ -1225,7 +1231,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } } } - if (changesMask[4]) + if (changesMask[5]) { for (uint32 i = 0; i < ChannelObjects.size(); ++i) { @@ -1235,593 +1241,606 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } } } - if (changesMask[5]) - { - data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver)); - } if (changesMask[6]) { - data << uint32(StateSpellVisualID); + data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver)); } if (changesMask[7]) { - data << uint32(StateAnimID); + data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, owner, receiver)); } if (changesMask[8]) { - data << uint32(StateAnimKitID); + data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, owner, receiver)); } if (changesMask[9]) { - data << uint32(StateWorldEffectsQuestObjectiveID); + data << uint32(StateSpellVisualID); } if (changesMask[10]) { - data << int32(SpellOverrideNameID); + data << uint32(StateAnimID); } if (changesMask[11]) { - data << Charm; + data << uint32(StateAnimKitID); } if (changesMask[12]) { - data << Summon; + data << uint32(StateWorldEffectsQuestObjectiveID); } if (changesMask[13]) { - data << Critter; + data << int32(SpellOverrideNameID); } if (changesMask[14]) { - data << CharmedBy; + data << Charm; } if (changesMask[15]) { - data << SummonedBy; + data << Summon; } if (changesMask[16]) { - data << CreatedBy; + data << Critter; } if (changesMask[17]) { - data << DemonCreator; + data << CharmedBy; } if (changesMask[18]) { - data << LookAtControllerTarget; + data << SummonedBy; } if (changesMask[19]) { - data << Target; + data << CreatedBy; } if (changesMask[20]) { - data << BattlePetCompanionGUID; + data << DemonCreator; } if (changesMask[21]) { - data << uint64(BattlePetDBID); + data << LookAtControllerTarget; } if (changesMask[22]) { - ChannelData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << Target; } if (changesMask[23]) { - data << int8(SpellEmpowerStage); + data << BattlePetCompanionGUID; } if (changesMask[24]) { - data << uint32(SummonedByHomeRealm); + data << uint64(BattlePetDBID); } if (changesMask[25]) { - data << uint8(Race); + ChannelData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[26]) { - data << uint8(ClassId); + data << int8(SpellEmpowerStage); } if (changesMask[27]) { - data << uint8(PlayerClassId); + data << uint32(SummonedByHomeRealm); } if (changesMask[28]) { - data << uint8(Sex); + data << uint8(Race); } if (changesMask[29]) { - data << uint8(DisplayPower); + data << uint8(ClassId); } if (changesMask[30]) { - data << uint32(OverrideDisplayPowerID); + data << uint8(PlayerClassId); } if (changesMask[31]) { - data << int64(Health); + data << uint8(Sex); } } if (changesMask[32]) { if (changesMask[33]) { - data << int64(MaxHealth); + data << uint8(DisplayPower); } if (changesMask[34]) { - data << int32(Level); + data << uint32(OverrideDisplayPowerID); } if (changesMask[35]) { - data << int32(EffectiveLevel); + data << int64(Health); } if (changesMask[36]) { - data << int32(ContentTuningID); + data << int64(MaxHealth); } if (changesMask[37]) { - data << int32(ScalingLevelMin); + data << int32(Level); } if (changesMask[38]) { - data << int32(ScalingLevelMax); + data << int32(EffectiveLevel); } if (changesMask[39]) { - data << int32(ScalingLevelDelta); + data << int32(ContentTuningID); } if (changesMask[40]) { - data << int32(ScalingFactionGroup); + data << int32(ScalingLevelMin); } if (changesMask[41]) { - data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver)); + data << int32(ScalingLevelMax); } if (changesMask[42]) { - data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver)); + data << int32(ScalingLevelDelta); } if (changesMask[43]) { - data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, owner, receiver)); + data << int32(ScalingFactionGroup); } if (changesMask[44]) { - data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver)); + data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver)); } if (changesMask[45]) { - data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver)); } if (changesMask[46]) { - data << uint32(RangedAttackRoundBaseTime); + data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, owner, receiver)); } if (changesMask[47]) { - data << float(BoundingRadius); + data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver)); } if (changesMask[48]) { - data << float(CombatReach); + data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver)); } if (changesMask[49]) { - data << float(DisplayScale); + data << uint32(RangedAttackRoundBaseTime); } if (changesMask[50]) { - data << int32(CreatureFamily); + data << float(BoundingRadius); } if (changesMask[51]) { - data << int32(CreatureType); + data << float(CombatReach); } if (changesMask[52]) { - data << int32(NativeDisplayID); + data << float(DisplayScale); } if (changesMask[53]) { - data << float(NativeXDisplayScale); + data << int32(CreatureFamily); } if (changesMask[54]) { - data << int32(MountDisplayID); + data << int32(CreatureType); } if (changesMask[55]) { - data << int32(CosmeticMountDisplayID); + data << int32(NativeDisplayID); } if (changesMask[56]) { - data << float(MinDamage); + data << float(NativeXDisplayScale); } if (changesMask[57]) { - data << float(MaxDamage); + data << int32(MountDisplayID); } if (changesMask[58]) { - data << float(MinOffHandDamage); + data << int32(CosmeticMountDisplayID); } if (changesMask[59]) { - data << float(MaxOffHandDamage); + data << float(MinDamage); } if (changesMask[60]) { - data << uint8(StandState); + data << float(MaxDamage); } if (changesMask[61]) { - data << uint8(PetTalentPoints); + data << float(MinOffHandDamage); } if (changesMask[62]) { - data << uint8(VisFlags); + data << float(MaxOffHandDamage); } if (changesMask[63]) { - data << uint8(AnimTier); + data << uint8(StandState); } } if (changesMask[64]) { if (changesMask[65]) { - data << uint32(PetNumber); + data << uint8(PetTalentPoints); } if (changesMask[66]) { - data << uint32(PetNameTimestamp); + data << uint8(VisFlags); } if (changesMask[67]) { - data << uint32(PetExperience); + data << uint8(AnimTier); } if (changesMask[68]) { - data << uint32(PetNextLevelExperience); + data << uint32(PetNumber); } if (changesMask[69]) { - data << float(ModCastingSpeed); + data << uint32(PetNameTimestamp); } if (changesMask[70]) { - data << float(ModCastingSpeedNeg); + data << uint32(PetExperience); } if (changesMask[71]) { - data << float(ModSpellHaste); + data << uint32(PetNextLevelExperience); } if (changesMask[72]) { - data << float(ModHaste); + data << float(ModCastingSpeed); } if (changesMask[73]) { - data << float(ModRangedHaste); + data << float(ModCastingSpeedNeg); } if (changesMask[74]) { - data << float(ModHasteRegen); + data << float(ModSpellHaste); } if (changesMask[75]) { - data << float(ModTimeRate); + data << float(ModHaste); } if (changesMask[76]) { - data << int32(CreatedBySpell); + data << float(ModRangedHaste); } if (changesMask[77]) { - data << int32(EmoteState); + data << float(ModHasteRegen); } if (changesMask[78]) { - data << int32(BaseMana); + data << float(ModTimeRate); } if (changesMask[79]) { - data << int32(BaseHealth); + data << int32(CreatedBySpell); } if (changesMask[80]) { - data << uint8(SheatheState); + data << int32(EmoteState); } if (changesMask[81]) { - data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver)); + data << int32(BaseMana); } if (changesMask[82]) { - data << uint8(PetFlags); + data << int32(BaseHealth); } if (changesMask[83]) { - data << uint8(ShapeshiftForm); + data << uint8(SheatheState); } if (changesMask[84]) { - data << int32(AttackPower); + data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver)); } if (changesMask[85]) { - data << int32(AttackPowerModPos); + data << uint8(PetFlags); } if (changesMask[86]) { - data << int32(AttackPowerModNeg); + data << uint8(ShapeshiftForm); } if (changesMask[87]) { - data << float(AttackPowerMultiplier); + data << int32(AttackPower); } if (changesMask[88]) { - data << int32(AttackPowerModSupport); + data << int32(AttackPowerModPos); } if (changesMask[89]) { - data << int32(RangedAttackPower); + data << int32(AttackPowerModNeg); } if (changesMask[90]) { - data << int32(RangedAttackPowerModPos); + data << float(AttackPowerMultiplier); } if (changesMask[91]) { - data << int32(RangedAttackPowerModNeg); + data << int32(AttackPowerModSupport); } if (changesMask[92]) { - data << float(RangedAttackPowerMultiplier); + data << int32(RangedAttackPower); } if (changesMask[93]) { - data << int32(RangedAttackPowerModSupport); + data << int32(RangedAttackPowerModPos); } if (changesMask[94]) { - data << int32(MainHandWeaponAttackPower); + data << int32(RangedAttackPowerModNeg); } if (changesMask[95]) { - data << int32(OffHandWeaponAttackPower); + data << float(RangedAttackPowerMultiplier); } } if (changesMask[96]) { if (changesMask[97]) { - data << int32(RangedWeaponAttackPower); + data << int32(RangedAttackPowerModSupport); } if (changesMask[98]) { - data << int32(SetAttackSpeedAura); + data << int32(MainHandWeaponAttackPower); } if (changesMask[99]) { - data << float(Lifesteal); + data << int32(OffHandWeaponAttackPower); } if (changesMask[100]) { - data << float(MinRangedDamage); + data << int32(RangedWeaponAttackPower); } if (changesMask[101]) { - data << float(MaxRangedDamage); + data << int32(SetAttackSpeedAura); } if (changesMask[102]) { - data << float(ManaCostMultiplier); + data << float(Lifesteal); } if (changesMask[103]) { - data << float(MaxHealthModifier); + data << float(MinRangedDamage); } if (changesMask[104]) { - data << float(HoverHeight); + data << float(MaxRangedDamage); } if (changesMask[105]) { - data << int32(MinItemLevelCutoff); + data << float(ManaCostMultiplier); } if (changesMask[106]) { - data << int32(MinItemLevel); + data << float(MaxHealthModifier); } if (changesMask[107]) { - data << int32(MaxItemLevel); + data << float(HoverHeight); } if (changesMask[108]) { - data << int32(AzeriteItemLevel); + data << int32(MinItemLevelCutoff); } if (changesMask[109]) { - data << int32(WildBattlePetLevel); + data << int32(MinItemLevel); } if (changesMask[110]) { - data << int32(BattlePetCompanionExperience); + data << int32(MaxItemLevel); } if (changesMask[111]) { - data << uint32(BattlePetCompanionNameTimestamp); + data << int32(AzeriteItemLevel); } if (changesMask[112]) { - data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver)); + data << int32(WildBattlePetLevel); } if (changesMask[113]) { - data << int32(ScaleDuration); + data << int32(BattlePetCompanionExperience); } if (changesMask[114]) { - data << int32(LooksLikeMountID); + data << uint32(BattlePetCompanionNameTimestamp); } if (changesMask[115]) { - data << int32(LooksLikeCreatureID); + data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver)); } if (changesMask[116]) { - data << int32(LookAtControllerID); + data << int32(ScaleDuration); } if (changesMask[117]) { - data << int32(PerksVendorItemID); + data << int32(LooksLikeMountID); } if (changesMask[118]) { - data << int32(TaxiNodesID); + data << int32(LooksLikeCreatureID); } if (changesMask[119]) { - data << GuildGUID; + data << int32(LookAtControllerID); } if (changesMask[120]) { - data << int32(FlightCapabilityID); + data << int32(PerksVendorItemID); } if (changesMask[121]) { - data << float(GlideEventSpeedDivisor); + data << int32(TaxiNodesID); } if (changesMask[122]) { - data << uint32(Field_308); + data << GuildGUID; } if (changesMask[123]) { - data << uint32(Field_30C); + data << int32(FlightCapabilityID); } if (changesMask[124]) { - data << uint32(SilencedSchoolMask); + data << float(GlideEventSpeedDivisor); } if (changesMask[125]) { - data << uint32(CurrentAreaID); + data << uint32(MaxHealthModifierFlatNeg); } if (changesMask[126]) { - data << NameplateAttachToGUID; + data << uint32(MaxHealthModifierFlatPos); + } + if (changesMask[127]) + { + data << uint32(SilencedSchoolMask); } } - if (changesMask[127]) + if (changesMask[128]) { - for (uint32 i = 0; i < 2; ++i) + if (changesMask[129]) { - if (changesMask[128 + i]) - { - data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, i, owner, receiver)); - } + data << uint32(CurrentAreaID); + } + if (changesMask[130]) + { + data << float(Field_31C); + } + if (changesMask[131]) + { + data << float(Field_320); + } + if (changesMask[132]) + { + data << NameplateAttachToGUID; } } - if (changesMask[130]) + if (changesMask[133]) { for (uint32 i = 0; i < 10; ++i) { - if (changesMask[131 + i]) + if (changesMask[134 + i]) { data << int32(Power[i]); } - if (changesMask[141 + i]) + if (changesMask[144 + i]) { data << int32(MaxPower[i]); } - if (changesMask[151 + i]) + if (changesMask[154 + i]) { data << float(PowerRegenFlatModifier[i]); } - if (changesMask[161 + i]) + if (changesMask[164 + i]) { data << float(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[171]) + if (changesMask[174]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[172 + i]) + if (changesMask[175 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[175]) + if (changesMask[178]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[176 + i]) + if (changesMask[179 + i]) { data << uint32(AttackRoundBaseTime[i]); } } } - if (changesMask[178]) + if (changesMask[181]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[179 + i]) + if (changesMask[182 + i]) { data << int32(Stats[i]); } - if (changesMask[183 + i]) + if (changesMask[186 + i]) { data << int32(StatPosBuff[i]); } - if (changesMask[187 + i]) + if (changesMask[190 + i]) { data << int32(StatNegBuff[i]); } - if (changesMask[191 + i]) + if (changesMask[194 + i]) { data << int32(StatSupportBuff[i]); } } } - if (changesMask[195]) + if (changesMask[198]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[196 + i]) + if (changesMask[199 + i]) { data << int32(Resistances[i]); } - if (changesMask[203 + i]) + if (changesMask[206 + i]) { data << int32(BonusResistanceMods[i]); } - if (changesMask[210 + i]) + if (changesMask[213 + i]) { data << int32(ManaCostModifier[i]); } } } + data.FlushBits(); } void UnitData::ClearChangesMask() { + Base::ClearChangesMask(Field_314); Base::ClearChangesMask(StateWorldEffectIDs); Base::ClearChangesMask(PassiveSpells); Base::ClearChangesMask(WorldEffects); Base::ClearChangesMask(ChannelObjects); Base::ClearChangesMask(DisplayID); + Base::ClearChangesMask(NpcFlags); + Base::ClearChangesMask(NpcFlags2); Base::ClearChangesMask(StateSpellVisualID); Base::ClearChangesMask(StateAnimID); Base::ClearChangesMask(StateAnimKitID); @@ -1935,12 +1954,13 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(GuildGUID); Base::ClearChangesMask(FlightCapabilityID); Base::ClearChangesMask(GlideEventSpeedDivisor); - Base::ClearChangesMask(Field_308); - Base::ClearChangesMask(Field_30C); + Base::ClearChangesMask(MaxHealthModifierFlatNeg); + Base::ClearChangesMask(MaxHealthModifierFlatPos); Base::ClearChangesMask(SilencedSchoolMask); Base::ClearChangesMask(CurrentAreaID); + Base::ClearChangesMask(Field_31C); + Base::ClearChangesMask(Field_320); Base::ClearChangesMask(NameplateAttachToGUID); - Base::ClearChangesMask(NpcFlags); Base::ClearChangesMask(Power); Base::ClearChangesMask(MaxPower); Base::ClearChangesMask(PowerRegenFlatModifier); @@ -2885,6 +2905,93 @@ void SkillInfo::ClearChangesMask() _changesMask.ResetAll(); } +void BitVectors::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + for (uint32 i = 0; i < 11; ++i) + { + data << uint32(Values[i].size()); + for (uint32 j = 0; j < Values[i].size(); ++j) + { + data << uint64(Values[i][j]); + } + } +} + +void BitVectors::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 1); + + if (changesMask[0]) + { + for (uint32 i = 0; i < 11; ++i) + { + if (!ignoreChangesMask) + Values[i].WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Values[i].size(), data); + } + } + if (changesMask[0]) + { + for (uint32 i = 0; i < 11; ++i) + { + for (uint32 j = 0; j < Values[i].size(); ++j) + { + if (Values[i].HasChanged(j) || ignoreChangesMask) + { + data << uint64(Values[i][j]); + } + } + } + } + data.FlushBits(); +} + +void BitVectors::ClearChangesMask() +{ + Base::ClearChangesMask(Values); + _changesMask.ResetAll(); +} + +void PlayerDataElement::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data.WriteBits(Type, 1); + if (Type == 1) + { + data << float(FloatValue); + } + if (Type == 0) + { + data << int64(Int64Value); + } + data.FlushBits(); +} + +void PlayerDataElement::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + data.WriteBits(Type, 1); + if (Type == 1) + { + data << float(FloatValue); + } + if (Type == 0) + { + data << int64(Int64Value); + } + data.FlushBits(); +} + +bool PlayerDataElement::operator==(PlayerDataElement const& right) const +{ + return Type == right.Type + && FloatValue == right.FloatValue + && Int64Value == right.Int64Value; +} + void RestInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << uint32(Threshold); @@ -3418,11 +3525,44 @@ bool TraitEntry::operator==(TraitEntry const& right) const && GrantedRanks == right.GrantedRanks; } +void TraitSubTreeCache::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(TraitSubTreeID); + data << uint32(Entries.size()); + for (uint32 i = 0; i < Entries.size(); ++i) + { + Entries[i].WriteCreate(data, owner, receiver); + } + data.WriteBits(Active, 1); + data.FlushBits(); +} + +void TraitSubTreeCache::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + data << int32(TraitSubTreeID); + data << uint32(Entries.size()); + for (uint32 i = 0; i < Entries.size(); ++i) + { + Entries[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + data.FlushBits(); + data.WriteBits(Active, 1); + data.FlushBits(); +} + +bool TraitSubTreeCache::operator==(TraitSubTreeCache const& right) const +{ + return Entries == right.Entries + && TraitSubTreeID == right.TraitSubTreeID + && Active == right.Active; +} + void TraitConfig::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(ID); data << int32(Type); data << uint32(Entries.size()); + data << uint32(SubTrees.size()); if (Type == 2) { data << int32(SkillLineID); @@ -3442,6 +3582,10 @@ void TraitConfig::WriteCreate(ByteBuffer& data, Player const* owner, Player cons Entries[i].WriteCreate(data, owner, receiver); } data.WriteBits(Name->size(), 9); + for (uint32 i = 0; i < SubTrees.size(); ++i) + { + SubTrees[i].WriteCreate(data, owner, receiver); + } data.WriteString(Name); data.FlushBits(); } @@ -3452,7 +3596,7 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 12); + data.WriteBits(changesMask.GetBlock(0), 14); if (changesMask[0]) { @@ -3463,6 +3607,13 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c else WriteCompleteDynamicFieldUpdateMask(Entries.size(), data); } + if (changesMask[2]) + { + if (!ignoreChangesMask) + SubTrees.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(SubTrees.size(), data); + } } data.FlushBits(); if (changesMask[0]) @@ -3479,47 +3630,60 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c } if (changesMask[2]) { + for (uint32 i = 0; i < SubTrees.size(); ++i) + { + if (SubTrees.HasChanged(i) || ignoreChangesMask) + { + SubTrees[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + } + if (changesMask[3]) + { data << int32(ID); } } if (changesMask[4]) { - if (changesMask[5]) + if (changesMask[6]) { data << int32(Type); } - if (changesMask[6]) + if (changesMask[7]) { if (Type == 2) { data << int32(SkillLineID); } } - if (changesMask[7]) + } + if (changesMask[8]) + { + if (changesMask[9]) { if (Type == 1) { data << int32(ChrSpecializationID); } } - } - if (changesMask[8]) - { - if (changesMask[9]) + if (changesMask[10]) { if (Type == 1) { data << int32(CombatConfigFlags); } } - if (changesMask[10]) + if (changesMask[11]) { if (Type == 1) { data << int32(LocalIdentifier); } } - if (changesMask[11]) + } + if (changesMask[12]) + { + if (changesMask[13]) { if (Type == 3) { @@ -3527,9 +3691,9 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c } } } - if (changesMask[0]) + if (changesMask[4]) { - if (changesMask[3]) + if (changesMask[5]) { data.WriteBits(Name->size(), 9); data.WriteString(Name); @@ -3541,6 +3705,7 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c void TraitConfig::ClearChangesMask() { Base::ClearChangesMask(Entries); + Base::ClearChangesMask(SubTrees); Base::ClearChangesMask(ID); Base::ClearChangesMask(Name); Base::ClearChangesMask(Type); @@ -3624,6 +3789,70 @@ void CraftingOrderItem::ClearChangesMask() _changesMask.ResetAll(); } +void CraftingOrderCustomer::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << CustomerGUID; + data << CustomerAccountGUID; +} + +void CraftingOrderCustomer::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 2); + + data.FlushBits(); + if (changesMask[0]) + { + data << CustomerGUID; + } + if (changesMask[1]) + { + data << CustomerAccountGUID; + } +} + +void CraftingOrderCustomer::ClearChangesMask() +{ + Base::ClearChangesMask(CustomerGUID); + Base::ClearChangesMask(CustomerAccountGUID); + _changesMask.ResetAll(); +} + +void CraftingOrderNpcCustomer::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int64(NpcCraftingOrderCustomerID); + data << int32(Field_8); +} + +void CraftingOrderNpcCustomer::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 2); + + data.FlushBits(); + if (changesMask[0]) + { + data << int64(NpcCraftingOrderCustomerID); + } + if (changesMask[1]) + { + data << int32(Field_8); + } +} + +void CraftingOrderNpcCustomer::ClearChangesMask() +{ + Base::ClearChangesMask(NpcCraftingOrderCustomerID); + Base::ClearChangesMask(Field_8); + _changesMask.ResetAll(); +} + void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(Field_0); @@ -3637,12 +3866,14 @@ void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Playe data << int64(TipAmount); data << int64(ConsortiumCut); data << uint32(Flags); - data << CustomerGUID; - data << CustomerAccountGUID; data << CrafterGUID; data << PersonalCrafterGUID; + data << int32(NpcCraftingOrderSetID); + data << int32(NpcTreasureID); data << uint32(Reagents.size()); data.WriteBits(CustomerNotes->size(), 10); + data.WriteBits(Customer.has_value(), 1); + data.WriteBits(NpcCustomer.has_value(), 1); data.WriteBits(OutputItem.has_value(), 1); data.WriteBits(OutputItemData.has_value(), 1); data.FlushBits(); @@ -3651,6 +3882,14 @@ void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Playe Reagents[i].WriteCreate(data, owner, receiver); } data.WriteString(CustomerNotes); + if (Customer.has_value()) + { + Customer->WriteCreate(data, owner, receiver); + } + if (NpcCustomer.has_value()) + { + NpcCustomer->WriteCreate(data, owner, receiver); + } if (OutputItem.has_value()) { OutputItem->WriteCreate(data, owner, receiver); @@ -3668,7 +3907,7 @@ void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 24); + data.WriteBits(changesMask.GetBlock(0), 26); if (changesMask[0]) { @@ -3705,13 +3944,13 @@ void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl { data << int32(SkillLineAbilityID); } - } - if (changesMask[5]) - { - if (changesMask[6]) + if (changesMask[5]) { data << uint8(OrderState); } + } + if (changesMask[6]) + { if (changesMask[7]) { data << uint8(OrderType); @@ -3724,17 +3963,17 @@ void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl { data << int64(ExpirationTime); } - } - if (changesMask[10]) - { - if (changesMask[11]) + if (changesMask[10]) { data << int64(ClaimEndTime); } - if (changesMask[12]) + if (changesMask[11]) { data << int64(TipAmount); } + } + if (changesMask[12]) + { if (changesMask[13]) { data << int64(ConsortiumCut); @@ -3743,44 +3982,68 @@ void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl { data << uint32(Flags); } - } - if (changesMask[15]) - { + if (changesMask[15]) + { + data << CrafterGUID; + } if (changesMask[16]) { - data << CustomerGUID; + data << PersonalCrafterGUID; } if (changesMask[17]) { - data << CustomerAccountGUID; + data << int32(NpcCraftingOrderSetID); } - if (changesMask[18]) + } + if (changesMask[18]) + { + if (changesMask[19]) { - data << CrafterGUID; + data << int32(NpcTreasureID); } - if (changesMask[19]) + if (changesMask[20]) { - data << PersonalCrafterGUID; + data.WriteBits(CustomerNotes->size(), 10); } + data.WriteBits(Customer.has_value(), 1); + data.WriteBits(NpcCustomer.has_value(), 1); + data.WriteBits(OutputItem.has_value(), 1); } - if (changesMask[20]) + if (changesMask[24]) { - if (changesMask[21]) + data.WriteBits(OutputItemData.has_value(), 1); + } + if (changesMask[18]) + { + if (changesMask[20]) { - data.WriteBits(CustomerNotes->size(), 10); data.WriteString(CustomerNotes); } - data.WriteBits(OutputItem.has_value(), 1); - data.WriteBits(OutputItemData.has_value(), 1); - data.FlushBits(); + if (changesMask[21]) + { + if (Customer.has_value()) + { + Customer->WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } if (changesMask[22]) { + if (NpcCustomer.has_value()) + { + NpcCustomer->WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + if (changesMask[23]) + { if (OutputItem.has_value()) { OutputItem->WriteUpdate(data, ignoreChangesMask, owner, receiver); } } - if (changesMask[23]) + } + if (changesMask[24]) + { + if (changesMask[25]) { if (OutputItemData.has_value()) { @@ -3805,11 +4068,13 @@ void CraftingOrderData::ClearChangesMask() Base::ClearChangesMask(TipAmount); Base::ClearChangesMask(ConsortiumCut); Base::ClearChangesMask(Flags); - Base::ClearChangesMask(CustomerGUID); - Base::ClearChangesMask(CustomerAccountGUID); Base::ClearChangesMask(CrafterGUID); Base::ClearChangesMask(PersonalCrafterGUID); + Base::ClearChangesMask(NpcCraftingOrderSetID); + Base::ClearChangesMask(NpcTreasureID); Base::ClearChangesMask(CustomerNotes); + Base::ClearChangesMask(Customer); + Base::ClearChangesMask(NpcCustomer); Base::ClearChangesMask(OutputItem); Base::ClearChangesMask(OutputItemData); _changesMask.ResetAll(); @@ -3937,6 +4202,50 @@ void PersonalCraftingOrderCount::ClearChangesMask() _changesMask.ResetAll(); } +void NPCCraftingOrderInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << uint64(Field_0); + data << int32(Field_8); + data << int32(Field_C); + data << int32(Field_10); +} + +void NPCCraftingOrderInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + data << uint64(Field_0); + } + if (changesMask[1]) + { + data << int32(Field_8); + } + if (changesMask[2]) + { + data << int32(Field_C); + } + if (changesMask[3]) + { + data << int32(Field_10); + } +} + +void NPCCraftingOrderInfo::ClearChangesMask() +{ + Base::ClearChangesMask(Field_0); + Base::ClearChangesMask(Field_8); + Base::ClearChangesMask(Field_C); + Base::ClearChangesMask(Field_10); + _changesMask.ResetAll(); +} + void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(SpellCategoryID); @@ -4138,6 +4447,134 @@ void CollectableSourceTrackedData::ClearChangesMask() _changesMask.ResetAll(); } +void BankTabSettings::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data.WriteBits(Name->size(), 7); + data.WriteBits(Icon->size(), 9); + data.WriteBits(Description->size(), 14); + data << int32(DepositFlags); + data.WriteString(Name); + data.WriteString(Icon); + data.WriteString(Description); + data.FlushBits(); +} + +void BankTabSettings::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + data.WriteBits(Name->size(), 7); + } + if (changesMask[1]) + { + data.WriteBits(Icon->size(), 9); + } + if (changesMask[2]) + { + data.WriteBits(Description->size(), 14); + } + if (changesMask[3]) + { + data << int32(DepositFlags); + } + if (changesMask[0]) + { + data.WriteString(Name); + } + if (changesMask[1]) + { + data.WriteString(Icon); + } + if (changesMask[2]) + { + data.WriteString(Description); + } + data.FlushBits(); +} + +void BankTabSettings::ClearChangesMask() +{ + Base::ClearChangesMask(Name); + Base::ClearChangesMask(Icon); + Base::ClearChangesMask(Description); + Base::ClearChangesMask(DepositFlags); + _changesMask.ResetAll(); +} + +void WalkInData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(MapID); + data << int64(Field_8); + data << Field_18; + data.WriteBits(Type, 1); + data.FlushBits(); +} + +void WalkInData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + data << int32(MapID); + data << int64(Field_8); + data << Field_18; + data.WriteBits(Type, 1); + data.FlushBits(); +} + +bool WalkInData::operator==(WalkInData const& right) const +{ + return MapID == right.MapID + && Field_8 == right.Field_8 + && Type == right.Type + && Field_18 == right.Field_18; +} + +void DelveData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(Field_0); + data << int64(Field_8); + data << int32(Field_10); + data << int32(SpellID); + data << uint32(Owners.size()); + for (uint32 i = 0; i < Owners.size(); ++i) + { + data << Owners[i]; + } + data.WriteBits(Started, 1); + data.FlushBits(); +} + +void DelveData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + data.FlushBits(); + data << int32(Field_0); + data << int64(Field_8); + data << int32(Field_10); + data << int32(SpellID); + data << uint32(Owners.size()); + for (uint32 i = 0; i < Owners.size(); ++i) + { + data << Owners[i]; + } + data.WriteBits(Started, 1); + data.FlushBits(); +} + +bool DelveData::operator==(DelveData const& right) const +{ + return Owners == right.Owners + && Field_0 == right.Field_0 + && Field_8 == right.Field_8 + && Field_10 == right.Field_10 + && SpellID == right.SpellID + && Started == right.Started; +} + void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int16(ResearchProjectID); @@ -4155,7 +4592,7 @@ bool Research::operator==(Research const& right) const void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - for (uint32 i = 0; i < 227; ++i) + for (uint32 i = 0; i < 232; ++i) { data << InvSlots[i]; } @@ -4163,6 +4600,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << SummonedBattlePetGUID; data << uint32(KnownTitles.size()); data << uint64(Coinage); + data << uint64(AccountBankCoinage); data << int32(XP); data << int32(NextLevelXP); data << int32(TrialXP); @@ -4193,14 +4631,9 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << float(VersatilityBonus); data << float(PvpPowerDamage); data << float(PvpPowerHealing); - for (uint32 i = 0; i < 9; ++i) - { - data << uint32(DataFlags[i].size()); - for (uint32 j = 0; j < DataFlags[i].size(); ++j) - { - data << uint64(DataFlags[i][j]); - } - } + BitVectors->WriteCreate(data, owner, receiver); + data << uint32(CharacterDataElements.size()); + data << uint32(AccountDataElements.size()); for (uint32 i = 0; i < 2; ++i) { RestInfo[i].WriteCreate(data, owner, receiver); @@ -4278,7 +4711,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { data << uint32(BankBagSlotFlags[i]); } - for (uint32 i = 0; i < 950; ++i) + for (uint32 i = 0; i < 960; ++i) { data << uint64(QuestCompleted[i]); } @@ -4286,6 +4719,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << int32(HonorNextLevel); data << int32(PerksProgramCurrency); data << uint8(NumBankSlots); + data << uint8(NumAccountBankTabs); for (uint32 i = 0; i < 1; ++i) { data << uint32(ResearchSites[i].size()); @@ -4333,6 +4767,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << uint32(ActiveCombatTraitConfigID); data << uint32(CraftingOrders.size()); data << uint32(PersonalCraftingOrderCounts.size()); + data << uint32(NpcCraftingOrders.size()); data << uint32(CategoryCooldownMods.size()); data << uint32(WeeklySpellUses.size()); for (uint32 i = 0; i < 17; ++i) @@ -4431,6 +4866,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { PersonalCraftingOrderCounts[i].WriteCreate(data, owner, receiver); } + for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i) + { + NpcCraftingOrders[i].WriteCreate(data, owner, receiver); + } for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) { CategoryCooldownMods[i].WriteCreate(data, owner, receiver); @@ -4452,6 +4891,9 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data.WriteBit(HasPerksProgramPendingReward); data.WriteBits(QuestSession.has_value(), 1); data.WriteBits(PetStable.has_value(), 1); + data.WriteBits(AccountBankTabSettings.size(), 3); + data.WriteBits(WalkInData.has_value(), 1); + data.WriteBits(DelveData.has_value(), 1); data.FlushBits(); ResearchHistory->WriteCreate(data, owner, receiver); if (QuestSession.has_value()) @@ -4461,6 +4903,14 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << FrozenPerksVendorItem; Field_1410->WriteCreate(data, owner, receiver); data << DungeonScore; + for (uint32 i = 0; i < CharacterDataElements.size(); ++i) + { + CharacterDataElements[i].WriteCreate(data, owner, receiver); + } + for (uint32 i = 0; i < AccountDataElements.size(); ++i) + { + AccountDataElements[i].WriteCreate(data, owner, receiver); + } for (uint32 i = 0; i < PvpInfo.size(); ++i) { PvpInfo[i].WriteCreate(data, owner, receiver); @@ -4481,6 +4931,18 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { PetStable->WriteCreate(data, owner, receiver); } + for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i) + { + AccountBankTabSettings[i].WriteCreate(data, owner, receiver); + } + if (WalkInData.has_value()) + { + WalkInData->WriteCreate(data, owner, receiver); + } + if (DelveData.has_value()) + { + DelveData->WriteCreate(data, owner, receiver); + } data.FlushBits(); } @@ -4493,8 +4955,8 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo { for (uint32 i = 0; i < 1; ++i) data << uint32(changesMask.GetBlocksMask(i)); - data.WriteBits(changesMask.GetBlocksMask(1), 14); - for (uint32 i = 0; i < 46; ++i) + data.WriteBits(changesMask.GetBlocksMask(1), 15); + for (uint32 i = 0; i < 47; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -4531,39 +4993,21 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo else WriteCompleteDynamicFieldUpdateMask(KnownTitles.size(), data); } - } - if (changesMask[36]) - { - for (uint32 i = 0; i < 9; ++i) + if (changesMask[8]) { - if (changesMask[37]) - { - if (!ignoreNestedChangesMask) - DataFlags[i].WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(DataFlags[i].size(), data); - } + if (!ignoreNestedChangesMask) + CharacterDataElements.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(CharacterDataElements.size(), data); } - } - if (changesMask[36]) - { - for (uint32 i = 0; i < 9; ++i) + if (changesMask[9]) { - if (changesMask[37]) - { - for (uint32 j = 0; j < DataFlags[i].size(); ++j) - { - if (DataFlags[i].HasChanged(j) || ignoreNestedChangesMask) - { - data << uint64(DataFlags[i][j]); - } - } - } + if (!ignoreNestedChangesMask) + AccountDataElements.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(AccountDataElements.size(), data); } - } - if (changesMask[0]) - { - if (changesMask[8]) + if (changesMask[10]) { if (!ignoreNestedChangesMask) PvpInfo.WriteUpdateMask(data); @@ -4571,11 +5015,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data); } } - if (changesMask[38]) + if (changesMask[40]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[39]) + if (changesMask[41]) { if (!ignoreNestedChangesMask) ResearchSites[i].WriteUpdateMask(data); @@ -4584,11 +5028,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[40]) + if (changesMask[42]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[41]) + if (changesMask[43]) { if (!ignoreNestedChangesMask) ResearchSiteProgress[i].WriteUpdateMask(data); @@ -4597,11 +5041,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[42]) + if (changesMask[44]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[43]) + if (changesMask[45]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -4610,11 +5054,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[38]) + if (changesMask[40]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[39]) + if (changesMask[41]) { for (uint32 j = 0; j < ResearchSites[i].size(); ++j) { @@ -4626,11 +5070,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[40]) + if (changesMask[42]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[41]) + if (changesMask[43]) { for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j) { @@ -4642,11 +5086,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[42]) + if (changesMask[44]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[43]) + if (changesMask[45]) { for (uint32 j = 0; j < Research[i].size(); ++j) { @@ -4661,185 +5105,192 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[9]) + if (changesMask[11]) { if (!ignoreNestedChangesMask) DailyQuestsCompleted.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.size(), data); } - if (changesMask[10]) + if (changesMask[12]) { if (!ignoreNestedChangesMask) AvailableQuestLineXQuestIDs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.size(), data); } - if (changesMask[11]) + if (changesMask[13]) { if (!ignoreNestedChangesMask) Heirlooms.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Heirlooms.size(), data); } - if (changesMask[12]) + if (changesMask[14]) { if (!ignoreNestedChangesMask) HeirloomFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.size(), data); } - if (changesMask[13]) + if (changesMask[15]) { if (!ignoreNestedChangesMask) Toys.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Toys.size(), data); } - if (changesMask[14]) + if (changesMask[16]) { if (!ignoreNestedChangesMask) ToyFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ToyFlags.size(), data); } - if (changesMask[15]) + if (changesMask[17]) { if (!ignoreNestedChangesMask) Transmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Transmog.size(), data); } - if (changesMask[16]) + if (changesMask[18]) { if (!ignoreNestedChangesMask) ConditionalTransmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.size(), data); } - if (changesMask[17]) + if (changesMask[19]) { if (!ignoreNestedChangesMask) SelfResSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SelfResSpells.size(), data); } - if (changesMask[18]) + if (changesMask[20]) { if (!ignoreNestedChangesMask) RuneforgePowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.size(), data); } - if (changesMask[19]) + if (changesMask[21]) { if (!ignoreNestedChangesMask) TransmogIllusions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.size(), data); } - if (changesMask[20]) + if (changesMask[22]) { if (!ignoreNestedChangesMask) CharacterRestrictions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data); } - if (changesMask[21]) + if (changesMask[23]) { if (!ignoreNestedChangesMask) SpellPctModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data); } - if (changesMask[22]) + if (changesMask[24]) { if (!ignoreNestedChangesMask) SpellFlatModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data); } - if (changesMask[23]) + if (changesMask[25]) { if (!ignoreNestedChangesMask) MawPowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data); } - if (changesMask[24]) + if (changesMask[26]) { if (!ignoreNestedChangesMask) MultiFloorExploration.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data); } - if (changesMask[25]) + if (changesMask[27]) { if (!ignoreNestedChangesMask) RecipeProgression.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data); } - if (changesMask[26]) + if (changesMask[28]) { if (!ignoreNestedChangesMask) ReplayedQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data); } - if (changesMask[27]) + if (changesMask[29]) { if (!ignoreNestedChangesMask) TaskQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TaskQuests.size(), data); } - if (changesMask[28]) + if (changesMask[30]) { if (!ignoreNestedChangesMask) DisabledSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DisabledSpells.size(), data); } - if (changesMask[29]) + if (changesMask[31]) { if (!ignoreNestedChangesMask) TraitConfigs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TraitConfigs.size(), data); } - if (changesMask[30]) + } + if (changesMask[32]) + { + if (changesMask[33]) { if (!ignoreNestedChangesMask) CraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data); } - if (changesMask[31]) + if (changesMask[34]) { if (!ignoreNestedChangesMask) PersonalCraftingOrderCounts.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data); } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[35]) + { + if (!ignoreNestedChangesMask) + NpcCraftingOrders.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(NpcCraftingOrders.size(), data); + } + if (changesMask[36]) { if (!ignoreNestedChangesMask) CategoryCooldownMods.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data); } - if (changesMask[34]) + if (changesMask[37]) { if (!ignoreNestedChangesMask) WeeklySpellUses.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data); } - if (changesMask[35]) + if (changesMask[38]) { if (!ignoreNestedChangesMask) TrackedCollectableSources.WriteUpdateMask(data); @@ -4860,7 +5311,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[9]) + if (changesMask[11]) { for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i) { @@ -4870,7 +5321,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[10]) + if (changesMask[12]) { for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i) { @@ -4880,7 +5331,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[11]) + if (changesMask[13]) { for (uint32 i = 0; i < Heirlooms.size(); ++i) { @@ -4890,7 +5341,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[12]) + if (changesMask[14]) { for (uint32 i = 0; i < HeirloomFlags.size(); ++i) { @@ -4900,7 +5351,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[13]) + if (changesMask[15]) { for (uint32 i = 0; i < Toys.size(); ++i) { @@ -4910,7 +5361,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[14]) + if (changesMask[16]) { for (uint32 i = 0; i < ToyFlags.size(); ++i) { @@ -4920,7 +5371,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[15]) + if (changesMask[17]) { for (uint32 i = 0; i < Transmog.size(); ++i) { @@ -4930,7 +5381,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[16]) + if (changesMask[18]) { for (uint32 i = 0; i < ConditionalTransmog.size(); ++i) { @@ -4940,7 +5391,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[17]) + if (changesMask[19]) { for (uint32 i = 0; i < SelfResSpells.size(); ++i) { @@ -4950,7 +5401,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[18]) + if (changesMask[20]) { for (uint32 i = 0; i < RuneforgePowers.size(); ++i) { @@ -4960,7 +5411,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[19]) + if (changesMask[21]) { for (uint32 i = 0; i < TransmogIllusions.size(); ++i) { @@ -4970,7 +5421,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[21]) + if (changesMask[23]) { for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i) { @@ -4980,7 +5431,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[22]) + if (changesMask[24]) { for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i) { @@ -4990,7 +5441,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[23]) + if (changesMask[25]) { for (uint32 i = 0; i < MawPowers.size(); ++i) { @@ -5000,7 +5451,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[24]) + if (changesMask[26]) { for (uint32 i = 0; i < MultiFloorExploration.size(); ++i) { @@ -5010,7 +5461,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[25]) + if (changesMask[27]) { for (uint32 i = 0; i < RecipeProgression.size(); ++i) { @@ -5020,7 +5471,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[26]) + if (changesMask[28]) { for (uint32 i = 0; i < ReplayedQuests.size(); ++i) { @@ -5030,7 +5481,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[27]) + if (changesMask[29]) { for (uint32 i = 0; i < TaskQuests.size(); ++i) { @@ -5040,7 +5491,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[28]) + if (changesMask[30]) { for (uint32 i = 0; i < DisabledSpells.size(); ++i) { @@ -5050,7 +5501,10 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[31]) + } + if (changesMask[32]) + { + if (changesMask[34]) { for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i) { @@ -5060,10 +5514,17 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[35]) + { + for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i) + { + if (NpcCraftingOrders.HasChanged(i) || ignoreNestedChangesMask) + { + NpcCraftingOrders[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[36]) { for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) { @@ -5073,7 +5534,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[34]) + if (changesMask[37]) { for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) { @@ -5083,7 +5544,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[35]) + if (changesMask[38]) { for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i) { @@ -5093,11 +5554,38 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } + if (changesMask[39]) + { + if (!ignoreNestedChangesMask) + AccountBankTabSettings.WriteUpdateMask(data, 3); + else + WriteCompleteDynamicFieldUpdateMask(AccountBankTabSettings.size(), data, 3); + } } if (changesMask[0]) { if (changesMask[8]) { + for (uint32 i = 0; i < CharacterDataElements.size(); ++i) + { + if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask) + { + CharacterDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[9]) + { + for (uint32 i = 0; i < AccountDataElements.size(); ++i) + { + if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask) + { + AccountDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[10]) + { for (uint32 i = 0; i < PvpInfo.size(); ++i) { if (PvpInfo.HasChanged(i) || ignoreNestedChangesMask) @@ -5106,7 +5594,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[20]) + if (changesMask[22]) { for (uint32 i = 0; i < CharacterRestrictions.size(); ++i) { @@ -5116,7 +5604,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[29]) + if (changesMask[31]) { for (uint32 i = 0; i < TraitConfigs.size(); ++i) { @@ -5126,7 +5614,10 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[30]) + } + if (changesMask[32]) + { + if (changesMask[33]) { for (uint32 i = 0; i < CraftingOrders.size(); ++i) { @@ -5136,533 +5627,574 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - } - if (changesMask[32]) - { - if (changesMask[44]) + if (changesMask[39]) + { + for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i) + { + if (AccountBankTabSettings.HasChanged(i) || ignoreNestedChangesMask) + { + AccountBankTabSettings[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[46]) { data << FarsightObject; } - if (changesMask[45]) + if (changesMask[47]) { data << SummonedBattlePetGUID; } - if (changesMask[46]) + if (changesMask[48]) { data << uint64(Coinage); } - if (changesMask[47]) + if (changesMask[49]) + { + data << uint64(AccountBankCoinage); + } + if (changesMask[50]) { data << int32(XP); } - if (changesMask[48]) + if (changesMask[51]) { data << int32(NextLevelXP); } - if (changesMask[49]) + if (changesMask[52]) { data << int32(TrialXP); } - if (changesMask[50]) + if (changesMask[53]) { Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[51]) + if (changesMask[54]) { data << int32(CharacterPoints); } - if (changesMask[52]) + if (changesMask[55]) { data << int32(MaxTalentTiers); } - if (changesMask[53]) + if (changesMask[56]) { data << uint32(TrackCreatureMask); } - if (changesMask[54]) + if (changesMask[57]) { data << float(MainhandExpertise); } - if (changesMask[55]) + if (changesMask[58]) { data << float(OffhandExpertise); } - if (changesMask[56]) + if (changesMask[59]) { data << float(RangedExpertise); } - if (changesMask[57]) + if (changesMask[60]) { data << float(CombatRatingExpertise); } - if (changesMask[58]) + if (changesMask[61]) { data << float(BlockPercentage); } - if (changesMask[59]) + if (changesMask[62]) { data << float(DodgePercentage); } - if (changesMask[60]) + if (changesMask[63]) { data << float(DodgePercentageFromAttribute); } - if (changesMask[61]) + if (changesMask[64]) { data << float(ParryPercentage); } - if (changesMask[62]) + if (changesMask[65]) { data << float(ParryPercentageFromAttribute); } - if (changesMask[63]) + if (changesMask[66]) { data << float(CritPercentage); } - if (changesMask[64]) + if (changesMask[67]) { data << float(RangedCritPercentage); } - if (changesMask[65]) + if (changesMask[68]) { data << float(OffhandCritPercentage); } - if (changesMask[66]) + if (changesMask[69]) { data << float(SpellCritPercentage); } - if (changesMask[67]) + } + if (changesMask[70]) + { + if (changesMask[71]) { data << int32(ShieldBlock); } - if (changesMask[68]) + if (changesMask[72]) { data << float(ShieldBlockCritPercentage); } - if (changesMask[69]) + if (changesMask[73]) { data << float(Mastery); } - if (changesMask[70]) + if (changesMask[74]) { data << float(Speed); } - if (changesMask[71]) + if (changesMask[75]) { data << float(Avoidance); } - } - if (changesMask[72]) - { - if (changesMask[73]) + if (changesMask[76]) { data << float(Sturdiness); } - if (changesMask[74]) + if (changesMask[77]) { data << int32(Versatility); } - if (changesMask[75]) + if (changesMask[78]) { data << float(VersatilityBonus); } - if (changesMask[76]) + if (changesMask[79]) { data << float(PvpPowerDamage); } - if (changesMask[77]) + if (changesMask[80]) { data << float(PvpPowerHealing); } - if (changesMask[78]) + if (changesMask[81]) + { + BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[82]) { data << int32(ModHealingDonePos); } - if (changesMask[79]) + if (changesMask[83]) { data << float(ModHealingPercent); } - if (changesMask[80]) + if (changesMask[84]) { data << float(ModPeriodicHealingDonePercent); } - if (changesMask[81]) + if (changesMask[85]) { data << float(ModSpellPowerPercent); } - if (changesMask[82]) + if (changesMask[86]) { data << float(ModResiliencePercent); } - if (changesMask[83]) + if (changesMask[87]) { data << float(OverrideSpellPowerByAPPercent); } - if (changesMask[84]) + if (changesMask[88]) { data << float(OverrideAPBySpellPowerPercent); } - if (changesMask[85]) + if (changesMask[89]) { data << int32(ModTargetResistance); } - if (changesMask[86]) + if (changesMask[90]) { data << int32(ModTargetPhysicalResistance); } - if (changesMask[87]) + if (changesMask[91]) { data << uint32(LocalFlags); } - if (changesMask[88]) + if (changesMask[92]) { data << uint8(GrantableLevels); } - if (changesMask[89]) + if (changesMask[93]) { data << uint8(MultiActionBars); } - if (changesMask[90]) + if (changesMask[94]) { data << uint8(LifetimeMaxRank); } - if (changesMask[91]) + if (changesMask[95]) { data << uint8(NumRespecs); } - if (changesMask[92]) + if (changesMask[96]) { data << uint32(PvpMedals); } - if (changesMask[93]) + if (changesMask[97]) { data << uint16(TodayHonorableKills); } - if (changesMask[94]) + if (changesMask[98]) { data << uint16(YesterdayHonorableKills); } - if (changesMask[95]) + if (changesMask[99]) { data << uint32(LifetimeHonorableKills); } - if (changesMask[96]) + if (changesMask[100]) { data << int32(WatchedFactionIndex); } - if (changesMask[97]) + if (changesMask[101]) { data << int32(MaxLevel); } - if (changesMask[98]) + } + if (changesMask[102]) + { + if (changesMask[103]) { data << int32(ScalingPlayerLevelDelta); } - if (changesMask[99]) + if (changesMask[104]) { data << int32(MaxCreatureScalingLevel); } - if (changesMask[100]) + if (changesMask[105]) { data << int32(PetSpellPower); } - if (changesMask[101]) + if (changesMask[106]) { data << float(UiHitModifier); } - if (changesMask[102]) + if (changesMask[107]) { data << float(UiSpellHitModifier); } - if (changesMask[103]) + if (changesMask[108]) { data << int32(HomeRealmTimeOffset); } - } - if (changesMask[104]) - { - if (changesMask[105]) + if (changesMask[109]) { data << float(ModPetHaste); } - if (changesMask[106]) + if (changesMask[110]) { data << int8(JailersTowerLevelMax); } - if (changesMask[107]) + if (changesMask[111]) { data << int8(JailersTowerLevel); } - if (changesMask[108]) + if (changesMask[112]) { data << uint8(LocalRegenFlags); } - if (changesMask[109]) + if (changesMask[113]) { data << uint8(AuraVision); } - if (changesMask[110]) + if (changesMask[114]) { data << uint8(NumBackpackSlots); } - if (changesMask[111]) + if (changesMask[115]) { data << int32(OverrideSpellsID); } - if (changesMask[112]) + if (changesMask[116]) { data << uint16(LootSpecID); } - if (changesMask[113]) + if (changesMask[117]) { data << uint32(OverrideZonePVPType); } - if (changesMask[114]) + if (changesMask[118]) { data << int32(Honor); } - if (changesMask[115]) + if (changesMask[119]) { data << int32(HonorNextLevel); } - if (changesMask[116]) + if (changesMask[120]) { data << int32(PerksProgramCurrency); } - if (changesMask[117]) + if (changesMask[121]) { data << uint8(NumBankSlots); } if (changesMask[122]) { + data << uint8(NumAccountBankTabs); + } + if (changesMask[127]) + { data << int32(UiChromieTimeExpansionID); } - if (changesMask[123]) + if (changesMask[128]) { data << int32(TimerunningSeasonID); } - if (changesMask[124]) + if (changesMask[129]) { data << int32(TransportServerTime); } - if (changesMask[125]) + if (changesMask[130]) { data << uint32(WeeklyRewardsPeriodSinceOrigin); } - if (changesMask[126]) + if (changesMask[131]) { data << int16(DEBUGSoulbindConduitRank); } - if (changesMask[128]) + if (changesMask[133]) { data << uint32(ActiveCombatTraitConfigID); } - if (changesMask[129]) + } + if (changesMask[134]) + { + if (changesMask[135]) { data << int32(ItemUpgradeHighOnehandWeaponItemID); } - if (changesMask[130]) + if (changesMask[136]) { data << int32(ItemUpgradeHighFingerItemID); } - if (changesMask[131]) + if (changesMask[137]) { data << float(ItemUpgradeHighFingerWatermark); } - if (changesMask[132]) + if (changesMask[138]) { data << int32(ItemUpgradeHighTrinketItemID); } - if (changesMask[133]) + if (changesMask[139]) { data << float(ItemUpgradeHighTrinketWatermark); } - if (changesMask[134]) + if (changesMask[140]) { data << uint64(LootHistoryInstanceID); } - } - if (changesMask[136]) - { - if (changesMask[137]) + if (changesMask[142]) { data << uint8(RequiredMountCapabilityFlags); } } - if (changesMask[104]) + if (changesMask[102]) { data.WriteBits(QuestSession.has_value(), 1); + } + if (changesMask[134]) + { data.WriteBits(PetStable.has_value(), 1); + data.WriteBits(WalkInData.has_value(), 1); + data.WriteBits(DelveData.has_value(), 1); } data.FlushBits(); - if (changesMask[104]) + if (changesMask[102]) { - if (changesMask[118]) + if (changesMask[123]) { ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[120]) + if (changesMask[125]) { if (QuestSession.has_value()) { QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[119]) + if (changesMask[124]) { data << FrozenPerksVendorItem; } - if (changesMask[121]) + if (changesMask[126]) { Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[127]) + if (changesMask[132]) { data << DungeonScore; } - if (changesMask[135]) + } + if (changesMask[134]) + { + if (changesMask[141]) { if (PetStable.has_value()) { PetStable->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } + if (changesMask[143]) + { + if (WalkInData.has_value()) + { + WalkInData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + if (changesMask[144]) + { + if (DelveData.has_value()) + { + DelveData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } } - if (changesMask[138]) + if (changesMask[145]) { - for (uint32 i = 0; i < 227; ++i) + for (uint32 i = 0; i < 232; ++i) { - if (changesMask[139 + i]) + if (changesMask[146 + i]) { data << InvSlots[i]; } } } - if (changesMask[366]) + if (changesMask[378]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[367 + i]) + if (changesMask[379 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[369]) + if (changesMask[381]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[370 + i]) + if (changesMask[382 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[377 + i]) + if (changesMask[389 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[384 + i]) + if (changesMask[396 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[391 + i]) + if (changesMask[403 + i]) { data << float(ModHealingDonePercent[i]); } } } - if (changesMask[398]) + if (changesMask[410]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[399 + i]) + if (changesMask[411 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[402 + i]) + if (changesMask[414 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[405]) + if (changesMask[417]) { for (uint32 i = 0; i < 12; ++i) { - if (changesMask[406 + i]) + if (changesMask[418 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[418 + i]) + if (changesMask[430 + i]) { data << int64(BuybackTimestamp[i]); } } } - if (changesMask[430]) + if (changesMask[442]) { for (uint32 i = 0; i < 32; ++i) { - if (changesMask[431 + i]) + if (changesMask[443 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[463]) + if (changesMask[475]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[464 + i]) + if (changesMask[476 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[468]) + if (changesMask[480]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[469 + i]) + if (changesMask[481 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[471]) + if (changesMask[483]) { for (uint32 i = 0; i < 5; ++i) { - if (changesMask[472 + i]) + if (changesMask[484 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[477]) + if (changesMask[489]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[478 + i]) + if (changesMask[490 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[485]) + if (changesMask[497]) { - for (uint32 i = 0; i < 950; ++i) + for (uint32 i = 0; i < 960; ++i) { - if (changesMask[486 + i]) + if (changesMask[498 + i]) { data << uint64(QuestCompleted[i]); } } } - if (changesMask[1436]) + if (changesMask[1458]) { for (uint32 i = 0; i < 17; ++i) { - if (changesMask[1437 + i]) + if (changesMask[1459 + i]) { data << float(ItemUpgradeHighWatermark[i]); } @@ -5679,7 +6211,6 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(SortBagsRightToLeft); Base::ClearChangesMask(InsertItemsLeftToRight); Base::ClearChangesMask(HasPerksProgramPendingReward); - Base::ClearChangesMask(DataFlags); Base::ClearChangesMask(ResearchSites); Base::ClearChangesMask(ResearchSiteProgress); Base::ClearChangesMask(Research); @@ -5704,16 +6235,21 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(TaskQuests); Base::ClearChangesMask(DisabledSpells); Base::ClearChangesMask(PersonalCraftingOrderCounts); + Base::ClearChangesMask(NpcCraftingOrders); Base::ClearChangesMask(CategoryCooldownMods); Base::ClearChangesMask(WeeklySpellUses); Base::ClearChangesMask(TrackedCollectableSources); + Base::ClearChangesMask(CharacterDataElements); + Base::ClearChangesMask(AccountDataElements); Base::ClearChangesMask(PvpInfo); Base::ClearChangesMask(CharacterRestrictions); Base::ClearChangesMask(TraitConfigs); Base::ClearChangesMask(CraftingOrders); + Base::ClearChangesMask(AccountBankTabSettings); Base::ClearChangesMask(FarsightObject); Base::ClearChangesMask(SummonedBattlePetGUID); Base::ClearChangesMask(Coinage); + Base::ClearChangesMask(AccountBankCoinage); Base::ClearChangesMask(XP); Base::ClearChangesMask(NextLevelXP); Base::ClearChangesMask(TrialXP); @@ -5744,6 +6280,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(VersatilityBonus); Base::ClearChangesMask(PvpPowerDamage); Base::ClearChangesMask(PvpPowerHealing); + Base::ClearChangesMask(BitVectors); Base::ClearChangesMask(ModHealingDonePos); Base::ClearChangesMask(ModHealingPercent); Base::ClearChangesMask(ModPeriodicHealingDonePercent); @@ -5783,6 +6320,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(HonorNextLevel); Base::ClearChangesMask(PerksProgramCurrency); Base::ClearChangesMask(NumBankSlots); + Base::ClearChangesMask(NumAccountBankTabs); Base::ClearChangesMask(ResearchHistory); Base::ClearChangesMask(FrozenPerksVendorItem); Base::ClearChangesMask(Field_1410); @@ -5802,6 +6340,8 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(LootHistoryInstanceID); Base::ClearChangesMask(PetStable); Base::ClearChangesMask(RequiredMountCapabilityFlags); + Base::ClearChangesMask(WalkInData); + Base::ClearChangesMask(DelveData); Base::ClearChangesMask(InvSlots); Base::ClearChangesMask(RestInfo); Base::ClearChangesMask(ModDamageDonePos); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 0abb78c5711..43b1c60d9a9 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -74,8 +74,8 @@ struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask struct ItemMod : public IsUpdateFieldStructureTag { - int32 Value; uint8 Type; + int32 Value; void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const; @@ -129,7 +129,7 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<41> UpdateField<uint32, 0, 10> Durability; UpdateField<uint32, 0, 11> MaxDurability; UpdateField<uint32, 0, 12> CreatePlayedTime; - UpdateField<int32, 0, 13> Context; + UpdateField<uint8, 0, 13> Context; UpdateField<int64, 0, 14> CreateTime; UpdateField<uint64, 0, 15> ArtifactXP; UpdateField<uint8, 0, 16> ItemAppearanceModID; @@ -148,10 +148,10 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<41> void ClearChangesMask(); }; -struct ContainerData : public IsUpdateFieldStructureTag, public HasChangesMask<39> +struct ContainerData : public IsUpdateFieldStructureTag, public HasChangesMask<101> { UpdateField<uint32, 0, 1> NumSlots; - UpdateFieldArray<ObjectGuid, 36, 2, 3> Slots; + UpdateFieldArray<ObjectGuid, 98, 2, 3> Slots; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const; @@ -257,154 +257,159 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); } }; -struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<217> +struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<220> { - UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs; - DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells; - DynamicUpdateField<int32, 0, 3> WorldEffects; - DynamicUpdateField<ObjectGuid, 0, 4> ChannelObjects; - UpdateField<int32, 0, 5> DisplayID; + UpdateField<bool, 0, 1> Field_314; + UpdateField<std::vector<uint32>, 0, 2> StateWorldEffectIDs; + DynamicUpdateField<UF::PassiveSpellHistory, 0, 3> PassiveSpells; + DynamicUpdateField<int32, 0, 4> WorldEffects; + DynamicUpdateField<ObjectGuid, 0, 5> ChannelObjects; + UpdateField<int32, 0, 6> DisplayID; struct DisplayIDTag : ViewerDependentValueTag<int32> {}; - UpdateField<uint32, 0, 6> StateSpellVisualID; - UpdateField<uint32, 0, 7> StateAnimID; - UpdateField<uint32, 0, 8> StateAnimKitID; - UpdateField<uint32, 0, 9> StateWorldEffectsQuestObjectiveID; - UpdateField<int32, 0, 10> SpellOverrideNameID; - UpdateField<ObjectGuid, 0, 11> Charm; - UpdateField<ObjectGuid, 0, 12> Summon; - UpdateField<ObjectGuid, 0, 13> Critter; - UpdateField<ObjectGuid, 0, 14> CharmedBy; - UpdateField<ObjectGuid, 0, 15> SummonedBy; - UpdateField<ObjectGuid, 0, 16> CreatedBy; - UpdateField<ObjectGuid, 0, 17> DemonCreator; - UpdateField<ObjectGuid, 0, 18> LookAtControllerTarget; - UpdateField<ObjectGuid, 0, 19> Target; - UpdateField<ObjectGuid, 0, 20> BattlePetCompanionGUID; - UpdateField<uint64, 0, 21> BattlePetDBID; - UpdateField<UF::UnitChannel, 0, 22> ChannelData; - UpdateField<int8, 0, 23> SpellEmpowerStage; - UpdateField<uint32, 0, 24> SummonedByHomeRealm; - UpdateField<uint8, 0, 25> Race; - UpdateField<uint8, 0, 26> ClassId; - UpdateField<uint8, 0, 27> PlayerClassId; - UpdateField<uint8, 0, 28> Sex; - UpdateField<uint8, 0, 29> DisplayPower; - UpdateField<uint32, 0, 30> OverrideDisplayPowerID; - UpdateField<int64, 0, 31> Health; - UpdateField<int64, 32, 33> MaxHealth; - UpdateField<int32, 32, 34> Level; - UpdateField<int32, 32, 35> EffectiveLevel; - UpdateField<int32, 32, 36> ContentTuningID; - UpdateField<int32, 32, 37> ScalingLevelMin; - UpdateField<int32, 32, 38> ScalingLevelMax; - UpdateField<int32, 32, 39> ScalingLevelDelta; - UpdateField<int32, 32, 40> ScalingFactionGroup; - UpdateField<int32, 32, 41> FactionTemplate; + UpdateField<uint32, 0, 7> NpcFlags; + struct NpcFlagsTag : ViewerDependentValueTag<uint32> {}; + UpdateField<uint32, 0, 8> NpcFlags2; + struct NpcFlags2Tag : ViewerDependentValueTag<uint32> {}; + UpdateField<uint32, 0, 9> StateSpellVisualID; + UpdateField<uint32, 0, 10> StateAnimID; + UpdateField<uint32, 0, 11> StateAnimKitID; + UpdateField<uint32, 0, 12> StateWorldEffectsQuestObjectiveID; + UpdateField<int32, 0, 13> SpellOverrideNameID; + UpdateField<ObjectGuid, 0, 14> Charm; + UpdateField<ObjectGuid, 0, 15> Summon; + UpdateField<ObjectGuid, 0, 16> Critter; + UpdateField<ObjectGuid, 0, 17> CharmedBy; + UpdateField<ObjectGuid, 0, 18> SummonedBy; + UpdateField<ObjectGuid, 0, 19> CreatedBy; + UpdateField<ObjectGuid, 0, 20> DemonCreator; + UpdateField<ObjectGuid, 0, 21> LookAtControllerTarget; + UpdateField<ObjectGuid, 0, 22> Target; + UpdateField<ObjectGuid, 0, 23> BattlePetCompanionGUID; + UpdateField<uint64, 0, 24> BattlePetDBID; + UpdateField<UF::UnitChannel, 0, 25> ChannelData; + UpdateField<int8, 0, 26> SpellEmpowerStage; + UpdateField<uint32, 0, 27> SummonedByHomeRealm; + UpdateField<uint8, 0, 28> Race; + UpdateField<uint8, 0, 29> ClassId; + UpdateField<uint8, 0, 30> PlayerClassId; + UpdateField<uint8, 0, 31> Sex; + UpdateField<uint8, 32, 33> DisplayPower; + UpdateField<uint32, 32, 34> OverrideDisplayPowerID; + UpdateField<int64, 32, 35> Health; + UpdateField<int64, 32, 36> MaxHealth; + UpdateField<int32, 32, 37> Level; + UpdateField<int32, 32, 38> EffectiveLevel; + UpdateField<int32, 32, 39> ContentTuningID; + UpdateField<int32, 32, 40> ScalingLevelMin; + UpdateField<int32, 32, 41> ScalingLevelMax; + UpdateField<int32, 32, 42> ScalingLevelDelta; + UpdateField<int32, 32, 43> ScalingFactionGroup; + UpdateField<int32, 32, 44> FactionTemplate; struct FactionTemplateTag : ViewerDependentValueTag<int32> {}; - UpdateField<uint32, 32, 42> Flags; + UpdateField<uint32, 32, 45> Flags; struct FlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateField<uint32, 32, 43> Flags2; + UpdateField<uint32, 32, 46> Flags2; struct Flags2Tag : ViewerDependentValueTag<uint32> {}; - UpdateField<uint32, 32, 44> Flags3; + UpdateField<uint32, 32, 47> Flags3; struct Flags3Tag : ViewerDependentValueTag<uint32> {}; - UpdateField<uint32, 32, 45> AuraState; + UpdateField<uint32, 32, 48> AuraState; struct AuraStateTag : ViewerDependentValueTag<uint32> {}; - UpdateField<uint32, 32, 46> RangedAttackRoundBaseTime; - UpdateField<float, 32, 47> BoundingRadius; - UpdateField<float, 32, 48> CombatReach; - UpdateField<float, 32, 49> DisplayScale; - UpdateField<int32, 32, 50> CreatureFamily; - UpdateField<int32, 32, 51> CreatureType; - UpdateField<int32, 32, 52> NativeDisplayID; - UpdateField<float, 32, 53> NativeXDisplayScale; - UpdateField<int32, 32, 54> MountDisplayID; - UpdateField<int32, 32, 55> CosmeticMountDisplayID; - UpdateField<float, 32, 56> MinDamage; - UpdateField<float, 32, 57> MaxDamage; - UpdateField<float, 32, 58> MinOffHandDamage; - UpdateField<float, 32, 59> MaxOffHandDamage; - UpdateField<uint8, 32, 60> StandState; - UpdateField<uint8, 32, 61> PetTalentPoints; - UpdateField<uint8, 32, 62> VisFlags; - UpdateField<uint8, 32, 63> AnimTier; - UpdateField<uint32, 64, 65> PetNumber; - UpdateField<uint32, 64, 66> PetNameTimestamp; - UpdateField<uint32, 64, 67> PetExperience; - UpdateField<uint32, 64, 68> PetNextLevelExperience; - UpdateField<float, 64, 69> ModCastingSpeed; - UpdateField<float, 64, 70> ModCastingSpeedNeg; - UpdateField<float, 64, 71> ModSpellHaste; - UpdateField<float, 64, 72> ModHaste; - UpdateField<float, 64, 73> ModRangedHaste; - UpdateField<float, 64, 74> ModHasteRegen; - UpdateField<float, 64, 75> ModTimeRate; - UpdateField<int32, 64, 76> CreatedBySpell; - UpdateField<int32, 64, 77> EmoteState; - UpdateField<int32, 64, 78> BaseMana; - UpdateField<int32, 64, 79> BaseHealth; - UpdateField<uint8, 64, 80> SheatheState; - UpdateField<uint8, 64, 81> PvpFlags; + UpdateField<uint32, 32, 49> RangedAttackRoundBaseTime; + UpdateField<float, 32, 50> BoundingRadius; + UpdateField<float, 32, 51> CombatReach; + UpdateField<float, 32, 52> DisplayScale; + UpdateField<int32, 32, 53> CreatureFamily; + UpdateField<int32, 32, 54> CreatureType; + UpdateField<int32, 32, 55> NativeDisplayID; + UpdateField<float, 32, 56> NativeXDisplayScale; + UpdateField<int32, 32, 57> MountDisplayID; + UpdateField<int32, 32, 58> CosmeticMountDisplayID; + UpdateField<float, 32, 59> MinDamage; + UpdateField<float, 32, 60> MaxDamage; + UpdateField<float, 32, 61> MinOffHandDamage; + UpdateField<float, 32, 62> MaxOffHandDamage; + UpdateField<uint8, 32, 63> StandState; + UpdateField<uint8, 64, 65> PetTalentPoints; + UpdateField<uint8, 64, 66> VisFlags; + UpdateField<uint8, 64, 67> AnimTier; + UpdateField<uint32, 64, 68> PetNumber; + UpdateField<uint32, 64, 69> PetNameTimestamp; + UpdateField<uint32, 64, 70> PetExperience; + UpdateField<uint32, 64, 71> PetNextLevelExperience; + UpdateField<float, 64, 72> ModCastingSpeed; + UpdateField<float, 64, 73> ModCastingSpeedNeg; + UpdateField<float, 64, 74> ModSpellHaste; + UpdateField<float, 64, 75> ModHaste; + UpdateField<float, 64, 76> ModRangedHaste; + UpdateField<float, 64, 77> ModHasteRegen; + UpdateField<float, 64, 78> ModTimeRate; + UpdateField<int32, 64, 79> CreatedBySpell; + UpdateField<int32, 64, 80> EmoteState; + UpdateField<int32, 64, 81> BaseMana; + UpdateField<int32, 64, 82> BaseHealth; + UpdateField<uint8, 64, 83> SheatheState; + UpdateField<uint8, 64, 84> PvpFlags; struct PvpFlagsTag : ViewerDependentValueTag<uint8> {}; - UpdateField<uint8, 64, 82> PetFlags; - UpdateField<uint8, 64, 83> ShapeshiftForm; - UpdateField<int32, 64, 84> AttackPower; - UpdateField<int32, 64, 85> AttackPowerModPos; - UpdateField<int32, 64, 86> AttackPowerModNeg; - UpdateField<float, 64, 87> AttackPowerMultiplier; - UpdateField<int32, 64, 88> AttackPowerModSupport; - UpdateField<int32, 64, 89> RangedAttackPower; - UpdateField<int32, 64, 90> RangedAttackPowerModPos; - UpdateField<int32, 64, 91> RangedAttackPowerModNeg; - UpdateField<float, 64, 92> RangedAttackPowerMultiplier; - UpdateField<int32, 64, 93> RangedAttackPowerModSupport; - UpdateField<int32, 64, 94> MainHandWeaponAttackPower; - UpdateField<int32, 64, 95> OffHandWeaponAttackPower; - UpdateField<int32, 96, 97> RangedWeaponAttackPower; - UpdateField<int32, 96, 98> SetAttackSpeedAura; - UpdateField<float, 96, 99> Lifesteal; - UpdateField<float, 96, 100> MinRangedDamage; - UpdateField<float, 96, 101> MaxRangedDamage; - UpdateField<float, 96, 102> ManaCostMultiplier; - UpdateField<float, 96, 103> MaxHealthModifier; - UpdateField<float, 96, 104> HoverHeight; - UpdateField<int32, 96, 105> MinItemLevelCutoff; - UpdateField<int32, 96, 106> MinItemLevel; - UpdateField<int32, 96, 107> MaxItemLevel; - UpdateField<int32, 96, 108> AzeriteItemLevel; - UpdateField<int32, 96, 109> WildBattlePetLevel; - UpdateField<int32, 96, 110> BattlePetCompanionExperience; - UpdateField<uint32, 96, 111> BattlePetCompanionNameTimestamp; - UpdateField<int32, 96, 112> InteractSpellID; + UpdateField<uint8, 64, 85> PetFlags; + UpdateField<uint8, 64, 86> ShapeshiftForm; + UpdateField<int32, 64, 87> AttackPower; + UpdateField<int32, 64, 88> AttackPowerModPos; + UpdateField<int32, 64, 89> AttackPowerModNeg; + UpdateField<float, 64, 90> AttackPowerMultiplier; + UpdateField<int32, 64, 91> AttackPowerModSupport; + UpdateField<int32, 64, 92> RangedAttackPower; + UpdateField<int32, 64, 93> RangedAttackPowerModPos; + UpdateField<int32, 64, 94> RangedAttackPowerModNeg; + UpdateField<float, 64, 95> RangedAttackPowerMultiplier; + UpdateField<int32, 96, 97> RangedAttackPowerModSupport; + UpdateField<int32, 96, 98> MainHandWeaponAttackPower; + UpdateField<int32, 96, 99> OffHandWeaponAttackPower; + UpdateField<int32, 96, 100> RangedWeaponAttackPower; + UpdateField<int32, 96, 101> SetAttackSpeedAura; + UpdateField<float, 96, 102> Lifesteal; + UpdateField<float, 96, 103> MinRangedDamage; + UpdateField<float, 96, 104> MaxRangedDamage; + UpdateField<float, 96, 105> ManaCostMultiplier; + UpdateField<float, 96, 106> MaxHealthModifier; + UpdateField<float, 96, 107> HoverHeight; + UpdateField<int32, 96, 108> MinItemLevelCutoff; + UpdateField<int32, 96, 109> MinItemLevel; + UpdateField<int32, 96, 110> MaxItemLevel; + UpdateField<int32, 96, 111> AzeriteItemLevel; + UpdateField<int32, 96, 112> WildBattlePetLevel; + UpdateField<int32, 96, 113> BattlePetCompanionExperience; + UpdateField<uint32, 96, 114> BattlePetCompanionNameTimestamp; + UpdateField<int32, 96, 115> InteractSpellID; struct InteractSpellIDTag : ViewerDependentValueTag<int32> {}; - UpdateField<int32, 96, 113> ScaleDuration; - UpdateField<int32, 96, 114> LooksLikeMountID; - UpdateField<int32, 96, 115> LooksLikeCreatureID; - UpdateField<int32, 96, 116> LookAtControllerID; - UpdateField<int32, 96, 117> PerksVendorItemID; - UpdateField<int32, 96, 118> TaxiNodesID; - UpdateField<ObjectGuid, 96, 119> GuildGUID; - UpdateField<int32, 96, 120> FlightCapabilityID; - UpdateField<float, 96, 121> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use - UpdateField<uint32, 96, 122> Field_308; - UpdateField<uint32, 96, 123> Field_30C; - UpdateField<uint32, 96, 124> SilencedSchoolMask; - UpdateField<uint32, 96, 125> CurrentAreaID; - UpdateField<ObjectGuid, 96, 126> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object - UpdateFieldArray<uint32, 2, 127, 128> NpcFlags; - struct NpcFlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateFieldArray<int32, 10, 130, 131> Power; - UpdateFieldArray<int32, 10, 130, 141> MaxPower; - UpdateFieldArray<float, 10, 130, 151> PowerRegenFlatModifier; - UpdateFieldArray<float, 10, 130, 161> PowerRegenInterruptedFlatModifier; - UpdateFieldArray<UF::VisibleItem, 3, 171, 172> VirtualItems; - UpdateFieldArray<uint32, 2, 175, 176> AttackRoundBaseTime; - UpdateFieldArray<int32, 4, 178, 179> Stats; - UpdateFieldArray<int32, 4, 178, 183> StatPosBuff; - UpdateFieldArray<int32, 4, 178, 187> StatNegBuff; - UpdateFieldArray<int32, 4, 178, 191> StatSupportBuff; - UpdateFieldArray<int32, 7, 195, 196> Resistances; - UpdateFieldArray<int32, 7, 195, 203> BonusResistanceMods; - UpdateFieldArray<int32, 7, 195, 210> ManaCostModifier; + UpdateField<int32, 96, 116> ScaleDuration; + UpdateField<int32, 96, 117> LooksLikeMountID; + UpdateField<int32, 96, 118> LooksLikeCreatureID; + UpdateField<int32, 96, 119> LookAtControllerID; + UpdateField<int32, 96, 120> PerksVendorItemID; + UpdateField<int32, 96, 121> TaxiNodesID; + UpdateField<ObjectGuid, 96, 122> GuildGUID; + UpdateField<int32, 96, 123> FlightCapabilityID; + UpdateField<float, 96, 124> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use + UpdateField<uint32, 96, 125> MaxHealthModifierFlatNeg; + UpdateField<uint32, 96, 126> MaxHealthModifierFlatPos; + UpdateField<uint32, 96, 127> SilencedSchoolMask; + UpdateField<uint32, 128, 129> CurrentAreaID; + UpdateField<float, 128, 130> Field_31C; + UpdateField<float, 128, 131> Field_320; // Soft targeting related? When UnitFlags3 & 0x40000000 is set, increases some range check using CombatReach by this amount + UpdateField<ObjectGuid, 128, 132> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object + UpdateFieldArray<int32, 10, 133, 134> Power; + UpdateFieldArray<int32, 10, 133, 144> MaxPower; + UpdateFieldArray<float, 10, 133, 154> PowerRegenFlatModifier; + UpdateFieldArray<float, 10, 133, 164> PowerRegenInterruptedFlatModifier; + UpdateFieldArray<UF::VisibleItem, 3, 174, 175> VirtualItems; + UpdateFieldArray<uint32, 2, 178, 179> AttackRoundBaseTime; + UpdateFieldArray<int32, 4, 181, 182> Stats; + UpdateFieldArray<int32, 4, 181, 186> StatPosBuff; + UpdateFieldArray<int32, 4, 181, 190> StatNegBuff; + UpdateFieldArray<int32, 4, 181, 194> StatSupportBuff; + UpdateFieldArray<int32, 7, 198, 199> Resistances; + UpdateFieldArray<int32, 7, 198, 206> BonusResistanceMods; + UpdateFieldArray<int32, 7, 198, 213> 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; @@ -574,6 +579,27 @@ struct SkillInfo : public IsUpdateFieldStructureTag, public HasChangesMask<1793> void ClearChangesMask(); }; +struct BitVectors : public IsUpdateFieldStructureTag, public HasChangesMask<1> +{ + UpdateFieldArray<DynamicUpdateFieldBase<uint64>, 11, 0, -1> Values; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct PlayerDataElement : public IsUpdateFieldStructureTag +{ + uint32 Type; + float FloatValue; + int64 Int64Value; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + bool operator==(PlayerDataElement const& right) const; + bool operator!=(PlayerDataElement const& right) const { return !(*this == right); } +}; + struct RestInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3> { UpdateField<uint32, 0, 1> Threshold; @@ -743,17 +769,30 @@ struct TraitEntry : public IsUpdateFieldStructureTag bool operator!=(TraitEntry const& right) const { return !(*this == right); } }; -struct TraitConfig : public IsUpdateFieldStructureTag, public HasChangesMask<12> +struct TraitSubTreeCache : public IsUpdateFieldStructureTag +{ + std::vector<UF::TraitEntry> Entries; + int32 TraitSubTreeID; + uint32 Active; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + bool operator==(TraitSubTreeCache const& right) const; + bool operator!=(TraitSubTreeCache const& right) const { return !(*this == right); } +}; + +struct TraitConfig : public IsUpdateFieldStructureTag, public HasChangesMask<14> { DynamicUpdateField<UF::TraitEntry, 0, 1> Entries; - UpdateField<int32, 0, 2> ID; - UpdateField<std::string, 0, 3> Name; - UpdateField<int32, 4, 5> Type; - UpdateField<int32, 4, 6> SkillLineID; - UpdateField<int32, 4, 7> ChrSpecializationID; - UpdateField<int32, 8, 9> CombatConfigFlags; - UpdateField<int32, 8, 10> LocalIdentifier; - UpdateField<int32, 8, 11> TraitSystemID; + DynamicUpdateField<UF::TraitSubTreeCache, 0, 2> SubTrees; + UpdateField<int32, 0, 3> ID; + UpdateField<std::string, 4, 5> Name; + UpdateField<int32, 4, 6> Type; + UpdateField<int32, 4, 7> SkillLineID; + UpdateField<int32, 8, 9> ChrSpecializationID; + UpdateField<int32, 8, 10> CombatConfigFlags; + UpdateField<int32, 8, 11> LocalIdentifier; + UpdateField<int32, 12, 13> TraitSystemID; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; @@ -775,27 +814,49 @@ struct CraftingOrderItem : public IsUpdateFieldStructureTag, public HasChangesMa void ClearChangesMask(); }; -struct CraftingOrderData : public IsUpdateFieldStructureTag, public HasChangesMask<24> +struct CraftingOrderCustomer : public IsUpdateFieldStructureTag, public HasChangesMask<2> +{ + UpdateField<ObjectGuid, -1, 0> CustomerGUID; + UpdateField<ObjectGuid, -1, 1> CustomerAccountGUID; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct CraftingOrderNpcCustomer : public IsUpdateFieldStructureTag, public HasChangesMask<2> +{ + UpdateField<int64, -1, 0> NpcCraftingOrderCustomerID; + UpdateField<int32, -1, 1> Field_8; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct CraftingOrderData : public IsUpdateFieldStructureTag, public HasChangesMask<26> { DynamicUpdateField<UF::CraftingOrderItem, 0, 1> Reagents; UpdateField<int32, 0, 2> Field_0; UpdateField<uint64, 0, 3> OrderID; UpdateField<int32, 0, 4> SkillLineAbilityID; - UpdateField<uint8, 5, 6> OrderState; - UpdateField<uint8, 5, 7> OrderType; - UpdateField<uint8, 5, 8> MinQuality; - UpdateField<int64, 5, 9> ExpirationTime; - UpdateField<int64, 10, 11> ClaimEndTime; - UpdateField<int64, 10, 12> TipAmount; - UpdateField<int64, 10, 13> ConsortiumCut; - UpdateField<uint32, 10, 14> Flags; - UpdateField<ObjectGuid, 15, 16> CustomerGUID; - UpdateField<ObjectGuid, 15, 17> CustomerAccountGUID; - UpdateField<ObjectGuid, 15, 18> CrafterGUID; - UpdateField<ObjectGuid, 15, 19> PersonalCrafterGUID; - UpdateField<std::string, 20, 21> CustomerNotes; - OptionalUpdateField<UF::CraftingOrderItem, 20, 22> OutputItem; - OptionalUpdateField<WorldPackets::Item::ItemInstance, 20, 23> OutputItemData; + UpdateField<uint8, 0, 5> OrderState; + UpdateField<uint8, 6, 7> OrderType; + UpdateField<uint8, 6, 8> MinQuality; + UpdateField<int64, 6, 9> ExpirationTime; + UpdateField<int64, 6, 10> ClaimEndTime; + UpdateField<int64, 6, 11> TipAmount; + UpdateField<int64, 12, 13> ConsortiumCut; + UpdateField<uint32, 12, 14> Flags; + UpdateField<ObjectGuid, 12, 15> CrafterGUID; + UpdateField<ObjectGuid, 12, 16> PersonalCrafterGUID; + UpdateField<int32, 12, 17> NpcCraftingOrderSetID; + UpdateField<int32, 18, 19> NpcTreasureID; + UpdateField<std::string, 18, 20> CustomerNotes; + OptionalUpdateField<UF::CraftingOrderCustomer, 18, 21> Customer; + OptionalUpdateField<UF::CraftingOrderNpcCustomer, 18, 22> NpcCustomer; + OptionalUpdateField<UF::CraftingOrderItem, 18, 23> OutputItem; + OptionalUpdateField<WorldPackets::Item::ItemInstance, 24, 25> OutputItemData; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; @@ -824,6 +885,18 @@ struct PersonalCraftingOrderCount : public IsUpdateFieldStructureTag, public Has void ClearChangesMask(); }; +struct NPCCraftingOrderInfo : public IsUpdateFieldStructureTag, public HasChangesMask<4> +{ + UpdateField<uint64, -1, 0> Field_0; + UpdateField<int32, -1, 1> Field_8; + UpdateField<int32, -1, 2> Field_C; + UpdateField<int32, -1, 3> Field_10; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + struct CategoryCooldownMod : public IsUpdateFieldStructureTag { int32 SpellCategoryID; @@ -882,6 +955,46 @@ struct CollectableSourceTrackedData : public IsUpdateFieldStructureTag, public H void ClearChangesMask(); }; +struct BankTabSettings : public IsUpdateFieldStructureTag, public HasChangesMask<4> +{ + UpdateField<std::string, -1, 0> Name; + UpdateField<std::string, -1, 1> Icon; + UpdateField<std::string, -1, 2> Description; + UpdateField<int32, -1, 3> DepositFlags; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct WalkInData : public IsUpdateFieldStructureTag +{ + int32 MapID; + int64 Field_8; + uint32 Type; + ObjectGuid Field_18; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + bool operator==(WalkInData const& right) const; + bool operator!=(WalkInData const& right) const { return !(*this == right); } +}; + +struct DelveData : public IsUpdateFieldStructureTag +{ + std::vector<ObjectGuid> Owners; + int32 Field_0; + int64 Field_8; + int32 Field_10; + int32 SpellID; + uint32 Started; // Restricts rewards to players in m_owners if set to true. Intended to prevent rewarwding players that join in-progress delve? + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + bool operator==(DelveData const& right) const; + bool operator!=(DelveData const& right) const { return !(*this == right); } +}; + struct Research : public IsUpdateFieldStructureTag { int16 ResearchProjectID; @@ -892,7 +1005,7 @@ struct Research : public IsUpdateFieldStructureTag bool operator!=(Research const& right) const { return !(*this == right); } }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1454> +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1476> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; UpdateField<bool, 0, 2> BackpackSellJunkDisabled; @@ -900,146 +1013,154 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<bool, 0, 4> SortBagsRightToLeft; UpdateField<bool, 0, 5> InsertItemsLeftToRight; UpdateField<bool, 0, 6> HasPerksProgramPendingReward; - UpdateFieldArray<DynamicUpdateFieldBase<uint64>, 9, 36, 37> DataFlags; - UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 38, 39> ResearchSites; - UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 40, 41> ResearchSiteProgress; - UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 42, 43> Research; + UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 40, 41> ResearchSites; + UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 42, 43> ResearchSiteProgress; + UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 44, 45> Research; DynamicUpdateField<uint64, 0, 7> KnownTitles; - DynamicUpdateField<int32, 0, 9> DailyQuestsCompleted; - DynamicUpdateField<int32, 0, 10> AvailableQuestLineXQuestIDs; - DynamicUpdateField<int32, 0, 11> Heirlooms; - DynamicUpdateField<uint32, 0, 12> HeirloomFlags; - DynamicUpdateField<int32, 0, 13> Toys; - DynamicUpdateField<uint32, 0, 14> ToyFlags; - DynamicUpdateField<uint32, 0, 15> Transmog; - DynamicUpdateField<int32, 0, 16> ConditionalTransmog; - DynamicUpdateField<int32, 0, 17> SelfResSpells; - DynamicUpdateField<uint32, 0, 18> RuneforgePowers; - DynamicUpdateField<uint32, 0, 19> TransmogIllusions; - DynamicUpdateField<UF::SpellPctModByLabel, 0, 21> SpellPctModByLabel; - DynamicUpdateField<UF::SpellFlatModByLabel, 0, 22> SpellFlatModByLabel; - DynamicUpdateField<UF::MawPower, 0, 23> MawPowers; - DynamicUpdateField<UF::MultiFloorExplore, 0, 24> MultiFloorExploration; - DynamicUpdateField<UF::RecipeProgressionInfo, 0, 25> RecipeProgression; - DynamicUpdateField<UF::ReplayedQuest, 0, 26> ReplayedQuests; - DynamicUpdateField<UF::QuestLog, 0, 27> TaskQuests; - DynamicUpdateField<int32, 0, 28> DisabledSpells; - DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 31> PersonalCraftingOrderCounts; - DynamicUpdateField<UF::CategoryCooldownMod, 32, 33> CategoryCooldownMods; - DynamicUpdateField<UF::WeeklySpellUse, 32, 34> WeeklySpellUses; - DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 35> TrackedCollectableSources; - DynamicUpdateField<UF::PVPInfo, 0, 8> PvpInfo; - DynamicUpdateField<UF::CharacterRestriction, 0, 20> CharacterRestrictions; - DynamicUpdateField<UF::TraitConfig, 0, 29> TraitConfigs; - DynamicUpdateField<UF::CraftingOrder, 0, 30> CraftingOrders; - UpdateField<ObjectGuid, 32, 44> FarsightObject; - UpdateField<ObjectGuid, 32, 45> SummonedBattlePetGUID; - UpdateField<uint64, 32, 46> Coinage; - UpdateField<int32, 32, 47> XP; - UpdateField<int32, 32, 48> NextLevelXP; - UpdateField<int32, 32, 49> TrialXP; - UpdateField<UF::SkillInfo, 32, 50> Skill; - UpdateField<int32, 32, 51> CharacterPoints; - UpdateField<int32, 32, 52> MaxTalentTiers; - UpdateField<uint32, 32, 53> TrackCreatureMask; - UpdateField<float, 32, 54> MainhandExpertise; - UpdateField<float, 32, 55> OffhandExpertise; - UpdateField<float, 32, 56> RangedExpertise; - UpdateField<float, 32, 57> CombatRatingExpertise; - UpdateField<float, 32, 58> BlockPercentage; - UpdateField<float, 32, 59> DodgePercentage; - UpdateField<float, 32, 60> DodgePercentageFromAttribute; - UpdateField<float, 32, 61> ParryPercentage; - UpdateField<float, 32, 62> ParryPercentageFromAttribute; - UpdateField<float, 32, 63> CritPercentage; - UpdateField<float, 32, 64> RangedCritPercentage; - UpdateField<float, 32, 65> OffhandCritPercentage; - UpdateField<float, 32, 66> SpellCritPercentage; - UpdateField<int32, 32, 67> ShieldBlock; - UpdateField<float, 32, 68> ShieldBlockCritPercentage; - UpdateField<float, 32, 69> Mastery; - UpdateField<float, 32, 70> Speed; - UpdateField<float, 32, 71> Avoidance; - UpdateField<float, 72, 73> Sturdiness; - UpdateField<int32, 72, 74> Versatility; - UpdateField<float, 72, 75> VersatilityBonus; - UpdateField<float, 72, 76> PvpPowerDamage; - UpdateField<float, 72, 77> PvpPowerHealing; - UpdateField<int32, 72, 78> ModHealingDonePos; - UpdateField<float, 72, 79> ModHealingPercent; - UpdateField<float, 72, 80> ModPeriodicHealingDonePercent; - UpdateField<float, 72, 81> ModSpellPowerPercent; - UpdateField<float, 72, 82> ModResiliencePercent; - UpdateField<float, 72, 83> OverrideSpellPowerByAPPercent; - UpdateField<float, 72, 84> OverrideAPBySpellPowerPercent; - UpdateField<int32, 72, 85> ModTargetResistance; - UpdateField<int32, 72, 86> ModTargetPhysicalResistance; - UpdateField<uint32, 72, 87> LocalFlags; - UpdateField<uint8, 72, 88> GrantableLevels; - UpdateField<uint8, 72, 89> MultiActionBars; - UpdateField<uint8, 72, 90> LifetimeMaxRank; - UpdateField<uint8, 72, 91> NumRespecs; - UpdateField<uint32, 72, 92> PvpMedals; - UpdateField<uint16, 72, 93> TodayHonorableKills; - UpdateField<uint16, 72, 94> YesterdayHonorableKills; - UpdateField<uint32, 72, 95> LifetimeHonorableKills; - UpdateField<int32, 72, 96> WatchedFactionIndex; - UpdateField<int32, 72, 97> MaxLevel; - UpdateField<int32, 72, 98> ScalingPlayerLevelDelta; - UpdateField<int32, 72, 99> MaxCreatureScalingLevel; - UpdateField<int32, 72, 100> PetSpellPower; - UpdateField<float, 72, 101> UiHitModifier; - UpdateField<float, 72, 102> UiSpellHitModifier; - UpdateField<int32, 72, 103> HomeRealmTimeOffset; - UpdateField<float, 104, 105> ModPetHaste; - UpdateField<int8, 104, 106> JailersTowerLevelMax; - UpdateField<int8, 104, 107> JailersTowerLevel; - UpdateField<uint8, 104, 108> LocalRegenFlags; - UpdateField<uint8, 104, 109> AuraVision; - UpdateField<uint8, 104, 110> NumBackpackSlots; - UpdateField<int32, 104, 111> OverrideSpellsID; - UpdateField<uint16, 104, 112> LootSpecID; - UpdateField<uint32, 104, 113> OverrideZonePVPType; - UpdateField<int32, 104, 114> Honor; - UpdateField<int32, 104, 115> HonorNextLevel; - UpdateField<int32, 104, 116> PerksProgramCurrency; - UpdateField<uint8, 104, 117> NumBankSlots; - UpdateField<UF::ResearchHistory, 104, 118> ResearchHistory; - UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 104, 119> FrozenPerksVendorItem; - UpdateField<UF::ActivePlayerUnk901, 104, 121> Field_1410; - OptionalUpdateField<UF::QuestSession, 104, 120> QuestSession; - UpdateField<int32, 104, 122> UiChromieTimeExpansionID; - UpdateField<int32, 104, 123> TimerunningSeasonID; - UpdateField<int32, 104, 124> TransportServerTime; - UpdateField<uint32, 104, 125> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField<int16, 104, 126> DEBUGSoulbindConduitRank; - UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 104, 127> DungeonScore; - UpdateField<uint32, 104, 128> ActiveCombatTraitConfigID; - UpdateField<int32, 104, 129> ItemUpgradeHighOnehandWeaponItemID; - UpdateField<int32, 104, 130> ItemUpgradeHighFingerItemID; - UpdateField<float, 104, 131> ItemUpgradeHighFingerWatermark; - UpdateField<int32, 104, 132> ItemUpgradeHighTrinketItemID; - UpdateField<float, 104, 133> ItemUpgradeHighTrinketWatermark; - UpdateField<uint64, 104, 134> LootHistoryInstanceID; - OptionalUpdateField<UF::StableInfo, 104, 135> PetStable; - UpdateField<uint8, 136, 137> RequiredMountCapabilityFlags; - UpdateFieldArray<ObjectGuid, 227, 138, 139> InvSlots; - UpdateFieldArray<UF::RestInfo, 2, 366, 367> RestInfo; - UpdateFieldArray<int32, 7, 369, 370> ModDamageDonePos; - UpdateFieldArray<int32, 7, 369, 377> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 369, 384> ModDamageDonePercent; - UpdateFieldArray<float, 7, 369, 391> ModHealingDonePercent; - UpdateFieldArray<float, 3, 398, 399> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 398, 402> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 405, 406> BuybackPrice; - UpdateFieldArray<int64, 12, 405, 418> BuybackTimestamp; - UpdateFieldArray<int32, 32, 430, 431> CombatRatings; - UpdateFieldArray<uint32, 4, 463, 464> NoReagentCostMask; - UpdateFieldArray<int32, 2, 468, 469> ProfessionSkillLine; - UpdateFieldArray<uint32, 5, 471, 472> BagSlotFlags; - UpdateFieldArray<uint32, 7, 477, 478> BankBagSlotFlags; - UpdateFieldArray<uint64, 950, 485, 486> QuestCompleted; - UpdateFieldArray<float, 17, 1436, 1437> ItemUpgradeHighWatermark; + DynamicUpdateField<int32, 0, 11> DailyQuestsCompleted; + DynamicUpdateField<int32, 0, 12> AvailableQuestLineXQuestIDs; + DynamicUpdateField<int32, 0, 13> Heirlooms; + DynamicUpdateField<uint32, 0, 14> HeirloomFlags; + DynamicUpdateField<int32, 0, 15> Toys; + DynamicUpdateField<uint32, 0, 16> ToyFlags; + DynamicUpdateField<uint32, 0, 17> Transmog; + DynamicUpdateField<int32, 0, 18> ConditionalTransmog; + DynamicUpdateField<int32, 0, 19> SelfResSpells; + DynamicUpdateField<uint32, 0, 20> RuneforgePowers; + DynamicUpdateField<uint32, 0, 21> TransmogIllusions; + DynamicUpdateField<UF::SpellPctModByLabel, 0, 23> SpellPctModByLabel; + DynamicUpdateField<UF::SpellFlatModByLabel, 0, 24> SpellFlatModByLabel; + DynamicUpdateField<UF::MawPower, 0, 25> MawPowers; + DynamicUpdateField<UF::MultiFloorExplore, 0, 26> MultiFloorExploration; + DynamicUpdateField<UF::RecipeProgressionInfo, 0, 27> RecipeProgression; + DynamicUpdateField<UF::ReplayedQuest, 0, 28> ReplayedQuests; + DynamicUpdateField<UF::QuestLog, 0, 29> TaskQuests; + DynamicUpdateField<int32, 0, 30> DisabledSpells; + DynamicUpdateField<UF::PersonalCraftingOrderCount, 32, 34> PersonalCraftingOrderCounts; + DynamicUpdateField<UF::NPCCraftingOrderInfo, 32, 35> NpcCraftingOrders; + DynamicUpdateField<UF::CategoryCooldownMod, 32, 36> CategoryCooldownMods; + DynamicUpdateField<UF::WeeklySpellUse, 32, 37> WeeklySpellUses; + DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 38> TrackedCollectableSources; + DynamicUpdateField<UF::PlayerDataElement, 0, 8> CharacterDataElements; + DynamicUpdateField<UF::PlayerDataElement, 0, 9> AccountDataElements; + DynamicUpdateField<UF::PVPInfo, 0, 10> PvpInfo; + DynamicUpdateField<UF::CharacterRestriction, 0, 22> CharacterRestrictions; + DynamicUpdateField<UF::TraitConfig, 0, 31> TraitConfigs; + DynamicUpdateField<UF::CraftingOrder, 32, 33> CraftingOrders; + DynamicUpdateField<UF::BankTabSettings, 32, 39> AccountBankTabSettings; + UpdateField<ObjectGuid, 32, 46> FarsightObject; + UpdateField<ObjectGuid, 32, 47> SummonedBattlePetGUID; + UpdateField<uint64, 32, 48> Coinage; + UpdateField<uint64, 32, 49> AccountBankCoinage; + UpdateField<int32, 32, 50> XP; + UpdateField<int32, 32, 51> NextLevelXP; + UpdateField<int32, 32, 52> TrialXP; + UpdateField<UF::SkillInfo, 32, 53> Skill; + UpdateField<int32, 32, 54> CharacterPoints; + UpdateField<int32, 32, 55> MaxTalentTiers; + UpdateField<uint32, 32, 56> TrackCreatureMask; + UpdateField<float, 32, 57> MainhandExpertise; + UpdateField<float, 32, 58> OffhandExpertise; + UpdateField<float, 32, 59> RangedExpertise; + UpdateField<float, 32, 60> CombatRatingExpertise; + UpdateField<float, 32, 61> BlockPercentage; + UpdateField<float, 32, 62> DodgePercentage; + UpdateField<float, 32, 63> DodgePercentageFromAttribute; + UpdateField<float, 32, 64> ParryPercentage; + UpdateField<float, 32, 65> ParryPercentageFromAttribute; + UpdateField<float, 32, 66> CritPercentage; + UpdateField<float, 32, 67> RangedCritPercentage; + UpdateField<float, 32, 68> OffhandCritPercentage; + UpdateField<float, 32, 69> SpellCritPercentage; + UpdateField<int32, 70, 71> ShieldBlock; + UpdateField<float, 70, 72> ShieldBlockCritPercentage; + UpdateField<float, 70, 73> Mastery; + UpdateField<float, 70, 74> Speed; + UpdateField<float, 70, 75> Avoidance; + UpdateField<float, 70, 76> Sturdiness; + UpdateField<int32, 70, 77> Versatility; + UpdateField<float, 70, 78> VersatilityBonus; + UpdateField<float, 70, 79> PvpPowerDamage; + UpdateField<float, 70, 80> PvpPowerHealing; + UpdateField<UF::BitVectors, 70, 81> BitVectors; + UpdateField<int32, 70, 82> ModHealingDonePos; + UpdateField<float, 70, 83> ModHealingPercent; + UpdateField<float, 70, 84> ModPeriodicHealingDonePercent; + UpdateField<float, 70, 85> ModSpellPowerPercent; + UpdateField<float, 70, 86> ModResiliencePercent; + UpdateField<float, 70, 87> OverrideSpellPowerByAPPercent; + UpdateField<float, 70, 88> OverrideAPBySpellPowerPercent; + UpdateField<int32, 70, 89> ModTargetResistance; + UpdateField<int32, 70, 90> ModTargetPhysicalResistance; + UpdateField<uint32, 70, 91> LocalFlags; + UpdateField<uint8, 70, 92> GrantableLevels; + UpdateField<uint8, 70, 93> MultiActionBars; + UpdateField<uint8, 70, 94> LifetimeMaxRank; + UpdateField<uint8, 70, 95> NumRespecs; + UpdateField<uint32, 70, 96> PvpMedals; + UpdateField<uint16, 70, 97> TodayHonorableKills; + UpdateField<uint16, 70, 98> YesterdayHonorableKills; + UpdateField<uint32, 70, 99> LifetimeHonorableKills; + UpdateField<int32, 70, 100> WatchedFactionIndex; + UpdateField<int32, 70, 101> MaxLevel; + UpdateField<int32, 102, 103> ScalingPlayerLevelDelta; + UpdateField<int32, 102, 104> MaxCreatureScalingLevel; + UpdateField<int32, 102, 105> PetSpellPower; + UpdateField<float, 102, 106> UiHitModifier; + UpdateField<float, 102, 107> UiSpellHitModifier; + UpdateField<int32, 102, 108> HomeRealmTimeOffset; + UpdateField<float, 102, 109> ModPetHaste; + UpdateField<int8, 102, 110> JailersTowerLevelMax; + UpdateField<int8, 102, 111> JailersTowerLevel; + UpdateField<uint8, 102, 112> LocalRegenFlags; + UpdateField<uint8, 102, 113> AuraVision; + UpdateField<uint8, 102, 114> NumBackpackSlots; + UpdateField<int32, 102, 115> OverrideSpellsID; + UpdateField<uint16, 102, 116> LootSpecID; + UpdateField<uint32, 102, 117> OverrideZonePVPType; + UpdateField<int32, 102, 118> Honor; + UpdateField<int32, 102, 119> HonorNextLevel; + UpdateField<int32, 102, 120> PerksProgramCurrency; + UpdateField<uint8, 102, 121> NumBankSlots; + UpdateField<uint8, 102, 122> NumAccountBankTabs; + UpdateField<UF::ResearchHistory, 102, 123> ResearchHistory; + UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 124> FrozenPerksVendorItem; + UpdateField<UF::ActivePlayerUnk901, 102, 126> Field_1410; + OptionalUpdateField<UF::QuestSession, 102, 125> QuestSession; + UpdateField<int32, 102, 127> UiChromieTimeExpansionID; + UpdateField<int32, 102, 128> TimerunningSeasonID; + UpdateField<int32, 102, 129> TransportServerTime; + UpdateField<uint32, 102, 130> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField<int16, 102, 131> DEBUGSoulbindConduitRank; + UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 132> DungeonScore; + UpdateField<uint32, 102, 133> ActiveCombatTraitConfigID; + UpdateField<int32, 134, 135> ItemUpgradeHighOnehandWeaponItemID; + UpdateField<int32, 134, 136> ItemUpgradeHighFingerItemID; + UpdateField<float, 134, 137> ItemUpgradeHighFingerWatermark; + UpdateField<int32, 134, 138> ItemUpgradeHighTrinketItemID; + UpdateField<float, 134, 139> ItemUpgradeHighTrinketWatermark; + UpdateField<uint64, 134, 140> LootHistoryInstanceID; + OptionalUpdateField<UF::StableInfo, 134, 141> PetStable; + UpdateField<uint8, 134, 142> RequiredMountCapabilityFlags; + OptionalUpdateField<UF::WalkInData, 134, 143> WalkInData; + OptionalUpdateField<UF::DelveData, 134, 144> DelveData; + UpdateFieldArray<ObjectGuid, 232, 145, 146> InvSlots; + UpdateFieldArray<UF::RestInfo, 2, 378, 379> RestInfo; + UpdateFieldArray<int32, 7, 381, 382> ModDamageDonePos; + UpdateFieldArray<int32, 7, 381, 389> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 381, 396> ModDamageDonePercent; + UpdateFieldArray<float, 7, 381, 403> ModHealingDonePercent; + UpdateFieldArray<float, 3, 410, 411> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 410, 414> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 417, 418> BuybackPrice; + UpdateFieldArray<int64, 12, 417, 430> BuybackTimestamp; + UpdateFieldArray<int32, 32, 442, 443> CombatRatings; + UpdateFieldArray<uint32, 4, 475, 476> NoReagentCostMask; + UpdateFieldArray<int32, 2, 480, 481> ProfessionSkillLine; + UpdateFieldArray<uint32, 5, 483, 484> BagSlotFlags; + UpdateFieldArray<uint32, 7, 489, 490> BankBagSlotFlags; + UpdateFieldArray<uint64, 960, 497, 498> QuestCompleted; + UpdateFieldArray<float, 17, 1458, 1459> ItemUpgradeHighWatermark; 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; diff --git a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h index 68d393e9804..9e3461af947 100644 --- a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h +++ b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h @@ -313,7 +313,7 @@ public: static value_type GetValue(UF::UnitData const* unitData, Unit const* unit, Player const* receiver) { value_type interactSpellId = unitData->InteractSpellID; - if (unitData->NpcFlags[0] & UNIT_NPC_FLAG_SPELLCLICK && !interactSpellId) + if (unitData->NpcFlags & UNIT_NPC_FLAG_SPELLCLICK && !interactSpellId) { // this field is not set if there are multiple available spellclick spells auto clickBounds = sObjectMgr->GetSpellClickInfoMapBounds(unit->GetEntry()); @@ -340,9 +340,9 @@ class ViewerDependentValue<UF::UnitData::NpcFlagsTag> public: using value_type = UF::UnitData::NpcFlagsTag::value_type; - static value_type GetValue(UF::UnitData const* unitData, uint32 i, Unit const* unit, Player const* receiver) + static value_type GetValue(UF::UnitData const* unitData, Unit const* unit, Player const* receiver) { - value_type npcFlag = unitData->NpcFlags[i]; + value_type npcFlag = unitData->NpcFlags; if (npcFlag) { if ((!unit->IsInteractionAllowedInCombat() && unit->IsInCombat()) @@ -350,14 +350,11 @@ public: npcFlag = 0; else if (Creature const* creature = unit->ToCreature()) { - if (i == 0) - { - if (!receiver->CanSeeGossipOn(creature)) - npcFlag &= ~(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + if (!receiver->CanSeeGossipOn(creature)) + npcFlag &= ~(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); - if (!receiver->CanSeeSpellClickOn(creature)) - npcFlag &= ~UNIT_NPC_FLAG_SPELLCLICK; - } + if (!receiver->CanSeeSpellClickOn(creature)) + npcFlag &= ~UNIT_NPC_FLAG_SPELLCLICK; } } return npcFlag; @@ -365,6 +362,25 @@ public: }; template<> +class ViewerDependentValue<UF::UnitData::NpcFlags2Tag> +{ +public: + using value_type = UF::UnitData::NpcFlags2Tag::value_type; + + static value_type GetValue(UF::UnitData const* unitData, Unit const* unit, Player const* receiver) + { + value_type npcFlag = unitData->NpcFlags2; + if (npcFlag) + { + if ((!unit->IsInteractionAllowedInCombat() && unit->IsInCombat()) + || (!unit->IsInteractionAllowedWhileHostile() && unit->IsHostileTo(receiver))) + npcFlag = 0; + } + return npcFlag; + } +}; + +template<> class ViewerDependentValue<UF::GameObjectData::FlagsTag> { public: diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 55ad4d6a98f..32343bbe64d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -216,6 +216,7 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this) m_bCanDelayTeleport = false; m_bHasDelayedTeleport = false; m_teleport_options = TELE_TO_NONE; + m_newWorldCounter = 0; m_trade = nullptr; @@ -1488,6 +1489,8 @@ bool Player::TeleportTo(TeleportLocation const& teleportLocation, TeleportToOpti if (!GetSession()->PlayerLogout()) { + ++m_newWorldCounter; + WorldPackets::Movement::SuspendToken suspendToken; suspendToken.SequenceIndex = m_movementCounter; // not incrementing suspendToken.Reason = options & TELE_TO_SEAMLESS ? 2 : 1; @@ -6370,8 +6373,8 @@ void Player::CheckAreaExplore() uint32 offset = areaEntry->AreaBit / PLAYER_EXPLORED_ZONES_BITS; uint64 val = UI64LIT(1) << (areaEntry->AreaBit % PLAYER_EXPLORED_ZONES_BITS); - if (offset >= m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size() - || !(m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][offset] & val)) + if (offset >= m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size() + || !(m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][offset] & val)) { AddExploredZones(offset, val); @@ -6423,7 +6426,8 @@ void Player::AddExploredZones(uint32 pos, uint64 mask) { SetUpdateFieldFlagValue(m_values .ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::DataFlags, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX) + .ModifyValue(&UF::ActivePlayerData::BitVectors) + .ModifyValue(&UF::BitVectors::Values, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX) .ModifyValue(pos), mask); } @@ -6431,7 +6435,8 @@ void Player::RemoveExploredZones(uint32 pos, uint64 mask) { RemoveUpdateFieldFlagValue(m_values .ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::DataFlags, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX) + .ModifyValue(&UF::ActivePlayerData::BitVectors) + .ModifyValue(&UF::BitVectors::Values, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX) .ModifyValue(pos), mask); } @@ -6445,11 +6450,11 @@ bool Player::HasExploredZone(uint32 areaId) const return false; size_t playerIndexOffset = size_t(area->AreaBit) / PLAYER_EXPLORED_ZONES_BITS; - if (playerIndexOffset >= m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size()) + if (playerIndexOffset >= m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size()) return false; uint64 mask = uint64(1) << (area->AreaBit % PLAYER_EXPLORED_ZONES_BITS); - return (m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][playerIndexOffset] & mask) != 0; + return (m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][playerIndexOffset] & mask) != 0; } void Player::CheckOutdoorsAuraRequirements() @@ -13891,6 +13896,9 @@ void Player::SendNewItem(Item* item, uint32 quantity, bool pushed, bool created, packet.QuestLogItemID = item->GetTemplate()->QuestLogItemId; packet.Quantity = quantity; packet.QuantityInInventory = GetItemCount(item->GetEntry()); + if (QuestObjective const* questObjective = GetQuestObjectiveForItem(item->GetEntry(), false)) + packet.QuantityInQuestLog = GetQuestObjectiveData(*questObjective); + packet.BattlePetSpeciesID = item->GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID); packet.BattlePetBreedID = item->GetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA) & 0xFFFFFF; packet.BattlePetBreedQuality = (item->GetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA) >> 24) & 0xFF; @@ -14225,7 +14233,8 @@ void Player::OnGossipSelect(WorldObject* source, int32 gossipOptionId, uint32 me PlayerInteractionType::Renown, PlayerInteractionType::BlackMarketAuctioneer, PlayerInteractionType::PerksProgramVendor, PlayerInteractionType::ProfessionsCraftingOrder, PlayerInteractionType::Professions, PlayerInteractionType::ProfessionsCustomerOrder, PlayerInteractionType::TraitSystem, PlayerInteractionType::BarbersChoice, PlayerInteractionType::MajorFactionRenown, - PlayerInteractionType::PersonalTabardVendor + PlayerInteractionType::PersonalTabardVendor, PlayerInteractionType::ForgeMaster, PlayerInteractionType::CharacterBanker, + PlayerInteractionType::AccountBanker }; PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[AsUnderlyingType(gossipOptionNpc)]; @@ -16167,20 +16176,28 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object const* questgiver) const case QUEST_STATUS_COMPLETE: if (quest->IsImportant()) result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::ImportantQuestRewardCompleteNoPOI : QuestGiverStatus::ImportantQuestRewardCompletePOI; + else if (quest->IsMeta()) + result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::MetaQuestRewardCompleteNoPOI : QuestGiverStatus::MetaQuestRewardCompletePOI; else if (quest->GetQuestTag() == QuestTagType::CovenantCalling) result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::CovenantCallingRewardCompleteNoPOI : QuestGiverStatus::CovenantCallingRewardCompletePOI; else if (quest->HasFlagEx(QUEST_FLAGS_EX_LEGENDARY)) result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::LegendaryRewardCompleteNoPOI : QuestGiverStatus::LegendaryRewardCompletePOI; + else if (quest->IsDailyOrWeekly()) + result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::RepeatableRewardCompleteNoPOI : QuestGiverStatus::RepeatableRewardCompletePOI; else result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::RewardCompleteNoPOI : QuestGiverStatus::RewardCompletePOI; break; case QUEST_STATUS_INCOMPLETE: if (quest->IsImportant()) result |= QuestGiverStatus::ImportantReward; + else if (quest->IsMeta()) + result |= QuestGiverStatus::MetaReward; else if (quest->GetQuestTag() == QuestTagType::CovenantCalling) result |= QuestGiverStatus::CovenantCallingReward; else if (quest->HasFlagEx(QUEST_FLAGS_EX_LEGENDARY)) result |= QuestGiverStatus::LegendaryReward; + else if (quest->IsDailyOrWeekly()) + result |= QuestGiverStatus::RepeatableReward; else result |= QuestGiverStatus::Reward; break; @@ -16188,12 +16205,17 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object const* questgiver) const break; } - if (quest->IsTurnIn() && CanTakeQuest(quest, false) && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly()) + if (quest->IsTurnIn() && CanTakeQuest(quest, false)) { - if (GetLevel() > (GetQuestLevel(quest) + sWorld->getIntConfig(CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF))) - result |= QuestGiverStatus::RepeatableTurnin; + if (quest->IsRepeatable()) + { + if (GetLevel() > (GetQuestLevel(quest) + sWorld->getIntConfig(CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF))) + result |= QuestGiverStatus::RepeatableTurnin; + else + result |= QuestGiverStatus::TrivialRepeatableTurnin; + } else - result |= QuestGiverStatus::TrivialRepeatableTurnin; + result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::RewardCompleteNoPOI : QuestGiverStatus::RewardCompletePOI; } } @@ -16215,12 +16237,14 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object const* questgiver) const bool isTrivial = GetLevel() > (GetQuestLevel(quest) + sWorld->getIntConfig(CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF)); if (quest->IsImportant()) result |= isTrivial ? QuestGiverStatus::TrivialImportantQuest : QuestGiverStatus::ImportantQuest; + else if (quest->IsMeta()) + result |= isTrivial ? QuestGiverStatus::TrivialMetaQuest : QuestGiverStatus::MetaQuest; else if (quest->GetQuestTag() == QuestTagType::CovenantCalling) result |= QuestGiverStatus::CovenantCallingQuest; else if (quest->HasFlagEx(QUEST_FLAGS_EX_LEGENDARY)) result |= isTrivial ? QuestGiverStatus::TrivialLegendaryQuest : QuestGiverStatus::LegendaryQuest; - else if (quest->IsDaily()) - result |= isTrivial ? QuestGiverStatus::TrivialDailyQuest : QuestGiverStatus::DailyQuest; + else if (quest->IsDailyOrWeekly()) + result |= isTrivial ? QuestGiverStatus::TrivialRepeatableQuest : QuestGiverStatus::RepeatableQuest; else result |= isTrivial ? QuestGiverStatus::Trivial : QuestGiverStatus::Quest; } @@ -20067,10 +20091,10 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba stmt->setUInt32(index++, GetLootSpecId()); ss.str(""); - for (size_t i = 0; i < m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size(); ++i) + for (size_t i = 0; i < m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size(); ++i) { - ss << uint32(m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] & 0xFFFFFFFF) << ' '; - ss << uint32((m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] >> 32) & 0xFFFFFFFF) << ' '; + ss << uint32(m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] & 0xFFFFFFFF) << ' '; + ss << uint32((m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] >> 32) & 0xFFFFFFFF) << ' '; } stmt->setString(index++, ss.str()); @@ -20224,10 +20248,10 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba stmt->setUInt32(index++, GetLootSpecId()); ss.str(""); - for (size_t i = 0; i < m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size(); ++i) + for (size_t i = 0; i < m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size(); ++i) { - ss << uint32(m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] & 0xFFFFFFFF) << ' '; - ss << uint32((m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] >> 32) & 0xFFFFFFFF) << ' '; + ss << uint32(m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] & 0xFFFFFFFF) << ' '; + ss << uint32((m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] >> 32) & 0xFFFFFFFF) << ' '; } stmt->setString(index++, ss.str()); @@ -25361,9 +25385,10 @@ void Player::UpdateVisibleObjectInteractions(bool allUnits, bool onlySpellClicks { UF::ObjectData::Base objMask; UF::UnitData::Base unitMask; - for (uint32 i = 0; i < creature->m_unitData->NpcFlags.size(); ++i) - if (creature->m_unitData->NpcFlags[i]) - unitMask.MarkChanged(&UF::UnitData::NpcFlags, i); + if (creature->m_unitData->NpcFlags) + unitMask.MarkChanged(&UF::UnitData::NpcFlags); + if (creature->m_unitData->NpcFlags2) + unitMask.MarkChanged(&UF::UnitData::NpcFlags2); if (objMask.GetChangesMask().IsAnySet() || unitMask.GetChangesMask().IsAnySet()) creature->BuildValuesUpdateForPlayerWithMask(&udata, objMask.GetChangesMask(), unitMask.GetChangesMask(), this); @@ -25384,7 +25409,7 @@ void Player::UpdateVisibleObjectInteractions(bool allUnits, bool onlySpellClicks { UF::ObjectData::Base objMask; UF::UnitData::Base unitMask; - unitMask.MarkChanged(&UF::UnitData::NpcFlags, 0); // NpcFlags[0] has UNIT_NPC_FLAG_SPELLCLICK + unitMask.MarkChanged(&UF::UnitData::NpcFlags); // NpcFlags has UNIT_NPC_FLAG_SPELLCLICK creature->BuildValuesUpdateForPlayerWithMask(&udata, objMask.GetChangesMask(), unitMask.GetChangesMask(), this); break; } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index b3d3d9c7466..f83e54de2bc 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -146,7 +146,7 @@ enum PlayerSkillsConstants enum PlayerDataFlagConstants { - PLAYER_EXPLORED_ZONES_BITS = UF::size_of_value_type<decltype(UF::ActivePlayerData::DataFlags)::value_type>() * 8, + PLAYER_EXPLORED_ZONES_BITS = UF::size_of_value_type<decltype(UF::BitVectors::Values)::value_type>() * 8, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX = 1, PLAYER_DATA_FLAG_CHARACTER_DATA_INDEX = 2, @@ -638,7 +638,7 @@ enum PlayerSlots // first slot for item stored (in any way in player m_items data) PLAYER_SLOT_START = 0, // last+1 slot for item stored (in any way in player m_items data) - PLAYER_SLOT_END = 227, + PLAYER_SLOT_END = 232, PLAYER_SLOTS_COUNT = (PLAYER_SLOT_END - PLAYER_SLOT_START) }; @@ -761,6 +761,12 @@ enum EquipableSpellSlots EQUIPABLE_SPELL_WEAPON_SLOT4 = 226, }; +enum AccountBankBagSlots +{ + ACCOUNT_BANK_SLOT_BAG_START = 227, + ACCOUNT_BANK_SLOT_BAG_END = 232 +}; + struct ItemPosCount { ItemPosCount(uint16 _pos, uint32 _count) : pos(_pos), count(_count) { } @@ -811,11 +817,10 @@ enum NewWorldReason enum InstanceResetWarningType { - RAID_INSTANCE_WARNING_HOURS = 1, // WARNING! %s is scheduled to reset in %d hour(s). - RAID_INSTANCE_WARNING_MIN = 2, // WARNING! %s is scheduled to reset in %d minute(s)! - RAID_INSTANCE_WARNING_MIN_SOON = 3, // WARNING! %s is scheduled to reset in %d minute(s). Please exit the zone or you will be returned to your bind location! - RAID_INSTANCE_WELCOME = 4, // Welcome to %s. This raid instance is scheduled to reset in %s. - RAID_INSTANCE_EXPIRED = 5 + RAID_INSTANCE_WELCOME = 1, // Welcome to %s. Instance locks are scheduled to expire in %s. + RAID_INSTANCE_EXPIRED = 2, // Your instance lock for %s has expired. + RAID_INSTANCE_WELCOME_DAILY = 3, // Welcome to %s. The daily reset is scheduled to occur in %s and will reset this instance. + RAID_INSTANCE_WARNING_TIME = 4, // any GlobalStrings tag that has 1 formattable argument, like DELVES_INSTANCE_RESET_WARNING }; // PLAYER_FIELD_ARENA_TEAM_INFO_1_1 offsets @@ -2294,6 +2299,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> TeleportLocation& GetTeleportDest() { return m_teleport_dest; } uint32 GetTeleportOptions() const { return m_teleport_options; } + int32 GetNewWorldCounter() const { return m_newWorldCounter; } bool IsBeingTeleported() const { return IsBeingTeleportedNear() || IsBeingTeleportedFar(); } bool IsBeingTeleportedNear() const { return mSemaphoreTeleport_Near; } bool IsBeingTeleportedFar() const { return mSemaphoreTeleport_Far; } @@ -3251,6 +3257,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> // Current teleport data TeleportLocation m_teleport_dest; TeleportToOptions m_teleport_options; + int32 m_newWorldCounter; bool mSemaphoreTeleport_Near; bool mSemaphoreTeleport_Far; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index cc2d0f96875..6c0d491b8ea 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8885,9 +8885,10 @@ void Unit::SetInteractionAllowedInCombat(bool interactionAllowed) void Unit::UpdateNearbyPlayersInteractions() { - for (uint32 i = 0; i < m_unitData->NpcFlags.size(); ++i) - if (m_unitData->NpcFlags[i]) - ForceUpdateFieldChange(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, i)); + if (m_unitData->NpcFlags) + ForceUpdateFieldChange(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags)); + if (m_unitData->NpcFlags2) + ForceUpdateFieldChange(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2)); } //====================================================================== @@ -13176,6 +13177,40 @@ bool Unit::SetCollision(bool disable) return true; } +bool Unit::SetEnableFullSpeedTurning(bool enable) +{ + if (GetTypeId() != TYPEID_PLAYER) + return false; + + if (enable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING)) + return false; + + if (enable) + AddExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING); + else + RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING); + + static constexpr OpcodeServer fullSpeedTurningOpcodeTable[2] = + { + SMSG_MOVE_DISABLE_FULL_SPEED_TURNING, + SMSG_MOVE_ENABLE_FULL_SPEED_TURNING + }; + + if (Player* playerMover = Unit::ToPlayer(GetUnitBeingMoved())) + { + WorldPackets::Movement::MoveSetFlag packet(fullSpeedTurningOpcodeTable[enable]); + packet.MoverGUID = GetGUID(); + packet.SequenceIndex = m_movementCounter++; + playerMover->SendDirectMessage(packet.Write()); + + WorldPackets::Movement::MoveUpdate moveUpdate; + moveUpdate.Status = &m_movementInfo; + SendMessageToSet(moveUpdate.Write(), playerMover); + } + + return true; +} + bool Unit::SetCanTransitionBetweenSwimAndFly(bool enable) { if (GetTypeId() != TYPEID_PLAYER) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 41d48b70cdf..3adc53fcaaa 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -983,17 +983,17 @@ class TC_GAME_API Unit : public WorldObject MeleeHitOutcome RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackType attType) const; - NPCFlags GetNpcFlags() const { return NPCFlags(m_unitData->NpcFlags[0]); } - bool HasNpcFlag(NPCFlags flags) const { return (m_unitData->NpcFlags[0] & flags) != 0; } - void SetNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); } - void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); } - void ReplaceAllNpcFlags(NPCFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); } - - NPCFlags2 GetNpcFlags2() const { return NPCFlags2(m_unitData->NpcFlags[1]); } - bool HasNpcFlag2(NPCFlags2 flags) const { return (m_unitData->NpcFlags[1] & flags) != 0; } - void SetNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); } - void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); } - void ReplaceAllNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); } + NPCFlags GetNpcFlags() const { return NPCFlags(*m_unitData->NpcFlags); } + bool HasNpcFlag(NPCFlags flags) const { return (m_unitData->NpcFlags & flags) != 0; } + void SetNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags), flags); } + void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags), flags); } + void ReplaceAllNpcFlags(NPCFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags), flags); } + + NPCFlags2 GetNpcFlags2() const { return NPCFlags2(*m_unitData->NpcFlags2); } + bool HasNpcFlag2(NPCFlags2 flags) const { return (m_unitData->NpcFlags2 & flags) != 0; } + void SetNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2), flags); } + void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2), flags); } + void ReplaceAllNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2), flags); } bool IsVendor() const { return HasNpcFlag(UNIT_NPC_FLAG_VENDOR); } bool IsTrainer() const { return HasNpcFlag(UNIT_NPC_FLAG_TRAINER); } @@ -1149,6 +1149,7 @@ class TC_GAME_API Unit : public WorldObject bool SetFeatherFall(bool enable); bool SetHover(bool enable, bool updateAnimTier = true); bool SetCollision(bool disable); + bool SetEnableFullSpeedTurning(bool enable); bool SetCanTransitionBetweenSwimAndFly(bool enable); bool SetCanTurnWhileFalling(bool enable); bool SetCanDoubleJump(bool enable); diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index f19ef29ada0..432a998f9b6 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -296,7 +296,7 @@ enum NPCFlags : uint32 UNIT_NPC_FLAG_NONE = 0x00000000, UNIT_NPC_FLAG_GOSSIP = 0x00000001, // TITLE has gossip menu DESCRIPTION 100% UNIT_NPC_FLAG_QUESTGIVER = 0x00000002, // TITLE is quest giver DESCRIPTION 100% - UNIT_NPC_FLAG_UNK1 = 0x00000004, + UNIT_NPC_FLAG_ACCOUNT_BANKER = 0x00000004, // TITLE is account banker UNIT_NPC_FLAG_UNK2 = 0x00000008, UNIT_NPC_FLAG_TRAINER = 0x00000010, // TITLE is trainer DESCRIPTION 100% UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000020, // TITLE is class trainer DESCRIPTION 100% diff --git a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp index af0544234ff..a5fa869ebc2 100644 --- a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp +++ b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp @@ -421,7 +421,7 @@ TC_API_EXPORT EnumText EnumUtils<NPCFlags>::ToString(NPCFlags value) case UNIT_NPC_FLAG_NONE: return { "UNIT_NPC_FLAG_NONE", "UNIT_NPC_FLAG_NONE", "" }; case UNIT_NPC_FLAG_GOSSIP: return { "UNIT_NPC_FLAG_GOSSIP", "has gossip menu", "100%" }; case UNIT_NPC_FLAG_QUESTGIVER: return { "UNIT_NPC_FLAG_QUESTGIVER", "is quest giver", "100%" }; - case UNIT_NPC_FLAG_UNK1: return { "UNIT_NPC_FLAG_UNK1", "UNIT_NPC_FLAG_UNK1", "" }; + case UNIT_NPC_FLAG_ACCOUNT_BANKER: return { "UNIT_NPC_FLAG_ACCOUNT_BANKER", "UNIT_NPC_FLAG_ACCOUNT_BANKER", "" }; case UNIT_NPC_FLAG_UNK2: return { "UNIT_NPC_FLAG_UNK2", "UNIT_NPC_FLAG_UNK2", "" }; case UNIT_NPC_FLAG_TRAINER: return { "UNIT_NPC_FLAG_TRAINER", "is trainer", "100%" }; case UNIT_NPC_FLAG_TRAINER_CLASS: return { "UNIT_NPC_FLAG_TRAINER_CLASS", "is class trainer", "100%" }; @@ -466,7 +466,7 @@ TC_API_EXPORT NPCFlags EnumUtils<NPCFlags>::FromIndex(size_t index) case 0: return UNIT_NPC_FLAG_NONE; case 1: return UNIT_NPC_FLAG_GOSSIP; case 2: return UNIT_NPC_FLAG_QUESTGIVER; - case 3: return UNIT_NPC_FLAG_UNK1; + case 3: return UNIT_NPC_FLAG_ACCOUNT_BANKER; case 4: return UNIT_NPC_FLAG_UNK2; case 5: return UNIT_NPC_FLAG_TRAINER; case 6: return UNIT_NPC_FLAG_TRAINER_CLASS; @@ -508,7 +508,7 @@ TC_API_EXPORT size_t EnumUtils<NPCFlags>::ToIndex(NPCFlags value) case UNIT_NPC_FLAG_NONE: return 0; case UNIT_NPC_FLAG_GOSSIP: return 1; case UNIT_NPC_FLAG_QUESTGIVER: return 2; - case UNIT_NPC_FLAG_UNK1: return 3; + case UNIT_NPC_FLAG_ACCOUNT_BANKER: return 3; case UNIT_NPC_FLAG_UNK2: return 4; case UNIT_NPC_FLAG_TRAINER: return 5; case UNIT_NPC_FLAG_TRAINER_CLASS: return 6; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 8b7411634f9..673a1678fe0 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4535,7 +4535,7 @@ void ObjectMgr::LoadQuests() //90 91 92 93 94 95 96 97 "RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " //98 99 100 101 102 103 104 105 106 - "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, QuestSessionBonus, " + "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, ResetByScheduler, Expansion, ManagedWorldStateID, QuestSessionBonus, " //107 108 109 110 111 112 113 114 115 "LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog " "FROM quest_template"); @@ -4615,7 +4615,10 @@ void ObjectMgr::LoadQuests() { "QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale", "quest_offer_reward_conditional", "ORDER BY OrderIndex", "conditional reward", &Quest::LoadConditionalConditionalOfferRewardText }, // 0 1 2 3 4 - { "QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale", "quest_completion_log_conditional", "ORDER BY OrderIndex", "conditional completion log", &Quest::LoadConditionalConditionalQuestCompletionLog } + { "QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale", "quest_completion_log_conditional", "ORDER BY OrderIndex", "conditional completion log", &Quest::LoadConditionalConditionalQuestCompletionLog }, + + // 0 1 + { "QuestID, TreasurePickerID", "quest_treasure_pickers", "ORDER BY OrderIndex", "treasure pickers", &Quest::LoadTreasurePickers } }; for (QuestLoaderHelper const& loader : QuestLoaderHelpers) @@ -9769,8 +9772,8 @@ void ObjectMgr::LoadGossipMenuAddon() _gossipMenuAddonStore.clear(); - // 0 1 - QueryResult result = WorldDatabase.Query("SELECT MenuID, FriendshipFactionID FROM gossip_menu_addon"); + // 0 1 2 + QueryResult result = WorldDatabase.Query("SELECT MenuID, FriendshipFactionID, LfgDungeonsID FROM gossip_menu_addon"); if (!result) { @@ -9785,20 +9788,30 @@ void ObjectMgr::LoadGossipMenuAddon() uint32 menuID = fields[0].GetUInt32(); GossipMenuAddon& addon = _gossipMenuAddonStore[menuID]; addon.FriendshipFactionID = fields[1].GetInt32(); + addon.LfgDungeonsID = fields[2].GetInt32(); - if (FactionEntry const* faction = sFactionStore.LookupEntry(addon.FriendshipFactionID)) + if (addon.FriendshipFactionID) { - if (!sFriendshipReputationStore.LookupEntry(faction->FriendshipRepID)) + if (FactionEntry const* faction = sFactionStore.LookupEntry(addon.FriendshipFactionID)) + { + if (!sFriendshipReputationStore.LookupEntry(faction->FriendshipRepID)) + { + TC_LOG_ERROR("sql.sql", "Table gossip_menu_addon: ID {} is using FriendshipFactionID {} referencing non-existing FriendshipRepID {}", + menuID, addon.FriendshipFactionID, faction->FriendshipRepID); + addon.FriendshipFactionID = 0; + } + } + else { - TC_LOG_ERROR("sql.sql", "Table gossip_menu_addon: ID {} is using FriendshipFactionID {} referencing non-existing FriendshipRepID {}", - menuID, addon.FriendshipFactionID, faction->FriendshipRepID); + TC_LOG_ERROR("sql.sql", "Table gossip_menu_addon: ID {} is using non-existing FriendshipFactionID {}", menuID, addon.FriendshipFactionID); addon.FriendshipFactionID = 0; } } - else + + if (addon.LfgDungeonsID && sLFGDungeonsStore.LookupEntry(addon.LfgDungeonsID)) { - TC_LOG_ERROR("sql.sql", "Table gossip_menu_addon: ID {} is using non-existing FriendshipFactionID {}", menuID, addon.FriendshipFactionID); - addon.FriendshipFactionID = 0; + TC_LOG_ERROR("sql.sql", "Table gossip_menu_addon: ID {} is using non-existing LfgDungeonsID {}", menuID, addon.LfgDungeonsID); + addon.LfgDungeonsID = 0; } } while (result->NextRow()); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index adc1dde5dc8..9a0423daa8c 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -779,6 +779,7 @@ struct GossipMenus struct GossipMenuAddon { int32 FriendshipFactionID; + int32 LfgDungeonsID; }; typedef std::multimap<uint32, GossipMenus> GossipMenusContainer; diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 289c4dc39ea..14d94305ba6 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -198,6 +198,7 @@ bool Group::Create(Player* leader) stmt->setUInt32(index++, uint8(m_raidDifficulty)); stmt->setUInt32(index++, uint8(m_legacyRaidDifficulty)); stmt->setUInt64(index++, m_masterLooterGuid.GetCounter()); + stmt->setInt8(index++, int8(m_pingRestriction)); CharacterDatabase.Execute(stmt); @@ -243,6 +244,8 @@ void Group::LoadGroupFromDB(Field* fields) m_masterLooterGuid = ObjectGuid::Create<HighGuid::Player>(fields[16].GetUInt64()); + m_pingRestriction = RestrictPingsTo(fields[18].GetInt8()); + if (m_groupFlags & GROUP_FLAG_LFG) sLFGMgr->_LoadFromDB(fields, GetGUID()); } @@ -867,6 +870,8 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot const* slot) co partyUpdate.SequenceNum = player->NextGroupUpdateSequenceNumber(m_groupCategory); + partyUpdate.PingRestriction = m_pingRestriction; + partyUpdate.MyIndex = -1; uint8 index = 0; for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr, ++index) @@ -1899,23 +1904,20 @@ void Group::SetEveryoneIsAssistant(bool apply) SendUpdate(); } -bool Group::IsRestrictPingsToAssistants() const +RestrictPingsTo Group::GetRestrictPings() const { - return (m_groupFlags & GROUP_FLAG_RESTRICT_PINGS) != 0; + return m_pingRestriction; } -void Group::SetRestrictPingsToAssistants(bool restrictPingsToAssistants) +void Group::SetRestrictPingsTo(RestrictPingsTo restrictTo) { - if (restrictPingsToAssistants) - m_groupFlags = GroupFlags(m_groupFlags | GROUP_FLAG_RESTRICT_PINGS); - else - m_groupFlags = GroupFlags(m_groupFlags & ~GROUP_FLAG_RESTRICT_PINGS); + m_pingRestriction = restrictTo; if (!isBGGroup() && !isBFGroup()) { - CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_TYPE); + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_PING_RESTRICTION); - stmt->setUInt16(0, m_groupFlags); + stmt->setInt8(0, int8(m_pingRestriction)); stmt->setUInt32(1, m_dbStoreId); CharacterDatabase.Execute(stmt); diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 8ba2f36e3c3..98f22523d2f 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -103,7 +103,7 @@ enum GroupFlags : uint16 GROUP_FLAG_EVERYONE_ASSISTANT = 0x040, // Script_IsEveryoneAssistant() GROUP_FLAG_GUILD_GROUP = 0x100, GROUP_FLAG_CROSS_FACTION = 0x200, - GROUP_FLAG_RESTRICT_PINGS = 0x400, // C_PartyInfo::Script_GetRestrictPings() + GROUP_FLAG_RESTRICT_PINGS = 0x400, // deprecated GROUP_MASK_BGRAID = GROUP_FLAG_FAKE_RAID | GROUP_FLAG_RAID, }; @@ -191,6 +191,14 @@ enum class PingSubjectType : uint8 Max }; +enum class RestrictPingsTo : int32 +{ + None = 0, + Lead = 1, + Assist = 2, + TankHealer = 3, +}; + /** request member stats checken **/ /// @todo uninvite people that not accepted invite class TC_GAME_API Group @@ -260,8 +268,8 @@ class TC_GAME_API Group void SetLfgRoles(ObjectGuid guid, uint8 roles); uint8 GetLfgRoles(ObjectGuid guid) const; void SetEveryoneIsAssistant(bool apply); - bool IsRestrictPingsToAssistants() const; - void SetRestrictPingsToAssistants(bool restrictPingsToAssistants); + RestrictPingsTo GetRestrictPings() const; + void SetRestrictPingsTo(RestrictPingsTo restrictTo); // Update void UpdateReadyCheck(uint32 diff); @@ -451,6 +459,8 @@ class TC_GAME_API Group std::array<std::unique_ptr<CountdownInfo>, 3> m_countdowns; + RestrictPingsTo m_pingRestriction; + struct NoopGroupDeleter { void operator()(Group*) const { /*noop - not managed*/ } }; Trinity::unique_trackable_ptr<Group> m_scriptRef; }; diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp index d36e7f64a6c..2e4d018c0c7 100644 --- a/src/server/game/Groups/GroupMgr.cpp +++ b/src/server/game/Groups/GroupMgr.cpp @@ -140,8 +140,8 @@ void GroupMgr::LoadGroups() // 0 1 2 3 4 5 6 7 8 9 QueryResult result = CharacterDatabase.Query("SELECT g.leaderGuid, g.lootMethod, g.looterGuid, g.lootThreshold, g.icon1, g.icon2, g.icon3, g.icon4, g.icon5, g.icon6" - // 10 11 12 13 14 15 16 17 18 19 - ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.legacyRaidDifficulty, g.masterLooterGuid, g.guid, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC"); + // 10 11 12 13 14 15 16 17 18 19 20 + ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.legacyRaidDifficulty, g.masterLooterGuid, g.guid, g.pingRestriction, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC"); if (!result) { TC_LOG_INFO("server.loading", ">> Loaded 0 group definitions. DB table `groups` is empty!"); diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 9e104a051d1..ca914c06eb0 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -2479,7 +2479,6 @@ void Guild::SendEventPresenceChanged(WorldSession* session, bool loggedOn, bool eventPacket.Name = player->GetName(); eventPacket.VirtualRealmAddress = GetVirtualRealmAddress(); eventPacket.LoggedOn = loggedOn; - eventPacket.Mobile = false; if (broadcast) BroadcastPacket(eventPacket.Write()); diff --git a/src/server/game/Handlers/BankHandler.cpp b/src/server/game/Handlers/BankHandler.cpp index 5e515cf623a..4e3c065c17c 100644 --- a/src/server/game/Handlers/BankHandler.cpp +++ b/src/server/game/Handlers/BankHandler.cpp @@ -15,14 +15,15 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "WorldSession.h" #include "BankPackets.h" -#include "Item.h" +#include "Creature.h" #include "DB2Stores.h" #include "GossipDef.h" +#include "Item.h" #include "Log.h" #include "NPCPackets.h" #include "Player.h" -#include "WorldSession.h" void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& packet) { @@ -34,6 +35,9 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& pa return; } + if (packet.BankType != BankType::Character) + return; + Item* item = _player->GetItemByPos(packet.Bag, packet.Slot); if (!item) return; @@ -57,22 +61,43 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& pa _player->BankItem(dest, item, true); } -void WorldSession::HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet) +void WorldSession::HandleBankerActivateOpcode(WorldPackets::Bank::BankerActivate const& bankerActivate) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_BANKER, UNIT_NPC_FLAG_2_NONE); + if (bankerActivate.InteractionType != PlayerInteractionType::Banker) + return; + + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(bankerActivate.Banker, UNIT_NPC_FLAG_ACCOUNT_BANKER | UNIT_NPC_FLAG_BANKER, UNIT_NPC_FLAG_2_NONE); if (!unit) { - TC_LOG_ERROR("network", "WORLD: HandleBankerActivateOpcode - {} not found or you can not interact with him.", packet.Unit.ToString()); + TC_LOG_ERROR("network", "WORLD: HandleBankerActivateOpcode - {} not found or you can not interact with him.", bankerActivate.Banker); return; } + switch (bankerActivate.InteractionType) + { + case PlayerInteractionType::Banker: + if (!unit->HasNpcFlag(UNIT_NPC_FLAG_ACCOUNT_BANKER) || !unit->HasNpcFlag(UNIT_NPC_FLAG_BANKER)) + return; + break; + case PlayerInteractionType::CharacterBanker: + if (!unit->HasNpcFlag(UNIT_NPC_FLAG_BANKER)) + return; + break; + case PlayerInteractionType::AccountBanker: + if (!unit->HasNpcFlag(UNIT_NPC_FLAG_ACCOUNT_BANKER)) + return; + break; + default: + break; + } + // remove fake death if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); // set currentBankerGUID for other bank action - SendShowBank(packet.Unit); + SendShowBank(bankerActivate.Banker, bankerActivate.InteractionType); } void WorldSession::HandleAutoStoreBankItemOpcode(WorldPackets::Bank::AutoStoreBankItem& packet) @@ -297,13 +322,13 @@ void WorldSession::HandleAutoStoreBankReagentOpcode(WorldPackets::Bank::AutoStor } } -void WorldSession::SendShowBank(ObjectGuid guid) +void WorldSession::SendShowBank(ObjectGuid guid, PlayerInteractionType interactionType) { _player->PlayerTalkClass->GetInteractionData().Reset(); _player->PlayerTalkClass->GetInteractionData().SourceGuid = guid; WorldPackets::NPC::NPCInteractionOpenResult npcInteraction; npcInteraction.Npc = guid; - npcInteraction.InteractionType = PlayerInteractionType::Banker; + npcInteraction.InteractionType = interactionType; npcInteraction.Success = true; SendPacket(npcInteraction.Write()); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index e876cada3fd..d2bc7f3887b 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -416,7 +416,7 @@ void WorldSession::HandleCharEnum(CharacterDatabaseQueryHolder const& holder) { charEnum.Characters.emplace_back(result->Fetch()); - WorldPackets::Character::EnumCharactersResult::CharacterInfo& charInfo = charEnum.Characters.back(); + WorldPackets::Character::EnumCharactersResult::CharacterInfoBasic& charInfo = charEnum.Characters.back().Basic; if (std::vector<UF::ChrCustomizationChoice>* customizationsForChar = Trinity::Containers::MapGetValuePtr(customizations, charInfo.Guid.GetCounter())) charInfo.Customizations = std::move(*customizationsForChar); diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index f9ad1daa6f1..a1cc44531c2 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -20,6 +20,7 @@ #include "DatabaseEnv.h" #include "Group.h" #include "GroupMgr.h" +#include "LFG.h" #include "Log.h" #include "Loot.h" #include "MiscPackets.h" @@ -664,8 +665,24 @@ bool CanSendPing(Player const& player, PingSubjectType type, Group const*& group if (!group) return false; - if (group->IsRestrictPingsToAssistants() && !group->IsLeader(player.GetGUID()) && !group->IsAssistant(player.GetGUID())) - return false; + if (group->IsLeader(player.GetGUID())) + return true; + + switch (group->GetRestrictPings()) + { + case RestrictPingsTo::None: + return true; + case RestrictPingsTo::Lead: + return false; + case RestrictPingsTo::Assist: + if (!group->IsAssistant(player.GetGUID())) + return false; + break; + case RestrictPingsTo::TankHealer: + if (!(group->GetLfgRoles(player.GetGUID()) & (lfg::PLAYER_ROLE_TANK | lfg::PLAYER_ROLE_HEALER))) + return false; + break; + } return true; } @@ -680,7 +697,7 @@ void WorldSession::HandleSetRestrictPingsToAssistants(WorldPackets::Party::SetRe if (!group->IsLeader(GetPlayer()->GetGUID())) return; - group->SetRestrictPingsToAssistants(setRestrictPingsToAssistants.RestrictPingsToAssistants); + group->SetRestrictPingsTo(setRestrictPingsToAssistants.RestrictTo); } void WorldSession::HandleSendPingUnit(WorldPackets::Party::SendPingUnit const& pingUnit) @@ -725,6 +742,7 @@ void WorldSession::HandleSendPingWorldPoint(WorldPackets::Party::SendPingWorldPo broadcastPingWorldPoint.Point = pingWorldPoint.Point; broadcastPingWorldPoint.Type = pingWorldPoint.Type; broadcastPingWorldPoint.PinFrameID = pingWorldPoint.PinFrameID; + broadcastPingWorldPoint.Transport = pingWorldPoint.Transport; broadcastPingWorldPoint.Write(); for (GroupReference const* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next()) diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index e166d69ac48..a91a069b6fa 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -1220,6 +1220,13 @@ void WorldSession::HandleUseCritterItem(WorldPackets::Item::UseCritterItem& useC _player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true); } +void WorldSession::HandleSortAccountBankBags(WorldPackets::Item::SortAccountBankBags& /*sortAccountBankBags*/) +{ + // TODO: Implement sorting + // Placeholder to prevent completely locking out bags clientside + SendPacket(WorldPackets::Item::BagCleanupFinished().Write()); +} + void WorldSession::HandleSortBags(WorldPackets::Item::SortBags& /*sortBags*/) { // TODO: Implement sorting diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 97f9cda44c8..f37958be579 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -265,6 +265,7 @@ void WorldSession::HandleSuspendTokenResponse(WorldPackets::Movement::SuspendTok packet.MapID = loc.Location.GetMapId(); packet.Loc.Pos = loc.Location; packet.Reason = !_player->IsBeingTeleportedSeamlessly() ? NEW_WORLD_NORMAL : NEW_WORLD_SEAMLESS; + packet.Counter = _player->GetNewWorldCounter(); SendPacket(packet.Write()); if (_player->IsBeingTeleportedSeamlessly()) diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 9047a9c83ac..5d085cf0e95 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -1824,7 +1824,8 @@ enum SpellCastResult : int32 SPELL_FAILED_CANT_FLY_HERE = 318, SPELL_FAILED_DRAGONRIDING_RIDING_REQUIREMENT = 319, SPELL_FAILED_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 320, - SPELL_FAILED_UNKNOWN = 321, + SPELL_FAILED_ITEM_CREATION_DISABLED_FOR_EVENT = 321, + SPELL_FAILED_UNKNOWN = 322, // ok cast value - here in case a future version removes SPELL_FAILED_SUCCESS and we need to use a custom value (not sent to client either way) SPELL_CAST_OK = SPELL_FAILED_SUCCESS // SKIP @@ -2466,8 +2467,48 @@ enum SpellCustomErrors SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_THE_SWIRLING_MOJO_STONE = 999, // You don't have the Swirling Mojo Stone equipped. SPELL_CUSTOM_ERROR_YOU_MUST_BE_NEAR_A_DRAGONFLIGHT_OATHSTONE = 1000, // You must be near one of the five dragonflight oathstones in the Dragon Isles. SPELL_CUSTOM_ERROR_CAN_ONLY_USE_THIS_ITEM_WHILE_AIRBORNE = 1001, // You can only use this item while airborne. + SPELL_CUSTOM_ERROR_THIS_PLAYER_IS_NOT_OPPOSITE_FACTION = 1002, // This player is not of the opposite faction. + SPELL_CUSTOM_ERROR_THIS_PLAYER_ALREADY_HAS_THIS_MOUNT = 1003, // This player already has this mount. + SPELL_CUSTOM_ERROR_YOUR_TARGET_IS_IN_WAR_MODE = 1004, // Your target is in War Mode. + SPELL_CUSTOM_ERROR_COOLDOWN_RESET = 1005, // Cooldown Reset + SPELL_CUSTOM_ERROR_SOIL_NUTRIENTS_MUST_REPLENISH = 1006, // The nutrients of this soil must replenish before further growth. + SPELL_CUSTOM_ERROR_TARGET_ALREADY_HAD_SOME_FEATHERS_PLUCKED = 1007, // The target has already had some feathers plucked. It would be rude to take more. + SPELL_CUSTOM_ERROR_THIS_CREATURE_HAS_ALREADY_BEEN_ATTUNED_WITH = 1008, // This creature has already been attuned with recently. + SPELL_CUSTOM_ERROR_YOU_ALREADY_HAVE_SOME_MULCH_PREPARED = 1009, // You already have some mulch prepared. Use your current mulch first. + SPELL_CUSTOM_ERROR_YOU_DONT_KNOW_HOW_TO_GATHER_THIS = 1010, // You don't know how to gather this. + SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_ANY_ITEMS_OF_THIS_TYPE = 1011, // You don't have any items of this type. + SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_ANY_RADIANT_REMNANTS = 1012, // You don't have any Radiant Remnants. + SPELL_CUSTOM_ERROR_TARGETS_RING_IS_ALREADY_BOUND_TO_ANOTHER_PLAYER = 1013, // Your target's ring is already bound to another player. + SPELL_CUSTOM_ERROR_TARGET_IS_NOT_WEARING_THIS_RING = 1014, // Your target is not also wearing this ring. + SPELL_CUSTOM_ERROR_CAN_ONLY_BE_USED_ON_SOCKETABLE_PVP_TWW_ITEMS = 1015, // Can only be used on socket eligible PvP items from the War Within expansion. + SPELL_CUSTOM_ERROR_HARVESTBOTS_ALREADY_ACTIVE = 1016, // Harvestbots already active. + SPELL_CUSTOM_ERROR_AIRSHIP_DAUNTLESS_IS_ALREADY_ACTIVE = 1017, // The Airship Dauntless is already active. + SPELL_CUSTOM_ERROR_CANNOT_SWAP_SPELLS_ON_COOLDOWN_IN_COMBAT = 1026, // You cannot swap spells on cooldown while in combat. + SPELL_CUSTOM_ERROR_MUST_EQUIP_CLOAK_OF_INFINITE_POTENTIAL = 1027, // You must first equip the Cloak of Infinite Potential. + SPELL_CUSTOM_ERROR_INSUFFICIENT_BRONZE = 1028, // You have insufficient Bronze to make this trade. + SPELL_CUSTOM_ERROR_REQUIRES_SKYRIDING = 1029, // Requires Skyriding + SPELL_CUSTOM_ERROR_YOU_ALREADY_OVERLOADED_THIS_GATHERING_NODE = 1030, // You have already overloaded this gathering node. + SPELL_CUSTOM_ERROR_YOU_DONT_KNOW_HOW_TO_OVERLOAD_THIS_NODE = 1031, // You do not know how to Overload this gathering node. + SPELL_CUSTOM_ERROR_TIMERUNNERS_CANNOT_TELEPORT_OUT_OF_PANDARIA = 1032, // Timerunners cannot teleport outside of Pandaria. + SPELL_CUSTOM_ERROR_SPECIALIZE_FURTHER_FOR_THESE_NOTES = 1033, // Specialize further or improve your hasty handwriting to make sense of these notes. + SPELL_CUSTOM_ERROR_THERE_IS_NOTHING_LEFT_TO_INVENT = 1034, // There is nothing left to invent and you cannot be convinced otherwise. + SPELL_CUSTOM_ERROR_PLAYER_IN_PARTY_DOESNT_HAVE_THIS_TIER_UNLOCKED = 1035, // A player in your party does not have this tier unlocked + SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_ANY_RADIANT_ECHOES = 1036, // You don't have any Radiant Echoes. + SPELL_CUSTOM_ERROR_REQUIRES_TWW_PATHFINDER_UNLOCKED = 1037, // Requires The War Within Pathfinder Unlocked to use in this area. + SPELL_CUSTOM_ERROR_CAN_ONLY_BE_USED_WHILE_IN_COMBAT = 1039, // Can only be used while in combat. + SPELL_CUSTOM_ERROR_NOT_HIGH_ENOUGH_LEVEL_TO_ENTER_A_DELVE = 1040, // You are not high enough level to enter a Delve. + SPELL_CUSTOM_ERROR_WONDROUS_WISDOMBALL_IS_NONRESPONSIVE = 1041, // For some reason the Wondrous Wisdomball is nonresponsive. + SPELL_CUSTOM_ERROR_YOU_ALREADY_HAVE_THIS_CURIO_IN_YOUR_COLLECTION = 1042, // You already have this curio in your collection. + SPELL_CUSTOM_ERROR_ALREADY_HAVE_IDENTIFIED_PROTOTYPE = 1043, // You must choose what to do with your current prototype before identifying new ones. + SPELL_CUSTOM_ERROR_YOU_ALREADY_USED_KHAZ_ALGAR_CONTRACT = 1044, // You have already used a Khaz Algar Contract this week. + SPELL_CUSTOM_ERROR_YOU_ALREADY_REVEALED_ALL_TODAY_PACT_LOCATIONS = 1051, // You have revealed or completed all of today's Pact locations. + SPELL_CUSTOM_ERROR_TIMERUNNERS_CANNOT_CAST_THIS_SPELL = 1053, // Timerunners cannot cast this spell. + SPELL_CUSTOM_ERROR_THIS_EMBLEM_HAS_NO_MAGIC_STORED = 2001, // The emblem has no magic stored. SPELL_CUSTOM_ERROR_YOU_MUST_BE_IN_VISAGE_FORM = 2222, // You must be in visage form to do this. + SPELL_CUSTOM_ERROR_A_TRIAL_IS_BEING_UNDERGONE_NEARBY = 2223, // A Trial is already being undergone nearby. + SPELL_CUSTOM_ERROR_YOU_CANNOT_USE_VANTUS_RUNE_IN_STORY_MODE = 2224, // You cannot use a Vantus Rune in Story Mode. SPELL_CUSTOM_ERROR_TOO_CLOSE_TO_ANOTHER_MOLTEN_RITUAL = 2424, // You can't begin a molten ritual this close to another one. + SPELL_CUSTOM_ERROR_EARTHEN_CANNOT_CONSUME_REGULAR_FOOD_OR_DRINK = 2425, // Earthen cannot consume traditional food or drink. }; enum StealthType @@ -7033,1107 +7074,1134 @@ enum class GameError : uint32 ERR_ONLY_ONE_QUIVER = 35, ERR_NO_BANK_SLOT = 36, ERR_NO_BANK_HERE = 37, - ERR_ITEM_LOCKED = 38, - ERR_2HANDED_EQUIPPED = 39, - ERR_VENDOR_NOT_INTERESTED = 40, - ERR_VENDOR_REFUSE_SCRAPPABLE_AZERITE = 41, - ERR_VENDOR_HATES_YOU = 42, - ERR_VENDOR_SOLD_OUT = 43, - ERR_VENDOR_TOO_FAR = 44, - ERR_VENDOR_DOESNT_BUY = 45, - ERR_NOT_ENOUGH_MONEY = 46, - ERR_RECEIVE_ITEM_S = 47, - ERR_DROP_BOUND_ITEM = 48, - ERR_TRADE_BOUND_ITEM = 49, - ERR_TRADE_QUEST_ITEM = 50, - ERR_TRADE_TEMP_ENCHANT_BOUND = 51, - ERR_TRADE_GROUND_ITEM = 52, - ERR_TRADE_BAG = 53, - ERR_TRADE_FACTION_SPECIFIC = 54, - ERR_SPELL_FAILED_S = 55, - ERR_ITEM_COOLDOWN = 56, - ERR_POTION_COOLDOWN = 57, - ERR_FOOD_COOLDOWN = 58, - ERR_SPELL_COOLDOWN = 59, - ERR_ABILITY_COOLDOWN = 60, - ERR_SPELL_ALREADY_KNOWN_S = 61, - ERR_PET_SPELL_ALREADY_KNOWN_S = 62, - ERR_PROFICIENCY_GAINED_S = 63, - ERR_SKILL_GAINED_S = 64, - ERR_SKILL_UP_SI = 65, - ERR_LEARN_SPELL_S = 66, - ERR_LEARN_ABILITY_S = 67, - ERR_LEARN_PASSIVE_S = 68, - ERR_LEARN_RECIPE_S = 69, - ERR_PROFESSIONS_RECIPE_DISCOVERY_S = 70, - ERR_LEARN_COMPANION_S = 71, - ERR_LEARN_MOUNT_S = 72, - ERR_LEARN_TOY_S = 73, - ERR_LEARN_HEIRLOOM_S = 74, - ERR_LEARN_TRANSMOG_S = 75, - ERR_COMPLETED_TRANSMOG_SET_S = 76, - ERR_APPEARANCE_ALREADY_LEARNED = 77, - ERR_REVOKE_TRANSMOG_S = 78, - ERR_INVITE_PLAYER_S = 79, - ERR_SUGGEST_INVITE_PLAYER_S = 80, - ERR_INFORM_SUGGEST_INVITE_S = 81, - ERR_INFORM_SUGGEST_INVITE_SS = 82, - ERR_REQUEST_JOIN_PLAYER_S = 83, - ERR_INVITE_SELF = 84, - ERR_INVITED_TO_GROUP_SS = 85, - ERR_INVITED_ALREADY_IN_GROUP_SS = 86, - ERR_ALREADY_IN_GROUP_S = 87, - ERR_REQUESTED_INVITE_TO_GROUP_SS = 88, - ERR_CROSS_REALM_RAID_INVITE = 89, - ERR_PLAYER_BUSY_S = 90, - ERR_NEW_LEADER_S = 91, - ERR_NEW_LEADER_YOU = 92, - ERR_NEW_GUIDE_S = 93, - ERR_NEW_GUIDE_YOU = 94, - ERR_LEFT_GROUP_S = 95, - ERR_LEFT_GROUP_YOU = 96, - ERR_GROUP_DISBANDED = 97, - ERR_DECLINE_GROUP_S = 98, - ERR_DECLINE_GROUP_REQUEST_S = 99, - ERR_JOINED_GROUP_S = 100, - ERR_UNINVITE_YOU = 101, - ERR_BAD_PLAYER_NAME_S = 102, - ERR_NOT_IN_GROUP = 103, - ERR_TARGET_NOT_IN_GROUP_S = 104, - ERR_TARGET_NOT_IN_INSTANCE_S = 105, - ERR_NOT_IN_INSTANCE_GROUP = 106, - ERR_GROUP_FULL = 107, - ERR_NOT_LEADER = 108, - ERR_PLAYER_DIED_S = 109, - ERR_GUILD_CREATE_S = 110, - ERR_GUILD_INVITE_S = 111, - ERR_INVITED_TO_GUILD_SSS = 112, - ERR_ALREADY_IN_GUILD_S = 113, - ERR_ALREADY_INVITED_TO_GUILD_S = 114, - ERR_INVITED_TO_GUILD = 115, - ERR_ALREADY_IN_GUILD = 116, - ERR_GUILD_ACCEPT = 117, - ERR_GUILD_DECLINE_S = 118, - ERR_GUILD_DECLINE_AUTO_S = 119, - ERR_GUILD_PERMISSIONS = 120, - ERR_GUILD_JOIN_S = 121, - ERR_GUILD_FOUNDER_S = 122, - ERR_GUILD_PROMOTE_SSS = 123, - ERR_GUILD_DEMOTE_SS = 124, - ERR_GUILD_DEMOTE_SSS = 125, - ERR_GUILD_INVITE_SELF = 126, - ERR_GUILD_QUIT_S = 127, - ERR_GUILD_LEAVE_S = 128, - ERR_GUILD_REMOVE_SS = 129, - ERR_GUILD_REMOVE_SELF = 130, - ERR_GUILD_DISBAND_S = 131, - ERR_GUILD_DISBAND_SELF = 132, - ERR_GUILD_LEADER_S = 133, - ERR_GUILD_LEADER_SELF = 134, - ERR_GUILD_PLAYER_NOT_FOUND_S = 135, - ERR_GUILD_PLAYER_NOT_IN_GUILD_S = 136, - ERR_GUILD_PLAYER_NOT_IN_GUILD = 137, - ERR_GUILD_BANK_NOT_AVAILABLE = 138, - ERR_GUILD_CANT_PROMOTE_S = 139, - ERR_GUILD_CANT_DEMOTE_S = 140, - ERR_GUILD_NOT_IN_A_GUILD = 141, - ERR_GUILD_INTERNAL = 142, - ERR_GUILD_LEADER_IS_S = 143, - ERR_GUILD_LEADER_CHANGED_SS = 144, - ERR_GUILD_DISBANDED = 145, - ERR_GUILD_NOT_ALLIED = 146, - ERR_GUILD_NEW_LEADER_NOT_ALLIED = 147, - ERR_GUILD_LEADER_LEAVE = 148, - ERR_GUILD_RANKS_LOCKED = 149, - ERR_GUILD_RANK_IN_USE = 150, - ERR_GUILD_RANK_TOO_HIGH_S = 151, - ERR_GUILD_RANK_TOO_LOW_S = 152, - ERR_GUILD_NAME_EXISTS_S = 153, - ERR_GUILD_WITHDRAW_LIMIT = 154, - ERR_GUILD_NOT_ENOUGH_MONEY = 155, - ERR_GUILD_TOO_MUCH_MONEY = 156, - ERR_GUILD_BANK_CONJURED_ITEM = 157, - ERR_GUILD_BANK_EQUIPPED_ITEM = 158, - ERR_GUILD_BANK_BOUND_ITEM = 159, - ERR_GUILD_BANK_QUEST_ITEM = 160, - ERR_GUILD_BANK_WRAPPED_ITEM = 161, - ERR_GUILD_BANK_FULL = 162, - ERR_GUILD_BANK_WRONG_TAB = 163, - ERR_NO_GUILD_CHARTER = 164, - ERR_OUT_OF_RANGE = 165, - ERR_PLAYER_DEAD = 166, - ERR_CLIENT_LOCKED_OUT = 167, - ERR_CLIENT_ON_TRANSPORT = 168, - ERR_KILLED_BY_S = 169, - ERR_LOOT_LOCKED = 170, - ERR_LOOT_TOO_FAR = 171, - ERR_LOOT_DIDNT_KILL = 172, - ERR_LOOT_BAD_FACING = 173, - ERR_LOOT_NOTSTANDING = 174, - ERR_LOOT_STUNNED = 175, - ERR_LOOT_NO_UI = 176, - ERR_LOOT_WHILE_INVULNERABLE = 177, - ERR_NO_LOOT = 178, - ERR_QUEST_ACCEPTED_S = 179, - ERR_QUEST_COMPLETE_S = 180, - ERR_QUEST_FAILED_S = 181, - ERR_QUEST_FAILED_BAG_FULL_S = 182, - ERR_QUEST_FAILED_MAX_COUNT_S = 183, - ERR_QUEST_FAILED_LOW_LEVEL = 184, - ERR_QUEST_FAILED_MISSING_ITEMS = 185, - ERR_QUEST_FAILED_WRONG_RACE = 186, - ERR_QUEST_FAILED_NOT_ENOUGH_MONEY = 187, - ERR_QUEST_FAILED_EXPANSION = 188, - ERR_QUEST_ONLY_ONE_TIMED = 189, - ERR_QUEST_NEED_PREREQS = 190, - ERR_QUEST_NEED_PREREQS_CUSTOM = 191, - ERR_QUEST_ALREADY_ON = 192, - ERR_QUEST_ALREADY_DONE = 193, - ERR_QUEST_ALREADY_DONE_DAILY = 194, - ERR_QUEST_HAS_IN_PROGRESS = 195, - ERR_QUEST_REWARD_EXP_I = 196, - ERR_QUEST_REWARD_MONEY_S = 197, - ERR_QUEST_MUST_CHOOSE = 198, - ERR_QUEST_LOG_FULL = 199, - ERR_COMBAT_DAMAGE_SSI = 200, - ERR_INSPECT_S = 201, - ERR_CANT_USE_ITEM = 202, - ERR_CANT_USE_ITEM_IN_ARENA = 203, - ERR_CANT_USE_ITEM_IN_RATED_BATTLEGROUND = 204, - ERR_MUST_EQUIP_ITEM = 205, - ERR_PASSIVE_ABILITY = 206, - ERR_2HSKILLNOTFOUND = 207, - ERR_NO_ATTACK_TARGET = 208, - ERR_INVALID_ATTACK_TARGET = 209, - ERR_ATTACK_PVP_TARGET_WHILE_UNFLAGGED = 210, - ERR_ATTACK_STUNNED = 211, - ERR_ATTACK_PACIFIED = 212, - ERR_ATTACK_MOUNTED = 213, - ERR_ATTACK_FLEEING = 214, - ERR_ATTACK_CONFUSED = 215, - ERR_ATTACK_CHARMED = 216, - ERR_ATTACK_DEAD = 217, - ERR_ATTACK_PREVENTED_BY_MECHANIC_S = 218, - ERR_ATTACK_CHANNEL = 219, - ERR_TAXISAMENODE = 220, - ERR_TAXINOSUCHPATH = 221, - ERR_TAXIUNSPECIFIEDSERVERERROR = 222, - ERR_TAXINOTENOUGHMONEY = 223, - ERR_TAXITOOFARAWAY = 224, - ERR_TAXINOVENDORNEARBY = 225, - ERR_TAXINOTVISITED = 226, - ERR_TAXIPLAYERBUSY = 227, - ERR_TAXIPLAYERALREADYMOUNTED = 228, - ERR_TAXIPLAYERSHAPESHIFTED = 229, - ERR_TAXIPLAYERMOVING = 230, - ERR_TAXINOPATHS = 231, - ERR_TAXINOTELIGIBLE = 232, - ERR_TAXINOTSTANDING = 233, - ERR_TAXIINCOMBAT = 234, - ERR_NO_REPLY_TARGET = 235, - ERR_GENERIC_NO_TARGET = 236, - ERR_INITIATE_TRADE_S = 237, - ERR_TRADE_REQUEST_S = 238, - ERR_TRADE_BLOCKED_S = 239, - ERR_TRADE_TARGET_DEAD = 240, - ERR_TRADE_TOO_FAR = 241, - ERR_TRADE_CANCELLED = 242, - ERR_TRADE_COMPLETE = 243, - ERR_TRADE_BAG_FULL = 244, - ERR_TRADE_TARGET_BAG_FULL = 245, - ERR_TRADE_MAX_COUNT_EXCEEDED = 246, - ERR_TRADE_TARGET_MAX_COUNT_EXCEEDED = 247, - ERR_INVENTORY_TRADE_TOO_MANY_UNIQUE_ITEM = 248, - ERR_ALREADY_TRADING = 249, - ERR_MOUNT_INVALIDMOUNTEE = 250, - ERR_MOUNT_TOOFARAWAY = 251, - ERR_MOUNT_ALREADYMOUNTED = 252, - ERR_MOUNT_NOTMOUNTABLE = 253, - ERR_MOUNT_NOTYOURPET = 254, - ERR_MOUNT_OTHER = 255, - ERR_MOUNT_LOOTING = 256, - ERR_MOUNT_RACECANTMOUNT = 257, - ERR_MOUNT_SHAPESHIFTED = 258, - ERR_MOUNT_NO_FAVORITES = 259, - ERR_MOUNT_NO_MOUNTS = 260, - ERR_DISMOUNT_NOPET = 261, - ERR_DISMOUNT_NOTMOUNTED = 262, - ERR_DISMOUNT_NOTYOURPET = 263, - ERR_SPELL_FAILED_TOTEMS = 264, - ERR_SPELL_FAILED_REAGENTS = 265, - ERR_SPELL_FAILED_REAGENTS_GENERIC = 266, - ERR_SPELL_FAILED_OPTIONAL_REAGENTS = 267, - ERR_CANT_TRADE_GOLD = 268, - ERR_SPELL_FAILED_EQUIPPED_ITEM = 269, - ERR_SPELL_FAILED_EQUIPPED_ITEM_CLASS_S = 270, - ERR_SPELL_FAILED_SHAPESHIFT_FORM_S = 271, - ERR_SPELL_FAILED_ANOTHER_IN_PROGRESS = 272, - ERR_BADATTACKFACING = 273, - ERR_BADATTACKPOS = 274, - ERR_CHEST_IN_USE = 275, - ERR_USE_CANT_OPEN = 276, - ERR_USE_LOCKED = 277, - ERR_DOOR_LOCKED = 278, - ERR_BUTTON_LOCKED = 279, - ERR_USE_LOCKED_WITH_ITEM_S = 280, - ERR_USE_LOCKED_WITH_SPELL_S = 281, - ERR_USE_LOCKED_WITH_SPELL_KNOWN_SI = 282, - ERR_USE_TOO_FAR = 283, - ERR_USE_BAD_ANGLE = 284, - ERR_USE_OBJECT_MOVING = 285, - ERR_USE_SPELL_FOCUS = 286, - ERR_USE_DESTROYED = 287, - ERR_SET_LOOT_FREEFORALL = 288, - ERR_SET_LOOT_ROUNDROBIN = 289, - ERR_SET_LOOT_MASTER = 290, - ERR_SET_LOOT_GROUP = 291, - ERR_SET_LOOT_THRESHOLD_S = 292, - ERR_NEW_LOOT_MASTER_S = 293, - ERR_SPECIFY_MASTER_LOOTER = 294, - ERR_LOOT_SPEC_CHANGED_S = 295, - ERR_TAME_FAILED = 296, - ERR_CHAT_WHILE_DEAD = 297, - ERR_CHAT_PLAYER_NOT_FOUND_S = 298, - ERR_NEWTAXIPATH = 299, - ERR_NO_PET = 300, - ERR_NOTYOURPET = 301, - ERR_PET_NOT_RENAMEABLE = 302, - ERR_QUEST_OBJECTIVE_COMPLETE_S = 303, - ERR_QUEST_UNKNOWN_COMPLETE = 304, - ERR_QUEST_ADD_KILL_SII = 305, - ERR_QUEST_ADD_FOUND_SII = 306, - ERR_QUEST_ADD_ITEM_SII = 307, - ERR_QUEST_ADD_PLAYER_KILL_SII = 308, - ERR_CANNOTCREATEDIRECTORY = 309, - ERR_CANNOTCREATEFILE = 310, - ERR_PLAYER_WRONG_FACTION = 311, - ERR_PLAYER_IS_NEUTRAL = 312, - ERR_BANKSLOT_FAILED_TOO_MANY = 313, - ERR_BANKSLOT_INSUFFICIENT_FUNDS = 314, - ERR_BANKSLOT_NOTBANKER = 315, - ERR_FRIEND_DB_ERROR = 316, - ERR_FRIEND_LIST_FULL = 317, - ERR_FRIEND_ADDED_S = 318, - ERR_BATTLETAG_FRIEND_ADDED_S = 319, - ERR_FRIEND_ONLINE_SS = 320, - ERR_FRIEND_OFFLINE_S = 321, - ERR_FRIEND_NOT_FOUND = 322, - ERR_FRIEND_WRONG_FACTION = 323, - ERR_FRIEND_REMOVED_S = 324, - ERR_BATTLETAG_FRIEND_REMOVED_S = 325, - ERR_FRIEND_ERROR = 326, - ERR_FRIEND_ALREADY_S = 327, - ERR_FRIEND_SELF = 328, - ERR_FRIEND_DELETED = 329, - ERR_IGNORE_FULL = 330, - ERR_IGNORE_SELF = 331, - ERR_IGNORE_NOT_FOUND = 332, - ERR_IGNORE_ALREADY_S = 333, - ERR_IGNORE_ADDED_S = 334, - ERR_IGNORE_REMOVED_S = 335, - ERR_IGNORE_AMBIGUOUS = 336, - ERR_IGNORE_DELETED = 337, - ERR_ONLY_ONE_BOLT = 338, - ERR_ONLY_ONE_AMMO = 339, - ERR_SPELL_FAILED_EQUIPPED_SPECIFIC_ITEM = 340, - ERR_WRONG_BAG_TYPE_SUBCLASS = 341, - ERR_CANT_WRAP_STACKABLE = 342, - ERR_CANT_WRAP_EQUIPPED = 343, - ERR_CANT_WRAP_WRAPPED = 344, - ERR_CANT_WRAP_BOUND = 345, - ERR_CANT_WRAP_UNIQUE = 346, - ERR_CANT_WRAP_BAGS = 347, - ERR_OUT_OF_MANA = 348, - ERR_OUT_OF_RAGE = 349, - ERR_OUT_OF_FOCUS = 350, - ERR_OUT_OF_ENERGY = 351, - ERR_OUT_OF_CHI = 352, - ERR_OUT_OF_HEALTH = 353, - ERR_OUT_OF_RUNES = 354, - ERR_OUT_OF_RUNIC_POWER = 355, - ERR_OUT_OF_SOUL_SHARDS = 356, - ERR_OUT_OF_LUNAR_POWER = 357, - ERR_OUT_OF_HOLY_POWER = 358, - ERR_OUT_OF_MAELSTROM = 359, - ERR_OUT_OF_COMBO_POINTS = 360, - ERR_OUT_OF_INSANITY = 361, - ERR_OUT_OF_ESSENCE = 362, - ERR_OUT_OF_ARCANE_CHARGES = 363, - ERR_OUT_OF_FURY = 364, - ERR_OUT_OF_PAIN = 365, - ERR_OUT_OF_POWER_DISPLAY = 366, - ERR_LOOT_GONE = 367, - ERR_MOUNT_FORCEDDISMOUNT = 368, - ERR_AUTOFOLLOW_TOO_FAR = 369, - ERR_UNIT_NOT_FOUND = 370, - ERR_INVALID_FOLLOW_TARGET = 371, - ERR_INVALID_FOLLOW_PVP_COMBAT = 372, - ERR_INVALID_FOLLOW_TARGET_PVP_COMBAT = 373, - ERR_INVALID_INSPECT_TARGET = 374, - ERR_GUILDEMBLEM_SUCCESS = 375, - ERR_GUILDEMBLEM_INVALID_TABARD_COLORS = 376, - ERR_GUILDEMBLEM_NOGUILD = 377, - ERR_GUILDEMBLEM_NOTGUILDMASTER = 378, - ERR_GUILDEMBLEM_NOTENOUGHMONEY = 379, - ERR_GUILDEMBLEM_INVALIDVENDOR = 380, - ERR_EMBLEMERROR_NOTABARDGEOSET = 381, - ERR_SPELL_OUT_OF_RANGE = 382, - ERR_COMMAND_NEEDS_TARGET = 383, - ERR_NOAMMO_S = 384, - ERR_TOOBUSYTOFOLLOW = 385, - ERR_DUEL_REQUESTED = 386, - ERR_DUEL_CANCELLED = 387, - ERR_DEATHBINDALREADYBOUND = 388, - ERR_DEATHBIND_SUCCESS_S = 389, - ERR_NOEMOTEWHILERUNNING = 390, - ERR_ZONE_EXPLORED = 391, - ERR_ZONE_EXPLORED_XP = 392, - ERR_INVALID_ITEM_TARGET = 393, - ERR_INVALID_QUEST_TARGET = 394, - ERR_IGNORING_YOU_S = 395, - ERR_FISH_NOT_HOOKED = 396, - ERR_FISH_ESCAPED = 397, - ERR_SPELL_FAILED_NOTUNSHEATHED = 398, - ERR_PETITION_OFFERED_S = 399, - ERR_PETITION_SIGNED = 400, - ERR_PETITION_SIGNED_S = 401, - ERR_PETITION_DECLINED_S = 402, - ERR_PETITION_ALREADY_SIGNED = 403, - ERR_PETITION_RESTRICTED_ACCOUNT_TRIAL = 404, - ERR_PETITION_ALREADY_SIGNED_OTHER = 405, - ERR_PETITION_IN_GUILD = 406, - ERR_PETITION_CREATOR = 407, - ERR_PETITION_NOT_ENOUGH_SIGNATURES = 408, - ERR_PETITION_NOT_SAME_SERVER = 409, - ERR_PETITION_FULL = 410, - ERR_PETITION_ALREADY_SIGNED_BY_S = 411, - ERR_GUILD_NAME_INVALID = 412, - ERR_SPELL_UNLEARNED_S = 413, - ERR_PET_SPELL_ROOTED = 414, - ERR_PET_SPELL_AFFECTING_COMBAT = 415, - ERR_PET_SPELL_OUT_OF_RANGE = 416, - ERR_PET_SPELL_NOT_BEHIND = 417, - ERR_PET_SPELL_TARGETS_DEAD = 418, - ERR_PET_SPELL_DEAD = 419, - ERR_PET_SPELL_NOPATH = 420, - ERR_ITEM_CANT_BE_DESTROYED = 421, - ERR_TICKET_ALREADY_EXISTS = 422, - ERR_TICKET_CREATE_ERROR = 423, - ERR_TICKET_UPDATE_ERROR = 424, - ERR_TICKET_DB_ERROR = 425, - ERR_TICKET_NO_TEXT = 426, - ERR_TICKET_TEXT_TOO_LONG = 427, - ERR_OBJECT_IS_BUSY = 428, - ERR_EXHAUSTION_WELLRESTED = 429, - ERR_EXHAUSTION_RESTED = 430, - ERR_EXHAUSTION_NORMAL = 431, - ERR_EXHAUSTION_TIRED = 432, - ERR_EXHAUSTION_EXHAUSTED = 433, - ERR_NO_ITEMS_WHILE_SHAPESHIFTED = 434, - ERR_CANT_INTERACT_SHAPESHIFTED = 435, - ERR_REALM_NOT_FOUND = 436, - ERR_MAIL_QUEST_ITEM = 437, - ERR_MAIL_BOUND_ITEM = 438, - ERR_MAIL_CONJURED_ITEM = 439, - ERR_MAIL_BAG = 440, - ERR_MAIL_TO_SELF = 441, - ERR_MAIL_TARGET_NOT_FOUND = 442, - ERR_MAIL_DATABASE_ERROR = 443, - ERR_MAIL_DELETE_ITEM_ERROR = 444, - ERR_MAIL_WRAPPED_COD = 445, - ERR_MAIL_CANT_SEND_REALM = 446, - ERR_MAIL_TEMP_RETURN_OUTAGE = 447, - ERR_MAIL_RECEPIENT_CANT_RECEIVE_MAIL = 448, - ERR_MAIL_SENT = 449, - ERR_MAIL_TARGET_IS_TRIAL = 450, - ERR_NOT_HAPPY_ENOUGH = 451, - ERR_USE_CANT_IMMUNE = 452, - ERR_CANT_BE_DISENCHANTED = 453, - ERR_CANT_USE_DISARMED = 454, - ERR_AUCTION_DATABASE_ERROR = 455, - ERR_AUCTION_HIGHER_BID = 456, - ERR_AUCTION_ALREADY_BID = 457, - ERR_AUCTION_OUTBID_S = 458, - ERR_AUCTION_WON_S = 459, - ERR_AUCTION_REMOVED_S = 460, - ERR_AUCTION_BID_PLACED = 461, - ERR_LOGOUT_FAILED = 462, - ERR_QUEST_PUSH_SUCCESS_S = 463, - ERR_QUEST_PUSH_INVALID_S = 464, - ERR_QUEST_PUSH_INVALID_TO_RECIPIENT_S = 465, - ERR_QUEST_PUSH_ACCEPTED_S = 466, - ERR_QUEST_PUSH_DECLINED_S = 467, - ERR_QUEST_PUSH_BUSY_S = 468, - ERR_QUEST_PUSH_DEAD_S = 469, - ERR_QUEST_PUSH_DEAD_TO_RECIPIENT_S = 470, - ERR_QUEST_PUSH_LOG_FULL_S = 471, - ERR_QUEST_PUSH_LOG_FULL_TO_RECIPIENT_S = 472, - ERR_QUEST_PUSH_ONQUEST_S = 473, - ERR_QUEST_PUSH_ONQUEST_TO_RECIPIENT_S = 474, - ERR_QUEST_PUSH_ALREADY_DONE_S = 475, - ERR_QUEST_PUSH_ALREADY_DONE_TO_RECIPIENT_S = 476, - ERR_QUEST_PUSH_NOT_DAILY_S = 477, - ERR_QUEST_PUSH_TIMER_EXPIRED_S = 478, - ERR_QUEST_PUSH_NOT_IN_PARTY_S = 479, - ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S = 480, - ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_TO_RECIPIENT_S = 481, - ERR_QUEST_PUSH_NOT_ALLOWED_S = 482, - ERR_QUEST_PUSH_PREREQUISITE_S = 483, - ERR_QUEST_PUSH_PREREQUISITE_TO_RECIPIENT_S = 484, - ERR_QUEST_PUSH_LOW_LEVEL_S = 485, - ERR_QUEST_PUSH_LOW_LEVEL_TO_RECIPIENT_S = 486, - ERR_QUEST_PUSH_HIGH_LEVEL_S = 487, - ERR_QUEST_PUSH_HIGH_LEVEL_TO_RECIPIENT_S = 488, - ERR_QUEST_PUSH_CLASS_S = 489, - ERR_QUEST_PUSH_CLASS_TO_RECIPIENT_S = 490, - ERR_QUEST_PUSH_RACE_S = 491, - ERR_QUEST_PUSH_RACE_TO_RECIPIENT_S = 492, - ERR_QUEST_PUSH_LOW_FACTION_S = 493, - ERR_QUEST_PUSH_LOW_FACTION_TO_RECIPIENT_S = 494, - ERR_QUEST_PUSH_HIGH_FACTION_S = 495, - ERR_QUEST_PUSH_HIGH_FACTION_TO_RECIPIENT_S = 496, - ERR_QUEST_PUSH_EXPANSION_S = 497, - ERR_QUEST_PUSH_EXPANSION_TO_RECIPIENT_S = 498, - ERR_QUEST_PUSH_NOT_GARRISON_OWNER_S = 499, - ERR_QUEST_PUSH_NOT_GARRISON_OWNER_TO_RECIPIENT_S = 500, - ERR_QUEST_PUSH_WRONG_COVENANT_S = 501, - ERR_QUEST_PUSH_WRONG_COVENANT_TO_RECIPIENT_S = 502, - ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_S = 503, - ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_TO_RECIPIENT_S = 504, - ERR_QUEST_PUSH_WRONG_FACTION_S = 505, - ERR_QUEST_PUSH_WRONG_FACTION_TO_RECIPIENT_S = 506, - ERR_QUEST_PUSH_CROSS_FACTION_RESTRICTED_S = 507, - ERR_RAID_GROUP_LOWLEVEL = 508, - ERR_RAID_GROUP_ONLY = 509, - ERR_RAID_GROUP_FULL = 510, - ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 511, - ERR_CORPSE_IS_NOT_IN_INSTANCE = 512, - ERR_PVP_KILL_HONORABLE = 513, - ERR_PVP_KILL_DISHONORABLE = 514, - ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 515, - ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 516, - ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 517, - ERR_AUTOLOOT_MONEY_S = 518, - ERR_GENERIC_STUNNED = 519, - ERR_GENERIC_THROTTLE = 520, - ERR_CLUB_FINDER_SEARCHING_TOO_FAST = 521, - ERR_TARGET_STUNNED = 522, - ERR_MUST_REPAIR_DURABILITY = 523, - ERR_RAID_YOU_JOINED = 524, - ERR_RAID_YOU_LEFT = 525, - ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 526, - ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 527, - ERR_RAID_MEMBER_ADDED_S = 528, - ERR_RAID_MEMBER_REMOVED_S = 529, - ERR_INSTANCE_GROUP_ADDED_S = 530, - ERR_INSTANCE_GROUP_REMOVED_S = 531, - ERR_CLICK_ON_ITEM_TO_FEED = 532, - ERR_TOO_MANY_CHAT_CHANNELS = 533, - ERR_LOOT_ROLL_PENDING = 534, - ERR_LOOT_PLAYER_NOT_FOUND = 535, - ERR_NOT_IN_RAID = 536, - ERR_LOGGING_OUT = 537, - ERR_TARGET_LOGGING_OUT = 538, - ERR_NOT_WHILE_MOUNTED = 539, - ERR_NOT_WHILE_SHAPESHIFTED = 540, - ERR_NOT_IN_COMBAT = 541, - ERR_NOT_WHILE_DISARMED = 542, - ERR_PET_BROKEN = 543, - ERR_TALENT_WIPE_ERROR = 544, - ERR_SPEC_WIPE_ERROR = 545, - ERR_GLYPH_WIPE_ERROR = 546, - ERR_PET_SPEC_WIPE_ERROR = 547, - ERR_FEIGN_DEATH_RESISTED = 548, - ERR_MEETING_STONE_IN_QUEUE_S = 549, - ERR_MEETING_STONE_LEFT_QUEUE_S = 550, - ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 551, - ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 552, - ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 553, - ERR_MEETING_STONE_SUCCESS = 554, - ERR_MEETING_STONE_IN_PROGRESS = 555, - ERR_MEETING_STONE_MEMBER_ADDED_S = 556, - ERR_MEETING_STONE_GROUP_FULL = 557, - ERR_MEETING_STONE_NOT_LEADER = 558, - ERR_MEETING_STONE_INVALID_LEVEL = 559, - ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 560, - ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 561, - ERR_MEETING_STONE_MUST_BE_LEADER = 562, - ERR_MEETING_STONE_NO_RAID_GROUP = 563, - ERR_MEETING_STONE_NEED_PARTY = 564, - ERR_MEETING_STONE_NOT_FOUND = 565, - ERR_MEETING_STONE_TARGET_IN_VEHICLE = 566, - ERR_GUILDEMBLEM_SAME = 567, - ERR_EQUIP_TRADE_ITEM = 568, - ERR_PVP_TOGGLE_ON = 569, - ERR_PVP_TOGGLE_OFF = 570, - ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 571, - ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 572, - ERR_GROUP_JOIN_BATTLEGROUND_S = 573, - ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 574, - ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 575, - ERR_SOLO_JOIN_BATTLEGROUND_S = 576, - ERR_JOIN_SINGLE_SCENARIO_S = 577, - ERR_BATTLEGROUND_TOO_MANY_QUEUES = 578, - ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 579, - ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 580, - ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 581, - ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 582, - ERR_ALREADY_IN_ARENA_TEAM_S = 583, - ERR_INVALID_PROMOTION_CODE = 584, - ERR_BG_PLAYER_JOINED_SS = 585, - ERR_BG_PLAYER_LEFT_S = 586, - ERR_RESTRICTED_ACCOUNT = 587, - ERR_RESTRICTED_ACCOUNT_TRIAL = 588, - ERR_PLAY_TIME_EXCEEDED = 589, - ERR_APPROACHING_PARTIAL_PLAY_TIME = 590, - ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 591, - ERR_APPROACHING_NO_PLAY_TIME = 592, - ERR_APPROACHING_NO_PLAY_TIME_2 = 593, - ERR_UNHEALTHY_TIME = 594, - ERR_CHAT_RESTRICTED_TRIAL = 595, - ERR_CHAT_THROTTLED = 596, - ERR_MAIL_REACHED_CAP = 597, - ERR_INVALID_RAID_TARGET = 598, - ERR_RAID_LEADER_READY_CHECK_START_S = 599, - ERR_READY_CHECK_IN_PROGRESS = 600, - ERR_READY_CHECK_THROTTLED = 601, - ERR_DUNGEON_DIFFICULTY_FAILED = 602, - ERR_DUNGEON_DIFFICULTY_CHANGED_S = 603, - ERR_TRADE_WRONG_REALM = 604, - ERR_TRADE_NOT_ON_TAPLIST = 605, - ERR_CHAT_PLAYER_AMBIGUOUS_S = 606, - ERR_LOOT_CANT_LOOT_THAT_NOW = 607, - ERR_LOOT_MASTER_INV_FULL = 608, - ERR_LOOT_MASTER_UNIQUE_ITEM = 609, - ERR_LOOT_MASTER_OTHER = 610, - ERR_FILTERING_YOU_S = 611, - ERR_USE_PREVENTED_BY_MECHANIC_S = 612, - ERR_ITEM_UNIQUE_EQUIPPABLE = 613, - ERR_LFG_LEADER_IS_LFM_S = 614, - ERR_LFG_PENDING = 615, - ERR_CANT_SPEAK_LANGAGE = 616, - ERR_VENDOR_MISSING_TURNINS = 617, - ERR_BATTLEGROUND_NOT_IN_TEAM = 618, - ERR_NOT_IN_BATTLEGROUND = 619, - ERR_NOT_ENOUGH_HONOR_POINTS = 620, - ERR_NOT_ENOUGH_ARENA_POINTS = 621, - ERR_SOCKETING_REQUIRES_META_GEM = 622, - ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 623, - ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 624, - ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 625, - ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 626, - ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 627, - ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 628, - ERR_ITEM_MAX_COUNT_SOCKETED = 629, - ERR_SYSTEM_DISABLED = 630, - ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 631, - ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 632, - ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 633, - ERR_USER_SQUELCHED = 634, - ERR_ACCOUNT_SILENCED = 635, - ERR_PARTY_MEMBER_SILENCED = 636, - ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 637, - ERR_TOO_MUCH_GOLD = 638, - ERR_NOT_BARBER_SITTING = 639, - ERR_QUEST_FAILED_CAIS = 640, - ERR_INVITE_RESTRICTED_TRIAL = 641, - ERR_VOICE_IGNORE_FULL = 642, - ERR_VOICE_IGNORE_SELF = 643, - ERR_VOICE_IGNORE_NOT_FOUND = 644, - ERR_VOICE_IGNORE_ALREADY_S = 645, - ERR_VOICE_IGNORE_ADDED_S = 646, - ERR_VOICE_IGNORE_REMOVED_S = 647, - ERR_VOICE_IGNORE_AMBIGUOUS = 648, - ERR_VOICE_IGNORE_DELETED = 649, - ERR_UNKNOWN_MACRO_OPTION_S = 650, - ERR_NOT_DURING_ARENA_MATCH = 651, - ERR_NOT_IN_RATED_BATTLEGROUND = 652, - ERR_PLAYER_SILENCED = 653, - ERR_PLAYER_UNSILENCED = 654, - ERR_COMSAT_DISCONNECT = 655, - ERR_COMSAT_RECONNECT_ATTEMPT = 656, - ERR_COMSAT_CONNECT_FAIL = 657, - ERR_MAIL_INVALID_ATTACHMENT_SLOT = 658, - ERR_MAIL_TOO_MANY_ATTACHMENTS = 659, - ERR_MAIL_INVALID_ATTACHMENT = 660, - ERR_MAIL_ATTACHMENT_EXPIRED = 661, - ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 662, - ERR_PROFANE_CHAT_NAME = 663, - ERR_PLAYER_SILENCED_ECHO = 664, - ERR_PLAYER_UNSILENCED_ECHO = 665, - ERR_LOOT_CANT_LOOT_THAT = 666, - ERR_ARENA_EXPIRED_CAIS = 667, - ERR_GROUP_ACTION_THROTTLED = 668, - ERR_ALREADY_PICKPOCKETED = 669, - ERR_NAME_INVALID = 670, - ERR_NAME_NO_NAME = 671, - ERR_NAME_TOO_SHORT = 672, - ERR_NAME_TOO_LONG = 673, - ERR_NAME_MIXED_LANGUAGES = 674, - ERR_NAME_PROFANE = 675, - ERR_NAME_RESERVED = 676, - ERR_NAME_THREE_CONSECUTIVE = 677, - ERR_NAME_INVALID_SPACE = 678, - ERR_NAME_CONSECUTIVE_SPACES = 679, - ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 680, - ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 681, - ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 682, - ERR_RECRUIT_A_FRIEND_NOT_LINKED = 683, - ERR_RECRUIT_A_FRIEND_NOT_NOW = 684, - ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 685, - ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 686, - ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 687, - ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 688, - ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 689, - ERR_NOT_SAME_ACCOUNT = 690, - ERR_BAD_ON_USE_ENCHANT = 691, - ERR_TRADE_SELF = 692, - ERR_TOO_MANY_SOCKETS = 693, - ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 694, - ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 695, - ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 696, - ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 697, - ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 698, - ERR_ITEM_INVENTORY_FULL_SATCHEL = 699, - ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 700, - ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 701, - ERR_PURCHASE_LEVEL_TOO_LOW = 702, - ERR_GROUP_SWAP_FAILED = 703, - ERR_INVITE_IN_COMBAT = 704, - ERR_INVALID_GLYPH_SLOT = 705, - ERR_GENERIC_NO_VALID_TARGETS = 706, - ERR_CALENDAR_EVENT_ALERT_S = 707, - ERR_PET_LEARN_SPELL_S = 708, - ERR_PET_LEARN_ABILITY_S = 709, - ERR_PET_SPELL_UNLEARNED_S = 710, - ERR_INVITE_UNKNOWN_REALM = 711, - ERR_INVITE_NO_PARTY_SERVER = 712, - ERR_INVITE_PARTY_BUSY = 713, - ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 714, - ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 715, - ERR_PARTY_TARGET_AMBIGUOUS = 716, - ERR_PARTY_LFG_INVITE_RAID_LOCKED = 717, - ERR_PARTY_LFG_BOOT_LIMIT = 718, - ERR_PARTY_LFG_BOOT_COOLDOWN_S = 719, - ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 720, - ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 721, - ERR_PARTY_LFG_BOOT_IN_PROGRESS = 722, - ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 723, - ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 724, - ERR_PARTY_LFG_BOOT_VOTE_FAILED = 725, - ERR_PARTY_LFG_BOOT_DISALLOWED_BY_MAP = 726, - ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 727, - ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 728, - ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 729, - ERR_PARTY_PRIVATE_GROUP_ONLY = 730, - ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 731, - ERR_PARTY_TIME_RUNNING_SEASON_ID_MUST_MATCH = 732, - ERR_RAID_DISALLOWED_BY_LEVEL = 733, - ERR_RAID_DISALLOWED_BY_CROSS_REALM = 734, - ERR_PARTY_ROLE_NOT_AVAILABLE = 735, - ERR_JOIN_LFG_OBJECT_FAILED = 736, - ERR_LFG_REMOVED_LEVELUP = 737, - ERR_LFG_REMOVED_XP_TOGGLE = 738, - ERR_LFG_REMOVED_FACTION_CHANGE = 739, - ERR_BATTLEGROUND_INFO_THROTTLED = 740, - ERR_BATTLEGROUND_ALREADY_IN = 741, - ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 742, - ERR_ARENA_TEAM_PERMISSIONS = 743, - ERR_NOT_WHILE_FALLING = 744, - ERR_NOT_WHILE_MOVING = 745, - ERR_NOT_WHILE_FATIGUED = 746, - ERR_MAX_SOCKETS = 747, - ERR_MULTI_CAST_ACTION_TOTEM_S = 748, - ERR_BATTLEGROUND_JOIN_LEVELUP = 749, - ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 750, - ERR_BATTLEGROUND_JOIN_XP_GAIN = 751, - ERR_BATTLEGROUND_JOIN_MERCENARY = 752, - ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 753, - ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 754, - ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 755, - ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 756, - ERR_RAID_DIFFICULTY_FAILED = 757, - ERR_RAID_DIFFICULTY_CHANGED_S = 758, - ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 759, - ERR_RAID_LOCKOUT_CHANGED_S = 760, - ERR_RAID_CONVERTED_TO_PARTY = 761, - ERR_PARTY_CONVERTED_TO_RAID = 762, - ERR_PLAYER_DIFFICULTY_CHANGED_S = 763, - ERR_GMRESPONSE_DB_ERROR = 764, - ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 765, - ERR_ARENA_JOIN_RANGE_INDEX = 766, - ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 767, - ERR_BATTLEGROUND_JOIN_FAILED = 768, - ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 769, - ERR_BATTLEGROUND_JOIN_RESPEC = 770, - ERR_BATTLEGROUND_INVITATION_DECLINED = 771, - ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 772, - ERR_BATTLEGROUND_JOIN_TIMED_OUT = 773, - ERR_BATTLEGROUND_DUPE_QUEUE = 774, - ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 775, - ERR_IN_BATTLEGROUND_RESPEC = 776, - ERR_MAIL_LIMITED_DURATION_ITEM = 777, - ERR_YELL_RESTRICTED_TRIAL = 778, - ERR_CHAT_RAID_RESTRICTED_TRIAL = 779, - ERR_LFG_ROLE_CHECK_FAILED = 780, - ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 781, - ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 782, - ERR_LFG_READY_CHECK_FAILED = 783, - ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 784, - ERR_LFG_GROUP_FULL = 785, - ERR_LFG_NO_LFG_OBJECT = 786, - ERR_LFG_NO_SLOTS_PLAYER = 787, - ERR_LFG_NO_SLOTS_PARTY = 788, - ERR_LFG_NO_SPEC = 789, - ERR_LFG_MISMATCHED_SLOTS = 790, - ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 791, - ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 792, - ERR_LFG_MEMBERS_NOT_PRESENT = 793, - ERR_LFG_GET_INFO_TIMEOUT = 794, - ERR_LFG_INVALID_SLOT = 795, - ERR_LFG_DESERTER_PLAYER = 796, - ERR_LFG_DESERTER_PARTY = 797, - ERR_LFG_DEAD = 798, - ERR_LFG_RANDOM_COOLDOWN_PLAYER = 799, - ERR_LFG_RANDOM_COOLDOWN_PARTY = 800, - ERR_LFG_TOO_MANY_MEMBERS = 801, - ERR_LFG_TOO_FEW_MEMBERS = 802, - ERR_LFG_PROPOSAL_FAILED = 803, - ERR_LFG_PROPOSAL_DECLINED_SELF = 804, - ERR_LFG_PROPOSAL_DECLINED_PARTY = 805, - ERR_LFG_NO_SLOTS_SELECTED = 806, - ERR_LFG_NO_ROLES_SELECTED = 807, - ERR_LFG_ROLE_CHECK_INITIATED = 808, - ERR_LFG_READY_CHECK_INITIATED = 809, - ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 810, - ERR_LFG_PLAYER_DECLINED_READY_CHECK = 811, - ERR_LFG_JOINED_QUEUE = 812, - ERR_LFG_JOINED_FLEX_QUEUE = 813, - ERR_LFG_JOINED_RF_QUEUE = 814, - ERR_LFG_JOINED_SCENARIO_QUEUE = 815, - ERR_LFG_JOINED_WORLD_PVP_QUEUE = 816, - ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 817, - ERR_LFG_JOINED_LIST = 818, - ERR_LFG_LEFT_QUEUE = 819, - ERR_LFG_LEFT_LIST = 820, - ERR_LFG_ROLE_CHECK_ABORTED = 821, - ERR_LFG_READY_CHECK_ABORTED = 822, - ERR_LFG_CANT_USE_BATTLEGROUND = 823, - ERR_LFG_CANT_USE_DUNGEONS = 824, - ERR_LFG_REASON_TOO_MANY_LFG = 825, - ERR_LFG_FARM_LIMIT = 826, - ERR_LFG_NO_CROSS_FACTION_PARTIES = 827, - ERR_INVALID_TELEPORT_LOCATION = 828, - ERR_TOO_FAR_TO_INTERACT = 829, - ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 830, - ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 831, - ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 832, - ERR_DIFFICULTY_CHANGE_WORLDSTATE = 833, - ERR_DIFFICULTY_CHANGE_ENCOUNTER = 834, - ERR_DIFFICULTY_CHANGE_COMBAT = 835, - ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 836, - ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 837, - ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 838, - ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 839, - ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 840, - ERR_ARENA_TEAM_PARTY_SIZE = 841, - ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 842, - ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 843, - ERR_SOLO_MIN_ITEM_LEVEL = 844, - ERR_PVP_PLAYER_ABANDONED = 845, - ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 846, - ERR_QUEST_FORCE_REMOVED_S = 847, - ERR_ATTACK_NO_ACTIONS = 848, - ERR_IN_RANDOM_BG = 849, - ERR_IN_NON_RANDOM_BG = 850, - ERR_BN_FRIEND_SELF = 851, - ERR_BN_FRIEND_ALREADY = 852, - ERR_BN_FRIEND_BLOCKED = 853, - ERR_BN_FRIEND_LIST_FULL = 854, - ERR_BN_FRIEND_REQUEST_SENT = 855, - ERR_BN_BROADCAST_THROTTLE = 856, - ERR_BG_DEVELOPER_ONLY = 857, - ERR_CURRENCY_SPELL_SLOT_MISMATCH = 858, - ERR_CURRENCY_NOT_TRADABLE = 859, - ERR_REQUIRES_EXPANSION_S = 860, - ERR_QUEST_FAILED_SPELL = 861, - ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 862, - ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 863, - ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 864, - ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 865, - ERR_TALENT_FAILED_UNKNOWN = 866, - ERR_TALENT_FAILED_IN_COMBAT = 867, - ERR_TALENT_FAILED_IN_PVP_MATCH = 868, - ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 869, - ERR_WARGAME_REQUEST_FAILURE = 870, - ERR_RANK_REQUIRES_AUTHENTICATOR = 871, - ERR_GUILD_BANK_VOUCHER_FAILED = 872, - ERR_WARGAME_REQUEST_SENT = 873, - ERR_REQUIRES_ACHIEVEMENT_I = 874, - ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 875, - ERR_CANT_BUY_QUANTITY = 876, - ERR_ITEM_IS_BATTLE_PAY_LOCKED = 877, - ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 878, - ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 879, - ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 880, - ERR_INSUFF_TRACKED_CURRENCY_IS = 881, - ERR_NOT_ON_TOURNAMENT_REALM = 882, - ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 883, - ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 884, - ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 885, - ERR_CANT_DO_THAT_IN_A_GROUP = 886, - ERR_GUILD_LEADER_REPLACED = 887, - ERR_TRANSMOGRIFY_CANT_EQUIP = 888, - ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 889, - ERR_TRANSMOGRIFY_NOT_SOULBOUND = 890, - ERR_TRANSMOGRIFY_INVALID_SOURCE = 891, - ERR_TRANSMOGRIFY_INVALID_DESTINATION = 892, - ERR_TRANSMOGRIFY_MISMATCH = 893, - ERR_TRANSMOGRIFY_LEGENDARY = 894, - ERR_TRANSMOGRIFY_SAME_ITEM = 895, - ERR_TRANSMOGRIFY_SAME_APPEARANCE = 896, - ERR_TRANSMOGRIFY_NOT_EQUIPPED = 897, - ERR_VOID_DEPOSIT_FULL = 898, - ERR_VOID_WITHDRAW_FULL = 899, - ERR_VOID_STORAGE_WRAPPED = 900, - ERR_VOID_STORAGE_STACKABLE = 901, - ERR_VOID_STORAGE_UNBOUND = 902, - ERR_VOID_STORAGE_REPAIR = 903, - ERR_VOID_STORAGE_CHARGES = 904, - ERR_VOID_STORAGE_QUEST = 905, - ERR_VOID_STORAGE_CONJURED = 906, - ERR_VOID_STORAGE_MAIL = 907, - ERR_VOID_STORAGE_BAG = 908, - ERR_VOID_TRANSFER_STORAGE_FULL = 909, - ERR_VOID_TRANSFER_INV_FULL = 910, - ERR_VOID_TRANSFER_INTERNAL_ERROR = 911, - ERR_VOID_TRANSFER_ITEM_INVALID = 912, - ERR_DIFFICULTY_DISABLED_IN_LFG = 913, - ERR_VOID_STORAGE_UNIQUE = 914, - ERR_VOID_STORAGE_LOOT = 915, - ERR_VOID_STORAGE_HOLIDAY = 916, - ERR_VOID_STORAGE_DURATION = 917, - ERR_VOID_STORAGE_LOAD_FAILED = 918, - ERR_VOID_STORAGE_INVALID_ITEM = 919, - ERR_PARENTAL_CONTROLS_CHAT_MUTED = 920, - ERR_SOR_START_EXPERIENCE_INCOMPLETE = 921, - ERR_SOR_INVALID_EMAIL = 922, - ERR_SOR_INVALID_COMMENT = 923, - ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 924, - ERR_CHALLENGE_MODE_RESET_KEYSTONE = 925, - ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 926, - ERR_REPORT_SUBMITTED_SUCCESSFULLY = 927, - ERR_REPORT_SUBMISSION_FAILED = 928, - ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 929, - ERR_BUG_SUBMITTED_SUCCESSFULLY = 930, - ERR_CHALLENGE_MODE_ENABLED = 931, - ERR_CHALLENGE_MODE_DISABLED = 932, - ERR_PETBATTLE_CREATE_FAILED = 933, - ERR_PETBATTLE_NOT_HERE = 934, - ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 935, - ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 936, - ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 937, - ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 938, - ERR_PETBATTLE_NOT_WHILE_DEAD = 939, - ERR_PETBATTLE_NOT_WHILE_FLYING = 940, - ERR_PETBATTLE_TARGET_INVALID = 941, - ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 942, - ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 943, - ERR_PETBATTLE_NOT_A_TRAINER = 944, - ERR_PETBATTLE_DECLINED = 945, - ERR_PETBATTLE_IN_BATTLE = 946, - ERR_PETBATTLE_INVALID_LOADOUT = 947, - ERR_PETBATTLE_ALL_PETS_DEAD = 948, - ERR_PETBATTLE_NO_PETS_IN_SLOTS = 949, - ERR_PETBATTLE_NO_ACCOUNT_LOCK = 950, - ERR_PETBATTLE_WILD_PET_TAPPED = 951, - ERR_PETBATTLE_RESTRICTED_ACCOUNT = 952, - ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 953, - ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 954, - ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 955, - ERR_CANT_HAVE_MORE_PETS = 956, - ERR_PVP_MAP_NOT_FOUND = 957, - ERR_PVP_MAP_NOT_SET = 958, - ERR_PETBATTLE_QUEUE_QUEUED = 959, - ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 960, - ERR_PETBATTLE_QUEUE_JOIN_FAILED = 961, - ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 962, - ERR_PETBATTLE_QUEUE_REMOVED = 963, - ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 964, - ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 965, - ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 966, - ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 967, - ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 968, - ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 969, - ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 970, - ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 971, - ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 972, - ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 973, - ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 974, - ERR_PETBATTLE_QUEUE_SLOT_DEAD = 975, - ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 976, - ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 977, - ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 978, - ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 979, - ERR_HAS_RESTRICTION = 980, - ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 981, - ERR_ITEM_UPGRADE_NO_PATH = 982, - ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 983, - ERR_BONUS_ROLL_EMPTY = 984, - ERR_CHALLENGE_MODE_FULL = 985, - ERR_CHALLENGE_MODE_IN_PROGRESS = 986, - ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 987, - ERR_BATTLETAG_FRIEND_NOT_FOUND = 988, - ERR_BATTLETAG_FRIEND_NOT_VALID = 989, - ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 990, - ERR_BATTLETAG_FRIEND_THROTTLED = 991, - ERR_BATTLETAG_FRIEND_SUCCESS = 992, - ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 993, - ERR_PETBATTLE_INTERNAL = 994, - ERR_CANT_CAGE_PET_YET = 995, - ERR_NO_LOOT_IN_CHALLENGE_MODE = 996, - ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 997, - ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 998, - ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 999, - ERR_RECRUIT_A_FRIEND_FAILED = 1000, - ERR_SET_LOOT_PERSONAL = 1001, - ERR_SET_LOOT_METHOD_FAILED_COMBAT = 1002, - ERR_REAGENT_BANK_FULL = 1003, - ERR_REAGENT_BANK_LOCKED = 1004, - ERR_GARRISON_BUILDING_EXISTS = 1005, - ERR_GARRISON_INVALID_PLOT = 1006, - ERR_GARRISON_INVALID_BUILDINGID = 1007, - ERR_GARRISON_INVALID_PLOT_BUILDING = 1008, - ERR_GARRISON_REQUIRES_BLUEPRINT = 1009, - ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1010, - ERR_GARRISON_NOT_ENOUGH_GOLD = 1011, - ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1012, - ERR_ALREADY_USING_LFG_LIST = 1013, - ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1014, - ERR_TOY_USE_LIMIT_REACHED = 1015, - ERR_TOY_ALREADY_KNOWN = 1016, - ERR_TRANSMOG_SET_ALREADY_KNOWN = 1017, - ERR_NOT_ENOUGH_CURRENCY = 1018, - ERR_SPEC_IS_DISABLED = 1019, - ERR_FEATURE_RESTRICTED_TRIAL = 1020, - ERR_CANT_BE_OBLITERATED = 1021, - ERR_CANT_BE_SCRAPPED = 1022, - ERR_CANT_BE_RECRAFTED = 1023, - ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1024, - ERR_MUST_EQUIP_ARTIFACT = 1025, - ERR_CANT_DO_THAT_RIGHT_NOW = 1026, - ERR_AFFECTING_COMBAT = 1027, - ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1028, - ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1029, - ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1030, - ERR_MOVIE_RECORDING_WARNING_PERF = 1031, - ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1032, - ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1033, - ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1034, - ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1035, - ERR_NO_CHALLENGE_MODE_REWARD = 1036, - ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1037, - ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1038, - ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1039, - ERR_TALENT_FAILED_REST_AREA = 1040, - ERR_CANNOT_ABANDON_LAST_PET = 1041, - ERR_TEST_CVAR_SET_SSS = 1042, - ERR_QUEST_TURN_IN_FAIL_REASON = 1043, - ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1044, - ERR_TALENT_GRANTED_BY_AURA = 1045, - ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1046, - ERR_GLYPH_TARGET_NOT_AVAILABLE = 1047, - ERR_PVP_WARMODE_TOGGLE_ON = 1048, - ERR_PVP_WARMODE_TOGGLE_OFF = 1049, - ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1050, - ERR_SPELL_FAILED_CANT_FLY_HERE = 1051, - ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1052, - ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1053, - ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1054, - ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1055, - ERR_VOICE_CHAT_SERVICE_LOST = 1056, - ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1057, - ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1058, - ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1059, - ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1060, - ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1061, - ERR_VOICE_CHAT_PLAYER_SILENCED = 1062, - ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1063, - ERR_VOICE_CHAT_DISABLED = 1064, - ERR_NO_PVP_REWARD = 1065, - ERR_CLAIMED_PVP_REWARD = 1066, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1067, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1068, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1069, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1070, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1071, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1072, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1073, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1074, - ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1075, - ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1076, - ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1077, - ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1078, - ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1079, - ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1080, - ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1081, - ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1082, - ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1083, - ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1084, - ERR_SOCKETING_REQUIRES_TINKER_GEM = 1085, - ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1086, - ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1087, - ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1088, - ERR_LEVEL_LINKING_RESULT_LINKED = 1089, - ERR_LEVEL_LINKING_RESULT_UNLINKED = 1090, - ERR_CLUB_FINDER_ERROR_POST_CLUB = 1091, - ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1092, - ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1093, - ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1094, - ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1095, - ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1096, - ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1097, - ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1098, - ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1099, - ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1100, - ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1101, - ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1102, - ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1103, - ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1104, - ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1105, - ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1106, - ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1107, - ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1108, - ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1109, - ERR_SOULBIND_INVALID_CONDUIT = 1110, - ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1111, - ERR_SOULBIND_INVALID_TALENT = 1112, - ERR_SOULBIND_DUPLICATE_CONDUIT = 1113, - ERR_ACTIVATE_SOULBIND_S = 1114, - ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1115, - ERR_CANT_USE_PROFANITY = 1116, - ERR_NOT_IN_PET_BATTLE = 1117, - ERR_NOT_IN_NPE = 1118, - ERR_NO_SPEC = 1119, - ERR_NO_DOMINATIONSHARD_OVERWRITE = 1120, - ERR_USE_WEEKLY_REWARDS_DISABLED = 1121, - ERR_CROSS_FACTION_GROUP_JOINED = 1122, - ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1123, - ERR_EQUIPABLESPELLS_SLOTS_FULL = 1124, - ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1125, - ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1126, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1127, - ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1128, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1129, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1130, - ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1131, - ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1132, - ERR_TARGET_IS_SELF_FOUND_CANNOT_TRADE = 1133, - ERR_PLAYER_IS_SELF_FOUND_CANNOT_TRADE = 1134, - ERR_MAIL_RECEPIENT_IS_SELF_FOUND_CANNOT_RECEIVE_MAIL = 1135, - ERR_PLAYER_IS_SELF_FOUND_CANNOT_SEND_MAIL = 1136, - ERR_PLAYER_IS_SELF_FOUND_CANNOT_USE_AUCTION_HOUSE = 1137, - ERR_MAIL_TARGET_CANNOT_RECEIVE_MAIL = 1138, + ERR_NO_ACCOUNT_BANK_HERE = 38, + ERR_ITEM_LOCKED = 39, + ERR_2HANDED_EQUIPPED = 40, + ERR_VENDOR_NOT_INTERESTED = 41, + ERR_VENDOR_REFUSE_SCRAPPABLE_AZERITE = 42, + ERR_VENDOR_HATES_YOU = 43, + ERR_VENDOR_SOLD_OUT = 44, + ERR_VENDOR_TOO_FAR = 45, + ERR_VENDOR_DOESNT_BUY = 46, + ERR_NOT_ENOUGH_MONEY = 47, + ERR_RECEIVE_ITEM_S = 48, + ERR_DROP_BOUND_ITEM = 49, + ERR_TRADE_BOUND_ITEM = 50, + ERR_TRADE_QUEST_ITEM = 51, + ERR_TRADE_TEMP_ENCHANT_BOUND = 52, + ERR_TRADE_GROUND_ITEM = 53, + ERR_TRADE_BAG = 54, + ERR_TRADE_FACTION_SPECIFIC = 55, + ERR_SPELL_FAILED_S = 56, + ERR_ITEM_COOLDOWN = 57, + ERR_POTION_COOLDOWN = 58, + ERR_FOOD_COOLDOWN = 59, + ERR_SPELL_COOLDOWN = 60, + ERR_ABILITY_COOLDOWN = 61, + ERR_SPELL_ALREADY_KNOWN_S = 62, + ERR_PET_SPELL_ALREADY_KNOWN_S = 63, + ERR_PROFICIENCY_GAINED_S = 64, + ERR_SKILL_GAINED_S = 65, + ERR_SKILL_UP_SI = 66, + ERR_LEARN_SPELL_S = 67, + ERR_LEARN_ABILITY_S = 68, + ERR_LEARN_PASSIVE_S = 69, + ERR_LEARN_RECIPE_S = 70, + ERR_PROFESSIONS_RECIPE_DISCOVERY_S = 71, + ERR_LEARN_COMPANION_S = 72, + ERR_LEARN_MOUNT_S = 73, + ERR_LEARN_TOY_S = 74, + ERR_LEARN_HEIRLOOM_S = 75, + ERR_LEARN_TRANSMOG_S = 76, + ERR_COMPLETED_TRANSMOG_SET_S = 77, + ERR_APPEARANCE_ALREADY_LEARNED = 78, + ERR_REVOKE_TRANSMOG_S = 79, + ERR_INVITE_PLAYER_S = 80, + ERR_SUGGEST_INVITE_PLAYER_S = 81, + ERR_INFORM_SUGGEST_INVITE_S = 82, + ERR_INFORM_SUGGEST_INVITE_SS = 83, + ERR_REQUEST_JOIN_PLAYER_S = 84, + ERR_INVITE_SELF = 85, + ERR_INVITED_TO_GROUP_SS = 86, + ERR_INVITED_ALREADY_IN_GROUP_SS = 87, + ERR_ALREADY_IN_GROUP_S = 88, + ERR_REQUESTED_INVITE_TO_GROUP_SS = 89, + ERR_CROSS_REALM_RAID_INVITE = 90, + ERR_PLAYER_BUSY_S = 91, + ERR_NEW_LEADER_S = 92, + ERR_NEW_LEADER_YOU = 93, + ERR_NEW_GUIDE_S = 94, + ERR_NEW_GUIDE_YOU = 95, + ERR_LEFT_GROUP_S = 96, + ERR_LEFT_GROUP_YOU = 97, + ERR_GROUP_DISBANDED = 98, + ERR_DECLINE_GROUP_S = 99, + ERR_DECLINE_GROUP_REQUEST_S = 100, + ERR_JOINED_GROUP_S = 101, + ERR_UNINVITE_YOU = 102, + ERR_BAD_PLAYER_NAME_S = 103, + ERR_NOT_IN_GROUP = 104, + ERR_TARGET_NOT_IN_GROUP_S = 105, + ERR_TARGET_NOT_IN_INSTANCE_S = 106, + ERR_NOT_IN_INSTANCE_GROUP = 107, + ERR_GROUP_FULL = 108, + ERR_NOT_LEADER = 109, + ERR_PLAYER_DIED_S = 110, + ERR_GUILD_CREATE_S = 111, + ERR_GUILD_INVITE_S = 112, + ERR_INVITED_TO_GUILD_SSS = 113, + ERR_ALREADY_IN_GUILD_S = 114, + ERR_ALREADY_INVITED_TO_GUILD_S = 115, + ERR_INVITED_TO_GUILD = 116, + ERR_ALREADY_IN_GUILD = 117, + ERR_GUILD_ACCEPT = 118, + ERR_GUILD_DECLINE_S = 119, + ERR_GUILD_DECLINE_AUTO_S = 120, + ERR_GUILD_PERMISSIONS = 121, + ERR_GUILD_JOIN_S = 122, + ERR_GUILD_FOUNDER_S = 123, + ERR_GUILD_PROMOTE_SSS = 124, + ERR_GUILD_DEMOTE_SS = 125, + ERR_GUILD_DEMOTE_SSS = 126, + ERR_GUILD_INVITE_SELF = 127, + ERR_GUILD_QUIT_S = 128, + ERR_GUILD_LEAVE_S = 129, + ERR_GUILD_REMOVE_SS = 130, + ERR_GUILD_REMOVE_SELF = 131, + ERR_GUILD_DISBAND_S = 132, + ERR_GUILD_DISBAND_SELF = 133, + ERR_GUILD_LEADER_S = 134, + ERR_GUILD_LEADER_SELF = 135, + ERR_GUILD_PLAYER_NOT_FOUND_S = 136, + ERR_GUILD_PLAYER_NOT_IN_GUILD_S = 137, + ERR_GUILD_PLAYER_NOT_IN_GUILD = 138, + ERR_GUILD_BANK_NOT_AVAILABLE = 139, + ERR_GUILD_CANT_PROMOTE_S = 140, + ERR_GUILD_CANT_DEMOTE_S = 141, + ERR_GUILD_NOT_IN_A_GUILD = 142, + ERR_GUILD_INTERNAL = 143, + ERR_GUILD_LEADER_IS_S = 144, + ERR_GUILD_LEADER_CHANGED_SS = 145, + ERR_GUILD_DISBANDED = 146, + ERR_GUILD_NOT_ALLIED = 147, + ERR_GUILD_NEW_LEADER_NOT_ALLIED = 148, + ERR_GUILD_LEADER_LEAVE = 149, + ERR_GUILD_RANKS_LOCKED = 150, + ERR_GUILD_RANK_IN_USE = 151, + ERR_GUILD_RANK_TOO_HIGH_S = 152, + ERR_GUILD_RANK_TOO_LOW_S = 153, + ERR_GUILD_NAME_EXISTS_S = 154, + ERR_GUILD_WITHDRAW_LIMIT = 155, + ERR_GUILD_NOT_ENOUGH_MONEY = 156, + ERR_GUILD_TOO_MUCH_MONEY = 157, + ERR_GUILD_BANK_CONJURED_ITEM = 158, + ERR_GUILD_BANK_EQUIPPED_ITEM = 159, + ERR_GUILD_BANK_BOUND_ITEM = 160, + ERR_GUILD_BANK_QUEST_ITEM = 161, + ERR_GUILD_BANK_WRAPPED_ITEM = 162, + ERR_GUILD_BANK_FULL = 163, + ERR_GUILD_BANK_WRONG_TAB = 164, + ERR_GUILD_NEW_LEADER_WRONG_REALM = 165, + ERR_NO_GUILD_CHARTER = 166, + ERR_OUT_OF_RANGE = 167, + ERR_PLAYER_DEAD = 168, + ERR_CLIENT_LOCKED_OUT = 169, + ERR_CLIENT_ON_TRANSPORT = 170, + ERR_KILLED_BY_S = 171, + ERR_LOOT_LOCKED = 172, + ERR_LOOT_TOO_FAR = 173, + ERR_LOOT_DIDNT_KILL = 174, + ERR_LOOT_BAD_FACING = 175, + ERR_LOOT_NOTSTANDING = 176, + ERR_LOOT_STUNNED = 177, + ERR_LOOT_NO_UI = 178, + ERR_LOOT_WHILE_INVULNERABLE = 179, + ERR_NO_LOOT = 180, + ERR_QUEST_ACCEPTED_S = 181, + ERR_QUEST_COMPLETE_S = 182, + ERR_QUEST_FAILED_S = 183, + ERR_QUEST_FAILED_BAG_FULL_S = 184, + ERR_QUEST_FAILED_MAX_COUNT_S = 185, + ERR_QUEST_FAILED_LOW_LEVEL = 186, + ERR_QUEST_FAILED_MISSING_ITEMS = 187, + ERR_QUEST_FAILED_WRONG_RACE = 188, + ERR_QUEST_FAILED_NOT_ENOUGH_MONEY = 189, + ERR_QUEST_FAILED_EXPANSION = 190, + ERR_QUEST_ONLY_ONE_TIMED = 191, + ERR_QUEST_NEED_PREREQS = 192, + ERR_QUEST_NEED_PREREQS_CUSTOM = 193, + ERR_QUEST_ALREADY_ON = 194, + ERR_QUEST_ALREADY_DONE = 195, + ERR_QUEST_ALREADY_DONE_DAILY = 196, + ERR_QUEST_HAS_IN_PROGRESS = 197, + ERR_QUEST_REWARD_EXP_I = 198, + ERR_QUEST_REWARD_MONEY_S = 199, + ERR_QUEST_MUST_CHOOSE = 200, + ERR_QUEST_LOG_FULL = 201, + ERR_COMBAT_DAMAGE_SSI = 202, + ERR_INSPECT_S = 203, + ERR_CANT_USE_ITEM = 204, + ERR_CANT_USE_ITEM_IN_ARENA = 205, + ERR_CANT_USE_ITEM_IN_RATED_BATTLEGROUND = 206, + ERR_MUST_EQUIP_ITEM = 207, + ERR_PASSIVE_ABILITY = 208, + ERR_2HSKILLNOTFOUND = 209, + ERR_NO_ATTACK_TARGET = 210, + ERR_INVALID_ATTACK_TARGET = 211, + ERR_ATTACK_PVP_TARGET_WHILE_UNFLAGGED = 212, + ERR_ATTACK_STUNNED = 213, + ERR_ATTACK_PACIFIED = 214, + ERR_ATTACK_MOUNTED = 215, + ERR_ATTACK_FLEEING = 216, + ERR_ATTACK_CONFUSED = 217, + ERR_ATTACK_CHARMED = 218, + ERR_ATTACK_DEAD = 219, + ERR_ATTACK_PREVENTED_BY_MECHANIC_S = 220, + ERR_ATTACK_CHANNEL = 221, + ERR_TAXISAMENODE = 222, + ERR_TAXINOSUCHPATH = 223, + ERR_TAXIUNSPECIFIEDSERVERERROR = 224, + ERR_TAXINOTENOUGHMONEY = 225, + ERR_TAXITOOFARAWAY = 226, + ERR_TAXINOVENDORNEARBY = 227, + ERR_TAXINOTVISITED = 228, + ERR_TAXIPLAYERBUSY = 229, + ERR_TAXIPLAYERALREADYMOUNTED = 230, + ERR_TAXIPLAYERSHAPESHIFTED = 231, + ERR_TAXIPLAYERMOVING = 232, + ERR_TAXINOPATHS = 233, + ERR_TAXINOTELIGIBLE = 234, + ERR_TAXINOTSTANDING = 235, + ERR_TAXIINCOMBAT = 236, + ERR_NO_REPLY_TARGET = 237, + ERR_GENERIC_NO_TARGET = 238, + ERR_INITIATE_TRADE_S = 239, + ERR_TRADE_REQUEST_S = 240, + ERR_TRADE_BLOCKED_S = 241, + ERR_TRADE_TARGET_DEAD = 242, + ERR_TRADE_TOO_FAR = 243, + ERR_TRADE_CANCELLED = 244, + ERR_TRADE_COMPLETE = 245, + ERR_TRADE_BAG_FULL = 246, + ERR_TRADE_TARGET_BAG_FULL = 247, + ERR_TRADE_MAX_COUNT_EXCEEDED = 248, + ERR_TRADE_TARGET_MAX_COUNT_EXCEEDED = 249, + ERR_INVENTORY_TRADE_TOO_MANY_UNIQUE_ITEM = 250, + ERR_ALREADY_TRADING = 251, + ERR_MOUNT_INVALIDMOUNTEE = 252, + ERR_MOUNT_TOOFARAWAY = 253, + ERR_MOUNT_ALREADYMOUNTED = 254, + ERR_MOUNT_NOTMOUNTABLE = 255, + ERR_MOUNT_NOTYOURPET = 256, + ERR_MOUNT_OTHER = 257, + ERR_MOUNT_LOOTING = 258, + ERR_MOUNT_RACECANTMOUNT = 259, + ERR_MOUNT_SHAPESHIFTED = 260, + ERR_MOUNT_NO_FAVORITES = 261, + ERR_MOUNT_NO_MOUNTS = 262, + ERR_DISMOUNT_NOPET = 263, + ERR_DISMOUNT_NOTMOUNTED = 264, + ERR_DISMOUNT_NOTYOURPET = 265, + ERR_SPELL_FAILED_TOTEMS = 266, + ERR_SPELL_FAILED_REAGENTS = 267, + ERR_SPELL_FAILED_REAGENTS_GENERIC = 268, + ERR_SPELL_FAILED_OPTIONAL_REAGENTS = 269, + ERR_CANT_TRADE_GOLD = 270, + ERR_SPELL_FAILED_EQUIPPED_ITEM = 271, + ERR_SPELL_FAILED_EQUIPPED_ITEM_CLASS_S = 272, + ERR_SPELL_FAILED_SHAPESHIFT_FORM_S = 273, + ERR_SPELL_FAILED_ANOTHER_IN_PROGRESS = 274, + ERR_BADATTACKFACING = 275, + ERR_BADATTACKPOS = 276, + ERR_CHEST_IN_USE = 277, + ERR_USE_CANT_OPEN = 278, + ERR_USE_LOCKED = 279, + ERR_DOOR_LOCKED = 280, + ERR_BUTTON_LOCKED = 281, + ERR_USE_LOCKED_WITH_ITEM_S = 282, + ERR_USE_LOCKED_WITH_SPELL_S = 283, + ERR_USE_LOCKED_WITH_SPELL_KNOWN_SI = 284, + ERR_USE_TOO_FAR = 285, + ERR_USE_BAD_ANGLE = 286, + ERR_USE_OBJECT_MOVING = 287, + ERR_USE_SPELL_FOCUS = 288, + ERR_USE_DESTROYED = 289, + ERR_SET_LOOT_FREEFORALL = 290, + ERR_SET_LOOT_ROUNDROBIN = 291, + ERR_SET_LOOT_MASTER = 292, + ERR_SET_LOOT_GROUP = 293, + ERR_SET_LOOT_THRESHOLD_S = 294, + ERR_NEW_LOOT_MASTER_S = 295, + ERR_SPECIFY_MASTER_LOOTER = 296, + ERR_LOOT_SPEC_CHANGED_S = 297, + ERR_TAME_FAILED = 298, + ERR_CHAT_WHILE_DEAD = 299, + ERR_CHAT_PLAYER_NOT_FOUND_S = 300, + ERR_NEWTAXIPATH = 301, + ERR_NO_PET = 302, + ERR_NOTYOURPET = 303, + ERR_PET_NOT_RENAMEABLE = 304, + ERR_QUEST_OBJECTIVE_COMPLETE_S = 305, + ERR_QUEST_UNKNOWN_COMPLETE = 306, + ERR_QUEST_ADD_KILL_SII = 307, + ERR_QUEST_ADD_FOUND_SII = 308, + ERR_QUEST_ADD_ITEM_SII = 309, + ERR_QUEST_ADD_PLAYER_KILL_SII = 310, + ERR_CANNOTCREATEDIRECTORY = 311, + ERR_CANNOTCREATEFILE = 312, + ERR_PLAYER_WRONG_FACTION = 313, + ERR_PLAYER_IS_NEUTRAL = 314, + ERR_BANKSLOT_FAILED_TOO_MANY = 315, + ERR_BANKSLOT_INSUFFICIENT_FUNDS = 316, + ERR_BANKSLOT_NOTBANKER = 317, + ERR_FRIEND_DB_ERROR = 318, + ERR_FRIEND_LIST_FULL = 319, + ERR_FRIEND_ADDED_S = 320, + ERR_BATTLETAG_FRIEND_ADDED_S = 321, + ERR_FRIEND_ONLINE_SS = 322, + ERR_FRIEND_OFFLINE_S = 323, + ERR_FRIEND_NOT_FOUND = 324, + ERR_FRIEND_WRONG_FACTION = 325, + ERR_FRIEND_REMOVED_S = 326, + ERR_BATTLETAG_FRIEND_REMOVED_S = 327, + ERR_FRIEND_ERROR = 328, + ERR_FRIEND_ALREADY_S = 329, + ERR_FRIEND_SELF = 330, + ERR_FRIEND_DELETED = 331, + ERR_IGNORE_FULL = 332, + ERR_IGNORE_SELF = 333, + ERR_IGNORE_NOT_FOUND = 334, + ERR_IGNORE_ALREADY_S = 335, + ERR_IGNORE_ADDED_S = 336, + ERR_IGNORE_REMOVED_S = 337, + ERR_IGNORE_AMBIGUOUS = 338, + ERR_IGNORE_DELETED = 339, + ERR_ONLY_ONE_BOLT = 340, + ERR_ONLY_ONE_AMMO = 341, + ERR_SPELL_FAILED_EQUIPPED_SPECIFIC_ITEM = 342, + ERR_WRONG_BAG_TYPE_SUBCLASS = 343, + ERR_CANT_WRAP_STACKABLE = 344, + ERR_CANT_WRAP_EQUIPPED = 345, + ERR_CANT_WRAP_WRAPPED = 346, + ERR_CANT_WRAP_BOUND = 347, + ERR_CANT_WRAP_UNIQUE = 348, + ERR_CANT_WRAP_BAGS = 349, + ERR_OUT_OF_MANA = 350, + ERR_OUT_OF_RAGE = 351, + ERR_OUT_OF_FOCUS = 352, + ERR_OUT_OF_ENERGY = 353, + ERR_OUT_OF_CHI = 354, + ERR_OUT_OF_HEALTH = 355, + ERR_OUT_OF_RUNES = 356, + ERR_OUT_OF_RUNIC_POWER = 357, + ERR_OUT_OF_SOUL_SHARDS = 358, + ERR_OUT_OF_LUNAR_POWER = 359, + ERR_OUT_OF_HOLY_POWER = 360, + ERR_OUT_OF_MAELSTROM = 361, + ERR_OUT_OF_COMBO_POINTS = 362, + ERR_OUT_OF_INSANITY = 363, + ERR_OUT_OF_ESSENCE = 364, + ERR_OUT_OF_ARCANE_CHARGES = 365, + ERR_OUT_OF_FURY = 366, + ERR_OUT_OF_PAIN = 367, + ERR_OUT_OF_POWER_DISPLAY = 368, + ERR_LOOT_GONE = 369, + ERR_MOUNT_FORCEDDISMOUNT = 370, + ERR_AUTOFOLLOW_TOO_FAR = 371, + ERR_UNIT_NOT_FOUND = 372, + ERR_INVALID_FOLLOW_TARGET = 373, + ERR_INVALID_FOLLOW_PVP_COMBAT = 374, + ERR_INVALID_FOLLOW_TARGET_PVP_COMBAT = 375, + ERR_INVALID_INSPECT_TARGET = 376, + ERR_GUILDEMBLEM_SUCCESS = 377, + ERR_GUILDEMBLEM_INVALID_TABARD_COLORS = 378, + ERR_GUILDEMBLEM_NOGUILD = 379, + ERR_GUILDEMBLEM_NOTGUILDMASTER = 380, + ERR_GUILDEMBLEM_NOTENOUGHMONEY = 381, + ERR_GUILDEMBLEM_INVALIDVENDOR = 382, + ERR_EMBLEMERROR_NOTABARDGEOSET = 383, + ERR_SPELL_OUT_OF_RANGE = 384, + ERR_COMMAND_NEEDS_TARGET = 385, + ERR_NOAMMO_S = 386, + ERR_TOOBUSYTOFOLLOW = 387, + ERR_DUEL_REQUESTED = 388, + ERR_DUEL_CANCELLED = 389, + ERR_DEATHBINDALREADYBOUND = 390, + ERR_DEATHBIND_SUCCESS_S = 391, + ERR_NOEMOTEWHILERUNNING = 392, + ERR_ZONE_EXPLORED = 393, + ERR_ZONE_EXPLORED_XP = 394, + ERR_INVALID_ITEM_TARGET = 395, + ERR_INVALID_QUEST_TARGET = 396, + ERR_IGNORING_YOU_S = 397, + ERR_FISH_NOT_HOOKED = 398, + ERR_FISH_ESCAPED = 399, + ERR_SPELL_FAILED_NOTUNSHEATHED = 400, + ERR_PETITION_OFFERED_S = 401, + ERR_PETITION_SIGNED = 402, + ERR_PETITION_SIGNED_S = 403, + ERR_PETITION_DECLINED_S = 404, + ERR_PETITION_ALREADY_SIGNED = 405, + ERR_PETITION_RESTRICTED_ACCOUNT_TRIAL = 406, + ERR_PETITION_ALREADY_SIGNED_OTHER = 407, + ERR_PETITION_IN_GUILD = 408, + ERR_PETITION_CREATOR = 409, + ERR_PETITION_NOT_ENOUGH_SIGNATURES = 410, + ERR_PETITION_NOT_SAME_SERVER = 411, + ERR_PETITION_FULL = 412, + ERR_PETITION_ALREADY_SIGNED_BY_S = 413, + ERR_GUILD_NAME_INVALID = 414, + ERR_SPELL_UNLEARNED_S = 415, + ERR_PET_SPELL_ROOTED = 416, + ERR_PET_SPELL_AFFECTING_COMBAT = 417, + ERR_PET_SPELL_OUT_OF_RANGE = 418, + ERR_PET_SPELL_NOT_BEHIND = 419, + ERR_PET_SPELL_TARGETS_DEAD = 420, + ERR_PET_SPELL_DEAD = 421, + ERR_PET_SPELL_NOPATH = 422, + ERR_ITEM_CANT_BE_DESTROYED = 423, + ERR_TICKET_ALREADY_EXISTS = 424, + ERR_TICKET_CREATE_ERROR = 425, + ERR_TICKET_UPDATE_ERROR = 426, + ERR_TICKET_DB_ERROR = 427, + ERR_TICKET_NO_TEXT = 428, + ERR_TICKET_TEXT_TOO_LONG = 429, + ERR_OBJECT_IS_BUSY = 430, + ERR_EXHAUSTION_WELLRESTED = 431, + ERR_EXHAUSTION_RESTED = 432, + ERR_EXHAUSTION_NORMAL = 433, + ERR_EXHAUSTION_TIRED = 434, + ERR_EXHAUSTION_EXHAUSTED = 435, + ERR_NO_ITEMS_WHILE_SHAPESHIFTED = 436, + ERR_CANT_INTERACT_SHAPESHIFTED = 437, + ERR_REALM_NOT_FOUND = 438, + ERR_MAIL_QUEST_ITEM = 439, + ERR_MAIL_BOUND_ITEM = 440, + ERR_MAIL_CONJURED_ITEM = 441, + ERR_MAIL_BAG = 442, + ERR_MAIL_TO_SELF = 443, + ERR_MAIL_TARGET_NOT_FOUND = 444, + ERR_MAIL_DATABASE_ERROR = 445, + ERR_MAIL_DELETE_ITEM_ERROR = 446, + ERR_MAIL_WRAPPED_COD = 447, + ERR_MAIL_CANT_SEND_REALM = 448, + ERR_MAIL_TEMP_RETURN_OUTAGE = 449, + ERR_MAIL_RECEPIENT_CANT_RECEIVE_MAIL = 450, + ERR_MAIL_SENT = 451, + ERR_MAIL_TARGET_IS_TRIAL = 452, + ERR_NOT_HAPPY_ENOUGH = 453, + ERR_USE_CANT_IMMUNE = 454, + ERR_CANT_BE_DISENCHANTED = 455, + ERR_CANT_USE_DISARMED = 456, + ERR_AUCTION_DATABASE_ERROR = 457, + ERR_AUCTION_HIGHER_BID = 458, + ERR_AUCTION_ALREADY_BID = 459, + ERR_AUCTION_OUTBID_S = 460, + ERR_AUCTION_WON_S = 461, + ERR_AUCTION_REMOVED_S = 462, + ERR_AUCTION_BID_PLACED = 463, + ERR_LOGOUT_FAILED = 464, + ERR_QUEST_PUSH_SUCCESS_S = 465, + ERR_QUEST_PUSH_INVALID_S = 466, + ERR_QUEST_PUSH_INVALID_TO_RECIPIENT_S = 467, + ERR_QUEST_PUSH_ACCEPTED_S = 468, + ERR_QUEST_PUSH_DECLINED_S = 469, + ERR_QUEST_PUSH_BUSY_S = 470, + ERR_QUEST_PUSH_DEAD_S = 471, + ERR_QUEST_PUSH_DEAD_TO_RECIPIENT_S = 472, + ERR_QUEST_PUSH_LOG_FULL_S = 473, + ERR_QUEST_PUSH_LOG_FULL_TO_RECIPIENT_S = 474, + ERR_QUEST_PUSH_ONQUEST_S = 475, + ERR_QUEST_PUSH_ONQUEST_TO_RECIPIENT_S = 476, + ERR_QUEST_PUSH_ALREADY_DONE_S = 477, + ERR_QUEST_PUSH_ALREADY_DONE_TO_RECIPIENT_S = 478, + ERR_QUEST_PUSH_NOT_DAILY_S = 479, + ERR_QUEST_PUSH_TIMER_EXPIRED_S = 480, + ERR_QUEST_PUSH_NOT_IN_PARTY_S = 481, + ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S = 482, + ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_TO_RECIPIENT_S = 483, + ERR_QUEST_PUSH_NOT_ALLOWED_S = 484, + ERR_QUEST_PUSH_PREREQUISITE_S = 485, + ERR_QUEST_PUSH_PREREQUISITE_TO_RECIPIENT_S = 486, + ERR_QUEST_PUSH_LOW_LEVEL_S = 487, + ERR_QUEST_PUSH_LOW_LEVEL_TO_RECIPIENT_S = 488, + ERR_QUEST_PUSH_HIGH_LEVEL_S = 489, + ERR_QUEST_PUSH_HIGH_LEVEL_TO_RECIPIENT_S = 490, + ERR_QUEST_PUSH_CLASS_S = 491, + ERR_QUEST_PUSH_CLASS_TO_RECIPIENT_S = 492, + ERR_QUEST_PUSH_RACE_S = 493, + ERR_QUEST_PUSH_RACE_TO_RECIPIENT_S = 494, + ERR_QUEST_PUSH_LOW_FACTION_S = 495, + ERR_QUEST_PUSH_LOW_FACTION_TO_RECIPIENT_S = 496, + ERR_QUEST_PUSH_HIGH_FACTION_S = 497, + ERR_QUEST_PUSH_HIGH_FACTION_TO_RECIPIENT_S = 498, + ERR_QUEST_PUSH_EXPANSION_S = 499, + ERR_QUEST_PUSH_EXPANSION_TO_RECIPIENT_S = 500, + ERR_QUEST_PUSH_NOT_GARRISON_OWNER_S = 501, + ERR_QUEST_PUSH_NOT_GARRISON_OWNER_TO_RECIPIENT_S = 502, + ERR_QUEST_PUSH_WRONG_COVENANT_S = 503, + ERR_QUEST_PUSH_WRONG_COVENANT_TO_RECIPIENT_S = 504, + ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_S = 505, + ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_TO_RECIPIENT_S = 506, + ERR_QUEST_PUSH_WRONG_FACTION_S = 507, + ERR_QUEST_PUSH_WRONG_FACTION_TO_RECIPIENT_S = 508, + ERR_QUEST_PUSH_CROSS_FACTION_RESTRICTED_S = 509, + ERR_RAID_GROUP_LOWLEVEL = 510, + ERR_RAID_GROUP_ONLY = 511, + ERR_RAID_GROUP_FULL = 512, + ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 513, + ERR_CORPSE_IS_NOT_IN_INSTANCE = 514, + ERR_PVP_KILL_HONORABLE = 515, + ERR_PVP_KILL_DISHONORABLE = 516, + ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 517, + ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 518, + ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 519, + ERR_AUTOLOOT_MONEY_S = 520, + ERR_GENERIC_STUNNED = 521, + ERR_GENERIC_THROTTLE = 522, + ERR_CLUB_FINDER_SEARCHING_TOO_FAST = 523, + ERR_TARGET_STUNNED = 524, + ERR_MUST_REPAIR_DURABILITY = 525, + ERR_RAID_YOU_JOINED = 526, + ERR_RAID_YOU_LEFT = 527, + ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 528, + ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 529, + ERR_RAID_MEMBER_ADDED_S = 530, + ERR_RAID_MEMBER_REMOVED_S = 531, + ERR_INSTANCE_GROUP_ADDED_S = 532, + ERR_INSTANCE_GROUP_REMOVED_S = 533, + ERR_CLICK_ON_ITEM_TO_FEED = 534, + ERR_TOO_MANY_CHAT_CHANNELS = 535, + ERR_LOOT_ROLL_PENDING = 536, + ERR_LOOT_PLAYER_NOT_FOUND = 537, + ERR_NOT_IN_RAID = 538, + ERR_LOGGING_OUT = 539, + ERR_TARGET_LOGGING_OUT = 540, + ERR_NOT_WHILE_MOUNTED = 541, + ERR_NOT_WHILE_SHAPESHIFTED = 542, + ERR_NOT_IN_COMBAT = 543, + ERR_NOT_WHILE_DISARMED = 544, + ERR_PET_BROKEN = 545, + ERR_TALENT_WIPE_ERROR = 546, + ERR_SPEC_WIPE_ERROR = 547, + ERR_GLYPH_WIPE_ERROR = 548, + ERR_PET_SPEC_WIPE_ERROR = 549, + ERR_FEIGN_DEATH_RESISTED = 550, + ERR_MEETING_STONE_IN_QUEUE_S = 551, + ERR_MEETING_STONE_LEFT_QUEUE_S = 552, + ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 553, + ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 554, + ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 555, + ERR_MEETING_STONE_SUCCESS = 556, + ERR_MEETING_STONE_IN_PROGRESS = 557, + ERR_MEETING_STONE_MEMBER_ADDED_S = 558, + ERR_MEETING_STONE_GROUP_FULL = 559, + ERR_MEETING_STONE_NOT_LEADER = 560, + ERR_MEETING_STONE_INVALID_LEVEL = 561, + ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 562, + ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 563, + ERR_MEETING_STONE_MUST_BE_LEADER = 564, + ERR_MEETING_STONE_NO_RAID_GROUP = 565, + ERR_MEETING_STONE_NEED_PARTY = 566, + ERR_MEETING_STONE_NOT_FOUND = 567, + ERR_MEETING_STONE_TARGET_IN_VEHICLE = 568, + ERR_GUILDEMBLEM_SAME = 569, + ERR_EQUIP_TRADE_ITEM = 570, + ERR_PVP_TOGGLE_ON = 571, + ERR_PVP_TOGGLE_OFF = 572, + ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 573, + ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 574, + ERR_GROUP_JOIN_BATTLEGROUND_S = 575, + ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 576, + ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 577, + ERR_SOLO_JOIN_BATTLEGROUND_S = 578, + ERR_JOIN_SINGLE_SCENARIO_S = 579, + ERR_BATTLEGROUND_TOO_MANY_QUEUES = 580, + ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 581, + ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 582, + ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 583, + ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 584, + ERR_ALREADY_IN_ARENA_TEAM_S = 585, + ERR_INVALID_PROMOTION_CODE = 586, + ERR_BG_PLAYER_JOINED_SS = 587, + ERR_BG_PLAYER_LEFT_S = 588, + ERR_RESTRICTED_ACCOUNT = 589, + ERR_RESTRICTED_ACCOUNT_TRIAL = 590, + ERR_NOT_ENOUGH_PURCHASED_GAME_TIME = 591, + ERR_PLAY_TIME_EXCEEDED = 592, + ERR_APPROACHING_PARTIAL_PLAY_TIME = 593, + ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 594, + ERR_APPROACHING_NO_PLAY_TIME = 595, + ERR_APPROACHING_NO_PLAY_TIME_2 = 596, + ERR_UNHEALTHY_TIME = 597, + ERR_CHAT_RESTRICTED_TRIAL = 598, + ERR_CHAT_THROTTLED = 599, + ERR_MAIL_REACHED_CAP = 600, + ERR_INVALID_RAID_TARGET = 601, + ERR_RAID_LEADER_READY_CHECK_START_S = 602, + ERR_READY_CHECK_IN_PROGRESS = 603, + ERR_READY_CHECK_THROTTLED = 604, + ERR_DUNGEON_DIFFICULTY_FAILED = 605, + ERR_DUNGEON_DIFFICULTY_CHANGED_S = 606, + ERR_TRADE_WRONG_REALM = 607, + ERR_TRADE_NOT_ON_TAPLIST = 608, + ERR_CHAT_PLAYER_AMBIGUOUS_S = 609, + ERR_LOOT_CANT_LOOT_THAT_NOW = 610, + ERR_LOOT_MASTER_INV_FULL = 611, + ERR_LOOT_MASTER_UNIQUE_ITEM = 612, + ERR_LOOT_MASTER_OTHER = 613, + ERR_FILTERING_YOU_S = 614, + ERR_USE_PREVENTED_BY_MECHANIC_S = 615, + ERR_ITEM_UNIQUE_EQUIPPABLE = 616, + ERR_LFG_LEADER_IS_LFM_S = 617, + ERR_LFG_PENDING = 618, + ERR_CANT_SPEAK_LANGAGE = 619, + ERR_VENDOR_MISSING_TURNINS = 620, + ERR_BATTLEGROUND_NOT_IN_TEAM = 621, + ERR_NOT_IN_BATTLEGROUND = 622, + ERR_NOT_ENOUGH_HONOR_POINTS = 623, + ERR_NOT_ENOUGH_ARENA_POINTS = 624, + ERR_SOCKETING_REQUIRES_META_GEM = 625, + ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 626, + ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 627, + ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 628, + ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 629, + ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 630, + ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 631, + ERR_ITEM_MAX_COUNT_SOCKETED = 632, + ERR_SYSTEM_DISABLED = 633, + ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 634, + ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 635, + ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 636, + ERR_USER_SQUELCHED = 637, + ERR_ACCOUNT_SILENCED = 638, + ERR_PARTY_MEMBER_SILENCED = 639, + ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 640, + ERR_TOO_MUCH_GOLD = 641, + ERR_NOT_BARBER_SITTING = 642, + ERR_QUEST_FAILED_CAIS = 643, + ERR_INVITE_RESTRICTED_TRIAL = 644, + ERR_VOICE_IGNORE_FULL = 645, + ERR_VOICE_IGNORE_SELF = 646, + ERR_VOICE_IGNORE_NOT_FOUND = 647, + ERR_VOICE_IGNORE_ALREADY_S = 648, + ERR_VOICE_IGNORE_ADDED_S = 649, + ERR_VOICE_IGNORE_REMOVED_S = 650, + ERR_VOICE_IGNORE_AMBIGUOUS = 651, + ERR_VOICE_IGNORE_DELETED = 652, + ERR_UNKNOWN_MACRO_OPTION_S = 653, + ERR_NOT_DURING_ARENA_MATCH = 654, + ERR_NOT_IN_RATED_BATTLEGROUND = 655, + ERR_PLAYER_SILENCED = 656, + ERR_PLAYER_UNSILENCED = 657, + ERR_COMSAT_DISCONNECT = 658, + ERR_COMSAT_RECONNECT_ATTEMPT = 659, + ERR_COMSAT_CONNECT_FAIL = 660, + ERR_MAIL_INVALID_ATTACHMENT_SLOT = 661, + ERR_MAIL_TOO_MANY_ATTACHMENTS = 662, + ERR_MAIL_INVALID_ATTACHMENT = 663, + ERR_MAIL_ATTACHMENT_EXPIRED = 664, + ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 665, + ERR_PROFANE_CHAT_NAME = 666, + ERR_PLAYER_SILENCED_ECHO = 667, + ERR_PLAYER_UNSILENCED_ECHO = 668, + ERR_LOOT_CANT_LOOT_THAT = 669, + ERR_ARENA_EXPIRED_CAIS = 670, + ERR_GROUP_ACTION_THROTTLED = 671, + ERR_ALREADY_PICKPOCKETED = 672, + ERR_NAME_INVALID = 673, + ERR_NAME_NO_NAME = 674, + ERR_NAME_TOO_SHORT = 675, + ERR_NAME_TOO_LONG = 676, + ERR_NAME_MIXED_LANGUAGES = 677, + ERR_NAME_PROFANE = 678, + ERR_NAME_RESERVED = 679, + ERR_NAME_THREE_CONSECUTIVE = 680, + ERR_NAME_INVALID_SPACE = 681, + ERR_NAME_CONSECUTIVE_SPACES = 682, + ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 683, + ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 684, + ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 685, + ERR_RECRUIT_A_FRIEND_NOT_LINKED = 686, + ERR_RECRUIT_A_FRIEND_NOT_NOW = 687, + ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 688, + ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 689, + ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 690, + ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 691, + ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 692, + ERR_NOT_SAME_ACCOUNT = 693, + ERR_BAD_ON_USE_ENCHANT = 694, + ERR_TRADE_SELF = 695, + ERR_TOO_MANY_SOCKETS = 696, + ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 697, + ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 698, + ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 699, + ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 700, + ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 701, + ERR_ITEM_INVENTORY_FULL_SATCHEL = 702, + ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 703, + ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 704, + ERR_PURCHASE_LEVEL_TOO_LOW = 705, + ERR_GROUP_SWAP_FAILED = 706, + ERR_INVITE_IN_COMBAT = 707, + ERR_INVALID_GLYPH_SLOT = 708, + ERR_GENERIC_NO_VALID_TARGETS = 709, + ERR_CALENDAR_EVENT_ALERT_S = 710, + ERR_PET_LEARN_SPELL_S = 711, + ERR_PET_LEARN_ABILITY_S = 712, + ERR_PET_SPELL_UNLEARNED_S = 713, + ERR_INVITE_UNKNOWN_REALM = 714, + ERR_INVITE_NO_PARTY_SERVER = 715, + ERR_INVITE_PARTY_BUSY = 716, + ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 717, + ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 718, + ERR_PARTY_TARGET_AMBIGUOUS = 719, + ERR_PARTY_LFG_INVITE_RAID_LOCKED = 720, + ERR_PARTY_LFG_BOOT_LIMIT = 721, + ERR_PARTY_LFG_BOOT_COOLDOWN_S = 722, + ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 723, + ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 724, + ERR_PARTY_LFG_BOOT_IN_PROGRESS = 725, + ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 726, + ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 727, + ERR_PARTY_LFG_BOOT_VOTE_FAILED = 728, + ERR_PARTY_LFG_BOOT_DISALLOWED_BY_MAP = 729, + ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 730, + ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 731, + ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 732, + ERR_PARTY_PRIVATE_GROUP_ONLY = 733, + ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 734, + ERR_PARTY_TIME_RUNNING_SEASON_ID_MUST_MATCH = 735, + ERR_RAID_DISALLOWED_BY_LEVEL = 736, + ERR_RAID_DISALLOWED_BY_CROSS_REALM = 737, + ERR_PARTY_ROLE_NOT_AVAILABLE = 738, + ERR_JOIN_LFG_OBJECT_FAILED = 739, + ERR_LFG_REMOVED_LEVELUP = 740, + ERR_LFG_REMOVED_XP_TOGGLE = 741, + ERR_LFG_REMOVED_FACTION_CHANGE = 742, + ERR_BATTLEGROUND_INFO_THROTTLED = 743, + ERR_BATTLEGROUND_ALREADY_IN = 744, + ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 745, + ERR_ARENA_TEAM_PERMISSIONS = 746, + ERR_NOT_WHILE_FALLING = 747, + ERR_NOT_WHILE_MOVING = 748, + ERR_NOT_WHILE_FATIGUED = 749, + ERR_MAX_SOCKETS = 750, + ERR_MULTI_CAST_ACTION_TOTEM_S = 751, + ERR_BATTLEGROUND_JOIN_LEVELUP = 752, + ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 753, + ERR_BATTLEGROUND_JOIN_XP_GAIN = 754, + ERR_BATTLEGROUND_JOIN_MERCENARY = 755, + ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 756, + ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 757, + ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 758, + ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 759, + ERR_RAID_DIFFICULTY_FAILED = 760, + ERR_RAID_DIFFICULTY_CHANGED_S = 761, + ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 762, + ERR_RAID_LOCKOUT_CHANGED_S = 763, + ERR_RAID_CONVERTED_TO_PARTY = 764, + ERR_PARTY_CONVERTED_TO_RAID = 765, + ERR_PLAYER_DIFFICULTY_CHANGED_S = 766, + ERR_GMRESPONSE_DB_ERROR = 767, + ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 768, + ERR_ARENA_JOIN_RANGE_INDEX = 769, + ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 770, + ERR_BATTLEGROUND_JOIN_FAILED = 771, + ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 772, + ERR_BATTLEGROUND_JOIN_RESPEC = 773, + ERR_BATTLEGROUND_INVITATION_DECLINED = 774, + ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 775, + ERR_BATTLEGROUND_JOIN_TIMED_OUT = 776, + ERR_BATTLEGROUND_DUPE_QUEUE = 777, + ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 778, + ERR_IN_BATTLEGROUND_RESPEC = 779, + ERR_MAIL_LIMITED_DURATION_ITEM = 780, + ERR_YELL_RESTRICTED_TRIAL = 781, + ERR_CHAT_RAID_RESTRICTED_TRIAL = 782, + ERR_LFG_ROLE_CHECK_FAILED = 783, + ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 784, + ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 785, + ERR_LFG_READY_CHECK_FAILED = 786, + ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 787, + ERR_LFG_GROUP_FULL = 788, + ERR_LFG_NO_LFG_OBJECT = 789, + ERR_LFG_NO_SLOTS_PLAYER = 790, + ERR_LFG_NO_SLOTS_PARTY = 791, + ERR_LFG_NO_SPEC = 792, + ERR_LFG_MISMATCHED_SLOTS = 793, + ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 794, + ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 795, + ERR_LFG_MEMBERS_NOT_PRESENT = 796, + ERR_LFG_GET_INFO_TIMEOUT = 797, + ERR_LFG_INVALID_SLOT = 798, + ERR_LFG_DESERTER_PLAYER = 799, + ERR_LFG_DESERTER_PARTY = 800, + ERR_LFG_DEAD = 801, + ERR_LFG_RANDOM_COOLDOWN_PLAYER = 802, + ERR_LFG_RANDOM_COOLDOWN_PARTY = 803, + ERR_LFG_TOO_MANY_MEMBERS = 804, + ERR_LFG_TOO_FEW_MEMBERS = 805, + ERR_LFG_PROPOSAL_FAILED = 806, + ERR_LFG_PROPOSAL_DECLINED_SELF = 807, + ERR_LFG_PROPOSAL_DECLINED_PARTY = 808, + ERR_LFG_NO_SLOTS_SELECTED = 809, + ERR_LFG_NO_ROLES_SELECTED = 810, + ERR_LFG_ROLE_CHECK_INITIATED = 811, + ERR_LFG_READY_CHECK_INITIATED = 812, + ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 813, + ERR_LFG_PLAYER_DECLINED_READY_CHECK = 814, + ERR_LFG_JOINED_QUEUE = 815, + ERR_LFG_JOINED_FLEX_QUEUE = 816, + ERR_LFG_JOINED_RF_QUEUE = 817, + ERR_LFG_JOINED_SCENARIO_QUEUE = 818, + ERR_LFG_JOINED_WORLD_PVP_QUEUE = 819, + ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 820, + ERR_LFG_JOINED_LIST = 821, + ERR_LFG_LEFT_QUEUE = 822, + ERR_LFG_LEFT_LIST = 823, + ERR_LFG_ROLE_CHECK_ABORTED = 824, + ERR_LFG_READY_CHECK_ABORTED = 825, + ERR_LFG_CANT_USE_BATTLEGROUND = 826, + ERR_LFG_CANT_USE_DUNGEONS = 827, + ERR_LFG_REASON_TOO_MANY_LFG = 828, + ERR_LFG_FARM_LIMIT = 829, + ERR_LFG_NO_CROSS_FACTION_PARTIES = 830, + ERR_INVALID_TELEPORT_LOCATION = 831, + ERR_TOO_FAR_TO_INTERACT = 832, + ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 833, + ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 834, + ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 835, + ERR_DIFFICULTY_CHANGE_WORLDSTATE = 836, + ERR_DIFFICULTY_CHANGE_ENCOUNTER = 837, + ERR_DIFFICULTY_CHANGE_COMBAT = 838, + ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 839, + ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 840, + ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 841, + ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 842, + ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 843, + ERR_ARENA_TEAM_PARTY_SIZE = 844, + ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 845, + ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 846, + ERR_SOLO_RBG_WARGAME_GROUP_SIZE = 847, + ERR_SOLO_RBG_WARGAME_GROUP_COMP = 848, + ERR_SOLO_MIN_ITEM_LEVEL = 849, + ERR_PVP_PLAYER_ABANDONED = 850, + ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 851, + ERR_QUEST_FORCE_REMOVED_S = 852, + ERR_ATTACK_NO_ACTIONS = 853, + ERR_IN_RANDOM_BG = 854, + ERR_IN_NON_RANDOM_BG = 855, + ERR_BN_FRIEND_SELF = 856, + ERR_BN_FRIEND_ALREADY = 857, + ERR_BN_FRIEND_BLOCKED = 858, + ERR_BN_FRIEND_LIST_FULL = 859, + ERR_BN_FRIEND_REQUEST_SENT = 860, + ERR_BN_BROADCAST_THROTTLE = 861, + ERR_BG_DEVELOPER_ONLY = 862, + ERR_CURRENCY_SPELL_SLOT_MISMATCH = 863, + ERR_CURRENCY_NOT_TRADABLE = 864, + ERR_REQUIRES_EXPANSION_S = 865, + ERR_QUEST_FAILED_SPELL = 866, + ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 867, + ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 868, + ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 869, + ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 870, + ERR_TALENT_FAILED_UNKNOWN = 871, + ERR_TALENT_FAILED_IN_COMBAT = 872, + ERR_TALENT_FAILED_IN_PVP_MATCH = 873, + ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 874, + ERR_WARGAME_REQUEST_FAILURE = 875, + ERR_RANK_REQUIRES_AUTHENTICATOR = 876, + ERR_GUILD_BANK_VOUCHER_FAILED = 877, + ERR_WARGAME_REQUEST_SENT = 878, + ERR_REQUIRES_ACHIEVEMENT_I = 879, + ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 880, + ERR_CANT_BUY_QUANTITY = 881, + ERR_ITEM_IS_BATTLE_PAY_LOCKED = 882, + ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 883, + ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 884, + ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 885, + ERR_INSUFF_TRACKED_CURRENCY_IS = 886, + ERR_NOT_ON_TOURNAMENT_REALM = 887, + ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 888, + ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 889, + ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 890, + ERR_CANT_DO_THAT_IN_A_GROUP = 891, + ERR_GUILD_LEADER_REPLACED = 892, + ERR_TRANSMOGRIFY_CANT_EQUIP = 893, + ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 894, + ERR_TRANSMOGRIFY_NOT_SOULBOUND = 895, + ERR_TRANSMOGRIFY_INVALID_SOURCE = 896, + ERR_TRANSMOGRIFY_INVALID_DESTINATION = 897, + ERR_TRANSMOGRIFY_MISMATCH = 898, + ERR_TRANSMOGRIFY_LEGENDARY = 899, + ERR_TRANSMOGRIFY_SAME_ITEM = 900, + ERR_TRANSMOGRIFY_SAME_APPEARANCE = 901, + ERR_TRANSMOGRIFY_NOT_EQUIPPED = 902, + ERR_VOID_DEPOSIT_FULL = 903, + ERR_VOID_WITHDRAW_FULL = 904, + ERR_VOID_STORAGE_WRAPPED = 905, + ERR_VOID_STORAGE_STACKABLE = 906, + ERR_VOID_STORAGE_UNBOUND = 907, + ERR_VOID_STORAGE_REPAIR = 908, + ERR_VOID_STORAGE_CHARGES = 909, + ERR_VOID_STORAGE_QUEST = 910, + ERR_VOID_STORAGE_CONJURED = 911, + ERR_VOID_STORAGE_MAIL = 912, + ERR_VOID_STORAGE_BAG = 913, + ERR_VOID_TRANSFER_STORAGE_FULL = 914, + ERR_VOID_TRANSFER_INV_FULL = 915, + ERR_VOID_TRANSFER_INTERNAL_ERROR = 916, + ERR_VOID_TRANSFER_ITEM_INVALID = 917, + ERR_DIFFICULTY_DISABLED_IN_LFG = 918, + ERR_VOID_STORAGE_UNIQUE = 919, + ERR_VOID_STORAGE_LOOT = 920, + ERR_VOID_STORAGE_HOLIDAY = 921, + ERR_VOID_STORAGE_DURATION = 922, + ERR_VOID_STORAGE_LOAD_FAILED = 923, + ERR_VOID_STORAGE_INVALID_ITEM = 924, + ERR_VOID_STORAGE_ACCOUNT_ITEM = 925, + ERR_PARENTAL_CONTROLS_CHAT_MUTED = 926, + ERR_SOR_START_EXPERIENCE_INCOMPLETE = 927, + ERR_SOR_INVALID_EMAIL = 928, + ERR_SOR_INVALID_COMMENT = 929, + ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 930, + ERR_CHALLENGE_MODE_RESET_KEYSTONE = 931, + ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 932, + ERR_REPORT_SUBMITTED_SUCCESSFULLY = 933, + ERR_REPORT_SUBMISSION_FAILED = 934, + ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 935, + ERR_BUG_SUBMITTED_SUCCESSFULLY = 936, + ERR_CHALLENGE_MODE_ENABLED = 937, + ERR_CHALLENGE_MODE_DISABLED = 938, + ERR_PETBATTLE_CREATE_FAILED = 939, + ERR_PETBATTLE_NOT_HERE = 940, + ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 941, + ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 942, + ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 943, + ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 944, + ERR_PETBATTLE_NOT_WHILE_DEAD = 945, + ERR_PETBATTLE_NOT_WHILE_FLYING = 946, + ERR_PETBATTLE_TARGET_INVALID = 947, + ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 948, + ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 949, + ERR_PETBATTLE_NOT_A_TRAINER = 950, + ERR_PETBATTLE_DECLINED = 951, + ERR_PETBATTLE_IN_BATTLE = 952, + ERR_PETBATTLE_INVALID_LOADOUT = 953, + ERR_PETBATTLE_ALL_PETS_DEAD = 954, + ERR_PETBATTLE_NO_PETS_IN_SLOTS = 955, + ERR_PETBATTLE_NO_ACCOUNT_LOCK = 956, + ERR_PETBATTLE_WILD_PET_TAPPED = 957, + ERR_PETBATTLE_RESTRICTED_ACCOUNT = 958, + ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 959, + ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 960, + ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 961, + ERR_CANT_HAVE_MORE_PETS = 962, + ERR_PVP_MAP_NOT_FOUND = 963, + ERR_PVP_MAP_NOT_SET = 964, + ERR_PETBATTLE_QUEUE_QUEUED = 965, + ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 966, + ERR_PETBATTLE_QUEUE_JOIN_FAILED = 967, + ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 968, + ERR_PETBATTLE_QUEUE_REMOVED = 969, + ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 970, + ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 971, + ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 972, + ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 973, + ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 974, + ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 975, + ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 976, + ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 977, + ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 978, + ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 979, + ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 980, + ERR_PETBATTLE_QUEUE_SLOT_DEAD = 981, + ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 982, + ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 983, + ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 984, + ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 985, + ERR_HAS_RESTRICTION = 986, + ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 987, + ERR_ITEM_UPGRADE_NO_PATH = 988, + ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 989, + ERR_BONUS_ROLL_EMPTY = 990, + ERR_CHALLENGE_MODE_FULL = 991, + ERR_CHALLENGE_MODE_IN_PROGRESS = 992, + ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 993, + ERR_BATTLETAG_FRIEND_NOT_FOUND = 994, + ERR_BATTLETAG_FRIEND_NOT_VALID = 995, + ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 996, + ERR_BATTLETAG_FRIEND_THROTTLED = 997, + ERR_BATTLETAG_FRIEND_SUCCESS = 998, + ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 999, + ERR_PETBATTLE_INTERNAL = 1000, + ERR_CANT_CAGE_PET_YET = 1001, + ERR_NO_LOOT_IN_CHALLENGE_MODE = 1002, + ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 1003, + ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 1004, + ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 1005, + ERR_RECRUIT_A_FRIEND_FAILED = 1006, + ERR_SET_LOOT_PERSONAL = 1007, + ERR_SET_LOOT_METHOD_FAILED_COMBAT = 1008, + ERR_REAGENT_BANK_FULL = 1009, + ERR_REAGENT_BANK_LOCKED = 1010, + ERR_GARRISON_BUILDING_EXISTS = 1011, + ERR_GARRISON_INVALID_PLOT = 1012, + ERR_GARRISON_INVALID_BUILDINGID = 1013, + ERR_GARRISON_INVALID_PLOT_BUILDING = 1014, + ERR_GARRISON_REQUIRES_BLUEPRINT = 1015, + ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1016, + ERR_GARRISON_NOT_ENOUGH_GOLD = 1017, + ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1018, + ERR_ALREADY_USING_LFG_LIST = 1019, + ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1020, + ERR_TOY_USE_LIMIT_REACHED = 1021, + ERR_TOY_ALREADY_KNOWN = 1022, + ERR_TRANSMOG_SET_ALREADY_KNOWN = 1023, + ERR_NOT_ENOUGH_CURRENCY = 1024, + ERR_SPEC_IS_DISABLED = 1025, + ERR_FEATURE_RESTRICTED_TRIAL = 1026, + ERR_CANT_BE_OBLITERATED = 1027, + ERR_CANT_BE_SCRAPPED = 1028, + ERR_CANT_BE_RECRAFTED = 1029, + ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1030, + ERR_MUST_EQUIP_ARTIFACT = 1031, + ERR_CANT_DO_THAT_RIGHT_NOW = 1032, + ERR_AFFECTING_COMBAT = 1033, + ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1034, + ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1035, + ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1036, + ERR_MOVIE_RECORDING_WARNING_PERF = 1037, + ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1038, + ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1039, + ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1040, + ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1041, + ERR_NO_CHALLENGE_MODE_REWARD = 1042, + ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1043, + ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1044, + ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1045, + ERR_TALENT_FAILED_REST_AREA = 1046, + ERR_CANNOT_ABANDON_LAST_PET = 1047, + ERR_TEST_CVAR_SET_SSS = 1048, + ERR_QUEST_TURN_IN_FAIL_REASON = 1049, + ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1050, + ERR_TALENT_GRANTED_BY_AURA = 1051, + ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1052, + ERR_GLYPH_TARGET_NOT_AVAILABLE = 1053, + ERR_PVP_WARMODE_TOGGLE_ON = 1054, + ERR_PVP_WARMODE_TOGGLE_OFF = 1055, + ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1056, + ERR_SPELL_FAILED_CANT_FLY_HERE = 1057, + ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1058, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1059, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1060, + ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1061, + ERR_VOICE_CHAT_SERVICE_LOST = 1062, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1063, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1064, + ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1065, + ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1066, + ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1067, + ERR_VOICE_CHAT_PLAYER_SILENCED = 1068, + ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1069, + ERR_VOICE_CHAT_DISABLED = 1070, + ERR_NO_PVP_REWARD = 1071, + ERR_CLAIMED_PVP_REWARD = 1072, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1073, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1074, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1075, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1076, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1077, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1078, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1079, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1080, + ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1081, + ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1082, + ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1083, + ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1084, + ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1085, + ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1086, + ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1087, + ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1088, + ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1089, + ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1090, + ERR_SOCKETING_REQUIRES_TINKER_GEM = 1091, + ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1092, + ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1093, + ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1094, + ERR_SOCKETING_REQUIRES_FRAGRANCE_GEM = 1095, + ERR_SOCKETING_FRAGRANCE_GEM_ONLY_IN_FRAGRANCESLOT = 1096, + ERR_LEVEL_LINKING_RESULT_LINKED = 1097, + ERR_LEVEL_LINKING_RESULT_UNLINKED = 1098, + ERR_CLUB_FINDER_ERROR_POST_CLUB = 1099, + ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1100, + ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1101, + ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1102, + ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1103, + ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1104, + ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1105, + ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1106, + ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1107, + ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1108, + ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1109, + ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1110, + ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1111, + ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1112, + ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1113, + ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1114, + ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1115, + ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1116, + ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1117, + ERR_SOULBIND_INVALID_CONDUIT = 1118, + ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1119, + ERR_SOULBIND_INVALID_TALENT = 1120, + ERR_SOULBIND_DUPLICATE_CONDUIT = 1121, + ERR_ACTIVATE_SOULBIND_S = 1122, + ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1123, + ERR_CANT_USE_PROFANITY = 1124, + ERR_NOT_IN_PET_BATTLE = 1125, + ERR_NOT_IN_NPE = 1126, + ERR_NO_SPEC = 1127, + ERR_NO_DOMINATIONSHARD_OVERWRITE = 1128, + ERR_USE_WEEKLY_REWARDS_DISABLED = 1129, + ERR_CROSS_FACTION_GROUP_JOINED = 1130, + ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1131, + ERR_EQUIPABLESPELLS_SLOTS_FULL = 1132, + ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1133, + ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1134, + ERR_NO_SOULBOUND_ITEM_IN_ACCOUNT_BANK = 1135, + ERR_NO_REFUNDABLE_ITEM_IN_ACCOUNT_BANK = 1136, + ERR_CANT_DELETE_IN_ACCOUNT_BANK = 1137, + ERR_NO_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1138, + ERR_NO_OPEN_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1139, + ERR_NO_ACCOUNT_INVENTORY_LOCK = 1140, + ERR_TOO_MANY_ACCOUNT_BANK_TABS = 1141, + ERR_ACCOUNT_BANK_TAB_NOT_UNLOCKED = 1142, + ERR_BANK_TAB_INVALID_NAME = 1143, + ERR_BANK_TAB_INVALID_TEXT = 1144, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1145, + ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1146, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1147, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1148, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1149, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1150, + ERR_TARGET_IS_SELF_FOUND_CANNOT_TRADE = 1151, + ERR_PLAYER_IS_SELF_FOUND_CANNOT_TRADE = 1152, + ERR_MAIL_RECEPIENT_IS_SELF_FOUND_CANNOT_RECEIVE_MAIL = 1153, + ERR_PLAYER_IS_SELF_FOUND_CANNOT_SEND_MAIL = 1154, + ERR_PLAYER_IS_SELF_FOUND_CANNOT_USE_AUCTION_HOUSE = 1155, + ERR_MAIL_TARGET_CANNOT_RECEIVE_MAIL = 1156, + ERR_REMIX_INVALID_TRANSFER_REQUEST = 1157, + ERR_CURRENCY_TRANSFER_INVALID_CHARACTER = 1158, + ERR_CURRENCY_TRANSFER_INVALID_CURRENCY = 1159, + ERR_CURRENCY_TRANSFER_INSUFFICIENT_CURRENCY = 1160, + ERR_CURRENCY_TRANSFER_MAX_QUANTITY = 1161, + ERR_CURRENCY_TRANSFER_NO_VALID_SOURCE = 1162, + ERR_CURRENCY_TRANSFER_CHARACTER_LOGGED_IN = 1163, + ERR_CURRENCY_TRANSFER_SERVER_ERROR = 1164, + ERR_CURRENCY_TRANSFER_UNMET_REQUIREMENTS = 1165, }; enum class MountResult : uint32 diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index cfe33834173..8faef90d6dc 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -115,7 +115,7 @@ Quest::Quest(Field* questRecord) _areaGroupID = questRecord[100].GetUInt32(); _limitTime = questRecord[101].GetInt64(); _allowableRaces.RawValue = questRecord[102].GetUInt64(); - _treasurePickerID = questRecord[103].GetInt32(); + _resetByScheduler = questRecord[103].GetBool(); _expansion = questRecord[104].GetInt32(); _managedWorldStateID = questRecord[105].GetInt32(); _questSessionBonus = questRecord[106].GetInt32(); @@ -398,6 +398,11 @@ void Quest::LoadConditionalConditionalQuestCompletionLog(Field* fields) ObjectMgr::AddLocaleString(fields[3].GetStringView(), locale, text.Text); } +void Quest::LoadTreasurePickers(Field* fields) +{ + _treasurePickerID.push_back(fields[1].GetInt32()); +} + uint32 Quest::XPValue(Player const* player) const { return XPValue(player, GetContentTuningId(), _rewardXPDifficulty, _rewardXPMultiplier, _expansion); @@ -487,6 +492,14 @@ bool Quest::IsImportant() const return false; } +bool Quest::IsMeta() const +{ + if (QuestInfoEntry const* questInfo = sQuestInfoStore.LookupEntry(GetQuestInfoID())) + return (questInfo->Modifiers & 0x800) != 0; + + return false; +} + void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player* player) const { rewards.ChoiceItemCount = GetRewChoiceItemsCount(); @@ -521,8 +534,8 @@ void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i) { - rewards.ItemID[i] = RewardItemId[i]; - rewards.ItemQty[i] = RewardItemCount[i]; + rewards.Items[i].ItemID = RewardItemId[i]; + rewards.Items[i].ItemQty = RewardItemCount[i]; } for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i) @@ -535,8 +548,8 @@ void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i) { - rewards.CurrencyID[i] = RewardCurrencyId[i]; - rewards.CurrencyQty[i] = RewardCurrencyCount[i]; + rewards.Currencies[i].CurrencyID = RewardCurrencyId[i]; + rewards.Currencies[i].CurrencyQty = RewardCurrencyCount[i]; } } @@ -779,6 +792,7 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const response.Info.CompleteSoundKitID = GetSoundTurnIn(); response.Info.AreaGroupID = GetAreaGroupID(); response.Info.TimeAllowed = GetLimitTime(); + response.Info.ResetByScheduler = IsResetByScheduler(); response.Write(); response.ShrinkToFit(); diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 39fc4862638..3d34b4d2565 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -154,39 +154,53 @@ enum QuestStatus : uint8 enum class QuestGiverStatus : uint64 { - None = 0x000000000, - Future = 0x000000002, - Trivial = 0x000000004, - TrivialRepeatableTurnin = 0x000000008, - TrivialDailyQuest = 0x000000010, - Reward = 0x000000020, - JourneyReward = 0x000000040, - CovenantCallingReward = 0x000000080, - RepeatableTurnin = 0x000000100, - DailyQuest = 0x000000200, - Quest = 0x000000400, - RewardCompleteNoPOI = 0x000000800, - RewardCompletePOI = 0x000001000, - LegendaryQuest = 0x000002000, - LegendaryRewardCompleteNoPOI = 0x000004000, - LegendaryRewardCompletePOI = 0x000008000, - JourneyQuest = 0x000010000, - JourneyRewardCompleteNoPOI = 0x000020000, - JourneyRewardCompletePOI = 0x000040000, - CovenantCallingQuest = 0x000080000, - CovenantCallingRewardCompleteNoPOI = 0x000100000, - CovenantCallingRewardCompletePOI = 0x000200000, - TrivialLegendaryQuest = 0x000400000, - FutureLegendaryQuest = 0x000800000, - LegendaryReward = 0x001000000, - ImportantReward = 0x002000000, - ImportantQuest = 0x004000000, - TrivialImportantQuest = 0x008000000, - FutureImportantQuest = 0x010000000, - ImportantQuestRewardCompleteNoPOI = 0x020000000, - ImportantQuestRewardCompletePOI = 0x040000000, - TrivialJourneyQuest = 0x080000000, - FutureJourneyQuest = 0x100000000, + None = 0x000000000000, + Future = 0x000000000002, + FutureJourneyQuest = 0x000000000004, + FutureLegendaryQuest = 0x000000000008, + FutureImportantQuest = 0x000000000010, + TrivialRepeatableTurnin = 0x000000000020, + Trivial = 0x000000000040, + TrivialDailyQuest = 0x000000000080, + TrivialRepeatableQuest = 0x000000000100, + TrivialMetaQuest = 0x000000000200, + TrivialJourneyQuest = 0x000000000400, + TrivialLegendaryQuest = 0x000000000800, + TrivialImportantQuest = 0x000000001000, + Reward = 0x000000002000, + RepeatableReward = 0x000000004000, + MetaReward = 0x000000008000, + JourneyReward = 0x000000010000, + CovenantCallingReward = 0x000000020000, + LegendaryReward = 0x000000040000, + ImportantReward = 0x000000080000, + RepeatableTurnin = 0x000000100000, + QuestAccountCompleted = 0x000000200000, + Quest = 0x000000400000, + DailyQuest = 0x000000800000, + RepeatableQuest = 0x000001000000, + MetaQuest = 0x000002000000, + CovenantCallingQuest = 0x000004000000, + JourneyQuestAccountCompleted = 0x000008000000, + JourneyQuest = 0x000010000000, + LegendaryQuestAccountCompleted = 0x000020000000, + LegendaryQuest = 0x000040000000, + ImportantQuestAccountCompleted = 0x000080000000, + ImportantQuest = 0x000100000000, + RewardCompleteNoPOI = 0x000200000000, + RewardCompletePOI = 0x000400000000, + RepeatableRewardCompleteNoPOI = 0x000800000000, + RepeatableRewardCompletePOI = 0x001000000000, + MetaQuestRewardCompleteNoPOI = 0x002000000000, + MetaQuestRewardCompletePOI = 0x004000000000, + CovenantCallingRewardCompleteNoPOI = 0x008000000000, + CovenantCallingRewardCompletePOI = 0x010000000000, + JourneyRewardCompleteNoPOI = 0x020000000000, + JourneyRewardCompletePOI = 0x040000000000, + LegendaryRewardCompleteNoPOI = 0x080000000000, + LegendaryRewardCompletePOI = 0x100000000000, + ImportantQuestRewardCompleteNoPOI = 0x200000000000, + ImportantQuestRewardCompletePOI = 0x400000000000, }; DEFINE_ENUM_FLAG(QuestGiverStatus); @@ -292,6 +306,8 @@ enum QuestFlagsEx2 : uint32 QUEST_FLAGS_EX2_IGNORE_SOULBOUND_ITEMS = 0x00200000, QUEST_FLAGS_EX2_DONT_DEFER_START_EFFECTS = 0x00400000, QUEST_FLAGS_EX2_HIDE_REQUIRED_ITEMS_PRE_TURN_IN = 0x00800000, + + QUEST_FLAGS_EX2_ABANDON_ON_DISABLE = 0x04000000, }; enum QuestSpecialFlags @@ -390,6 +406,13 @@ enum class QuestCompleteSpellType : uint32 Max }; +enum class QuestRewardContextFlags : int32 +{ + None = 0x0, + FirstCompletionBonus = 0x1, + RepeatCompletionBonus = 0x2 +}; + struct QuestGreeting { uint16 EmoteType; @@ -560,6 +583,7 @@ class TC_GAME_API Quest void LoadConditionalConditionalRequestItemsText(Field* fields); void LoadConditionalConditionalOfferRewardText(Field* fields); void LoadConditionalConditionalQuestCompletionLog(Field* fields); + void LoadTreasurePickers(Field* fields); uint32 XPValue(Player const* player) const; static uint32 XPValue(Player const* player, uint32 contentTuningId, uint32 xpDifficulty, float xpMultiplier = 1.0f, int32 expansion = -1); @@ -568,6 +592,7 @@ class TC_GAME_API Quest uint32 GetMaxMoneyReward() const; Optional<QuestTagType> GetQuestTag() const; bool IsImportant() const; + bool IsMeta() const; bool HasFlag(QuestFlags flag) const { return (_flags & uint32(flag)) != 0; } bool HasFlagEx(QuestFlagsEx flag) const { return (_flagsEx & uint32(flag)) != 0; } @@ -666,7 +691,7 @@ class TC_GAME_API Quest uint32 GetRewardSkillId() const { return _rewardSkillId; } uint32 GetRewardSkillPoints() const { return _rewardSkillPoints; } uint32 GetRewardReputationMask() const { return _rewardReputationMask; } - int32 GetTreasurePickerId() const { return _treasurePickerID; } + std::vector<int32> const& GetTreasurePickerId() const { return _treasurePickerID; } int32 GetExpansion() const { return _expansion; } int32 GetManagedWorldStateId() const { return _managedWorldStateID; } int32 GetQuestSessionBonus() const { return _questSessionBonus; } @@ -685,6 +710,7 @@ class TC_GAME_API Quest bool IsPushedToPartyOnAccept() const { return HasSpecialFlag(QUEST_SPECIAL_FLAGS_AUTO_PUSH_TO_PARTY); } uint32 CalculateHonorGain(uint8 level) const; bool CanIncreaseRewardedQuestCounters() const; + bool IsResetByScheduler() const { return _resetByScheduler; } // multiple values std::vector<QuestRewardDisplaySpell> RewardDisplaySpell; @@ -777,7 +803,7 @@ class TC_GAME_API Quest uint32 _areaGroupID = 0; int64 _limitTime = 0; Trinity::RaceMask<uint64> _allowableRaces; - int32 _treasurePickerID = 0; + std::vector<int32> _treasurePickerID; int32 _expansion = 0; int32 _managedWorldStateID = 0; int32 _questSessionBonus = 0; @@ -790,6 +816,7 @@ class TC_GAME_API Quest std::string _portraitTurnInText; std::string _portraitTurnInName; std::string _questCompletionLog; + bool _resetByScheduler; // quest_description_conditional std::vector<QuestConditionalText> _conditionalQuestDescription; diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp index be7ca6a728f..576a111dec1 100644 --- a/src/server/game/Reputation/ReputationMgr.cpp +++ b/src/server/game/Reputation/ReputationMgr.cpp @@ -372,9 +372,14 @@ void ReputationMgr::SendInitialReputations() for (FactionStateList::iterator itr = _factions.begin(); itr != _factions.end(); ++itr) { - initFactions.FactionFlags[itr->first] = itr->second.Flags.AsUnderlyingType(); - initFactions.FactionStandings[itr->first] = itr->second.Standing; + WorldPackets::Reputation::FactionData& factionData = initFactions.Factions.emplace_back(); + factionData.FactionID = itr->second.ID; + factionData.Flags = itr->second.Flags.AsUnderlyingType(); + factionData.Standing = itr->second.Standing; /// @todo faction bonus + WorldPackets::Reputation::FactionBonusData& bonus = initFactions.Bonuses.emplace_back(); + bonus.FactionID = itr->second.ID; + bonus.FactionHasBonus = false; itr->second.needSend = false; } diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.cpp b/src/server/game/Server/Packets/AreaTriggerPackets.cpp index ae6dfddb134..c03ddb7d058 100644 --- a/src/server/game/Server/Packets/AreaTriggerPackets.cpp +++ b/src/server/game/Server/Packets/AreaTriggerPackets.cpp @@ -82,6 +82,7 @@ WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerDenied::Write() WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerRePath::Write() { _worldPacket << TriggerGUID; + _worldPacket << Unused_1100; _worldPacket.WriteBit(AreaTriggerSpline.has_value()); _worldPacket.WriteBit(AreaTriggerOrbit.has_value()); diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.h b/src/server/game/Server/Packets/AreaTriggerPackets.h index 2af22e72d2c..1186b772b60 100644 --- a/src/server/game/Server/Packets/AreaTriggerPackets.h +++ b/src/server/game/Server/Packets/AreaTriggerPackets.h @@ -82,6 +82,7 @@ namespace WorldPackets Optional<AreaTriggerOrbitInfo> AreaTriggerOrbit; Optional<AreaTriggerMovementScriptInfo> AreaTriggerMovementScript; ObjectGuid TriggerGUID; + ObjectGuid Unused_1100; }; class AreaTriggerPlaySpellVisual final : public ServerPacket diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp index ed6aea45f77..3ede64d39c0 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.cpp +++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp @@ -99,7 +99,7 @@ ByteBuffer& operator>>(ByteBuffer& data, AuctionListFilterClass& filterClass) ByteBuffer& operator>>(ByteBuffer& data, AuctionSortDef& sortDef) { data.ResetBitPos(); - data >> Bits<4>(sortDef.SortOrder); + data >> As<uint8>(sortDef.SortOrder); data >> Bits<1>(sortDef.ReverseSort); return data; @@ -302,15 +302,15 @@ void AuctionBrowseQuery::Read() ItemClassFilters.resize(_worldPacket.ReadBits(3)); Sorts.resize(_worldPacket.ReadBits(2)); - for (AuctionSortDef& sortDef : Sorts) - _worldPacket >> sortDef; - if (TaintedBy) _worldPacket >> *TaintedBy; Name = _worldPacket.ReadString(nameLength); for (AuctionListFilterClass& filterClass : ItemClassFilters) _worldPacket >> filterClass; + + for (AuctionSortDef& sortDef : Sorts) + _worldPacket >> sortDef; } void AuctionCancelCommoditiesPurchase::Read() @@ -351,14 +351,14 @@ void AuctionListBiddedItems::Read() AuctionIDs.resize(_worldPacket.ReadBits(7)); Sorts.resize(_worldPacket.ReadBits(2)); - for (AuctionSortDef& sortDef : Sorts) - _worldPacket >> sortDef; - if (TaintedBy) _worldPacket >> *TaintedBy; for (uint32& auctionID : AuctionIDs) _worldPacket >> auctionID; + + for (AuctionSortDef& sortDef : Sorts) + _worldPacket >> sortDef; } void AuctionListBucketsByBucketKeys::Read() @@ -371,14 +371,14 @@ void AuctionListBucketsByBucketKeys::Read() BucketKeys.resize(_worldPacket.ReadBits(7)); Sorts.resize(_worldPacket.ReadBits(2)); - for (AuctionSortDef& sortDef : Sorts) - _worldPacket >> sortDef; - if (TaintedBy) _worldPacket >> *TaintedBy; for (AuctionBucketKey& bucketKey : BucketKeys) _worldPacket >> bucketKey; + + for (AuctionSortDef& sortDef : Sorts) + _worldPacket >> sortDef; } void AuctionListItemsByBucketKey::Read() @@ -392,13 +392,13 @@ void AuctionListItemsByBucketKey::Read() Sorts.resize(_worldPacket.ReadBits(2)); - for (AuctionSortDef& sortDef : Sorts) - _worldPacket >> sortDef; - _worldPacket >> BucketKey; if (TaintedBy) _worldPacket >> *TaintedBy; + + for (AuctionSortDef& sortDef : Sorts) + _worldPacket >> sortDef; } void AuctionListItemsByItemID::Read() @@ -413,11 +413,11 @@ void AuctionListItemsByItemID::Read() Sorts.resize(_worldPacket.ReadBits(2)); - for (AuctionSortDef& sortDef : Sorts) - _worldPacket >> sortDef; - if (TaintedBy) _worldPacket >> *TaintedBy; + + for (AuctionSortDef& sortDef : Sorts) + _worldPacket >> sortDef; } void AuctionListOwnedItems::Read() @@ -430,11 +430,11 @@ void AuctionListOwnedItems::Read() Sorts.resize(_worldPacket.ReadBits(2)); - for (AuctionSortDef& sortDef : Sorts) - _worldPacket >> sortDef; - if (TaintedBy) _worldPacket >> *TaintedBy; + + for (AuctionSortDef& sortDef : Sorts) + _worldPacket >> sortDef; } void AuctionPlaceBid::Read() diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index 5ae68849569..4a948e6ca35 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -327,8 +327,8 @@ void WorldPackets::Auth::AuthContinuedSession::Read() void WorldPackets::Auth::ConnectToFailed::Read() { - _worldPacket >> As<uint32>(Serial); _worldPacket >> Con; + _worldPacket >> As<uint32>(Serial); } bool WorldPackets::Auth::EnterEncryptedMode::InitializeEncryption() diff --git a/src/server/game/Server/Packets/AzeritePackets.cpp b/src/server/game/Server/Packets/AzeritePackets.cpp index 87406b757dc..bbaf9668d01 100644 --- a/src/server/game/Server/Packets/AzeritePackets.cpp +++ b/src/server/game/Server/Packets/AzeritePackets.cpp @@ -56,10 +56,10 @@ void WorldPackets::Azerite::AzeriteEmpoweredItemViewed::Read() void WorldPackets::Azerite::AzeriteEmpoweredItemSelectPower::Read() { - _worldPacket >> Tier; - _worldPacket >> AzeritePowerID; _worldPacket >> ContainerSlot; _worldPacket >> Slot; + _worldPacket >> Tier; + _worldPacket >> AzeritePowerID; } WorldPacket const* WorldPackets::Azerite::PlayerAzeriteItemEquippedStatusChanged::Write() diff --git a/src/server/game/Server/Packets/AzeritePackets.h b/src/server/game/Server/Packets/AzeritePackets.h index 0a0204c61e7..4d76a83884e 100644 --- a/src/server/game/Server/Packets/AzeritePackets.h +++ b/src/server/game/Server/Packets/AzeritePackets.h @@ -89,7 +89,7 @@ namespace WorldPackets void Read() override; - int32 Tier = 0; + uint8 Tier = 0; int32 AzeritePowerID = 0; uint8 ContainerSlot = 0; uint8 Slot = 0; diff --git a/src/server/game/Server/Packets/BankPackets.cpp b/src/server/game/Server/Packets/BankPackets.cpp index 63f9300c31d..74f24cb7519 100644 --- a/src/server/game/Server/Packets/BankPackets.cpp +++ b/src/server/game/Server/Packets/BankPackets.cpp @@ -16,10 +16,12 @@ */ #include "BankPackets.h" +#include "DBCEnums.h" void WorldPackets::Bank::AutoBankItem::Read() { _worldPacket >> Inv + >> As<int8>(BankType) >> Bag >> Slot; } @@ -54,3 +56,9 @@ void WorldPackets::Bank::ReagentBank::Read() { _worldPacket >> Banker; } + +void WorldPackets::Bank::BankerActivate::Read() +{ + _worldPacket >> Banker; + _worldPacket >> As<int32>(InteractionType); +} diff --git a/src/server/game/Server/Packets/BankPackets.h b/src/server/game/Server/Packets/BankPackets.h index f43f672bc95..f81a1c02bfe 100644 --- a/src/server/game/Server/Packets/BankPackets.h +++ b/src/server/game/Server/Packets/BankPackets.h @@ -22,6 +22,8 @@ #include "ItemPacketsCommon.h" #include "ObjectGuid.h" +enum class PlayerInteractionType : int32; + namespace WorldPackets { namespace Bank @@ -34,6 +36,7 @@ namespace WorldPackets void Read() override; WorldPackets::Item::InvUpdate Inv; + ::BankType BankType = ::BankType::Character; uint8 Bag = 0; uint8 Slot = 0; }; @@ -95,6 +98,17 @@ namespace WorldPackets ObjectGuid Banker; }; + + class BankerActivate final : public ClientPacket + { + public: + explicit BankerActivate(WorldPacket&& packet) : ClientPacket(CMSG_BANKER_ACTIVATE, std::move(packet)) { } + + void Read() override; + + ObjectGuid Banker; + PlayerInteractionType InteractionType = { }; + }; } } #endif // BankPackets_h__ diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp index 07cb5393c06..8d1dd199bb4 100644 --- a/src/server/game/Server/Packets/CalendarPackets.cpp +++ b/src/server/game/Server/Packets/CalendarPackets.cpp @@ -22,7 +22,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Calendar::CalendarSendCal data << uint64(eventInfo.EventID); data << uint8(eventInfo.EventType); data << eventInfo.Date; - data << uint32(eventInfo.Flags); + data << uint16(eventInfo.Flags); data << int32(eventInfo.TextureID); data << uint64(eventInfo.EventClubID); data << eventInfo.OwnerGuid; @@ -285,7 +285,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarSendEvent::Write() _worldPacket << uint64(EventID); _worldPacket << uint8(GetEventType); _worldPacket << int32(TextureID); - _worldPacket << uint32(Flags); + _worldPacket << uint16(Flags); _worldPacket << Date; _worldPacket << LockDate; _worldPacket << uint64(EventClubID); @@ -307,7 +307,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarInviteAlert::Write() { _worldPacket << uint64(EventID); _worldPacket << Date; - _worldPacket << uint32(Flags); + _worldPacket << uint16(Flags); _worldPacket << uint8(EventType); _worldPacket << int32(TextureID); _worldPacket << uint64(EventClubID); @@ -320,6 +320,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarInviteAlert::Write() _worldPacket << OwnerGuid; _worldPacket << BitsSize<8>(EventName); + _worldPacket << Bits<1>(Unknown_1100); _worldPacket.FlushBits(); _worldPacket.WriteString(EventName); @@ -383,7 +384,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventUpdatedAlert::Write() _worldPacket << OriginalDate; _worldPacket << Date; _worldPacket << LockDate; - _worldPacket << uint32(Flags); + _worldPacket << uint16(Flags); _worldPacket << uint32(TextureID); _worldPacket << uint8(EventType); diff --git a/src/server/game/Server/Packets/CalendarPackets.h b/src/server/game/Server/Packets/CalendarPackets.h index e76b4162f02..1d1ae538fac 100644 --- a/src/server/game/Server/Packets/CalendarPackets.h +++ b/src/server/game/Server/Packets/CalendarPackets.h @@ -103,7 +103,7 @@ namespace WorldPackets uint8 EventType = 0; uint32 TextureID = 0; WowTime Time; - uint32 Flags = 0; + uint16 Flags = 0; }; class CalendarUpdateEvent final : public ClientPacket @@ -185,7 +185,7 @@ namespace WorldPackets std::string EventName; uint8 EventType = 0; WowTime Date; - uint32 Flags = 0; + uint16 Flags = 0; int32 TextureID = 0; uint64 EventClubID = 0; ObjectGuid OwnerGuid; @@ -228,7 +228,7 @@ namespace WorldPackets uint64 EventID = 0; WowTime Date; WowTime LockDate; - uint32 Flags = 0; + uint16 Flags = 0; int32 TextureID = 0; uint8 GetEventType = 0; uint8 EventType = 0; @@ -249,13 +249,14 @@ namespace WorldPackets ObjectGuid InvitedByGuid; uint64 InviteID = 0; uint64 EventID = 0; - uint32 Flags = 0; + uint16 Flags = 0; WowTime Date; int32 TextureID = 0; uint8 Status = 0; uint8 EventType = 0; uint8 ModeratorStatus = 0; std::string EventName; + bool Unknown_1100 = false; }; class CalendarInvite final : public ClientPacket @@ -358,7 +359,7 @@ namespace WorldPackets uint64 EventClubID = 0; uint64 EventID = 0; WowTime Date; - uint32 Flags = 0; + uint16 Flags = 0; WowTime LockDate; WowTime OriginalDate; int32 TextureID = 0; diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 5dd7ba275cf..1fd503aa176 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -79,7 +79,7 @@ EnumCharacters::EnumCharacters(WorldPacket&& packet) : ClientPacket(std::move(pa ASSERT(GetOpcode() == CMSG_ENUM_CHARACTERS || GetOpcode() == CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT); } -EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields) +EnumCharactersResult::CharacterInfoBasic::CharacterInfoBasic(Field const* fields) { // 0 1 2 3 4 5 // "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.level, " @@ -95,6 +95,7 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields) // "character_declinedname.genitive" Guid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); + VirtualRealmAddress = GetVirtualRealmAddress(); GuildClubMemberID = ::Battlenet::Services::Clubs::CreateClubMemberId(Guid); Name = fields[1].GetString(); RaceID = fields[2].GetUInt8(); @@ -137,7 +138,6 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields) Flags2 = CHAR_CUSTOMIZE_FLAG_RACE; Flags3 = 0; - Flags4 = 0; FirstLogin = (atLoginFlags & AT_LOGIN_FIRST) != 0; // show pet at selection character in character list only for non-ghost character @@ -151,7 +151,6 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields) } } - BoostInProgress = false; ProfessionIds[0] = 0; ProfessionIds[1] = 0; @@ -182,80 +181,114 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields) } } -ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo::VisualItemInfo const& visualItem) +ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasic::VisualItemInfo const& visualItem) { data << uint32(visualItem.DisplayID); - data << uint32(visualItem.DisplayEnchantID); - data << int32(visualItem.SecondaryItemModifiedAppearanceID); data << uint8(visualItem.InvType); + data << uint32(visualItem.DisplayEnchantID); data << uint8(visualItem.Subclass); + data << int32(visualItem.SecondaryItemModifiedAppearanceID); + data << uint32(visualItem.ItemID); return data; } -ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo const& charInfo) +ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasic const& charInfo) { - ASSERT(charInfo.MailSenders.size() == charInfo.MailSenderTypes.size()); - data << charInfo.Guid; - data << uint64(charInfo.GuildClubMemberID); + data << uint32(charInfo.VirtualRealmAddress); data << uint8(charInfo.ListPosition); data << uint8(charInfo.RaceID); - data << uint8(charInfo.ClassID); data << uint8(charInfo.SexID); + data << uint8(charInfo.ClassID); + data << int16(charInfo.SpecID); data << uint32(charInfo.Customizations.size()); data << uint8(charInfo.ExperienceLevel); - data << int32(charInfo.ZoneID); data << int32(charInfo.MapID); + data << int32(charInfo.ZoneID); data << charInfo.PreloadPos; + data << uint64(charInfo.GuildClubMemberID); data << charInfo.GuildGUID; data << uint32(charInfo.Flags); data << uint32(charInfo.Flags2); data << uint32(charInfo.Flags3); + data << uint8(charInfo.unkWod61x); + data << uint32(charInfo.PetCreatureDisplayID); data << uint32(charInfo.PetExperienceLevel); data << uint32(charInfo.PetCreatureFamilyID); - data << uint32(charInfo.ProfessionIds[0]); - data << uint32(charInfo.ProfessionIds[1]); - - for (EnumCharactersResult::CharacterInfo::VisualItemInfo const& visualItem : charInfo.VisualItems) + for (EnumCharactersResult::CharacterInfoBasic::VisualItemInfo const& visualItem : charInfo.VisualItems) data << visualItem; - data << charInfo.LastPlayedTime; - data << int16(charInfo.SpecID); data << int32(charInfo.Unknown703); + data << charInfo.LastPlayedTime; data << int32(charInfo.LastLoginVersion); - data << uint32(charInfo.Flags4); - data << uint32(charInfo.MailSenders.size()); - data << uint32(charInfo.MailSenderTypes.size()); - data << uint32(charInfo.OverrideSelectScreenFileDataID); data << charInfo.PersonalTabard; + + data << uint32(charInfo.ProfessionIds[0]); + data << uint32(charInfo.ProfessionIds[1]); + data << int32(charInfo.TimerunningSeasonID); + data << uint32(charInfo.OverrideSelectScreenFileDataID); for (ChrCustomizationChoice const& customization : charInfo.Customizations) data << customization; - if (!charInfo.MailSenderTypes.empty()) - data.append(charInfo.MailSenderTypes.data(), charInfo.MailSenderTypes.size()); - data << BitsSize<6>(charInfo.Name); data << Bits<1>(charInfo.FirstLogin); - data << Bits<1>(charInfo.BoostInProgress); - data << Bits<5>(charInfo.unkWod61x); - data << Bits<1>(charInfo.RpeResetAvailable); - data << Bits<1>(charInfo.RpeResetQuestClearAvailable); - for (std::string const& str : charInfo.MailSenders) + data.FlushBits(); + + data.WriteString(charInfo.Name); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterRestrictionAndMailData const& restrictionsAndMails) +{ + ASSERT(restrictionsAndMails.MailSenders.size() == restrictionsAndMails.MailSenderTypes.size()); + + data << Bits<1>(restrictionsAndMails.BoostInProgress); + data << Bits<1>(restrictionsAndMails.RpeResetAvailable); + data << Bits<1>(restrictionsAndMails.RpeResetQuestClearAvailable); + data.FlushBits(); + + data << uint32(restrictionsAndMails.Flags4); + data << uint32(restrictionsAndMails.MailSenders.size()); + data << uint32(restrictionsAndMails.MailSenderTypes.size()); + + if (!restrictionsAndMails.MailSenderTypes.empty()) + data.append(restrictionsAndMails.MailSenderTypes.data(), restrictionsAndMails.MailSenderTypes.size()); + + for (std::string const& str : restrictionsAndMails.MailSenders) data << Bits<6>(str.length() + 1); data.FlushBits(); - for (std::string const& str : charInfo.MailSenders) + for (std::string const& str : restrictionsAndMails.MailSenders) if (!str.empty()) data << str; - data.WriteString(charInfo.Name); + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo const& charInfo) +{ + data << charInfo.Basic; + data << charInfo.RestrictionsAndMails; + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RegionwideCharacterListEntry const& charInfo) +{ + data << charInfo.Basic; + data << uint64(charInfo.Money); + data << float(charInfo.CurrentSeasonMythicPlusOverallScore); + data << int32(charInfo.CurrentSeasonBestPvpRating); + data << int8(charInfo.PvpRatingBracket); + data << int16(charInfo.PvpRatingAssociatedSpecID); return data; } @@ -289,22 +322,57 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceLimitDisableI return data; } +ByteBuffer& operator<<(ByteBuffer& data, WarbandGroupMember const& warbandGroupMember) +{ + data << int32(warbandGroupMember.WarbandScenePlacementID); + data << int32(warbandGroupMember.Type); + if (warbandGroupMember.Type == 0) + data << warbandGroupMember.Guid; + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, WarbandGroup const& warbandGroup) +{ + data << uint64(warbandGroup.GroupID); + data << uint8(warbandGroup.Unknown_1100); + data << int32(warbandGroup.Flags); + data << uint32(warbandGroup.Members.size()); + + for (WarbandGroupMember const& member : warbandGroup.Members) + data << member; + + return data; +} + +EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields) : Basic(fields) +{ +} + +EnumCharactersResult::RegionwideCharacterListEntry::RegionwideCharacterListEntry(Field const* fields) : Basic(fields) +{ +} + WorldPacket const* EnumCharactersResult::Write() { _worldPacket.reserve(9 + Characters.size() * sizeof(CharacterInfo) + RaceUnlockData.size() * sizeof(RaceUnlock)); _worldPacket << Bits<1>(Success); + _worldPacket << Bits<1>(Realmless); _worldPacket << Bits<1>(IsDeletedCharacters); _worldPacket << Bits<1>(IsNewPlayerRestrictionSkipped); _worldPacket << Bits<1>(IsNewPlayerRestricted); _worldPacket << Bits<1>(IsNewPlayer); _worldPacket << Bits<1>(IsTrialAccountRestricted); _worldPacket << OptionalInit(DisabledClassesMask); + _worldPacket << Bits<1>(DontCreateCharacterDisplays); _worldPacket << uint32(Characters.size()); + _worldPacket << uint32(RegionwideCharacters.size()); _worldPacket << int32(MaxCharacterLevel); _worldPacket << uint32(RaceUnlockData.size()); _worldPacket << uint32(UnlockedConditionalAppearances.size()); _worldPacket << uint32(RaceLimitDisables.size()); + _worldPacket << uint32(WarbandGroups.size()); if (DisabledClassesMask) _worldPacket << uint32(*DisabledClassesMask); @@ -315,9 +383,15 @@ WorldPacket const* EnumCharactersResult::Write() for (RaceLimitDisableInfo const& raceLimitDisableInfo : RaceLimitDisables) _worldPacket << raceLimitDisableInfo; + for (WarbandGroup const& warbandGroup : WarbandGroups) + _worldPacket << warbandGroup; + for (CharacterInfo const& charInfo : Characters) _worldPacket << charInfo; + for (RegionwideCharacterListEntry const& charInfo : RegionwideCharacters) + _worldPacket << charInfo; + for (RaceUnlock const& raceUnlock : RaceUnlockData) _worldPacket << raceUnlock; @@ -590,6 +664,7 @@ void AlterApperance::Read() _worldPacket >> NewSex; _worldPacket >> CustomizedRace; _worldPacket >> CustomizedChrModelID; + _worldPacket >> UnalteredVisualRaceID; for (ChrCustomizationChoice& customization : Customizations) _worldPacket >> customization; diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 89d4312a6fc..e061ce3f7fa 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -116,10 +116,25 @@ namespace WorldPackets int32 BackgroundColor = -1; }; + struct WarbandGroupMember + { + int32 WarbandScenePlacementID = 0; + int32 Type = 0; + ObjectGuid Guid; + }; + + struct WarbandGroup + { + uint64 GroupID = 0; + uint8 Unknown_1100 = 0; + int32 Flags = 0; ///< enum WarbandGroupFlags { Collapsed = 1 } + std::vector<WarbandGroupMember> Members; + }; + class EnumCharactersResult final : public ServerPacket { public: - struct CharacterInfo + struct CharacterInfoBasic { /** * @fn void WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Field* fields); @@ -128,9 +143,10 @@ namespace WorldPackets * * @param fields Field set of CharacterDatabaseStatements::CHAR_SEL_ENUM */ - CharacterInfo(Field const* fields); + CharacterInfoBasic(Field const* fields); ObjectGuid Guid; + uint32 VirtualRealmAddress = 0; uint64 GuildClubMemberID = 0; ///< same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known) std::string Name; uint8 ListPosition = 0; ///< Order of the characters in list @@ -146,7 +162,6 @@ namespace WorldPackets uint32 Flags = 0; ///< Character flag @see enum CharacterFlags uint32 Flags2 = 0; ///< Character customization flags @see enum CharacterCustomizeFlags uint32 Flags3 = 0; ///< Character flags 3 @todo research - uint32 Flags4 = 0; bool FirstLogin = false; uint8 unkWod61x = 0; Timestamp<> LastPlayedTime; @@ -160,7 +175,6 @@ namespace WorldPackets uint32 PetExperienceLevel = 0; uint32 PetCreatureFamilyID = 0; - bool BoostInProgress = false; ///< @todo int32 ProfessionIds[2] = { }; ///< @todo struct VisualItemInfo @@ -170,14 +184,41 @@ namespace WorldPackets int32 SecondaryItemModifiedAppearanceID = 0; // also -1 is some special value uint8 InvType = 0; uint8 Subclass = 0; + uint32 ItemID = 0; }; std::array<VisualItemInfo, 19> VisualItems = { }; + CustomTabardInfo PersonalTabard; + }; + + struct CharacterRestrictionAndMailData + { + bool BoostInProgress = false; ///< @todo + uint32 Flags4 = 0; std::vector<std::string> MailSenders; std::vector<uint32> MailSenderTypes; bool RpeResetAvailable = false; bool RpeResetQuestClearAvailable = false; - CustomTabardInfo PersonalTabard; + }; + + struct CharacterInfo + { + CharacterInfo(Field const* fields); + + CharacterInfoBasic Basic; + CharacterRestrictionAndMailData RestrictionsAndMails; + }; + + struct RegionwideCharacterListEntry + { + RegionwideCharacterListEntry(Field const* fields); + + CharacterInfoBasic Basic; + uint64 Money = 0; + float CurrentSeasonMythicPlusOverallScore = 0.0f; + uint32 CurrentSeasonBestPvpRating = 0; + int8 PvpRatingBracket = 0; + int16 PvpRatingAssociatedSpecID = 0; }; struct RaceUnlock @@ -212,20 +253,24 @@ namespace WorldPackets WorldPacket const* Write() override; - bool Success = false; ///< + bool Success = false; + bool Realmless = false; bool IsDeletedCharacters = false; ///< used for character undelete list bool IsNewPlayerRestrictionSkipped = false; ///< allows client to skip new player restrictions bool IsNewPlayerRestricted = false; ///< forbids using level boost and class trials bool IsNewPlayer = false; ///< forbids hero classes and allied races bool IsTrialAccountRestricted = false; + bool DontCreateCharacterDisplays = false; int32 MaxCharacterLevel = 1; Optional<uint32> DisabledClassesMask; std::vector<CharacterInfo> Characters; ///< all characters on the list - std::vector<RaceUnlock> RaceUnlockData; ///< + std::vector<RegionwideCharacterListEntry> RegionwideCharacters; + std::vector<RaceUnlock> RaceUnlockData; std::vector<UnlockedConditionalAppearance> UnlockedConditionalAppearances; std::vector<RaceLimitDisableInfo> RaceLimitDisables; + std::vector<WarbandGroup> WarbandGroups; }; class CheckCharacterNameAvailability final : public ClientPacket @@ -656,6 +701,7 @@ namespace WorldPackets Array<ChrCustomizationChoice, 250> Customizations; int32 CustomizedRace = 0; int32 CustomizedChrModelID = 0; + int32 UnalteredVisualRaceID = 0; }; class BarberShopResult final : public ServerPacket diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp index 9ba99eb837e..6a7e93a32fa 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.cpp +++ b/src/server/game/Server/Packets/CombatLogPackets.cpp @@ -110,7 +110,7 @@ WorldPacket const* SpellExecuteLog::Write() { *this << powerDrainTarget.Victim; *this << uint32(powerDrainTarget.Points); - *this << uint32(powerDrainTarget.PowerType); + *this << int8(powerDrainTarget.PowerType); *this << float(powerDrainTarget.Amplitude); } } diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp index 11b66971073..3be80ecc4ce 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp @@ -49,13 +49,13 @@ void SpellCastLogData::Initialize(Spell const* spell) bool primaryPowerAdded = false; for (SpellPowerCost const& cost : spell->GetPowerCost()) { - PowerData.emplace_back(int32(cost.Power), unitCaster->GetPower(Powers(cost.Power)), int32(cost.Amount)); + PowerData.emplace_back(int8(cost.Power), unitCaster->GetPower(Powers(cost.Power)), int32(cost.Amount)); if (cost.Power == primaryPowerType) primaryPowerAdded = true; } if (!primaryPowerAdded) - PowerData.emplace(PowerData.begin(), int32(primaryPowerType), unitCaster->GetPower(primaryPowerType), 0); + PowerData.emplace(PowerData.begin(), int8(primaryPowerType), unitCaster->GetPower(primaryPowerType), 0); } } @@ -165,7 +165,7 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastLogData const& spellCastLogDat for (SpellLogPowerData const& powerData : spellCastLogData.PowerData) { - data << int32(powerData.PowerType); + data << int8(powerData.PowerType); data << int32(powerData.Amount); data << int32(powerData.Cost); } diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.h b/src/server/game/Server/Packets/CombatLogPacketsCommon.h index 084d3851555..feda3b7afda 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h @@ -30,9 +30,9 @@ namespace WorldPackets { struct SpellLogPowerData { - SpellLogPowerData(int32 powerType, int32 amount, int32 cost) : PowerType(powerType), Amount(amount), Cost(cost) { } + SpellLogPowerData(int8 powerType, int32 amount, int32 cost) : PowerType(powerType), Amount(amount), Cost(cost) { } - int32 PowerType = 0; + int8 PowerType = 0; int32 Amount = 0; int32 Cost = 0; }; diff --git a/src/server/game/Server/Packets/CombatPackets.cpp b/src/server/game/Server/Packets/CombatPackets.cpp index 33dd2c9a64a..51de6ecde50 100644 --- a/src/server/game/Server/Packets/CombatPackets.cpp +++ b/src/server/game/Server/Packets/CombatPackets.cpp @@ -107,8 +107,8 @@ WorldPacket const* WorldPackets::Combat::PowerUpdate::Write() _worldPacket << uint32(Powers.size()); for (PowerUpdatePower const& power : Powers) { - _worldPacket << int32(power.Power); _worldPacket << uint8(power.PowerType); + _worldPacket << int32(power.Power); } return &_worldPacket; @@ -116,7 +116,7 @@ WorldPacket const* WorldPackets::Combat::PowerUpdate::Write() WorldPacket const* WorldPackets::Combat::InterruptPowerRegen::Write() { - _worldPacket << int32(PowerType); + _worldPacket << int8(PowerType); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/CombatPackets.h b/src/server/game/Server/Packets/CombatPackets.h index 27dc7ec44ad..42424d8f18b 100644 --- a/src/server/game/Server/Packets/CombatPackets.h +++ b/src/server/game/Server/Packets/CombatPackets.h @@ -163,7 +163,7 @@ namespace WorldPackets class InterruptPowerRegen final : public ServerPacket { public: - explicit InterruptPowerRegen(Powers powerType) : ServerPacket(SMSG_INTERRUPT_POWER_REGEN, 4), PowerType(powerType) { } + explicit InterruptPowerRegen(Powers powerType) : ServerPacket(SMSG_INTERRUPT_POWER_REGEN, 1), PowerType(powerType) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/CraftingPacketsCommon.cpp b/src/server/game/Server/Packets/CraftingPacketsCommon.cpp index d5518dda79e..ee03eedbb75 100644 --- a/src/server/game/Server/Packets/CraftingPacketsCommon.cpp +++ b/src/server/game/Server/Packets/CraftingPacketsCommon.cpp @@ -44,6 +44,9 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData) data << craftingData.ItemGUID; data << int32(craftingData.Quantity); data << int32(craftingData.EnchantID); + data << int32(craftingData.ConcentrationCurrencyID); + data << int32(craftingData.ConcentrationSpent); + data << int32(craftingData.IngenuityRefund); for (SpellReducedReagent const& spellReducedReagent : craftingData.ResourcesReturned) data << spellReducedReagent; @@ -52,6 +55,8 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData) data << Bits<1>(craftingData.field_29); data << Bits<1>(craftingData.field_2A); data << Bits<1>(craftingData.BonusCraft); + data << Bits<1>(craftingData.HasIngenuityProc); + data << Bits<1>(craftingData.ApplyConcentration); data.FlushBits(); data << craftingData.OldItem; diff --git a/src/server/game/Server/Packets/CraftingPacketsCommon.h b/src/server/game/Server/Packets/CraftingPacketsCommon.h index 9426662d460..2182a28627b 100644 --- a/src/server/game/Server/Packets/CraftingPacketsCommon.h +++ b/src/server/game/Server/Packets/CraftingPacketsCommon.h @@ -52,6 +52,11 @@ struct CraftingData Item::ItemInstance OldItem; Item::ItemInstance NewItem; int32 EnchantID = 0; + int32 ConcentrationCurrencyID = 0; + int32 ConcentrationSpent = 0; + int32 IngenuityRefund = 0; + bool HasIngenuityProc = false; + bool ApplyConcentration = false; }; ByteBuffer& operator<<(ByteBuffer& data, SpellReducedReagent const& spellReducedReagent); diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.cpp b/src/server/game/Server/Packets/EquipmentSetPackets.cpp index 7d7fa640b9a..f8423393343 100644 --- a/src/server/game/Server/Packets/EquipmentSetPackets.cpp +++ b/src/server/game/Server/Packets/EquipmentSetPackets.cpp @@ -19,9 +19,9 @@ WorldPacket const* WorldPackets::EquipmentSet::EquipmentSetID::Write() { - _worldPacket << uint64(GUID); _worldPacket << int32(Type); _worldPacket << uint32(SetID); + _worldPacket << uint64(GUID); return &_worldPacket; } @@ -119,8 +119,8 @@ void WorldPackets::EquipmentSet::UseEquipmentSet::Read() WorldPacket const* WorldPackets::EquipmentSet::UseEquipmentSetResult::Write() { + _worldPacket << int32(Reason); _worldPacket << uint64(GUID); - _worldPacket << uint8(Reason); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.h b/src/server/game/Server/Packets/EquipmentSetPackets.h index a36c95829e0..ed4165b4236 100644 --- a/src/server/game/Server/Packets/EquipmentSetPackets.h +++ b/src/server/game/Server/Packets/EquipmentSetPackets.h @@ -94,7 +94,7 @@ namespace WorldPackets WorldPacket const* Write() override; uint64 GUID = 0; ///< Set Identifier - uint8 Reason = 0; + int32 Reason = 0; }; } } diff --git a/src/server/game/Server/Packets/GarrisonPackets.cpp b/src/server/game/Server/Packets/GarrisonPackets.cpp index c3212ea899c..20f14eaa47e 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.cpp +++ b/src/server/game/Server/Packets/GarrisonPackets.cpp @@ -41,7 +41,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonPlotInfo const& plotInfo) { data << uint32(plotInfo.GarrPlotInstanceID); data << plotInfo.PlotPos; - data << uint32(plotInfo.PlotType); + data << uint8(plotInfo.PlotType); return data; } @@ -232,7 +232,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison) ASSERT(garrison.Missions.size() == garrison.MissionOvermaxRewards.size()); ASSERT(garrison.Missions.size() == garrison.CanStartMission.size()); - data << int32(garrison.GarrTypeID); + data << uint8(garrison.GarrTypeID); data << int32(garrison.GarrSiteID); data << int32(garrison.GarrSiteLevelID); data << uint32(garrison.Buildings.size()); @@ -310,7 +310,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison) ByteBuffer& operator<<(ByteBuffer& data, FollowerSoftCapInfo const& followerSoftCapInfo) { - data << int32(followerSoftCapInfo.GarrFollowerTypeID); + data << uint8(followerSoftCapInfo.GarrFollowerTypeID); data << uint32(followerSoftCapInfo.Count); return data; } @@ -365,7 +365,7 @@ void GarrisonPurchaseBuilding::Read() WorldPacket const* GarrisonPlaceBuildingResult::Write() { - _worldPacket << int32(GarrTypeID); + _worldPacket << uint8(GarrTypeID); _worldPacket << uint32(Result); _worldPacket << BuildingInfo; _worldPacket.WriteBit(PlayActivationCinematic); @@ -382,7 +382,7 @@ void GarrisonCancelConstruction::Read() WorldPacket const* GarrisonBuildingRemoved::Write() { - _worldPacket << int32(GarrTypeID); + _worldPacket << uint8(GarrTypeID); _worldPacket << uint32(Result); _worldPacket << uint32(GarrPlotInstanceID); _worldPacket << uint32(GarrBuildingID); @@ -392,7 +392,7 @@ WorldPacket const* GarrisonBuildingRemoved::Write() WorldPacket const* GarrisonLearnBlueprintResult::Write() { - _worldPacket << int32(GarrTypeID); + _worldPacket << uint8(GarrTypeID); _worldPacket << uint32(Result); _worldPacket << uint32(BuildingID); @@ -401,7 +401,7 @@ WorldPacket const* GarrisonLearnBlueprintResult::Write() WorldPacket const* GarrisonUnlearnBlueprintResult::Write() { - _worldPacket << int32(GarrTypeID); + _worldPacket << uint8(GarrTypeID); _worldPacket << uint32(Result); _worldPacket << uint32(BuildingID); @@ -410,7 +410,7 @@ WorldPacket const* GarrisonUnlearnBlueprintResult::Write() WorldPacket const* GarrisonRequestBlueprintAndSpecializationDataResult::Write() { - _worldPacket << int32(GarrTypeID); + _worldPacket << uint8(GarrTypeID); _worldPacket << uint32(BlueprintsKnown ? BlueprintsKnown->size() : 0); _worldPacket << uint32(SpecializationsKnown ? SpecializationsKnown->size() : 0); if (BlueprintsKnown) @@ -443,7 +443,7 @@ WorldPacket const* GarrisonMapDataResponse::Write() WorldPacket const* GarrisonPlotPlaced::Write() { - _worldPacket << int32(GarrTypeID); + _worldPacket << uint8(GarrTypeID); _worldPacket << *PlotInfo; return &_worldPacket; @@ -458,7 +458,7 @@ WorldPacket const* GarrisonPlotRemoved::Write() WorldPacket const* GarrisonAddFollowerResult::Write() { - _worldPacket << int32(GarrTypeID); + _worldPacket << uint8(GarrTypeID); _worldPacket << uint32(Result); _worldPacket << Follower; @@ -467,9 +467,9 @@ WorldPacket const* GarrisonAddFollowerResult::Write() WorldPacket const* GarrisonRemoveFollowerResult::Write() { - _worldPacket << uint64(FollowerDBID); - _worldPacket << int32(GarrTypeID); + _worldPacket << uint8(GarrTypeID); _worldPacket << uint32(Result); + _worldPacket << uint64(FollowerDBID); _worldPacket << uint32(Destroyed); return &_worldPacket; diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h index 983982842f8..4053c784582 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.h +++ b/src/server/game/Server/Packets/GarrisonPackets.h @@ -68,7 +68,7 @@ namespace WorldPackets { uint32 GarrPlotInstanceID = 0; TaggedPosition<Position::XYZO> PlotPos; - uint32 PlotType = 0; + uint8 PlotType = 0; }; struct GarrisonBuildingInfo @@ -197,7 +197,7 @@ namespace WorldPackets struct GarrisonInfo { - int32 GarrTypeID = 0; + uint8 GarrTypeID = 0; uint32 GarrSiteID = 0; uint32 GarrSiteLevelID = 0; uint32 NumFollowerActivationsRemaining = 0; @@ -221,7 +221,7 @@ namespace WorldPackets struct FollowerSoftCapInfo { - int32 GarrFollowerTypeID; + uint8 GarrFollowerTypeID; uint32 Count; }; @@ -281,7 +281,7 @@ namespace WorldPackets WorldPacket const* Write() override; - int32 GarrTypeID = 0; + uint8 GarrTypeID = 0; uint32 Result = 0; GarrisonBuildingInfo BuildingInfo; bool PlayActivationCinematic = false; @@ -305,7 +305,7 @@ namespace WorldPackets WorldPacket const* Write() override; - int32 GarrTypeID = 0; + uint8 GarrTypeID = 0; uint32 Result = 0; uint32 GarrPlotInstanceID = 0; uint32 GarrBuildingID = 0; @@ -318,7 +318,7 @@ namespace WorldPackets WorldPacket const* Write() override; - int32 GarrTypeID = 0; + uint8 GarrTypeID = 0; uint32 BuildingID = 0; uint32 Result = 0; }; @@ -330,9 +330,9 @@ namespace WorldPackets WorldPacket const* Write() override; - int32 GarrTypeID = 0; - uint32 BuildingID = 0; + uint8 GarrTypeID = 0; uint32 Result = 0; + uint32 BuildingID = 0; }; class GarrisonRequestBlueprintAndSpecializationData final : public ClientPacket @@ -350,9 +350,9 @@ namespace WorldPackets WorldPacket const* Write() override; - int32 GarrTypeID = 0; - std::unordered_set<uint32> const* SpecializationsKnown = nullptr; + uint8 GarrTypeID = 0; std::unordered_set<uint32> const* BlueprintsKnown = nullptr; + std::unordered_set<uint32> const* SpecializationsKnown = nullptr; }; class GarrisonGetMapData final : public ClientPacket @@ -389,7 +389,7 @@ namespace WorldPackets WorldPacket const* Write() override; - int32 GarrTypeID = 0; + uint8 GarrTypeID = 0; GarrisonPlotInfo* PlotInfo = nullptr; }; @@ -410,7 +410,7 @@ namespace WorldPackets WorldPacket const* Write() override; - int32 GarrTypeID = 0; + uint8 GarrTypeID = 0; GarrisonFollower Follower; uint32 Result = 0; }; @@ -418,13 +418,13 @@ namespace WorldPackets class GarrisonRemoveFollowerResult final : public ServerPacket { public: - GarrisonRemoveFollowerResult() : ServerPacket(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, 8 + 4 + 4 + 4) { } + GarrisonRemoveFollowerResult() : ServerPacket(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, 1 + 4 + 8 + 4) { } WorldPacket const* Write() override; - uint64 FollowerDBID = 0; - int32 GarrTypeID = 0; + uint8 GarrTypeID = 0; uint32 Result = 0; + uint64 FollowerDBID = 0; uint32 Destroyed = 0; }; diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index 88c971c8ae7..db54693206f 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -109,6 +109,11 @@ WorldPacket const* WorldPackets::Guild::GuildCommandResult::Write() return &_worldPacket; } +void WorldPackets::Guild::AcceptGuildInvite::Read() +{ + _worldPacket >> GuildGuid; +} + void WorldPackets::Guild::DeclineGuildInvites::Read() { Allow = _worldPacket.ReadBit(); @@ -214,7 +219,6 @@ WorldPacket const* WorldPackets::Guild::GuildEventPresenceChange::Write() _worldPacket.WriteBits(Name.length(), 6); _worldPacket.WriteBit(LoggedOn); - _worldPacket.WriteBit(Mobile); _worldPacket.FlushBits(); _worldPacket.WriteString(Name); diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h index 31f9c6ba62d..f78d582c83f 100644 --- a/src/server/game/Server/Packets/GuildPackets.h +++ b/src/server/game/Server/Packets/GuildPackets.h @@ -173,7 +173,9 @@ namespace WorldPackets public: AcceptGuildInvite(WorldPacket&& packet) : ClientPacket(CMSG_ACCEPT_GUILD_INVITE, std::move(packet)) { } - void Read() override { } + void Read() override; + + ObjectGuid GuildGuid; }; class GuildDeclineInvitation final : public ClientPacket @@ -250,7 +252,6 @@ namespace WorldPackets ObjectGuid Guid; uint32 VirtualRealmAddress = 0; std::string Name; - bool Mobile = false; bool LoggedOn = false; }; diff --git a/src/server/game/Server/Packets/InstancePackets.cpp b/src/server/game/Server/Packets/InstancePackets.cpp index 41e73128573..86caa86b6ee 100644 --- a/src/server/game/Server/Packets/InstancePackets.cpp +++ b/src/server/game/Server/Packets/InstancePackets.cpp @@ -108,9 +108,11 @@ WorldPacket const* WorldPackets::Instance::PendingRaidLock::Write() WorldPacket const* WorldPackets::Instance::RaidInstanceMessage::Write() { - _worldPacket << uint8(Type); + _worldPacket << int32(Type); _worldPacket << uint32(MapID); _worldPacket << uint32(DifficultyID); + _worldPacket << int32(TimeLeft); + _worldPacket << BitsSize<8>(WarningMessage); _worldPacket << Bits<1>(Locked); _worldPacket << Bits<1>(Extended); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h index 86f6838946f..ab980ca148f 100644 --- a/src/server/game/Server/Packets/InstancePackets.h +++ b/src/server/game/Server/Packets/InstancePackets.h @@ -157,9 +157,11 @@ namespace WorldPackets WorldPacket const* Write() override; - uint8 Type = 0; + int32 Type = 0; uint32 MapID = 0; uint32 DifficultyID = 0; + int32 TimeLeft = 0; + std::string_view WarningMessage; // GlobalStrings tag bool Locked = false; bool Extended = false; }; diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp index 7dc3dc23138..5dccbe3e1c9 100644 --- a/src/server/game/Server/Packets/ItemPackets.cpp +++ b/src/server/game/Server/Packets/ItemPackets.cpp @@ -254,10 +254,11 @@ WorldPacket const* WorldPackets::Item::ItemPushResult::Write() _worldPacket << int32(QuestLogItemID); _worldPacket << int32(Quantity); _worldPacket << int32(QuantityInInventory); + _worldPacket << int32(QuantityInQuestLog); _worldPacket << int32(DungeonEncounterID); _worldPacket << int32(BattlePetSpeciesID); _worldPacket << int32(BattlePetBreedID); - _worldPacket << uint32(BattlePetBreedQuality); + _worldPacket << uint8(BattlePetBreedQuality); _worldPacket << int32(BattlePetLevel); _worldPacket << ItemGUID; _worldPacket << uint32(Toasts.size()); diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h index 60287883441..e1b33cc99db 100644 --- a/src/server/game/Server/Packets/ItemPackets.h +++ b/src/server/game/Server/Packets/ItemPackets.h @@ -347,10 +347,11 @@ namespace WorldPackets // only set if different than real ID (similar to CreatureTemplate.KillCredit) int32 Quantity = 0; int32 QuantityInInventory = 0; + int32 QuantityInQuestLog = 0; int32 DungeonEncounterID = 0; int32 BattlePetSpeciesID = 0; int32 BattlePetBreedID = 0; - uint32 BattlePetBreedQuality = 0; + uint8 BattlePetBreedQuality = 0; int32 BattlePetLevel = 0; ObjectGuid ItemGUID; std::vector<UiEventToast> Toasts; @@ -488,6 +489,14 @@ namespace WorldPackets ObjectGuid Item; }; + class SortAccountBankBags final : public ClientPacket + { + public: + explicit SortAccountBankBags(WorldPacket&& packet) : ClientPacket(CMSG_SORT_ACCOUNT_BANK_BAGS, std::move(packet)) { } + + void Read() override { } + }; + class SortBags final : public ClientPacket { public: @@ -545,7 +554,7 @@ namespace WorldPackets void Read() override; - uint32 BagIndex = 0; + uint8 BagIndex = 0; BagSlotFlags FlagToChange = { }; bool On = false; }; @@ -557,7 +566,7 @@ namespace WorldPackets void Read() override; - uint32 BagIndex = 0; + uint8 BagIndex = 0; BagSlotFlags FlagToChange = { }; bool On = false; }; diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp index e68a6f35dca..9fdc43bc91b 100644 --- a/src/server/game/Server/Packets/ItemPacketsCommon.cpp +++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp @@ -163,16 +163,16 @@ ByteBuffer& operator>>(ByteBuffer& data, ItemBonuses& itemBonusInstanceData) ByteBuffer& operator<<(ByteBuffer& data, ItemMod const& itemMod) { - data << int32(itemMod.Value); data << uint8(itemMod.Type); + data << int32(itemMod.Value); return data; } ByteBuffer& operator>>(ByteBuffer& data, ItemMod& itemMod) { - data >> itemMod.Value; data >> As<uint8>(itemMod.Type); + data >> itemMod.Value; return data; } diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 895c12fb704..242a0c0594b 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -691,6 +691,7 @@ WorldPacket const* WorldPackets::Movement::NewWorld::Write() _worldPacket << Loc; _worldPacket << uint32(Reason); _worldPacket << MovementOffset; + _worldPacket << int32(Counter); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index 77cc00d71c7..ed05e244c19 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -283,6 +283,7 @@ namespace WorldPackets uint32 Reason = 0; TeleportLocation Loc; TaggedPosition<Position::XYZ> MovementOffset; // Adjusts all pending movement events by this offset + int32 Counter = 0; }; class WorldPortResponse final : public ClientPacket diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp index 4a81fef3f0b..7ba4257f4f1 100644 --- a/src/server/game/Server/Packets/NPCPackets.cpp +++ b/src/server/game/Server/Packets/NPCPackets.cpp @@ -51,6 +51,7 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipOptions const& gossipOption data << Bits<2>(gossipOption.Status); data << OptionalInit(gossipOption.SpellID); data << OptionalInit(gossipOption.OverrideIconID); + data << Bits<8>(gossipOption.FailureDescription.length() + 1); data.FlushBits(); data << gossipOption.Treasure; @@ -64,6 +65,9 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipOptions const& gossipOption if (gossipOption.OverrideIconID) data << int32(*gossipOption.OverrideIconID); + if (!gossipOption.FailureDescription.empty()) + data << gossipOption.FailureDescription; + return data; } @@ -74,9 +78,12 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipText const& gossipText) data << int32(gossipText.QuestType); data << int32(gossipText.QuestFlags[0]); data << int32(gossipText.QuestFlags[1]); + data << int32(gossipText.QuestFlags[2]); data << Bits<1>(gossipText.Repeatable); + data << Bits<1>(gossipText.ResetByScheduler); data << Bits<1>(gossipText.Important); + data << Bits<1>(gossipText.Meta); data << BitsSize<9>(gossipText.QuestTitle); data.FlushBits(); @@ -104,6 +111,7 @@ WorldPacket const* GossipMessage::Write() { _worldPacket << GossipGUID; _worldPacket << int32(GossipID); + _worldPacket << int32(LfgDungeonsID); _worldPacket << int32(FriendshipFactionID); _worldPacket << uint32(GossipOptions.size()); _worldPacket << uint32(GossipText.size()); diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index 79b2bd45625..41b96bfc763 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -34,7 +34,6 @@ namespace WorldPackets { namespace NPC { - // CMSG_BANKER_ACTIVATE // CMSG_BINDER_ACTIVATE // CMSG_BINDER_CONFIRM // CMSG_GOSSIP_HELLO @@ -90,6 +89,7 @@ namespace WorldPackets TreasureLootList Treasure; Optional<int32> SpellID; Optional<int32> OverrideIconID; + std::string FailureDescription; }; struct ClientGossipText @@ -98,9 +98,11 @@ namespace WorldPackets int32 ContentTuningID = 0; int32 QuestType = 0; bool Repeatable = false; + bool ResetByScheduler = false; bool Important = false; + bool Meta = false; std::string QuestTitle; - std::array<int32, 2> QuestFlags = { }; + std::array<int32, 3> QuestFlags = { }; }; ByteBuffer& operator<<(ByteBuffer& data, ClientGossipText const& gossipText); @@ -119,6 +121,7 @@ namespace WorldPackets Optional<int32> TextID; // in classic variants this still holds npc_text id Optional<int32> BroadcastTextID; int32 GossipID = 0; + int32 LfgDungeonsID = 0; }; class GossipSelectOption final : public ClientPacket diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index fc8365dd507..5b7e79a164b 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -508,6 +508,7 @@ WorldPacket const* WorldPackets::Party::PartyUpdate::Write() _worldPacket << uint32(SequenceNum); _worldPacket << LeaderGUID; _worldPacket << uint8(LeaderFactionGroup); + _worldPacket << int32(PingRestriction); _worldPacket << uint32(PlayerList.size()); _worldPacket.WriteBit(LfgInfos.has_value()); _worldPacket.WriteBit(LootSettings.has_value()); @@ -736,7 +737,7 @@ WorldPacket const* WorldPackets::Party::BroadcastSummonResponse::Write() void WorldPackets::Party::SetRestrictPingsToAssistants::Read() { _worldPacket >> OptionalInit(PartyIndex); - _worldPacket >> Bits<1>(RestrictPingsToAssistants); + _worldPacket >> As<int32>(RestrictTo); if (PartyIndex) _worldPacket >> PartyIndex.emplace(); } @@ -764,8 +765,9 @@ void WorldPackets::Party::SendPingWorldPoint::Read() _worldPacket >> SenderGUID; _worldPacket >> MapID; _worldPacket >> Point; - _worldPacket >> As<uint8>(Type); + _worldPacket >> As<int32>(Type); _worldPacket >> PinFrameID; + _worldPacket >> Transport; } WorldPacket const* WorldPackets::Party::ReceivePingWorldPoint::Write() @@ -775,6 +777,7 @@ WorldPacket const* WorldPackets::Party::ReceivePingWorldPoint::Write() _worldPacket << Point; _worldPacket << uint8(Type); _worldPacket << PinFrameID; + _worldPacket << Transport; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index a865f1f1e7c..1adaa3d33dd 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -561,6 +561,8 @@ namespace WorldPackets int32 MyIndex = 0; int32 SequenceNum = 0; + RestrictPingsTo PingRestriction = RestrictPingsTo::None; + std::vector<PartyPlayerInfo> PlayerList; Optional<PartyLFGInfo> LfgInfos; @@ -674,7 +676,7 @@ namespace WorldPackets void Read() override; Optional<uint8> PartyIndex; - bool RestrictPingsToAssistants = false; + RestrictPingsTo RestrictTo = RestrictPingsTo::None; }; class SendPingUnit final : public ClientPacket @@ -715,6 +717,7 @@ namespace WorldPackets TaggedPosition<Position::XYZ> Point; PingSubjectType Type = PingSubjectType::Max; uint32 PinFrameID = 0; + ObjectGuid Transport; }; class ReceivePingWorldPoint final : public ServerPacket @@ -729,6 +732,7 @@ namespace WorldPackets TaggedPosition<Position::XYZ> Point; PingSubjectType Type = PingSubjectType::Max; uint32 PinFrameID = 0; + ObjectGuid Transport; }; class CancelPingPin final : public ServerPacket diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index 72bde99ff5d..3e1f6aefd51 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -374,9 +374,9 @@ WorldPacket const* CorpseLocation::Write() _worldPacket << Player; _worldPacket << ActualMapID; - _worldPacket << Position; _worldPacket << MapID; _worldPacket << Transport; + _worldPacket << Position; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 1d8dc537de5..d1f31ccc7a7 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -182,7 +182,7 @@ WorldPacket const* QueryQuestInfoResponse::Write() _worldPacket << uint32(Info.Objectives.size()); _worldPacket << uint64(Info.AllowableRaces.RawValue); - _worldPacket << int32(Info.TreasurePickerID); + _worldPacket << uint32(Info.TreasurePickerID.size()); _worldPacket << int32(Info.Expansion); _worldPacket << int32(Info.ManagedWorldStateID); _worldPacket << int32(Info.QuestSessionBonus); @@ -194,6 +194,9 @@ WorldPacket const* QueryQuestInfoResponse::Write() for (QuestCompleteDisplaySpell const& rewardDisplaySpell : Info.RewardDisplaySpell) _worldPacket << rewardDisplaySpell; + if (!Info.TreasurePickerID.empty()) + _worldPacket.append(Info.TreasurePickerID.data(), Info.TreasurePickerID.size()); + _worldPacket << BitsSize<9>(Info.LogTitle); _worldPacket << BitsSize<12>(Info.LogDescription); _worldPacket << BitsSize<12>(Info.QuestDescription); @@ -204,12 +207,13 @@ WorldPacket const* QueryQuestInfoResponse::Write() _worldPacket << BitsSize<8>(Info.PortraitTurnInName); _worldPacket << BitsSize<11>(Info.QuestCompletionLog); _worldPacket << Bits<1>(Info.ReadyForTranslation); + _worldPacket << Bits<1>(Info.ResetByScheduler); _worldPacket.FlushBits(); for (QuestObjective const& questObjective : Info.Objectives) { _worldPacket << uint32(questObjective.ID); - _worldPacket << uint8(questObjective.Type); + _worldPacket << int32(questObjective.Type); _worldPacket << int8(questObjective.StorageIndex); _worldPacket << int32(questObjective.ObjectID); _worldPacket << int32(questObjective.Amount); @@ -276,11 +280,26 @@ WorldPacket const* QuestUpdateAddPvPCredit::Write() return &_worldPacket; } +ByteBuffer& operator<<(ByteBuffer& data, QuestRewardItem const& questRewardItem) +{ + data << int32(questRewardItem.ItemID); + data << int32(questRewardItem.ItemQty); + data << OptionalInit(questRewardItem.ContextFlags); + data.FlushBits(); + if (questRewardItem.ContextFlags) + data << As<int32>(*questRewardItem.ContextFlags); + + return data; +} + ByteBuffer& operator<<(ByteBuffer& data, QuestChoiceItem const& questChoiceItem) { data << Bits<2>(questChoiceItem.LootItemType); + data << OptionalInit(questChoiceItem.ContextFlags); data << questChoiceItem.Item; data << int32(questChoiceItem.Quantity); + if (questChoiceItem.ContextFlags) + data << As<int32>(*questChoiceItem.ContextFlags); return data; } @@ -289,23 +308,35 @@ ByteBuffer& operator>>(ByteBuffer& data, QuestChoiceItem& questChoiceItem) { data.ResetBitPos(); data >> Bits<2>(questChoiceItem.LootItemType); + data >> OptionalInit(questChoiceItem.ContextFlags); data >> questChoiceItem.Item; data >> questChoiceItem.Quantity; + if (questChoiceItem.ContextFlags) + data >> As<int32>(*questChoiceItem.ContextFlags); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, QuestRewardCurrency const& questRewardCurrency) +{ + data << int32(questRewardCurrency.CurrencyID); + data << int32(questRewardCurrency.CurrencyQty); + data << int32(questRewardCurrency.BonusQty); + data << OptionalInit(questRewardCurrency.ContextFlags); + data.FlushBits(); + if (questRewardCurrency.ContextFlags) + data << As<int32>(*questRewardCurrency.ContextFlags); return data; } ByteBuffer& operator<<(ByteBuffer& data, QuestRewards const& questRewards) { + for (QuestRewardItem const& item : questRewards.Items) + data << item; + data << int32(questRewards.ChoiceItemCount); data << int32(questRewards.ItemCount); - - for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i) - { - data << int32(questRewards.ItemID[i]); - data << int32(questRewards.ItemQty[i]); - } - data << int32(questRewards.Money); data << int32(questRewards.XP); data << int64(questRewards.ArtifactXP); @@ -326,22 +357,21 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestRewards const& questRewards) data << int32(questRewards.SpellCompletionID); - for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i) - { - data << int32(questRewards.CurrencyID[i]); - data << int32(questRewards.CurrencyQty[i]); - } - data << int32(questRewards.SkillLineID); data << int32(questRewards.NumSkillUps); - data << int32(questRewards.TreasurePickerID); + data << uint32(questRewards.TreasurePickerID.size()); + if (!questRewards.TreasurePickerID.empty()) + data.append(questRewards.TreasurePickerID.data(), questRewards.TreasurePickerID.size()); - for (QuestChoiceItem const& choiceItem : questRewards.ChoiceItems) - data << choiceItem; + for (QuestRewardCurrency const& currency : questRewards.Currencies) + data << currency; data << Bits<1>(questRewards.IsBoostSpell); data.FlushBits(); + for (QuestChoiceItem const& choiceItem : questRewards.ChoiceItems) + data << choiceItem; + return data; } @@ -354,6 +384,7 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestGiverOfferReward const& offer) data << int32(offer.QuestFlags[1]); // FlagsEx data << int32(offer.QuestFlags[2]); // FlagsEx2 data << int32(offer.SuggestedPartyMembers); + data << int32(offer.QuestInfoID); data << int32(offer.Emotes.size()); for (QuestDescEmote const& emote : offer.Emotes) { @@ -456,6 +487,7 @@ WorldPacket const* QuestGiverQuestDetails::Write() _worldPacket << uint32(DescEmotes.size()); _worldPacket << uint32(Objectives.size()); _worldPacket << int32(QuestStartItemID); + _worldPacket << int32(QuestInfoID); _worldPacket << int32(QuestSessionBonus); _worldPacket << int32(QuestGiverCreatureID); _worldPacket << uint32(ConditionalDescriptionText.size()); @@ -472,9 +504,9 @@ WorldPacket const* QuestGiverQuestDetails::Write() for (QuestObjectiveSimple const& obj : Objectives) { _worldPacket << int32(obj.ID); + _worldPacket << int32(obj.Type); _worldPacket << int32(obj.ObjectID); _worldPacket << int32(obj.Amount); - _worldPacket << uint8(obj.Type); } _worldPacket << BitsSize<9>(QuestTitle); @@ -521,6 +553,7 @@ WorldPacket const* QuestGiverRequestItems::Write() _worldPacket << int32(Collect.size()); _worldPacket << int32(Currency.size()); _worldPacket << int32(StatusFlags); + _worldPacket << int32(QuestInfoID); for (QuestObjectiveCollect const& obj : Collect) { diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index a6c89c0cd69..f119eac4e31 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -185,7 +185,7 @@ namespace WorldPackets int32 CompleteSoundKitID = 0; int32 AreaGroupID = 0; int64 TimeAllowed = 0; - int32 TreasurePickerID = 0; + std::span<int32 const> TreasurePickerID; int32 Expansion = 0; int32 ManagedWorldStateID = 0; int32 QuestSessionBonus = 0; @@ -205,6 +205,7 @@ namespace WorldPackets int32 RewardCurrencyID[QUEST_REWARD_CURRENCY_COUNT] = { }; int32 RewardCurrencyQty[QUEST_REWARD_CURRENCY_COUNT] = { }; bool ReadyForTranslation = false; + bool ResetByScheduler = false; }; class QueryQuestInfoResponse final : public ServerPacket @@ -257,11 +258,27 @@ namespace WorldPackets uint16 Count = 0; }; + struct QuestRewardItem + { + int32 ItemID = 0; + int32 ItemQty = 0; + Optional<QuestRewardContextFlags> ContextFlags; + }; + struct QuestChoiceItem { ::LootItemType LootItemType = ::LootItemType::Item; Item::ItemInstance Item; int32 Quantity = 0; + Optional<QuestRewardContextFlags> ContextFlags; + }; + + struct QuestRewardCurrency + { + int32 CurrencyID = 0; + int32 CurrencyQty = 0; + int32 BonusQty = 0; + Optional<QuestRewardContextFlags> ContextFlags; }; struct QuestRewards @@ -279,16 +296,14 @@ namespace WorldPackets int32 SpellCompletionID = 0; int32 SkillLineID = 0; int32 NumSkillUps = 0; - int32 TreasurePickerID = 0; + std::span<int32 const> TreasurePickerID; std::array<QuestChoiceItem, QUEST_REWARD_CHOICES_COUNT> ChoiceItems = { }; - std::array<int32, QUEST_REWARD_ITEM_COUNT> ItemID = { }; - std::array<int32, QUEST_REWARD_ITEM_COUNT> ItemQty = { }; + std::array<QuestRewardItem, QUEST_REWARD_ITEM_COUNT> Items = { }; std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> FactionID = { }; std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> FactionValue = { }; std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> FactionOverride = { }; std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> FactionCapIn = { }; - std::array<int32, QUEST_REWARD_CURRENCY_COUNT> CurrencyID = { }; - std::array<int32, QUEST_REWARD_CURRENCY_COUNT> CurrencyQty = { }; + std::array<QuestRewardCurrency, QUEST_REWARD_CURRENCY_COUNT> Currencies = { }; bool IsBoostSpell = false; }; @@ -309,6 +324,7 @@ namespace WorldPackets QuestRewards Rewards; std::vector<QuestDescEmote> Emotes; std::array<int32, 3> QuestFlags = { }; + int32 QuestInfoID = 0; }; class QuestGiverOfferRewardMessage final : public ServerPacket @@ -390,9 +406,9 @@ namespace WorldPackets struct QuestObjectiveSimple { int32 ID = 0; + int32 Type = 0; int32 ObjectID = 0; int32 Amount = 0; - uint8 Type = 0; }; class QuestGiverQuestDetails final : public ServerPacket @@ -417,6 +433,7 @@ namespace WorldPackets int32 PortraitGiverMount = 0; int32 PortraitGiverModelSceneID = 0; int32 QuestStartItemID = 0; + int32 QuestInfoID = 0; int32 QuestSessionBonus = 0; int32 QuestGiverCreatureID = 0; std::string PortraitGiverText; @@ -466,6 +483,7 @@ namespace WorldPackets std::vector<QuestObjectiveCollect> Collect; std::vector<QuestCurrency> Currency; int32 StatusFlags = 0; + int32 QuestInfoID = 0; uint32 QuestFlags[3] = { }; std::string QuestTitle; std::string CompletionText; diff --git a/src/server/game/Server/Packets/ReputationPackets.cpp b/src/server/game/Server/Packets/ReputationPackets.cpp index aff39c3bbde..fece28f80b7 100644 --- a/src/server/game/Server/Packets/ReputationPackets.cpp +++ b/src/server/game/Server/Packets/ReputationPackets.cpp @@ -18,18 +18,37 @@ #include "ReputationPackets.h" #include "PacketUtilities.h" +namespace WorldPackets::Reputation +{ +ByteBuffer& operator<<(ByteBuffer& data, FactionData const& factionData) +{ + data << int32(factionData.FactionID); + data << uint16(factionData.Flags); + data << int32(factionData.Standing); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, FactionBonusData const& factionBonusData) +{ + data << int32(factionBonusData.FactionID); + data << Bits<1>(factionBonusData.FactionHasBonus); + data.FlushBits(); + + return data; +} +} + WorldPacket const* WorldPackets::Reputation::InitializeFactions::Write() { - for (uint16 i = 0; i < FactionCount; ++i) - { - _worldPacket << uint16(FactionFlags[i]); - _worldPacket << int32(FactionStandings[i]); - } + _worldPacket << uint32(Factions.size()); + _worldPacket << uint32(Bonuses.size()); - for (uint16 i = 0; i < FactionCount; ++i) - _worldPacket.WriteBit(FactionHasBonus[i]); + for (FactionData const& faction : Factions) + _worldPacket << faction; - _worldPacket.FlushBits(); + for (FactionBonusData const& bonus : Bonuses) + _worldPacket << bonus; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h index c38c4235914..98b0146e9b4 100644 --- a/src/server/game/Server/Packets/ReputationPackets.h +++ b/src/server/game/Server/Packets/ReputationPackets.h @@ -25,18 +25,28 @@ namespace WorldPackets { namespace Reputation { - static constexpr uint16 FactionCount = 1000; + struct FactionData + { + int32 FactionID = 0; + uint16 Flags = 0; + int32 Standing = 0; + }; + + struct FactionBonusData + { + int32 FactionID = 0; + bool FactionHasBonus = false; + }; class InitializeFactions final : public ServerPacket { public: - InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, FactionCount * (4 + 2) + FactionCount / 8) { } + InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, 0x1000) { } WorldPacket const* Write() override; - std::array<int32, FactionCount> FactionStandings = { }; - std::array<bool, FactionCount> FactionHasBonus = { }; ///< @todo: implement faction bonus - std::array<uint16, FactionCount> FactionFlags = { }; ///< @see enum FactionFlags + std::vector<FactionData> Factions; + std::vector<FactionBonusData> Bonuses; }; class RequestForcedReactions final : public ClientPacket diff --git a/src/server/game/Server/Packets/ScenePackets.cpp b/src/server/game/Server/Packets/ScenePackets.cpp index 98ead11342e..bab779d2fb0 100644 --- a/src/server/game/Server/Packets/ScenePackets.cpp +++ b/src/server/game/Server/Packets/ScenePackets.cpp @@ -26,6 +26,7 @@ WorldPacket const* WorldPackets::Scenes::PlayScene::Write() _worldPacket << int32(SceneScriptPackageID); _worldPacket << TransportGUID; _worldPacket << Location; + _worldPacket << int32(MovieID); _worldPacket << Bits<1>(Encrypted); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/ScenePackets.h b/src/server/game/Server/Packets/ScenePackets.h index af33a9e68ab..f5c091d6803 100644 --- a/src/server/game/Server/Packets/ScenePackets.h +++ b/src/server/game/Server/Packets/ScenePackets.h @@ -37,6 +37,7 @@ namespace WorldPackets uint32 PlaybackFlags = 0; uint32 SceneInstanceID = 0; int32 SceneScriptPackageID = 0; + int32 MovieID = 0; ObjectGuid TransportGUID; TaggedPosition<Position::XYZO> Location; bool Encrypted = false; diff --git a/src/server/game/Server/Packets/SocialPackets.cpp b/src/server/game/Server/Packets/SocialPackets.cpp index 7e7d7e188e5..839a9ea91f0 100644 --- a/src/server/game/Server/Packets/SocialPackets.cpp +++ b/src/server/game/Server/Packets/SocialPackets.cpp @@ -50,7 +50,6 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Social::ContactInfo const data << uint32(contact.Level); data << uint32(contact.ClassID); data.WriteBits(contact.Notes.length(), 10); - data.WriteBit(contact.Mobile); data.FlushBits(); data.WriteString(contact.Notes); @@ -93,7 +92,6 @@ WorldPacket const* WorldPackets::Social::FriendStatus::Write() _worldPacket << uint32(Level); _worldPacket << uint32(ClassID); _worldPacket.WriteBits(Notes.length(), 10); - _worldPacket.WriteBit(Mobile); _worldPacket.FlushBits(); _worldPacket.WriteString(Notes); diff --git a/src/server/game/Server/Packets/SocialPackets.h b/src/server/game/Server/Packets/SocialPackets.h index 3007cb3800b..9ee43e163b1 100644 --- a/src/server/game/Server/Packets/SocialPackets.h +++ b/src/server/game/Server/Packets/SocialPackets.h @@ -53,7 +53,6 @@ namespace WorldPackets uint32 AreaID = 0; uint32 Level = 0; uint32 ClassID = CLASS_NONE; - bool Mobile = false; }; class ContactList final : public ServerPacket @@ -85,7 +84,6 @@ namespace WorldPackets uint32 Level = 0; uint32 AreaID = 0; uint8 FriendResult = 0; ///< @see enum FriendsResult - bool Mobile = false; }; struct QualifiedGUID diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index e4a06ff214f..486ac112d34 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -225,6 +225,7 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request) request.OptionalCurrencies.resize(buffer.read<uint32>()); request.OptionalReagents.resize(buffer.read<uint32>()); request.RemovedModifications.resize(buffer.read<uint32>()); + buffer >> request.CraftingFlags; for (SpellExtraCurrencyCost& optionalCurrency : request.OptionalCurrencies) buffer >> optionalCurrency; @@ -339,8 +340,8 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellHitStatus const& spellHitStatus) ByteBuffer& operator<<(ByteBuffer& data, SpellPowerData const& spellPowerData) { - data << int32(spellPowerData.Cost); data << int8(spellPowerData.Type); + data << int32(spellPowerData.Cost); return data; } @@ -750,6 +751,7 @@ WorldPacket const* PlayOrphanSpellVisual::Write() _worldPacket << SourceRotation; _worldPacket << TargetLocation; _worldPacket << Target; + _worldPacket << TargetTransport; _worldPacket << int32(SpellVisualID); _worldPacket << float(TravelSpeed); _worldPacket << float(LaunchDelay); diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index 42c58e35772..c5efa757a5a 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -251,6 +251,7 @@ namespace WorldPackets Array<SpellCraftingReagent, 6> RemovedModifications; Array<SpellExtraCurrencyCost, 5 /*MAX_ITEM_EXT_COST_CURRENCIES*/> OptionalCurrencies; Optional<uint64> CraftingOrderID; + uint8 CraftingFlags = 0; // 1 = ApplyConcentration ObjectGuid CraftingNPC; int32 Misc[2] = { }; }; @@ -713,6 +714,7 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid Target; // Exclusive with TargetLocation + ObjectGuid TargetTransport; TaggedPosition<Position::XYZ> SourceLocation; int32 SpellVisualID = 0; bool SpeedAsTime = false; diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index 3e0bee090bb..c14bc777465 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -82,6 +82,8 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket << int32(ActiveSeason); _worldPacket << uint32(GameRuleValues.size()); + _worldPacket << int32(ActiveTimerunningSeasonID); + _worldPacket << int32(RemainingTimerunningSeasonSeconds); _worldPacket << int16(MaxPlayerNameQueriesPerPacket); _worldPacket << int16(PlayerNameQueryTelemetryInterval); @@ -134,19 +136,25 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket << Bits<1>(ChatDisabledByPlayer); _worldPacket << Bits<1>(LFGListCustomRequiresAuthenticator); _worldPacket << Bits<1>(AddonsDisabled); + _worldPacket << Bits<1>(TimerunningEnabled); _worldPacket << Bits<1>(WarGamesEnabled); _worldPacket << Bits<1>(ContentTrackingEnabled); _worldPacket << Bits<1>(IsSellAllJunkEnabled); - _worldPacket << Bits<1>(IsGroupFinderEnabled); + _worldPacket << Bits<1>(IsGroupFinderEnabled); _worldPacket << Bits<1>(IsLFDEnabled); _worldPacket << Bits<1>(IsLFREnabled); _worldPacket << Bits<1>(IsPremadeGroupEnabled); _worldPacket << Bits<1>(CanShowSetRoleButton); _worldPacket << Bits<1>(false); // unused 10.2.7 - _worldPacket << Bits<1>(false); // unused 10.2.7 + _worldPacket << Bits<1>(GuildEventsEditsEnabled); + _worldPacket << Bits<1>(GuildTradeSkillsEnabled); _worldPacket << BitsSize<7>(Unknown1027); + _worldPacket << Bits<1>(BNSendWhisperUseV2Services); + + _worldPacket << Bits<1>(BNSendGameDataUseV2Services); + _worldPacket << Bits<1>(IsAccountCurrencyTransferEnabled); _worldPacket.FlushBits(); @@ -213,10 +221,11 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket << Bits<1>(IsBoostEnabled); _worldPacket << Bits<1>(TrialBoostEnabled); _worldPacket << Bits<1>(TokenBalanceEnabled); + _worldPacket << Bits<1>(PaidCharacterTransfersBetweenBnetAccountsEnabled); _worldPacket << Bits<1>(LiveRegionCharacterListEnabled); _worldPacket << Bits<1>(LiveRegionCharacterCopyEnabled); - _worldPacket << Bits<1>(LiveRegionAccountCopyEnabled); + _worldPacket << Bits<1>(LiveRegionAccountCopyEnabled); _worldPacket << Bits<1>(LiveRegionKeyBindingsCopyEnabled); _worldPacket << Bits<1>(Unknown901CheckoutRelated); _worldPacket << Bits<1>(false); // unused, 10.0.2 @@ -224,14 +233,19 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket << Bits<1>(IsNameReservationEnabled); _worldPacket << OptionalInit(LaunchETA); _worldPacket << Bits<1>(TimerunningEnabled); - _worldPacket << Bits<1>(AddonsDisabled); + _worldPacket << Bits<1>(AddonsDisabled); _worldPacket << Bits<1>(Unused1000); _worldPacket << Bits<1>(AccountSaveDataExportEnabled); _worldPacket << Bits<1>(AccountLockedByExport); _worldPacket << Bits<11>(RealmHiddenAlert.length() + 1); + _worldPacket << Bits<1>(BNSendWhisperUseV2Services); + + _worldPacket << Bits<1>(BNSendGameDataUseV2Services); + _worldPacket << Bits<1>(CharacterSelectListModeRealmless); + _worldPacket.FlushBits(); if (EuropaTicketSystemStatus) diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index 4a326f33206..8c1ff5f18e5 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -165,6 +165,7 @@ namespace WorldPackets bool ChatDisabledByPlayer = false; bool LFGListCustomRequiresAuthenticator = false; bool AddonsDisabled = false; + bool TimerunningEnabled = false; bool WarGamesEnabled = false; // classic only bool ContentTrackingEnabled = false; bool IsSellAllJunkEnabled = false; @@ -173,11 +174,18 @@ namespace WorldPackets bool IsLFREnabled = true; // classic only bool IsPremadeGroupEnabled = true; // classic only bool CanShowSetRoleButton = true; + bool GuildEventsEditsEnabled = true; + bool GuildTradeSkillsEnabled = true; + bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService + bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService + bool IsAccountCurrencyTransferEnabled = false; SocialQueueConfig QuickJoinConfig; SquelchInfo Squelch; RafSystemFeatureInfo RAFSystem; std::vector<GameRuleValuePair> GameRuleValues; + int32 ActiveTimerunningSeasonID = 0; + int32 RemainingTimerunningSeasonSeconds = 0; std::string Unknown1027; // related to movement lua functions used by keybinds AddonChatThrottleParams AddonChatThrottle; }; @@ -208,6 +216,7 @@ namespace WorldPackets bool IsBoostEnabled = false; // classic only bool TrialBoostEnabled = false; // NYI bool TokenBalanceEnabled = false; // NYI + bool PaidCharacterTransfersBetweenBnetAccountsEnabled = false; bool LiveRegionCharacterListEnabled = false; // NYI bool LiveRegionCharacterCopyEnabled = false; // NYI bool LiveRegionAccountCopyEnabled = false; // NYI @@ -219,6 +228,9 @@ namespace WorldPackets bool Unused1000 = false; bool AccountSaveDataExportEnabled = false; bool AccountLockedByExport = false; + bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService + bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService + bool CharacterSelectListModeRealmless = false; Optional<EuropaTicketConfig> EuropaTicketSystemStatus; std::vector<int32> LiveRegionCharacterCopySourceRegions; uint32 TokenPollTimeSeconds = 0; // NYI diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.cpp b/src/server/game/Server/Packets/TraitPacketsCommon.cpp index aa8d6ca5e6f..0d3158ef4b9 100644 --- a/src/server/game/Server/Packets/TraitPacketsCommon.cpp +++ b/src/server/game/Server/Packets/TraitPacketsCommon.cpp @@ -31,6 +31,16 @@ TraitEntry::TraitEntry(UF::TraitEntry const& ufEntry) GrantedRanks = ufEntry.GrantedRanks; } +TraitSubTreeCache::TraitSubTreeCache() = default; + +TraitSubTreeCache::TraitSubTreeCache(UF::TraitSubTreeCache const& ufSubTreeCache) +{ + TraitSubTreeID = ufSubTreeCache.TraitSubTreeID; + for (UF::TraitEntry const& ufEntry : ufSubTreeCache.Entries) + Entries.emplace_back(ufEntry); + Active = ufSubTreeCache.Active; +} + TraitConfig::TraitConfig() = default; TraitConfig::TraitConfig(UF::TraitConfig const& ufConfig) @@ -67,6 +77,35 @@ ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry) return data; } +ByteBuffer& operator>>(ByteBuffer& data, TraitSubTreeCache& traitSubTreeCache) +{ + data >> traitSubTreeCache.TraitSubTreeID; + uint32 entriesSize = data.read<uint32>(); + if (entriesSize > 100) + throw PacketArrayMaxCapacityException(entriesSize, 100); + + for (TraitEntry& traitEntry : traitSubTreeCache.Entries) + data >> traitEntry; + + data >> Bits<1>(traitSubTreeCache.Active); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, TraitSubTreeCache const& traitSubTreeCache) +{ + data << int32(traitSubTreeCache.TraitSubTreeID); + data << uint32(traitSubTreeCache.Entries.size()); + + for (TraitEntry const& traitEntry : traitSubTreeCache.Entries) + data << traitEntry; + + data << Bits<1>(traitSubTreeCache.Active); + data.FlushBits(); + + return data; +} + ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig) { data >> traitConfig.ID; @@ -76,6 +115,13 @@ ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig) throw PacketArrayMaxCapacityException(entriesSize, 100); traitConfig.Entries.resize(entriesSize); + + uint32 subtreesSize = data.read<uint32>(); + if (subtreesSize > 10) + throw PacketArrayMaxCapacityException(subtreesSize, 10); + + traitConfig.SubTrees.resize(subtreesSize); + switch (traitConfig.Type) { case TraitConfigType::Combat: @@ -97,6 +143,10 @@ ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig) data >> traitEntry; uint32 nameLength = data.ReadBits(9); + + for (TraitSubTreeCache& traitSubTreeCache : traitConfig.SubTrees) + data >> traitSubTreeCache; + traitConfig.Name = data.ReadString(nameLength, false); return data; @@ -107,6 +157,7 @@ ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig) data << int32(traitConfig.ID); data << int32(traitConfig.Type); data << uint32(traitConfig.Entries.size()); + data << uint32(traitConfig.SubTrees.size()); switch (traitConfig.Type) { case TraitConfigType::Combat: @@ -128,6 +179,10 @@ ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig) data << traitEntry; data.WriteBits(traitConfig.Name.length(), 9); + + for (TraitSubTreeCache const& traitSubTreeCache : traitConfig.SubTrees) + data << traitSubTreeCache; + data.FlushBits(); data.WriteString(static_cast<std::string const&>(traitConfig.Name)); diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.h b/src/server/game/Server/Packets/TraitPacketsCommon.h index b6d143e7baf..8cf075bc7a8 100644 --- a/src/server/game/Server/Packets/TraitPacketsCommon.h +++ b/src/server/game/Server/Packets/TraitPacketsCommon.h @@ -27,6 +27,7 @@ namespace UF { struct TraitConfig; struct TraitEntry; +struct TraitSubTreeCache; } namespace WorldPackets::Traits @@ -42,6 +43,16 @@ struct TraitEntry int32 GrantedRanks = 0; }; +struct TraitSubTreeCache +{ + TraitSubTreeCache(); + explicit TraitSubTreeCache(UF::TraitSubTreeCache const& ufSubTreeCache); + + int32 TraitSubTreeID = 0; + std::vector<TraitEntry> Entries; + bool Active = false; +}; + struct TraitConfig { TraitConfig(); @@ -55,11 +66,14 @@ struct TraitConfig int32 SkillLineID = 0; int32 TraitSystemID = 0; std::vector<TraitEntry> Entries; + std::vector<TraitSubTreeCache> SubTrees; String<259> Name; }; ByteBuffer& operator>>(ByteBuffer& data, TraitEntry& traitEntry); ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry); +ByteBuffer& operator>>(ByteBuffer& data, TraitSubTreeCache& traitSubTreeCache); +ByteBuffer& operator<<(ByteBuffer& data, TraitSubTreeCache const& traitSubTreeCache); ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig); ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig); } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index d8de9ca04d1..9df1813dc0c 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -146,6 +146,8 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_ACCEPT_SOCIAL_CONTRACT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ACCEPT_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAcceptTradeOpcode); DEFINE_HANDLER(CMSG_ACCEPT_WARGAME_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_ACCOUNT_BANK_DEPOSIT_MONEY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_ACCOUNT_BANK_WITHDRAW_MONEY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ACTIVATE_SOULBIND, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ACTIVATE_TAXI, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleActivateTaxiOpcode); @@ -192,6 +194,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_AUTOBANK_REAGENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoBankReagentOpcode); DEFINE_HANDLER(CMSG_AUTOSTORE_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAutoStoreBankItemOpcode); DEFINE_HANDLER(CMSG_AUTOSTORE_BANK_REAGENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBankReagentOpcode); + DEFINE_HANDLER(CMSG_AUTO_DEPOSIT_ACCOUNT_BANK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAutoEquipItemOpcode); DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM_SLOT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAutoEquipItemSlotOpcode); DEFINE_HANDLER(CMSG_AUTO_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoGuildBankItem); @@ -209,6 +212,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinOpcode); DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_ARENA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinArena); DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_BRAWL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_RATED_BG_BLITZ, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_SKIRMISH, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLENET_CHALLENGE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -243,6 +247,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_BONUS_ROLL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BUG_REPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBugReportOpcode); DEFINE_HANDLER(CMSG_BUSY_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBusyTradeOpcode); + DEFINE_HANDLER(CMSG_BUY_ACCOUNT_BANK_TAB, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BUY_BACK_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBuybackItem); DEFINE_HANDLER(CMSG_BUY_BANK_SLOT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBuyBankSlotOpcode); DEFINE_HANDLER(CMSG_BUY_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBuyItemOpcode); @@ -389,6 +394,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CONVERSATION_CINEMATIC_READY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CONVERSATION_LINE_STARTED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConversationLineStarted); + DEFINE_HANDLER(CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CONVERT_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConvertRaidOpcode); DEFINE_HANDLER(CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CRAFTING_ORDER_CANCEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -407,6 +413,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_DECLINE_GUILD_INVITES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDeclineGuildInvites); DEFINE_HANDLER(CMSG_DECLINE_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDeclinePetition); DEFINE_HANDLER(CMSG_DELETE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDeleteEquipmentSet); + DEFINE_HANDLER(CMSG_DELVE_TELEPORT_OUT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_DEL_FRIEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDelFriendOpcode); DEFINE_HANDLER(CMSG_DEL_IGNORE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDelIgnoreOpcode); DEFINE_HANDLER(CMSG_DEPOSIT_REAGENT_BANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReagentBankDepositOpcode); @@ -476,6 +483,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_GET_MIRROR_IMAGE_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMirrorImageDataRequest); DEFINE_HANDLER(CMSG_GET_PVP_OPTIONS_ENABLED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGetPVPOptionsEnabled); DEFINE_HANDLER(CMSG_GET_RAF_ACCOUNT_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GET_REMAINING_GAME_TIME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GET_TROPHY_LIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleGetUndeleteCooldownStatus); @@ -489,7 +497,6 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_GUILD_ADD_BATTLENET_FRIEND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GUILD_ADD_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAddRank); DEFINE_HANDLER(CMSG_GUILD_ASSIGN_MEMBER_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAssignRank); - DEFINE_HANDLER(CMSG_GUILD_AUTO_DECLINE_INVITATION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GUILD_BANK_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankActivate); DEFINE_HANDLER(CMSG_GUILD_BANK_BUY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankBuyTab); DEFINE_HANDLER(CMSG_GUILD_BANK_DEPOSIT_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankDepositMoney); @@ -614,6 +621,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_MOVE_DISMISS_VEHICLE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveDismissVehicle); DEFINE_HANDLER(CMSG_MOVE_DOUBLE_JUMP, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); DEFINE_HANDLER(CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); + DEFINE_HANDLER(CMSG_MOVE_ENABLE_FULL_SPEED_TURNING_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_FALL_LAND, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); DEFINE_HANDLER(CMSG_MOVE_FALL_RESET, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); @@ -642,7 +650,6 @@ void OpcodeTable::InitializeClientOpcodes() 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); DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLY, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); @@ -807,7 +814,6 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_REPOP_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepopRequest); DEFINE_HANDLER(CMSG_REPORT_CLIENT_VARIABLES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REPORT_ENABLED_ADDONS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_REPORT_FROZEN_WHILE_LOADING_MAP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REPORT_PVP_PLAYER_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReportPvPAFK); DEFINE_HANDLER(CMSG_REPORT_SERVER_LAG, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -819,6 +825,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_COVENANT_CALLINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_CROWD_CONTROL_SPELL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_REQUEST_CURRENCY_DATA_FOR_ACCOUNT_CHARACTERS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_FORCED_REACTIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestForcedReactionsOpcode); DEFINE_HANDLER(CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_GUILD_PARTY_STATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestPartyState); @@ -858,6 +865,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_SCENE_PLAYBACK_CANCELED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleScenePlaybackCanceled); DEFINE_HANDLER(CMSG_SCENE_PLAYBACK_COMPLETE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleScenePlaybackComplete); DEFINE_HANDLER(CMSG_SCENE_TRIGGER_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSceneTriggerEvent); + DEFINE_HANDLER(CMSG_SEAMLESS_TRANSFER_COMPLETE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SELF_RES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSelfResOpcode); DEFINE_HANDLER(CMSG_SELL_ALL_JUNK_ITEMS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SELL_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSellItemOpcode); @@ -868,6 +876,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_SEND_PING_WORLD_POINT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendPingWorldPoint); DEFINE_HANDLER(CMSG_SEND_TEXT_EMOTE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTextEmoteOpcode); DEFINE_HANDLER(CMSG_SERVER_TIME_OFFSET_REQUEST, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleServerTimeOffsetRequest); + DEFINE_HANDLER(CMSG_SETUP_WARBAND_GROUPS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_ACHIEVEMENTS_HIDDEN, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_ACTION_BAR_TOGGLES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActionBarToggles); DEFINE_HANDLER(CMSG_SET_ACTION_BUTTON, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActionButtonOpcode); @@ -918,6 +927,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_SILENCE_PARTY_TALKER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SOCIAL_CONTRACT_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleSocialContractRequest); DEFINE_HANDLER(CMSG_SOCKET_GEMS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSocketGems); + DEFINE_HANDLER(CMSG_SORT_ACCOUNT_BANK_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortAccountBankBags); DEFINE_HANDLER(CMSG_SORT_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortBags); DEFINE_HANDLER(CMSG_SORT_BANK_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortBankBags); DEFINE_HANDLER(CMSG_SORT_REAGENT_BANK_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortReagentBankBags); @@ -967,6 +977,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_TRAINER_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTrainerListOpcode); DEFINE_HANDLER(CMSG_TRAITS_COMMIT_CONFIG, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTraitsCommitConfig); DEFINE_HANDLER(CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_TRANSMOGRIFY_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTransmogrifyItems); DEFINE_HANDLER(CMSG_TURN_IN_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTurnInPetition); DEFINE_HANDLER(CMSG_TUTORIAL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialFlag); @@ -977,6 +988,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_UNLEARN_SPECIALIZATION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UNLOCK_VOID_STORAGE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleVoidStorageUnlock); DEFINE_HANDLER(CMSG_UPDATE_AADC_STATUS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChatUpdateAADCStatus); + DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateAccountData); DEFINE_HANDLER(CMSG_UPDATE_AREA_TRIGGER_VISUAL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UPDATE_CLIENT_SETTINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -1017,6 +1029,8 @@ void OpcodeTable::InitializeServerOpcodes() ValidateAndSetServerOpcode(opcode, #opcode, status, con) DEFINE_SERVER_OPCODE_HANDLER(SMSG_ABORT_NEW_WORLD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_CHARACTER_CURRENCY_LISTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_CONVERSION_STATE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_COSMETIC_ADDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_CRITERIA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_DATA_TIMES, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1198,6 +1212,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAPTURE_POINT_REMOVED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAST_FAILED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAS_REFRESH_REMOTE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAIN_MISSILE_BOUNCE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1227,6 +1242,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_DOWN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_IGNORED_ACCOUNT_MUTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_IS_DOWN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_NOT_IN_GUILD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_NOT_IN_PARTY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_PLAYER_AMBIGUOUS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_PLAYER_NOTFOUND, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1294,6 +1310,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_CREATE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_FULFILL_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_NPC_REWARD_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_REJECT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_RELEASE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_UPDATE_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1304,6 +1321,8 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRITERIA_DELETED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRITERIA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CROSSED_INEBRIATION_THRESHOLD, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CURRENCY_TRANSFER_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CURRENCY_TRANSFER_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CUSTOM_LOAD_SCREEN, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DAILY_QUESTS_RESET, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DAMAGE_CALC_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1343,7 +1362,6 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_END_LIGHTNING_STORM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENSURE_WORLD_LOADED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENTER_ENCRYPTED_MODE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENUM_CHARACTERS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1368,6 +1386,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_ANIMATIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_OBJECT_RELINK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_RANDOM_TRANSMOG_TOAST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_SPAWN_TRACKING_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FRIEND_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAIN_MAW_POWER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1537,6 +1556,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_SEND_RANK_CHANGE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_HARDCORE_DEATH_ALERT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_HEALTH_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_HIGHEST_THREAT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOTFIX_CONNECT, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1664,11 +1684,13 @@ void OpcodeTable::InitializeServerOpcodes() 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_FULL_SPEED_TURNING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_INERTIA, STATUS_NEVER, 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_FULL_SPEED_TURNING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_INERTIA, STATUS_NEVER, 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); @@ -1957,6 +1979,8 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRUIT_A_FRIEND_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_COMPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_SPELL_HISTORY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_REGIONWIDE_CHARACTER_MAIL_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_REGIONWIDE_CHARACTER_RESTRICTIONS_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REMOVE_ITEM_PASSIVE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REMOVE_SPELL_FROM_ACTION_BAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REPLACE_TROPHY_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -2048,6 +2072,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_VEHICLE_REC_ID, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHADOWLANDS_CAPACITANCE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHIPMENT_FACTION_UPDATE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_DELVES_DISPLAY_UI, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_QUEST_COMPLETION_TEXT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_TAXI_NODES, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2115,6 +2140,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_THREAT_CLEAR, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_THREAT_REMOVE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_THREAT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_TIMERUNNING_SEASON_ENDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TIME_ADJUSTMENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TIME_SYNC_REQUEST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TITLE_EARNED, STATUS_NEVER, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index ff4ecf3df72..e6dbc884121 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -48,35 +48,37 @@ constexpr uint16 UNKNOWN_OPCODE = 0xBADD; // special marker value for uninitia enum OpcodeClient : uint16 { - CMSG_ABANDON_NPE_RESPONSE = 0x33F2, + CMSG_ABANDON_NPE_RESPONSE = 0x33E9, CMSG_ACCEPT_GUILD_INVITE = 0x35FD, - CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x339D, - CMSG_ACCEPT_SOCIAL_CONTRACT = 0x3742, + CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x33AA, + CMSG_ACCEPT_SOCIAL_CONTRACT = 0x3744, CMSG_ACCEPT_TRADE = 0x315A, CMSG_ACCEPT_WARGAME_INVITE = 0x35E0, - CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3731, - CMSG_ACTIVATE_SOULBIND = 0x33E1, + CMSG_ACCOUNT_BANK_DEPOSIT_MONEY = 0x342B, + CMSG_ACCOUNT_BANK_WITHDRAW_MONEY = 0x342C, + CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3733, + CMSG_ACTIVATE_SOULBIND = 0x33D8, CMSG_ACTIVATE_TAXI = 0x34B3, CMSG_ADDON_LIST = 0x35D8, - CMSG_ADD_ACCOUNT_COSMETIC = 0x32B7, - CMSG_ADD_BATTLENET_FRIEND = 0x3657, - CMSG_ADD_FRIEND = 0x36CB, - CMSG_ADD_IGNORE = 0x36CF, - CMSG_ADD_TOY = 0x32B6, - CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3203, - CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33E4, - CMSG_ADVENTURE_MAP_START_QUEST = 0x3370, - CMSG_ALTER_APPEARANCE = 0x3505, + CMSG_ADD_ACCOUNT_COSMETIC = 0x32C2, + CMSG_ADD_BATTLENET_FRIEND = 0x3658, + CMSG_ADD_FRIEND = 0x36CD, + CMSG_ADD_IGNORE = 0x36D1, + CMSG_ADD_TOY = 0x32C1, + CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3206, + CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33DB, + CMSG_ADVENTURE_MAP_START_QUEST = 0x337D, + CMSG_ALTER_APPEARANCE = 0x3504, CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B8, CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B9, - CMSG_AREA_TRIGGER = 0x31D7, + CMSG_AREA_TRIGGER = 0x31D9, CMSG_ARTIFACT_ADD_POWER = 0x31AA, CMSG_ARTIFACT_SET_APPEARANCE = 0x31AC, - CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x320F, - CMSG_ATTACK_STOP = 0x3268, - CMSG_ATTACK_SWING = 0x3267, - CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E1, - CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E2, + CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3212, + CMSG_ATTACK_STOP = 0x3270, + CMSG_ATTACK_SWING = 0x326F, + CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E3, + CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E4, CMSG_AUCTION_BROWSE_QUERY = 0x34D8, CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x34E0, CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x34DF, @@ -90,114 +92,117 @@ enum OpcodeClient : uint16 CMSG_AUCTION_PLACE_BID = 0x34D7, CMSG_AUCTION_REMOVE_ITEM = 0x34D5, CMSG_AUCTION_REPLICATE_ITEMS = 0x34D6, - CMSG_AUCTION_REQUEST_FAVORITE_LIST = 0x3733, + CMSG_AUCTION_REQUEST_FAVORITE_LIST = 0x3735, CMSG_AUCTION_SELL_COMMODITY = 0x34E1, CMSG_AUCTION_SELL_ITEM = 0x34D4, - CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3732, + CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3734, CMSG_AUTH_CONTINUED_SESSION = 0x377A, CMSG_AUTH_SESSION = 0x3779, CMSG_AUTOBANK_ITEM = 0x3997, CMSG_AUTOBANK_REAGENT = 0x3999, CMSG_AUTOSTORE_BANK_ITEM = 0x3996, CMSG_AUTOSTORE_BANK_REAGENT = 0x3998, + CMSG_AUTO_DEPOSIT_ACCOUNT_BANK = 0x3436, CMSG_AUTO_EQUIP_ITEM = 0x399A, CMSG_AUTO_EQUIP_ITEM_SLOT = 0x399F, CMSG_AUTO_GUILD_BANK_ITEM = 0x34BF, CMSG_AUTO_STORE_BAG_ITEM = 0x399B, CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x34C8, - CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3399, - CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x337B, - CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x339B, - CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x339A, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x33A6, + CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3388, + CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x33A8, + CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x33A7, CMSG_BANKER_ACTIVATE = 0x34BB, CMSG_BATTLEFIELD_LEAVE = 0x3173, CMSG_BATTLEFIELD_LIST = 0x317E, CMSG_BATTLEFIELD_PORT = 0x353A, - CMSG_BATTLEMASTER_HELLO = 0x32D4, - CMSG_BATTLEMASTER_JOIN = 0x3532, - CMSG_BATTLEMASTER_JOIN_ARENA = 0x3533, + CMSG_BATTLEMASTER_HELLO = 0x32DF, + CMSG_BATTLEMASTER_JOIN = 0x3531, + CMSG_BATTLEMASTER_JOIN_ARENA = 0x3532, CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3538, - CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3534, + CMSG_BATTLEMASTER_JOIN_RATED_BG_BLITZ = 0x3534, + CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3533, CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3535, - CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36CE, - CMSG_BATTLENET_REQUEST = 0x36F0, - CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36C8, - CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x370F, - CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36C7, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36BE, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x3736, - CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36B6, - CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36B7, - CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x3708, - CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3704, - CMSG_BATTLE_PAY_START_PURCHASE = 0x36C6, - CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36ED, + CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D0, + CMSG_BATTLENET_REQUEST = 0x36F2, + CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CA, + CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3711, + CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36C9, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C0, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x3738, + CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36B8, + CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36B9, + CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x370A, + CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3706, + CMSG_BATTLE_PAY_START_PURCHASE = 0x36C8, + CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36EF, CMSG_BATTLE_PET_CLEAR_FANFARE = 0x3126, - CMSG_BATTLE_PET_DELETE_PET = 0x3622, - CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3623, - CMSG_BATTLE_PET_MODIFY_NAME = 0x3625, - CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3621, - CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3620, - CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362A, - CMSG_BATTLE_PET_SET_FLAGS = 0x362D, - CMSG_BATTLE_PET_SUMMON = 0x3626, - CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31E1, - CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E0, + CMSG_BATTLE_PET_DELETE_PET = 0x3623, + CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3624, + CMSG_BATTLE_PET_MODIFY_NAME = 0x3626, + CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3622, + CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3621, + CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362B, + CMSG_BATTLE_PET_SET_FLAGS = 0x362E, + CMSG_BATTLE_PET_SUMMON = 0x3627, + CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31E3, + CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E2, CMSG_BEGIN_TRADE = 0x3157, CMSG_BINDER_ACTIVATE = 0x34BA, CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3542, CMSG_BLACK_MARKET_OPEN = 0x3540, CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3541, - CMSG_BONUS_ROLL = 0x339C, - CMSG_BUG_REPORT = 0x3682, + CMSG_BONUS_ROLL = 0x33A9, + CMSG_BUG_REPORT = 0x3683, CMSG_BUSY_TRADE = 0x3158, + CMSG_BUY_ACCOUNT_BANK_TAB = 0x3597, CMSG_BUY_BACK_ITEM = 0x34AC, CMSG_BUY_BANK_SLOT = 0x34BC, CMSG_BUY_ITEM = 0x34AB, CMSG_BUY_REAGENT_BANK = 0x34BD, - CMSG_CAGE_BATTLE_PET = 0x31F3, - CMSG_CALENDAR_ADD_EVENT = 0x367A, - CMSG_CALENDAR_COMMUNITY_INVITE = 0x366E, - CMSG_CALENDAR_COMPLAIN = 0x3676, - CMSG_CALENDAR_COPY_EVENT = 0x3675, - CMSG_CALENDAR_EVENT_SIGN_UP = 0x3678, - CMSG_CALENDAR_GET = 0x366C, - CMSG_CALENDAR_GET_EVENT = 0x366D, - CMSG_CALENDAR_GET_NUM_PENDING = 0x3677, - CMSG_CALENDAR_INVITE = 0x366F, - CMSG_CALENDAR_MODERATOR_STATUS = 0x3673, - CMSG_CALENDAR_REMOVE_EVENT = 0x3674, - CMSG_CALENDAR_REMOVE_INVITE = 0x3670, - CMSG_CALENDAR_RSVP = 0x3671, - CMSG_CALENDAR_STATUS = 0x3672, - CMSG_CALENDAR_UPDATE_EVENT = 0x367B, + CMSG_CAGE_BATTLE_PET = 0x31F6, + CMSG_CALENDAR_ADD_EVENT = 0x367B, + CMSG_CALENDAR_COMMUNITY_INVITE = 0x366F, + CMSG_CALENDAR_COMPLAIN = 0x3677, + CMSG_CALENDAR_COPY_EVENT = 0x3676, + CMSG_CALENDAR_EVENT_SIGN_UP = 0x3679, + CMSG_CALENDAR_GET = 0x366D, + CMSG_CALENDAR_GET_EVENT = 0x366E, + CMSG_CALENDAR_GET_NUM_PENDING = 0x3678, + CMSG_CALENDAR_INVITE = 0x3670, + CMSG_CALENDAR_MODERATOR_STATUS = 0x3674, + CMSG_CALENDAR_REMOVE_EVENT = 0x3675, + CMSG_CALENDAR_REMOVE_INVITE = 0x3671, + CMSG_CALENDAR_RSVP = 0x3672, + CMSG_CALENDAR_STATUS = 0x3673, + CMSG_CALENDAR_UPDATE_EVENT = 0x367C, CMSG_CANCEL_AURA = 0x31AE, - CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34F7, - CMSG_CANCEL_CAST = 0x32BD, - CMSG_CANCEL_CHANNELLING = 0x3280, - CMSG_CANCEL_GROWTH_AURA = 0x3288, - CMSG_CANCEL_MASTER_LOOT_ROLL = 0x321B, + CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34F6, + CMSG_CANCEL_CAST = 0x32C8, + CMSG_CANCEL_CHANNELLING = 0x3289, + CMSG_CANCEL_GROWTH_AURA = 0x3291, + CMSG_CANCEL_MASTER_LOOT_ROLL = 0x321E, CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AD, - CMSG_CANCEL_MOUNT_AURA = 0x329B, + CMSG_CANCEL_MOUNT_AURA = 0x32A4, CMSG_CANCEL_QUEUED_SPELL = 0x317F, - CMSG_CANCEL_TEMP_ENCHANTMENT = 0x3502, + CMSG_CANCEL_TEMP_ENCHANTMENT = 0x3501, CMSG_CANCEL_TRADE = 0x315C, - CMSG_CAN_DUEL = 0x365F, - CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3703, - CMSG_CAST_SPELL = 0x32BA, + CMSG_CAN_DUEL = 0x3660, + CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3705, + CMSG_CAST_SPELL = 0x32C5, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x305E, - CMSG_CHANGE_BAG_SLOT_FLAG = 0x3354, - CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3355, - CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3335, - CMSG_CHANGE_REALM_TICKET = 0x36F5, - CMSG_CHANGE_SUB_GROUP = 0x3649, - CMSG_CHARACTER_CHECK_UPGRADE = 0x36C1, - CMSG_CHARACTER_RENAME_REQUEST = 0x36BC, - CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36BF, - CMSG_CHARACTER_UPGRADE_START = 0x36C0, - CMSG_CHAR_CUSTOMIZE = 0x3689, - CMSG_CHAR_DELETE = 0x3699, - CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x368F, + CMSG_CHANGE_BAG_SLOT_FLAG = 0x3361, + CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3362, + CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3342, + CMSG_CHANGE_REALM_TICKET = 0x36F7, + CMSG_CHANGE_SUB_GROUP = 0x364A, + CMSG_CHARACTER_CHECK_UPGRADE = 0x36C3, + CMSG_CHARACTER_RENAME_REQUEST = 0x36BE, + CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36C1, + CMSG_CHARACTER_UPGRADE_START = 0x36C2, + CMSG_CHAR_CUSTOMIZE = 0x368A, + CMSG_CHAR_DELETE = 0x369B, + CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3690, CMSG_CHAT_ADDON_MESSAGE = 0x3802, CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x3803, CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x380A, @@ -237,298 +242,301 @@ enum OpcodeClient : uint16 CMSG_CHAT_REPORT_FILTERED = 0x37E0, CMSG_CHAT_REPORT_IGNORED = 0x37DF, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37E2, - CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3642, - CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3259, - CMSG_CHOICE_RESPONSE = 0x32C2, - CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33E0, - CMSG_CLAIM_WEEKLY_REWARD = 0x33BC, - CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x341B, - CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3213, - CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x341D, - CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x341A, - CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3419, - CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x341E, - CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3212, + CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3643, + CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3261, + CMSG_CHOICE_RESPONSE = 0x32CD, + CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33D7, + CMSG_CLAIM_WEEKLY_REWARD = 0x33B4, + CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3410, + CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3216, + CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x3412, + CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x340F, + CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x340E, + CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x3413, + CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3215, CMSG_CLEAR_NEW_APPEARANCE = 0x3129, CMSG_CLEAR_RAID_MARKER = 0x31A6, CMSG_CLEAR_TRADE_ITEM = 0x315E, CMSG_CLIENT_PORT_GRAVEYARD = 0x353C, CMSG_CLOSE_INTERACTION = 0x349A, - CMSG_CLOSE_QUEST_CHOICE = 0x32C3, - CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E8, - CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x341F, - CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371A, - CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x3718, - CMSG_CLUB_FINDER_POST = 0x3715, - CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x371C, - CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x3716, - CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x3717, - CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x371B, - CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x371D, - CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x3719, - CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x3739, - CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F2, - CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3630, + CMSG_CLOSE_QUEST_CHOICE = 0x32CE, + CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33DF, + CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x3414, + CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371C, + CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x371A, + CMSG_CLUB_FINDER_POST = 0x3717, + CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x371E, + CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x3718, + CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x3719, + CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x371D, + CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x371F, + CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x371B, + CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x373B, + CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F4, + CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3631, CMSG_COMMENTATOR_ENABLE = 0x35F0, CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F4, CMSG_COMMENTATOR_EXIT_INSTANCE = 0x35F5, CMSG_COMMENTATOR_GET_MAP_INFO = 0x35F1, CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x35F3, CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F2, - CMSG_COMMENTATOR_SPECTATE = 0x3737, + CMSG_COMMENTATOR_SPECTATE = 0x3739, CMSG_COMMENTATOR_START_WARGAME = 0x35EF, - CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36DF, - CMSG_COMMERCE_TOKEN_GET_LOG = 0x36E9, - CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E0, - CMSG_COMPLAINT = 0x3669, + CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E1, + CMSG_COMMERCE_TOKEN_GET_LOG = 0x36EB, + CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E2, + CMSG_COMPLAINT = 0x366A, CMSG_COMPLETE_CINEMATIC = 0x355A, - CMSG_COMPLETE_MOVIE = 0x34ED, + CMSG_COMPLETE_MOVIE = 0x34EC, CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AB, - CMSG_CONFIRM_RESPEC_WIPE = 0x3215, + CMSG_CONFIRM_RESPEC_WIPE = 0x3218, CMSG_CONNECT_TO_FAILED = 0x35D4, - CMSG_CONSUMABLE_TOKEN_BUY = 0x36E4, - CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36E5, - CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E3, - CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36E7, - CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36E8, - CMSG_CONTENT_TRACKING_START_TRACKING = 0x342F, - CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x3430, + 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_CONTENT_TRACKING_START_TRACKING = 0x3424, + CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x3425, CMSG_CONTRIBUTION_CONTRIBUTE = 0x356F, CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x3570, CMSG_CONVERSATION_CINEMATIC_READY = 0x355C, CMSG_CONVERSATION_LINE_STARTED = 0x355B, - CMSG_CONVERT_RAID = 0x364B, + CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT = 0x3435, + CMSG_CONVERT_RAID = 0x364C, CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x3583, - CMSG_CRAFTING_ORDER_CANCEL = 0x358E, - CMSG_CRAFTING_ORDER_CLAIM = 0x358B, + CMSG_CRAFTING_ORDER_CANCEL = 0x358F, + CMSG_CRAFTING_ORDER_CLAIM = 0x358C, CMSG_CRAFTING_ORDER_CREATE = 0x3588, - CMSG_CRAFTING_ORDER_FULFILL = 0x358D, + CMSG_CRAFTING_ORDER_FULFILL = 0x358E, CMSG_CRAFTING_ORDER_LIST_CRAFTER_ORDERS = 0x358A, CMSG_CRAFTING_ORDER_LIST_MY_ORDERS = 0x3589, - CMSG_CRAFTING_ORDER_REJECT = 0x358F, - CMSG_CRAFTING_ORDER_RELEASE = 0x358C, - CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x3590, - CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x3591, - CMSG_CREATE_CHARACTER = 0x3641, - CMSG_CREATE_SHIPMENT = 0x3320, + CMSG_CRAFTING_ORDER_REJECT = 0x3590, + CMSG_CRAFTING_ORDER_RELEASE = 0x358D, + CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x3591, + CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x3592, + CMSG_CREATE_CHARACTER = 0x3642, + CMSG_CREATE_SHIPMENT = 0x332B, CMSG_DB_QUERY_BULK = 0x35E4, - CMSG_DECLINE_GUILD_INVITES = 0x352F, + CMSG_DECLINE_GUILD_INVITES = 0x352E, CMSG_DECLINE_PETITION = 0x3549, - CMSG_DELETE_EQUIPMENT_SET = 0x351B, - CMSG_DEL_FRIEND = 0x36CC, - CMSG_DEL_IGNORE = 0x36D0, - CMSG_DEPOSIT_REAGENT_BANK = 0x335E, - CMSG_DESTROY_ITEM = 0x32B0, - CMSG_DF_BOOT_PLAYER_VOTE = 0x3617, - CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x3609, - CMSG_DF_GET_JOIN_STATUS = 0x3615, - CMSG_DF_GET_SYSTEM_INFO = 0x3614, - CMSG_DF_JOIN = 0x360A, - CMSG_DF_LEAVE = 0x3613, - CMSG_DF_PROPOSAL_RESPONSE = 0x3608, - CMSG_DF_READY_CHECK_RESPONSE = 0x361B, - CMSG_DF_SET_ROLES = 0x3616, - CMSG_DF_TELEPORT = 0x3618, - CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A41, - CMSG_DISMISS_CRITTER = 0x3509, - CMSG_DO_COUNTDOWN = 0x3714, - CMSG_DO_MASTER_LOOT_ROLL = 0x321A, - CMSG_DO_READY_CHECK = 0x3631, - CMSG_DUEL_RESPONSE = 0x34F2, - CMSG_EJECT_PASSENGER = 0x324E, + CMSG_DELETE_EQUIPMENT_SET = 0x351A, + CMSG_DELVE_TELEPORT_OUT = 0x359E, + CMSG_DEL_FRIEND = 0x36CE, + CMSG_DEL_IGNORE = 0x36D2, + CMSG_DEPOSIT_REAGENT_BANK = 0x336B, + CMSG_DESTROY_ITEM = 0x32BB, + CMSG_DF_BOOT_PLAYER_VOTE = 0x3618, + CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x360A, + CMSG_DF_GET_JOIN_STATUS = 0x3616, + CMSG_DF_GET_SYSTEM_INFO = 0x3615, + CMSG_DF_JOIN = 0x360B, + CMSG_DF_LEAVE = 0x3614, + CMSG_DF_PROPOSAL_RESPONSE = 0x3609, + CMSG_DF_READY_CHECK_RESPONSE = 0x361C, + CMSG_DF_SET_ROLES = 0x3617, + CMSG_DF_TELEPORT = 0x3619, + CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A42, + CMSG_DISMISS_CRITTER = 0x3508, + CMSG_DO_COUNTDOWN = 0x3716, + CMSG_DO_MASTER_LOOT_ROLL = 0x321D, + CMSG_DO_READY_CHECK = 0x3632, + CMSG_DUEL_RESPONSE = 0x34F1, + CMSG_EJECT_PASSENGER = 0x3256, CMSG_EMOTE = 0x3556, CMSG_ENABLE_NAGLE = 0x377F, CMSG_ENABLE_TAXI_NODE = 0x34B1, - CMSG_ENGINE_SURVEY = 0x36DE, + CMSG_ENGINE_SURVEY = 0x36E0, CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x377B, CMSG_ENUM_CHARACTERS = 0x35E8, - CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36D8, - CMSG_FAR_SIGHT = 0x34F8, + CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DA, + CMSG_FAR_SIGHT = 0x34F7, CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B2, CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B1, - CMSG_GAME_OBJ_REPORT_USE = 0x34FF, - CMSG_GAME_OBJ_USE = 0x34FE, - CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x331B, - CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x3301, - CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32EE, - CMSG_GARRISON_CHECK_UPGRADEABLE = 0x3350, - CMSG_GARRISON_COMPLETE_MISSION = 0x3342, - CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x331C, - CMSG_GARRISON_GENERATE_RECRUITS = 0x3304, - CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3313, - CMSG_GARRISON_GET_MAP_DATA = 0x331A, - CMSG_GARRISON_GET_MISSION_REWARD = 0x3374, - CMSG_GARRISON_LEARN_TALENT = 0x330F, - CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3344, - CMSG_GARRISON_PURCHASE_BUILDING = 0x32EA, - CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3306, - CMSG_GARRISON_REMOVE_FOLLOWER = 0x3339, - CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x3302, - CMSG_GARRISON_RENAME_FOLLOWER = 0x3303, - CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32E9, - CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x331E, - CMSG_GARRISON_RESEARCH_TALENT = 0x3307, - CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32EB, - CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32FF, - CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32F7, - CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3305, - CMSG_GARRISON_SOCKET_TALENT = 0x33F5, - CMSG_GARRISON_START_MISSION = 0x3341, - CMSG_GARRISON_SWAP_BUILDINGS = 0x32EF, + CMSG_GAME_OBJ_REPORT_USE = 0x34FE, + CMSG_GAME_OBJ_USE = 0x34FD, + CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3326, + CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x330C, + CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32F9, + CMSG_GARRISON_CHECK_UPGRADEABLE = 0x335D, + CMSG_GARRISON_COMPLETE_MISSION = 0x334F, + CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x3327, + CMSG_GARRISON_GENERATE_RECRUITS = 0x330F, + CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x331E, + CMSG_GARRISON_GET_MAP_DATA = 0x3325, + CMSG_GARRISON_GET_MISSION_REWARD = 0x3381, + CMSG_GARRISON_LEARN_TALENT = 0x331A, + CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3351, + CMSG_GARRISON_PURCHASE_BUILDING = 0x32F5, + CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3311, + CMSG_GARRISON_REMOVE_FOLLOWER = 0x3346, + CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x330D, + CMSG_GARRISON_RENAME_FOLLOWER = 0x330E, + CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32F4, + CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3329, + CMSG_GARRISON_RESEARCH_TALENT = 0x3312, + CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32F6, + CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x330A, + CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x3302, + CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3310, + CMSG_GARRISON_SOCKET_TALENT = 0x33EC, + CMSG_GARRISON_START_MISSION = 0x334E, + CMSG_GARRISON_SWAP_BUILDINGS = 0x32FA, CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7, - CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B1, - CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3730, - CMSG_GET_GARRISON_INFO = 0x32E4, + CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B3, + CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3732, + CMSG_GET_GARRISON_INFO = 0x32EF, CMSG_GET_ITEM_PURCHASE_DATA = 0x3544, - CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x331F, - CMSG_GET_MIRROR_IMAGE_DATA = 0x32B4, + CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x332A, + CMSG_GET_MIRROR_IMAGE_DATA = 0x32BF, CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE, - CMSG_GET_RAF_ACCOUNT_INFO = 0x371E, - CMSG_GET_REMAINING_GAME_TIME = 0x36E6, - CMSG_GET_TROPHY_LIST = 0x3332, - CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DA, - CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36EB, - CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36EC, - CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x368D, - CMSG_GM_TICKET_GET_CASE_STATUS = 0x368C, - CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368B, + CMSG_GET_RAF_ACCOUNT_INFO = 0x3720, + CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA = 0x375E, + CMSG_GET_REMAINING_GAME_TIME = 0x36E8, + CMSG_GET_TROPHY_LIST = 0x333F, + 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 = 0x368E, + CMSG_GM_TICKET_GET_CASE_STATUS = 0x368D, + CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368C, CMSG_GOSSIP_REFRESH_OPTIONS = 0x3582, CMSG_GOSSIP_SELECT_OPTION = 0x349B, - CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x5036, - CMSG_GUILD_ADD_RANK = 0x501B, + CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x5034, + CMSG_GUILD_ADD_RANK = 0x5019, CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x5016, - CMSG_GUILD_AUTO_DECLINE_INVITATION = 0x5018, CMSG_GUILD_BANK_ACTIVATE = 0x34BE, CMSG_GUILD_BANK_BUY_TAB = 0x34CC, CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x34CE, - CMSG_GUILD_BANK_LOG_QUERY = 0x502F, + CMSG_GUILD_BANK_LOG_QUERY = 0x502D, CMSG_GUILD_BANK_QUERY_TAB = 0x34CB, - CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x5030, - CMSG_GUILD_BANK_SET_TAB_TEXT = 0x5033, - CMSG_GUILD_BANK_TEXT_QUERY = 0x5034, + CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x502E, + CMSG_GUILD_BANK_SET_TAB_TEXT = 0x5031, + CMSG_GUILD_BANK_TEXT_QUERY = 0x5032, CMSG_GUILD_BANK_UPDATE_TAB = 0x34CD, CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x34CF, - CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x502D, - CMSG_GUILD_CHANGE_NAME_REQUEST = 0x502E, - CMSG_GUILD_DECLINE_INVITATION = 0x5017, - CMSG_GUILD_DELETE = 0x501F, - CMSG_GUILD_DELETE_RANK = 0x501C, + CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x502B, + CMSG_GUILD_CHANGE_NAME_REQUEST = 0x502C, + CMSG_GUILD_DECLINE_INVITATION = 0x35FE, + CMSG_GUILD_DELETE = 0x501D, + CMSG_GUILD_DELETE_RANK = 0x501A, CMSG_GUILD_DEMOTE_MEMBER = 0x5015, - CMSG_GUILD_EVENT_LOG_QUERY = 0x5032, - CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x5028, - CMSG_GUILD_GET_RANKS = 0x5024, - CMSG_GUILD_GET_ROSTER = 0x502A, - CMSG_GUILD_INVITE_BY_NAME = 0x3607, - CMSG_GUILD_LEAVE = 0x5019, - CMSG_GUILD_NEWS_UPDATE_STICKY = 0x5025, - CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x501A, - CMSG_GUILD_PERMISSIONS_QUERY = 0x5031, + CMSG_GUILD_EVENT_LOG_QUERY = 0x5030, + CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x5026, + CMSG_GUILD_GET_RANKS = 0x5022, + CMSG_GUILD_GET_ROSTER = 0x5028, + CMSG_GUILD_INVITE_BY_NAME = 0x3608, + CMSG_GUILD_LEAVE = 0x5017, + CMSG_GUILD_NEWS_UPDATE_STICKY = 0x5023, + CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x5018, + CMSG_GUILD_PERMISSIONS_QUERY = 0x502F, CMSG_GUILD_PROMOTE_MEMBER = 0x5014, - CMSG_GUILD_QUERY_MEMBERS_FOR_RECIPE = 0x5022, - CMSG_GUILD_QUERY_MEMBER_RECIPES = 0x5020, - CMSG_GUILD_QUERY_NEWS = 0x5023, - CMSG_GUILD_QUERY_RECIPES = 0x5021, - CMSG_GUILD_REPLACE_GUILD_MASTER = 0x5035, - CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x5026, - CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x5027, - CMSG_GUILD_SET_GUILD_MASTER = 0x36C3, - CMSG_GUILD_SET_MEMBER_NOTE = 0x5029, - CMSG_GUILD_SET_RANK_PERMISSIONS = 0x501E, - CMSG_GUILD_SHIFT_RANK = 0x501D, - CMSG_GUILD_UPDATE_INFO_TEXT = 0x502C, - CMSG_GUILD_UPDATE_MOTD_TEXT = 0x502B, - CMSG_HEARTH_AND_RESURRECT = 0x3517, - CMSG_HIDE_QUEST_CHOICE = 0x32C4, + CMSG_GUILD_QUERY_MEMBERS_FOR_RECIPE = 0x5020, + CMSG_GUILD_QUERY_MEMBER_RECIPES = 0x501E, + CMSG_GUILD_QUERY_NEWS = 0x5021, + CMSG_GUILD_QUERY_RECIPES = 0x501F, + CMSG_GUILD_REPLACE_GUILD_MASTER = 0x5033, + CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x5024, + CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x5025, + CMSG_GUILD_SET_GUILD_MASTER = 0x36C5, + CMSG_GUILD_SET_MEMBER_NOTE = 0x5027, + CMSG_GUILD_SET_RANK_PERMISSIONS = 0x501C, + CMSG_GUILD_SHIFT_RANK = 0x501B, + CMSG_GUILD_UPDATE_INFO_TEXT = 0x502A, + CMSG_GUILD_UPDATE_MOTD_TEXT = 0x5029, + CMSG_HEARTH_AND_RESURRECT = 0x3516, + CMSG_HIDE_QUEST_CHOICE = 0x32CF, CMSG_HOTFIX_REQUEST = 0x35E5, CMSG_IGNORE_TRADE = 0x3159, CMSG_INITIATE_ROLE_POLL = 0x35DA, CMSG_INITIATE_TRADE = 0x3156, CMSG_INSPECT = 0x353E, - CMSG_INSTANCE_LOCK_RESPONSE = 0x351C, - CMSG_ISLAND_QUEUE = 0x33B8, + CMSG_INSTANCE_LOCK_RESPONSE = 0x351B, + CMSG_ISLAND_QUEUE = 0x33B0, CMSG_ITEM_PURCHASE_REFUND = 0x3545, - CMSG_ITEM_TEXT_QUERY = 0x3351, - CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DE, + CMSG_ITEM_TEXT_QUERY = 0x335E, + CMSG_JOIN_PET_BATTLE_QUEUE = 0x31E0, CMSG_JOIN_RATED_BATTLEGROUND = 0x3179, - CMSG_KEEP_ALIVE = 0x367C, - CMSG_KEYBOUND_OVERRIDE = 0x3230, + CMSG_KEEP_ALIVE = 0x367D, + CMSG_KEYBOUND_OVERRIDE = 0x3233, CMSG_LATENCY_REPORT = 0x3785, CMSG_LEARN_PVP_TALENTS = 0x356E, CMSG_LEARN_TALENTS = 0x356C, - CMSG_LEAVE_GROUP = 0x3646, - CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31DF, - CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360E, - CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360F, - CMSG_LFG_LIST_DECLINE_APPLICANT = 0x3610, - CMSG_LFG_LIST_GET_STATUS = 0x360C, - CMSG_LFG_LIST_INVITE_APPLICANT = 0x3611, - CMSG_LFG_LIST_INVITE_RESPONSE = 0x3612, - CMSG_LFG_LIST_JOIN = 0x3397, - CMSG_LFG_LIST_LEAVE = 0x360B, - CMSG_LFG_LIST_SEARCH = 0x360D, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x3398, + CMSG_LEAVE_GROUP = 0x3647, + CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31E1, + CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360F, + CMSG_LFG_LIST_CANCEL_APPLICATION = 0x3610, + CMSG_LFG_LIST_DECLINE_APPLICANT = 0x3611, + CMSG_LFG_LIST_GET_STATUS = 0x360D, + CMSG_LFG_LIST_INVITE_APPLICANT = 0x3612, + CMSG_LFG_LIST_INVITE_RESPONSE = 0x3613, + CMSG_LFG_LIST_JOIN = 0x33A4, + CMSG_LFG_LIST_LEAVE = 0x360C, + CMSG_LFG_LIST_SEARCH = 0x360E, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x33A5, CMSG_LIST_INVENTORY = 0x34A8, - CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B4, - CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B3, - CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B2, - CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B5, + 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 = 0x3333, - CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x373B, - CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x3749, - CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x373E, - CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x373A, - CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x373D, - CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x373C, - CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x373F, - CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x3740, - CMSG_LOGOUT_CANCEL = 0x34E8, - CMSG_LOGOUT_INSTANT = 0x34E9, - CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x3595, + CMSG_LOAD_SELECTED_TROPHY = 0x3340, + CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x373D, + CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x374B, + CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x3740, + CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x373C, + CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x373F, + CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x373E, + CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x3741, + CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x3742, + CMSG_LOGOUT_CANCEL = 0x34E7, + CMSG_LOGOUT_INSTANT = 0x34E8, + CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x3596, CMSG_LOGOUT_REQUEST = 0x34E6, CMSG_LOG_DISCONNECT = 0x377D, CMSG_LOG_STREAMING_ERROR = 0x3781, - CMSG_LOOT_ITEM = 0x3218, - CMSG_LOOT_MONEY = 0x3217, - CMSG_LOOT_RELEASE = 0x321C, - CMSG_LOOT_ROLL = 0x321D, - CMSG_LOOT_UNIT = 0x3216, - CMSG_LOW_LEVEL_RAID1 = 0x369D, - CMSG_LOW_LEVEL_RAID2 = 0x3523, + CMSG_LOOT_ITEM = 0x321B, + CMSG_LOOT_MONEY = 0x321A, + CMSG_LOOT_RELEASE = 0x321F, + CMSG_LOOT_ROLL = 0x3220, + CMSG_LOOT_UNIT = 0x3219, + CMSG_LOW_LEVEL_RAID1 = 0x369F, + CMSG_LOW_LEVEL_RAID2 = 0x3522, CMSG_MAIL_CREATE_TEXT_ITEM = 0x3550, - CMSG_MAIL_DELETE = 0x3232, + CMSG_MAIL_DELETE = 0x3235, CMSG_MAIL_GET_LIST = 0x354B, CMSG_MAIL_MARK_AS_READ = 0x354F, - CMSG_MAIL_RETURN_TO_SENDER = 0x3652, + CMSG_MAIL_RETURN_TO_SENDER = 0x3653, CMSG_MAIL_TAKE_ITEM = 0x354D, CMSG_MAIL_TAKE_MONEY = 0x354C, - CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3234, - CMSG_MASTER_LOOT_ITEM = 0x3219, + CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3237, + CMSG_MASTER_LOOT_ITEM = 0x321C, CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x34C9, CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x34C6, CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x34C4, - CMSG_MINIMAP_PING = 0x3648, + CMSG_MINIMAP_PING = 0x3649, CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318A, CMSG_MOUNT_CLEAR_FANFARE = 0x3127, - CMSG_MOUNT_SET_FAVORITE = 0x362F, - CMSG_MOUNT_SPECIAL_ANIM = 0x329C, - CMSG_MOVE_ADD_IMPULSE_ACK = 0x3A50, - CMSG_MOVE_APPLY_INERTIA_ACK = 0x3A4E, + CMSG_MOUNT_SET_FAVORITE = 0x3630, + CMSG_MOUNT_SPECIAL_ANIM = 0x32A5, + CMSG_MOVE_ADD_IMPULSE_ACK = 0x3A51, + CMSG_MOVE_APPLY_INERTIA_ACK = 0x3A4F, CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A15, - CMSG_MOVE_CHANGE_TRANSPORT = 0x3A2F, - CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A34, - CMSG_MOVE_COLLISION_DISABLE_ACK = 0x3A39, - CMSG_MOVE_COLLISION_ENABLE_ACK = 0x3A3A, - CMSG_MOVE_DISMISS_VEHICLE = 0x3A33, + 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 = 0x3A1E, + CMSG_MOVE_ENABLE_FULL_SPEED_TURNING_ACK = 0x3A65, CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x3A24, CMSG_MOVE_FALL_LAND = 0x39FB, CMSG_MOVE_FALL_RESET = 0x3A19, CMSG_MOVE_FEATHER_FALL_ACK = 0x3A1C, - CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3A2E, - CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3A2D, - CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3A32, + 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 = 0x3A0E, CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x3A0C, CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x3A0B, @@ -537,52 +545,51 @@ enum OpcodeClient : uint16 CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x3A23, CMSG_MOVE_FORCE_UNROOT_ACK = 0x3A0F, CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK = 0x3A21, - CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x3A35, - CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x3A36, + CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x3A36, + CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x3A37, CMSG_MOVE_GUILD_BANK_ITEM = 0x34C3, CMSG_MOVE_HEARTBEAT = 0x3A10, CMSG_MOVE_HOVER_ACK = 0x3A13, - CMSG_MOVE_INERTIA_DISABLE_ACK = 0x3A37, - CMSG_MOVE_INERTIA_ENABLE_ACK = 0x3A38, - CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x3A46, + 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 = 0x3A12, - CMSG_MOVE_REMOVE_INERTIA_ACK = 0x3A4F, + CMSG_MOVE_REMOVE_INERTIA_ACK = 0x3A50, CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x3A17, CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x3A16, - CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE = 0x3A44, - CMSG_MOVE_SET_ADV_FLY = 0x3A52, - CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK = 0x3A58, - CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK = 0x3A53, - CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK = 0x3A59, - CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK = 0x3A56, - CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK = 0x3A57, - CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK = 0x3A60, - CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK = 0x3A55, - CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK = 0x3A54, - CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK = 0x3A5E, - CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK = 0x3A5A, - CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK = 0x3A5B, - CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK = 0x3A5D, - CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK = 0x3A5C, - CMSG_MOVE_SET_CAN_ADV_FLY_ACK = 0x3A51, + CMSG_MOVE_SET_ADV_FLY = 0x3A53, + CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK = 0x3A59, + CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK = 0x3A54, + CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK = 0x3A5A, + CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK = 0x3A57, + CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK = 0x3A58, + CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK = 0x3A61, + CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK = 0x3A56, + CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK = 0x3A55, + CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK = 0x3A5F, + CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK = 0x3A5B, + CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK = 0x3A5C, + CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK = 0x3A5E, + CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK = 0x3A5D, + CMSG_MOVE_SET_CAN_ADV_FLY_ACK = 0x3A52, CMSG_MOVE_SET_CAN_FLY_ACK = 0x3A27, CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x3A25, - CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x3A3B, + CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x3A3C, CMSG_MOVE_SET_FACING = 0x3A09, - CMSG_MOVE_SET_FACING_HEARTBEAT = 0x3A5F, - CMSG_MOVE_SET_FLY = 0x3A28, + CMSG_MOVE_SET_FACING_HEARTBEAT = 0x3A60, + CMSG_MOVE_SET_FLY = 0x3A29, CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK = 0x3A26, - CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x3A42, + CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x3A43, CMSG_MOVE_SET_PITCH = 0x3A0A, CMSG_MOVE_SET_RUN_MODE = 0x39F2, CMSG_MOVE_SET_TURN_RATE_CHEAT = 0x3A06, CMSG_MOVE_SET_VEHICLE_REC_ID_ACK = 0x3A14, CMSG_MOVE_SET_WALK_MODE = 0x39F3, CMSG_MOVE_SPLINE_DONE = 0x3A18, - CMSG_MOVE_START_ASCEND = 0x3A29, + CMSG_MOVE_START_ASCEND = 0x3A2A, CMSG_MOVE_START_BACKWARD = 0x39E5, - CMSG_MOVE_START_DESCEND = 0x3A30, + CMSG_MOVE_START_DESCEND = 0x3A31, CMSG_MOVE_START_FORWARD = 0x39E4, CMSG_MOVE_START_PITCH_DOWN = 0x39F0, CMSG_MOVE_START_PITCH_UP = 0x39EF, @@ -592,7 +599,7 @@ enum OpcodeClient : uint16 CMSG_MOVE_START_TURN_LEFT = 0x39EC, CMSG_MOVE_START_TURN_RIGHT = 0x39ED, CMSG_MOVE_STOP = 0x39E6, - CMSG_MOVE_STOP_ASCEND = 0x3A2A, + CMSG_MOVE_STOP_ASCEND = 0x3A2B, CMSG_MOVE_STOP_PITCH = 0x39F1, CMSG_MOVE_STOP_STRAFE = 0x39E9, CMSG_MOVE_STOP_SWIM = 0x39FD, @@ -602,48 +609,48 @@ enum OpcodeClient : uint16 CMSG_MOVE_UPDATE_FALL_SPEED = 0x3A1A, CMSG_MOVE_WATER_WALK_ACK = 0x3A1D, CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x305D, - CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D4, + CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D6, CMSG_NEXT_CINEMATIC_CAMERA = 0x3559, CMSG_OBJECT_UPDATE_FAILED = 0x3180, CMSG_OBJECT_UPDATE_RESCUED = 0x3181, - CMSG_OFFER_PETITION = 0x33DF, + CMSG_OFFER_PETITION = 0x33D6, CMSG_OPENING_CINEMATIC = 0x3558, - CMSG_OPEN_ITEM = 0x3352, - CMSG_OPEN_MISSION_NPC = 0x3315, - CMSG_OPEN_SHIPMENT_NPC = 0x331D, - CMSG_OPEN_TRADESKILL_NPC = 0x3328, - CMSG_OPT_OUT_OF_LOOT = 0x3506, - CMSG_OVERRIDE_SCREEN_FLASH = 0x3530, - CMSG_PARTY_INVITE = 0x3603, - CMSG_PARTY_INVITE_RESPONSE = 0x3605, - CMSG_PARTY_UNINVITE = 0x3644, - CMSG_PERFORM_ITEM_INTERACTION = 0x323C, - CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x3408, + CMSG_OPEN_ITEM = 0x335F, + CMSG_OPEN_MISSION_NPC = 0x3320, + CMSG_OPEN_SHIPMENT_NPC = 0x3328, + CMSG_OPEN_TRADESKILL_NPC = 0x3333, + CMSG_OPT_OUT_OF_LOOT = 0x3505, + CMSG_OVERRIDE_SCREEN_FLASH = 0x352F, + CMSG_PARTY_INVITE = 0x3604, + CMSG_PARTY_INVITE_RESPONSE = 0x3606, + CMSG_PARTY_UNINVITE = 0x3645, + CMSG_PERFORM_ITEM_INTERACTION = 0x323F, + CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x33FE, CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x3135, - CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x340A, - CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x340B, - CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x340C, - CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3409, + CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3400, + CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3401, + CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3402, + CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x33FF, CMSG_PETITION_BUY = 0x34D1, - CMSG_PETITION_RENAME_GUILD = 0x36C4, + CMSG_PETITION_RENAME_GUILD = 0x36C6, CMSG_PETITION_SHOW_LIST = 0x34D0, CMSG_PETITION_SHOW_SIGNATURES = 0x34D2, CMSG_PET_ABANDON = 0x3493, CMSG_PET_ABANDON_BY_NUMBER = 0x3494, CMSG_PET_ACTION = 0x3491, - CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E3, - CMSG_PET_BATTLE_INPUT = 0x363E, - CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3231, - CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E2, - CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x363F, - CMSG_PET_BATTLE_REQUEST_PVP = 0x31DC, - CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DD, - CMSG_PET_BATTLE_REQUEST_WILD = 0x31DA, - CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E4, - CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DB, + CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E5, + CMSG_PET_BATTLE_INPUT = 0x363F, + CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3234, + CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E4, + CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3640, + 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_CANCEL_AURA = 0x3495, - CMSG_PET_CAST_SPELL = 0x32B9, - CMSG_PET_RENAME = 0x3681, + CMSG_PET_CAST_SPELL = 0x32C4, + CMSG_PET_RENAME = 0x3682, CMSG_PET_SET_ACTION = 0x3490, CMSG_PET_SPELL_AUTOCAST = 0x3496, CMSG_PET_STOP_ATTACK = 0x3492, @@ -651,30 +658,30 @@ enum OpcodeClient : uint16 CMSG_PLAYER_LOGIN = 0x35EA, CMSG_PUSH_QUEST_TO_PARTY = 0x34A6, CMSG_PVP_LOG_DATA = 0x317C, - CMSG_QUERY_BATTLE_PET_NAME = 0x328F, - CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x365D, - CMSG_QUERY_CORPSE_TRANSPORT = 0x365E, + CMSG_QUERY_BATTLE_PET_NAME = 0x3298, + CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x365E, + CMSG_QUERY_CORPSE_TRANSPORT = 0x365F, CMSG_QUERY_COUNTDOWN_TIMER = 0x31A9, - CMSG_QUERY_CREATURE = 0x3289, - CMSG_QUERY_GAME_OBJECT = 0x328A, - CMSG_QUERY_GARRISON_PET_NAME = 0x3290, - CMSG_QUERY_GUILD_INFO = 0x3687, - CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3510, + CMSG_QUERY_CREATURE = 0x3292, + CMSG_QUERY_GAME_OBJECT = 0x3293, + CMSG_QUERY_GARRISON_PET_NAME = 0x3299, + CMSG_QUERY_GUILD_INFO = 0x3688, + CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x350F, CMSG_QUERY_NEXT_MAIL_TIME = 0x354E, - CMSG_QUERY_NPC_TEXT = 0x328B, - CMSG_QUERY_PAGE_TEXT = 0x328D, - CMSG_QUERY_PETITION = 0x3291, - CMSG_QUERY_PET_NAME = 0x328E, + CMSG_QUERY_NPC_TEXT = 0x3294, + CMSG_QUERY_PAGE_TEXT = 0x3296, + CMSG_QUERY_PETITION = 0x329A, + CMSG_QUERY_PET_NAME = 0x3297, CMSG_QUERY_PLAYER_NAMES = 0x3786, CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x3784, CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x3783, CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3175, - CMSG_QUERY_QUEST_INFO = 0x328C, + CMSG_QUERY_QUEST_INFO = 0x3295, CMSG_QUERY_QUEST_ITEM_USABILITY = 0x3176, - CMSG_QUERY_REALM_NAME = 0x3686, - CMSG_QUERY_SCENARIO_POI = 0x3653, + CMSG_QUERY_REALM_NAME = 0x3687, + CMSG_QUERY_SCENARIO_POI = 0x3654, CMSG_QUERY_TIME = 0x34E5, - CMSG_QUERY_TREASURE_PICKER = 0x3377, + CMSG_QUERY_TREASURE_PICKER = 0x3384, CMSG_QUERY_VOID_STORAGE = 0x31A2, CMSG_QUEST_CONFIRM_ACCEPT = 0x34A5, CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x349F, @@ -686,154 +693,157 @@ enum OpcodeClient : uint16 CMSG_QUEST_GIVER_REQUEST_REWARD = 0x34A2, CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x34A4, CMSG_QUEST_GIVER_STATUS_QUERY = 0x34A3, - CMSG_QUEST_GIVER_STATUS_TRACKED_QUERY = 0x3593, + CMSG_QUEST_GIVER_STATUS_TRACKED_QUERY = 0x3594, CMSG_QUEST_LOG_REMOVE_QUEST = 0x3543, - CMSG_QUEST_POI_QUERY = 0x36AB, + CMSG_QUEST_POI_QUERY = 0x36AD, CMSG_QUEST_PUSH_RESULT = 0x34A7, - CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33D0, - CMSG_QUEST_SESSION_REQUEST_START = 0x33CF, - CMSG_QUEST_SESSION_REQUEST_STOP = 0x3729, + CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33C8, + CMSG_QUEST_SESSION_REQUEST_START = 0x33C7, + CMSG_QUEST_SESSION_REQUEST_STOP = 0x372B, CMSG_QUEUED_MESSAGES_END = 0x3780, - CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3701, - CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3700, - CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x372E, - CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x36FF, - CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x36FE, - CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x3514, - CMSG_RAF_CLAIM_NEXT_REWARD = 0x371F, - CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3721, - CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3720, - CMSG_RANDOM_ROLL = 0x3651, - CMSG_READY_CHECK_RESPONSE = 0x3632, - CMSG_READ_ITEM = 0x3353, - CMSG_RECLAIM_CORPSE = 0x34EB, - CMSG_REMOVE_NEW_ITEM = 0x337A, - CMSG_REMOVE_RAF_RECRUIT = 0x3722, + CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3703, + CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3702, + CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x3730, + CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3701, + CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3700, + CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x3513, + CMSG_RAF_CLAIM_NEXT_REWARD = 0x3721, + CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3723, + CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3722, + CMSG_RANDOM_ROLL = 0x3652, + CMSG_READY_CHECK_RESPONSE = 0x3633, + CMSG_READ_ITEM = 0x3360, + CMSG_RECLAIM_CORPSE = 0x34EA, + CMSG_REMOVE_NEW_ITEM = 0x3387, + CMSG_REMOVE_RAF_RECRUIT = 0x3724, CMSG_REORDER_CHARACTERS = 0x35E9, - CMSG_REPAIR_ITEM = 0x34FC, - CMSG_REPLACE_TROPHY = 0x3334, + CMSG_REPAIR_ITEM = 0x34FB, + CMSG_REPLACE_TROPHY = 0x3341, CMSG_REPOP_REQUEST = 0x353B, - CMSG_REPORT_CLIENT_VARIABLES = 0x36FB, - CMSG_REPORT_ENABLED_ADDONS = 0x36FA, - CMSG_REPORT_FROZEN_WHILE_LOADING_MAP = 0x36A3, - CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FC, - CMSG_REPORT_PVP_PLAYER_AFK = 0x3504, - CMSG_REPORT_SERVER_LAG = 0x33C8, - CMSG_REPORT_STUCK_IN_COMBAT = 0x33C9, - CMSG_REQUEST_ACCOUNT_DATA = 0x3691, - CMSG_REQUEST_AREA_POI_UPDATE = 0x3379, + CMSG_REPORT_CLIENT_VARIABLES = 0x36FD, + CMSG_REPORT_ENABLED_ADDONS = 0x36FC, + CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FE, + CMSG_REPORT_PVP_PLAYER_AFK = 0x3503, + CMSG_REPORT_SERVER_LAG = 0x33C0, + CMSG_REPORT_STUCK_IN_COMBAT = 0x33C1, + CMSG_REQUEST_ACCOUNT_DATA = 0x3693, + CMSG_REQUEST_AREA_POI_UPDATE = 0x3386, CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC, CMSG_REQUEST_CEMETERY_LIST = 0x3177, - CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3688, - CMSG_REQUEST_COVENANT_CALLINGS = 0x33BA, + CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3689, + CMSG_REQUEST_COVENANT_CALLINGS = 0x33B2, CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x353F, - CMSG_REQUEST_FORCED_REACTIONS = 0x320D, - CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33F4, + CMSG_REQUEST_CURRENCY_DATA_FOR_ACCOUNT_CHARACTERS = 0x313C, + CMSG_REQUEST_FORCED_REACTIONS = 0x3210, + CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33EB, CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A8, CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A7, - CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33CA, - CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32C5, - CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3207, - CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3208, + CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C2, + CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32D0, + CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x320A, + CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x320B, CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7, - CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3650, + CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3651, CMSG_REQUEST_PET_INFO = 0x3497, - CMSG_REQUEST_PLAYED_TIME = 0x3294, + CMSG_REQUEST_PLAYED_TIME = 0x329D, CMSG_REQUEST_PVP_REWARDS = 0x3195, - CMSG_REQUEST_RAID_INFO = 0x36C5, + CMSG_REQUEST_RAID_INFO = 0x36C7, CMSG_REQUEST_RATED_PVP_INFO = 0x35E3, - CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x5037, + CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x3761, CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x3196, CMSG_REQUEST_STABLED_PETS = 0x3498, - CMSG_REQUEST_VEHICLE_EXIT = 0x3249, - CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x324B, - CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x324A, - CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x324C, - CMSG_REQUEST_WEEKLY_REWARDS = 0x33BD, - CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3378, - CMSG_RESET_CHALLENGE_MODE = 0x3205, - CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3206, - CMSG_RESET_INSTANCES = 0x3665, - CMSG_RESURRECT_RESPONSE = 0x3680, - CMSG_REVERT_MONUMENT_APPEARANCE = 0x3336, - CMSG_RIDE_VEHICLE_INTERACT = 0x324D, - CMSG_RPE_RESET_CHARACTER = 0x374C, - CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x3746, + CMSG_REQUEST_VEHICLE_EXIT = 0x3251, + CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3253, + CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3252, + CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3254, + CMSG_REQUEST_WEEKLY_REWARDS = 0x33B5, + CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3385, + CMSG_RESET_CHALLENGE_MODE = 0x3208, + CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3209, + CMSG_RESET_INSTANCES = 0x3666, + CMSG_RESURRECT_RESPONSE = 0x3681, + CMSG_REVERT_MONUMENT_APPEARANCE = 0x3343, + CMSG_RIDE_VEHICLE_INTERACT = 0x3255, + CMSG_RPE_RESET_CHARACTER = 0x374E, + CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x3748, CMSG_SAVE_CUF_PROFILES = 0x318B, - CMSG_SAVE_EQUIPMENT_SET = 0x351A, - CMSG_SAVE_GUILD_EMBLEM = 0x32C9, - CMSG_SAVE_PERSONAL_EMBLEM = 0x32CA, - CMSG_SCENE_PLAYBACK_CANCELED = 0x322D, - CMSG_SCENE_PLAYBACK_COMPLETE = 0x322C, - CMSG_SCENE_TRIGGER_EVENT = 0x322E, + CMSG_SAVE_EQUIPMENT_SET = 0x3519, + CMSG_SAVE_GUILD_EMBLEM = 0x32D4, + CMSG_SAVE_PERSONAL_EMBLEM = 0x32D5, + CMSG_SCENE_PLAYBACK_CANCELED = 0x3230, + CMSG_SCENE_PLAYBACK_COMPLETE = 0x322F, + CMSG_SCENE_TRIGGER_EVENT = 0x3231, + CMSG_SEAMLESS_TRANSFER_COMPLETE = 0x3427, CMSG_SELF_RES = 0x3546, CMSG_SELL_ALL_JUNK_ITEMS = 0x34AA, CMSG_SELL_ITEM = 0x34A9, - CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F4, - CMSG_SEND_CONTACT_LIST = 0x36CA, + CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F6, + CMSG_SEND_CONTACT_LIST = 0x36CC, CMSG_SEND_MAIL = 0x35FA, - CMSG_SEND_PING_UNIT = 0x3433, - CMSG_SEND_PING_WORLD_POINT = 0x3434, + CMSG_SEND_PING_UNIT = 0x3429, + CMSG_SEND_PING_WORLD_POINT = 0x342A, CMSG_SEND_TEXT_EMOTE = 0x348E, - CMSG_SERVER_TIME_OFFSET_REQUEST = 0x3698, - CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3233, + CMSG_SERVER_TIME_OFFSET_REQUEST = 0x369A, + CMSG_SETUP_WARBAND_GROUPS = 0x375C, + CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3236, CMSG_SET_ACTION_BAR_TOGGLES = 0x3547, - CMSG_SET_ACTION_BUTTON = 0x3633, - CMSG_SET_ACTIVE_MOVER = 0x3A3C, - CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32D7, - CMSG_SET_ASSISTANT_LEADER = 0x364C, - CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3356, - CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x3357, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3358, - CMSG_SET_CONTACT_NOTES = 0x36CD, + CMSG_SET_ACTION_BUTTON = 0x3634, + CMSG_SET_ACTIVE_MOVER = 0x3A3D, + CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32E2, + CMSG_SET_ASSISTANT_LEADER = 0x364D, + CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3363, + CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x3364, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3365, + CMSG_SET_CONTACT_NOTES = 0x36CF, CMSG_SET_CURRENCY_FLAGS = 0x3169, - CMSG_SET_DIFFICULTY_ID = 0x322F, - CMSG_SET_DUNGEON_DIFFICULTY = 0x367F, - CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x3283, - CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3619, - CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x3702, - CMSG_SET_FACTION_AT_WAR = 0x34EE, - CMSG_SET_FACTION_INACTIVE = 0x34F0, - CMSG_SET_FACTION_NOT_AT_WAR = 0x34EF, + CMSG_SET_DIFFICULTY_ID = 0x3232, + CMSG_SET_DUNGEON_DIFFICULTY = 0x3680, + CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x328C, + CMSG_SET_EVERYONE_IS_ASSISTANT = 0x361A, + CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x3704, + CMSG_SET_FACTION_AT_WAR = 0x34ED, + CMSG_SET_FACTION_INACTIVE = 0x34EF, + CMSG_SET_FACTION_NOT_AT_WAR = 0x34EE, CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31B9, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x335A, - CMSG_SET_LOOT_METHOD = 0x3645, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3367, + CMSG_SET_LOOT_METHOD = 0x3646, CMSG_SET_LOOT_SPECIALIZATION = 0x3554, - CMSG_SET_PARTY_ASSIGNMENT = 0x364E, - CMSG_SET_PARTY_LEADER = 0x3647, + CMSG_SET_PARTY_ASSIGNMENT = 0x364F, + CMSG_SET_PARTY_LEADER = 0x3648, CMSG_SET_PET_FAVORITE = 0x3168, CMSG_SET_PET_SLOT = 0x3167, - CMSG_SET_PLAYER_DECLINED_NAMES = 0x3685, + CMSG_SET_PLAYER_DECLINED_NAMES = 0x3686, CMSG_SET_PREFERRED_CEMETERY = 0x3178, - CMSG_SET_PVP = 0x32CE, - CMSG_SET_RAID_DIFFICULTY = 0x36D6, - CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x361A, + CMSG_SET_PVP = 0x32D9, + CMSG_SET_RAID_DIFFICULTY = 0x36D8, + CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x361B, CMSG_SET_ROLE = 0x35D9, - CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3683, + CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3684, CMSG_SET_SELECTION = 0x353D, CMSG_SET_SHEATHED = 0x348F, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3359, - CMSG_SET_TAXI_BENCHMARK_MODE = 0x3503, - CMSG_SET_TITLE = 0x329A, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3366, + CMSG_SET_TAXI_BENCHMARK_MODE = 0x3502, + CMSG_SET_TITLE = 0x32A3, CMSG_SET_TRADE_CURRENCY = 0x3160, CMSG_SET_TRADE_GOLD = 0x315F, CMSG_SET_TRADE_ITEM = 0x315D, - CMSG_SET_USING_PARTY_GARRISON = 0x3317, - CMSG_SET_WAR_MODE = 0x32CF, - CMSG_SET_WATCHED_FACTION = 0x34F1, - CMSG_SHOW_TRADE_SKILL = 0x36BD, + CMSG_SET_USING_PARTY_GARRISON = 0x3322, + CMSG_SET_WAR_MODE = 0x32DA, + CMSG_SET_WATCHED_FACTION = 0x34F0, + CMSG_SHOW_TRADE_SKILL = 0x36BF, CMSG_SIGN_PETITION = 0x3548, - CMSG_SILENCE_PARTY_TALKER = 0x364F, - CMSG_SOCIAL_CONTRACT_REQUEST = 0x3741, - CMSG_SOCKET_GEMS = 0x34FB, - CMSG_SORT_BAGS = 0x335B, - CMSG_SORT_BANK_BAGS = 0x335C, - CMSG_SORT_REAGENT_BANK_BAGS = 0x335D, - CMSG_SPAWN_TRACKING_UPDATE = 0x32AF, - CMSG_SPECTATE_CHANGE = 0x342B, + CMSG_SILENCE_PARTY_TALKER = 0x3650, + CMSG_SOCIAL_CONTRACT_REQUEST = 0x3743, + CMSG_SOCKET_GEMS = 0x34FA, + CMSG_SORT_ACCOUNT_BANK_BAGS = 0x342D, + CMSG_SORT_BAGS = 0x3368, + CMSG_SORT_BANK_BAGS = 0x3369, + CMSG_SORT_REAGENT_BANK_BAGS = 0x336A, + CMSG_SPAWN_TRACKING_UPDATE = 0x32B8, + CMSG_SPECTATE_CHANGE = 0x3420, CMSG_SPELL_CLICK = 0x349C, - CMSG_SPELL_EMPOWER_RELEASE = 0x3281, - CMSG_SPELL_EMPOWER_RESTART = 0x3282, + CMSG_SPELL_EMPOWER_RELEASE = 0x328A, + CMSG_SPELL_EMPOWER_RESTART = 0x328B, CMSG_SPIRIT_HEALER_ACTIVATE = 0x34B7, CMSG_SPLIT_GUILD_BANK_ITEM = 0x34CA, CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY = 0x34C7, @@ -844,10 +854,10 @@ enum OpcodeClient : uint16 CMSG_START_SPECTATOR_WAR_GAME = 0x35DF, CMSG_START_WAR_GAME = 0x35DE, CMSG_STORE_GUILD_BANK_ITEM = 0x34C0, - CMSG_SUBMIT_USER_FEEDBACK = 0x3690, - CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E9, - CMSG_SUMMON_RESPONSE = 0x3667, - CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3643, + CMSG_SUBMIT_USER_FEEDBACK = 0x3692, + CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E0, + CMSG_SUMMON_RESPONSE = 0x3668, + CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3644, CMSG_SURRENDER_ARENA = 0x3174, CMSG_SUSPEND_COMMS_ACK = 0x3778, CMSG_SUSPEND_TOKEN_RESPONSE = 0x377E, @@ -855,153 +865,157 @@ enum OpcodeClient : uint16 CMSG_SWAP_INV_ITEM = 0x399D, CMSG_SWAP_ITEM = 0x399C, CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x34C1, - CMSG_SWAP_SUB_GROUPS = 0x364A, + CMSG_SWAP_SUB_GROUPS = 0x364B, CMSG_SWAP_VOID_ITEM = 0x31A4, - CMSG_TABARD_VENDOR_ACTIVATE = 0x32CB, + CMSG_TABARD_VENDOR_ACTIVATE = 0x32D6, CMSG_TALK_TO_GOSSIP = 0x3499, CMSG_TAXI_NODE_STATUS_QUERY = 0x34B0, CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34B2, CMSG_TAXI_REQUEST_EARLY_LANDING = 0x34B4, - CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3A40, - CMSG_TIME_SYNC_RESPONSE = 0x3A3D, - CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3F, - CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3E, - CMSG_TOGGLE_DIFFICULTY = 0x3654, - CMSG_TOGGLE_PVP = 0x32CD, - CMSG_TOTEM_DESTROYED = 0x3508, + 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 = 0x3655, + CMSG_TOGGLE_PVP = 0x32D8, + CMSG_TOTEM_DESTROYED = 0x3507, CMSG_TOY_CLEAR_FANFARE = 0x3128, - CMSG_TRADE_SKILL_SET_FAVORITE = 0x3376, + CMSG_TRADE_SKILL_SET_FAVORITE = 0x3383, CMSG_TRAINER_BUY_SPELL = 0x34B6, CMSG_TRAINER_LIST = 0x34B5, - CMSG_TRAITS_COMMIT_CONFIG = 0x3413, - CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3411, + CMSG_TRAITS_COMMIT_CONFIG = 0x3408, + CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3406, + CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER = 0x3437, CMSG_TRANSMOGRIFY_ITEMS = 0x3197, CMSG_TURN_IN_PETITION = 0x354A, - CMSG_TUTORIAL = 0x36D7, - CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B9, + CMSG_TUTORIAL = 0x36D9, + CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B1, CMSG_UNACCEPT_TRADE = 0x315B, - CMSG_UNDELETE_CHARACTER = 0x36D9, - CMSG_UNLEARN_SKILL = 0x34F5, + CMSG_UNDELETE_CHARACTER = 0x36DB, + CMSG_UNLEARN_SKILL = 0x34F4, CMSG_UNLEARN_SPECIALIZATION = 0x31A5, CMSG_UNLOCK_VOID_STORAGE = 0x31A1, - CMSG_UPDATE_AADC_STATUS = 0x3735, - CMSG_UPDATE_ACCOUNT_DATA = 0x3692, - CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32BC, - CMSG_UPDATE_CLIENT_SETTINGS = 0x3661, - CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3329, - CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A43, - CMSG_UPDATE_RAID_TARGET = 0x364D, - CMSG_UPDATE_SPELL_VISUAL = 0x32BB, - CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36EE, - CMSG_UPGRADE_GARRISON = 0x32DF, - CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E7, + CMSG_UPDATE_AADC_STATUS = 0x3737, + CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS = 0x359D, + CMSG_UPDATE_ACCOUNT_DATA = 0x3694, + CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32C7, + CMSG_UPDATE_CLIENT_SETTINGS = 0x3662, + CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3334, + CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A44, + CMSG_UPDATE_RAID_TARGET = 0x364E, + CMSG_UPDATE_SPELL_VISUAL = 0x32C6, + CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F0, + CMSG_UPGRADE_GARRISON = 0x32EA, + CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33DE, CMSG_USED_FOLLOW = 0x3186, - CMSG_USE_CRITTER_ITEM = 0x3253, + CMSG_USE_CRITTER_ITEM = 0x325B, CMSG_USE_EQUIPMENT_SET = 0x3995, - CMSG_USE_ITEM = 0x32B5, - CMSG_USE_TOY = 0x32B8, - CMSG_VAS_CHECK_TRANSFER_OK = 0x3707, - CMSG_VAS_GET_QUEUE_MINUTES = 0x3706, - CMSG_VAS_GET_SERVICE_STATUS = 0x3705, + CMSG_USE_ITEM = 0x32C0, + CMSG_USE_TOY = 0x32C3, + CMSG_VAS_CHECK_TRANSFER_OK = 0x3709, + CMSG_VAS_GET_QUEUE_MINUTES = 0x3708, + CMSG_VAS_GET_SERVICE_STATUS = 0x3707, CMSG_VIOLENCE_LEVEL = 0x3184, - CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x370B, - CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x370C, - CMSG_VOICE_CHAT_LOGIN = 0x370A, + CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x370D, + CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x370E, + CMSG_VOICE_CHAT_LOGIN = 0x370C, CMSG_VOID_STORAGE_TRANSFER = 0x31A3, CMSG_WARDEN3_DATA = 0x35EC, - CMSG_WHO = 0x367E, - CMSG_WHO_IS = 0x367D, - CMSG_WORLD_LOOT_OBJECT_CLICK = 0x342E, + CMSG_WHO = 0x367F, + CMSG_WHO_IS = 0x367E, + CMSG_WORLD_LOOT_OBJECT_CLICK = 0x3423, CMSG_WORLD_PORT_RESPONSE = 0x35F9, CMSG_WRAP_ITEM = 0x3994, }; enum OpcodeServer : uint16 { - SMSG_ABORT_NEW_WORLD = 0x2599, - SMSG_ACCOUNT_COSMETIC_ADDED = 0x2879, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x285F, - SMSG_ACCOUNT_DATA_TIMES = 0x2709, - SMSG_ACCOUNT_EXPORT_RESPONSE = 0x28B6, - SMSG_ACCOUNT_MOUNT_REMOVED = 0x25B0, - SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AF, - SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2878, - SMSG_ACCOUNT_TOY_UPDATE = 0x25B1, - SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B5, - SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25B4, - SMSG_ACHIEVEMENT_DELETED = 0x26E7, - SMSG_ACHIEVEMENT_EARNED = 0x2642, - SMSG_ACTIVATE_ESSENCE_FAILED = 0x3015, - SMSG_ACTIVATE_SOULBIND_FAILED = 0x3017, - SMSG_ACTIVATE_TAXI_REPLY = 0x267E, + SMSG_ABORT_NEW_WORLD = 0x259B, + SMSG_ACCOUNT_CHARACTER_CURRENCY_LISTS = 0x28A1, + SMSG_ACCOUNT_CONVERSION_STATE_UPDATE = 0x28A6, + SMSG_ACCOUNT_COSMETIC_ADDED = 0x2864, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x284B, + SMSG_ACCOUNT_DATA_TIMES = 0x270C, + SMSG_ACCOUNT_EXPORT_RESPONSE = 0x2892, + SMSG_ACCOUNT_MOUNT_REMOVED = 0x25B2, + SMSG_ACCOUNT_MOUNT_UPDATE = 0x25B1, + SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2863, + SMSG_ACCOUNT_TOY_UPDATE = 0x25B3, + SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B7, + SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25B6, + SMSG_ACHIEVEMENT_DELETED = 0x26EA, + SMSG_ACHIEVEMENT_EARNED = 0x2644, + SMSG_ACTIVATE_ESSENCE_FAILED = 0x3017, + SMSG_ACTIVATE_SOULBIND_FAILED = 0x3019, + SMSG_ACTIVATE_TAXI_REPLY = 0x2681, SMSG_ACTIVE_GLYPHS = 0x2C56, - SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x2745, - SMSG_ADDON_LIST_REQUEST = 0x2641, - SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x263C, - SMSG_ADD_ITEM_PASSIVE = 0x25AB, - SMSG_ADD_LOSS_OF_CONTROL = 0x2672, - SMSG_ADD_RUNE_POWER = 0x26B8, - SMSG_ADJUST_SPLINE_DURATION = 0x25D1, - SMSG_ADVANCED_COMBAT_LOG = 0x2875, - SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x286F, - SMSG_AE_LOOT_TARGETS = 0x2617, - SMSG_AE_LOOT_TARGET_ACK = 0x2618, - SMSG_AI_REACTION = 0x26B5, - SMSG_ALLIED_RACE_DETAILS = 0x27F3, + SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x2748, + SMSG_ADDON_LIST_REQUEST = 0x2643, + SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x263E, + SMSG_ADD_ITEM_PASSIVE = 0x25AD, + SMSG_ADD_LOSS_OF_CONTROL = 0x2674, + SMSG_ADD_RUNE_POWER = 0x26BB, + SMSG_ADJUST_SPLINE_DURATION = 0x25D3, + SMSG_ADVANCED_COMBAT_LOG = 0x2860, + SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x285B, + SMSG_AE_LOOT_TARGETS = 0x2619, + SMSG_AE_LOOT_TARGET_ACK = 0x261A, + SMSG_AI_REACTION = 0x26B8, + SMSG_ALLIED_RACE_DETAILS = 0x27F6, SMSG_ALL_ACCOUNT_CRITERIA = 0x2571, SMSG_ALL_ACHIEVEMENT_DATA = 0x2570, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8, - SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x284C, - SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2587, + SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x2839, + SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2589, SMSG_AREA_POI_UPDATE_RESPONSE = 0x3010, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x273E, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x2741, SMSG_AREA_TRIGGER_DENIED = 0x2903, SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x2900, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x2715, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x2718, SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x28FE, SMSG_AREA_TRIGGER_RE_PATH = 0x28FD, SMSG_AREA_TRIGGER_RE_SHAPE = 0x2902, SMSG_AREA_TRIGGER_UNATTACH = 0x2901, SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES = 0x28FF, - SMSG_ARENA_CLEAR_OPPONENTS = 0x2648, - SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x2631, - SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2647, - SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x279F, - SMSG_ARTIFACT_FORGE_ERROR = 0x279D, - SMSG_ARTIFACT_RESPEC_PROMPT = 0x279E, - SMSG_ARTIFACT_XP_GAIN = 0x27E6, + SMSG_ARENA_CLEAR_OPPONENTS = 0x264A, + SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x2633, + SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2649, + SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x27A2, + SMSG_ARTIFACT_FORGE_ERROR = 0x27A0, + SMSG_ARTIFACT_RESPEC_PROMPT = 0x27A1, + SMSG_ARTIFACT_XP_GAIN = 0x27E9, SMSG_ATTACKER_STATE_UPDATE = 0x294E, SMSG_ATTACK_START = 0x2939, SMSG_ATTACK_STOP = 0x293A, SMSG_ATTACK_SWING_ERROR = 0x2948, SMSG_ATTACK_SWING_LANDED_LOG = 0x2949, - SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27CF, - SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27CE, - SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27CD, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26F2, - SMSG_AUCTION_COMMAND_RESULT = 0x26EF, - SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x2896, - SMSG_AUCTION_FAVORITE_LIST = 0x2866, - SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x285D, - SMSG_AUCTION_HELLO_RESPONSE = 0x26ED, - SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x285C, - SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2859, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x285A, - SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x285B, - SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26F1, - SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26F3, - SMSG_AUCTION_REPLICATE_RESPONSE = 0x26EE, - SMSG_AUCTION_WON_NOTIFICATION = 0x26F0, + SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27D2, + SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27D1, + SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27D0, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26F5, + SMSG_AUCTION_COMMAND_RESULT = 0x26F2, + SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x287F, + SMSG_AUCTION_FAVORITE_LIST = 0x2852, + SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x284A, + SMSG_AUCTION_HELLO_RESPONSE = 0x26F0, + SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x2849, + SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2846, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2847, + SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2848, + SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26F4, + SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26F6, + SMSG_AUCTION_REPLICATE_RESPONSE = 0x26F1, + SMSG_AUCTION_WON_NOTIFICATION = 0x26F3, SMSG_AURA_POINTS_DEPLETED = 0x2C22, SMSG_AURA_UPDATE = 0x2C21, SMSG_AUTH_CHALLENGE = 0x3048, SMSG_AUTH_FAILED = 0x256C, SMSG_AUTH_RESPONSE = 0x256D, SMSG_AVAILABLE_HOTFIXES = 0x290F, - SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x289B, + SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x2880, SMSG_BAG_CLEANUP_FINISHED = 0x2DA7, - SMSG_BARBER_SHOP_RESULT = 0x26BD, - SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x283D, + SMSG_BARBER_SHOP_RESULT = 0x26C0, + SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x282A, SMSG_BATTLEFIELD_LIST = 0x2927, SMSG_BATTLEFIELD_PORT_DENIED = 0x292D, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2923, @@ -1017,117 +1031,119 @@ enum OpcodeServer : uint16 SMSG_BATTLEGROUND_PLAYER_LEFT = 0x292C, SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2928, SMSG_BATTLEGROUND_POINTS = 0x294A, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x2787, - SMSG_BATTLENET_CHALLENGE_START = 0x2786, - SMSG_BATTLENET_NOTIFICATION = 0x27FF, - SMSG_BATTLENET_RESPONSE = 0x27FE, - SMSG_BATTLE_NET_CONNECTION_STATUS = 0x2800, - SMSG_BATTLE_PAY_ACK_FAILED = 0x2782, - SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x2777, - SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x2778, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x2781, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2775, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2774, - SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x287E, - SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2772, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2773, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x2771, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x276F, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x2770, - SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2776, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x2780, - SMSG_BATTLE_PAY_START_CHECKOUT = 0x281B, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x277E, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x277D, - SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x280F, - SMSG_BATTLE_PETS_HEALED = 0x25F3, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2679, - SMSG_BATTLE_PET_DELETED = 0x25F0, - SMSG_BATTLE_PET_ERROR = 0x2637, - SMSG_BATTLE_PET_JOURNAL = 0x25EF, - SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25ED, - SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25EE, - SMSG_BATTLE_PET_RESTORED = 0x25F2, - SMSG_BATTLE_PET_REVOKED = 0x25F1, - SMSG_BATTLE_PET_TRAP_LEVEL = 0x25EB, - SMSG_BATTLE_PET_UPDATES = 0x25EA, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x278A, + SMSG_BATTLENET_CHALLENGE_START = 0x2789, + SMSG_BATTLENET_NOTIFICATION = 0x2802, + SMSG_BATTLENET_RESPONSE = 0x2801, + SMSG_BATTLE_NET_CONNECTION_STATUS = 0x2803, + SMSG_BATTLE_PAY_ACK_FAILED = 0x2785, + SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x277A, + SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x277B, + SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x2784, + SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2778, + SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2777, + SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x2869, + SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2775, + SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2776, + SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x2774, + SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x2772, + SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x2773, + SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2779, + SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x2783, + SMSG_BATTLE_PAY_START_CHECKOUT = 0x281E, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2781, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2780, + SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2812, + SMSG_BATTLE_PETS_HEALED = 0x25F5, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x267C, + SMSG_BATTLE_PET_DELETED = 0x25F2, + SMSG_BATTLE_PET_ERROR = 0x2639, + SMSG_BATTLE_PET_JOURNAL = 0x25F1, + SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25EF, + SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25F0, + SMSG_BATTLE_PET_RESTORED = 0x25F4, + SMSG_BATTLE_PET_REVOKED = 0x25F3, + SMSG_BATTLE_PET_TRAP_LEVEL = 0x25ED, + SMSG_BATTLE_PET_UPDATES = 0x25EC, SMSG_BIND_POINT_UPDATE = 0x257D, - SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2627, - SMSG_BLACK_MARKET_OUTBID = 0x2628, - SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2626, - SMSG_BLACK_MARKET_WON = 0x2629, - SMSG_BONUS_ROLL_EMPTY = 0x2644, + SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2629, + SMSG_BLACK_MARKET_OUTBID = 0x262A, + SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2628, + SMSG_BLACK_MARKET_WON = 0x262B, + SMSG_BONUS_ROLL_EMPTY = 0x2646, SMSG_BOSS_KILL = 0x294D, SMSG_BREAK_TARGET = 0x2938, SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC, - SMSG_BROADCAST_SUMMON_CAST = 0x283F, - SMSG_BROADCAST_SUMMON_RESPONSE = 0x2840, - SMSG_BUY_FAILED = 0x26C6, - SMSG_BUY_SUCCEEDED = 0x26C5, + SMSG_BROADCAST_SUMMON_CAST = 0x282C, + SMSG_BROADCAST_SUMMON_RESPONSE = 0x282D, + SMSG_BUY_FAILED = 0x26C9, + SMSG_BUY_SUCCEEDED = 0x26C8, SMSG_CACHE_INFO = 0x291D, SMSG_CACHE_VERSION = 0x291C, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x269E, - SMSG_CALENDAR_COMMAND_RESULT = 0x269F, - SMSG_CALENDAR_COMMUNITY_INVITE = 0x268E, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2696, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x2697, - SMSG_CALENDAR_INVITE_ADDED = 0x268F, - SMSG_CALENDAR_INVITE_ALERT = 0x2693, - SMSG_CALENDAR_INVITE_NOTES = 0x2698, - SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2699, - SMSG_CALENDAR_INVITE_REMOVED = 0x2690, - SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2695, - SMSG_CALENDAR_INVITE_STATUS = 0x2691, - SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2694, - SMSG_CALENDAR_MODERATOR_STATUS = 0x2692, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x269A, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x269B, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x269C, - SMSG_CALENDAR_SEND_CALENDAR = 0x268C, - SMSG_CALENDAR_SEND_EVENT = 0x268D, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x269D, - SMSG_CAMERA_EFFECT = 0x2724, - SMSG_CANCEL_AUTO_REPEAT = 0x26DD, + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26A1, + SMSG_CALENDAR_COMMAND_RESULT = 0x26A2, + SMSG_CALENDAR_COMMUNITY_INVITE = 0x2691, + SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2699, + SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x269A, + SMSG_CALENDAR_INVITE_ADDED = 0x2692, + SMSG_CALENDAR_INVITE_ALERT = 0x2696, + SMSG_CALENDAR_INVITE_NOTES = 0x269B, + SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x269C, + SMSG_CALENDAR_INVITE_REMOVED = 0x2693, + SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2698, + SMSG_CALENDAR_INVITE_STATUS = 0x2694, + SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2697, + SMSG_CALENDAR_MODERATOR_STATUS = 0x2695, + SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x269D, + SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x269E, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x269F, + SMSG_CALENDAR_SEND_CALENDAR = 0x268F, + SMSG_CALENDAR_SEND_EVENT = 0x2690, + SMSG_CALENDAR_SEND_NUM_PENDING = 0x26A0, + SMSG_CAMERA_EFFECT = 0x2727, + SMSG_CANCEL_AUTO_REPEAT = 0x26E0, SMSG_CANCEL_COMBAT = 0x2947, SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C48, - SMSG_CANCEL_PING_PIN = 0x25A4, - SMSG_CANCEL_PRELOAD_WORLD = 0x2597, - SMSG_CANCEL_SCENE = 0x2636, + SMSG_CANCEL_PING_PIN = 0x25A6, + SMSG_CANCEL_PRELOAD_WORLD = 0x2599, + SMSG_CANCEL_SCENE = 0x2638, SMSG_CANCEL_SPELL_VISUAL = 0x2C46, SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C4A, SMSG_CAN_DUEL_RESULT = 0x2943, - SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x280E, + SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x2811, SMSG_CAPTURE_POINT_REMOVED = 0x292A, SMSG_CAST_FAILED = 0x2C59, - SMSG_CHAIN_MISSILE_BOUNCE = 0x25C9, - SMSG_CHALLENGE_MODE_COMPLETE = 0x260A, - SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x260F, - SMSG_CHALLENGE_MODE_RESET = 0x2609, - SMSG_CHALLENGE_MODE_START = 0x2607, - SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2608, + SMSG_CAS_REFRESH_REMOTE_DATA = 0x267A, + SMSG_CHAIN_MISSILE_BOUNCE = 0x25CB, + SMSG_CHALLENGE_MODE_COMPLETE = 0x260C, + SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2611, + SMSG_CHALLENGE_MODE_RESET = 0x260B, + SMSG_CHALLENGE_MODE_START = 0x2609, + SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x260A, SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x3004, - SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x2801, + SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x2804, SMSG_CHANNEL_LIST = 0x2BC4, SMSG_CHANNEL_NOTIFY = 0x2BC1, SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC2, SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC3, - SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27BA, - SMSG_CHARACTER_LOGIN_FAILED = 0x2704, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2785, - SMSG_CHARACTER_RENAME_RESULT = 0x2761, - SMSG_CHARACTER_UPGRADE_ABORTED = 0x27B9, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B8, - SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27BB, - SMSG_CHARACTER_UPGRADE_STARTED = 0x27B7, - SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26E1, - SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26E2, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A4, + SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27BD, + SMSG_CHARACTER_LOGIN_FAILED = 0x2707, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2788, + SMSG_CHARACTER_RENAME_RESULT = 0x2764, + SMSG_CHARACTER_UPGRADE_ABORTED = 0x27BC, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27BB, + SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27BE, + SMSG_CHARACTER_UPGRADE_STARTED = 0x27BA, + SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26E4, + SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26E5, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A7, SMSG_CHAT = 0x2BAD, SMSG_CHAT_AUTO_RESPONDED = 0x2BB8, SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x2BCB, SMSG_CHAT_DOWN = 0x2BBE, SMSG_CHAT_IGNORED_ACCOUNT_MUTED = 0x2BAC, SMSG_CHAT_IS_DOWN = 0x2BBF, + SMSG_CHAT_NOT_IN_GUILD = 0x2BCC, SMSG_CHAT_NOT_IN_PARTY = 0x2BB2, SMSG_CHAT_PLAYER_AMBIGUOUS = 0x2BB0, SMSG_CHAT_PLAYER_NOTFOUND = 0x2BB7, @@ -1136,99 +1152,102 @@ enum OpcodeServer : uint16 SMSG_CHAT_RESTRICTED = 0x2BB3, SMSG_CHAT_SERVER_MESSAGE = 0x2BC5, SMSG_CHEAT_IGNORE_DIMISHING_RETURNS = 0x2C12, - SMSG_CHECK_ABANDON_NPE = 0x3018, - SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x2585, - SMSG_CHECK_WARGAME_ENTRY = 0x2591, - SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2869, - SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x2850, + SMSG_CHECK_ABANDON_NPE = 0x301A, + SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x2587, + SMSG_CHECK_WARGAME_ENTRY = 0x2593, + SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2855, + SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x283D, SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C26, - SMSG_CLEAR_BOSS_EMOTES = 0x25BC, - SMSG_CLEAR_COOLDOWN = 0x26BA, + SMSG_CLEAR_BOSS_EMOTES = 0x25BE, + SMSG_CLEAR_COOLDOWN = 0x26BD, SMSG_CLEAR_COOLDOWNS = 0x2C25, SMSG_CLEAR_RESURRECT = 0x257F, SMSG_CLEAR_SPELL_CHARGES = 0x2C27, SMSG_CLEAR_TARGET = 0x2944, - SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA1, - SMSG_CLOSE_ARTIFACT_FORGE = 0x279C, - SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2848, - SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x284B, - SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2849, - SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2846, - SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x284A, - SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2847, - SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x288C, - SMSG_COIN_REMOVED = 0x2616, + SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA2, + SMSG_CLOSE_ARTIFACT_FORGE = 0x279F, + SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2835, + SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2838, + SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2836, + SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2833, + SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2837, + SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2834, + SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x2875, + SMSG_COIN_REMOVED = 0x2618, SMSG_COMBAT_EVENT_FAILED = 0x293B, - SMSG_COMMENTATOR_MAP_INFO = 0x2706, - SMSG_COMMENTATOR_PLAYER_INFO = 0x2707, - SMSG_COMMENTATOR_STATE_CHANGED = 0x2705, - SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27CA, - SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27D6, - SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27CC, - SMSG_COMMERCE_TOKEN_UPDATE = 0x27CB, - SMSG_COMPLAINT_RESULT = 0x26AC, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2795, - SMSG_CONFIRM_PARTY_INVITE = 0x280D, + SMSG_COMMENTATOR_MAP_INFO = 0x2709, + SMSG_COMMENTATOR_PLAYER_INFO = 0x270A, + SMSG_COMMENTATOR_STATE_CHANGED = 0x2708, + SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27CD, + SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27D9, + SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27CF, + SMSG_COMMERCE_TOKEN_UPDATE = 0x27CE, + SMSG_COMPLAINT_RESULT = 0x26AF, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2798, + SMSG_CONFIRM_PARTY_INVITE = 0x2810, SMSG_CONNECT_TO = 0x304D, - SMSG_CONSOLE_WRITE = 0x2634, - SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27D2, - SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27D1, - SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27D0, - SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27D4, - SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27D5, - SMSG_CONTACT_LIST = 0x2783, - SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2814, - SMSG_CONTROL_UPDATE = 0x2646, - SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x2872, - SMSG_COOLDOWN_CHEAT = 0x2737, - SMSG_COOLDOWN_EVENT = 0x26B9, - SMSG_CORPSE_LOCATION = 0x264E, - SMSG_CORPSE_RECLAIM_DELAY = 0x2748, - SMSG_CORPSE_TRANSPORT_QUERY = 0x2711, - SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA3, - SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F6, - SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x2873, - SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x28A9, - SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x28A5, - SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x28A1, - SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x28A3, - SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x289F, - SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x28A4, - SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x28A0, - SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x28A7, - SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x28A2, - SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x28AA, - SMSG_CRAFT_ENCHANT_RESULT = 0x28A8, - SMSG_CREATE_CHAR = 0x2700, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x2794, - SMSG_CREATOR_VISUALS_OVERRIDE = 0x28AD, - SMSG_CRITERIA_DELETED = 0x26E6, - SMSG_CRITERIA_UPDATE = 0x26E0, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26C1, - SMSG_CUSTOM_LOAD_SCREEN = 0x25CC, + SMSG_CONSOLE_WRITE = 0x2636, + SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27D5, + SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27D4, + SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27D3, + SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27D7, + SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27D8, + SMSG_CONTACT_LIST = 0x2786, + SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2817, + SMSG_CONTROL_UPDATE = 0x2648, + SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x285E, + SMSG_COOLDOWN_CHEAT = 0x273A, + SMSG_COOLDOWN_EVENT = 0x26BC, + SMSG_CORPSE_LOCATION = 0x2650, + SMSG_CORPSE_RECLAIM_DELAY = 0x274B, + SMSG_CORPSE_TRANSPORT_QUERY = 0x2714, + SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA4, + SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F9, + SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x285F, + SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x288C, + SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x2888, + SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x2884, + SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x2886, + SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x2882, + SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x2887, + SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x2883, + SMSG_CRAFTING_ORDER_NPC_REWARD_INFO = 0x288E, + SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x288A, + SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x2885, + SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x288D, + SMSG_CRAFT_ENCHANT_RESULT = 0x288B, + SMSG_CREATE_CHAR = 0x2703, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x2797, + SMSG_CREATOR_VISUALS_OVERRIDE = 0x2891, + SMSG_CRITERIA_DELETED = 0x26E9, + SMSG_CRITERIA_UPDATE = 0x26E3, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26C4, + SMSG_CURRENCY_TRANSFER_LOG = 0x28A3, + SMSG_CURRENCY_TRANSFER_RESULT = 0x28A2, + SMSG_CUSTOM_LOAD_SCREEN = 0x25CE, SMSG_DAILY_QUESTS_RESET = 0x2A80, SMSG_DAMAGE_CALC_LOG = 0x2C65, SMSG_DB_REPLY = 0x290E, - SMSG_DEATH_RELEASE_LOC = 0x26D3, - SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2656, + SMSG_DEATH_RELEASE_LOC = 0x26D6, + SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2658, SMSG_DEFENSE_MESSAGE = 0x2BB6, - SMSG_DELETE_CHAR = 0x2701, + SMSG_DELETE_CHAR = 0x2704, SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x2980, - SMSG_DESTROY_ARENA_UNIT = 0x2740, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26F8, - SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258A, - SMSG_DISENCHANT_CREDIT = 0x25A8, + SMSG_DESTROY_ARENA_UNIT = 0x2743, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26FB, + SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258C, + SMSG_DISENCHANT_CREDIT = 0x25AA, SMSG_DISMOUNT_RESULT = 0x257C, SMSG_DISPEL_FAILED = 0x2C2F, - SMSG_DISPLAY_GAME_ERROR = 0x259E, + SMSG_DISPLAY_GAME_ERROR = 0x25A0, SMSG_DISPLAY_PLAYER_CHOICE = 0x2FFC, - SMSG_DISPLAY_PROMOTION = 0x264B, + SMSG_DISPLAY_PROMOTION = 0x264D, SMSG_DISPLAY_QUEST_POPUP = 0x2A9E, - SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2877, - SMSG_DISPLAY_TOAST = 0x2623, - SMSG_DISPLAY_WORLD_TEXT = 0x27E7, + SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2862, + SMSG_DISPLAY_TOAST = 0x2625, + SMSG_DISPLAY_WORLD_TEXT = 0x27EA, SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x2C64, - SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25E1, + SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25E3, SMSG_DROP_NEW_CONNECTION = 0x304C, SMSG_DUEL_ARRANGED = 0x293D, SMSG_DUEL_COMPLETE = 0x2941, @@ -1237,53 +1256,53 @@ enum OpcodeServer : uint16 SMSG_DUEL_OUT_OF_BOUNDS = 0x293E, SMSG_DUEL_REQUESTED = 0x293C, SMSG_DUEL_WINNER = 0x2942, - SMSG_DURABILITY_DAMAGE_DEATH = 0x2743, - SMSG_EMOTE = 0x27C1, - SMSG_ENABLE_BARBER_SHOP = 0x26BC, - SMSG_ENCHANTMENT_LOG = 0x2712, - SMSG_ENCOUNTER_END = 0x277C, - SMSG_ENCOUNTER_START = 0x277B, - SMSG_END_LIGHTNING_STORM = 0x26A9, - SMSG_ENSURE_WORLD_LOADED = 0x2886, + SMSG_DURABILITY_DAMAGE_DEATH = 0x2746, + SMSG_EMOTE = 0x27C4, + SMSG_ENABLE_BARBER_SHOP = 0x26BF, + SMSG_ENCHANTMENT_LOG = 0x2715, + SMSG_ENCOUNTER_END = 0x277F, + SMSG_ENCOUNTER_START = 0x277E, + SMSG_END_LIGHTNING_STORM = 0x26AC, SMSG_ENTER_ENCRYPTED_MODE = 0x3049, SMSG_ENUM_CHARACTERS_RESULT = 0x2584, - SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27EC, + SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27EF, SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C1E, - SMSG_EQUIPMENT_SET_ID = 0x26B2, + SMSG_EQUIPMENT_SET_ID = 0x26B5, SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1, - SMSG_EXPLORATION_EXPERIENCE = 0x275D, - SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x2870, - SMSG_FACTION_BONUS_INFO = 0x2723, + SMSG_EXPLORATION_EXPERIENCE = 0x2760, + SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x285C, + SMSG_FACTION_BONUS_INFO = 0x2726, SMSG_FAILED_PLAYER_CONDITION = 0x2FFA, - SMSG_FAILED_QUEST_TURN_IN = 0x280A, - SMSG_FEATURE_SYSTEM_STATUS = 0x25C0, - SMSG_FEATURE_SYSTEM_STATUS2 = 0x28C1, - SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25C1, - SMSG_FEIGN_DEATH_RESISTED = 0x2742, - SMSG_FISH_ESCAPED = 0x26D0, - SMSG_FISH_NOT_HOOKED = 0x26CF, - SMSG_FLIGHT_SPLINE_SYNC = 0x2E2B, + SMSG_FAILED_QUEST_TURN_IN = 0x280D, + SMSG_FEATURE_SYSTEM_STATUS = 0x25C2, + SMSG_FEATURE_SYSTEM_STATUS2 = 0x28A0, + SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25C3, + SMSG_FEIGN_DEATH_RESISTED = 0x2745, + SMSG_FISH_ESCAPED = 0x26D3, + SMSG_FISH_NOT_HOOKED = 0x26D2, + SMSG_FLIGHT_SPLINE_SYNC = 0x2E2D, SMSG_FLUSH_COMBAT_LOG_FILE = 0x2C20, - SMSG_FORCED_DEATH_UPDATE = 0x26D4, - SMSG_FORCE_ANIM = 0x274F, - SMSG_FORCE_ANIMATIONS = 0x2750, - SMSG_FORCE_OBJECT_RELINK = 0x264A, - SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x25B3, - SMSG_FRIEND_STATUS = 0x2784, - SMSG_GAIN_MAW_POWER = 0x27DB, - SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25C4, - SMSG_GAME_OBJECT_BASE = 0x2821, - SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x288A, - SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C5, - SMSG_GAME_OBJECT_DESPAWN = 0x25C6, - SMSG_GAME_OBJECT_INTERACTION = 0x2889, + SMSG_FORCED_DEATH_UPDATE = 0x26D7, + SMSG_FORCE_ANIM = 0x2752, + SMSG_FORCE_ANIMATIONS = 0x2753, + SMSG_FORCE_OBJECT_RELINK = 0x264C, + SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x25B5, + SMSG_FORCE_SPAWN_TRACKING_UPDATE = 0x2AA1, + SMSG_FRIEND_STATUS = 0x2787, + SMSG_GAIN_MAW_POWER = 0x27DE, + SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25C6, + SMSG_GAME_OBJECT_BASE = 0x2824, + SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x2874, + SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C7, + SMSG_GAME_OBJECT_DESPAWN = 0x25C8, + SMSG_GAME_OBJECT_INTERACTION = 0x2873, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4D, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4C, - SMSG_GAME_OBJECT_RESET_STATE = 0x271D, - SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27FD, - SMSG_GAME_SPEED_SET = 0x2682, - SMSG_GAME_TIME_SET = 0x270B, - SMSG_GAME_TIME_UPDATE = 0x270A, + SMSG_GAME_OBJECT_RESET_STATE = 0x2720, + SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x2800, + SMSG_GAME_SPEED_SET = 0x2685, + SMSG_GAME_TIME_SET = 0x270E, + SMSG_GAME_TIME_UPDATE = 0x270D, SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x2982, SMSG_GARRISON_ADD_EVENT = 0x29A6, SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2974, @@ -1354,37 +1373,37 @@ enum OpcodeServer : uint16 SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT = 0x29AE, SMSG_GARRISON_UPGRADE_RESULT = 0x296B, SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x297D, - SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2586, - SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2815, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275F, + SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2588, + SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2818, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2762, SMSG_GET_GARRISON_INFO_RESULT = 0x295E, - SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x2797, - SMSG_GET_REALM_HIDDEN_RESULT = 0x28BB, - SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D3, - SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27BF, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2796, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2792, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x27BE, - SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27E8, - SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27E9, + SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x279A, + SMSG_GET_REALM_HIDDEN_RESULT = 0x2897, + SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D6, + SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27C2, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2799, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2795, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x27C1, + SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27EB, + SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27EC, SMSG_GM_PLAYER_INFO = 0x3005, SMSG_GM_REQUEST_PLAYER_INFO = 0x2FFB, - SMSG_GM_TICKET_CASE_STATUS = 0x26A4, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x26A3, - SMSG_GOD_MODE = 0x26FB, + SMSG_GM_TICKET_CASE_STATUS = 0x26A7, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x26A6, + SMSG_GOD_MODE = 0x26FE, SMSG_GOSSIP_COMPLETE = 0x2A97, SMSG_GOSSIP_MESSAGE = 0x2A98, - SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x2AA7, - SMSG_GOSSIP_POI = 0x278F, + SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x2AA8, + SMSG_GOSSIP_POI = 0x2792, SMSG_GOSSIP_QUEST_UPDATE = 0x2A99, - SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA6, - SMSG_GROUP_ACTION_THROTTLED = 0x258E, - SMSG_GROUP_AUTO_KICK = 0x278C, - SMSG_GROUP_DECLINE = 0x2788, - SMSG_GROUP_DESTROYED = 0x278B, - SMSG_GROUP_NEW_LEADER = 0x262C, - SMSG_GROUP_REQUEST_DECLINE = 0x2789, - SMSG_GROUP_UNINVITE = 0x278A, + SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA7, + SMSG_GROUP_ACTION_THROTTLED = 0x2590, + SMSG_GROUP_AUTO_KICK = 0x278F, + SMSG_GROUP_DECLINE = 0x278B, + SMSG_GROUP_DESTROYED = 0x278E, + SMSG_GROUP_NEW_LEADER = 0x262E, + SMSG_GROUP_REQUEST_DECLINE = 0x278C, + SMSG_GROUP_UNINVITE = 0x278D, SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C6, SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C5, SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C8, @@ -1415,6 +1434,7 @@ enum OpcodeServer : uint16 SMSG_GUILD_EVENT_TAB_MODIFIED = 0x29F6, SMSG_GUILD_EVENT_TAB_TEXT_CHANGED = 0x29F7, SMSG_GUILD_FLAGGED_FOR_RENAME = 0x29DD, + SMSG_GUILD_HARDCORE_MEMBER_DEATH = 0x29BD, SMSG_GUILD_INVITE = 0x29CB, SMSG_GUILD_INVITE_DECLINED = 0x29E9, SMSG_GUILD_INVITE_EXPIRED = 0x29EA, @@ -1438,59 +1458,60 @@ enum OpcodeServer : uint16 SMSG_GUILD_ROSTER = 0x29BB, SMSG_GUILD_ROSTER_UPDATE = 0x29BC, SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9, - SMSG_HEALTH_UPDATE = 0x26D1, - SMSG_HIGHEST_THREAT_UPDATE = 0x26D9, + SMSG_HARDCORE_DEATH_ALERT = 0x289F, + SMSG_HEALTH_UPDATE = 0x26D4, + SMSG_HIGHEST_THREAT_UPDATE = 0x26DC, SMSG_HOTFIX_CONNECT = 0x2911, SMSG_HOTFIX_MESSAGE = 0x2910, - SMSG_INITIALIZE_FACTIONS = 0x2722, + SMSG_INITIALIZE_FACTIONS = 0x2725, SMSG_INITIAL_SETUP = 0x2580, - SMSG_INIT_WORLD_STATES = 0x2744, - SMSG_INSPECT_RESULT = 0x2630, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27AA, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27A9, - SMSG_INSTANCE_ENCOUNTER_END = 0x27B2, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A8, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B4, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B3, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27AD, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27AC, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27B1, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B5, - SMSG_INSTANCE_ENCOUNTER_START = 0x27AE, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27AB, - SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27B0, - SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27AF, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F9, - SMSG_INSTANCE_INFO = 0x2633, - SMSG_INSTANCE_RESET = 0x2687, - SMSG_INSTANCE_RESET_FAILED = 0x2688, - SMSG_INSTANCE_SAVE_CREATED = 0x277A, + SMSG_INIT_WORLD_STATES = 0x2747, + SMSG_INSPECT_RESULT = 0x2632, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27AD, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27AC, + SMSG_INSTANCE_ENCOUNTER_END = 0x27B5, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27AB, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B7, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B6, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27B0, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27AF, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27B4, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B8, + SMSG_INSTANCE_ENCOUNTER_START = 0x27B1, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27AE, + SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27B3, + SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27B2, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26FC, + SMSG_INSTANCE_INFO = 0x2635, + SMSG_INSTANCE_RESET = 0x268A, + SMSG_INSTANCE_RESET_FAILED = 0x268B, + SMSG_INSTANCE_SAVE_CREATED = 0x277D, SMSG_INTERRUPT_POWER_REGEN = 0x2C5B, SMSG_INVALIDATE_PAGE_TEXT = 0x2918, SMSG_INVALIDATE_PLAYER = 0x2FFF, - SMSG_INVALID_PROMOTION_CODE = 0x2751, + SMSG_INVALID_PROMOTION_CODE = 0x2754, SMSG_INVENTORY_CHANGE_FAILURE = 0x2DA5, - SMSG_INVENTORY_FIXUP_COMPLETE = 0x280C, - SMSG_INVENTORY_FULL_OVERFLOW = 0x281D, - SMSG_ISLAND_AZERITE_GAIN = 0x275A, - SMSG_ISLAND_COMPLETE = 0x275B, + SMSG_INVENTORY_FIXUP_COMPLETE = 0x280F, + SMSG_INVENTORY_FULL_OVERFLOW = 0x2820, + SMSG_ISLAND_AZERITE_GAIN = 0x275D, + SMSG_ISLAND_COMPLETE = 0x275E, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A84, - SMSG_ITEM_CHANGED = 0x26EA, - SMSG_ITEM_COOLDOWN = 0x27C0, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2753, - SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x259D, - SMSG_ITEM_INTERACTION_COMPLETE = 0x2868, - SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x259B, - SMSG_ITEM_PUSH_RESULT = 0x2622, - SMSG_ITEM_TIME_UPDATE = 0x2752, - SMSG_KICK_REASON = 0x268A, - SMSG_LATENCY_REPORT_PING = 0x287A, + SMSG_ITEM_CHANGED = 0x26ED, + SMSG_ITEM_COOLDOWN = 0x27C3, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2756, + SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x259F, + SMSG_ITEM_INTERACTION_COMPLETE = 0x2854, + SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x259D, + SMSG_ITEM_PUSH_RESULT = 0x2624, + SMSG_ITEM_TIME_UPDATE = 0x2755, + SMSG_KICK_REASON = 0x268D, + SMSG_LATENCY_REPORT_PING = 0x2865, SMSG_LEARNED_SPELLS = 0x2C4F, - SMSG_LEARN_PVP_TALENT_FAILED = 0x25D5, - SMSG_LEARN_TALENT_FAILED = 0x25D4, - SMSG_LEGACY_LOOT_RULES = 0x2822, - SMSG_LEVEL_LINKING_RESULT = 0x284E, - SMSG_LEVEL_UP_INFO = 0x26E8, + SMSG_LEARN_PVP_TALENT_FAILED = 0x25D7, + SMSG_LEARN_TALENT_FAILED = 0x25D6, + SMSG_LEGACY_LOOT_RULES = 0x2825, + SMSG_LEVEL_LINKING_RESULT = 0x283B, + SMSG_LEVEL_UP_INFO = 0x26EB, SMSG_LFG_BOOT_PLAYER = 0x2A35, SMSG_LFG_DISABLED = 0x2A33, SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x2A3B, @@ -1518,89 +1539,91 @@ enum OpcodeServer : uint16 SMSG_LFG_SLOT_INVALID = 0x2A30, SMSG_LFG_TELEPORT_DENIED = 0x2A32, SMSG_LFG_UPDATE_STATUS = 0x2A24, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x276C, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x276B, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2760, - SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x276D, - SMSG_LOAD_CUF_PROFILES = 0x25BD, - SMSG_LOAD_EQUIPMENT_SET = 0x270D, - SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x288D, - SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x288E, - SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x288F, - SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x2890, - SMSG_LOGIN_SET_TIME_SPEED = 0x270C, - SMSG_LOGIN_VERIFY_WORLD = 0x2598, - SMSG_LOGOUT_CANCEL_ACK = 0x2686, - SMSG_LOGOUT_COMPLETE = 0x2685, - SMSG_LOGOUT_RESPONSE = 0x2684, - SMSG_LOG_XP_GAIN = 0x26E4, - SMSG_LOOT_ALL_PASSED = 0x2620, - SMSG_LOOT_LIST = 0x273F, - SMSG_LOOT_MONEY_NOTIFY = 0x261B, - SMSG_LOOT_RELEASE = 0x261A, - SMSG_LOOT_RELEASE_ALL = 0x2619, - SMSG_LOOT_REMOVED = 0x2615, - SMSG_LOOT_RESPONSE = 0x2614, - SMSG_LOOT_ROLL = 0x261D, - SMSG_LOOT_ROLLS_COMPLETE = 0x261F, - SMSG_LOOT_ROLL_WON = 0x2621, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2671, - SMSG_MAIL_COMMAND_RESULT = 0x263A, - SMSG_MAIL_LIST_RESULT = 0x2754, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2755, + SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x276F, + SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x276E, + SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2763, + SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2770, + SMSG_LOAD_CUF_PROFILES = 0x25BF, + SMSG_LOAD_EQUIPMENT_SET = 0x2710, + SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x2876, + SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x2877, + SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x2878, + SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x2879, + SMSG_LOGIN_SET_TIME_SPEED = 0x270F, + SMSG_LOGIN_VERIFY_WORLD = 0x259A, + SMSG_LOGOUT_CANCEL_ACK = 0x2689, + SMSG_LOGOUT_COMPLETE = 0x2688, + SMSG_LOGOUT_RESPONSE = 0x2687, + SMSG_LOG_XP_GAIN = 0x26E7, + SMSG_LOOT_ALL_PASSED = 0x2622, + SMSG_LOOT_LIST = 0x2742, + SMSG_LOOT_MONEY_NOTIFY = 0x261D, + SMSG_LOOT_RELEASE = 0x261C, + SMSG_LOOT_RELEASE_ALL = 0x261B, + SMSG_LOOT_REMOVED = 0x2617, + SMSG_LOOT_RESPONSE = 0x2616, + SMSG_LOOT_ROLL = 0x261F, + SMSG_LOOT_ROLLS_COMPLETE = 0x2621, + SMSG_LOOT_ROLL_WON = 0x2623, + SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2673, + SMSG_MAIL_COMMAND_RESULT = 0x263C, + SMSG_MAIL_LIST_RESULT = 0x2757, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2758, SMSG_MAP_OBJECTIVES_INIT = 0x294C, - SMSG_MAP_OBJ_EVENTS = 0x25C7, - SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x261E, - SMSG_MEETING_STONE_FAILED = 0x2891, + SMSG_MAP_OBJ_EVENTS = 0x25C9, + SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2620, + SMSG_MEETING_STONE_FAILED = 0x287A, SMSG_MESSAGE_BOX = 0x2576, - SMSG_MINIMAP_PING = 0x26CE, + SMSG_MINIMAP_PING = 0x26D1, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13, - SMSG_MISSILE_CANCEL = 0x25C8, - SMSG_MODIFY_COOLDOWN = 0x2762, + SMSG_MISSILE_CANCEL = 0x25CA, + SMSG_MODIFY_COOLDOWN = 0x2765, SMSG_MOUNT_RESULT = 0x257B, - SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x283E, - SMSG_MOVE_ADD_IMPULSE = 0x2E32, - SMSG_MOVE_APPLY_INERTIA = 0x2E2E, - SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E15, - SMSG_MOVE_DISABLE_COLLISION = 0x2E11, + SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x282B, + SMSG_MOVE_ADD_IMPULSE = 0x2E34, + SMSG_MOVE_APPLY_INERTIA = 0x2E30, + SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E17, + SMSG_MOVE_DISABLE_COLLISION = 0x2E13, 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 = 0x2E12, + SMSG_MOVE_DISABLE_FULL_SPEED_TURNING = 0x2E47, + SMSG_MOVE_DISABLE_GRAVITY = 0x2E0F, + SMSG_MOVE_DISABLE_INERTIA = 0x2E11, + SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x2E0E, + SMSG_MOVE_ENABLE_COLLISION = 0x2E14, 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_ENABLE_FULL_SPEED_TURNING = 0x2E46, + SMSG_MOVE_ENABLE_GRAVITY = 0x2E10, + SMSG_MOVE_ENABLE_INERTIA = 0x2E12, + SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x2E0D, SMSG_MOVE_KNOCK_BACK = 0x2E03, - SMSG_MOVE_REMOVE_INERTIA = 0x2E2F, - SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x2E16, + SMSG_MOVE_REMOVE_INERTIA = 0x2E31, + SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x2E18, SMSG_MOVE_ROOT = 0x2DF9, SMSG_MOVE_SET_ACTIVE_MOVER = 0x2DD5, - SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED = 0x2E3B, - SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION = 0x2E36, - SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE = 0x2E3C, - SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD = 0x2E39, - SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT = 0x2E3A, - SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT = 0x2E42, - SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT = 0x2E38, - SMSG_MOVE_SET_ADV_FLYING_MAX_VEL = 0x2E37, - SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION = 0x2E41, - SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN = 0x2E3D, - SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP = 0x2E3E, - SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION = 0x2E40, - SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD = 0x2E3F, - SMSG_MOVE_SET_CAN_ADV_FLY = 0x2E34, + SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED = 0x2E3D, + SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION = 0x2E38, + SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE = 0x2E3E, + SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD = 0x2E3B, + SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT = 0x2E3C, + SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT = 0x2E44, + SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT = 0x2E3A, + SMSG_MOVE_SET_ADV_FLYING_MAX_VEL = 0x2E39, + SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION = 0x2E43, + SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN = 0x2E3F, + SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP = 0x2E40, + SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION = 0x2E42, + SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD = 0x2E41, + SMSG_MOVE_SET_CAN_ADV_FLY = 0x2E36, SMSG_MOVE_SET_CAN_FLY = 0x2E05, - SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING = 0x2E07, - SMSG_MOVE_SET_COLLISION_HEIGHT = 0x2E13, - SMSG_MOVE_SET_COMPOUND_STATE = 0x2E17, + SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING = 0x2E09, + SMSG_MOVE_SET_COLLISION_HEIGHT = 0x2E15, + SMSG_MOVE_SET_COMPOUND_STATE = 0x2E19, SMSG_MOVE_SET_FEATHER_FALL = 0x2DFF, SMSG_MOVE_SET_FLIGHT_BACK_SPEED = 0x2DF5, SMSG_MOVE_SET_FLIGHT_SPEED = 0x2DF4, SMSG_MOVE_SET_HOVERING = 0x2E01, - SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES = 0x2E09, + SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES = 0x2E0B, SMSG_MOVE_SET_LAND_WALK = 0x2DFE, SMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x2DE6, SMSG_MOVE_SET_NORMAL_FALL = 0x2E00, @@ -1610,47 +1633,47 @@ 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 = 0x2E14, + SMSG_MOVE_SET_VEHICLE_REC_ID = 0x2E16, SMSG_MOVE_SET_WALK_SPEED = 0x2DF6, SMSG_MOVE_SET_WATER_WALK = 0x2DFB, - 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_SKIP_TIME = 0x2E1A, + SMSG_MOVE_SPLINE_DISABLE_COLLISION = 0x2E1F, + SMSG_MOVE_SPLINE_DISABLE_GRAVITY = 0x2E1D, + SMSG_MOVE_SPLINE_ENABLE_COLLISION = 0x2E20, + SMSG_MOVE_SPLINE_ENABLE_GRAVITY = 0x2E1E, + SMSG_MOVE_SPLINE_ROOT = 0x2E1B, + SMSG_MOVE_SPLINE_SET_FEATHER_FALL = 0x2E21, SMSG_MOVE_SPLINE_SET_FLIGHT_BACK_SPEED = 0x2DEC, SMSG_MOVE_SPLINE_SET_FLIGHT_SPEED = 0x2DEB, - 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_FLYING = 0x2E2B, + SMSG_MOVE_SPLINE_SET_HOVER = 0x2E23, + SMSG_MOVE_SPLINE_SET_LAND_WALK = 0x2E26, + SMSG_MOVE_SPLINE_SET_NORMAL_FALL = 0x2E22, SMSG_MOVE_SPLINE_SET_PITCH_RATE = 0x2DEF, SMSG_MOVE_SPLINE_SET_RUN_BACK_SPEED = 0x2DE8, - SMSG_MOVE_SPLINE_SET_RUN_MODE = 0x2E27, + SMSG_MOVE_SPLINE_SET_RUN_MODE = 0x2E29, 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 = 0x2E28, + SMSG_MOVE_SPLINE_SET_WALK_MODE = 0x2E2A, SMSG_MOVE_SPLINE_SET_WALK_SPEED = 0x2DED, - 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_SPLINE_SET_WATER_WALK = 0x2E25, + SMSG_MOVE_SPLINE_START_SWIM = 0x2E27, + SMSG_MOVE_SPLINE_STOP_SWIM = 0x2E28, + SMSG_MOVE_SPLINE_UNROOT = 0x2E1C, + SMSG_MOVE_SPLINE_UNSET_FLYING = 0x2E2C, + SMSG_MOVE_SPLINE_UNSET_HOVER = 0x2E24, SMSG_MOVE_TELEPORT = 0x2E04, SMSG_MOVE_UNROOT = 0x2DFA, - SMSG_MOVE_UNSET_CAN_ADV_FLY = 0x2E35, + SMSG_MOVE_UNSET_CAN_ADV_FLY = 0x2E37, SMSG_MOVE_UNSET_CAN_FLY = 0x2E06, - SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING = 0x2E08, + SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING = 0x2E0A, SMSG_MOVE_UNSET_HOVERING = 0x2E02, - SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x2E0A, + SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x2E0C, SMSG_MOVE_UPDATE = 0x2DE0, - SMSG_MOVE_UPDATE_ADD_IMPULSE = 0x2E33, - SMSG_MOVE_UPDATE_APPLY_INERTIA = 0x2E30, + SMSG_MOVE_UPDATE_ADD_IMPULSE = 0x2E35, + SMSG_MOVE_UPDATE_APPLY_INERTIA = 0x2E32, SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE = 0x2DE4, SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0x2DDF, SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0x2DDC, @@ -1658,7 +1681,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_INERTIA = 0x2E33, SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE = 0x2DE5, SMSG_MOVE_UPDATE_RUN_BACK_SPEED = 0x2DD7, SMSG_MOVE_UPDATE_RUN_SPEED = 0x2DD6, @@ -1667,121 +1690,121 @@ 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 = 0x27D8, - SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27D7, - SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x260B, - SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260D, - SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x2611, - SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260C, - SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25DC, - SMSG_NEW_DATA_BUILD = 0x28BA, - SMSG_NEW_TAXI_PATH = 0x267F, - SMSG_NEW_WORLD = 0x2595, + SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27DB, + SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27DA, + SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x260D, + SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260F, + SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x2613, + SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260E, + SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25DE, + SMSG_NEW_DATA_BUILD = 0x2896, + SMSG_NEW_TAXI_PATH = 0x2682, + SMSG_NEW_WORLD = 0x2597, SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C45, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26AB, - SMSG_NOTIFY_MONEY = 0x259A, - SMSG_NOTIFY_RECEIVED_MAIL = 0x263B, - SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2888, - SMSG_OFFER_PETITION_ERROR = 0x26B6, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E5, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26AE, + SMSG_NOTIFY_MONEY = 0x259C, + SMSG_NOTIFY_RECEIVED_MAIL = 0x263D, + SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2872, + SMSG_OFFER_PETITION_ERROR = 0x26B9, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E8, SMSG_ON_MONSTER_MOVE = 0x2DD4, - SMSG_OPEN_ARTIFACT_FORGE = 0x279B, + SMSG_OPEN_ARTIFACT_FORGE = 0x279E, SMSG_OPEN_CONTAINER = 0x2DA6, SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2793, - SMSG_OVERRIDE_LIGHT = 0x26BB, - SMSG_PAGE_TEXT = 0x2718, - SMSG_PARTY_COMMAND_RESULT = 0x278D, - SMSG_PARTY_INVITE = 0x25BE, - SMSG_PARTY_KILL_LOG = 0x2758, - SMSG_PARTY_MEMBER_FULL_STATE = 0x2757, - SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2756, - SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x286E, - SMSG_PARTY_UPDATE = 0x25F4, - SMSG_PAST_TIME_EVENTS = 0x25C3, - SMSG_PAUSE_MIRROR_TIMER = 0x270F, - SMSG_PENDING_RAID_LOCK = 0x26F7, - SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x2884, - SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x2880, - SMSG_PERKS_PROGRAM_DISABLED = 0x2885, - SMSG_PERKS_PROGRAM_RESULT = 0x2881, - SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x287F, - SMSG_PETITION_ALREADY_SIGNED = 0x25A0, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2796, + SMSG_OVERRIDE_LIGHT = 0x26BE, + SMSG_PAGE_TEXT = 0x271B, + SMSG_PARTY_COMMAND_RESULT = 0x2790, + SMSG_PARTY_INVITE = 0x25C0, + SMSG_PARTY_KILL_LOG = 0x275B, + SMSG_PARTY_MEMBER_FULL_STATE = 0x275A, + SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2759, + SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x285A, + SMSG_PARTY_UPDATE = 0x25F6, + SMSG_PAST_TIME_EVENTS = 0x25C5, + SMSG_PAUSE_MIRROR_TIMER = 0x2712, + SMSG_PENDING_RAID_LOCK = 0x26FA, + SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x286F, + SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x286B, + SMSG_PERKS_PROGRAM_DISABLED = 0x2870, + SMSG_PERKS_PROGRAM_RESULT = 0x286C, + SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x286A, + SMSG_PETITION_ALREADY_SIGNED = 0x25A2, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FB, - SMSG_PETITION_SHOW_LIST = 0x26BE, - SMSG_PETITION_SHOW_SIGNATURES = 0x26BF, - SMSG_PETITION_SIGN_RESULTS = 0x274A, - SMSG_PET_ACTION_FEEDBACK = 0x2747, - SMSG_PET_ACTION_SOUND = 0x26A1, - SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2602, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2676, - SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25FB, - SMSG_PET_BATTLE_FINAL_ROUND = 0x2600, - SMSG_PET_BATTLE_FINISHED = 0x2601, - SMSG_PET_BATTLE_FIRST_ROUND = 0x25FD, - SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25FC, - SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2603, - SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25FA, - SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2638, - SMSG_PET_BATTLE_QUEUE_STATUS = 0x2639, - SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25FF, - SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F9, - SMSG_PET_BATTLE_ROUND_RESULT = 0x25FE, - SMSG_PET_BATTLE_SLOT_UPDATES = 0x25EC, + SMSG_PETITION_SHOW_LIST = 0x26C1, + SMSG_PETITION_SHOW_SIGNATURES = 0x26C2, + SMSG_PETITION_SIGN_RESULTS = 0x274D, + SMSG_PET_ACTION_FEEDBACK = 0x274A, + SMSG_PET_ACTION_SOUND = 0x26A4, + SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2604, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2678, + SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25FD, + SMSG_PET_BATTLE_FINAL_ROUND = 0x2602, + SMSG_PET_BATTLE_FINISHED = 0x2603, + SMSG_PET_BATTLE_FIRST_ROUND = 0x25FF, + SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25FE, + SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2605, + SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25FC, + SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x263A, + SMSG_PET_BATTLE_QUEUE_STATUS = 0x263B, + SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2601, + SMSG_PET_BATTLE_REQUEST_FAILED = 0x25FB, + SMSG_PET_BATTLE_ROUND_RESULT = 0x2600, + SMSG_PET_BATTLE_SLOT_UPDATES = 0x25EE, SMSG_PET_CAST_FAILED = 0x2C5A, SMSG_PET_CLEAR_SPELLS = 0x2C23, - SMSG_PET_DISMISS_SOUND = 0x26A2, - SMSG_PET_GOD_MODE = 0x267C, - SMSG_PET_GUIDS = 0x2703, + SMSG_PET_DISMISS_SOUND = 0x26A5, + SMSG_PET_GOD_MODE = 0x267F, + SMSG_PET_GUIDS = 0x2706, SMSG_PET_LEARNED_SPELLS = 0x2C51, - SMSG_PET_MODE = 0x2589, - SMSG_PET_NAME_INVALID = 0x26C3, - SMSG_PET_NEWLY_TAMED = 0x2588, + SMSG_PET_MODE = 0x258B, + SMSG_PET_NAME_INVALID = 0x26C6, + SMSG_PET_NEWLY_TAMED = 0x258A, SMSG_PET_SPELLS_MESSAGE = 0x2C24, - SMSG_PET_STABLE_RESULT = 0x2594, - SMSG_PET_TAME_FAILURE = 0x26B3, + SMSG_PET_STABLE_RESULT = 0x2596, + SMSG_PET_TAME_FAILURE = 0x26B6, SMSG_PET_UNLEARNED_SPELLS = 0x2C52, SMSG_PHASE_SHIFT_CHANGE = 0x2578, - SMSG_PLAYED_TIME = 0x26D5, - SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT = 0x3022, - SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3014, - SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3013, - SMSG_PLAYER_BONUS_ROLL_FAILED = 0x3016, + SMSG_PLAYED_TIME = 0x26D8, + SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT = 0x3024, + SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3016, + SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3015, + SMSG_PLAYER_BONUS_ROLL_FAILED = 0x3018, SMSG_PLAYER_BOUND = 0x2FF8, SMSG_PLAYER_CHOICE_CLEAR = 0x2FFE, SMSG_PLAYER_CHOICE_DISPLAY_ERROR = 0x2FFD, SMSG_PLAYER_CONDITION_RESULT = 0x300A, - SMSG_PLAYER_HIDE_ARROW_CALLOUT = 0x3021, + SMSG_PLAYER_HIDE_ARROW_CALLOUT = 0x3023, SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x3009, SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x300E, SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29FA, - SMSG_PLAYER_SAVE_PERSONAL_EMBLEM = 0x3023, - SMSG_PLAYER_SHOW_ARROW_CALLOUT = 0x3020, - SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x301E, - SMSG_PLAYER_SHOW_PARTY_POSE_UI = 0x301F, - SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x3019, + SMSG_PLAYER_SAVE_PERSONAL_EMBLEM = 0x3025, + SMSG_PLAYER_SHOW_ARROW_CALLOUT = 0x3022, + SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x3020, + SMSG_PLAYER_SHOW_PARTY_POSE_UI = 0x3021, + SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x301B, SMSG_PLAYER_SKINNED = 0x3006, SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x300D, SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x300C, - SMSG_PLAY_MUSIC = 0x2767, - SMSG_PLAY_OBJECT_SOUND = 0x2768, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x272F, + SMSG_PLAY_MUSIC = 0x276A, + SMSG_PLAY_OBJECT_SOUND = 0x276B, + SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2732, SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C49, - SMSG_PLAY_SCENE = 0x2635, - SMSG_PLAY_SOUND = 0x2766, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x2769, + SMSG_PLAY_SCENE = 0x2637, + SMSG_PLAY_SOUND = 0x2769, + SMSG_PLAY_SPEAKERBOT_SOUND = 0x276C, SMSG_PLAY_SPELL_VISUAL = 0x2C47, SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C4B, - SMSG_PLAY_TIME_WARNING = 0x26FD, + SMSG_PLAY_TIME_WARNING = 0x2700, SMSG_PONG = 0x304E, - SMSG_POWER_UPDATE = 0x26D2, + SMSG_POWER_UPDATE = 0x26D5, SMSG_PRELOAD_CHILD_MAP = 0x2579, - SMSG_PRELOAD_WORLD = 0x2596, - SMSG_PREPOPULATE_NAME_CACHE = 0x2841, - SMSG_PRE_RESSURECT = 0x2765, - SMSG_PRINT_NOTIFICATION = 0x25CB, - SMSG_PROC_RESIST = 0x2759, - SMSG_PROFESSION_GOSSIP = 0x27F8, + SMSG_PRELOAD_WORLD = 0x2598, + SMSG_PREPOPULATE_NAME_CACHE = 0x282E, + SMSG_PRE_RESSURECT = 0x2768, + SMSG_PRINT_NOTIFICATION = 0x25CD, + SMSG_PROC_RESIST = 0x275C, + SMSG_PROFESSION_GOSSIP = 0x27FB, SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C53, SMSG_PVP_CREDIT = 0x2946, SMSG_PVP_MATCH_COMPLETE = 0x2951, @@ -1790,7 +1813,7 @@ enum OpcodeServer : uint16 SMSG_PVP_MATCH_START = 0x294F, SMSG_PVP_MATCH_STATISTICS = 0x2932, SMSG_PVP_OPTIONS_ENABLED = 0x2935, - SMSG_PVP_TIER_RECORD = 0x287B, + SMSG_PVP_TIER_RECORD = 0x2866, SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x291A, SMSG_QUERY_CREATURE_RESPONSE = 0x2914, SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2915, @@ -1802,11 +1825,11 @@ enum OpcodeServer : uint16 SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2917, SMSG_QUERY_PETITION_RESPONSE = 0x291B, SMSG_QUERY_PET_NAME_RESPONSE = 0x2919, - SMSG_QUERY_PLAYER_NAMES_RESPONSE = 0x301B, + SMSG_QUERY_PLAYER_NAMES_RESPONSE = 0x301D, SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x3002, SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A96, SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x29E7, - SMSG_QUERY_TIME_RESPONSE = 0x26E3, + SMSG_QUERY_TIME_RESPONSE = 0x26E6, SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81, SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8F, SMSG_QUEST_FORCE_REMOVED = 0x2A9C, @@ -1825,141 +1848,144 @@ 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 = 0x2864, - SMSG_QUEST_SESSION_READY_CHECK = 0x2852, - SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2853, - SMSG_QUEST_SESSION_RESULT = 0x2851, + SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2850, + SMSG_QUEST_SESSION_READY_CHECK = 0x283F, + SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2840, + SMSG_QUEST_SESSION_RESULT = 0x283E, 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 = 0x280B, - SMSG_RAF_ACCOUNT_INFO = 0x284F, - SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x2860, - SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x28B7, - SMSG_RAID_DIFFICULTY_SET = 0x27A5, - SMSG_RAID_GROUP_ONLY = 0x27A7, + SMSG_QUEUE_SUMMARY_UPDATE = 0x280E, + SMSG_RAF_ACCOUNT_INFO = 0x283C, + SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x284C, + SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x2893, + SMSG_RAID_DIFFICULTY_SET = 0x27A8, + SMSG_RAID_GROUP_ONLY = 0x27AA, SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4, - SMSG_RAID_MARKERS_CHANGED = 0x25A1, - SMSG_RANDOM_ROLL = 0x262F, + SMSG_RAID_MARKERS_CHANGED = 0x25A3, + SMSG_RANDOM_ROLL = 0x2631, SMSG_RATED_PVP_INFO = 0x2931, - SMSG_READY_CHECK_COMPLETED = 0x25F8, - SMSG_READY_CHECK_RESPONSE = 0x25F7, - SMSG_READY_CHECK_STARTED = 0x25F6, - SMSG_READ_ITEM_RESULT_FAILED = 0x27A1, - SMSG_READ_ITEM_RESULT_OK = 0x2798, + SMSG_READY_CHECK_COMPLETED = 0x25FA, + SMSG_READY_CHECK_RESPONSE = 0x25F9, + SMSG_READY_CHECK_STARTED = 0x25F8, + SMSG_READ_ITEM_RESULT_FAILED = 0x27A4, + SMSG_READ_ITEM_RESULT_OK = 0x279B, SMSG_REALM_QUERY_RESPONSE = 0x2913, - SMSG_REATTACH_RESURRECT = 0x2749, - SMSG_RECEIVE_PING_UNIT = 0x25A2, - SMSG_RECEIVE_PING_WORLD_POINT = 0x25A3, - SMSG_RECRAFT_ITEM_RESULT = 0x28A6, - SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26C0, - SMSG_REFRESH_COMPONENT = 0x2650, + SMSG_REATTACH_RESURRECT = 0x274C, + SMSG_RECEIVE_PING_UNIT = 0x25A4, + SMSG_RECEIVE_PING_WORLD_POINT = 0x25A5, + SMSG_RECRAFT_ITEM_RESULT = 0x2889, + SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26C3, + SMSG_REFRESH_COMPONENT = 0x2652, SMSG_REFRESH_SPELL_HISTORY = 0x2C2B, - SMSG_REMOVE_ITEM_PASSIVE = 0x25AC, + SMSG_REGIONWIDE_CHARACTER_MAIL_DATA = 0x2586, + SMSG_REGIONWIDE_CHARACTER_RESTRICTIONS_DATA = 0x2585, + SMSG_REMOVE_ITEM_PASSIVE = 0x25AE, SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C54, - SMSG_REPLACE_TROPHY_RESPONSE = 0x27BD, + SMSG_REPLACE_TROPHY_RESPONSE = 0x27C0, SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x3001, - SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x258F, + SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x2591, SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2936, SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2937, SMSG_RESET_COMPRESSION_CONTEXT = 0x304F, - SMSG_RESET_FAILED_NOTIFY = 0x26B7, - SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x28AC, + SMSG_RESET_FAILED_NOTIFY = 0x26BA, + SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x2890, SMSG_RESET_QUEST_POI = 0x2AA0, SMSG_RESET_RANGED_COMBAT_TIMER = 0x2945, SMSG_RESET_WEEKLY_CURRENCY = 0x2575, - SMSG_RESPEC_WIPE_CONFIRM = 0x2612, + SMSG_RESPEC_WIPE_CONFIRM = 0x2614, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2572, - SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x2882, - SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x2883, + SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x286D, + SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x286E, SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C63, - SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25BA, + SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25BC, SMSG_RESUME_CAST = 0x2C3D, SMSG_RESUME_CAST_BAR = 0x2C40, SMSG_RESUME_COMMS = 0x304B, - SMSG_RESUME_TOKEN = 0x25AA, + SMSG_RESUME_TOKEN = 0x25AC, SMSG_RESURRECT_REQUEST = 0x257E, SMSG_RESYNC_RUNES = 0x2C61, - SMSG_RETURNING_PLAYER_PROMPT = 0x27A0, - SMSG_RETURN_APPLICANT_LIST = 0x2845, - SMSG_RETURN_RECRUITING_CLUBS = 0x2844, - SMSG_ROLE_CHANGED_INFORM = 0x258B, + SMSG_RETURNING_PLAYER_PROMPT = 0x27A3, + SMSG_RETURN_APPLICANT_LIST = 0x2832, + SMSG_RETURN_RECRUITING_CLUBS = 0x2831, + SMSG_ROLE_CHANGED_INFORM = 0x258D, SMSG_ROLE_CHOSEN = 0x2A39, - SMSG_ROLE_POLL_INFORM = 0x258C, - SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27F7, - SMSG_RUNE_REGEN_DEBUG = 0x25B7, - SMSG_SCENARIO_COMPLETED = 0x27E5, - SMSG_SCENARIO_POIS = 0x2632, - SMSG_SCENARIO_PROGRESS_UPDATE = 0x262B, - SMSG_SCENARIO_SHOW_CRITERIA = 0x27FB, - SMSG_SCENARIO_STATE = 0x262A, - SMSG_SCENARIO_UI_UPDATE = 0x27FA, - SMSG_SCENARIO_VACATE = 0x27A2, - SMSG_SCENE_OBJECT_EVENT = 0x25E2, - SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E7, - SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E8, - SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25E4, - SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25E3, - SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25E6, - SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E5, + SMSG_ROLE_POLL_INFORM = 0x258E, + SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27FA, + SMSG_RUNE_REGEN_DEBUG = 0x25B9, + SMSG_SCENARIO_COMPLETED = 0x27E8, + SMSG_SCENARIO_POIS = 0x2634, + SMSG_SCENARIO_PROGRESS_UPDATE = 0x262D, + SMSG_SCENARIO_SHOW_CRITERIA = 0x27FE, + SMSG_SCENARIO_STATE = 0x262C, + SMSG_SCENARIO_UI_UPDATE = 0x27FD, + SMSG_SCENARIO_VACATE = 0x27A5, + SMSG_SCENE_OBJECT_EVENT = 0x25E4, + SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E9, + SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25EA, + SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25E6, + SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25E5, + SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25E8, + SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E7, SMSG_SCRIPT_CAST = 0x2C58, - SMSG_SEASON_INFO = 0x25C2, - SMSG_SELL_RESPONSE = 0x26C4, - SMSG_SEND_ITEM_PASSIVES = 0x25AD, + SMSG_SEASON_INFO = 0x25C4, + SMSG_SELL_RESPONSE = 0x26C7, + SMSG_SEND_ITEM_PASSIVES = 0x25AF, SMSG_SEND_KNOWN_SPELLS = 0x2C29, - SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262D, - SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x262E, + SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262F, + SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x2630, SMSG_SEND_SPELL_CHARGES = 0x2C2C, SMSG_SEND_SPELL_HISTORY = 0x2C2A, SMSG_SEND_UNLEARN_SPELLS = 0x2C2D, - SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264D, - SMSG_SERVER_TIME = 0x2683, - SMSG_SERVER_TIME_OFFSET = 0x2713, + SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264F, + SMSG_SERVER_TIME = 0x2686, + SMSG_SERVER_TIME_OFFSET = 0x2716, SMSG_SETUP_COMBAT_LOG_FILE_FLUSH = 0x2C1F, SMSG_SETUP_CURRENCY = 0x2573, - SMSG_SET_AI_ANIM_KIT = 0x272E, - SMSG_SET_ANIM_TIER = 0x2732, - SMSG_SET_CHR_UPGRADE_TIER = 0x25DF, + SMSG_SET_AI_ANIM_KIT = 0x2731, + SMSG_SET_ANIM_TIER = 0x2735, + SMSG_SET_CHR_UPGRADE_TIER = 0x25E1, SMSG_SET_CURRENCY = 0x2574, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E, - SMSG_SET_DUNGEON_DIFFICULTY = 0x26A5, - SMSG_SET_FACTION_AT_WAR = 0x26FF, - SMSG_SET_FACTION_NOT_VISIBLE = 0x2729, - SMSG_SET_FACTION_STANDING = 0x272A, - SMSG_SET_FACTION_VISIBLE = 0x2728, + SMSG_SET_DUNGEON_DIFFICULTY = 0x26A8, + SMSG_SET_FACTION_AT_WAR = 0x2702, + SMSG_SET_FACTION_NOT_VISIBLE = 0x272C, + SMSG_SET_FACTION_STANDING = 0x272D, + SMSG_SET_FACTION_VISIBLE = 0x272B, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C38, - SMSG_SET_FORCED_REACTIONS = 0x271C, - SMSG_SET_ITEM_PURCHASE_DATA = 0x259C, - SMSG_SET_LOOT_METHOD_FAILED = 0x27C9, - SMSG_SET_MAX_WEEKLY_QUANTITY = 0x259F, - SMSG_SET_MELEE_ANIM_KIT = 0x2731, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x2730, + SMSG_SET_FORCED_REACTIONS = 0x271F, + SMSG_SET_ITEM_PURCHASE_DATA = 0x259E, + SMSG_SET_LOOT_METHOD_FAILED = 0x27CC, + SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25A1, + SMSG_SET_MELEE_ANIM_KIT = 0x2734, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x2733, SMSG_SET_PCT_SPELL_MODIFIER = 0x2C39, - SMSG_SET_PET_SPECIALIZATION = 0x2624, + SMSG_SET_PET_SPECIALIZATION = 0x2626, SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x3003, - SMSG_SET_PLAY_HOVER_ANIM = 0x25BB, - SMSG_SET_PROFICIENCY = 0x2733, - SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2858, + SMSG_SET_PLAY_HOVER_ANIM = 0x25BD, + SMSG_SET_PROFICIENCY = 0x2736, + SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2845, SMSG_SET_SHIPMENT_READY_RESPONSE = 0x2998, SMSG_SET_SPELL_CHARGES = 0x2C28, - SMSG_SET_TIME_ZONE_INFORMATION = 0x2678, - SMSG_SET_VEHICLE_REC_ID = 0x26F6, - SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2887, + SMSG_SET_TIME_ZONE_INFORMATION = 0x267B, + SMSG_SET_VEHICLE_REC_ID = 0x26F9, + SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2871, SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x2999, - SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25DB, + SMSG_SHOW_DELVES_DISPLAY_UI = 0x28A7, + SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25DD, SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x2A95, - SMSG_SHOW_TAXI_NODES = 0x26CD, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x276E, - SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x2892, - SMSG_SOCKET_GEMS_FAILURE = 0x2726, - SMSG_SOCKET_GEMS_SUCCESS = 0x2725, - SMSG_SPECIAL_MOUNT_ANIM = 0x26A0, - SMSG_SPECTATE_END = 0x28B9, - SMSG_SPECTATE_PLAYER = 0x28B8, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2717, + SMSG_SHOW_TAXI_NODES = 0x26D0, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2771, + SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x287B, + SMSG_SOCKET_GEMS_FAILURE = 0x2729, + SMSG_SOCKET_GEMS_SUCCESS = 0x2728, + SMSG_SPECIAL_MOUNT_ANIM = 0x26A3, + SMSG_SPECTATE_END = 0x2895, + SMSG_SPECTATE_PLAYER = 0x2894, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x271A, SMSG_SPELL_ABSORB_LOG = 0x2C1C, SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C16, SMSG_SPELL_CHANNEL_START = 0x2C33, @@ -1987,94 +2013,95 @@ enum OpcodeServer : uint16 SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C18, SMSG_SPELL_PREPARE = 0x2C3A, SMSG_SPELL_START = 0x2C3C, - SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25CD, - SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x286A, - SMSG_STAND_STATE_UPDATE = 0x271B, - SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x25D3, - SMSG_START_ELAPSED_TIMER = 0x2604, - SMSG_START_ELAPSED_TIMERS = 0x2606, - SMSG_START_LIGHTNING_STORM = 0x26A8, - SMSG_START_LOOT_ROLL = 0x261C, - SMSG_START_MIRROR_TIMER = 0x270E, - SMSG_START_TIMER = 0x25A6, - SMSG_STOP_ELAPSED_TIMER = 0x2605, - SMSG_STOP_MIRROR_TIMER = 0x2710, - SMSG_STOP_SPEAKERBOT_SOUND = 0x276A, - SMSG_STOP_TIMER = 0x25A7, - SMSG_STREAMING_MOVIES = 0x25A5, - SMSG_SUGGEST_INVITE_INFORM = 0x278E, - SMSG_SUMMON_CANCEL = 0x26B1, - SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258D, - SMSG_SUMMON_REQUEST = 0x2720, + SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25CF, + SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2856, + SMSG_STAND_STATE_UPDATE = 0x271E, + SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x25D5, + SMSG_START_ELAPSED_TIMER = 0x2606, + SMSG_START_ELAPSED_TIMERS = 0x2608, + SMSG_START_LIGHTNING_STORM = 0x26AB, + SMSG_START_LOOT_ROLL = 0x261E, + SMSG_START_MIRROR_TIMER = 0x2711, + SMSG_START_TIMER = 0x25A8, + SMSG_STOP_ELAPSED_TIMER = 0x2607, + SMSG_STOP_MIRROR_TIMER = 0x2713, + SMSG_STOP_SPEAKERBOT_SOUND = 0x276D, + SMSG_STOP_TIMER = 0x25A9, + SMSG_STREAMING_MOVIES = 0x25A7, + SMSG_SUGGEST_INVITE_INFORM = 0x2791, + SMSG_SUMMON_CANCEL = 0x26B4, + SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258F, + SMSG_SUMMON_REQUEST = 0x2723, SMSG_SUPERCEDED_SPELLS = 0x2C4E, SMSG_SUSPEND_COMMS = 0x304A, - SMSG_SUSPEND_TOKEN = 0x25A9, - SMSG_SYNC_WOW_ENTITLEMENTS = 0x2862, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2716, - SMSG_TAXI_NODE_STATUS = 0x267D, - SMSG_TEXT_EMOTE = 0x267B, - SMSG_THREAT_CLEAR = 0x26DC, - SMSG_THREAT_REMOVE = 0x26DB, - SMSG_THREAT_UPDATE = 0x26DA, + SMSG_SUSPEND_TOKEN = 0x25AB, + SMSG_SYNC_WOW_ENTITLEMENTS = 0x284E, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2719, + SMSG_TAXI_NODE_STATUS = 0x2680, + SMSG_TEXT_EMOTE = 0x267E, + SMSG_THREAT_CLEAR = 0x26DF, + SMSG_THREAT_REMOVE = 0x26DE, + SMSG_THREAT_UPDATE = 0x26DD, + SMSG_TIMERUNNING_SEASON_ENDED = 0x28AA, SMSG_TIME_ADJUSTMENT = 0x2DD3, SMSG_TIME_SYNC_REQUEST = 0x2DD2, - SMSG_TITLE_EARNED = 0x26D7, - SMSG_TITLE_LOST = 0x26D8, - SMSG_TOTEM_CREATED = 0x26C7, - SMSG_TOTEM_DURATION_CHANGED = 0x26C9, - SMSG_TOTEM_MOVED = 0x26CA, - SMSG_TOTEM_REMOVED = 0x26C8, + SMSG_TITLE_EARNED = 0x26DA, + SMSG_TITLE_LOST = 0x26DB, + SMSG_TOTEM_CREATED = 0x26CA, + SMSG_TOTEM_DURATION_CHANGED = 0x26CC, + SMSG_TOTEM_MOVED = 0x26CD, + SMSG_TOTEM_REMOVED = 0x26CB, SMSG_TRADE_STATUS = 0x2583, SMSG_TRADE_UPDATED = 0x2582, - SMSG_TRAINER_BUY_FAILED = 0x26DF, - SMSG_TRAINER_LIST = 0x26DE, - SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x25D2, - SMSG_TRANSFER_ABORTED = 0x2702, - SMSG_TRANSFER_PENDING = 0x25CE, + SMSG_TRAINER_BUY_FAILED = 0x26E2, + SMSG_TRAINER_LIST = 0x26E1, + SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x25D4, + SMSG_TRANSFER_ABORTED = 0x2705, + SMSG_TRANSFER_PENDING = 0x25D0, SMSG_TREASURE_PICKER_RESPONSE = 0x291F, - SMSG_TRIGGER_CINEMATIC = 0x27C2, - SMSG_TRIGGER_MOVIE = 0x26CB, - SMSG_TURN_IN_PETITION_RESULT = 0x274C, - SMSG_TUTORIAL_FLAGS = 0x27B6, - SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA2, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C4, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C5, + SMSG_TRIGGER_CINEMATIC = 0x27C5, + SMSG_TRIGGER_MOVIE = 0x26CE, + SMSG_TURN_IN_PETITION_RESULT = 0x274F, + SMSG_TUTORIAL_FLAGS = 0x27B9, + SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA3, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C7, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C8, SMSG_UNLEARNED_SPELLS = 0x2C50, SMSG_UNLOAD_CHILD_MAP = 0x257A, - SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x287C, - SMSG_UPDATE_ACCOUNT_DATA = 0x2708, - SMSG_UPDATE_ACTION_BUTTONS = 0x25E0, - SMSG_UPDATE_BNET_SESSION_KEY = 0x281C, + SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x2867, + SMSG_UPDATE_ACCOUNT_DATA = 0x270B, + SMSG_UPDATE_ACTION_BUTTONS = 0x25E2, + SMSG_UPDATE_BNET_SESSION_KEY = 0x281F, SMSG_UPDATE_CAPTURE_POINT = 0x2929, - SMSG_UPDATE_CELESTIAL_BODY = 0x2818, - SMSG_UPDATE_CHARACTER_FLAGS = 0x27BC, - SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2764, - SMSG_UPDATE_COOLDOWN = 0x2763, + SMSG_UPDATE_CELESTIAL_BODY = 0x281B, + SMSG_UPDATE_CHARACTER_FLAGS = 0x27BF, + SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2767, + SMSG_UPDATE_COOLDOWN = 0x2766, SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2996, SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x297F, - SMSG_UPDATE_EXPANSION_LEVEL = 0x2645, - SMSG_UPDATE_GAME_TIME_STATE = 0x281F, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26AA, - SMSG_UPDATE_LAST_INSTANCE = 0x2689, - SMSG_UPDATE_OBJECT = 0x27C3, - SMSG_UPDATE_PRIMARY_SPEC = 0x25D8, - SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F5, - SMSG_UPDATE_TALENT_DATA = 0x25D7, - SMSG_UPDATE_WORLD_STATE = 0x2746, + SMSG_UPDATE_EXPANSION_LEVEL = 0x2647, + SMSG_UPDATE_GAME_TIME_STATE = 0x2822, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26AD, + SMSG_UPDATE_LAST_INSTANCE = 0x268C, + SMSG_UPDATE_OBJECT = 0x27C6, + SMSG_UPDATE_PRIMARY_SPEC = 0x25DA, + SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F7, + SMSG_UPDATE_TALENT_DATA = 0x25D9, + SMSG_UPDATE_WORLD_STATE = 0x2749, SMSG_USERLIST_ADD = 0x2BB9, SMSG_USERLIST_REMOVE = 0x2BBA, SMSG_USERLIST_UPDATE = 0x2BBB, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x274D, - SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2813, - SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2811, - SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2810, - SMSG_VAS_PURCHASE_COMPLETE = 0x27EB, - SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27EA, - SMSG_VENDOR_INVENTORY = 0x25B9, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x2750, + SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2816, + SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2814, + SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2813, + SMSG_VAS_PURCHASE_COMPLETE = 0x27EE, + SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27ED, + SMSG_VENDOR_INVENTORY = 0x25BB, SMSG_VIGNETTE_UPDATE = 0x3008, - SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x2817, - SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2876, - SMSG_VOICE_LOGIN_RESPONSE = 0x2816, + SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x281A, + SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2861, + SMSG_VOICE_LOGIN_RESPONSE = 0x2819, SMSG_VOID_ITEM_SWAP_RESPONSE = 0x2DA4, SMSG_VOID_STORAGE_CONTENTS = 0x2DA1, SMSG_VOID_STORAGE_FAILED = 0x2DA0, @@ -2083,28 +2110,28 @@ enum OpcodeServer : uint16 SMSG_WAIT_QUEUE_FINISH = 0x256F, SMSG_WAIT_QUEUE_UPDATE = 0x256E, SMSG_WARDEN3_DATA = 0x2577, - SMSG_WARDEN3_DISABLED = 0x281A, - SMSG_WARDEN3_ENABLED = 0x2819, - SMSG_WARFRONT_COMPLETE = 0x275C, + SMSG_WARDEN3_DISABLED = 0x281D, + SMSG_WARDEN3_ENABLED = 0x281C, + SMSG_WARFRONT_COMPLETE = 0x275F, SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE = 0x2934, SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x2933, - SMSG_WEATHER = 0x26A7, - SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x286D, - SMSG_WEEKLY_REWARDS_RESULT = 0x286B, - SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x286C, + SMSG_WEATHER = 0x26AA, + SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x2859, + SMSG_WEEKLY_REWARDS_RESULT = 0x2857, + SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x2858, SMSG_WHO = 0x2BAE, - SMSG_WHO_IS = 0x26A6, - SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x281E, + SMSG_WHO_IS = 0x26A9, + SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x2821, SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x300F, - SMSG_WORLD_SERVER_INFO = 0x25AE, - SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x2863, - SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x2893, - SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x2894, - SMSG_WOW_LABS_PARTY_ERROR = 0x289C, - SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x2895, - SMSG_XP_AWARDED_FROM_CURRENCY = 0x28AB, - SMSG_XP_GAIN_ABORTED = 0x25CA, - SMSG_XP_GAIN_ENABLED = 0x27A6, + SMSG_WORLD_SERVER_INFO = 0x25B0, + SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x284F, + SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x287C, + SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x287D, + SMSG_WOW_LABS_PARTY_ERROR = 0x2881, + SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x287E, + SMSG_XP_AWARDED_FROM_CURRENCY = 0x288F, + SMSG_XP_GAIN_ABORTED = 0x25CC, + SMSG_XP_GAIN_ENABLED = 0x27A9, 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 fb344305d75..fb05eeeb24a 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -65,6 +65,7 @@ struct Petition; struct Position; enum class AuctionCommand : int8; enum class AuctionResult : int8; +enum class PlayerInteractionType : int32; enum InventoryResult : uint8; enum class StableResult : uint8; enum class TabardVendorType : int32; @@ -170,6 +171,7 @@ namespace WorldPackets class AutoBankReagent; class AutoStoreBankReagent; class ReagentBank; + class BankerActivate; } namespace Battleground @@ -447,6 +449,7 @@ namespace WorldPackets class CancelTempEnchantment; class UseCritterItem; class SocketGems; + class SortAccountBankBags; class SortBags; class SortBankBags; class SortReagentBankBags; @@ -860,14 +863,14 @@ 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_CONFIG_CACHE = 0, + PER_CHARACTER_CONFIG_CACHE = 1, + GLOBAL_BINDINGS_CACHE = 2, + PER_CHARACTER_BINDINGS_CACHE = 3, + GLOBAL_MACROS_CACHE = 4, + PER_CHARACTER_MACROS_CACHE = 5, + PER_CHARACTER_LAYOUT_CACHE = 6, + PER_CHARACTER_CHAT_CACHE = 7, GLOBAL_TTS_CACHE = 8, PER_CHARACTER_TTS_CACHE = 9, GLOBAL_FLAGGED_CACHE = 10, @@ -875,13 +878,15 @@ enum AccountDataType PER_CHARACTER_CLICK_BINDINGS_CACHE = 12, GLOBAL_EDIT_MODE_CACHE = 13, PER_CHARACTER_EDIT_MODE_CACHE = 14, + GLOBAL_FRONTEND_CHAT_SETTINGS = 15, + GLOBAL_CHARACTER_LIST_ORDER = 16 }; -#define NUM_ACCOUNT_DATA_TYPES 15 +#define NUM_ACCOUNT_DATA_TYPES 17 -#define ALL_ACCOUNT_DATA_CACHE_MASK 0x7FFF -#define GLOBAL_CACHE_MASK 0x2515 -#define PER_CHARACTER_CACHE_MASK 0x5AEA +#define ALL_ACCOUNT_DATA_CACHE_MASK 0x0001FFFFu +#define GLOBAL_CACHE_MASK 0x0001A515u +#define PER_CHARACTER_CACHE_MASK 0x00005AEAu struct AccountData { @@ -1070,7 +1075,7 @@ class TC_GAME_API WorldSession void SendTrainerList(Creature* npc, uint32 trainerId); void SendListInventory(ObjectGuid guid); - void SendShowBank(ObjectGuid guid); + void SendShowBank(ObjectGuid guid, PlayerInteractionType interactionType); bool CanOpenMailBox(ObjectGuid guid); void SendShowMailBox(ObjectGuid guid); void SendTabardVendorActivate(ObjectGuid guid, TabardVendorType type); @@ -1422,7 +1427,7 @@ class TC_GAME_API WorldSession void HandleTaxiRequestEarlyLanding(WorldPackets::Taxi::TaxiRequestEarlyLanding& taxiRequestEarlyLanding); void HandleTabardVendorActivateOpcode(WorldPackets::NPC::TabardVendorActivate const& tabardVendorActivate); - void HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet); + void HandleBankerActivateOpcode(WorldPackets::Bank::BankerActivate const& bankerActivate); void HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet); void HandleTrainerBuySpellOpcode(WorldPackets::NPC::TrainerBuySpell& packet); void HandlePetitionShowList(WorldPackets::Petition::PetitionShowList& packet); @@ -1683,6 +1688,7 @@ class TC_GAME_API WorldSession // Socket gem void HandleSocketGems(WorldPackets::Item::SocketGems& socketGems); + void HandleSortAccountBankBags(WorldPackets::Item::SortAccountBankBags& sortBankBags); void HandleSortBags(WorldPackets::Item::SortBags& sortBags); void HandleSortBankBags(WorldPackets::Item::SortBankBags& sortBankBags); void HandleSortReagentBankBags(WorldPackets::Item::SortReagentBankBags& sortReagentBankBags); diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 6aa746ebef7..688c8c5aed0 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -151,7 +151,7 @@ void WorldSocket::InitializeHandler(boost::system::error_code const& error, std: try { ByteBuffer buffer(std::move(_packetBuffer)); - std::string initializer = buffer.ReadString(ClientConnectionInitialize.length()); + std::string initializer(buffer.ReadString(ClientConnectionInitialize.length())); if (initializer != ClientConnectionInitialize) { CloseSocket(); diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 0369c8a807c..fde76603bff 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1545,7 +1545,7 @@ public: static bool HandleBankCommand(ChatHandler* handler) { - handler->GetSession()->SendShowBank(handler->GetSession()->GetPlayer()->GetGUID()); + handler->GetSession()->SendShowBank(handler->GetSession()->GetPlayer()->GetGUID(), PlayerInteractionType::Banker); return true; } diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index e02e67a1d7c..edf54b96de4 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -225,7 +225,7 @@ public: flag = target->m_unitData->Flags; if (!npcflag) - memcpy(&npcflag.emplace(), target->m_unitData->NpcFlags.begin(), sizeof(uint64)); + npcflag = (uint64(target->GetNpcFlags2()) << 32) | target->GetNpcFlags(); if (!dyflag) dyflag = target->m_objectData->DynamicFlags; diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 81de26149c2..f07f5de5395 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -480,8 +480,7 @@ public: CreatureTemplate const* cInfo = target->GetCreatureTemplate(); uint32 faction = target->GetFaction(); - uint64 npcflags; - memcpy(&npcflags, target->m_unitData->NpcFlags.begin(), sizeof(npcflags)); + uint64 npcflags = (uint64(target->GetNpcFlags2()) << 32) | target->GetNpcFlags(); uint64 mechanicImmuneMask = 0; if (CreatureImmunities const* immunities = SpellMgr::GetCreatureImmunities(cInfo->CreatureImmunitiesId)) mechanicImmuneMask = immunities->Mechanic.to_ullong(); @@ -550,7 +549,7 @@ public: if (cInfo->flags_extra & flag) handler->PSendSysMessage("%s (0x%X)", EnumUtils::ToTitle(flag), flag); - handler->PSendSysMessage(LANG_NPCINFO_NPC_FLAGS, target->m_unitData->NpcFlags[0]); + handler->PSendSysMessage(LANG_NPCINFO_NPC_FLAGS, uint32(target->GetNpcFlags())); for (NPCFlags flag : EnumUtils::Iterate<NPCFlags>()) if (target->HasNpcFlag(flag)) handler->PSendSysMessage("* %s (0x%X)", EnumUtils::ToTitle(flag), flag); |