aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-08-13 00:31:39 +0200
committerShauren <shauren.trinity@gmail.com>2025-08-13 00:31:39 +0200
commit5cf0c6c8bb2c4e58a2d66ba5f304af34d18a4782 (patch)
tree0616f3e83f511aae0e10916f0c22161017e09c24 /src/server/game
parent82f19c898815e3bc5bb6288b0191ee897594f9b5 (diff)
Core: Updated to 11.2.0
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp24
-rw-r--r--src/server/game/DataStores/DB2LoadInfo.h92
-rw-r--r--src/server/game/DataStores/DB2Metadata.h433
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp20
-rw-r--r--src/server/game/DataStores/DB2Stores.h2
-rw-r--r--src/server/game/DataStores/DB2Structure.h52
-rw-r--r--src/server/game/DataStores/DBCEnums.h4
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp446
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h71
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h4
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp2
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h1
-rw-r--r--src/server/game/Entities/GameObject/GameObjectData.h22
-rw-r--r--src/server/game/Entities/Item/Item.cpp22
-rw-r--r--src/server/game/Entities/Item/ItemDefines.h2
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h3
-rw-r--r--src/server/game/Entities/Object/Object.cpp167
-rw-r--r--src/server/game/Entities/Object/Object.h1
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateField.h116
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp1481
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h568
-rw-r--r--src/server/game/Entities/Player/Player.cpp509
-rw-r--r--src/server/game/Entities/Player/Player.h200
-rw-r--r--src/server/game/Entities/Unit/Unit.h6
-rw-r--r--src/server/game/Globals/AreaTriggerDataStore.cpp6
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp40
-rw-r--r--src/server/game/Globals/ObjectMgr.h2
-rw-r--r--src/server/game/Guilds/Guild.cpp12
-rw-r--r--src/server/game/Handlers/BankHandler.cpp210
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp9
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp18
-rw-r--r--src/server/game/Handlers/TradeHandler.cpp16
-rw-r--r--src/server/game/Handlers/VoidStorageHandler.cpp236
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h1832
-rw-r--r--src/server/game/Server/Packets/AllPackets.h1
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.cpp70
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.h38
-rw-r--r--src/server/game/Server/Packets/BankPackets.cpp59
-rw-r--r--src/server/game/Server/Packets/BankPackets.h47
-rw-r--r--src/server/game/Server/Packets/DuelPackets.h2
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h2
-rw-r--r--src/server/game/Server/Packets/InspectPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/InspectPackets.h2
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h8
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.cpp19
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.h1
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp38
-rw-r--r--src/server/game/Server/Packets/PartyPackets.h29
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h2
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp28
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h4
-rw-r--r--src/server/game/Server/Packets/TalentPackets.cpp47
-rw-r--r--src/server/game/Server/Packets/TalentPackets.h27
-rw-r--r--src/server/game/Server/Packets/TraitPacketsCommon.cpp2
-rw-r--r--src/server/game/Server/Packets/TraitPacketsCommon.h1
-rw-r--r--src/server/game/Server/Packets/VoidStoragePackets.cpp114
-rw-r--r--src/server/game/Server/Packets/VoidStoragePackets.h138
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp32
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h4311
-rw-r--r--src/server/game/Server/WorldSession.cpp9
-rw-r--r--src/server/game/Server/WorldSession.h34
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp4
-rw-r--r--src/server/game/Spells/Spell.cpp2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp4
-rw-r--r--src/server/game/Spells/SpellInfo.cpp4
-rw-r--r--src/server/game/Tools/PlayerDump.cpp1
70 files changed, 6207 insertions, 5518 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index eacc492e97a..3e1b4887956 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -792,6 +792,19 @@ void CriteriaHandler::UpdateCriteria(Criteria const* criteria, uint64 miscValue1
case CriteriaType::GuildAttainedLevel:
SetCriteriaProgress(criteria, miscValue1, referencePlayer);
break;
+ case CriteriaType::BankTabPurchased:
+ switch (BankType(criteria->Entry->Asset.BankType))
+ {
+ case BankType::Character:
+ SetCriteriaProgress(criteria, referencePlayer->GetCharacterBankTabCount(), referencePlayer);
+ break;
+ case BankType::Account:
+ SetCriteriaProgress(criteria, referencePlayer->GetAccountBankTabCount(), referencePlayer);
+ break;
+ default:
+ break;
+ }
+ break;
// FIXME: not triggered in code as result, need to implement
case CriteriaType::RunInstance:
case CriteriaType::EarnTeamArenaRating:
@@ -1237,6 +1250,7 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi
case CriteriaType::SellItemsToVendors:
case CriteriaType::GainLevels:
case CriteriaType::ReachRenownLevel:
+ case CriteriaType::BankTabPurchased:
case CriteriaType::LearnTaxiNode:
return progress->Counter >= requiredAmount;
case CriteriaType::EarnAchievement:
@@ -1691,6 +1705,10 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
if (!referencePlayer->IsMaxLevel())
return false;
break;
+ case CriteriaType::BankTabPurchased:
+ if (miscValue1 /*allow any at login*/ && miscValue1 != uint32(criteria->Entry->Asset.BankType))
+ return false;
+ break;
case CriteriaType::LearnTaxiNode:
if (miscValue1 != uint32(criteria->Entry->Asset.TaxiNodesID))
return false;
@@ -4546,8 +4564,8 @@ char const* CriteriaMgr::GetCriteriaTypeString(CriteriaType type)
return "GainLevels";
case CriteriaType::CompleteQuestsCountOnAccount:
return "CompleteQuestsCountOnAccount";
- case CriteriaType::WarbandBankTabPurchased:
- return "WarbandBankTabPurchased";
+ case CriteriaType::BankTabPurchased:
+ return "BankTabPurchased";
case CriteriaType::ReachRenownLevel:
return "ReachRenownLevel";
case CriteriaType::LearnTaxiNode:
@@ -5036,7 +5054,7 @@ std::span<CriteriaType const> CriteriaMgr::GetRetroactivelyUpdateableCriteriaTyp
//CriteriaType::MythicPlusRatingAttained, /*NYI*/
//CriteriaType::MythicPlusDisplaySeasonEnded, /*NYI*/
//CriteriaType::CompleteTrackingQuest, /*NYI*/
- //CriteriaType::WarbandBankTabPurchased, /*NYI*/
+ CriteriaType::BankTabPurchased,
CriteriaType::LearnTaxiNode,
CriteriaType::EarnAchievementPoints,
diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h
index 926c5095f0a..65244d6ddf8 100644
--- a/src/server/game/DataStores/DB2LoadInfo.h
+++ b/src/server/game/DataStores/DB2LoadInfo.h
@@ -127,7 +127,7 @@ struct AnimationDataLoadInfo
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "Fallback" },
- { .IsSigned = false, .Type = FT_BYTE, .Name = "BehaviorTier" },
+ { .IsSigned = true, .Type = FT_BYTE, .Name = "BehaviorTier" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "BehaviorID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags1" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags2" },
@@ -606,15 +606,23 @@ struct AzeriteUnlockMappingLoadInfo
static constexpr DB2LoadInfo Instance{ Fields, 6, &AzeriteUnlockMappingMeta::Instance, HOTFIX_SEL_AZERITE_UNLOCK_MAPPING };
};
-struct BankBagSlotPricesLoadInfo
+struct BankTabLoadInfo
{
- static constexpr DB2FieldMeta Fields[2] =
+ static constexpr DB2FieldMeta Fields[10] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
- { .IsSigned = false, .Type = FT_INT, .Name = "Cost" },
+ { .IsSigned = false, .Type = FT_LONG, .Name = "Cost" },
+ { .IsSigned = false, .Type = FT_BYTE, .Name = "BankType" },
+ { .IsSigned = true, .Type = FT_BYTE, .Name = "OrderIndex" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "PlayerConditionID" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "PurchasePromptTitle" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "PurchasePromptBody" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "PurchasePromptConfirmation" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "TabCleanupConfirmation" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "TabNameEditBoxHeader" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 2, &BankBagSlotPricesMeta::Instance, HOTFIX_SEL_BANK_BAG_SLOT_PRICES };
+ static constexpr DB2LoadInfo Instance{ Fields, 10, &BankTabMeta::Instance, HOTFIX_SEL_BANK_TAB };
};
struct BannedAddonsLoadInfo
@@ -624,7 +632,7 @@ struct BannedAddonsLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING_NOT_LOCALIZED, .Name = "Name" },
{ .IsSigned = false, .Type = FT_STRING_NOT_LOCALIZED, .Name = "Version" },
- { .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
};
static constexpr DB2LoadInfo Instance{ Fields, 4, &BannedAddonsMeta::Instance, HOTFIX_SEL_BANNED_ADDONS };
@@ -819,7 +827,7 @@ struct CfgCategoriesLoadInfo
struct CfgRegionsLoadInfo
{
- static constexpr DB2FieldMeta Fields[6] =
+ static constexpr DB2FieldMeta Fields[7] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING_NOT_LOCALIZED, .Name = "Tag" },
@@ -827,9 +835,10 @@ struct CfgRegionsLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "Raidorigin" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "RegionGroupMask" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ChallengeOrigin" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "TimeEventRegionGroupID" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 6, &Cfg_RegionsMeta::Instance, HOTFIX_SEL_CFG_REGIONS };
+ static constexpr DB2LoadInfo Instance{ Fields, 7, &Cfg_RegionsMeta::Instance, HOTFIX_SEL_CFG_REGIONS };
};
struct ChallengeModeItemBonusOverrideLoadInfo
@@ -869,7 +878,7 @@ struct CharTitlesLoadInfo
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name1" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "MaskID" },
- { .IsSigned = true, .Type = FT_BYTE, .Name = "Flags" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
};
static constexpr DB2LoadInfo Instance{ Fields, 5, &CharTitlesMeta::Instance, HOTFIX_SEL_CHAR_TITLES };
@@ -931,7 +940,7 @@ struct ChrClassUiDisplayLoadInfo
struct ChrClassesLoadInfo
{
- static constexpr DB2FieldMeta Fields[39] =
+ static constexpr DB2FieldMeta Fields[43] =
{
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = false, .Type = FT_STRING_NOT_LOCALIZED, .Name = "Filename" },
@@ -948,6 +957,7 @@ struct ChrClassesLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "IconFileDataID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "LowResScreenFileDataID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "StartingLevel" },
{ .IsSigned = false, .Type = FT_INT, .Name = "SpellTextureBlobFileDataID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ArmorTypeMask" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CharStartKitUnknown901" },
@@ -962,6 +972,7 @@ struct ChrClassesLoadInfo
{ .IsSigned = false, .Type = FT_SHORT, .Name = "CinematicSequenceID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "DefaultSpec" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ID" },
+ { .IsSigned = false, .Type = FT_BYTE, .Name = "HasStrengthBonus" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "PrimaryStatPriority" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "DisplayPower" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "RangedAttackPowerPerAgility" },
@@ -972,9 +983,11 @@ struct ChrClassesLoadInfo
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ClassColorG" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ClassColorB" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "RolesMask" },
+ { .IsSigned = false, .Type = FT_BYTE, .Name = "DamageBonusStat" },
+ { .IsSigned = false, .Type = FT_BYTE, .Name = "HasRelicSlot" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 39, &ChrClassesMeta::Instance, HOTFIX_SEL_CHR_CLASSES };
+ static constexpr DB2LoadInfo Instance{ Fields, 43, &ChrClassesMeta::Instance, HOTFIX_SEL_CHR_CLASSES };
};
struct ChrClassesXPowerTypesLoadInfo
@@ -1458,7 +1471,7 @@ struct CreatureDisplayInfoExtraLoadInfo
struct CreatureFamilyLoadInfo
{
- static constexpr DB2FieldMeta Fields[11] =
+ static constexpr DB2FieldMeta Fields[12] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
@@ -1468,12 +1481,13 @@ struct CreatureFamilyLoadInfo
{ .IsSigned = true, .Type = FT_BYTE, .Name = "MaxScaleLevel" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "PetFoodMask" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "PetTalentType" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "CategoryEnumID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "IconFileID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "SkillLine1" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "SkillLine2" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 11, &CreatureFamilyMeta::Instance, HOTFIX_SEL_CREATURE_FAMILY };
+ static constexpr DB2LoadInfo Instance{ Fields, 12, &CreatureFamilyMeta::Instance, HOTFIX_SEL_CREATURE_FAMILY };
};
struct CreatureLabelLoadInfo
@@ -1838,7 +1852,7 @@ struct EmotesTextSoundLoadInfo
struct ExpectedStatLoadInfo
{
- static constexpr DB2FieldMeta Fields[12] =
+ static constexpr DB2FieldMeta Fields[13] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ExpansionID" },
@@ -1851,10 +1865,11 @@ struct ExpectedStatLoadInfo
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "PlayerSecondaryStat" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "ArmorConstant" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "CreatureSpellDamage" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "ContentSetID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Lvl" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 12, &ExpectedStatMeta::Instance, HOTFIX_SEL_EXPECTED_STAT };
+ static constexpr DB2LoadInfo Instance{ Fields, 13, &ExpectedStatMeta::Instance, HOTFIX_SEL_EXPECTED_STAT };
};
struct ExpectedStatModLoadInfo
@@ -2667,7 +2682,7 @@ struct ItemLoadInfo
static constexpr DB2FieldMeta Fields[12] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
- { .IsSigned = false, .Type = FT_BYTE, .Name = "ClassID" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "ClassID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "SubclassID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Material" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "InventoryType" },
@@ -3232,16 +3247,17 @@ struct ItemSetLoadInfo
struct ItemSetSpellLoadInfo
{
- static constexpr DB2FieldMeta Fields[5] =
+ static constexpr DB2FieldMeta Fields[6] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "ChrSpecID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "SpellID" },
+ { .IsSigned = false, .Type = FT_SHORT, .Name = "TraitSubTreeID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Threshold" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ItemSetID" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 5, &ItemSetSpellMeta::Instance, HOTFIX_SEL_ITEM_SET_SPELL };
+ static constexpr DB2LoadInfo Instance{ Fields, 6, &ItemSetSpellMeta::Instance, HOTFIX_SEL_ITEM_SET_SPELL };
};
struct ItemSparseLoadInfo
@@ -3809,20 +3825,32 @@ struct MapLoadInfo
struct MapChallengeModeLoadInfo
{
- static constexpr DB2FieldMeta Fields[9] =
+ static constexpr DB2FieldMeta Fields[21] =
{
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "MapID" },
- { .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ExpansionLevel" },
{ .IsSigned = true, .Type = FT_INT, .Name = "RequiredWorldStateID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "CriteriaCount1" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "CriteriaCount2" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "CriteriaCount3" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "FirstRewardQuestID1" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "FirstRewardQuestID2" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "FirstRewardQuestID3" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "FirstRewardQuestID4" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "FirstRewardQuestID5" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "FirstRewardQuestID6" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "RewardQuestID1" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "RewardQuestID2" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "RewardQuestID3" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "RewardQuestID4" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "RewardQuestID5" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "RewardQuestID6" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 9, &MapChallengeModeMeta::Instance, HOTFIX_SEL_MAP_CHALLENGE_MODE };
+ static constexpr DB2LoadInfo Instance{ Fields, 21, &MapChallengeModeMeta::Instance, HOTFIX_SEL_MAP_CHALLENGE_MODE };
};
struct MapDifficultyLoadInfo
@@ -5131,8 +5159,8 @@ struct SpellCategoryLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
- { .IsSigned = false, .Type = FT_BYTE, .Name = "UsesPerWeek" },
- { .IsSigned = true, .Type = FT_BYTE, .Name = "MaxCharges" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "UsesPerWeek" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "MaxCharges" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ChargeRecoveryTime" },
{ .IsSigned = true, .Type = FT_INT, .Name = "TypeMask" },
};
@@ -5261,7 +5289,7 @@ struct SpellEquippedItemsLoadInfo
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "SpellID" },
- { .IsSigned = true, .Type = FT_BYTE, .Name = "EquippedItemClass" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "EquippedItemClass" },
{ .IsSigned = true, .Type = FT_INT, .Name = "EquippedItemInvTypes" },
{ .IsSigned = true, .Type = FT_INT, .Name = "EquippedItemSubclass" },
};
@@ -5783,18 +5811,22 @@ struct SpellVisualEffectNameLoadInfo
struct SpellVisualKitLoadInfo
{
- static constexpr DB2FieldMeta Fields[7] =
+ static constexpr DB2FieldMeta Fields[11] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ClutterLevel" },
{ .IsSigned = true, .Type = FT_INT, .Name = "FallbackSpellVisualKitId" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "DelayMin" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "DelayMax" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "MinimumSpellVisualDensityFilterType" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "MinimumSpellVisualDensityFilterParam" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "ReducedSpellVisualDensityFilterType" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "ReducedSpellVisualDensityFilterParam" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags1" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags2" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 7, &SpellVisualKitMeta::Instance, HOTFIX_SEL_SPELL_VISUAL_KIT };
+ static constexpr DB2LoadInfo Instance{ Fields, 11, &SpellVisualKitMeta::Instance, HOTFIX_SEL_SPELL_VISUAL_KIT };
};
struct SpellVisualMissileLoadInfo
@@ -6622,7 +6654,7 @@ struct UnitPowerBarLoadInfo
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "RegenerationPeace" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "RegenerationCombat" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "BarType" },
- { .IsSigned = false, .Type = FT_SHORT, .Name = "Flags" },
+ { .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "StartInset" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "EndInset" },
{ .IsSigned = true, .Type = FT_INT, .Name = "FileDataID1" },
@@ -6778,11 +6810,10 @@ struct VignetteLoadInfo
struct WarbandSceneLoadInfo
{
- static constexpr DB2FieldMeta Fields[19] =
+ static constexpr DB2FieldMeta Fields[17] =
{
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "Description" },
- { .IsSigned = false, .Type = FT_STRING, .Name = "Source" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "PositionX" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "PositionY" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "PositionZ" },
@@ -6798,10 +6829,9 @@ struct WarbandSceneLoadInfo
{ .IsSigned = true, .Type = FT_BYTE, .Name = "Quality" },
{ .IsSigned = true, .Type = FT_INT, .Name = "TextureKit" },
{ .IsSigned = true, .Type = FT_INT, .Name = "DefaultScenePriority" },
- { .IsSigned = true, .Type = FT_BYTE, .Name = "SourceType" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 19, &WarbandSceneMeta::Instance, HOTFIX_SEL_WARBAND_SCENE };
+ static constexpr DB2LoadInfo Instance{ Fields, 17, &WarbandSceneMeta::Instance, HOTFIX_SEL_WARBAND_SCENE };
};
struct WmoAreaTableLoadInfo
diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h
index 33da4246e1f..aa6cf7289bb 100644
--- a/src/server/game/DataStores/DB2Metadata.h
+++ b/src/server/game/DataStores/DB2Metadata.h
@@ -718,7 +718,7 @@ struct AnimationDataMeta
static constexpr DB2MetaField Fields[4] =
{
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 2, .IsSigned = true },
};
@@ -730,7 +730,7 @@ struct AnimationDataMeta
.ParentIndexField = -1,
.FieldCount = 4,
.FileFieldCount = 4,
- .LayoutHash = 0x18A959FC,
+ .LayoutHash = 0xBBF66A3C,
.Fields = Fields
};
};
@@ -1822,12 +1822,17 @@ struct BankBagSlotPricesMeta
struct BankTabMeta
{
- static constexpr DB2MetaField Fields[4] =
+ static constexpr DB2MetaField Fields[9] =
{
{ .Type = FT_LONG, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -1835,9 +1840,9 @@ struct BankTabMeta
.FileDataId = 5242411,
.IndexField = -1,
.ParentIndexField = -1,
- .FieldCount = 4,
- .FileFieldCount = 4,
- .LayoutHash = 0xD47B62CA,
+ .FieldCount = 9,
+ .FileFieldCount = 9,
+ .LayoutHash = 0x5B2F9B36,
.Fields = Fields
};
};
@@ -1848,7 +1853,7 @@ struct BannedAddonsMeta
{
{ .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true },
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -1858,7 +1863,7 @@ struct BannedAddonsMeta
.ParentIndexField = -1,
.FieldCount = 3,
.FileFieldCount = 3,
- .LayoutHash = 0xC7F734D9,
+ .LayoutHash = 0x56583F69,
.Fields = Fields
};
};
@@ -2778,13 +2783,14 @@ struct Cfg_GameRulesMeta
struct Cfg_RegionsMeta
{
- static constexpr DB2MetaField Fields[5] =
+ static constexpr DB2MetaField Fields[6] =
{
{ .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -2792,9 +2798,28 @@ struct Cfg_RegionsMeta
.FileDataId = 1082876,
.IndexField = -1,
.ParentIndexField = -1,
- .FieldCount = 5,
- .FileFieldCount = 5,
- .LayoutHash = 0x8CDAAC27,
+ .FieldCount = 6,
+ .FileFieldCount = 6,
+ .LayoutHash = 0xFB9CBD8A,
+ .Fields = Fields
+ };
+};
+
+struct Cfg_TimeEventRegionGroupMeta
+{
+ static constexpr DB2MetaField Fields[1] =
+ {
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ };
+
+ static constexpr DB2Meta Instance =
+ {
+ .FileDataId = 3055692,
+ .IndexField = -1,
+ .ParentIndexField = -1,
+ .FieldCount = 1,
+ .FileFieldCount = 1,
+ .LayoutHash = 0x5F8D94FE,
.Fields = Fields
};
};
@@ -2823,6 +2848,52 @@ struct ChallengeModeItemBonusOverrideMeta
};
};
+struct ChallengeModeRewardMeta
+{
+ static constexpr DB2MetaField Fields[8] =
+ {
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ };
+
+ static constexpr DB2Meta Instance =
+ {
+ .FileDataId = 6982016,
+ .IndexField = 0,
+ .ParentIndexField = -1,
+ .FieldCount = 8,
+ .FileFieldCount = 8,
+ .LayoutHash = 0xCBC6D48A,
+ .Fields = Fields
+ };
+};
+
+struct ChallengeModeXRewardMeta
+{
+ static constexpr DB2MetaField Fields[2] =
+ {
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ };
+
+ static constexpr DB2Meta Instance =
+ {
+ .FileDataId = 6984186,
+ .IndexField = -1,
+ .ParentIndexField = 1,
+ .FieldCount = 2,
+ .FileFieldCount = 1,
+ .LayoutHash = 0x186816F5,
+ .Fields = Fields
+ };
+};
+
struct CharBaseInfoMeta
{
static constexpr DB2MetaField Fields[3] =
@@ -3065,7 +3136,7 @@ struct CharTitlesMeta
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true },
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -3075,7 +3146,7 @@ struct CharTitlesMeta
.ParentIndexField = -1,
.FieldCount = 4,
.FileFieldCount = 4,
- .LayoutHash = 0x1EEF17FF,
+ .LayoutHash = 0x2F5DFF7F,
.Fields = Fields
};
};
@@ -3352,7 +3423,7 @@ struct ChrClassVillainMeta
struct ChrClassesMeta
{
- static constexpr DB2MetaField Fields[39] =
+ static constexpr DB2MetaField Fields[43] =
{
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true },
@@ -3369,6 +3440,7 @@ struct ChrClassesMeta
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
@@ -3383,6 +3455,7 @@ struct ChrClassesMeta
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
@@ -3393,16 +3466,18 @@ struct ChrClassesMeta
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
};
static constexpr DB2Meta Instance =
{
.FileDataId = 1361031,
- .IndexField = 28,
+ .IndexField = 29,
.ParentIndexField = -1,
- .FieldCount = 39,
- .FileFieldCount = 39,
- .LayoutHash = 0x03A0FD4D,
+ .FieldCount = 43,
+ .FileFieldCount = 43,
+ .LayoutHash = 0xAFC9B0C2,
.Fields = Fields
};
};
@@ -5523,7 +5598,7 @@ struct CreatureMeta
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 4, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 4, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 3, .IsSigned = true },
@@ -5536,7 +5611,7 @@ struct CreatureMeta
.ParentIndexField = -1,
.FieldCount = 11,
.FileFieldCount = 11,
- .LayoutHash = 0xAEA084C0,
+ .LayoutHash = 0x6E14C900,
.Fields = Fields
};
};
@@ -5549,7 +5624,7 @@ struct CreatureDifficultyMeta
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
- { .Type = FT_INT, .ArraySize = 8, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 9, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
@@ -5560,7 +5635,7 @@ struct CreatureDifficultyMeta
.ParentIndexField = 5,
.FieldCount = 6,
.FileFieldCount = 5,
- .LayoutHash = 0xFC42F936,
+ .LayoutHash = 0x29113DAF,
.Fields = Fields
};
};
@@ -5833,7 +5908,7 @@ struct CreatureDisplayXUIModelSceneMeta
struct CreatureFamilyMeta
{
- static constexpr DB2MetaField Fields[9] =
+ static constexpr DB2MetaField Fields[10] =
{
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
@@ -5843,6 +5918,7 @@ struct CreatureFamilyMeta
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_SHORT, .ArraySize = 2, .IsSigned = true },
};
@@ -5851,9 +5927,9 @@ struct CreatureFamilyMeta
.FileDataId = 1351351,
.IndexField = -1,
.ParentIndexField = -1,
- .FieldCount = 9,
- .FileFieldCount = 9,
- .LayoutHash = 0x4EBC1C18,
+ .FieldCount = 10,
+ .FileFieldCount = 10,
+ .LayoutHash = 0x7FE3CBA7,
.Fields = Fields
};
};
@@ -6387,7 +6463,7 @@ struct DeathThudLookupsMeta
struct DecalPropertiesMeta
{
- static constexpr DB2MetaField Fields[25] =
+ static constexpr DB2MetaField Fields[28] =
{
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
@@ -6411,6 +6487,9 @@ struct DecalPropertiesMeta
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 4, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 4, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 4, .IsSigned = true },
@@ -6421,9 +6500,9 @@ struct DecalPropertiesMeta
.FileDataId = 1278176,
.IndexField = -1,
.ParentIndexField = -1,
- .FieldCount = 25,
- .FileFieldCount = 25,
- .LayoutHash = 0x6F09046F,
+ .FieldCount = 28,
+ .FileFieldCount = 28,
+ .LayoutHash = 0xBED177F0,
.Fields = Fields
};
};
@@ -6984,7 +7063,7 @@ struct ExhaustionMeta
struct ExpectedStatMeta
{
- static constexpr DB2MetaField Fields[11] =
+ static constexpr DB2MetaField Fields[12] =
{
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
@@ -6997,16 +7076,17 @@ struct ExpectedStatMeta
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
{
.FileDataId = 1937326,
.IndexField = -1,
- .ParentIndexField = 10,
- .FieldCount = 11,
- .FileFieldCount = 10,
- .LayoutHash = 0xFD4F2D39,
+ .ParentIndexField = 11,
+ .FieldCount = 12,
+ .FileFieldCount = 11,
+ .LayoutHash = 0x0FD90F9C,
.Fields = Fields
};
};
@@ -10024,10 +10104,32 @@ struct HolidayNamesMeta
};
};
+struct HolidayXTimeEventMeta
+{
+ static constexpr DB2MetaField Fields[3] =
+ {
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ };
+
+ static constexpr DB2Meta Instance =
+ {
+ .FileDataId = 6905813,
+ .IndexField = -1,
+ .ParentIndexField = 2,
+ .FieldCount = 3,
+ .FileFieldCount = 2,
+ .LayoutHash = 0x3341B6A4,
+ .Fields = Fields
+ };
+};
+
struct HolidaysMeta
{
- static constexpr DB2MetaField Fields[11] =
+ static constexpr DB2MetaField Fields[12] =
{
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
@@ -10044,11 +10146,11 @@ struct HolidaysMeta
static constexpr DB2Meta Instance =
{
.FileDataId = 996357,
- .IndexField = -1,
+ .IndexField = 0,
.ParentIndexField = -1,
- .FieldCount = 11,
- .FileFieldCount = 11,
- .LayoutHash = 0xDB91019C,
+ .FieldCount = 12,
+ .FileFieldCount = 12,
+ .LayoutHash = 0xB3A34A20,
.Fields = Fields
};
};
@@ -10186,7 +10288,7 @@ struct ItemMeta
{
static constexpr DB2MetaField Fields[11] =
{
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
@@ -10206,7 +10308,7 @@ struct ItemMeta
.ParentIndexField = -1,
.FieldCount = 11,
.FileFieldCount = 11,
- .LayoutHash = 0xD43146DA,
+ .LayoutHash = 0x12C03F1A,
.Fields = Fields
};
};
@@ -11571,10 +11673,11 @@ struct ItemSetMeta
struct ItemSetSpellMeta
{
- static constexpr DB2MetaField Fields[4] =
+ static constexpr DB2MetaField Fields[5] =
{
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
@@ -11583,10 +11686,10 @@ struct ItemSetSpellMeta
{
.FileDataId = 1314689,
.IndexField = -1,
- .ParentIndexField = 3,
- .FieldCount = 4,
- .FileFieldCount = 3,
- .LayoutHash = 0xCDEF234D,
+ .ParentIndexField = 4,
+ .FieldCount = 5,
+ .FileFieldCount = 4,
+ .LayoutHash = 0x2666A73F,
.Fields = Fields
};
};
@@ -13180,25 +13283,6 @@ struct ManifestInterfaceItemIconMeta
};
};
-struct ManifestInterfaceTOCDataMeta
-{
- static constexpr DB2MetaField Fields[1] =
- {
- { .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true },
- };
-
- static constexpr DB2Meta Instance =
- {
- .FileDataId = 1267335,
- .IndexField = -1,
- .ParentIndexField = -1,
- .FieldCount = 1,
- .FileFieldCount = 1,
- .LayoutHash = 0x4AB64495,
- .Fields = Fields
- };
-};
-
struct MapMeta
{
static constexpr DB2MetaField Fields[25] =
@@ -13265,15 +13349,17 @@ struct MapCelestialBodyMeta
struct MapChallengeModeMeta
{
- static constexpr DB2MetaField Fields[7] =
+ static constexpr DB2MetaField Fields[9] =
{
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_SHORT, .ArraySize = 3, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 6, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 6, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -13281,9 +13367,9 @@ struct MapChallengeModeMeta
.FileDataId = 801709,
.IndexField = 1,
.ParentIndexField = 2,
- .FieldCount = 7,
- .FileFieldCount = 7,
- .LayoutHash = 0xC31A3CC1,
+ .FieldCount = 9,
+ .FileFieldCount = 9,
+ .LayoutHash = 0x531A0D41,
.Fields = Fields
};
};
@@ -13600,7 +13686,7 @@ struct ModelFileDataMeta
{
{ .Type = FT_FLOAT, .ArraySize = 6, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
};
@@ -13612,7 +13698,7 @@ struct ModelFileDataMeta
.ParentIndexField = 4,
.FieldCount = 5,
.FileFieldCount = 5,
- .LayoutHash = 0x1045BE38,
+ .LayoutHash = 0x2AE4E788,
.Fields = Fields
};
};
@@ -13771,7 +13857,7 @@ struct ModifiedCraftingReagentItemMeta
struct ModifiedCraftingReagentSlotMeta
{
- static constexpr DB2MetaField Fields[6] =
+ static constexpr DB2MetaField Fields[7] =
{
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
@@ -13779,6 +13865,7 @@ struct ModifiedCraftingReagentSlotMeta
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -13786,9 +13873,9 @@ struct ModifiedCraftingReagentSlotMeta
.FileDataId = 3386488,
.IndexField = 1,
.ParentIndexField = -1,
- .FieldCount = 6,
- .FileFieldCount = 6,
- .LayoutHash = 0x61863510,
+ .FieldCount = 7,
+ .FileFieldCount = 7,
+ .LayoutHash = 0x32F2149E,
.Fields = Fields
};
};
@@ -18402,7 +18489,7 @@ struct SoundKitMeta
struct SoundKitAdvancedMeta
{
- static constexpr DB2MetaField Fields[56] =
+ static constexpr DB2MetaField Fields[57] =
{
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
@@ -18427,6 +18514,7 @@ struct SoundKitAdvancedMeta
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
@@ -18467,9 +18555,9 @@ struct SoundKitAdvancedMeta
.FileDataId = 1237436,
.IndexField = -1,
.ParentIndexField = -1,
- .FieldCount = 56,
- .FileFieldCount = 56,
- .LayoutHash = 0x3EE0D3A8,
+ .FieldCount = 57,
+ .FileFieldCount = 57,
+ .LayoutHash = 0xF65DB810,
.Fields = Fields
};
};
@@ -19019,8 +19107,8 @@ struct SpellCategoryMeta
{
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
@@ -19032,7 +19120,7 @@ struct SpellCategoryMeta
.ParentIndexField = -1,
.FieldCount = 6,
.FileFieldCount = 6,
- .LayoutHash = 0x1691EA31,
+ .LayoutHash = 0xB79B78E1,
.Fields = Fields
};
};
@@ -19391,7 +19479,7 @@ struct SpellEffectMeta
.ParentIndexField = 28,
.FieldCount = 29,
.FileFieldCount = 28,
- .LayoutHash = 0xE745F803,
+ .LayoutHash = 0x239B1B53,
.Fields = Fields
};
};
@@ -19492,7 +19580,7 @@ struct SpellEquippedItemsMeta
static constexpr DB2MetaField Fields[4] =
{
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
@@ -19504,7 +19592,7 @@ struct SpellEquippedItemsMeta
.ParentIndexField = -1,
.FieldCount = 4,
.FileFieldCount = 4,
- .LayoutHash = 0xEB6AC546,
+ .LayoutHash = 0xD9177916,
.Fields = Fields
};
};
@@ -20455,12 +20543,16 @@ struct SpellVisualEventMeta
struct SpellVisualKitMeta
{
- static constexpr DB2MetaField Fields[5] =
+ static constexpr DB2MetaField Fields[9] =
{
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 2, .IsSigned = true },
};
@@ -20469,9 +20561,9 @@ struct SpellVisualKitMeta
.FileDataId = 897949,
.IndexField = -1,
.ParentIndexField = -1,
- .FieldCount = 5,
- .FileFieldCount = 5,
- .LayoutHash = 0x0B92E9E2,
+ .FieldCount = 9,
+ .FileFieldCount = 9,
+ .LayoutHash = 0x15838B24,
.Fields = Fields
};
};
@@ -20869,6 +20961,55 @@ struct TalentMeta
};
};
+struct TalentTabMeta
+{
+ static constexpr DB2MetaField Fields[10] =
+ {
+ { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 2, .IsSigned = true },
+ };
+
+ static constexpr DB2Meta Instance =
+ {
+ .FileDataId = 2178102,
+ .IndexField = -1,
+ .ParentIndexField = -1,
+ .FieldCount = 10,
+ .FileFieldCount = 10,
+ .LayoutHash = 0xB436F3C7,
+ .Fields = Fields
+ };
+};
+
+struct TalentTreePrimarySpellsMeta
+{
+ static constexpr DB2MetaField Fields[3] =
+ {
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ };
+
+ static constexpr DB2Meta Instance =
+ {
+ .FileDataId = 5581887,
+ .IndexField = -1,
+ .ParentIndexField = -1,
+ .FieldCount = 3,
+ .FileFieldCount = 3,
+ .LayoutHash = 0x0C4D9DD6,
+ .Fields = Fields
+ };
+};
+
struct TaxiNodesMeta
{
static constexpr DB2MetaField Fields[15] =
@@ -21090,7 +21231,7 @@ struct TierTransitionMeta
{
static constexpr DB2MetaField Fields[4] =
{
- { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
@@ -21103,7 +21244,28 @@ struct TierTransitionMeta
.ParentIndexField = -1,
.FieldCount = 4,
.FileFieldCount = 4,
- .LayoutHash = 0x2591A17F,
+ .LayoutHash = 0x6019C9CF,
+ .Fields = Fields
+ };
+};
+
+struct TimeEventDataMeta
+{
+ static constexpr DB2MetaField Fields[3] =
+ {
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ };
+
+ static constexpr DB2Meta Instance =
+ {
+ .FileDataId = 3055910,
+ .IndexField = -1,
+ .ParentIndexField = 1,
+ .FieldCount = 3,
+ .FileFieldCount = 3,
+ .LayoutHash = 0x3E90B195,
.Fields = Fields
};
};
@@ -21661,11 +21823,12 @@ struct TraitSubTreeMeta
struct TraitSystemMeta
{
- static constexpr DB2MetaField Fields[3] =
+ static constexpr DB2MetaField Fields[4] =
{
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -21673,9 +21836,9 @@ struct TraitSystemMeta
.FileDataId = 4635649,
.IndexField = 0,
.ParentIndexField = -1,
- .FieldCount = 3,
- .FileFieldCount = 3,
- .LayoutHash = 0x46225291,
+ .FieldCount = 4,
+ .FileFieldCount = 4,
+ .LayoutHash = 0xB304261C,
.Fields = Fields
};
};
@@ -22304,7 +22467,7 @@ struct UIEventToastMeta
struct UIExpansionDisplayInfoMeta
{
- static constexpr DB2MetaField Fields[6] =
+ static constexpr DB2MetaField Fields[7] =
{
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
@@ -22312,6 +22475,7 @@ struct UIExpansionDisplayInfoMeta
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
@@ -22319,9 +22483,9 @@ struct UIExpansionDisplayInfoMeta
.FileDataId = 1729547,
.IndexField = 0,
.ParentIndexField = -1,
- .FieldCount = 6,
- .FileFieldCount = 6,
- .LayoutHash = 0x4C41293C,
+ .FieldCount = 7,
+ .FileFieldCount = 7,
+ .LayoutHash = 0x788C5B88,
.Fields = Fields
};
};
@@ -23557,7 +23721,7 @@ struct UnitPowerBarMeta
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
- { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 6, .IsSigned = true },
@@ -23571,7 +23735,7 @@ struct UnitPowerBarMeta
.ParentIndexField = -1,
.FieldCount = 16,
.FileFieldCount = 16,
- .LayoutHash = 0x9840FB71,
+ .LayoutHash = 0x9F140C01,
.Fields = Fields
};
};
@@ -23968,13 +24132,35 @@ struct WMOMinimapTextureMeta
};
};
+struct WarbandPlacementDisplayInfoMeta
+{
+ static constexpr DB2MetaField Fields[5] =
+ {
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ };
+
+ static constexpr DB2Meta Instance =
+ {
+ .FileDataId = 6655794,
+ .IndexField = -1,
+ .ParentIndexField = 0,
+ .FieldCount = 5,
+ .FileFieldCount = 5,
+ .LayoutHash = 0x2998B81D,
+ .Fields = Fields
+ };
+};
+
struct WarbandSceneMeta
{
- static constexpr DB2MetaField Fields[15] =
+ static constexpr DB2MetaField Fields[13] =
{
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
- { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
@@ -23986,17 +24172,16 @@ struct WarbandSceneMeta
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
- { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
};
static constexpr DB2Meta Instance =
{
.FileDataId = 5736126,
- .IndexField = 5,
- .ParentIndexField = 6,
- .FieldCount = 15,
- .FileFieldCount = 15,
- .LayoutHash = 0xF0593458,
+ .IndexField = 4,
+ .ParentIndexField = 5,
+ .FieldCount = 13,
+ .FileFieldCount = 13,
+ .LayoutHash = 0xDF56107A,
.Fields = Fields
};
};
@@ -24146,6 +24331,28 @@ struct WarbandScenePlcmntAnimOverrideMeta
};
};
+struct WarbandSceneSourceInfoMeta
+{
+ static constexpr DB2MetaField Fields[4] =
+ {
+ { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = false },
+ { .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
+ { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true },
+ };
+
+ static constexpr DB2Meta Instance =
+ {
+ .FileDataId = 6388961,
+ .IndexField = 1,
+ .ParentIndexField = 2,
+ .FieldCount = 4,
+ .FileFieldCount = 4,
+ .LayoutHash = 0xEB093F55,
+ .Fields = Fields
+ };
+};
+
struct WaterfallDataMeta
{
static constexpr DB2MetaField Fields[19] =
@@ -24453,7 +24660,7 @@ struct WeatherMeta
.ParentIndexField = -1,
.FieldCount = 23,
.FileFieldCount = 23,
- .LayoutHash = 0x62855DFC,
+ .LayoutHash = 0x1628B83C,
.Fields = Fields
};
};
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index 0d26fbf5529..514cf7f9396 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -73,7 +73,7 @@ DB2Storage<AzeritePowerSetMemberEntry> sAzeritePowerSetMemberStore("Aze
DB2Storage<AzeriteTierUnlockEntry> sAzeriteTierUnlockStore("AzeriteTierUnlock.db2", &AzeriteTierUnlockLoadInfo::Instance);
DB2Storage<AzeriteTierUnlockSetEntry> sAzeriteTierUnlockSetStore("AzeriteTierUnlockSet.db2", &AzeriteTierUnlockSetLoadInfo::Instance);
DB2Storage<AzeriteUnlockMappingEntry> sAzeriteUnlockMappingStore("AzeriteUnlockMapping.db2", &AzeriteUnlockMappingLoadInfo::Instance);
-DB2Storage<BankBagSlotPricesEntry> sBankBagSlotPricesStore("BankBagSlotPrices.db2", &BankBagSlotPricesLoadInfo::Instance);
+DB2Storage<BankTabEntry> sBankTabStore("BankTab.db2", &BankTabLoadInfo::Instance);
DB2Storage<BannedAddonsEntry> sBannedAddonsStore("BannedAddons.db2", &BannedAddonsLoadInfo::Instance);
DB2Storage<BarberShopStyleEntry> sBarberShopStyleStore("BarberShopStyle.db2", &BarberShopStyleLoadInfo::Instance);
DB2Storage<BattlePetAbilityEntry> sBattlePetAbilityStore("BattlePetAbility.db2", &BattlePetAbilityLoadInfo::Instance);
@@ -699,7 +699,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
LOAD_DB2(sAzeriteTierUnlockStore);
LOAD_DB2(sAzeriteTierUnlockSetStore);
LOAD_DB2(sAzeriteUnlockMappingStore);
- LOAD_DB2(sBankBagSlotPricesStore);
+ LOAD_DB2(sBankTabStore);
LOAD_DB2(sBannedAddonsStore);
LOAD_DB2(sBarberShopStyleStore);
LOAD_DB2(sBattlePetAbilityStore);
@@ -1034,14 +1034,16 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
}
// Check loaded DB2 files proper version
- if (!sAreaTableStore.LookupEntry(16108) || // last area added in 11.0.7 (58162)
- !sCharTitlesStore.LookupEntry(876) || // last char title added in 11.0.7 (58162)
+ if (!sAreaTableStore.LookupEntry(16579) || // last area added in 11.2.0 (62213)
+ !sCharTitlesStore.LookupEntry(937) || // last char title added in 11.2.0 (62213)
!sFlightCapabilityStore.LookupEntry(1) || // default flight capability (required)
- !sGemPropertiesStore.LookupEntry(4266) || // last gem property added in 11.0.7 (58162)
- !sItemStore.LookupEntry(235551) || // last item added in 11.0.7 (58162)
- !sItemExtendedCostStore.LookupEntry(9918) || // last item extended cost added in 11.0.7 (58162)
- !sMapStore.LookupEntry(2829) || // last map added in 11.0.7 (58162)
- !sSpellNameStore.LookupEntry(1218101)) // last spell added in 11.0.7 (58162)
+ !sGemPropertiesStore.LookupEntry(4287) || // last gem property added in 11.2.0 (62213)
+ !sItemStore.LookupEntry(252009) || // last item added in 11.2.0 (62213)
+ !sItemSparseStore.LookupEntry(ITEM_ACCOUNT_BANK_TAB_BAG) ||
+ !sItemSparseStore.LookupEntry(ITEM_CHARACTER_BANK_TAB_BAG) ||
+ !sItemExtendedCostStore.LookupEntry(10637) || // last item extended cost added in 11.2.0 (62213)
+ !sMapStore.LookupEntry(2951) || // last map added in 11.2.0 (62213)
+ !sSpellNameStore.LookupEntry(1254022)) // last spell added in 11.2.0 (62213)
{
TC_LOG_FATAL("misc", "You have _outdated_ DB2 files. Please extract correct versions from current using client.");
return 0;
diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h
index b90d247c83a..f5bef9577af 100644
--- a/src/server/game/DataStores/DB2Stores.h
+++ b/src/server/game/DataStores/DB2Stores.h
@@ -56,7 +56,7 @@ TC_GAME_API extern DB2Storage<AzeriteItemMilestonePowerEntry> sAzeriteItem
TC_GAME_API extern DB2Storage<AzeriteLevelInfoEntry> sAzeriteLevelInfoStore;
TC_GAME_API extern DB2Storage<AzeritePowerEntry> sAzeritePowerStore;
TC_GAME_API extern DB2Storage<AzeriteUnlockMappingEntry> sAzeriteUnlockMappingStore;
-TC_GAME_API extern DB2Storage<BankBagSlotPricesEntry> sBankBagSlotPricesStore;
+TC_GAME_API extern DB2Storage<BankTabEntry> sBankTabStore;
TC_GAME_API extern DB2Storage<BannedAddonsEntry> sBannedAddonsStore;
TC_GAME_API extern DB2Storage<BarberShopStyleEntry> sBarberShopStyleStore;
TC_GAME_API extern DB2Storage<BattlePetAbilityEntry> sBattlePetAbilityStore;
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index 3fe06f40106..c1f86a09c61 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -102,7 +102,7 @@ struct AnimationDataEntry
{
uint32 ID;
uint16 Fallback;
- uint8 BehaviorTier;
+ int8 BehaviorTier;
int16 BehaviorID;
std::array<int32, 2> Flags;
};
@@ -425,10 +425,18 @@ struct AzeriteUnlockMappingEntry
uint32 AzeriteUnlockMappingSetID;
};
-struct BankBagSlotPricesEntry
+struct BankTabEntry
{
uint32 ID;
- uint32 Cost;
+ uint64 Cost;
+ uint8 BankType;
+ int8 OrderIndex;
+ int32 PlayerConditionID;
+ int32 PurchasePromptTitle;
+ int32 PurchasePromptBody;
+ int32 PurchasePromptConfirmation;
+ int32 TabCleanupConfirmation;
+ int32 TabNameEditBoxHeader;
};
struct BannedAddonsEntry
@@ -436,7 +444,7 @@ struct BannedAddonsEntry
uint32 ID;
char const* Name;
char const* Version;
- uint8 Flags;
+ int32 Flags;
};
struct BarberShopStyleEntry
@@ -585,6 +593,7 @@ struct Cfg_RegionsEntry
uint32 Raidorigin; // Date of first raid reset, all other resets are calculated as this date plus interval
uint8 RegionGroupMask;
uint32 ChallengeOrigin;
+ int32 TimeEventRegionGroupID;
};
struct ChallengeModeItemBonusOverrideEntry
@@ -612,7 +621,7 @@ struct CharTitlesEntry
LocalizedString Name;
LocalizedString Name1;
int16 MaskID;
- int8 Flags;
+ int32 Flags;
};
struct CharacterLoadoutEntry
@@ -671,6 +680,7 @@ struct ChrClassesEntry
uint32 IconFileDataID;
uint32 LowResScreenFileDataID;
int32 Flags;
+ int32 StartingLevel;
uint32 SpellTextureBlobFileDataID;
uint32 ArmorTypeMask;
int32 CharStartKitUnknown901;
@@ -685,6 +695,7 @@ struct ChrClassesEntry
uint16 CinematicSequenceID;
uint16 DefaultSpec;
uint8 ID;
+ uint8 HasStrengthBonus;
int8 PrimaryStatPriority;
int8 DisplayPower;
uint8 RangedAttackPowerPerAgility;
@@ -695,6 +706,8 @@ struct ChrClassesEntry
uint8 ClassColorG;
uint8 ClassColorB;
uint8 RolesMask;
+ uint8 DamageBonusStat;
+ uint8 HasRelicSlot;
};
struct ChrClassesXPowerTypesEntry
@@ -1025,7 +1038,7 @@ struct CraftingQualityEntry
// int32 LevelDeltaMax;
// uint16 FactionID;
// int32 ContentTuningID;
-// int32 Flags[8];
+// int32 Flags[9];
// uint32 CreatureID;
//};
@@ -1082,6 +1095,7 @@ struct CreatureFamilyEntry
int8 MaxScaleLevel;
int16 PetFoodMask;
int8 PetTalentType;
+ int32 CategoryEnumID;
int32 IconFileID;
std::array<int16, 2> SkillLine;
};
@@ -1344,6 +1358,9 @@ struct CriteriaEntry
// CriteriaType::MythicPlusRatingAttained = 230
int32 DungeonScore;
+ // CriteriaType::BankTabPurchased = 260
+ int32 BankType;
+
// CriteriaType::LearnTaxiNode = 262
int32 TaxiNodesID;
} Asset;
@@ -1599,6 +1616,7 @@ struct ExpectedStatEntry
float PlayerSecondaryStat;
float ArmorConstant;
float CreatureSpellDamage;
+ int32 ContentSetID;
uint32 Lvl;
};
@@ -2162,7 +2180,7 @@ struct ImportPriceWeaponEntry
struct ItemEntry
{
uint32 ID;
- uint8 ClassID;
+ int32 ClassID;
uint8 SubclassID;
uint8 Material;
int8 InventoryType;
@@ -2494,6 +2512,7 @@ struct ItemSetSpellEntry
uint32 ID;
uint16 ChrSpecID;
uint32 SpellID;
+ uint16 TraitSubTreeID;
uint8 Threshold;
uint32 ItemSetID;
};
@@ -2861,6 +2880,7 @@ struct MapEntry
case 1643:
case 2222:
case 2444:
+ case 2601:
return true;
default:
return false;
@@ -2888,10 +2908,12 @@ struct MapChallengeModeEntry
LocalizedString Name;
uint32 ID;
uint16 MapID;
- uint8 Flags;
+ int32 Flags;
uint32 ExpansionLevel;
int32 RequiredWorldStateID; // maybe?
std::array<int16, 3> CriteriaCount;
+ std::array<int32, 6> FirstRewardQuestID;
+ std::array<int32, 6> RewardQuestID;
};
struct MapDifficultyEntry
@@ -3743,8 +3765,8 @@ struct SpellCategoryEntry
uint32 ID;
LocalizedString Name;
int32 Flags;
- uint8 UsesPerWeek;
- int8 MaxCharges;
+ int32 UsesPerWeek;
+ int32 MaxCharges;
int32 ChargeRecoveryTime;
int32 TypeMask;
};
@@ -3831,7 +3853,7 @@ struct SpellEquippedItemsEntry
{
uint32 ID;
int32 SpellID;
- int8 EquippedItemClass;
+ int32 EquippedItemClass;
int32 EquippedItemInvTypes;
int32 EquippedItemSubclass;
};
@@ -4149,6 +4171,10 @@ struct SpellVisualKitEntry
int32 FallbackSpellVisualKitId;
uint16 DelayMin;
uint16 DelayMax;
+ int32 MinimumSpellVisualDensityFilterType;
+ int32 MinimumSpellVisualDensityFilterParam;
+ int32 ReducedSpellVisualDensityFilterType;
+ int32 ReducedSpellVisualDensityFilterParam;
std::array<int32, 2> Flags;
};
@@ -4707,7 +4733,7 @@ struct UnitPowerBarEntry
float RegenerationPeace;
float RegenerationCombat;
uint8 BarType;
- uint16 Flags;
+ int32 Flags;
float StartInset;
float EndInset;
std::array<int32, 6> FileDataID;
@@ -4841,7 +4867,6 @@ struct WarbandSceneEntry
{
LocalizedString Name;
LocalizedString Description;
- LocalizedString Source;
DBCPosition3D Position;
DBCPosition3D LookAt;
uint32 ID;
@@ -4853,7 +4878,6 @@ struct WarbandSceneEntry
int8 Quality;
int32 TextureKit;
int32 DefaultScenePriority;
- int8 SourceType;
EnumFlag<WarbandSceneFlags> GetFlags() const { return static_cast<WarbandSceneFlags>(Flags); }
};
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index 518f6ed81df..a0b47fd550f 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -791,11 +791,11 @@ enum class CriteriaType : int16
CompleteQuestsCountOnAccount = 257, /*NYI*/
- WarbandBankTabPurchased = 260, /*NYI*/
+ BankTabPurchased = 260, // Bank Tab Purchased in {#BankType}
ReachRenownLevel = 261,
LearnTaxiNode = 262,
- Count = 264
+ Count = 270
};
enum class CriteriaTreeFlags : uint16
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
index 868ad6fbbc1..f1bff65dc63 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
@@ -24,6 +24,8 @@
#include "Containers.h"
#include "CreatureAISelector.h"
#include "DB2Stores.h"
+#include "G3DPosition.hpp"
+#include "GameTime.h"
#include "GridNotifiersImpl.h"
#include "Language.h"
#include "Log.h"
@@ -46,15 +48,14 @@
#include <bit>
AreaTrigger::AreaTrigger() : WorldObject(false), MapObject(), _spawnId(0), _aurEff(nullptr),
- _duration(0), _totalDuration(0), _timeSinceCreated(0), _verticesUpdatePreviousOrientation(std::numeric_limits<float>::infinity()),
- _isRemoved(false), _reachedDestination(true), _lastSplineIndex(0), _movementTime(0),
+ _duration(0), _totalDuration(0), _verticesUpdatePreviousOrientation(std::numeric_limits<float>::infinity()),
+ _isRemoved(false), _reachedDestination(true), _lastSplineIndex(0),
_areaTriggerCreateProperties(nullptr), _areaTriggerTemplate(nullptr)
{
m_objectType |= TYPEMASK_AREATRIGGER;
m_objectTypeId = TYPEID_AREATRIGGER;
m_updateFlag.Stationary = true;
- m_updateFlag.AreaTrigger = true;
m_entityFragments.Add(WowCS::EntityFragment::Tag_AreaTrigger, false);
}
@@ -146,7 +147,7 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
SetObjectScale(1.0f);
SetDuration(duration);
- _shape = GetCreateProperties()->Shape;
+ SetShape(GetCreateProperties()->Shape);
auto areaTriggerData = m_values.ModifyValue(&AreaTrigger::m_areaTriggerData);
if (caster)
@@ -199,6 +200,33 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
if (GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::VisualAnimIsDecay))
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::VisualAnim).ModifyValue(&UF::VisualAnim::IsDecay), true);
+ AreaTriggerFieldFlags fieldFlags = [flags = GetCreateProperties()->Flags]()
+ {
+ AreaTriggerFieldFlags fieldFlags = AreaTriggerFieldFlags::None;
+ if (flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation))
+ fieldFlags |= AreaTriggerFieldFlags::AbsoluteOrientation;
+ if (flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasDynamicShape))
+ fieldFlags |= AreaTriggerFieldFlags::DynamicShape;
+ if (flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAttached))
+ fieldFlags |= AreaTriggerFieldFlags::Attached;
+ if (flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasFaceMovementDir))
+ fieldFlags |= AreaTriggerFieldFlags::FaceMovementDir;
+ if (flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasFollowsTerrain))
+ fieldFlags |= AreaTriggerFieldFlags::FollowsTerrain;
+ if (flags.HasFlag(AreaTriggerCreatePropertiesFlag::AlwaysExterior))
+ fieldFlags |= AreaTriggerFieldFlags::AlwaysExterior;
+ return fieldFlags;
+ }();
+ ReplaceAllAreaTriggerFlags(fieldFlags);
+
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::MovementStartTime), GameTime::GetGameTimeMS());
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::CreationTime), GameTime::GetGameTimeMS());
+
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ScaleCurveId), GetCreateProperties()->ScaleCurveId);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::FacingCurveId), GetCreateProperties()->FacingCurveId);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::MorphCurveId), GetCreateProperties()->MorphCurveId);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::MoveCurveId), GetCreateProperties()->MoveCurveId);
+
if (caster)
PhasingHandler::InheritPhaseShift(this, caster);
else if (IsStaticSpawn() && spawnData)
@@ -207,7 +235,7 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
PhasingHandler::InitDbPhaseShift(GetPhaseShift(), spawnData->phaseUseFlags, spawnData->phaseId, spawnData->phaseGroup);
}
- if (target && GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAttached))
+ if (target && HasAreaTriggerFlag(AreaTriggerFieldFlags::Attached))
m_movementInfo.transport.guid = target->GetGUID();
if (!IsStaticSpawn())
@@ -218,7 +246,7 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
if (GetCreateProperties()->OrbitInfo)
{
AreaTriggerOrbitInfo orbit = *GetCreateProperties()->OrbitInfo;
- if (target && GetCreateProperties() && GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAttached))
+ if (target && HasAreaTriggerFlag(AreaTriggerFieldFlags::Attached))
orbit.PathTarget = target->GetGUID();
else
orbit.Center = pos;
@@ -229,6 +257,10 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
{
InitSplineOffsets(GetCreateProperties()->SplinePoints);
}
+ else
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), int32(AreaTriggerPathType::None));
+
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::Facing), _stationaryPosition.GetOrientation());
// movement on transport of areatriggers on unit is handled by themself
TransportBase* transport = nullptr;
@@ -307,7 +339,6 @@ bool AreaTrigger::LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool /*addTo
void AreaTrigger::Update(uint32 diff)
{
WorldObject::Update(diff);
- _timeSinceCreated += diff;
if (!IsStaticSpawn())
{
@@ -318,18 +349,17 @@ void AreaTrigger::Update(uint32 diff)
}
else if (HasOrbit())
{
- UpdateOrbitPosition(*std::get<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement), diff);
+ UpdateOrbitPosition();
}
- else if (GetCreateProperties() && GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAttached))
+ else if (HasAreaTriggerFlag(AreaTriggerFieldFlags::Attached))
{
if (Unit* target = GetTarget())
{
float orientation = 0.0f;
- if (AreaTriggerCreateProperties const* createProperties = GetCreateProperties())
- if (createProperties->FacingCurveId)
- orientation = sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress());
+ if (m_areaTriggerData->FacingCurveId)
+ orientation = sDB2Manager.GetCurveValueAt(m_areaTriggerData->FacingCurveId, GetProgress());
- if (!GetCreateProperties() || !GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation))
+ if (!HasAreaTriggerFlag(AreaTriggerFieldFlags::AbsoluteOrientation))
orientation += target->GetOrientation();
GetMap()->AreaTriggerRelocation(this, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), orientation);
@@ -337,20 +367,17 @@ void AreaTrigger::Update(uint32 diff)
}
else if (HasSplines())
{
- UpdateSplinePosition(*std::get<std::unique_ptr<::Movement::Spline<float>>>(_movement), diff);
+ UpdateSplinePosition(*_spline);
}
else
{
- if (AreaTriggerCreateProperties const* createProperties = GetCreateProperties())
+ if (m_areaTriggerData->FacingCurveId)
{
- if (createProperties->FacingCurveId)
- {
- float orientation = sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress());
- if (!GetCreateProperties() || !GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation))
- orientation += _stationaryPosition.GetOrientation();
+ float orientation = sDB2Manager.GetCurveValueAt(m_areaTriggerData->FacingCurveId, GetProgress());
+ if (!HasAreaTriggerFlag(AreaTriggerFieldFlags::AbsoluteOrientation))
+ orientation += m_areaTriggerData->Facing;
- SetOrientation(orientation);
- }
+ SetOrientation(orientation);
}
UpdateShape();
@@ -381,6 +408,14 @@ void AreaTrigger::Remove()
}
}
+uint32 AreaTrigger::GetTimeSinceCreated() const
+{
+ uint32 now = GameTime::GetGameTimeMS();
+ if (now >= *m_areaTriggerData->CreationTime)
+ return now - *m_areaTriggerData->CreationTime;
+ return 0;
+}
+
void AreaTrigger::SetOverrideScaleCurve(float overrideScale)
{
SetScaleCurve(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::OverrideScaleCurve), overrideScale);
@@ -467,9 +502,8 @@ float AreaTrigger::CalcCurrentScale() const
float scale = 1.0f;
if (m_areaTriggerData->OverrideScaleCurve->OverrideActive)
scale *= std::max(GetScaleCurveValue(*m_areaTriggerData->OverrideScaleCurve, m_areaTriggerData->TimeToTargetScale), 0.000001f);
- else if (AreaTriggerCreateProperties const* createProperties = GetCreateProperties())
- if (createProperties->ScaleCurveId)
- scale *= std::max(sDB2Manager.GetCurveValueAt(createProperties->ScaleCurveId, GetScaleCurveProgress(*m_areaTriggerData->OverrideScaleCurve, m_areaTriggerData->TimeToTargetScale)), 0.000001f);
+ else if (m_areaTriggerData->ScaleCurveId)
+ scale *= std::max(sDB2Manager.GetCurveValueAt(m_areaTriggerData->ScaleCurveId, GetScaleCurveProgress(*m_areaTriggerData->OverrideScaleCurve, m_areaTriggerData->TimeToTargetScale)), 0.000001f);
scale *= std::max(GetScaleCurveValue(*m_areaTriggerData->ExtraScaleCurve, m_areaTriggerData->TimeToTargetExtraScale), 0.000001f);
@@ -609,29 +643,21 @@ void AreaTrigger::UpdateTargetList()
{
std::vector<Unit*> targetList;
- switch (_shape.Type)
+ m_areaTriggerData->ShapeData.Visit([&]<typename ShapeType>(ShapeType const& shape)
{
- case AreaTriggerShapeType::Sphere:
- SearchUnitInSphere(targetList);
- break;
- case AreaTriggerShapeType::Box:
- SearchUnitInBox(targetList);
- break;
- case AreaTriggerShapeType::Polygon:
- SearchUnitInPolygon(targetList);
- break;
- case AreaTriggerShapeType::Cylinder:
- SearchUnitInCylinder(targetList);
- break;
- case AreaTriggerShapeType::Disk:
- SearchUnitInDisk(targetList);
- break;
- case AreaTriggerShapeType::BoundedPlane:
- SearchUnitInBoundedPlane(targetList);
- break;
- default:
- break;
- }
+ if constexpr (std::is_same_v<ShapeType, UF::AreaTriggerSphere>)
+ this->SearchUnitInSphere(shape, targetList);
+ else if constexpr (std::is_same_v<ShapeType, UF::AreaTriggerBox>)
+ this->SearchUnitInBox(shape, targetList);
+ else if constexpr (std::is_same_v<ShapeType, UF::AreaTriggerPolygon>)
+ this->SearchUnitInPolygon(shape, targetList);
+ else if constexpr (std::is_same_v<ShapeType, UF::AreaTriggerCylinder>)
+ this->SearchUnitInCylinder(shape, targetList);
+ else if constexpr (std::is_same_v<ShapeType, UF::AreaTriggerDisk>)
+ this->SearchUnitInDisk(shape, targetList);
+ else if constexpr (std::is_same_v<ShapeType, UF::AreaTriggerBoundedPlane>)
+ this->SearchUnitInBoundedPlane(shape, targetList);
+ });
if (GetTemplate())
{
@@ -704,30 +730,28 @@ void AreaTrigger::SearchUnits(std::vector<Unit*>& targetList, float radius, bool
}
}
-void AreaTrigger::SearchUnitInSphere(std::vector<Unit*>& targetList)
+void AreaTrigger::SearchUnitInSphere(UF::AreaTriggerSphere const& sphere, std::vector<Unit*>& targetList)
{
float progress = GetProgress();
- if (AreaTriggerCreateProperties const* createProperties = GetCreateProperties())
- if (createProperties->MorphCurveId)
- progress = sDB2Manager.GetCurveValueAt(createProperties->MorphCurveId, progress);
+ if (m_areaTriggerData->MorphCurveId)
+ progress = sDB2Manager.GetCurveValueAt(m_areaTriggerData->MorphCurveId, progress);
float scale = CalcCurrentScale();
- float radius = G3D::lerp(_shape.SphereDatas.Radius, _shape.SphereDatas.RadiusTarget, progress) * scale;
+ float radius = G3D::lerp(sphere.Radius, sphere.RadiusTarget, progress) * scale;
SearchUnits(targetList, radius, true);
}
-void AreaTrigger::SearchUnitInBox(std::vector<Unit*>& targetList)
+void AreaTrigger::SearchUnitInBox(UF::AreaTriggerBox const& box, std::vector<Unit*>& targetList)
{
float progress = GetProgress();
- if (AreaTriggerCreateProperties const* createProperties = GetCreateProperties())
- if (createProperties->MorphCurveId)
- progress = sDB2Manager.GetCurveValueAt(createProperties->MorphCurveId, progress);
+ if (m_areaTriggerData->MorphCurveId)
+ progress = sDB2Manager.GetCurveValueAt(m_areaTriggerData->MorphCurveId, progress);
float scale = CalcCurrentScale();
- float extentsX = G3D::lerp(_shape.BoxDatas.Extents[0], _shape.BoxDatas.ExtentsTarget[0], progress) * scale;
- float extentsY = G3D::lerp(_shape.BoxDatas.Extents[1], _shape.BoxDatas.ExtentsTarget[1], progress) * scale;
- float extentsZ = G3D::lerp(_shape.BoxDatas.Extents[2], _shape.BoxDatas.ExtentsTarget[2], progress) * scale;
+ float extentsX = G3D::lerp(box.Extents->Pos.GetPositionX(), box.ExtentsTarget->Pos.GetPositionX(), progress) * scale;
+ float extentsY = G3D::lerp(box.Extents->Pos.GetPositionY(), box.ExtentsTarget->Pos.GetPositionY(), progress) * scale;
+ float extentsZ = G3D::lerp(box.Extents->Pos.GetPositionZ(), box.ExtentsTarget->Pos.GetPositionZ(), progress) * scale;
float radius = std::sqrt(extentsX * extentsX + extentsY * extentsY);
SearchUnits(targetList, radius, false);
@@ -739,14 +763,13 @@ void AreaTrigger::SearchUnitInBox(std::vector<Unit*>& targetList)
});
}
-void AreaTrigger::SearchUnitInPolygon(std::vector<Unit*>& targetList)
+void AreaTrigger::SearchUnitInPolygon(UF::AreaTriggerPolygon const& polygon, std::vector<Unit*>& targetList)
{
float progress = GetProgress();
- if (AreaTriggerCreateProperties const* createProperties = GetCreateProperties())
- if (createProperties->MorphCurveId)
- progress = sDB2Manager.GetCurveValueAt(createProperties->MorphCurveId, progress);
+ if (m_areaTriggerData->MorphCurveId)
+ progress = sDB2Manager.GetCurveValueAt(m_areaTriggerData->MorphCurveId, progress);
- float height = G3D::lerp(_shape.PolygonDatas.Height, _shape.PolygonDatas.HeightTarget, progress);
+ float height = G3D::lerp(polygon.Height, polygon.HeightTarget, progress);
float minZ = GetPositionZ() - height;
float maxZ = GetPositionZ() + height;
@@ -760,17 +783,16 @@ void AreaTrigger::SearchUnitInPolygon(std::vector<Unit*>& targetList)
});
}
-void AreaTrigger::SearchUnitInCylinder(std::vector<Unit*>& targetList)
+void AreaTrigger::SearchUnitInCylinder(UF::AreaTriggerCylinder const& cylinder, std::vector<Unit*>& targetList)
{
float progress = GetProgress();
- if (AreaTriggerCreateProperties const* createProperties = GetCreateProperties())
- if (createProperties->MorphCurveId)
- progress = sDB2Manager.GetCurveValueAt(createProperties->MorphCurveId, progress);
+ if (m_areaTriggerData->MorphCurveId)
+ progress = sDB2Manager.GetCurveValueAt(m_areaTriggerData->MorphCurveId, progress);
float scale = CalcCurrentScale();
- float radius = G3D::lerp(_shape.CylinderDatas.Radius, _shape.CylinderDatas.RadiusTarget, progress) * scale;
- float height = G3D::lerp(_shape.CylinderDatas.Height, _shape.CylinderDatas.HeightTarget, progress);
- if (!m_areaTriggerData->HeightIgnoresScale)
+ float radius = G3D::lerp(cylinder.Radius, cylinder.RadiusTarget, progress) * scale;
+ float height = G3D::lerp(cylinder.Height, cylinder.HeightTarget, progress);
+ if (!HasAreaTriggerFlag(AreaTriggerFieldFlags::HeightIgnoresScale))
height *= scale;
float minZ = GetPositionZ() - height;
@@ -785,18 +807,17 @@ void AreaTrigger::SearchUnitInCylinder(std::vector<Unit*>& targetList)
});
}
-void AreaTrigger::SearchUnitInDisk(std::vector<Unit*>& targetList)
+void AreaTrigger::SearchUnitInDisk(UF::AreaTriggerDisk const& disk, std::vector<Unit*>& targetList)
{
float progress = GetProgress();
- if (AreaTriggerCreateProperties const* createProperties = GetCreateProperties())
- if (createProperties->MorphCurveId)
- progress = sDB2Manager.GetCurveValueAt(createProperties->MorphCurveId, progress);
+ if (m_areaTriggerData->MorphCurveId)
+ progress = sDB2Manager.GetCurveValueAt(m_areaTriggerData->MorphCurveId, progress);
float scale = CalcCurrentScale();
- float innerRadius = G3D::lerp(_shape.DiskDatas.InnerRadius, _shape.DiskDatas.InnerRadiusTarget, progress) * scale;
- float outerRadius = G3D::lerp(_shape.DiskDatas.OuterRadius, _shape.DiskDatas.OuterRadiusTarget, progress) * scale;
- float height = G3D::lerp(_shape.DiskDatas.Height, _shape.DiskDatas.HeightTarget, progress);
- if (!m_areaTriggerData->HeightIgnoresScale)
+ float innerRadius = G3D::lerp(disk.InnerRadius, disk.InnerRadiusTarget, progress) * scale;
+ float outerRadius = G3D::lerp(disk.OuterRadius, disk.OuterRadiusTarget, progress) * scale;
+ float height = G3D::lerp(disk.Height, disk.HeightTarget, progress);
+ if (!HasAreaTriggerFlag(AreaTriggerFieldFlags::HeightIgnoresScale))
height *= scale;
float minZ = GetPositionZ() - height;
@@ -810,16 +831,15 @@ void AreaTrigger::SearchUnitInDisk(std::vector<Unit*>& targetList)
});
}
-void AreaTrigger::SearchUnitInBoundedPlane(std::vector<Unit*>& targetList)
+void AreaTrigger::SearchUnitInBoundedPlane(UF::AreaTriggerBoundedPlane const& boundedPlane, std::vector<Unit*>& targetList)
{
float progress = GetProgress();
- if (AreaTriggerCreateProperties const* createProperties = GetCreateProperties())
- if (createProperties->MorphCurveId)
- progress = sDB2Manager.GetCurveValueAt(createProperties->MorphCurveId, progress);
+ if (m_areaTriggerData->MorphCurveId)
+ progress = sDB2Manager.GetCurveValueAt(m_areaTriggerData->MorphCurveId, progress);
float scale = CalcCurrentScale();
- float extentsX = G3D::lerp(_shape.BoundedPlaneDatas.Extents[0], _shape.BoundedPlaneDatas.ExtentsTarget[0], progress) * scale;
- float extentsY = G3D::lerp(_shape.BoundedPlaneDatas.Extents[1], _shape.BoundedPlaneDatas.ExtentsTarget[1], progress) * scale;
+ float extentsX = G3D::lerp(boundedPlane.Extents->Pos.GetPositionX(), boundedPlane.ExtentsTarget->Pos.GetPositionX(), progress) * scale;
+ float extentsY = G3D::lerp(boundedPlane.Extents->Pos.GetPositionY(), boundedPlane.ExtentsTarget->Pos.GetPositionY(), progress) * scale;
float radius = std::sqrt(extentsX * extentsX + extentsY * extentsY);
SearchUnits(targetList, radius, false);
@@ -885,9 +905,10 @@ void AreaTrigger::HandleUnitEnterExit(std::vector<Unit*> const& newTargetList)
}
}
- SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::NumUnitsInside), _insideUnits.size());
- SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::NumPlayersInside),
- std::ranges::count_if(_insideUnits, [](ObjectGuid const& guid) { return guid.IsPlayer(); }));
+ if (std::ranges::any_of(_insideUnits, [](ObjectGuid const& guid) { return guid.IsPlayer(); }))
+ SetAreaTriggerFlag(AreaTriggerFieldFlags::HasPlayers);
+ else
+ RemoveAreaTriggerFlag(AreaTriggerFieldFlags::HasPlayers);
if (IsStaticSpawn())
setActive(!_insideUnits.empty());
@@ -928,6 +949,83 @@ uint32 AreaTrigger::GetFaction() const
return 0;
}
+void AreaTrigger::SetShape(AreaTriggerShapeInfo const& shape)
+{
+ auto areaTriggerData = m_values.ModifyValue(&AreaTrigger::m_areaTriggerData);
+
+ switch (shape.Type)
+ {
+ case AreaTriggerShapeType::Sphere:
+ {
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 0);
+ auto sphere = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerSphere>);
+ SetUpdateFieldValue(sphere.ModifyValue(&UF::AreaTriggerSphere::Radius), shape.SphereDatas.Radius);
+ SetUpdateFieldValue(sphere.ModifyValue(&UF::AreaTriggerSphere::RadiusTarget), shape.SphereDatas.RadiusTarget);
+ break;
+ }
+ case AreaTriggerShapeType::Box:
+ {
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 1);
+ auto box = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerBox>);
+ SetUpdateFieldValue(box.ModifyValue(&UF::AreaTriggerBox::Extents), { shape.BoxDatas.Extents[0], shape.BoxDatas.Extents[1], shape.BoxDatas.Extents[2] });
+ SetUpdateFieldValue(box.ModifyValue(&UF::AreaTriggerBox::ExtentsTarget), { shape.BoxDatas.ExtentsTarget[0], shape.BoxDatas.ExtentsTarget[1], shape.BoxDatas.ExtentsTarget[2] });
+ break;
+ }
+ case AreaTriggerShapeType::Polygon:
+ {
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 3);
+ auto polygon = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerPolygon>);
+ auto vertices = polygon.ModifyValue(&UF::AreaTriggerPolygon::Vertices);
+ ClearDynamicUpdateFieldValues(vertices);
+ for (TaggedPosition<XY> const& vertex : shape.PolygonVertices)
+ AddDynamicUpdateFieldValue(vertices) = vertex;
+ auto verticesTarget = polygon.ModifyValue(&UF::AreaTriggerPolygon::VerticesTarget);
+ ClearDynamicUpdateFieldValues(verticesTarget);
+ for (TaggedPosition<XY> const& vertex : shape.PolygonVerticesTarget)
+ AddDynamicUpdateFieldValue(verticesTarget) = vertex;
+ SetUpdateFieldValue(polygon.ModifyValue(&UF::AreaTriggerPolygon::Height), shape.PolygonDatas.Height);
+ SetUpdateFieldValue(polygon.ModifyValue(&UF::AreaTriggerPolygon::HeightTarget), shape.PolygonDatas.HeightTarget);
+ break;
+ }
+ case AreaTriggerShapeType::Cylinder:
+ {
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 4);
+ auto cylinder = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerCylinder>);
+ SetUpdateFieldValue(cylinder.ModifyValue(&UF::AreaTriggerCylinder::Radius), shape.CylinderDatas.Radius);
+ SetUpdateFieldValue(cylinder.ModifyValue(&UF::AreaTriggerCylinder::RadiusTarget), shape.CylinderDatas.RadiusTarget);
+ SetUpdateFieldValue(cylinder.ModifyValue(&UF::AreaTriggerCylinder::Height), shape.CylinderDatas.Height);
+ SetUpdateFieldValue(cylinder.ModifyValue(&UF::AreaTriggerCylinder::HeightTarget), shape.CylinderDatas.HeightTarget);
+ SetUpdateFieldValue(cylinder.ModifyValue(&UF::AreaTriggerCylinder::LocationZOffset), shape.CylinderDatas.LocationZOffset);
+ SetUpdateFieldValue(cylinder.ModifyValue(&UF::AreaTriggerCylinder::LocationZOffsetTarget), shape.CylinderDatas.LocationZOffsetTarget);
+ break;
+ }
+ case AreaTriggerShapeType::Disk:
+ {
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 7);
+ auto disk = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerDisk>);
+ SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::InnerRadius), shape.DiskDatas.InnerRadius);
+ SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::InnerRadiusTarget), shape.DiskDatas.InnerRadiusTarget);
+ SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::OuterRadius), shape.DiskDatas.OuterRadius);
+ SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::OuterRadiusTarget), shape.DiskDatas.OuterRadiusTarget);
+ SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::Height), shape.DiskDatas.Height);
+ SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::HeightTarget), shape.DiskDatas.HeightTarget);
+ SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::LocationZOffset), shape.DiskDatas.LocationZOffset);
+ SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::LocationZOffsetTarget), shape.DiskDatas.LocationZOffsetTarget);
+ break;
+ }
+ case AreaTriggerShapeType::BoundedPlane:
+ {
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 8);
+ auto boundedPlane = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerBoundedPlane>);
+ SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::Extents), { shape.BoundedPlaneDatas.Extents[0], shape.BoundedPlaneDatas.Extents[1] });
+ SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::ExtentsTarget), { shape.BoundedPlaneDatas.ExtentsTarget[0], shape.BoundedPlaneDatas.ExtentsTarget[1] });
+ break;
+ }
+ default:
+ break;
+ }
+}
+
float AreaTrigger::GetMaxSearchRadius() const
{
return *m_areaTriggerData->BoundsRadius2D * CalcCurrentScale();
@@ -935,25 +1033,24 @@ float AreaTrigger::GetMaxSearchRadius() const
void AreaTrigger::UpdatePolygonVertices()
{
- AreaTriggerCreateProperties const* createProperties = GetCreateProperties();
- AreaTriggerShapeInfo const& shape = GetShape();
+ UF::AreaTriggerPolygon const* shape = m_areaTriggerData->ShapeData.Get<UF::AreaTriggerPolygon>();
float newOrientation = GetOrientation();
// No need to recalculate, orientation didn't change
- if (G3D::fuzzyEq(_verticesUpdatePreviousOrientation, newOrientation) && shape.PolygonVerticesTarget.empty())
+ if (G3D::fuzzyEq(_verticesUpdatePreviousOrientation, newOrientation) && shape->VerticesTarget.empty())
return;
- _polygonVertices.assign(shape.PolygonVertices.begin(), shape.PolygonVertices.end());
- if (!shape.PolygonVerticesTarget.empty())
+ _polygonVertices.assign(shape->Vertices.begin(), shape->Vertices.end());
+ if (!shape->VerticesTarget.empty())
{
float progress = GetProgress();
- if (createProperties->MorphCurveId)
- progress = sDB2Manager.GetCurveValueAt(createProperties->MorphCurveId, progress);
+ if (m_areaTriggerData->MorphCurveId)
+ progress = sDB2Manager.GetCurveValueAt(m_areaTriggerData->MorphCurveId, progress);
for (std::size_t i = 0; i < _polygonVertices.size(); ++i)
{
Position& vertex = _polygonVertices[i];
- Position const& vertexTarget = shape.PolygonVerticesTarget[i].Pos;
+ Position const& vertexTarget = shape->VerticesTarget[i].Pos;
vertex.m_positionX = G3D::lerp(vertex.GetPositionX(), vertexTarget.GetPositionX(), progress);
vertex.m_positionY = G3D::lerp(vertex.GetPositionY(), vertexTarget.GetPositionY(), progress);
@@ -983,7 +1080,7 @@ bool AreaTrigger::HasOverridePosition() const
void AreaTrigger::UpdateShape()
{
- if (_shape.IsPolygon())
+ if (m_areaTriggerData->ShapeData.Is<UF::AreaTriggerPolygon>())
UpdatePolygonVertices();
}
@@ -1120,8 +1217,6 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> const& splinePoints, Opt
if (splinePoints.size() < 2)
return;
- _movementTime = 0;
-
std::unique_ptr<Movement::Spline<float>> spline = std::make_unique<::Movement::Spline<float>>();
spline->init_spline(splinePoints.data(), splinePoints.size(), ::Movement::SplineBase::ModeLinear, _stationaryPosition.GetOrientation());
spline->initLengths();
@@ -1131,29 +1226,29 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> const& splinePoints, Opt
speed = 1.0f;
uint32 timeToTarget = spline->length() / speed * float(IN_MILLISECONDS);
- SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget);
-
- if (IsInWorld())
- {
- if (_reachedDestination)
- {
- WorldPackets::AreaTrigger::AreaTriggerRePath reshape;
- reshape.TriggerGUID = GetGUID();
- SendMessageToSet(reshape.Write(), true);
- }
- WorldPackets::AreaTrigger::AreaTriggerRePath reshape;
- reshape.TriggerGUID = GetGUID();
- reshape.AreaTriggerSpline.emplace();
- reshape.AreaTriggerSpline->ElapsedTimeForMovement = GetElapsedTimeForMovement();
- reshape.AreaTriggerSpline->TimeToTarget = timeToTarget;
- reshape.AreaTriggerSpline->Points = spline.get();
+ auto areaTriggerData = m_values.ModifyValue(&AreaTrigger::m_areaTriggerData);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::MovementStartTime), GameTime::GetGameTimeMS());
- SendMessageToSet(reshape.Write(), true);
- }
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::PathType), int32(AreaTriggerPathType::Spline));
+ auto pathData = areaTriggerData.ModifyValue(&UF::AreaTriggerData::PathData, UF::VariantCase<UF::AreaTriggerSplineCalculator>);
+ SetUpdateFieldValue(pathData.ModifyValue(&UF::AreaTriggerSplineCalculator::Catmullrom), spline->getPointCount() >= 4);
+ auto points = pathData.ModifyValue(&UF::AreaTriggerSplineCalculator::Points);
+ ClearDynamicUpdateFieldValues(points);
+ for (G3D::Vector3 const& point : spline->getPoints())
+ AddDynamicUpdateFieldValue(points) = Vector3ToPosition(point);
_reachedDestination = false;
- _movement = std::move(spline);
+ _spline = std::move(spline);
+}
+
+uint32 AreaTrigger::GetElapsedTimeForMovement() const
+{
+ uint32 now = GameTime::GetGameTimeMS();
+ if (now >= *m_areaTriggerData->MovementStartTime)
+ return now - *m_areaTriggerData->MovementStartTime;
+ return 0;
}
void AreaTrigger::InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional<float> overrideSpeed)
@@ -1167,40 +1262,37 @@ void AreaTrigger::InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional<float> o
uint32 timeToTarget = static_cast<uint32>(orbit.Radius * 2.0f * static_cast<float>(M_PI) * static_cast<float>(IN_MILLISECONDS) / speed);
- SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget);
- SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::OrbitPathTarget), orbit.PathTarget.value_or(ObjectGuid::Empty));
-
- std::unique_ptr<AreaTriggerOrbitInfo> movementOrbit = std::make_unique<AreaTriggerOrbitInfo>();
-
- movementOrbit->TimeToTarget = timeToTarget;
- movementOrbit->ElapsedTimeForMovement = 0;
-
- if (IsInWorld())
- {
- WorldPackets::AreaTrigger::AreaTriggerRePath reshape;
- reshape.TriggerGUID = GetGUID();
- reshape.AreaTriggerOrbit = *movementOrbit;
-
- SendMessageToSet(reshape.Write(), true);
- }
+ auto areaTriggerData = m_values.ModifyValue(&AreaTrigger::m_areaTriggerData);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::MovementStartTime), GameTime::GetGameTimeMS());
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::OrbitPathTarget), orbit.PathTarget.value_or(ObjectGuid::Empty));
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ZOffset), orbit.ZOffset);
+ if (orbit.CanLoop)
+ SetAreaTriggerFlag(AreaTriggerFieldFlags::CanLoop);
+ else
+ RemoveAreaTriggerFlag(AreaTriggerFieldFlags::CanLoop);
- _movement = std::move(movementOrbit);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::PathType), int32(AreaTriggerPathType::Orbit));
+ auto pathData = areaTriggerData.ModifyValue(&UF::AreaTriggerData::PathData, UF::VariantCase<UF::AreaTriggerOrbit>);
+ SetUpdateFieldValue(pathData.ModifyValue(&UF::AreaTriggerOrbit::CounterClockwise), orbit.CounterClockwise);
+ SetUpdateFieldValue(pathData.ModifyValue(&UF::AreaTriggerOrbit::Center), orbit.Center.value_or(Position()));
+ SetUpdateFieldValue(pathData.ModifyValue(&UF::AreaTriggerOrbit::Radius), orbit.Radius);
+ SetUpdateFieldValue(pathData.ModifyValue(&UF::AreaTriggerOrbit::InitialAngle), orbit.InitialAngle);
+ SetUpdateFieldValue(pathData.ModifyValue(&UF::AreaTriggerOrbit::BlendFromRadius), orbit.BlendFromRadius);
+ SetUpdateFieldValue(pathData.ModifyValue(&UF::AreaTriggerOrbit::ExtraTimeForBlending), orbit.ExtraTimeForBlending);
}
Position const* AreaTrigger::GetOrbitCenterPosition() const
{
- if (!HasOrbit())
+ UF::AreaTriggerOrbit const* orbit = m_areaTriggerData->PathData.Get<UF::AreaTriggerOrbit>();
+ if (!orbit)
return nullptr;
- AreaTriggerOrbitInfo const& orbit = *std::get<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement);
- if (orbit.PathTarget)
- if (WorldObject* center = ObjectAccessor::GetWorldObject(*this, *orbit.PathTarget))
+ if (!m_areaTriggerData->OrbitPathTarget->IsEmpty())
+ if (WorldObject* center = ObjectAccessor::GetWorldObject(*this, *m_areaTriggerData->OrbitPathTarget))
return center;
- if (orbit.Center)
- return &orbit.Center->Pos;
-
- return nullptr;
+ return &orbit->Center->Pos;
}
Position AreaTrigger::CalculateOrbitPosition() const
@@ -1209,26 +1301,24 @@ Position AreaTrigger::CalculateOrbitPosition() const
if (!centerPos)
return GetPosition();
- AreaTriggerCreateProperties const* createProperties = GetCreateProperties();
- AreaTriggerOrbitInfo const& cmi = GetOrbit();
+ UF::AreaTriggerOrbit const& cmi = *m_areaTriggerData->PathData.Get<UF::AreaTriggerOrbit>();
// AreaTrigger make exactly "Duration / TimeToTarget" loops during his life time
- float pathProgress = float(cmi.ElapsedTimeForMovement) / float(cmi.TimeToTarget);
- if (createProperties && createProperties->MoveCurveId)
- pathProgress = sDB2Manager.GetCurveValueAt(createProperties->MoveCurveId, pathProgress);
+ float pathProgress = float(GetElapsedTimeForMovement() + *cmi.ExtraTimeForBlending) / float(GetTimeToTarget());
+ if (m_areaTriggerData->MoveCurveId)
+ pathProgress = sDB2Manager.GetCurveValueAt(m_areaTriggerData->MoveCurveId, pathProgress);
// We already made one circle and can't loop
- if (!cmi.CanLoop)
+ if (!HasAreaTriggerFlag(AreaTriggerFieldFlags::CanLoop))
pathProgress = std::min(1.f, pathProgress);
float radius = cmi.Radius;
- if (G3D::fuzzyNe(cmi.BlendFromRadius, radius))
+ if (pathProgress <= 1.0f && G3D::fuzzyNe(cmi.BlendFromRadius, radius))
{
float blendCurve = (cmi.BlendFromRadius - radius) / radius;
- // 4.f Defines four quarters
- blendCurve = RoundToInterval(blendCurve, 1.f, 4.f) / 4.f;
- float blendProgress = std::min(1.f, pathProgress / blendCurve);
- radius = G3D::lerp(cmi.BlendFromRadius, cmi.Radius, blendProgress);
+ RoundToInterval(blendCurve, 1.f, 4.f);
+ float blendProgress = std::min(1.f, pathProgress / blendCurve * 0.63661975f);
+ radius = G3D::lerp(cmi.BlendFromRadius, radius, blendProgress);
}
// Adapt Path progress depending of circle direction
@@ -1238,13 +1328,13 @@ Position AreaTrigger::CalculateOrbitPosition() const
float angle = cmi.InitialAngle + 2.f * float(M_PI) * pathProgress;
float x = centerPos->GetPositionX() + (radius * std::cos(angle));
float y = centerPos->GetPositionY() + (radius * std::sin(angle));
- float z = centerPos->GetPositionZ() + cmi.ZOffset;
+ float z = centerPos->GetPositionZ() + *m_areaTriggerData->ZOffset;
float orientation = 0.0f;
- if (createProperties && createProperties->FacingCurveId)
- orientation = sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress());
+ if (m_areaTriggerData->FacingCurveId)
+ orientation = sDB2Manager.GetCurveValueAt(m_areaTriggerData->FacingCurveId, GetProgress());
- if (!GetCreateProperties() || !GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation))
+ if (!HasAreaTriggerFlag(AreaTriggerFieldFlags::AbsoluteOrientation))
{
orientation += angle;
orientation += cmi.CounterClockwise ? float(M_PI_4) : -float(M_PI_4);
@@ -1253,13 +1343,8 @@ Position AreaTrigger::CalculateOrbitPosition() const
return { x, y, z, orientation };
}
-void AreaTrigger::UpdateOrbitPosition(AreaTriggerOrbitInfo& orbit, uint32 /*diff*/)
+void AreaTrigger::UpdateOrbitPosition()
{
- if (orbit.StartDelay > GetElapsedTimeForMovement())
- return;
-
- orbit.ElapsedTimeForMovement = GetElapsedTimeForMovement() - orbit.StartDelay;
-
Position pos = CalculateOrbitPosition();
GetMap()->AreaTriggerRelocation(this, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation());
@@ -1268,14 +1353,12 @@ void AreaTrigger::UpdateOrbitPosition(AreaTriggerOrbitInfo& orbit, uint32 /*diff
#endif
}
-void AreaTrigger::UpdateSplinePosition(Movement::Spline<float>& spline, uint32 diff)
+void AreaTrigger::UpdateSplinePosition(Movement::Spline<float>& spline)
{
if (_reachedDestination)
return;
- _movementTime += diff;
-
- if (_movementTime >= GetTimeToTarget())
+ if (GetElapsedTimeForMovement() >= GetTimeToTarget())
{
_reachedDestination = true;
_lastSplineIndex = int32(spline.last());
@@ -1291,19 +1374,19 @@ void AreaTrigger::UpdateSplinePosition(Movement::Spline<float>& spline, uint32 d
return;
}
- float currentTimePercent = float(_movementTime) / float(GetTimeToTarget());
+ float currentTimePercent = float(GetElapsedTimeForMovement()) / float(GetTimeToTarget());
if (currentTimePercent <= 0.f)
return;
- AreaTriggerCreateProperties const* createProperties = GetCreateProperties();
- if (createProperties && createProperties->MoveCurveId)
+ if (m_areaTriggerData->MoveCurveId)
{
- float progress = sDB2Manager.GetCurveValueAt(createProperties->MoveCurveId, currentTimePercent);
+ float progress = sDB2Manager.GetCurveValueAt(m_areaTriggerData->MoveCurveId, currentTimePercent);
if (progress < 0.f || progress > 1.f)
{
+ AreaTriggerCreateProperties const* createProperties = GetCreateProperties();
TC_LOG_ERROR("entities.areatrigger", "AreaTrigger (Id: {}, AreaTriggerCreatePropertiesId: (Id: {}, IsCustom: {})) has wrong progress ({}) caused by curve calculation (MoveCurveId: {})",
- GetEntry(), createProperties->Id.Id, uint32(createProperties->Id.IsCustom), progress, createProperties->MoveCurveId);
+ GetEntry(), createProperties->Id.Id, uint32(createProperties->Id.IsCustom), progress, *m_areaTriggerData->MoveCurveId);
}
else
currentTimePercent = progress;
@@ -1317,10 +1400,10 @@ void AreaTrigger::UpdateSplinePosition(Movement::Spline<float>& spline, uint32 d
spline.evaluate_percent(lastPositionIndex, percentFromLastPoint, currentPosition);
float orientation = _stationaryPosition.GetOrientation();
- if (createProperties && createProperties->FacingCurveId)
- orientation += sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress());
+ if (m_areaTriggerData->FacingCurveId)
+ orientation += sDB2Manager.GetCurveValueAt(m_areaTriggerData->FacingCurveId, GetProgress());
- if (GetCreateProperties() && !GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation) && GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasFaceMovementDir))
+ if (!HasAreaTriggerFlag(AreaTriggerFieldFlags::AbsoluteOrientation) && HasAreaTriggerFlag(AreaTriggerFieldFlags::FaceMovementDir))
{
G3D::Vector3 derivative;
spline.evaluate_derivative(lastPositionIndex, percentFromLastPoint, derivative);
@@ -1349,14 +1432,11 @@ void AreaTrigger::UpdateOverridePosition()
float z = GetScaleCurveValueAtProgress(*m_areaTriggerData->OverrideMoveCurveZ, progress);
float orientation = GetOrientation();
- if (AreaTriggerCreateProperties const* createProperties = GetCreateProperties())
+ if (m_areaTriggerData->FacingCurveId)
{
- if (createProperties->FacingCurveId)
- {
- orientation = sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress());
- if (!GetCreateProperties() || !GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation))
- orientation += _stationaryPosition.GetOrientation();
- }
+ orientation = sDB2Manager.GetCurveValueAt(m_areaTriggerData->FacingCurveId, GetProgress());
+ if (HasAreaTriggerFlag(AreaTriggerFieldFlags::AbsoluteOrientation))
+ orientation += m_areaTriggerData->Facing;
}
GetMap()->AreaTriggerRelocation(this, x, y, z, orientation);
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
index 67074b04d36..6d10f853063 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
@@ -39,6 +39,32 @@ namespace Movement
class Spline;
}
+enum class AreaTriggerFieldFlags : uint32
+{
+ None = 0x0000,
+ HeightIgnoresScale = 0x0001,
+ WowLabsCircle = 0x0002,
+ CanLoop = 0x0004,
+ AbsoluteOrientation = 0x0008,
+ DynamicShape = 0x0010,
+ Attached = 0x0020,
+ FaceMovementDir = 0x0040,
+ FollowsTerrain = 0x0080,
+ Unknown1025 = 0x0100,
+ AlwaysExterior = 0x0200,
+ HasPlayers = 0x0400,
+};
+
+DEFINE_ENUM_FLAG(AreaTriggerFieldFlags);
+
+enum class AreaTriggerPathType : int32
+{
+ Spline = 0,
+ Orbit = 1,
+ None = 2,
+ MovementScript = 3
+};
+
class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<AreaTrigger>, public MapObject
{
public:
@@ -97,9 +123,13 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
bool IsRemoved() const { return _isRemoved; }
uint32 GetSpellId() const { return m_areaTriggerData->SpellID; }
AuraEffect const* GetAuraEffect() const { return _aurEff; }
- uint32 GetTimeSinceCreated() const { return _timeSinceCreated; }
+ uint32 GetTimeSinceCreated() const;
- void SetHeightIgnoresScale(bool heightIgnoresScale) { SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::HeightIgnoresScale), heightIgnoresScale); }
+ EnumFlag<AreaTriggerFieldFlags> GetAreaTriggerFlags() const { return static_cast<AreaTriggerFieldFlags>(*m_areaTriggerData->Flags); }
+ bool HasAreaTriggerFlag(AreaTriggerFieldFlags flag) const { return GetAreaTriggerFlags().HasFlag(flag); }
+ void SetAreaTriggerFlag(AreaTriggerFieldFlags flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::Flags), uint32(flag)); }
+ void RemoveAreaTriggerFlag(AreaTriggerFieldFlags flag) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::Flags), uint32(flag)); }
+ void ReplaceAllAreaTriggerFlags(AreaTriggerFieldFlags flag) { SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::Flags), uint32(flag)); }
void SetOverrideScaleCurve(float overrideScale);
void SetOverrideScaleCurve(std::array<DBCPosition2D, 2> const& points, Optional<uint32> startTimeOffset = {}, CurveInterpolationMode interpolation = CurveInterpolationMode::Linear);
@@ -147,19 +177,17 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
uint32 GetFaction() const override;
- AreaTriggerShapeInfo const& GetShape() const { return _shape; }
+ void SetShape(AreaTriggerShapeInfo const& shape);
float GetMaxSearchRadius() const;
- Position const& GetRollPitchYaw() const { return _rollPitchYaw; }
- Position const& GetTargetRollPitchYaw() const { return _targetRollPitchYaw; }
void InitSplineOffsets(std::vector<Position> const& offsets, Optional<float> overrideSpeed = {});
void InitSplines(std::vector<G3D::Vector3> const& splinePoints, Optional<float> overrideSpeed = {});
- bool HasSplines() const { return std::holds_alternative<std::unique_ptr<::Movement::Spline<float>>>(_movement); }
- ::Movement::Spline<float> const& GetSpline() const { return *std::get<std::unique_ptr<::Movement::Spline<float>>>(_movement); }
- uint32 GetElapsedTimeForMovement() const { return GetTimeSinceCreated(); } /// @todo: research the right value, in sniffs both timers are nearly identical
+ bool HasSplines() const { return _spline != nullptr; }
+ ::Movement::Spline<float> const& GetSpline() const { return *_spline; }
+ uint32 GetElapsedTimeForMovement() const;
void InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional<float> overrideSpeed = {});
- bool HasOrbit() const { return std::holds_alternative<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement); }
- AreaTriggerOrbitInfo const& GetOrbit() const { return *std::get<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement); }
+ bool HasOrbit() const { return m_areaTriggerData->PathData.Is<UF::AreaTriggerOrbit>(); }
+ UF::AreaTriggerOrbit const& GetOrbit() const { return *m_areaTriggerData->PathData.Get<UF::AreaTriggerOrbit>(); }
bool HasOverridePosition() const;
@@ -184,20 +212,20 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
void UpdateTargetList();
void SearchUnits(std::vector<Unit*>& targetList, float radius, bool check3D);
- void SearchUnitInSphere(std::vector<Unit*>& targetList);
- void SearchUnitInBox(std::vector<Unit*>& targetList);
- void SearchUnitInPolygon(std::vector<Unit*>& targetList);
- void SearchUnitInCylinder(std::vector<Unit*>& targetList);
- void SearchUnitInDisk(std::vector<Unit*>& targetList);
- void SearchUnitInBoundedPlane(std::vector<Unit*>& targetList);
+ void SearchUnitInSphere(UF::AreaTriggerSphere const& sphere, std::vector<Unit*>& targetList);
+ void SearchUnitInBox(UF::AreaTriggerBox const& box, std::vector<Unit*>& targetList);
+ void SearchUnitInPolygon(UF::AreaTriggerPolygon const& polygon, std::vector<Unit*>& targetList);
+ void SearchUnitInCylinder(UF::AreaTriggerCylinder const& cylinder, std::vector<Unit*>& targetList);
+ void SearchUnitInDisk(UF::AreaTriggerDisk const& disk, std::vector<Unit*>& targetList);
+ void SearchUnitInBoundedPlane(UF::AreaTriggerBoundedPlane const& boundedPlane, std::vector<Unit*>& targetList);
void HandleUnitEnterExit(std::vector<Unit*> const& targetList);
void DoActions(Unit* unit);
void UndoActions(Unit* unit);
void UpdatePolygonVertices();
- void UpdateOrbitPosition(AreaTriggerOrbitInfo& orbit, uint32 diff);
- void UpdateSplinePosition(Movement::Spline<float>& spline, uint32 diff);
+ void UpdateOrbitPosition();
+ void UpdateSplinePosition(Movement::Spline<float>& spline);
void UpdateOverridePosition();
Position const* GetOrbitCenterPosition() const;
@@ -212,21 +240,16 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
AuraEffect const* _aurEff;
Position _stationaryPosition;
- AreaTriggerShapeInfo _shape;
int32 _duration;
int32 _totalDuration;
- uint32 _timeSinceCreated;
float _verticesUpdatePreviousOrientation;
bool _isRemoved;
- Position _rollPitchYaw;
- Position _targetRollPitchYaw;
std::vector<Position> _polygonVertices;
- std::variant<std::monostate, std::unique_ptr<::Movement::Spline<float>>, std::unique_ptr<AreaTriggerOrbitInfo>> _movement;
+ std::unique_ptr<::Movement::Spline<float>> _spline;
bool _reachedDestination;
int32 _lastSplineIndex;
- uint32 _movementTime;
AreaTriggerCreateProperties const* _areaTriggerCreateProperties;
AreaTriggerTemplate const* _areaTriggerTemplate;
diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h
index 5dba3e6b499..74ce4e2be79 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h
@@ -193,9 +193,7 @@ struct AreaTriggerOrbitInfo
Optional<TaggedPosition<Position::XYZ>> Center;
bool CounterClockwise = false;
bool CanLoop = false;
- uint32 TimeToTarget = 0;
- int32 ElapsedTimeForMovement = 0;
- uint32 StartDelay = 0;
+ int32 ExtraTimeForBlending = 0;
float Radius = 0.0f;
float BlendFromRadius = 0.0f;
float InitialAngle = 0.0f;
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 1331c819578..472610d4c0f 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -195,6 +195,7 @@ WorldPacket CreatureTemplate::BuildQueryData(LocaleConstant loc, Difficulty diff
stats.Flags[0] = creatureDifficulty->TypeFlags;
stats.Flags[1] = creatureDifficulty->TypeFlags2;
+ stats.Flags[2] = creatureDifficulty->TypeFlags3;
stats.CreatureType = type;
stats.CreatureFamily = family;
@@ -273,6 +274,7 @@ CreatureDifficulty const* CreatureTemplate::GetDifficulty(Difficulty difficulty)
CreatureDifficultyID = 0;
TypeFlags = 0;
TypeFlags2 = 0;
+ TypeFlags3 = 0;
LootID = 0;
PickPocketLootID = 0;
SkinLootID = 0;
diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h
index 1f4f4b5e216..81fcb06a14f 100644
--- a/src/server/game/Entities/Creature/CreatureData.h
+++ b/src/server/game/Entities/Creature/CreatureData.h
@@ -456,6 +456,7 @@ struct CreatureDifficulty
int32 CreatureDifficultyID;
uint32 TypeFlags;
uint32 TypeFlags2;
+ uint32 TypeFlags3;
uint32 LootID;
uint32 PickPocketLootID;
uint32 SkinLootID;
diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h
index 16f4896d968..1938d8d36d4 100644
--- a/src/server/game/Entities/GameObject/GameObjectData.h
+++ b/src/server/game/Entities/GameObject/GameObjectData.h
@@ -707,7 +707,7 @@ struct GameObjectTemplate
uint32 radius; // 4 radius, int, Min value: 0, Max value: 50, Default value: 10
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
- uint32 PlayerInteractionType; // 7 Player Interaction Type, enum { None, TradePartner, Item, Gossip, QuestGiver, Merchant, TaxiNode, Trainer, Banker, AlliedRaceDetailsGiver, GuildBanker, Registrar, Vendor, PetitionVendor, GuildTabardVendor, TalentMaster, SpecializationMaster, MailInfo, SpiritHealer, AreaSpiritHealer, Binder, Auctioneer, StableMaster, BattleMaster, Transmogrifier, LFGDungeon, VoidStorageBanker, BlackMarketAuctioneer, AdventureMap, WorldMap, GarrArchitect, GarrTradeskill, GarrMission, ShipmentCrafter, GarrRecruitment, GarrTalent, Trophy, PlayerChoice, ArtifactForge, ObliterumForge, ScrappingMachine, ContributionCollector, AzeriteRespec, IslandQueue, ItemInteraction, ChromieTime, CovenantPreview, AnimaDiversion, LegendaryCrafting, WeeklyRewards, Soulbind, CovenantSanctum, NewPlayerGuide, ItemUpgrade, AdventureJournal, Renown, AzeriteForge, PerksProgramVendor, ProfessionsCraftingOrder, Professions, ProfessionsCustomerOrder, TraitSystem, BarbersChoice, JailersTowerBuffs, MajorFactionRenown, PersonalTabardVendor, ForgeMaster, CharacterBanker, AccountBanker, ProfessionRespec, PlaceholderType71, PlaceholderType72, PlaceholderType73, PlaceholderType74, PlaceholderType75, PlaceholderType76, PlaceholderType77, }; Default: None
+ uint32 PlayerInteractionType; // 7 Player Interaction Type, enum { None, TradePartner, Item, Gossip, QuestGiver, Merchant, TaxiNode, Trainer, Banker, AlliedRaceDetailsGiver, GuildBanker, Registrar, Vendor, PetitionVendor, GuildTabardVendor, TalentMaster, SpecializationMaster, MailInfo, SpiritHealer, AreaSpiritHealer, Binder, Auctioneer, StableMaster, BattleMaster, Transmogrifier, LFGDungeon, VoidStorageBanker, BlackMarketAuctioneer, AdventureMap, WorldMap, GarrArchitect, GarrTradeskill, GarrMission, ShipmentCrafter, GarrRecruitment, GarrTalent, Trophy, PlayerChoice, ArtifactForge, ObliterumForge, ScrappingMachine, ContributionCollector, AzeriteRespec, IslandQueue, ItemInteraction, ChromieTime, CovenantPreview, AnimaDiversion, LegendaryCrafting, WeeklyRewards, Soulbind, CovenantSanctum, NewPlayerGuide, ItemUpgrade, AdventureJournal, Renown, AzeriteForge, PerksProgramVendor, ProfessionsCraftingOrder, Professions, ProfessionsCustomerOrder, TraitSystem, BarbersChoice, JailersTowerBuffs, MajorFactionRenown, PersonalTabardVendor, ForgeMaster, CharacterBanker, AccountBanker, ProfessionRespec, PlaceholderType71, PlaceholderType72, PlaceholderType73, PlaceholderType74, PlaceholderType75, PlaceholderType76, GuildRename, PlaceholderType76, }; Default: None
} UILink;
// 49 GAMEOBJECT_TYPE_KEYSTONE_RECEPTACLE
struct
@@ -838,6 +838,19 @@ struct GameObjectTemplate
uint32 Script; // 0 Script, References: SpellScript, NoValue = 0
uint32 autoClose; // 1 autoClose (ms), int, Min value: 0, Max value: 2147483647, Default value: 3000
} PerksProgramChest;
+ // 63 GAMEOBJECT_TYPE_FUTURE_PATCH
+ struct
+ {
+ } futurePatchGameObject;
+ // 64 GAMEOBJECT_TYPE_ASSIST_ACTION
+ struct
+ {
+ uint32 AssistActionType; // 0 Assist Action Type, enum { None, Lounging Player, Grave Marker, Placed VO, Player Guardian, Player Slayer, Captured Buff, }; Default: None
+ uint32 cooldown; // 1 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000
+ uint32 gossipID; // 2 gossipID, References: Gossip, NoValue = 0
+ uint32 spell; // 3 spell, References: Spell, NoValue = 0
+ uint32 playerCast; // 4 playerCast, enum { false, true, }; Default: false
+ } assistAction;
struct
{
uint32 data[MAX_GAMEOBJECT_DATA];
@@ -1114,6 +1127,8 @@ struct GameObjectTemplate
{
case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.gossipID;
case GAMEOBJECT_TYPE_GOOBER: return goober.gossipID;
+ case GAMEOBJECT_TYPE_SPELL_FOCUS: return spellFocus.gossipID;
+ case GAMEOBJECT_TYPE_ASSIST_ACTION: return assistAction.gossipID;
default: return 0;
}
}
@@ -1216,8 +1231,9 @@ struct GameObjectTemplate
{
switch (type)
{
- case GAMEOBJECT_TYPE_TRAP: return trap.cooldown;
- case GAMEOBJECT_TYPE_GOOBER: return goober.cooldown;
+ case GAMEOBJECT_TYPE_TRAP: return trap.cooldown;
+ case GAMEOBJECT_TYPE_GOOBER: return goober.cooldown;
+ case GAMEOBJECT_TYPE_ASSIST_ACTION: return assistAction.cooldown;
default: return 0;
}
}
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 247517163df..a3b1187cbff 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -141,9 +141,6 @@ void AddItemsSetItem(Player* player, Item const* item)
if (itemSetSpell->Threshold > eff->EquippedItems.size())
continue;
- if (eff->SetBonuses.count(itemSetSpell))
- continue;
-
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itemSetSpell->SpellID, DIFFICULTY_NONE);
if (!spellInfo)
{
@@ -151,10 +148,17 @@ void AddItemsSetItem(Player* player, Item const* item)
continue;
}
- eff->SetBonuses.insert(itemSetSpell);
+ if (!eff->SetBonuses.insert(itemSetSpell).second)
+ continue;
+
// spell cast only if fit form requirement, in other case will cast at form change
- if (!itemSetSpell->ChrSpecID || ChrSpecialization(itemSetSpell->ChrSpecID) == player->GetPrimarySpecialization())
- player->ApplyEquipSpell(spellInfo, nullptr, true);
+ if (itemSetSpell->ChrSpecID && ChrSpecialization(itemSetSpell->ChrSpecID) != player->GetPrimarySpecialization())
+ continue;
+
+ if (itemSetSpell->TraitSubTreeID && int32(itemSetSpell->TraitSubTreeID) != player->m_playerData->CurrentCombatTraitConfigSubTreeID)
+ continue;
+
+ player->ApplyEquipSpell(spellInfo, nullptr, true);
}
}
}
@@ -196,11 +200,10 @@ void RemoveItemsSetItem(Player* player, Item const* item)
if (itemSetSpell->Threshold <= eff->EquippedItems.size())
continue;
- if (!eff->SetBonuses.count(itemSetSpell))
+ if (!eff->SetBonuses.erase(itemSetSpell))
continue;
player->ApplyEquipSpell(sSpellMgr->AssertSpellInfo(itemSetSpell->SpellID, DIFFICULTY_NONE), nullptr, false);
- eff->SetBonuses.erase(itemSetSpell);
}
}
@@ -224,7 +227,8 @@ void UpdateItemSetAuras(Player* player, bool formChange)
{
SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(itemSetSpell->SpellID, DIFFICULTY_NONE);
- if (itemSetSpell->ChrSpecID && ChrSpecialization(itemSetSpell->ChrSpecID) != player->GetPrimarySpecialization())
+ if ((itemSetSpell->ChrSpecID && ChrSpecialization(itemSetSpell->ChrSpecID) != player->GetPrimarySpecialization())
+ || (itemSetSpell->TraitSubTreeID && int32(itemSetSpell->TraitSubTreeID) != player->m_playerData->CurrentCombatTraitConfigSubTreeID))
player->ApplyEquipSpell(spellInfo, nullptr, false, false); // item set aura is not for current spec
else
{
diff --git a/src/server/game/Entities/Item/ItemDefines.h b/src/server/game/Entities/Item/ItemDefines.h
index d3278c4987f..0df2bb3bba6 100644
--- a/src/server/game/Entities/Item/ItemDefines.h
+++ b/src/server/game/Entities/Item/ItemDefines.h
@@ -154,6 +154,8 @@ enum InventoryResult : uint8
EQUIP_ERR_BANK_NOT_ACCESSIBLE = 128,// This character does not have access to this bank.
EQUIP_ERR_CANT_TRADE_ACCOUNT_ITEM = 129,// You can't trade an item from the Warband bank.
EQUIP_ERR_ACCOUNT_MONEY_LOCKED = 130,// You cannot withdraw or deposit gold from the warband bank currently; please try again later.
+ EQUIP_ERR_CHARACTER_BANK_NOT_ACCESSIBLE = 131,// This character does not have access to this bank.
+ EQUIP_ERR_CHARACTER_BANK_NOT_CONVERTED = 132,// Your character's bank has not been converted. Please try again later.
};
// EnumUtils: DESCRIBE THIS
diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h
index 42b23f04005..c7d97e22fd0 100644
--- a/src/server/game/Entities/Item/ItemTemplate.h
+++ b/src/server/game/Entities/Item/ItemTemplate.h
@@ -811,6 +811,9 @@ enum ItemIdConstants
ITEM_PURPLE_RIBBONED_HOLIDAY_GIFT = 17308, // Purple Ribboned Holiday Gift
ITEM_EMPTY_WRAPPER = 21830, // Empty Wrapper
ITEM_WRAPPED_GIFT = 21831, // Wrappered Gift
+
+ ITEM_ACCOUNT_BANK_TAB_BAG = 208392, // Account Bank Tab Bag (DNT)
+ ITEM_CHARACTER_BANK_TAB_BAG = 242709, // Character Bank Tab Bag (DNT)
};
class Player;
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index eaea679d01a..d5b732a145e 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -16,8 +16,6 @@
*/
#include "Object.h"
-#include "AreaTriggerPackets.h"
-#include "AreaTriggerTemplate.h"
#include "BattlefieldMgr.h"
#include "CellImpl.h"
#include "CinematicMgr.h"
@@ -46,7 +44,6 @@
#include "SpellAuraEffects.h"
#include "SpellMgr.h"
#include "SpellPackets.h"
-#include "StringConvert.h"
#include "TemporarySummon.h"
#include "Totem.h"
#include "Transport.h"
@@ -310,6 +307,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
data->WriteBit(flags.NoBirthAnim);
data->WriteBit(flags.EnablePortals);
data->WriteBit(flags.PlayHoverAnim);
+ data->WriteBit(flags.ThisIsYou);
data->WriteBit(flags.MovementUpdate);
data->WriteBit(flags.MovementTransport);
data->WriteBit(flags.Stationary);
@@ -318,10 +316,8 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
data->WriteBit(flags.Vehicle);
data->WriteBit(flags.AnimKit);
data->WriteBit(flags.Rotation);
- data->WriteBit(flags.AreaTrigger);
data->WriteBit(flags.GameObject);
data->WriteBit(flags.SmoothPhasing);
- data->WriteBit(flags.ThisIsYou);
data->WriteBit(flags.SceneObject);
data->WriteBit(flags.ActivePlayer);
data->WriteBit(flags.Conversation);
@@ -329,7 +325,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
if (flags.MovementUpdate)
{
- Unit const* unit = ToUnit();
+ Unit const* unit = static_cast<Unit const*>(this);
bool HasFallDirection = unit->HasUnitMovementFlag(MOVEMENTFLAG_FALLING);
bool HasFall = HasFallDirection || unit->m_movementInfo.jump.fallTime != 0;
bool HasSpline = unit->IsSplineEnabled();
@@ -470,14 +466,17 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
}
if (flags.CombatVictim)
- *data << ToUnit()->GetVictim()->GetGUID(); // CombatVictim
+ {
+ Unit const* unit = static_cast<Unit const*>(this);
+ *data << unit->GetVictim()->GetGUID(); // CombatVictim
+ }
if (flags.ServerTime)
*data << uint32(GameTime::GetGameTimeMS());
if (flags.Vehicle)
{
- Unit const* unit = ToUnit();
+ Unit const* unit = static_cast<Unit const*>(this);
*data << uint32(unit->GetVehicleKit()->GetVehicleInfo()->ID); // RecID
*data << float(unit->GetOrientation()); // InitialRawFacing
}
@@ -491,7 +490,10 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
}
if (flags.Rotation)
- *data << uint64(ToGameObject()->GetPackedLocalRotation()); // Rotation
+ {
+ GameObject const* gameObject = static_cast<GameObject const*>(this);
+ *data << uint64(gameObject->GetPackedLocalRotation()); // Rotation
+ }
if (PauseTimes && !PauseTimes->empty())
data->append(PauseTimes->data(), PauseTimes->size());
@@ -502,144 +504,9 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
*data << self->m_movementInfo.transport;
}
- if (flags.AreaTrigger)
- {
- AreaTrigger const* areaTrigger = static_cast<AreaTrigger const*>(this);
- AreaTriggerCreateProperties const* createProperties = areaTrigger->GetCreateProperties();
- AreaTriggerShapeInfo const& shape = areaTrigger->GetShape();
-
- *data << uint32(areaTrigger->GetTimeSinceCreated());
-
- *data << areaTrigger->GetRollPitchYaw().PositionXYZStream();
-
- switch (shape.Type)
- {
- case AreaTriggerShapeType::Sphere:
- *data << int8(0);
- *data << float(shape.SphereDatas.Radius);
- *data << float(shape.SphereDatas.RadiusTarget);
- break;
- case AreaTriggerShapeType::Box:
- *data << int8(1);
- *data << float(shape.BoxDatas.Extents[0]);
- *data << float(shape.BoxDatas.Extents[1]);
- *data << float(shape.BoxDatas.Extents[2]);
- *data << float(shape.BoxDatas.ExtentsTarget[0]);
- *data << float(shape.BoxDatas.ExtentsTarget[1]);
- *data << float(shape.BoxDatas.ExtentsTarget[2]);
- break;
- case AreaTriggerShapeType::Polygon:
- *data << int8(3);
- *data << int32(shape.PolygonVertices.size());
- *data << int32(shape.PolygonVerticesTarget.size());
- *data << float(shape.PolygonDatas.Height);
- *data << float(shape.PolygonDatas.HeightTarget);
-
- for (TaggedPosition<Position::XY> const& vertice : shape.PolygonVertices)
- *data << vertice;
-
- for (TaggedPosition<Position::XY> const& vertice : shape.PolygonVerticesTarget)
- *data << vertice;
- break;
- case AreaTriggerShapeType::Cylinder:
- *data << int8(4);
- *data << float(shape.CylinderDatas.Radius);
- *data << float(shape.CylinderDatas.RadiusTarget);
- *data << float(shape.CylinderDatas.Height);
- *data << float(shape.CylinderDatas.HeightTarget);
- *data << float(shape.CylinderDatas.LocationZOffset);
- *data << float(shape.CylinderDatas.LocationZOffsetTarget);
- break;
- case AreaTriggerShapeType::Disk:
- *data << int8(7);
- *data << float(shape.DiskDatas.InnerRadius);
- *data << float(shape.DiskDatas.InnerRadiusTarget);
- *data << float(shape.DiskDatas.OuterRadius);
- *data << float(shape.DiskDatas.OuterRadiusTarget);
- *data << float(shape.DiskDatas.Height);
- *data << float(shape.DiskDatas.HeightTarget);
- *data << float(shape.DiskDatas.LocationZOffset);
- *data << float(shape.DiskDatas.LocationZOffsetTarget);
- break;
- case AreaTriggerShapeType::BoundedPlane:
- *data << int8(8);
- *data << float(shape.BoundedPlaneDatas.Extents[0]);
- *data << float(shape.BoundedPlaneDatas.Extents[1]);
- *data << float(shape.BoundedPlaneDatas.ExtentsTarget[0]);
- *data << float(shape.BoundedPlaneDatas.ExtentsTarget[1]);
- break;
- default:
- break;
- }
-
- bool hasAbsoluteOrientation = createProperties && createProperties->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation);
- bool hasDynamicShape = createProperties && createProperties->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasDynamicShape);
- bool hasAttached = createProperties && createProperties->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAttached);
- bool hasFaceMovementDir = createProperties && createProperties->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasFaceMovementDir);
- bool hasFollowsTerrain = createProperties && createProperties->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasFollowsTerrain);
- bool hasAlwaysExterior = createProperties && createProperties->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::AlwaysExterior);
- bool hasUnknown1025 = false;
- bool hasTargetRollPitchYaw = createProperties && createProperties->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasTargetRollPitchYaw);
- bool hasScaleCurveID = createProperties && createProperties->ScaleCurveId != 0;
- bool hasMorphCurveID = createProperties && createProperties->MorphCurveId != 0;
- bool hasFacingCurveID = createProperties && createProperties->FacingCurveId != 0;
- bool hasMoveCurveID = createProperties && createProperties->MoveCurveId != 0;
- bool hasMovementScript = false;
- bool hasPositionalSoundKitID= false;
-
- data->WriteBit(hasAbsoluteOrientation);
- data->WriteBit(hasDynamicShape);
- data->WriteBit(hasAttached);
- data->WriteBit(hasFaceMovementDir);
- data->WriteBit(hasFollowsTerrain);
- data->WriteBit(hasAlwaysExterior);
- data->WriteBit(hasUnknown1025);
- data->WriteBit(hasTargetRollPitchYaw);
- data->WriteBit(hasScaleCurveID);
- data->WriteBit(hasMorphCurveID);
- data->WriteBit(hasFacingCurveID);
- data->WriteBit(hasMoveCurveID);
- data->WriteBit(hasPositionalSoundKitID);
- data->WriteBit(areaTrigger->HasSplines());
- data->WriteBit(areaTrigger->HasOrbit());
- data->WriteBit(hasMovementScript);
-
- data->FlushBits();
-
- if (areaTrigger->HasSplines())
- WorldPackets::AreaTrigger::WriteAreaTriggerSpline(*data, areaTrigger->GetTimeToTarget(), areaTrigger->GetElapsedTimeForMovement(), areaTrigger->GetSpline());
-
- if (hasTargetRollPitchYaw)
- *data << areaTrigger->GetTargetRollPitchYaw().PositionXYZStream();
-
- if (hasScaleCurveID)
- *data << uint32(createProperties->ScaleCurveId);
-
- if (hasMorphCurveID)
- *data << uint32(createProperties->MorphCurveId);
-
- if (hasFacingCurveID)
- *data << uint32(createProperties->FacingCurveId);
-
- if (hasMoveCurveID)
- *data << uint32(createProperties->MoveCurveId);
-
- if (hasPositionalSoundKitID)
- *data << uint32(0);
-
- //if (hasMovementScript)
- // *data << *areaTrigger->GetMovementScript(); // AreaTriggerMovementScriptInfo
-
- if (areaTrigger->HasOrbit())
- {
- using WorldPackets::AreaTrigger::operator<<;
- *data << areaTrigger->GetOrbit();
- }
- }
-
if (flags.GameObject)
{
- GameObject const* gameObject = ToGameObject();
+ GameObject const* gameObject = static_cast<GameObject const*>(this);
Transport const* transport = gameObject->ToTransport();
bool bit8 = false;
@@ -794,10 +661,10 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
if (flags.ActivePlayer)
{
- Player const* player = ToPlayer();
+ Player const* player = static_cast<Player const*>(this);
bool HasSceneInstanceIDs = !player->GetSceneMgr().GetSceneTemplateByInstanceMap().empty();
- bool HasRuneState = ToUnit()->GetPowerIndex(POWER_RUNES) != MAX_POWERS;
+ bool HasRuneState = player->GetPowerIndex(POWER_RUNES) != MAX_POWERS;
data->WriteBit(HasSceneInstanceIDs);
data->WriteBit(HasRuneState);
@@ -805,8 +672,8 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
if (HasSceneInstanceIDs)
{
*data << uint32(player->GetSceneMgr().GetSceneTemplateByInstanceMap().size());
- for (auto const& itr : player->GetSceneMgr().GetSceneTemplateByInstanceMap())
- *data << uint32(itr.first);
+ for (auto const& [sceneInstanceId, _] : player->GetSceneMgr().GetSceneTemplateByInstanceMap())
+ *data << uint32(sceneInstanceId);
}
if (HasRuneState)
{
@@ -823,7 +690,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
if (flags.Conversation)
{
- Conversation const* self = ToConversation();
+ Conversation const* self = static_cast<Conversation const*>(this);
if (data->WriteBit(self->GetTextureKitId() != 0))
*data << uint32(self->GetTextureKitId());
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index b5940dc0b73..971b74494e0 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -93,7 +93,6 @@ struct CreateObjectBits
bool Vehicle : 1;
bool AnimKit : 1;
bool Rotation : 1;
- bool AreaTrigger : 1;
bool GameObject : 1;
bool SmoothPhasing : 1;
bool ThisIsYou : 1;
diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h
index ef802f8447d..874b38d87d8 100644
--- a/src/server/game/Entities/Object/Updates/UpdateField.h
+++ b/src/server/game/Entities/Object/Updates/UpdateField.h
@@ -23,6 +23,7 @@
#include "UpdateMask.h"
#include <algorithm>
#include <memory>
+#include <variant>
#include <vector>
class ByteBuffer;
@@ -68,6 +69,15 @@ namespace UF
template<typename T, int32 BlockBit, uint32 Bit>
class OptionalUpdateField;
+ template<typename T>
+ inline constexpr std::type_identity<T> VariantCase;
+
+ template<typename... Types>
+ class VariantUpdateFieldBase;
+
+ template<int32 BlockBit, uint32 Bit, typename... Types>
+ class VariantUpdateField;
+
template<typename T, bool PublicSet>
struct MutableFieldReferenceWithChangesMask;
@@ -352,6 +362,24 @@ namespace UF
return { *((_value.*field)._value) };
}
+ template<typename V, int32 BlockBit, uint32 Bit, typename... Types>
+ std::conditional_t<std::is_base_of_v<IsUpdateFieldStructureTag, V>,
+ MutableFieldReference<V, PublicSet>,
+ std::conditional_t<std::is_base_of_v<IsUpdateFieldHolderTag, V>,
+ MutableNestedFieldReference<V, PublicSet>,
+ UpdateFieldSetter<V, PublicSet>>>
+ ModifyValue(VariantUpdateField<BlockBit, Bit, Types...>(T::* field), [[maybe_unused]] std::type_identity<V> type)
+ {
+ if (!(_value.*field).template Is<V>())
+ (_value.*field).template ConstructValue<V>();
+
+ if constexpr (BlockBit >= 0)
+ _value._changesMask.Set(BlockBit);
+
+ _value._changesMask.Set(Bit);
+ return { *((_value.*field).template Get<V>()) };
+ }
+
private:
T& _value;
};
@@ -538,6 +566,17 @@ namespace UF
_changesMask.Set(Bit);
}
+ template<typename Derived, int32 BlockBit, uint32 Bit, typename... Types>
+ void MarkChanged(VariantUpdateField<BlockBit, Bit, Types...>(Derived::*))
+ {
+ static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask");
+
+ if constexpr (BlockBit >= 0)
+ _changesMask.Set(BlockBit);
+
+ _changesMask.Set(Bit);
+ }
+
template<typename Derived, typename T, int32 BlockBit, uint32 Bit>
void ClearChanged(UpdateField<T, BlockBit, Bit>(Derived::*))
{
@@ -578,6 +617,14 @@ namespace UF
_changesMask.Reset(Bit);
}
+ template<typename Derived, int32 BlockBit, uint32 Bit, typename... Types>
+ void ClearChanged(VariantUpdateField<BlockBit, Bit, Types...>(Derived::*))
+ {
+ static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask");
+
+ _changesMask.Reset(Bit);
+ }
+
Mask const& GetChangesMask() const { return _changesMask; }
protected:
@@ -614,6 +661,17 @@ namespace UF
field._value->ClearChangesMask();
}
+ template<int32 BlockBit, uint32 Bit, typename... Types>
+ static void ClearChangesMask(VariantUpdateField<BlockBit, Bit, Types...>& field)
+ {
+ if constexpr ((std::is_base_of_v<HasChangesMaskTag, Types> || ...))
+ std::visit([]<typename T>(T& value)
+ {
+ if constexpr (std::is_base_of_v<HasChangesMaskTag, T>)
+ value.ClearChangesMask();
+ }, field._value);
+ }
+
Mask _changesMask;
};
@@ -894,6 +952,64 @@ namespace UF
{
};
+ template<typename... Types>
+ class VariantUpdateFieldBase : public IsUpdateFieldHolderTag
+ {
+ template<typename F, bool PublicSet>
+ friend struct MutableFieldReferenceWithChangesMask;
+
+ template<typename F, bool PublicSet>
+ friend struct MutableFieldReferenceNoChangesMask;
+
+ template<typename F, bool PublicSet>
+ friend struct MutableNestedFieldReference;
+
+ template<std::size_t Bits>
+ friend class HasChangesMask;
+
+ friend class UpdateFieldHolder;
+
+ public:
+ template<typename T>
+ bool Is() const { return std::holds_alternative<T>(_value); }
+
+ template<typename T>
+ T const* Get() const noexcept
+ {
+ if (std::holds_alternative<T>(_value))
+ return &std::get<T>(_value);
+ return nullptr;
+ }
+
+ template<typename Visitor>
+ decltype(auto) Visit(Visitor&& visitor) const noexcept
+ {
+ return std::visit(std::forward<Visitor>(visitor), _value);
+ }
+
+ private:
+ template<typename T>
+ void ConstructValue()
+ {
+ _value.template emplace<T>();
+ }
+
+ template<typename T>
+ T* Get() noexcept
+ {
+ if (std::holds_alternative<T>(_value))
+ return &std::get<T>(_value);
+ return nullptr;
+ }
+
+ std::variant<std::monostate, Types...> _value;
+ };
+
+ template<int32 BlockBit, uint32 Bit, typename... Types>
+ class VariantUpdateField : public VariantUpdateFieldBase<Types...>
+ {
+ };
+
template<typename T>
struct ViewerDependentValueTag
{
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index a86aa7f9988..f70dc26de37 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -20,6 +20,7 @@
#include "ByteBuffer.h"
#include "Corpse.h"
#include "DynamicObject.h"
+#include "PacketOperators.h"
#include "Player.h"
#include "ViewerDependentValues.h"
@@ -852,18 +853,24 @@ void UnitChannel::WriteCreate(ByteBuffer& data, Unit const* owner, Player const*
{
data << int32(SpellID);
SpellVisual.WriteCreate(data, owner, receiver);
+ data << uint32(StartTimeMs);
+ data << uint32(Duration);
}
void UnitChannel::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
SpellVisual.WriteUpdate(data, ignoreChangesMask, owner, receiver);
+ data << uint32(StartTimeMs);
+ data << uint32(Duration);
}
bool UnitChannel::operator==(UnitChannel const& right) const
{
return SpellID == right.SpellID
- && SpellVisual == right.SpellVisual;
+ && SpellVisual == right.SpellVisual
+ && StartTimeMs == right.StartTimeMs
+ && Duration == right.Duration;
}
void VisibleItem::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
@@ -937,6 +944,51 @@ bool PassiveSpellHistory::operator==(PassiveSpellHistory const& right) const
&& AuraSpellID == right.AuraSpellID;
}
+void UnitAssistActionData::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
+{
+ data << uint8(Type);
+ data << uint32(VirtualRealmAddress);
+ data.WriteBits(PlayerName->size(), 6);
+ data.FlushBits();
+ data << WorldPackets::SizedString::Data(*PlayerName);
+}
+
+void UnitAssistActionData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 4);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << uint8(Type);
+ }
+ if (changesMask[3])
+ {
+ data << uint32(VirtualRealmAddress);
+ }
+ if (changesMask[2])
+ {
+ data.WriteBits(PlayerName->size(), 6);
+ data.FlushBits();
+ data << WorldPackets::SizedString::Data(*PlayerName);
+ }
+ }
+}
+
+void UnitAssistActionData::ClearChangesMask()
+{
+ Base::ClearChangesMask(Type);
+ Base::ClearChangesMask(PlayerName);
+ Base::ClearChangesMask(VirtualRealmAddress);
+ _changesMask.ResetAll();
+}
+
void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
{
ViewerDependentValue<StateWorldEffectIDsTag>::value_type stateWorldEffectIDs = {};
@@ -1148,18 +1200,24 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
{
data << ChannelObjects[i];
}
+ data.FlushBits();
data.WriteBit(Field_314);
+ data.WriteBits(AssistActionData.has_value(), 1);
+ if (AssistActionData.has_value())
+ {
+ AssistActionData->WriteCreate(data, owner, receiver);
+ }
data.FlushBits();
}
static constexpr void UnitDataAppendAllowedFieldsMaskForFlag(UnitData::Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
- allowedMaskForTarget |= std::array<uint32, 7>{ 0x00010000u, 0xF0040000u, 0xFF080000u, 0x000007FEu, 0xF0000080u, 0xFF80FFFFu, 0x3FFFFFFFu };
+ allowedMaskForTarget |= std::array<uint32, 7>{ 0x00010000u, 0xF0040000u, 0xFF080000u, 0x000007FEu, 0xE0000100u, 0xFF01FFFFu, 0x7FFFFFFFu };
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
- allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xF0000080u, 0x0000FFFFu, 0x00000000u };
+ allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xE0000100u, 0x0001FFFFu, 0x00000000u };
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
- allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0xF0000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0000FF00u };
+ allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0xF0000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0001FE00u };
}
void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
@@ -1169,14 +1227,14 @@ void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFl
void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
- Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x0FFBFFFFu, 0x00F7FFFFu, 0xFFFFF801u, 0x0FFFFFFFu, 0x007F0000u, 0x00000000u });
+ Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x0FFBFFFFu, 0x00F7FFFFu, 0xFFFFF801u, 0x1FFFFFFFu, 0x00FE0000u, 0x00000000u });
UnitDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask &= allowedMaskForTarget;
}
void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
{
- Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x0FFBFFFFu, 0x00F7FFFFu, 0xFFFFF801u, 0x0FFFFFFFu, 0x007F0000u, 0x00000000u });
+ Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x0FFBFFFFu, 0x00F7FFFFu, 0xFFFFF801u, 0x1FFFFFFFu, 0x00FE0000u, 0x00000000u });
UnitDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -1776,84 +1834,93 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
{
data << *NameplateAttachToGUID;
}
+ data.WriteBits(AssistActionData.has_value(), 1);
+ data.FlushBits();
+ if (changesMask[135])
+ {
+ if (AssistActionData.has_value())
+ {
+ AssistActionData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
}
- if (changesMask[135])
+ if (changesMask[136])
{
for (uint32 i = 0; i < 10; ++i)
{
- if (changesMask[136 + i])
+ if (changesMask[137 + i])
{
data << int32(Power[i]);
}
- if (changesMask[146 + i])
+ if (changesMask[147 + i])
{
data << int32(MaxPower[i]);
}
- if (changesMask[156 + i])
+ if (changesMask[157 + i])
{
data << float(PowerRegenFlatModifier[i]);
}
- if (changesMask[166 + i])
+ if (changesMask[167 + i])
{
data << float(PowerRegenInterruptedFlatModifier[i]);
}
}
}
- if (changesMask[176])
+ if (changesMask[177])
{
for (uint32 i = 0; i < 3; ++i)
{
- if (changesMask[177 + i])
+ if (changesMask[178 + i])
{
VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[180])
+ if (changesMask[181])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[181 + i])
+ if (changesMask[182 + i])
{
data << uint32(AttackRoundBaseTime[i]);
}
}
}
- if (changesMask[183])
+ if (changesMask[184])
{
for (uint32 i = 0; i < 4; ++i)
{
- if (changesMask[184 + i])
+ if (changesMask[185 + i])
{
data << int32(Stats[i]);
}
- if (changesMask[188 + i])
+ if (changesMask[189 + i])
{
data << int32(StatPosBuff[i]);
}
- if (changesMask[192 + i])
+ if (changesMask[193 + i])
{
data << int32(StatNegBuff[i]);
}
- if (changesMask[196 + i])
+ if (changesMask[197 + i])
{
data << int32(StatSupportBuff[i]);
}
}
}
- if (changesMask[200])
+ if (changesMask[201])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[201 + i])
+ if (changesMask[202 + i])
{
data << int32(Resistances[i]);
}
- if (changesMask[208 + i])
+ if (changesMask[209 + i])
{
data << int32(BonusResistanceMods[i]);
}
- if (changesMask[215 + i])
+ if (changesMask[216 + i])
{
data << int32(ManaCostModifier[i]);
}
@@ -1994,6 +2061,7 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(Field_31C);
Base::ClearChangesMask(Field_320);
Base::ClearChangesMask(NameplateAttachToGUID);
+ Base::ClearChangesMask(AssistActionData);
Base::ClearChangesMask(Power);
Base::ClearChangesMask(MaxPower);
Base::ClearChangesMask(PowerRegenFlatModifier);
@@ -2196,7 +2264,7 @@ void PetCreatureName::WriteCreate(ByteBuffer& data, Player const* owner, Player
{
data << uint32(CreatureID);
data.WriteBits(Name->size(), 8);
- data.WriteString(Name);
+ data << WorldPackets::SizedString::Data(*Name);
data.FlushBits();
}
@@ -2218,7 +2286,7 @@ void PetCreatureName::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Play
if (changesMask[2])
{
data.WriteBits(Name->size(), 8);
- data.WriteString(Name);
+ data << WorldPackets::SizedString::Data(*Name);
}
}
data.FlushBits();
@@ -2252,6 +2320,50 @@ bool CTROptions::operator==(CTROptions const& right) const
&& ChromieTimeExpansionMask == right.ChromieTimeExpansionMask;
}
+void LeaverInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << BnetAccountGUID;
+ data << float(LeaveScore);
+ data << uint32(SeasonID);
+ data << uint32(TotalLeaves);
+ data << uint32(TotalSuccesses);
+ data << int32(ConsecutiveSuccesses);
+ data << int64(LastPenaltyTime);
+ data << int64(LeaverExpirationTime);
+ data << int32(Unknown_1120);
+ data.WriteBits(LeaverStatus, 1);
+ data.FlushBits();
+}
+
+void LeaverInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ data << BnetAccountGUID;
+ data << float(LeaveScore);
+ data << uint32(SeasonID);
+ data << uint32(TotalLeaves);
+ data << uint32(TotalSuccesses);
+ data << int32(ConsecutiveSuccesses);
+ data << int64(LastPenaltyTime);
+ data << int64(LeaverExpirationTime);
+ data << int32(Unknown_1120);
+ data.WriteBits(LeaverStatus, 1);
+ data.FlushBits();
+}
+
+bool LeaverInfo::operator==(LeaverInfo const& right) const
+{
+ return BnetAccountGUID == right.BnetAccountGUID
+ && LeaveScore == right.LeaveScore
+ && SeasonID == right.SeasonID
+ && TotalLeaves == right.TotalLeaves
+ && TotalSuccesses == right.TotalSuccesses
+ && ConsecutiveSuccesses == right.ConsecutiveSuccesses
+ && LastPenaltyTime == right.LastPenaltyTime
+ && LeaverExpirationTime == right.LeaverExpirationTime
+ && Unknown_1120 == right.Unknown_1120
+ && LeaverStatus == right.LeaverStatus;
+}
+
void DeclinedNames::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
for (uint32 i = 0; i < 5; ++i)
@@ -2260,7 +2372,7 @@ void DeclinedNames::WriteCreate(ByteBuffer& data, Player const* owner, Player co
}
for (uint32 i = 0; i < 5; ++i)
{
- data.WriteString(Name[i]);
+ data << WorldPackets::SizedString::Data(Name[i]);
}
data.FlushBits();
}
@@ -2292,7 +2404,7 @@ void DeclinedNames::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player
{
if (changesMask[1 + i])
{
- data.WriteString(Name[i]);
+ data << WorldPackets::SizedString::Data(Name[i]);
}
}
}
@@ -2398,6 +2510,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
data << int32(FakeInebriation);
data << uint32(VirtualPlayerRealm);
data << uint32(CurrentSpecID);
+ data << int32(CurrentCombatTraitConfigSubTreeID);
data << int32(TaxiMountAnimKitID);
for (uint32 i = 0; i < 6; ++i)
{
@@ -2458,7 +2571,8 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
data.WriteBit(HasLevelLink);
data.WriteBits(DeclinedNames.has_value(), 1);
data << *DungeonScore;
- data.WriteString(Name);
+ data << WorldPackets::SizedString::Data(*Name);
+ LeaverInfo->WriteCreate(data, owner, receiver);
for (uint32 i = 0; i < 16; ++i)
{
data << VisibleEquipableSpells[i];
@@ -2477,7 +2591,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
static constexpr void PlayerDataAppendAllowedFieldsMaskForFlag(PlayerData::Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
- allowedMaskForTarget |= std::array<uint32, 11>{ 0x00000022u, 0xFFFE0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u };
+ allowedMaskForTarget |= std::array<uint32, 11>{ 0x00000022u, 0xFFF80000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000007u, 0x00000000u, 0x00000000u, 0x00000000u };
}
void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
@@ -2487,14 +2601,14 @@ void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, Enum
void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
- Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000003u });
+ Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0007FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000000Fu });
PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask &= allowedMaskForTarget;
}
void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000003u });
+ Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0007FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000000Fu });
PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -2708,74 +2822,82 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
if (changesMask[29])
{
- data << int32(TaxiMountAnimKitID);
+ data << int32(CurrentCombatTraitConfigSubTreeID);
}
if (changesMask[30])
{
- data << uint8(CurrentBattlePetBreedQuality);
+ data << int32(TaxiMountAnimKitID);
}
if (changesMask[31])
{
- data << int32(HonorLevel);
+ data << uint8(CurrentBattlePetBreedQuality);
}
}
if (changesMask[32])
{
if (changesMask[33])
{
+ data << int32(HonorLevel);
+ }
+ if (changesMask[34])
+ {
data << int64(LogoutTime);
}
- if (changesMask[35])
+ if (changesMask[36])
{
data << int32(Field_1AC);
}
- if (changesMask[36])
+ if (changesMask[37])
{
data << int32(Field_1B0);
}
- if (changesMask[37])
+ if (changesMask[38])
{
data << int32(CurrentBattlePetSpeciesID);
}
- if (changesMask[38])
+ if (changesMask[39])
{
CtrOptions->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[39])
+ if (changesMask[40])
{
data << int32(CovenantID);
}
- if (changesMask[40])
+ if (changesMask[41])
{
data << int32(SoulbindID);
}
- if (changesMask[42])
+ if (changesMask[44])
{
data << *SpectateTarget;
}
- if (changesMask[43])
+ if (changesMask[45])
{
data << int32(Field_200);
}
- if (changesMask[45])
+ if (changesMask[47])
{
PersonalTabard->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[34])
+ if (changesMask[35])
{
data.WriteBits(Name->size(), 6);
}
data.WriteBits(DeclinedNames.has_value(), 1);
data.FlushBits();
- if (changesMask[41])
+ if (changesMask[42])
{
data << *DungeonScore;
}
- if (changesMask[34])
+ if (changesMask[35])
{
- data.WriteString(Name);
+ data << WorldPackets::SizedString::Data(*Name);
}
- if (changesMask[44])
+ if (changesMask[43])
+ {
+ LeaverInfo->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ if (changesMask[46])
{
if (DeclinedNames.has_value())
{
@@ -2783,21 +2905,21 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[46])
+ if (changesMask[48])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[47 + i])
+ if (changesMask[49 + i])
{
data << uint8(PartyType[i]);
}
}
}
- if (changesMask[49])
+ if (changesMask[51])
{
for (uint32 i = 0; i < 175; ++i)
{
- if (changesMask[50 + i])
+ if (changesMask[52 + i])
{
if (noQuestLogChangesMask)
QuestLog[i].WriteCreate(data, owner, receiver);
@@ -2806,51 +2928,51 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[225])
+ if (changesMask[227])
{
for (uint32 i = 0; i < 19; ++i)
{
- if (changesMask[226 + i])
+ if (changesMask[228 + i])
{
VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[245])
+ if (changesMask[247])
{
for (uint32 i = 0; i < 6; ++i)
{
- if (changesMask[246 + i])
+ if (changesMask[248 + i])
{
data << float(AvgItemLevel[i]);
}
}
}
- if (changesMask[252])
+ if (changesMask[254])
{
for (uint32 i = 0; i < 32; ++i)
{
- if (changesMask[253 + i])
+ if (changesMask[255 + i])
{
ForcedReactions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[302])
+ if (changesMask[304])
{
for (uint32 i = 0; i < 19; ++i)
{
- if (changesMask[303 + i])
+ if (changesMask[305 + i])
{
data << uint32(Field_3120[i]);
}
}
}
- if (changesMask[285])
+ if (changesMask[287])
{
for (uint32 i = 0; i < 16; ++i)
{
- if (changesMask[286 + i])
+ if (changesMask[288 + i])
{
data << VisibleEquipableSpells[i];
}
@@ -2889,6 +3011,7 @@ void PlayerData::ClearChangesMask()
Base::ClearChangesMask(FakeInebriation);
Base::ClearChangesMask(VirtualPlayerRealm);
Base::ClearChangesMask(CurrentSpecID);
+ Base::ClearChangesMask(CurrentCombatTraitConfigSubTreeID);
Base::ClearChangesMask(TaxiMountAnimKitID);
Base::ClearChangesMask(CurrentBattlePetBreedQuality);
Base::ClearChangesMask(HonorLevel);
@@ -2901,6 +3024,7 @@ void PlayerData::ClearChangesMask()
Base::ClearChangesMask(CovenantID);
Base::ClearChangesMask(SoulbindID);
Base::ClearChangesMask(DungeonScore);
+ Base::ClearChangesMask(LeaverInfo);
Base::ClearChangesMask(SpectateTarget);
Base::ClearChangesMask(Field_200);
Base::ClearChangesMask(DeclinedNames);
@@ -3613,6 +3737,7 @@ void TraitEntry::WriteCreate(ByteBuffer& data, Player const* owner, Player const
data << int32(TraitNodeEntryID);
data << int32(Rank);
data << int32(GrantedRanks);
+ data << int32(BonusRanks);
}
void TraitEntry::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
@@ -3621,6 +3746,7 @@ void TraitEntry::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player co
data << int32(TraitNodeEntryID);
data << int32(Rank);
data << int32(GrantedRanks);
+ data << int32(BonusRanks);
}
bool TraitEntry::operator==(TraitEntry const& right) const
@@ -3628,7 +3754,8 @@ bool TraitEntry::operator==(TraitEntry const& right) const
return TraitNodeID == right.TraitNodeID
&& TraitNodeEntryID == right.TraitNodeEntryID
&& Rank == right.Rank
- && GrantedRanks == right.GrantedRanks;
+ && GrantedRanks == right.GrantedRanks
+ && BonusRanks == right.BonusRanks;
}
void TraitSubTreeCache::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
@@ -3692,7 +3819,7 @@ void TraitConfig::WriteCreate(ByteBuffer& data, Player const* owner, Player cons
{
SubTrees[i].WriteCreate(data, owner, receiver);
}
- data.WriteString(Name);
+ data << WorldPackets::SizedString::Data(*Name);
data.FlushBits();
}
@@ -3802,7 +3929,7 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c
if (changesMask[5])
{
data.WriteBits(Name->size(), 9);
- data.WriteString(Name);
+ data << WorldPackets::SizedString::Data(*Name);
}
}
data.FlushBits();
@@ -3987,7 +4114,7 @@ void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Playe
{
Reagents[i].WriteCreate(data, owner, receiver);
}
- data.WriteString(CustomerNotes);
+ data << WorldPackets::SizedString::Data(*CustomerNotes);
if (Customer.has_value())
{
Customer->WriteCreate(data, owner, receiver);
@@ -4123,7 +4250,7 @@ void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl
{
if (changesMask[20])
{
- data.WriteString(CustomerNotes);
+ data << WorldPackets::SizedString::Data(*CustomerNotes);
}
if (changesMask[21])
{
@@ -4398,7 +4525,7 @@ void StablePetInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player co
data << uint8(PetFlags);
data << uint32(Specialization);
data.WriteBits(Name->size(), 8);
- data.WriteString(Name);
+ data << WorldPackets::SizedString::Data(*Name);
data.FlushBits();
}
@@ -4444,7 +4571,7 @@ void StablePetInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player
if (changesMask[6])
{
data.WriteBits(Name->size(), 8);
- data.WriteString(Name);
+ data << WorldPackets::SizedString::Data(*Name);
}
}
data.FlushBits();
@@ -4565,9 +4692,9 @@ void BankTabSettings::WriteCreate(ByteBuffer& data, Player const* owner, Player
data.WriteBits(Icon->size(), 9);
data.WriteBits(Description->size(), 14);
data << int32(DepositFlags);
- data.WriteString(Name);
- data.WriteString(Icon);
- data.WriteString(Description);
+ data << WorldPackets::SizedString::Data(*Name);
+ data << WorldPackets::SizedString::Data(*Icon);
+ data << WorldPackets::SizedString::Data(*Description);
data.FlushBits();
}
@@ -4598,15 +4725,15 @@ void BankTabSettings::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Play
}
if (changesMask[0])
{
- data.WriteString(Name);
+ data << WorldPackets::SizedString::Data(*Name);
}
if (changesMask[1])
{
- data.WriteString(Icon);
+ data << WorldPackets::SizedString::Data(*Icon);
}
if (changesMask[2])
{
- data.WriteString(Description);
+ data << WorldPackets::SizedString::Data(*Description);
}
data.FlushBits();
}
@@ -4687,6 +4814,47 @@ bool DelveData::operator==(DelveData const& right) const
&& Started == right.Started;
}
+void ChallengeModeData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << int32(Unknown_1120_1);
+ data << int32(Unknown_1120_2);
+ data << uint64(Unknown_1120_3);
+ data << int64(Unknown_1120_4);
+ data << KeystoneOwnerGUID;
+ data << LeaverGUID;
+ data.WriteBits(IsActive, 1);
+ data.WriteBits(HasRestrictions, 1);
+ data.WriteBits(CanVoteAbandon, 1);
+ data.FlushBits();
+}
+
+void ChallengeModeData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ data << int32(Unknown_1120_1);
+ data << int32(Unknown_1120_2);
+ data << uint64(Unknown_1120_3);
+ data << int64(Unknown_1120_4);
+ data << KeystoneOwnerGUID;
+ data << LeaverGUID;
+ data.WriteBits(IsActive, 1);
+ data.WriteBits(HasRestrictions, 1);
+ data.WriteBits(CanVoteAbandon, 1);
+ data.FlushBits();
+}
+
+bool ChallengeModeData::operator==(ChallengeModeData const& right) const
+{
+ return Unknown_1120_1 == right.Unknown_1120_1
+ && Unknown_1120_2 == right.Unknown_1120_2
+ && Unknown_1120_3 == right.Unknown_1120_3
+ && Unknown_1120_4 == right.Unknown_1120_4
+ && KeystoneOwnerGUID == right.KeystoneOwnerGUID
+ && LeaverGUID == right.LeaverGUID
+ && IsActive == right.IsActive
+ && HasRestrictions == right.HasRestrictions
+ && CanVoteAbandon == right.CanVoteAbandon;
+}
+
void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int16(ResearchProjectID);
@@ -4704,7 +4872,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 < 232; ++i)
+ for (uint32 i = 0; i < 105; ++i)
{
data << InvSlots[i];
}
@@ -4819,14 +4987,11 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
data << uint32(BagSlotFlags[i]);
}
- for (uint32 i = 0; i < 7; ++i)
- {
- data << uint32(BankBagSlotFlags[i]);
- }
data << int32(Honor);
data << int32(HonorNextLevel);
data << int32(PerksProgramCurrency);
data << uint8(NumBankSlots);
+ data << uint8(NumCharacterBankTabs);
data << uint8(NumAccountBankTabs);
for (uint32 i = 0; i < 1; ++i)
{
@@ -5017,9 +5182,11 @@ 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(CharacterBankTabSettings.size(), 3);
data.WriteBits(AccountBankTabSettings.size(), 3);
data.WriteBits(WalkInData.has_value(), 1);
data.WriteBits(DelveData.has_value(), 1);
+ data.WriteBits(ChallengeModeData.has_value(), 1);
data.FlushBits();
ResearchHistory->WriteCreate(data, owner, receiver);
if (QuestSession.has_value())
@@ -5049,6 +5216,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
PetStable->WriteCreate(data, owner, receiver);
}
+ for (uint32 i = 0; i < CharacterBankTabSettings.size(); ++i)
+ {
+ CharacterBankTabSettings[i].WriteCreate(data, owner, receiver);
+ }
for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
{
AccountBankTabSettings[i].WriteCreate(data, owner, receiver);
@@ -5061,6 +5232,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
DelveData->WriteCreate(data, owner, receiver);
}
+ if (ChallengeModeData.has_value())
+ {
+ ChallengeModeData->WriteCreate(data, owner, receiver);
+ }
data.FlushBits();
}
@@ -5071,8 +5246,8 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlocksMask(0), 17);
- for (uint32 i = 0; i < 17; ++i)
+ data.WriteBits(changesMask.GetBlocksMask(0), 13);
+ for (uint32 i = 0; i < 13; ++i)
if (changesMask.GetBlock(i))
data.WriteBits(changesMask.GetBlock(i), 32);
@@ -5131,11 +5306,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data);
}
}
- if (changesMask[42])
+ if (changesMask[43])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[43])
+ if (changesMask[44])
{
if (!ignoreNestedChangesMask)
ResearchSites[i].WriteUpdateMask(data);
@@ -5144,11 +5319,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[44])
+ if (changesMask[45])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[45])
+ if (changesMask[46])
{
if (!ignoreNestedChangesMask)
ResearchSiteProgress[i].WriteUpdateMask(data);
@@ -5157,11 +5332,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[46])
+ if (changesMask[47])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[47])
+ if (changesMask[48])
{
if (!ignoreNestedChangesMask)
Research[i].WriteUpdateMask(data);
@@ -5170,11 +5345,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[42])
+ if (changesMask[43])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[43])
+ if (changesMask[44])
{
for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
{
@@ -5186,11 +5361,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[44])
+ if (changesMask[45])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[45])
+ if (changesMask[46])
{
for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
{
@@ -5202,11 +5377,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[46])
+ if (changesMask[47])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[47])
+ if (changesMask[48])
{
for (uint32 j = 0; j < Research[i].size(); ++j)
{
@@ -5731,6 +5906,13 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
if (changesMask[41])
{
if (!ignoreNestedChangesMask)
+ CharacterBankTabSettings.WriteUpdateMask(data, 3);
+ else
+ WriteCompleteDynamicFieldUpdateMask(CharacterBankTabSettings.size(), data, 3);
+ }
+ if (changesMask[42])
+ {
+ if (!ignoreNestedChangesMask)
AccountBankTabSettings.WriteUpdateMask(data, 3);
else
WriteCompleteDynamicFieldUpdateMask(AccountBankTabSettings.size(), data, 3);
@@ -5784,6 +5966,16 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
if (changesMask[41])
{
+ for (uint32 i = 0; i < CharacterBankTabSettings.size(); ++i)
+ {
+ if (CharacterBankTabSettings.HasChanged(i) || ignoreNestedChangesMask)
+ {
+ CharacterBankTabSettings[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[42])
+ {
for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
{
if (AccountBankTabSettings.HasChanged(i) || ignoreNestedChangesMask)
@@ -5792,364 +5984,368 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[48])
- {
- data << *FarsightObject;
- }
if (changesMask[49])
{
- data << *SummonedBattlePetGUID;
+ data << *FarsightObject;
}
if (changesMask[50])
{
- data << uint64(Coinage);
+ data << *SummonedBattlePetGUID;
}
if (changesMask[51])
{
- data << uint64(AccountBankCoinage);
+ data << uint64(Coinage);
}
if (changesMask[52])
{
- data << int32(XP);
+ data << uint64(AccountBankCoinage);
}
if (changesMask[53])
{
- data << int32(NextLevelXP);
+ data << int32(XP);
}
if (changesMask[54])
{
- data << int32(TrialXP);
+ data << int32(NextLevelXP);
}
if (changesMask[55])
{
- Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << int32(TrialXP);
}
if (changesMask[56])
{
- data << int32(CharacterPoints);
+ Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
if (changesMask[57])
{
- data << int32(MaxTalentTiers);
+ data << int32(CharacterPoints);
}
if (changesMask[58])
{
- data << uint32(TrackCreatureMask);
+ data << int32(MaxTalentTiers);
}
if (changesMask[59])
{
- data << float(MainhandExpertise);
+ data << uint32(TrackCreatureMask);
}
if (changesMask[60])
{
- data << float(OffhandExpertise);
+ data << float(MainhandExpertise);
}
if (changesMask[61])
{
- data << float(RangedExpertise);
+ data << float(OffhandExpertise);
}
if (changesMask[62])
{
- data << float(CombatRatingExpertise);
+ data << float(RangedExpertise);
}
if (changesMask[63])
{
- data << float(BlockPercentage);
+ data << float(CombatRatingExpertise);
}
if (changesMask[64])
{
- data << float(DodgePercentage);
+ data << float(BlockPercentage);
}
if (changesMask[65])
{
- data << float(DodgePercentageFromAttribute);
+ data << float(DodgePercentage);
}
if (changesMask[66])
{
- data << float(ParryPercentage);
+ data << float(DodgePercentageFromAttribute);
}
if (changesMask[67])
{
- data << float(ParryPercentageFromAttribute);
+ data << float(ParryPercentage);
}
if (changesMask[68])
{
- data << float(CritPercentage);
+ data << float(ParryPercentageFromAttribute);
}
if (changesMask[69])
{
- data << float(RangedCritPercentage);
+ data << float(CritPercentage);
}
}
if (changesMask[70])
{
if (changesMask[71])
{
- data << float(OffhandCritPercentage);
+ data << float(RangedCritPercentage);
}
if (changesMask[72])
{
- data << float(SpellCritPercentage);
+ data << float(OffhandCritPercentage);
}
if (changesMask[73])
{
- data << int32(ShieldBlock);
+ data << float(SpellCritPercentage);
}
if (changesMask[74])
{
- data << float(ShieldBlockCritPercentage);
+ data << int32(ShieldBlock);
}
if (changesMask[75])
{
- data << float(Mastery);
+ data << float(ShieldBlockCritPercentage);
}
if (changesMask[76])
{
- data << float(Speed);
+ data << float(Mastery);
}
if (changesMask[77])
{
- data << float(Avoidance);
+ data << float(Speed);
}
if (changesMask[78])
{
- data << float(Sturdiness);
+ data << float(Avoidance);
}
if (changesMask[79])
{
- data << int32(Versatility);
+ data << float(Sturdiness);
}
if (changesMask[80])
{
- data << float(VersatilityBonus);
+ data << int32(Versatility);
}
if (changesMask[81])
{
- data << float(PvpPowerDamage);
+ data << float(VersatilityBonus);
}
if (changesMask[82])
{
- data << float(PvpPowerHealing);
+ data << float(PvpPowerDamage);
}
if (changesMask[83])
{
- BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << float(PvpPowerHealing);
}
if (changesMask[84])
{
- data << int32(ModHealingDonePos);
+ BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
if (changesMask[85])
{
- data << float(ModHealingPercent);
+ data << int32(ModHealingDonePos);
}
if (changesMask[86])
{
- data << float(ModPeriodicHealingDonePercent);
+ data << float(ModHealingPercent);
}
if (changesMask[87])
{
- data << float(ModSpellPowerPercent);
+ data << float(ModPeriodicHealingDonePercent);
}
if (changesMask[88])
{
- data << float(ModResiliencePercent);
+ data << float(ModSpellPowerPercent);
}
if (changesMask[89])
{
- data << float(OverrideSpellPowerByAPPercent);
+ data << float(ModResiliencePercent);
}
if (changesMask[90])
{
- data << float(OverrideAPBySpellPowerPercent);
+ data << float(OverrideSpellPowerByAPPercent);
}
if (changesMask[91])
{
- data << int32(ModTargetResistance);
+ data << float(OverrideAPBySpellPowerPercent);
}
if (changesMask[92])
{
- data << int32(ModTargetPhysicalResistance);
+ data << int32(ModTargetResistance);
}
if (changesMask[93])
{
- data << uint32(LocalFlags);
+ data << int32(ModTargetPhysicalResistance);
}
if (changesMask[94])
{
- data << uint8(GrantableLevels);
+ data << uint32(LocalFlags);
}
if (changesMask[95])
{
- data << uint8(MultiActionBars);
+ data << uint8(GrantableLevels);
}
if (changesMask[96])
{
- data << uint8(LifetimeMaxRank);
+ data << uint8(MultiActionBars);
}
if (changesMask[97])
{
- data << uint8(NumRespecs);
+ data << uint8(LifetimeMaxRank);
}
if (changesMask[98])
{
- data << uint32(PvpMedals);
+ data << uint8(NumRespecs);
}
if (changesMask[99])
{
- data << uint16(TodayHonorableKills);
+ data << uint32(PvpMedals);
}
if (changesMask[100])
{
- data << uint16(YesterdayHonorableKills);
+ data << uint16(TodayHonorableKills);
}
if (changesMask[101])
{
- data << uint32(LifetimeHonorableKills);
+ data << uint16(YesterdayHonorableKills);
}
}
if (changesMask[102])
{
if (changesMask[103])
{
- data << int32(WatchedFactionIndex);
+ data << uint32(LifetimeHonorableKills);
}
if (changesMask[104])
{
- data << int32(MaxLevel);
+ data << int32(WatchedFactionIndex);
}
if (changesMask[105])
{
- data << int32(ScalingPlayerLevelDelta);
+ data << int32(MaxLevel);
}
if (changesMask[106])
{
- data << int32(MaxCreatureScalingLevel);
+ data << int32(ScalingPlayerLevelDelta);
}
if (changesMask[107])
{
- data << int32(PetSpellPower);
+ data << int32(MaxCreatureScalingLevel);
}
if (changesMask[108])
{
- data << float(UiHitModifier);
+ data << int32(PetSpellPower);
}
if (changesMask[109])
{
- data << float(UiSpellHitModifier);
+ data << float(UiHitModifier);
}
if (changesMask[110])
{
- data << int32(HomeRealmTimeOffset);
+ data << float(UiSpellHitModifier);
}
if (changesMask[111])
{
- data << float(ModPetHaste);
+ data << int32(HomeRealmTimeOffset);
}
if (changesMask[112])
{
- data << int8(JailersTowerLevelMax);
+ data << float(ModPetHaste);
}
if (changesMask[113])
{
- data << int8(JailersTowerLevel);
+ data << int8(JailersTowerLevelMax);
}
if (changesMask[114])
{
- data << uint8(LocalRegenFlags);
+ data << int8(JailersTowerLevel);
}
if (changesMask[115])
{
- data << uint8(AuraVision);
+ data << uint8(LocalRegenFlags);
}
if (changesMask[116])
{
- data << uint8(NumBackpackSlots);
+ data << uint8(AuraVision);
}
if (changesMask[117])
{
- data << int32(OverrideSpellsID);
+ data << uint8(NumBackpackSlots);
}
if (changesMask[118])
{
- data << uint16(LootSpecID);
+ data << int32(OverrideSpellsID);
}
if (changesMask[119])
{
- data << uint32(OverrideZonePVPType);
+ data << uint16(LootSpecID);
}
if (changesMask[120])
{
- data << int32(Honor);
+ data << uint32(OverrideZonePVPType);
}
if (changesMask[121])
{
- data << int32(HonorNextLevel);
+ data << int32(Honor);
}
if (changesMask[122])
{
- data << int32(PerksProgramCurrency);
+ data << int32(HonorNextLevel);
}
if (changesMask[123])
{
- data << uint8(NumBankSlots);
+ data << int32(PerksProgramCurrency);
}
if (changesMask[124])
{
- data << uint8(NumAccountBankTabs);
+ data << uint8(NumBankSlots);
}
- if (changesMask[129])
+ if (changesMask[125])
{
- data << int32(UiChromieTimeExpansionID);
+ data << uint8(NumCharacterBankTabs);
}
- if (changesMask[130])
+ if (changesMask[126])
{
- data << int32(TimerunningSeasonID);
+ data << uint8(NumAccountBankTabs);
}
if (changesMask[131])
{
- data << int32(TransportServerTime);
+ data << int32(UiChromieTimeExpansionID);
}
if (changesMask[132])
{
- data << uint32(WeeklyRewardsPeriodSinceOrigin);
+ data << int32(TimerunningSeasonID);
}
if (changesMask[133])
{
- data << int16(DEBUGSoulbindConduitRank);
+ data << int32(TransportServerTime);
}
}
if (changesMask[134])
{
+ if (changesMask[135])
+ {
+ data << uint32(WeeklyRewardsPeriodSinceOrigin);
+ }
if (changesMask[136])
{
+ data << int16(DEBUGSoulbindConduitRank);
+ }
+ if (changesMask[138])
+ {
data << uint32(ActiveCombatTraitConfigID);
}
- if (changesMask[137])
+ if (changesMask[139])
{
data << int32(ItemUpgradeHighOnehandWeaponItemID);
}
- if (changesMask[138])
+ if (changesMask[140])
{
data << int32(ItemUpgradeHighFingerItemID);
}
- if (changesMask[139])
+ if (changesMask[141])
{
data << float(ItemUpgradeHighFingerWatermark);
}
- if (changesMask[140])
+ if (changesMask[142])
{
data << int32(ItemUpgradeHighTrinketItemID);
}
- if (changesMask[141])
+ if (changesMask[143])
{
data << float(ItemUpgradeHighTrinketWatermark);
}
- if (changesMask[142])
+ if (changesMask[144])
{
data << uint64(LootHistoryInstanceID);
}
- if (changesMask[144])
+ if (changesMask[146])
{
data << uint8(RequiredMountCapabilityFlags);
}
@@ -6163,183 +6359,181 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
data.WriteBits(PetStable.has_value(), 1);
data.WriteBits(WalkInData.has_value(), 1);
data.WriteBits(DelveData.has_value(), 1);
+ data.WriteBits(ChallengeModeData.has_value(), 1);
}
data.FlushBits();
if (changesMask[102])
{
- if (changesMask[125])
+ if (changesMask[127])
{
ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[127])
+ if (changesMask[129])
{
if (QuestSession.has_value())
{
QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- if (changesMask[126])
+ if (changesMask[128])
{
data << *FrozenPerksVendorItem;
}
- if (changesMask[128])
+ if (changesMask[130])
{
Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
if (changesMask[134])
{
- if (changesMask[135])
+ if (changesMask[137])
{
data << *DungeonScore;
}
- if (changesMask[143])
+ if (changesMask[145])
{
if (PetStable.has_value())
{
PetStable->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- if (changesMask[145])
+ if (changesMask[147])
{
if (WalkInData.has_value())
{
WalkInData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- if (changesMask[146])
+ if (changesMask[148])
{
if (DelveData.has_value())
{
DelveData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
+ if (changesMask[149])
+ {
+ if (ChallengeModeData.has_value())
+ {
+ ChallengeModeData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
}
- if (changesMask[147])
+ if (changesMask[150])
{
- for (uint32 i = 0; i < 232; ++i)
+ for (uint32 i = 0; i < 105; ++i)
{
- if (changesMask[148 + i])
+ if (changesMask[151 + i])
{
data << InvSlots[i];
}
}
}
- if (changesMask[380])
+ if (changesMask[256])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[381 + i])
+ if (changesMask[257 + i])
{
RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[383])
+ if (changesMask[259])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[384 + i])
+ if (changesMask[260 + i])
{
data << int32(ModDamageDonePos[i]);
}
- if (changesMask[391 + i])
+ if (changesMask[267 + i])
{
data << int32(ModDamageDoneNeg[i]);
}
- if (changesMask[398 + i])
+ if (changesMask[274 + i])
{
data << float(ModDamageDonePercent[i]);
}
- if (changesMask[405 + i])
+ if (changesMask[281 + i])
{
data << float(ModHealingDonePercent[i]);
}
}
}
- if (changesMask[412])
+ if (changesMask[288])
{
for (uint32 i = 0; i < 3; ++i)
{
- if (changesMask[413 + i])
+ if (changesMask[289 + i])
{
data << float(WeaponDmgMultipliers[i]);
}
- if (changesMask[416 + i])
+ if (changesMask[292 + i])
{
data << float(WeaponAtkSpeedMultipliers[i]);
}
}
}
- if (changesMask[419])
+ if (changesMask[295])
{
for (uint32 i = 0; i < 12; ++i)
{
- if (changesMask[420 + i])
+ if (changesMask[296 + i])
{
data << uint32(BuybackPrice[i]);
}
- if (changesMask[432 + i])
+ if (changesMask[308 + i])
{
data << int64(BuybackTimestamp[i]);
}
}
}
- if (changesMask[444])
+ if (changesMask[320])
{
for (uint32 i = 0; i < 32; ++i)
{
- if (changesMask[445 + i])
+ if (changesMask[321 + i])
{
data << int32(CombatRatings[i]);
}
}
}
- if (changesMask[477])
+ if (changesMask[353])
{
for (uint32 i = 0; i < 4; ++i)
{
- if (changesMask[478 + i])
+ if (changesMask[354 + i])
{
data << uint32(NoReagentCostMask[i]);
}
}
}
- if (changesMask[482])
+ if (changesMask[358])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[483 + i])
+ if (changesMask[359 + i])
{
data << int32(ProfessionSkillLine[i]);
}
}
}
- if (changesMask[485])
+ if (changesMask[361])
{
for (uint32 i = 0; i < 5; ++i)
{
- if (changesMask[486 + i])
+ if (changesMask[362 + i])
{
data << uint32(BagSlotFlags[i]);
}
}
}
- if (changesMask[491])
- {
- for (uint32 i = 0; i < 7; ++i)
- {
- if (changesMask[492 + i])
- {
- data << uint32(BankBagSlotFlags[i]);
- }
- }
- }
- if (changesMask[499])
+ if (changesMask[367])
{
for (uint32 i = 0; i < 17; ++i)
{
- if (changesMask[500 + i])
+ if (changesMask[368 + i])
{
data << float(ItemUpgradeHighWatermark[i]);
}
@@ -6392,6 +6586,7 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(CharacterRestrictions);
Base::ClearChangesMask(TraitConfigs);
Base::ClearChangesMask(CraftingOrders);
+ Base::ClearChangesMask(CharacterBankTabSettings);
Base::ClearChangesMask(AccountBankTabSettings);
Base::ClearChangesMask(FarsightObject);
Base::ClearChangesMask(SummonedBattlePetGUID);
@@ -6467,6 +6662,7 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(HonorNextLevel);
Base::ClearChangesMask(PerksProgramCurrency);
Base::ClearChangesMask(NumBankSlots);
+ Base::ClearChangesMask(NumCharacterBankTabs);
Base::ClearChangesMask(NumAccountBankTabs);
Base::ClearChangesMask(ResearchHistory);
Base::ClearChangesMask(FrozenPerksVendorItem);
@@ -6489,6 +6685,7 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(RequiredMountCapabilityFlags);
Base::ClearChangesMask(WalkInData);
Base::ClearChangesMask(DelveData);
+ Base::ClearChangesMask(ChallengeModeData);
Base::ClearChangesMask(InvSlots);
Base::ClearChangesMask(RestInfo);
Base::ClearChangesMask(ModDamageDonePos);
@@ -6503,11 +6700,44 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(NoReagentCostMask);
Base::ClearChangesMask(ProfessionSkillLine);
Base::ClearChangesMask(BagSlotFlags);
- Base::ClearChangesMask(BankBagSlotFlags);
Base::ClearChangesMask(ItemUpgradeHighWatermark);
_changesMask.ResetAll();
}
+void GameObjectAssistActionData::WriteCreate(ByteBuffer& data, GameObject const* owner, Player const* receiver) const
+{
+ data.WriteBits(PlayerName.size(), 6);
+ data.WriteBits(MonsterName.size() + 1, 11);
+ data << uint32(VirtualRealmAddress);
+ data << uint8(Sex);
+ data << int64(Time);
+ data << int32(DelveTier);
+ data << WorldPackets::SizedString::Data(PlayerName);
+ data << WorldPackets::SizedCString::Data(MonsterName);
+}
+
+void GameObjectAssistActionData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, GameObject const* owner, Player const* receiver) const
+{
+ data.WriteBits(PlayerName.size(), 6);
+ data.WriteBits(MonsterName.size() + 1, 11);
+ data << uint32(VirtualRealmAddress);
+ data << uint8(Sex);
+ data << int64(Time);
+ data << int32(DelveTier);
+ data << WorldPackets::SizedString::Data(PlayerName);
+ data << WorldPackets::SizedCString::Data(MonsterName);
+}
+
+bool GameObjectAssistActionData::operator==(GameObjectAssistActionData const& right) const
+{
+ return PlayerName == right.PlayerName
+ && MonsterName == right.MonsterName
+ && VirtualRealmAddress == right.VirtualRealmAddress
+ && Sex == right.Sex
+ && Time == right.Time
+ && DelveTier == right.DelveTier;
+}
+
void GameObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const
{
ViewerDependentValue<StateWorldEffectIDsTag>::value_type stateWorldEffectIDs = {};
@@ -6552,6 +6782,12 @@ void GameObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fie
{
data << int32(WorldEffects[i]);
}
+ data.WriteBits(AssistActionData.has_value(), 1);
+ data.FlushBits();
+ if (AssistActionData.has_value())
+ {
+ AssistActionData->WriteCreate(data, owner, receiver);
+ }
}
void GameObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const
@@ -6561,7 +6797,7 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fie
void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, GameObject const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlock(0), 25);
+ data.WriteBits(changesMask.GetBlock(0), 26);
ViewerDependentValue<StateWorldEffectIDsTag>::value_type stateWorldEffectIDs = {};
@@ -6705,6 +6941,15 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool
{
data << uint32(UiWidgetItemUnknown1000);
}
+ data.WriteBits(AssistActionData.has_value(), 1);
+ data.FlushBits();
+ if (changesMask[25])
+ {
+ if (AssistActionData.has_value())
+ {
+ AssistActionData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
}
}
@@ -6734,6 +6979,7 @@ void GameObjectData::ClearChangesMask()
Base::ClearChangesMask(UiWidgetItemID);
Base::ClearChangesMask(UiWidgetItemQuality);
Base::ClearChangesMask(UiWidgetItemUnknown1000);
+ Base::ClearChangesMask(AssistActionData);
_changesMask.ResetAll();
}
@@ -7044,6 +7290,514 @@ void VisualAnim::ClearChangesMask()
_changesMask.ResetAll();
}
+void ForceSetAreaTriggerPositionAndRotation::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << TriggerGUID;
+ data << Position;
+ data << float(Rotation.x);
+ data << float(Rotation.y);
+ data << float(Rotation.z);
+ data << float(Rotation.w);
+}
+
+void ForceSetAreaTriggerPositionAndRotation::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << TriggerGUID;
+ data << Position;
+ data << float(Rotation.x);
+ data << float(Rotation.y);
+ data << float(Rotation.z);
+ data << float(Rotation.w);
+}
+
+bool ForceSetAreaTriggerPositionAndRotation::operator==(ForceSetAreaTriggerPositionAndRotation const& right) const
+{
+ return TriggerGUID == right.TriggerGUID
+ && Position == right.Position
+ && Rotation == right.Rotation;
+}
+
+void AreaTriggerSplineCalculator::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data.WriteBits(Points.size(), 16);
+ data.WriteBit(Catmullrom);
+ for (uint32 i = 0; i < Points.size(); ++i)
+ {
+ data << Points[i];
+ }
+ data.FlushBits();
+}
+
+void AreaTriggerSplineCalculator::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 3);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.WriteBit(Catmullrom);
+ }
+ if (changesMask[2])
+ {
+ if (!ignoreChangesMask)
+ Points.WriteUpdateMask(data, 16);
+ else
+ WriteCompleteDynamicFieldUpdateMask(Points.size(), data, 16);
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ for (uint32 i = 0; i < Points.size(); ++i)
+ {
+ if (Points.HasChanged(i) || ignoreChangesMask)
+ {
+ data << Points[i];
+ }
+ }
+ }
+ }
+ data.FlushBits();
+}
+
+void AreaTriggerSplineCalculator::ClearChangesMask()
+{
+ Base::ClearChangesMask(Catmullrom);
+ Base::ClearChangesMask(Points);
+ _changesMask.ResetAll();
+}
+
+void AreaTriggerOrbit::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << *Center;
+ data << float(Radius);
+ data << float(InitialAngle);
+ data << float(BlendFromRadius);
+ data << int32(ExtraTimeForBlending);
+ data.WriteBit(CounterClockwise);
+ data.FlushBits();
+}
+
+void AreaTriggerOrbit::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 7);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.WriteBit(CounterClockwise);
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ data << *Center;
+ }
+ if (changesMask[3])
+ {
+ data << float(Radius);
+ }
+ if (changesMask[4])
+ {
+ data << float(InitialAngle);
+ }
+ if (changesMask[5])
+ {
+ data << float(BlendFromRadius);
+ }
+ if (changesMask[6])
+ {
+ data << int32(ExtraTimeForBlending);
+ }
+ }
+ data.FlushBits();
+}
+
+void AreaTriggerOrbit::ClearChangesMask()
+{
+ Base::ClearChangesMask(CounterClockwise);
+ Base::ClearChangesMask(Center);
+ Base::ClearChangesMask(Radius);
+ Base::ClearChangesMask(InitialAngle);
+ Base::ClearChangesMask(BlendFromRadius);
+ Base::ClearChangesMask(ExtraTimeForBlending);
+ _changesMask.ResetAll();
+}
+
+void AreaTriggerMovementScript::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << int32(SpellScriptID);
+ data << *Center;
+ data << uint32(CreationTime);
+}
+
+void AreaTriggerMovementScript::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 4);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(SpellScriptID);
+ }
+ if (changesMask[2])
+ {
+ data << *Center;
+ }
+ if (changesMask[3])
+ {
+ data << uint32(CreationTime);
+ }
+ }
+}
+
+void AreaTriggerMovementScript::ClearChangesMask()
+{
+ Base::ClearChangesMask(SpellScriptID);
+ Base::ClearChangesMask(Center);
+ Base::ClearChangesMask(CreationTime);
+ _changesMask.ResetAll();
+}
+
+void AreaTriggerSphere::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << float(Radius);
+ data << float(RadiusTarget);
+}
+
+void AreaTriggerSphere::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 3);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << float(Radius);
+ }
+ if (changesMask[2])
+ {
+ data << float(RadiusTarget);
+ }
+ }
+}
+
+void AreaTriggerSphere::ClearChangesMask()
+{
+ Base::ClearChangesMask(Radius);
+ Base::ClearChangesMask(RadiusTarget);
+ _changesMask.ResetAll();
+}
+
+void AreaTriggerBox::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << *Extents;
+ data << *ExtentsTarget;
+}
+
+void AreaTriggerBox::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 3);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << *Extents;
+ }
+ if (changesMask[2])
+ {
+ data << *ExtentsTarget;
+ }
+ }
+}
+
+void AreaTriggerBox::ClearChangesMask()
+{
+ Base::ClearChangesMask(Extents);
+ Base::ClearChangesMask(ExtentsTarget);
+ _changesMask.ResetAll();
+}
+
+void AreaTriggerPolygon::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << uint32(Vertices.size());
+ data << uint32(VerticesTarget.size());
+ data << float(Height);
+ data << float(HeightTarget);
+ for (uint32 i = 0; i < Vertices.size(); ++i)
+ {
+ data << Vertices[i];
+ }
+ for (uint32 i = 0; i < VerticesTarget.size(); ++i)
+ {
+ data << VerticesTarget[i];
+ }
+}
+
+void AreaTriggerPolygon::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 5);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ if (!ignoreChangesMask)
+ Vertices.WriteUpdateMask(data);
+ else
+ WriteCompleteDynamicFieldUpdateMask(Vertices.size(), data);
+ }
+ if (changesMask[2])
+ {
+ if (!ignoreChangesMask)
+ VerticesTarget.WriteUpdateMask(data);
+ else
+ WriteCompleteDynamicFieldUpdateMask(VerticesTarget.size(), data);
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ for (uint32 i = 0; i < Vertices.size(); ++i)
+ {
+ if (Vertices.HasChanged(i) || ignoreChangesMask)
+ {
+ data << Vertices[i];
+ }
+ }
+ }
+ if (changesMask[2])
+ {
+ for (uint32 i = 0; i < VerticesTarget.size(); ++i)
+ {
+ if (VerticesTarget.HasChanged(i) || ignoreChangesMask)
+ {
+ data << VerticesTarget[i];
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ data << float(Height);
+ }
+ if (changesMask[4])
+ {
+ data << float(HeightTarget);
+ }
+ }
+}
+
+void AreaTriggerPolygon::ClearChangesMask()
+{
+ Base::ClearChangesMask(Vertices);
+ Base::ClearChangesMask(VerticesTarget);
+ Base::ClearChangesMask(Height);
+ Base::ClearChangesMask(HeightTarget);
+ _changesMask.ResetAll();
+}
+
+void AreaTriggerCylinder::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << float(Radius);
+ data << float(RadiusTarget);
+ data << float(Height);
+ data << float(HeightTarget);
+ data << float(LocationZOffset);
+ data << float(LocationZOffsetTarget);
+}
+
+void AreaTriggerCylinder::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 7);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << float(Radius);
+ }
+ if (changesMask[2])
+ {
+ data << float(RadiusTarget);
+ }
+ if (changesMask[3])
+ {
+ data << float(Height);
+ }
+ if (changesMask[4])
+ {
+ data << float(HeightTarget);
+ }
+ if (changesMask[5])
+ {
+ data << float(LocationZOffset);
+ }
+ if (changesMask[6])
+ {
+ data << float(LocationZOffsetTarget);
+ }
+ }
+}
+
+void AreaTriggerCylinder::ClearChangesMask()
+{
+ Base::ClearChangesMask(Radius);
+ Base::ClearChangesMask(RadiusTarget);
+ Base::ClearChangesMask(Height);
+ Base::ClearChangesMask(HeightTarget);
+ Base::ClearChangesMask(LocationZOffset);
+ Base::ClearChangesMask(LocationZOffsetTarget);
+ _changesMask.ResetAll();
+}
+
+void AreaTriggerDisk::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << float(InnerRadius);
+ data << float(InnerRadiusTarget);
+ data << float(OuterRadius);
+ data << float(OuterRadiusTarget);
+ data << float(Height);
+ data << float(HeightTarget);
+ data << float(LocationZOffset);
+ data << float(LocationZOffsetTarget);
+}
+
+void AreaTriggerDisk::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 9);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << float(InnerRadius);
+ }
+ if (changesMask[2])
+ {
+ data << float(InnerRadiusTarget);
+ }
+ if (changesMask[3])
+ {
+ data << float(OuterRadius);
+ }
+ if (changesMask[4])
+ {
+ data << float(OuterRadiusTarget);
+ }
+ if (changesMask[5])
+ {
+ data << float(Height);
+ }
+ if (changesMask[6])
+ {
+ data << float(HeightTarget);
+ }
+ if (changesMask[7])
+ {
+ data << float(LocationZOffset);
+ }
+ if (changesMask[8])
+ {
+ data << float(LocationZOffsetTarget);
+ }
+ }
+}
+
+void AreaTriggerDisk::ClearChangesMask()
+{
+ Base::ClearChangesMask(InnerRadius);
+ Base::ClearChangesMask(InnerRadiusTarget);
+ Base::ClearChangesMask(OuterRadius);
+ Base::ClearChangesMask(OuterRadiusTarget);
+ Base::ClearChangesMask(Height);
+ Base::ClearChangesMask(HeightTarget);
+ Base::ClearChangesMask(LocationZOffset);
+ Base::ClearChangesMask(LocationZOffsetTarget);
+ _changesMask.ResetAll();
+}
+
+void AreaTriggerBoundedPlane::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << *Extents;
+ data << *ExtentsTarget;
+}
+
+void AreaTriggerBoundedPlane::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 3);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << *Extents;
+ }
+ if (changesMask[2])
+ {
+ data << *ExtentsTarget;
+ }
+ }
+}
+
+void AreaTriggerBoundedPlane::ClearChangesMask()
+{
+ Base::ClearChangesMask(Extents);
+ Base::ClearChangesMask(ExtentsTarget);
+ _changesMask.ResetAll();
+}
+
void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
{
OverrideScaleCurve->WriteCreate(data, owner, receiver);
@@ -7059,20 +7813,72 @@ void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi
data << float(BoundsRadius2D);
data << uint32(DecalPropertiesID);
data << *CreatingEffectGUID;
- data << uint32(NumUnitsInside);
- data << uint32(NumPlayersInside);
data << *OrbitPathTarget;
data << *RollPitchYaw;
data << int32(PositionalSoundKitID);
+ data << uint32(MovementStartTime);
+ data << uint32(CreationTime);
+ data << float(ZOffset);
+ data << uint32(Flags);
+ data << uint32(ScaleCurveId);
+ data << uint32(FacingCurveId);
+ data << uint32(MorphCurveId);
+ data << uint32(MoveCurveId);
+ data << float(Facing);
+ data << int32(PathType);
+ data << uint8(ShapeType);
+ if (PathType == 3)
+ {
+ PathData.Get<UF::AreaTriggerMovementScript>()->WriteCreate(data, owner, receiver);
+ }
+ if (ShapeType == 0)
+ {
+ ShapeData.Get<UF::AreaTriggerSphere>()->WriteCreate(data, owner, receiver);
+ }
+ if (ShapeType == 1)
+ {
+ ShapeData.Get<UF::AreaTriggerBox>()->WriteCreate(data, owner, receiver);
+ }
+ if (ShapeType == 3)
+ {
+ ShapeData.Get<UF::AreaTriggerPolygon>()->WriteCreate(data, owner, receiver);
+ }
+ if (ShapeType == 4)
+ {
+ ShapeData.Get<UF::AreaTriggerCylinder>()->WriteCreate(data, owner, receiver);
+ }
+ if (ShapeType == 7)
+ {
+ ShapeData.Get<UF::AreaTriggerDisk>()->WriteCreate(data, owner, receiver);
+ }
+ if (ShapeType == 8)
+ {
+ ShapeData.Get<UF::AreaTriggerBoundedPlane>()->WriteCreate(data, owner, receiver);
+ }
ExtraScaleCurve->WriteCreate(data, owner, receiver);
data.FlushBits();
- data.WriteBit(HeightIgnoresScale);
- data.WriteBit(Field_261);
+ data.WriteBits(TargetRollPitchYaw.has_value(), 1);
+ data.WriteBits(ForcedPositionAndRotation.has_value(), 1);
OverrideMoveCurveX->WriteCreate(data, owner, receiver);
+ if (TargetRollPitchYaw.has_value())
+ {
+ data << *TargetRollPitchYaw;
+ }
+ if (ForcedPositionAndRotation.has_value())
+ {
+ ForcedPositionAndRotation->WriteCreate(data, owner, receiver);
+ }
OverrideMoveCurveY->WriteCreate(data, owner, receiver);
OverrideMoveCurveZ->WriteCreate(data, owner, receiver);
VisualAnim->WriteCreate(data, owner, receiver);
- data.FlushBits();
+ if (PathType == 0)
+ {
+ PathData.Get<UF::AreaTriggerSplineCalculator>()->WriteCreate(data, owner, receiver);
+ }
+ if (PathType == 1)
+ {
+ PathData.Get<UF::AreaTriggerOrbit>()->WriteCreate(data, owner, receiver);
+ }
}
void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
@@ -7082,122 +7888,232 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi
void AreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlock(0), 26);
+ data << uint32(changesMask.GetBlock(0));
+ data.WriteBits(changesMask.GetBlock(1), 4);
+ data.FlushBits();
if (changesMask[0])
{
if (changesMask[1])
{
- data.WriteBit(HeightIgnoresScale);
+ OverrideScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[2])
+ if (changesMask[6])
{
- data.WriteBit(Field_261);
+ data << *Caster;
}
- }
- data.FlushBits();
- if (changesMask[0])
- {
- if (changesMask[3])
+ if (changesMask[7])
{
- OverrideScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << uint32(Duration);
}
if (changesMask[8])
{
- data << *Caster;
+ data << uint32(TimeToTarget);
}
if (changesMask[9])
{
- data << uint32(Duration);
+ data << uint32(TimeToTargetScale);
}
if (changesMask[10])
{
- data << uint32(TimeToTarget);
+ data << uint32(TimeToTargetExtraScale);
}
if (changesMask[11])
{
- data << uint32(TimeToTargetScale);
+ data << uint32(TimeToTargetPos);
}
if (changesMask[12])
{
- data << uint32(TimeToTargetExtraScale);
+ data << int32(SpellID);
}
if (changesMask[13])
{
- data << uint32(TimeToTargetPos);
+ data << int32(SpellForVisuals);
}
if (changesMask[14])
{
- data << int32(SpellID);
+ SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
if (changesMask[15])
{
- data << int32(SpellForVisuals);
+ data << float(BoundsRadius2D);
}
if (changesMask[16])
{
- SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << uint32(DecalPropertiesID);
}
if (changesMask[17])
{
- data << float(BoundsRadius2D);
+ data << *CreatingEffectGUID;
}
if (changesMask[18])
{
- data << uint32(DecalPropertiesID);
+ data << *OrbitPathTarget;
}
if (changesMask[19])
{
- data << *CreatingEffectGUID;
+ data << *RollPitchYaw;
}
if (changesMask[20])
{
- data << uint32(NumUnitsInside);
+ data << int32(PositionalSoundKitID);
}
if (changesMask[21])
{
- data << uint32(NumPlayersInside);
+ data << uint32(MovementStartTime);
}
if (changesMask[22])
{
- data << *OrbitPathTarget;
+ data << uint32(CreationTime);
}
if (changesMask[23])
{
- data << *RollPitchYaw;
+ data << float(ZOffset);
}
- if (changesMask[24])
+ if (changesMask[25])
{
- data << int32(PositionalSoundKitID);
+ data << uint32(Flags);
}
- if (changesMask[4])
+ if (changesMask[27])
+ {
+ data << uint32(ScaleCurveId);
+ }
+ if (changesMask[28])
+ {
+ data << uint32(FacingCurveId);
+ }
+ if (changesMask[29])
+ {
+ data << uint32(MorphCurveId);
+ }
+ if (changesMask[30])
+ {
+ data << uint32(MoveCurveId);
+ }
+ if (changesMask[31])
+ {
+ data << float(Facing);
+ }
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[34])
+ {
+ data << int32(PathType);
+ }
+ if (changesMask[35])
+ {
+ data << uint8(ShapeType);
+ }
+ if (changesMask[34])
+ {
+ if (PathType == 3)
+ {
+ PathData.Get<UF::AreaTriggerMovementScript>()->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ if (changesMask[35])
+ {
+ if (ShapeType == 0)
+ {
+ ShapeData.Get<UF::AreaTriggerSphere>()->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ if (ShapeType == 1)
+ {
+ ShapeData.Get<UF::AreaTriggerBox>()->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ if (ShapeType == 3)
+ {
+ ShapeData.Get<UF::AreaTriggerPolygon>()->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ if (ShapeType == 4)
+ {
+ ShapeData.Get<UF::AreaTriggerCylinder>()->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ if (ShapeType == 7)
+ {
+ ShapeData.Get<UF::AreaTriggerDisk>()->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ if (ShapeType == 8)
+ {
+ ShapeData.Get<UF::AreaTriggerBoundedPlane>()->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[0])
+ {
+ if (changesMask[2])
{
ExtraScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[5])
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ data.WriteBits(TargetRollPitchYaw.has_value(), 1);
+ }
+ if (changesMask[32])
+ {
+ data.WriteBits(ForcedPositionAndRotation.has_value(), 1);
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[3])
{
OverrideMoveCurveX->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[6])
+ if (changesMask[24])
+ {
+ if (TargetRollPitchYaw.has_value())
+ {
+ data << *TargetRollPitchYaw;
+ }
+ }
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
+ {
+ if (ForcedPositionAndRotation.has_value())
+ {
+ ForcedPositionAndRotation->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[0])
+ {
+ if (changesMask[4])
{
OverrideMoveCurveY->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[7])
+ if (changesMask[5])
{
OverrideMoveCurveZ->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[25])
+ if (changesMask[26])
{
VisualAnim->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- data.FlushBits();
+ if (changesMask[32])
+ {
+ if (changesMask[34])
+ {
+ if (PathType == 0)
+ {
+ PathData.Get<UF::AreaTriggerSplineCalculator>()->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ if (PathType == 1)
+ {
+ PathData.Get<UF::AreaTriggerOrbit>()->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
}
void AreaTriggerData::ClearChangesMask()
{
- Base::ClearChangesMask(HeightIgnoresScale);
- Base::ClearChangesMask(Field_261);
Base::ClearChangesMask(OverrideScaleCurve);
Base::ClearChangesMask(ExtraScaleCurve);
Base::ClearChangesMask(OverrideMoveCurveX);
@@ -7215,12 +8131,25 @@ void AreaTriggerData::ClearChangesMask()
Base::ClearChangesMask(BoundsRadius2D);
Base::ClearChangesMask(DecalPropertiesID);
Base::ClearChangesMask(CreatingEffectGUID);
- Base::ClearChangesMask(NumUnitsInside);
- Base::ClearChangesMask(NumPlayersInside);
Base::ClearChangesMask(OrbitPathTarget);
Base::ClearChangesMask(RollPitchYaw);
Base::ClearChangesMask(PositionalSoundKitID);
+ Base::ClearChangesMask(MovementStartTime);
+ Base::ClearChangesMask(CreationTime);
+ Base::ClearChangesMask(ZOffset);
+ Base::ClearChangesMask(TargetRollPitchYaw);
+ Base::ClearChangesMask(Flags);
Base::ClearChangesMask(VisualAnim);
+ Base::ClearChangesMask(ScaleCurveId);
+ Base::ClearChangesMask(FacingCurveId);
+ Base::ClearChangesMask(MorphCurveId);
+ Base::ClearChangesMask(MoveCurveId);
+ Base::ClearChangesMask(Facing);
+ Base::ClearChangesMask(ForcedPositionAndRotation);
+ Base::ClearChangesMask(PathType);
+ Base::ClearChangesMask(ShapeType);
+ Base::ClearChangesMask(PathData);
+ Base::ClearChangesMask(ShapeData);
_changesMask.ResetAll();
}
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index 6635950cc62..db0f1859545 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -227,6 +227,8 @@ struct UnitChannel : public IsUpdateFieldStructureTag
{
int32 SpellID;
UF::SpellCastVisual SpellVisual;
+ uint32 StartTimeMs;
+ uint32 Duration;
void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const;
@@ -258,7 +260,18 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag
bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); }
};
-struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<222>
+struct UnitAssistActionData : public IsUpdateFieldStructureTag, public HasChangesMask<4>
+{
+ UpdateField<uint8, 0, 1> Type;
+ UpdateField<std::string, 0, 2> PlayerName;
+ UpdateField<uint32, 0, 3> VirtualRealmAddress;
+
+ void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<223>
{
UpdateField<bool, 0, 1> Field_314;
UpdateField<std::vector<uint32>, 0, 2> StateWorldEffectIDs;
@@ -406,19 +419,20 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<222>
UpdateField<float, 128, 132> Field_31C;
UpdateField<float, 128, 133> Field_320; // Soft targeting related? When UnitFlags3 & 0x40000000 is set, increases some range check using CombatReach by this amount
UpdateField<ObjectGuid, 128, 134> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object
- UpdateFieldArray<int32, 10, 135, 136> Power;
- UpdateFieldArray<int32, 10, 135, 146> MaxPower;
- UpdateFieldArray<float, 10, 135, 156> PowerRegenFlatModifier;
- UpdateFieldArray<float, 10, 135, 166> PowerRegenInterruptedFlatModifier;
- UpdateFieldArray<UF::VisibleItem, 3, 176, 177> VirtualItems;
- UpdateFieldArray<uint32, 2, 180, 181> AttackRoundBaseTime;
- UpdateFieldArray<int32, 4, 183, 184> Stats;
- UpdateFieldArray<int32, 4, 183, 188> StatPosBuff;
- UpdateFieldArray<int32, 4, 183, 192> StatNegBuff;
- UpdateFieldArray<int32, 4, 183, 196> StatSupportBuff;
- UpdateFieldArray<int32, 7, 200, 201> Resistances;
- UpdateFieldArray<int32, 7, 200, 208> BonusResistanceMods;
- UpdateFieldArray<int32, 7, 200, 215> ManaCostModifier;
+ OptionalUpdateField<UF::UnitAssistActionData, 128, 135> AssistActionData;
+ UpdateFieldArray<int32, 10, 136, 137> Power;
+ UpdateFieldArray<int32, 10, 136, 147> MaxPower;
+ UpdateFieldArray<float, 10, 136, 157> PowerRegenFlatModifier;
+ UpdateFieldArray<float, 10, 136, 167> PowerRegenInterruptedFlatModifier;
+ UpdateFieldArray<UF::VisibleItem, 3, 177, 178> VirtualItems;
+ UpdateFieldArray<uint32, 2, 181, 182> AttackRoundBaseTime;
+ UpdateFieldArray<int32, 4, 184, 185> Stats;
+ UpdateFieldArray<int32, 4, 184, 189> StatPosBuff;
+ UpdateFieldArray<int32, 4, 184, 193> StatNegBuff;
+ UpdateFieldArray<int32, 4, 184, 197> StatSupportBuff;
+ UpdateFieldArray<int32, 7, 201, 202> Resistances;
+ UpdateFieldArray<int32, 7, 201, 209> BonusResistanceMods;
+ UpdateFieldArray<int32, 7, 201, 216> 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;
@@ -499,6 +513,25 @@ struct CTROptions : public IsUpdateFieldStructureTag
bool operator!=(CTROptions const& right) const { return !(*this == right); }
};
+struct LeaverInfo : public IsUpdateFieldStructureTag
+{
+ ObjectGuid BnetAccountGUID;
+ float LeaveScore;
+ uint32 SeasonID;
+ uint32 TotalLeaves;
+ uint32 TotalSuccesses;
+ int32 ConsecutiveSuccesses;
+ int64 LastPenaltyTime;
+ int64 LeaverExpirationTime;
+ int32 Unknown_1120;
+ uint32 LeaverStatus;
+
+ 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==(LeaverInfo const& right) const;
+ bool operator!=(LeaverInfo const& right) const { return !(*this == right); }
+};
+
struct DeclinedNames : public IsUpdateFieldStructureTag, public HasChangesMask<6>
{
UpdateFieldArray<std::string, 5, 0, 1> Name;
@@ -521,7 +554,7 @@ struct CustomTabardInfo : public IsUpdateFieldStructureTag, public HasChangesMas
void ClearChangesMask();
};
-struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<322>
+struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<324>
{
UpdateField<bool, 0, 1> HasQuestSession;
UpdateField<bool, 0, 2> HasLevelLink;
@@ -551,29 +584,31 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<322>
UpdateField<int32, 0, 26> FakeInebriation;
UpdateField<uint32, 0, 27> VirtualPlayerRealm;
UpdateField<uint32, 0, 28> CurrentSpecID;
- UpdateField<int32, 0, 29> TaxiMountAnimKitID;
- UpdateField<uint8, 0, 30> CurrentBattlePetBreedQuality;
- UpdateField<int32, 0, 31> HonorLevel;
- UpdateField<int64, 32, 33> LogoutTime;
- UpdateField<std::string, 32, 34> Name;
- UpdateField<int32, 32, 35> Field_1AC;
- UpdateField<int32, 32, 36> Field_1B0;
- UpdateField<int32, 32, 37> CurrentBattlePetSpeciesID;
- UpdateField<UF::CTROptions, 32, 38> CtrOptions;
- UpdateField<int32, 32, 39> CovenantID;
- UpdateField<int32, 32, 40> SoulbindID;
- UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 41> DungeonScore;
- UpdateField<ObjectGuid, 32, 42> SpectateTarget;
- UpdateField<int32, 32, 43> Field_200;
- OptionalUpdateField<UF::DeclinedNames, 32, 44> DeclinedNames;
- UpdateField<UF::CustomTabardInfo, 32, 45> PersonalTabard;
- UpdateFieldArray<uint8, 2, 46, 47> PartyType;
- UpdateFieldArray<UF::QuestLog, 175, 49, 50> QuestLog;
- UpdateFieldArray<UF::VisibleItem, 19, 225, 226> VisibleItems;
- UpdateFieldArray<float, 6, 245, 246> AvgItemLevel;
- UpdateFieldArray<UF::ZonePlayerForcedReaction, 32, 252, 253> ForcedReactions;
- UpdateFieldArray<WorldPackets::Item::ItemInstance, 16, 285, 286> VisibleEquipableSpells;
- UpdateFieldArray<uint32, 19, 302, 303> Field_3120;
+ UpdateField<int32, 0, 29> CurrentCombatTraitConfigSubTreeID;
+ UpdateField<int32, 0, 30> TaxiMountAnimKitID;
+ UpdateField<uint8, 0, 31> CurrentBattlePetBreedQuality;
+ UpdateField<int32, 32, 33> HonorLevel;
+ UpdateField<int64, 32, 34> LogoutTime;
+ UpdateField<std::string, 32, 35> Name;
+ UpdateField<int32, 32, 36> Field_1AC;
+ UpdateField<int32, 32, 37> Field_1B0;
+ UpdateField<int32, 32, 38> CurrentBattlePetSpeciesID;
+ UpdateField<UF::CTROptions, 32, 39> CtrOptions;
+ UpdateField<int32, 32, 40> CovenantID;
+ UpdateField<int32, 32, 41> SoulbindID;
+ UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 42> DungeonScore;
+ UpdateField<UF::LeaverInfo, 32, 43> LeaverInfo;
+ UpdateField<ObjectGuid, 32, 44> SpectateTarget;
+ UpdateField<int32, 32, 45> Field_200;
+ OptionalUpdateField<UF::DeclinedNames, 32, 46> DeclinedNames;
+ UpdateField<UF::CustomTabardInfo, 32, 47> PersonalTabard;
+ UpdateFieldArray<uint8, 2, 48, 49> PartyType;
+ UpdateFieldArray<UF::QuestLog, 175, 51, 52> QuestLog;
+ UpdateFieldArray<UF::VisibleItem, 19, 227, 228> VisibleItems;
+ UpdateFieldArray<float, 6, 247, 248> AvgItemLevel;
+ UpdateFieldArray<UF::ZonePlayerForcedReaction, 32, 254, 255> ForcedReactions;
+ UpdateFieldArray<WorldPackets::Item::ItemInstance, 16, 287, 288> VisibleEquipableSpells;
+ UpdateFieldArray<uint32, 19, 304, 305> Field_3120;
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;
@@ -791,6 +826,7 @@ struct TraitEntry : public IsUpdateFieldStructureTag
int32 TraitNodeEntryID;
int32 Rank;
int32 GrantedRanks;
+ int32 BonusRanks;
void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
@@ -1025,6 +1061,24 @@ struct DelveData : public IsUpdateFieldStructureTag
bool operator!=(DelveData const& right) const { return !(*this == right); }
};
+struct ChallengeModeData : public IsUpdateFieldStructureTag
+{
+ int32 Unknown_1120_1;
+ int32 Unknown_1120_2;
+ uint64 Unknown_1120_3;
+ int64 Unknown_1120_4;
+ ObjectGuid KeystoneOwnerGUID;
+ ObjectGuid LeaverGUID;
+ uint32 IsActive;
+ uint32 HasRestrictions;
+ uint32 CanVoteAbandon;
+
+ 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==(ChallengeModeData const& right) const;
+ bool operator!=(ChallengeModeData const& right) const { return !(*this == right); }
+};
+
struct Research : public IsUpdateFieldStructureTag
{
int16 ResearchProjectID;
@@ -1035,7 +1089,7 @@ struct Research : public IsUpdateFieldStructureTag
bool operator!=(Research const& right) const { return !(*this == right); }
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<517>
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<385>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
UpdateField<bool, 0, 2> BackpackSellJunkDisabled;
@@ -1043,9 +1097,9 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateField<bool, 0, 4> SortBagsRightToLeft;
UpdateField<bool, 0, 5> InsertItemsLeftToRight;
UpdateField<bool, 0, 6> HasPerksProgramPendingReward;
- UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 42, 43> ResearchSites;
- UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 44, 45> ResearchSiteProgress;
- UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 46, 47> Research;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 43, 44> ResearchSites;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 45, 46> ResearchSiteProgress;
+ UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 47, 48> Research;
DynamicUpdateField<uint64, 0, 7> KnownTitles;
DynamicUpdateField<UF::PlayerDataElement, 0, 8> CharacterDataElements;
DynamicUpdateField<UF::PlayerDataElement, 0, 9> AccountDataElements;
@@ -1079,119 +1133,121 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
DynamicUpdateField<UF::CharacterRestriction, 0, 24> CharacterRestrictions;
DynamicUpdateField<UF::TraitConfig, 32, 34> TraitConfigs;
DynamicUpdateField<UF::CraftingOrder, 32, 35> CraftingOrders;
- DynamicUpdateField<UF::BankTabSettings, 32, 41> AccountBankTabSettings;
- UpdateField<ObjectGuid, 32, 48> FarsightObject;
- UpdateField<ObjectGuid, 32, 49> SummonedBattlePetGUID;
- UpdateField<uint64, 32, 50> Coinage;
- UpdateField<uint64, 32, 51> AccountBankCoinage;
- UpdateField<int32, 32, 52> XP;
- UpdateField<int32, 32, 53> NextLevelXP;
- UpdateField<int32, 32, 54> TrialXP;
- UpdateField<UF::SkillInfo, 32, 55> Skill;
- UpdateField<int32, 32, 56> CharacterPoints;
- UpdateField<int32, 32, 57> MaxTalentTiers;
- UpdateField<uint32, 32, 58> TrackCreatureMask;
- UpdateField<float, 32, 59> MainhandExpertise;
- UpdateField<float, 32, 60> OffhandExpertise;
- UpdateField<float, 32, 61> RangedExpertise;
- UpdateField<float, 32, 62> CombatRatingExpertise;
- UpdateField<float, 32, 63> BlockPercentage;
- UpdateField<float, 32, 64> DodgePercentage;
- UpdateField<float, 32, 65> DodgePercentageFromAttribute;
- UpdateField<float, 32, 66> ParryPercentage;
- UpdateField<float, 32, 67> ParryPercentageFromAttribute;
- UpdateField<float, 32, 68> CritPercentage;
- UpdateField<float, 32, 69> RangedCritPercentage;
- UpdateField<float, 70, 71> OffhandCritPercentage;
- UpdateField<float, 70, 72> SpellCritPercentage;
- UpdateField<int32, 70, 73> ShieldBlock;
- UpdateField<float, 70, 74> ShieldBlockCritPercentage;
- UpdateField<float, 70, 75> Mastery;
- UpdateField<float, 70, 76> Speed;
- UpdateField<float, 70, 77> Avoidance;
- UpdateField<float, 70, 78> Sturdiness;
- UpdateField<int32, 70, 79> Versatility;
- UpdateField<float, 70, 80> VersatilityBonus;
- UpdateField<float, 70, 81> PvpPowerDamage;
- UpdateField<float, 70, 82> PvpPowerHealing;
- UpdateField<UF::BitVectors, 70, 83> BitVectors;
- UpdateField<int32, 70, 84> ModHealingDonePos;
- UpdateField<float, 70, 85> ModHealingPercent;
- UpdateField<float, 70, 86> ModPeriodicHealingDonePercent;
- UpdateField<float, 70, 87> ModSpellPowerPercent;
- UpdateField<float, 70, 88> ModResiliencePercent;
- UpdateField<float, 70, 89> OverrideSpellPowerByAPPercent;
- UpdateField<float, 70, 90> OverrideAPBySpellPowerPercent;
- UpdateField<int32, 70, 91> ModTargetResistance;
- UpdateField<int32, 70, 92> ModTargetPhysicalResistance;
- UpdateField<uint32, 70, 93> LocalFlags;
- UpdateField<uint8, 70, 94> GrantableLevels;
- UpdateField<uint8, 70, 95> MultiActionBars;
- UpdateField<uint8, 70, 96> LifetimeMaxRank;
- UpdateField<uint8, 70, 97> NumRespecs;
- UpdateField<uint32, 70, 98> PvpMedals;
- UpdateField<uint16, 70, 99> TodayHonorableKills;
- UpdateField<uint16, 70, 100> YesterdayHonorableKills;
- UpdateField<uint32, 70, 101> LifetimeHonorableKills;
- UpdateField<int32, 102, 103> WatchedFactionIndex;
- UpdateField<int32, 102, 104> MaxLevel;
- UpdateField<int32, 102, 105> ScalingPlayerLevelDelta;
- UpdateField<int32, 102, 106> MaxCreatureScalingLevel;
- UpdateField<int32, 102, 107> PetSpellPower;
- UpdateField<float, 102, 108> UiHitModifier;
- UpdateField<float, 102, 109> UiSpellHitModifier;
- UpdateField<int32, 102, 110> HomeRealmTimeOffset;
- UpdateField<float, 102, 111> ModPetHaste;
- UpdateField<int8, 102, 112> JailersTowerLevelMax;
- UpdateField<int8, 102, 113> JailersTowerLevel;
- UpdateField<uint8, 102, 114> LocalRegenFlags;
- UpdateField<uint8, 102, 115> AuraVision;
- UpdateField<uint8, 102, 116> NumBackpackSlots;
- UpdateField<int32, 102, 117> OverrideSpellsID;
- UpdateField<uint16, 102, 118> LootSpecID;
- UpdateField<uint32, 102, 119> OverrideZonePVPType;
- UpdateField<int32, 102, 120> Honor;
- UpdateField<int32, 102, 121> HonorNextLevel;
- UpdateField<int32, 102, 122> PerksProgramCurrency;
- UpdateField<uint8, 102, 123> NumBankSlots;
- UpdateField<uint8, 102, 124> NumAccountBankTabs;
- UpdateField<UF::ResearchHistory, 102, 125> ResearchHistory;
- UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 126> FrozenPerksVendorItem;
- UpdateField<UF::ActivePlayerUnk901, 102, 128> Field_1410;
- OptionalUpdateField<UF::QuestSession, 102, 127> QuestSession;
- UpdateField<int32, 102, 129> UiChromieTimeExpansionID;
- UpdateField<int32, 102, 130> TimerunningSeasonID;
- UpdateField<int32, 102, 131> TransportServerTime;
- UpdateField<uint32, 102, 132> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
- UpdateField<int16, 102, 133> DEBUGSoulbindConduitRank;
- UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 134, 135> DungeonScore;
- UpdateField<uint32, 134, 136> ActiveCombatTraitConfigID;
- UpdateField<int32, 134, 137> ItemUpgradeHighOnehandWeaponItemID;
- UpdateField<int32, 134, 138> ItemUpgradeHighFingerItemID;
- UpdateField<float, 134, 139> ItemUpgradeHighFingerWatermark;
- UpdateField<int32, 134, 140> ItemUpgradeHighTrinketItemID;
- UpdateField<float, 134, 141> ItemUpgradeHighTrinketWatermark;
- UpdateField<uint64, 134, 142> LootHistoryInstanceID;
- OptionalUpdateField<UF::StableInfo, 134, 143> PetStable;
- UpdateField<uint8, 134, 144> RequiredMountCapabilityFlags;
- OptionalUpdateField<UF::WalkInData, 134, 145> WalkInData;
- OptionalUpdateField<UF::DelveData, 134, 146> DelveData;
- UpdateFieldArray<ObjectGuid, 232, 147, 148> InvSlots;
- UpdateFieldArray<UF::RestInfo, 2, 380, 381> RestInfo;
- UpdateFieldArray<int32, 7, 383, 384> ModDamageDonePos;
- UpdateFieldArray<int32, 7, 383, 391> ModDamageDoneNeg;
- UpdateFieldArray<float, 7, 383, 398> ModDamageDonePercent;
- UpdateFieldArray<float, 7, 383, 405> ModHealingDonePercent;
- UpdateFieldArray<float, 3, 412, 413> WeaponDmgMultipliers;
- UpdateFieldArray<float, 3, 412, 416> WeaponAtkSpeedMultipliers;
- UpdateFieldArray<uint32, 12, 419, 420> BuybackPrice;
- UpdateFieldArray<int64, 12, 419, 432> BuybackTimestamp;
- UpdateFieldArray<int32, 32, 444, 445> CombatRatings;
- UpdateFieldArray<uint32, 4, 477, 478> NoReagentCostMask;
- UpdateFieldArray<int32, 2, 482, 483> ProfessionSkillLine;
- UpdateFieldArray<uint32, 5, 485, 486> BagSlotFlags;
- UpdateFieldArray<uint32, 7, 491, 492> BankBagSlotFlags;
- UpdateFieldArray<float, 17, 499, 500> ItemUpgradeHighWatermark;
+ DynamicUpdateField<UF::BankTabSettings, 32, 41> CharacterBankTabSettings;
+ DynamicUpdateField<UF::BankTabSettings, 32, 42> AccountBankTabSettings;
+ UpdateField<ObjectGuid, 32, 49> FarsightObject;
+ UpdateField<ObjectGuid, 32, 50> SummonedBattlePetGUID;
+ UpdateField<uint64, 32, 51> Coinage;
+ UpdateField<uint64, 32, 52> AccountBankCoinage;
+ UpdateField<int32, 32, 53> XP;
+ UpdateField<int32, 32, 54> NextLevelXP;
+ UpdateField<int32, 32, 55> TrialXP;
+ UpdateField<UF::SkillInfo, 32, 56> Skill;
+ UpdateField<int32, 32, 57> CharacterPoints;
+ UpdateField<int32, 32, 58> MaxTalentTiers;
+ UpdateField<uint32, 32, 59> TrackCreatureMask;
+ UpdateField<float, 32, 60> MainhandExpertise;
+ UpdateField<float, 32, 61> OffhandExpertise;
+ UpdateField<float, 32, 62> RangedExpertise;
+ UpdateField<float, 32, 63> CombatRatingExpertise;
+ UpdateField<float, 32, 64> BlockPercentage;
+ UpdateField<float, 32, 65> DodgePercentage;
+ UpdateField<float, 32, 66> DodgePercentageFromAttribute;
+ UpdateField<float, 32, 67> ParryPercentage;
+ UpdateField<float, 32, 68> ParryPercentageFromAttribute;
+ UpdateField<float, 32, 69> CritPercentage;
+ UpdateField<float, 70, 71> RangedCritPercentage;
+ UpdateField<float, 70, 72> OffhandCritPercentage;
+ UpdateField<float, 70, 73> SpellCritPercentage;
+ UpdateField<int32, 70, 74> ShieldBlock;
+ UpdateField<float, 70, 75> ShieldBlockCritPercentage;
+ UpdateField<float, 70, 76> Mastery;
+ UpdateField<float, 70, 77> Speed;
+ UpdateField<float, 70, 78> Avoidance;
+ UpdateField<float, 70, 79> Sturdiness;
+ UpdateField<int32, 70, 80> Versatility;
+ UpdateField<float, 70, 81> VersatilityBonus;
+ UpdateField<float, 70, 82> PvpPowerDamage;
+ UpdateField<float, 70, 83> PvpPowerHealing;
+ UpdateField<UF::BitVectors, 70, 84> BitVectors;
+ UpdateField<int32, 70, 85> ModHealingDonePos;
+ UpdateField<float, 70, 86> ModHealingPercent;
+ UpdateField<float, 70, 87> ModPeriodicHealingDonePercent;
+ UpdateField<float, 70, 88> ModSpellPowerPercent;
+ UpdateField<float, 70, 89> ModResiliencePercent;
+ UpdateField<float, 70, 90> OverrideSpellPowerByAPPercent;
+ UpdateField<float, 70, 91> OverrideAPBySpellPowerPercent;
+ UpdateField<int32, 70, 92> ModTargetResistance;
+ UpdateField<int32, 70, 93> ModTargetPhysicalResistance;
+ UpdateField<uint32, 70, 94> LocalFlags;
+ UpdateField<uint8, 70, 95> GrantableLevels;
+ UpdateField<uint8, 70, 96> MultiActionBars;
+ UpdateField<uint8, 70, 97> LifetimeMaxRank;
+ UpdateField<uint8, 70, 98> NumRespecs;
+ UpdateField<uint32, 70, 99> PvpMedals;
+ UpdateField<uint16, 70, 100> TodayHonorableKills;
+ UpdateField<uint16, 70, 101> YesterdayHonorableKills;
+ UpdateField<uint32, 102, 103> LifetimeHonorableKills;
+ UpdateField<int32, 102, 104> WatchedFactionIndex;
+ UpdateField<int32, 102, 105> MaxLevel;
+ UpdateField<int32, 102, 106> ScalingPlayerLevelDelta;
+ UpdateField<int32, 102, 107> MaxCreatureScalingLevel;
+ UpdateField<int32, 102, 108> PetSpellPower;
+ UpdateField<float, 102, 109> UiHitModifier;
+ UpdateField<float, 102, 110> UiSpellHitModifier;
+ UpdateField<int32, 102, 111> HomeRealmTimeOffset;
+ UpdateField<float, 102, 112> ModPetHaste;
+ UpdateField<int8, 102, 113> JailersTowerLevelMax;
+ UpdateField<int8, 102, 114> JailersTowerLevel;
+ UpdateField<uint8, 102, 115> LocalRegenFlags;
+ UpdateField<uint8, 102, 116> AuraVision;
+ UpdateField<uint8, 102, 117> NumBackpackSlots;
+ UpdateField<int32, 102, 118> OverrideSpellsID;
+ UpdateField<uint16, 102, 119> LootSpecID;
+ UpdateField<uint32, 102, 120> OverrideZonePVPType;
+ UpdateField<int32, 102, 121> Honor;
+ UpdateField<int32, 102, 122> HonorNextLevel;
+ UpdateField<int32, 102, 123> PerksProgramCurrency;
+ UpdateField<uint8, 102, 124> NumBankSlots;
+ UpdateField<uint8, 102, 125> NumCharacterBankTabs;
+ UpdateField<uint8, 102, 126> NumAccountBankTabs;
+ UpdateField<UF::ResearchHistory, 102, 127> ResearchHistory;
+ UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 128> FrozenPerksVendorItem;
+ UpdateField<UF::ActivePlayerUnk901, 102, 130> Field_1410;
+ OptionalUpdateField<UF::QuestSession, 102, 129> QuestSession;
+ UpdateField<int32, 102, 131> UiChromieTimeExpansionID;
+ UpdateField<int32, 102, 132> TimerunningSeasonID;
+ UpdateField<int32, 102, 133> TransportServerTime;
+ UpdateField<uint32, 134, 135> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
+ UpdateField<int16, 134, 136> DEBUGSoulbindConduitRank;
+ UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 134, 137> DungeonScore;
+ UpdateField<uint32, 134, 138> ActiveCombatTraitConfigID;
+ UpdateField<int32, 134, 139> ItemUpgradeHighOnehandWeaponItemID;
+ UpdateField<int32, 134, 140> ItemUpgradeHighFingerItemID;
+ UpdateField<float, 134, 141> ItemUpgradeHighFingerWatermark;
+ UpdateField<int32, 134, 142> ItemUpgradeHighTrinketItemID;
+ UpdateField<float, 134, 143> ItemUpgradeHighTrinketWatermark;
+ UpdateField<uint64, 134, 144> LootHistoryInstanceID;
+ OptionalUpdateField<UF::StableInfo, 134, 145> PetStable;
+ UpdateField<uint8, 134, 146> RequiredMountCapabilityFlags;
+ OptionalUpdateField<UF::WalkInData, 134, 147> WalkInData;
+ OptionalUpdateField<UF::DelveData, 134, 148> DelveData;
+ OptionalUpdateField<UF::ChallengeModeData, 134, 149> ChallengeModeData;
+ UpdateFieldArray<ObjectGuid, 105, 150, 151> InvSlots;
+ UpdateFieldArray<UF::RestInfo, 2, 256, 257> RestInfo;
+ UpdateFieldArray<int32, 7, 259, 260> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 259, 267> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 259, 274> ModDamageDonePercent;
+ UpdateFieldArray<float, 7, 259, 281> ModHealingDonePercent;
+ UpdateFieldArray<float, 3, 288, 289> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 288, 292> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 295, 296> BuybackPrice;
+ UpdateFieldArray<int64, 12, 295, 308> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 320, 321> CombatRatings;
+ UpdateFieldArray<uint32, 4, 353, 354> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 358, 359> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 5, 361, 362> BagSlotFlags;
+ UpdateFieldArray<float, 17, 367, 368> 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;
@@ -1199,7 +1255,22 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
void ClearChangesMask();
};
-struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<25>
+struct GameObjectAssistActionData : public IsUpdateFieldStructureTag
+{
+ std::string PlayerName;
+ std::string MonsterName;
+ uint32 VirtualRealmAddress;
+ uint8 Sex;
+ int64 Time;
+ int32 DelveTier;
+
+ void WriteCreate(ByteBuffer& data, GameObject const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, GameObject const* owner, Player const* receiver) const;
+ bool operator==(GameObjectAssistActionData const& right) const;
+ bool operator!=(GameObjectAssistActionData const& right) const { return !(*this == right); }
+};
+
+struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<26>
{
UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs;
struct StateWorldEffectIDsTag : ViewerDependentValueTag<std::vector<uint32>> {};
@@ -1232,6 +1303,7 @@ struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<
UpdateField<uint32, 0, 22> UiWidgetItemID;
UpdateField<uint32, 0, 23> UiWidgetItemQuality;
UpdateField<uint32, 0, 24> UiWidgetItemUnknown1000;
+ OptionalUpdateField<UF::GameObjectAssistActionData, 0, 25> AssistActionData;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const;
@@ -1300,33 +1372,163 @@ struct VisualAnim : public IsUpdateFieldStructureTag, public HasChangesMask<5>
void ClearChangesMask();
};
-struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<26>
-{
- UpdateField<bool, 0, 1> HeightIgnoresScale;
- UpdateField<bool, 0, 2> Field_261;
- UpdateField<UF::ScaleCurve, 0, 3> OverrideScaleCurve;
- UpdateField<UF::ScaleCurve, 0, 4> ExtraScaleCurve;
- UpdateField<UF::ScaleCurve, 0, 5> OverrideMoveCurveX;
- UpdateField<UF::ScaleCurve, 0, 6> OverrideMoveCurveY;
- UpdateField<UF::ScaleCurve, 0, 7> OverrideMoveCurveZ;
- UpdateField<ObjectGuid, 0, 8> Caster;
- UpdateField<uint32, 0, 9> Duration;
- UpdateField<uint32, 0, 10> TimeToTarget;
- UpdateField<uint32, 0, 11> TimeToTargetScale;
- UpdateField<uint32, 0, 12> TimeToTargetExtraScale;
- UpdateField<uint32, 0, 13> TimeToTargetPos; // Linked to m_overrideMoveCurve
- UpdateField<int32, 0, 14> SpellID;
- UpdateField<int32, 0, 15> SpellForVisuals;
- UpdateField<UF::SpellCastVisual, 0, 16> SpellVisual;
- UpdateField<float, 0, 17> BoundsRadius2D;
- UpdateField<uint32, 0, 18> DecalPropertiesID;
- UpdateField<ObjectGuid, 0, 19> CreatingEffectGUID;
- UpdateField<uint32, 0, 20> NumUnitsInside;
- UpdateField<uint32, 0, 21> NumPlayersInside; // When not 0 this causes SpellVisualEvent 14 to trigger, playing alternate visuals, typically used by "SOAK THIS" areatriggers
- UpdateField<ObjectGuid, 0, 22> OrbitPathTarget;
- UpdateField<TaggedPosition<Position::XYZ>, 0, 23> RollPitchYaw;
- UpdateField<int32, 0, 24> PositionalSoundKitID;
- UpdateField<UF::VisualAnim, 0, 25> VisualAnim;
+struct ForceSetAreaTriggerPositionAndRotation : public IsUpdateFieldStructureTag
+{
+ ObjectGuid TriggerGUID;
+ TaggedPosition<::Position::XYZ> Position;
+ QuaternionData Rotation;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ bool operator==(ForceSetAreaTriggerPositionAndRotation const& right) const;
+ bool operator!=(ForceSetAreaTriggerPositionAndRotation const& right) const { return !(*this == right); }
+};
+
+struct AreaTriggerSplineCalculator : public IsUpdateFieldStructureTag, public HasChangesMask<3>
+{
+ UpdateField<bool, 0, 1> Catmullrom;
+ DynamicUpdateField<TaggedPosition<Position::XYZ>, 0, 2> Points;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct AreaTriggerOrbit : public IsUpdateFieldStructureTag, public HasChangesMask<7>
+{
+ UpdateField<bool, 0, 1> CounterClockwise;
+ UpdateField<TaggedPosition<Position::XYZ>, 0, 2> Center;
+ UpdateField<float, 0, 3> Radius;
+ UpdateField<float, 0, 4> InitialAngle;
+ UpdateField<float, 0, 5> BlendFromRadius;
+ UpdateField<int32, 0, 6> ExtraTimeForBlending;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct AreaTriggerMovementScript : public IsUpdateFieldStructureTag, public HasChangesMask<4>
+{
+ UpdateField<int32, 0, 1> SpellScriptID;
+ UpdateField<TaggedPosition<Position::XYZ>, 0, 2> Center;
+ UpdateField<uint32, 0, 3> CreationTime;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct AreaTriggerSphere : public IsUpdateFieldStructureTag, public HasChangesMask<3>
+{
+ UpdateField<float, 0, 1> Radius;
+ UpdateField<float, 0, 2> RadiusTarget;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct AreaTriggerBox : public IsUpdateFieldStructureTag, public HasChangesMask<3>
+{
+ UpdateField<TaggedPosition<Position::XYZ>, 0, 1> Extents;
+ UpdateField<TaggedPosition<Position::XYZ>, 0, 2> ExtentsTarget;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct AreaTriggerPolygon : public IsUpdateFieldStructureTag, public HasChangesMask<5>
+{
+ DynamicUpdateField<TaggedPosition<Position::XY>, 0, 1> Vertices;
+ DynamicUpdateField<TaggedPosition<Position::XY>, 0, 2> VerticesTarget;
+ UpdateField<float, 0, 3> Height;
+ UpdateField<float, 0, 4> HeightTarget;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct AreaTriggerCylinder : public IsUpdateFieldStructureTag, public HasChangesMask<7>
+{
+ UpdateField<float, 0, 1> Radius;
+ UpdateField<float, 0, 2> RadiusTarget;
+ UpdateField<float, 0, 3> Height;
+ UpdateField<float, 0, 4> HeightTarget;
+ UpdateField<float, 0, 5> LocationZOffset;
+ UpdateField<float, 0, 6> LocationZOffsetTarget;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct AreaTriggerDisk : public IsUpdateFieldStructureTag, public HasChangesMask<9>
+{
+ UpdateField<float, 0, 1> InnerRadius;
+ UpdateField<float, 0, 2> InnerRadiusTarget;
+ UpdateField<float, 0, 3> OuterRadius;
+ UpdateField<float, 0, 4> OuterRadiusTarget;
+ UpdateField<float, 0, 5> Height;
+ UpdateField<float, 0, 6> HeightTarget;
+ UpdateField<float, 0, 7> LocationZOffset;
+ UpdateField<float, 0, 8> LocationZOffsetTarget;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct AreaTriggerBoundedPlane : public IsUpdateFieldStructureTag, public HasChangesMask<3>
+{
+ UpdateField<TaggedPosition<Position::XY>, 0, 1> Extents;
+ UpdateField<TaggedPosition<Position::XY>, 0, 2> ExtentsTarget;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<36>
+{
+ UpdateField<UF::ScaleCurve, 0, 1> OverrideScaleCurve;
+ UpdateField<UF::ScaleCurve, 0, 2> ExtraScaleCurve;
+ UpdateField<UF::ScaleCurve, 0, 3> OverrideMoveCurveX;
+ UpdateField<UF::ScaleCurve, 0, 4> OverrideMoveCurveY;
+ UpdateField<UF::ScaleCurve, 0, 5> OverrideMoveCurveZ;
+ UpdateField<ObjectGuid, 0, 6> Caster;
+ UpdateField<uint32, 0, 7> Duration;
+ UpdateField<uint32, 0, 8> TimeToTarget;
+ UpdateField<uint32, 0, 9> TimeToTargetScale;
+ UpdateField<uint32, 0, 10> TimeToTargetExtraScale;
+ UpdateField<uint32, 0, 11> TimeToTargetPos; // Linked to m_overrideMoveCurve
+ UpdateField<int32, 0, 12> SpellID;
+ UpdateField<int32, 0, 13> SpellForVisuals;
+ UpdateField<UF::SpellCastVisual, 0, 14> SpellVisual;
+ UpdateField<float, 0, 15> BoundsRadius2D;
+ UpdateField<uint32, 0, 16> DecalPropertiesID;
+ UpdateField<ObjectGuid, 0, 17> CreatingEffectGUID;
+ UpdateField<ObjectGuid, 0, 18> OrbitPathTarget;
+ UpdateField<TaggedPosition<Position::XYZ>, 0, 19> RollPitchYaw;
+ UpdateField<int32, 0, 20> PositionalSoundKitID;
+ UpdateField<uint32, 0, 21> MovementStartTime;
+ UpdateField<uint32, 0, 22> CreationTime;
+ UpdateField<float, 0, 23> ZOffset;
+ OptionalUpdateField<TaggedPosition<Position::XYZ>, 0, 24> TargetRollPitchYaw;
+ UpdateField<uint32, 0, 25> Flags;
+ UpdateField<UF::VisualAnim, 0, 26> VisualAnim;
+ UpdateField<uint32, 0, 27> ScaleCurveId;
+ UpdateField<uint32, 0, 28> FacingCurveId;
+ UpdateField<uint32, 0, 29> MorphCurveId;
+ UpdateField<uint32, 0, 30> MoveCurveId;
+ UpdateField<float, 0, 31> Facing;
+ OptionalUpdateField<UF::ForceSetAreaTriggerPositionAndRotation, 32, 33> ForcedPositionAndRotation;
+ UpdateField<int32, 32, 34> PathType;
+ UpdateField<uint8, 32, 35> ShapeType;
+ VariantUpdateField<32, 34, UF::AreaTriggerSplineCalculator, UF::AreaTriggerOrbit, UF::AreaTriggerMovementScript> PathData;
+ VariantUpdateField<32, 35, UF::AreaTriggerSphere, UF::AreaTriggerBox, UF::AreaTriggerPolygon, UF::AreaTriggerCylinder, UF::AreaTriggerDisk, UF::AreaTriggerBoundedPlane> ShapeData;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 3ac1815f4f6..1d28e4f8aac 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -337,8 +337,6 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this)
healthBeforeDuel = 0;
manaBeforeDuel = 0;
- memset(_voidStorageItems, 0, VOID_STORAGE_MAX_SLOT * sizeof(VoidStorageItem*));
-
_cinematicMgr = std::make_unique<CinematicMgr>(this);
m_achievementMgr = std::make_unique<PlayerAchievementMgr>(this);
@@ -374,9 +372,6 @@ Player::~Player()
for (ItemSetEffect* itemSetEff : ItemSetEff)
DeleteItemSetEffects(itemSetEff);
- for (uint8 i = 0; i < VOID_STORAGE_MAX_SLOT; ++i)
- delete _voidStorageItems[i];
-
sWorld->DecreasePlayerCount();
}
@@ -3719,21 +3714,9 @@ void Player::DestroyForPlayer(Player* target) const
if (target == this)
{
- for (uint8 i = EQUIPMENT_SLOT_START; i < BANK_SLOT_BAG_END; ++i)
- {
- if (m_items[i] == nullptr)
- continue;
-
- m_items[i]->DestroyForPlayer(target);
- }
-
- for (uint8 i = REAGENT_SLOT_START; i < CHILD_EQUIPMENT_SLOT_END; ++i)
- {
- if (m_items[i] == nullptr)
- continue;
-
- m_items[i]->DestroyForPlayer(target);
- }
+ for (Item* item : m_items)
+ if (item)
+ item->DestroyForPlayer(target);
}
}
@@ -4195,10 +4178,6 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
stmt->setUInt64(0, guid);
trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_VOID_STORAGE_ITEM_BY_CHAR_GUID);
- stmt->setUInt64(0, guid);
- trans->Append(stmt);
-
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_FISHINGSTEPS);
stmt->setUInt64(0, guid);
trans->Append(stmt);
@@ -4233,6 +4212,18 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
stmt->setUInt64(0, guid);
trans->Append(stmt);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_DATA_ELEMENTS_CHARACTER_BY_GUID);
+ stmt->setUInt64(0, guid);
+ trans->Append(stmt);
+
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_DATA_FLAGS_CHARACTER_BY_GUID);
+ stmt->setUInt64(0, guid);
+ trans->Append(stmt);
+
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_BANK_TAB_SETTINGS);
+ stmt->setUInt64(0, guid);
+ trans->Append(stmt);
+
sCharacterCache->DeleteCharacterCacheEntry(playerguid, name);
break;
}
@@ -9488,10 +9479,6 @@ uint32 Player::GetFreeInventorySlotCount(EnumFlag<ItemSearchLocation> location /
if (location.HasFlag(ItemSearchLocation::Bank))
{
- for (uint8 i = BANK_SLOT_ITEM_START; i < BANK_SLOT_BAG_END; ++i)
- if (!GetItemByPos(INVENTORY_SLOT_BAG_0, i))
- ++freeSlotCount;
-
for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; ++i)
if (Bag* bag = GetBagByPos(i))
for (uint32 j = 0; j < GetBagSize(bag); ++j)
@@ -9506,10 +9493,6 @@ uint32 Player::GetFreeInventorySlotCount(EnumFlag<ItemSearchLocation> location /
for (uint32 j = 0; j < GetBagSize(bag); ++j)
if (!GetItemInBag(bag, j))
++freeSlotCount;
-
- for (uint8 i = REAGENT_SLOT_START; i < REAGENT_SLOT_END; ++i)
- if (!GetItemByPos(INVENTORY_SLOT_BAG_0, i))
- ++freeSlotCount;
}
return freeSlotCount;
@@ -9759,21 +9742,10 @@ bool Player::IsEquipmentPos(uint8 bag, uint8 slot)
bool Player::IsBankPos(uint8 bag, uint8 slot)
{
- if (bag == INVENTORY_SLOT_BAG_0 && (slot >= BANK_SLOT_ITEM_START && slot < BANK_SLOT_ITEM_END))
- return true;
if (bag == INVENTORY_SLOT_BAG_0 && (slot >= BANK_SLOT_BAG_START && slot < BANK_SLOT_BAG_END))
return true;
if (bag >= BANK_SLOT_BAG_START && bag < BANK_SLOT_BAG_END)
return true;
- if (bag == INVENTORY_SLOT_BAG_0 && (slot >= REAGENT_SLOT_START && slot < REAGENT_SLOT_END))
- return true;
- return false;
-}
-
-bool Player::IsReagentBankPos(uint8 bag, uint8 slot)
-{
- if (bag == INVENTORY_SLOT_BAG_0 && (slot >= REAGENT_SLOT_START && slot < REAGENT_SLOT_END))
- return true;
return false;
}
@@ -9795,6 +9767,13 @@ bool Player::IsChildEquipmentPos(uint8 bag, uint8 slot)
return bag == INVENTORY_SLOT_BAG_0 && (slot >= CHILD_EQUIPMENT_SLOT_START && slot < CHILD_EQUIPMENT_SLOT_END);
}
+bool Player::IsAccountBankPos(uint8 bag, uint8 /*slot*/)
+{
+ if (bag >= ACCOUNT_BANK_SLOT_BAG_START && bag < ACCOUNT_BANK_SLOT_BAG_END)
+ return true;
+ return false;
+}
+
bool Player::IsValidPos(uint8 bag, uint8 slot, bool explicit_pos) const
{
// post selected
@@ -9827,18 +9806,10 @@ bool Player::IsValidPos(uint8 bag, uint8 slot, bool explicit_pos) const
if (slot >= INVENTORY_SLOT_ITEM_START && slot < INVENTORY_SLOT_ITEM_START + GetInventorySlotCount())
return true;
- // bank main slots
- if (slot >= BANK_SLOT_ITEM_START && slot < BANK_SLOT_ITEM_END)
- return true;
-
// bank bag slots
if (slot >= BANK_SLOT_BAG_START && slot < BANK_SLOT_BAG_END)
return true;
- // reagent bank bag slots
- if (slot >= REAGENT_SLOT_START && slot < REAGENT_SLOT_END)
- return true;
-
return false;
}
@@ -10126,10 +10097,6 @@ InventoryResult Player::CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemP
// prevent cheating
if ((slot >= BUYBACK_SLOT_START && slot < BUYBACK_SLOT_END) || slot >= PLAYER_SLOT_END)
return EQUIP_ERR_WRONG_BAG_TYPE;
-
- // can't store anything else than crafting reagents in Reagent Bank
- if (IsReagentBankPos(bag, slot) && (!IsReagentBankUnlocked() || !pProto->IsCraftingReagent()))
- return EQUIP_ERR_WRONG_BAG_TYPE;
}
else
{
@@ -11072,12 +11039,6 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec& dest
ASSERT(bag == NULL_BAG && slot == NULL_SLOT); // when reagentBankOnly is true then bag & slot must be hardcoded constants, not client input
}
- if ((IsReagentBankPos(bag, slot) || reagentBankOnly) && !IsReagentBankUnlocked())
- return EQUIP_ERR_REAGENT_BANK_LOCKED;
-
- uint8 slotStart = reagentBankOnly ? uint8(REAGENT_SLOT_START) : uint8(BANK_SLOT_ITEM_START);
- uint8 slotEnd = reagentBankOnly ? uint8(REAGENT_SLOT_END) : uint8(BANK_SLOT_ITEM_END);
-
uint32 count = pItem->GetCount();
TC_LOG_DEBUG("entities.player.items", "Player::CanBankItem: Player '{}' ({}), Bag: {}, Slot: {}, Item: {}, Count: {}",
@@ -11114,7 +11075,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec& dest
if (!pItem->IsBag())
return EQUIP_ERR_WRONG_SLOT;
- if (slot - BANK_SLOT_BAG_START >= GetBankBagSlotCount())
+ if (slot - BANK_SLOT_BAG_START >= GetCharacterBankTabCount())
return EQUIP_ERR_NO_BANK_SLOT;
res = CanUseItem(pItem, not_loading);
@@ -11143,12 +11104,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec& dest
{
if (bag == INVENTORY_SLOT_BAG_0)
{
- res = CanStoreItem_InInventorySlots(slotStart, slotEnd, dest, pProto, count, true, pItem, bag, slot);
- if (res != EQUIP_ERR_OK)
- return res;
-
- if (count == 0)
- return EQUIP_ERR_OK;
+ return EQUIP_ERR_WRONG_SLOT; // TODO: check if INVENTORY_SLOT_BAG_0 condition is neccessary
}
else
{
@@ -11167,12 +11123,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec& dest
// search free slot in bag
if (bag == INVENTORY_SLOT_BAG_0)
{
- res = CanStoreItem_InInventorySlots(slotStart, slotEnd, dest, pProto, count, false, pItem, bag, slot);
- if (res != EQUIP_ERR_OK)
- return res;
-
- if (count == 0)
- return EQUIP_ERR_OK;
+ return EQUIP_ERR_WRONG_SLOT; // TODO: check if INVENTORY_SLOT_BAG_0 condition is neccessary
}
else
{
@@ -11193,50 +11144,14 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec& dest
// search stack for merge to
if (pProto->GetMaxStackSize() != 1)
{
- // in slots
- res = CanStoreItem_InInventorySlots(slotStart, slotEnd, dest, pProto, count, true, pItem, bag, slot);
- if (res != EQUIP_ERR_OK)
- return res;
-
- if (count == 0)
- return EQUIP_ERR_OK;
-
- // don't try to store reagents anywhere else than in Reagent Bank if we're on it
- if (!reagentBankOnly)
- {
- // in special bags
- if (pProto->GetBagFamily())
- {
- for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; i++)
- {
- res = CanStoreItem_InBag(i, dest, pProto, count, true, false, pItem, bag, slot);
- if (res != EQUIP_ERR_OK)
- continue;
-
- if (count == 0)
- return EQUIP_ERR_OK;
- }
- }
-
- // in regular bags
- for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; i++)
- {
- res = CanStoreItem_InBag(i, dest, pProto, count, true, true, pItem, bag, slot);
- if (res != EQUIP_ERR_OK)
- continue;
-
- if (count == 0)
- return EQUIP_ERR_OK;
- }
- }
- }
-
- // search free space in special bags (don't try to store reagents anywhere else than in Reagent Bank if we're on it)
- if (!reagentBankOnly && pProto->GetBagFamily())
- {
+ // in regular bags
for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; i++)
{
- res = CanStoreItem_InBag(i, dest, pProto, count, false, false, pItem, bag, slot);
+ // only consider tabs marked as reagents if requested
+ if (reagentBankOnly && !(*m_activePlayerData->CharacterBankTabSettings[i - BANK_SLOT_BAG_START].DepositFlags & AsUnderlyingType(BagSlotFlags::PriorityReagents)))
+ continue;
+
+ res = CanStoreItem_InBag(i, dest, pProto, count, true, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
continue;
@@ -11245,26 +11160,19 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec& dest
}
}
- // search free space
- res = CanStoreItem_InInventorySlots(slotStart, slotEnd, dest, pProto, count, false, pItem, bag, slot);
- if (res != EQUIP_ERR_OK)
- return res;
-
- if (count == 0)
- return EQUIP_ERR_OK;
-
- // search free space in regular bags (don't try to store reagents anywhere else than in Reagent Bank if we're on it)
- if (!reagentBankOnly)
+ // search free space in regular bags
+ for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; i++)
{
- for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; i++)
- {
- res = CanStoreItem_InBag(i, dest, pProto, count, false, true, pItem, bag, slot);
- if (res != EQUIP_ERR_OK)
- continue;
+ // only consider tabs marked as reagents if requested
+ if (reagentBankOnly && !(*m_activePlayerData->CharacterBankTabSettings[i - BANK_SLOT_BAG_START].DepositFlags & AsUnderlyingType(BagSlotFlags::PriorityReagents)))
+ continue;
- if (count == 0)
- return EQUIP_ERR_OK;
- }
+ res = CanStoreItem_InBag(i, dest, pProto, count, false, true, pItem, bag, slot);
+ if (res != EQUIP_ERR_OK)
+ continue;
+
+ if (count == 0)
+ return EQUIP_ERR_OK;
}
return reagentBankOnly ? EQUIP_ERR_REAGENT_BANK_FULL : EQUIP_ERR_BANK_FULL;
@@ -12272,33 +12180,6 @@ uint32 Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, boo
}
}
- // in bank
- for (uint8 i = BANK_SLOT_ITEM_START; i < BANK_SLOT_ITEM_END; i++)
- {
- if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
- {
- if (item->GetEntry() == itemEntry && !item->IsInTrade())
- {
- if (item->GetCount() + remcount <= count)
- {
- remcount += item->GetCount();
- DestroyItem(INVENTORY_SLOT_BAG_0, i, update);
- if (remcount >= count)
- return remcount;
- }
- else
- {
- item->SetCount(item->GetCount() - count + remcount);
- ItemRemovedQuestCheck(item->GetEntry(), count - remcount);
- if (IsInWorld() && update)
- item->SendUpdateToPlayer(this);
- item->SetState(ITEM_CHANGED, this);
- return count;
- }
- }
- }
- }
-
// in bank bags
for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; i++)
{
@@ -12364,34 +12245,6 @@ uint32 Player::DestroyItemCount(uint32 itemEntry, uint32 count, bool update, boo
}
}
- for (uint8 i = REAGENT_SLOT_START; i < REAGENT_SLOT_END; ++i)
- {
- if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
- {
- if (item->GetEntry() == itemEntry && !item->IsInTrade())
- {
- if (item->GetCount() + remcount <= count)
- {
- // all keys can be unequipped
- remcount += item->GetCount();
- DestroyItem(INVENTORY_SLOT_BAG_0, i, update);
-
- if (remcount >= count)
- return remcount;
- }
- else
- {
- item->SetCount(item->GetCount() - count + remcount);
- ItemRemovedQuestCheck(item->GetEntry(), count - remcount);
- if (IsInWorld() && update)
- item->SendUpdateToPlayer(this);
- item->SetState(ITEM_CHANGED, this);
- return count;
- }
- }
- }
- }
-
for (uint8 i = CHILD_EQUIPMENT_SLOT_START; i < CHILD_EQUIPMENT_SLOT_END; ++i)
{
if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
@@ -12746,12 +12599,6 @@ void Player::SwapItem(uint16 src, uint16 dst)
}
}
- if (IsReagentBankPos(dst) && !IsReagentBankUnlocked())
- {
- SendEquipError(EQUIP_ERR_REAGENT_BANK_LOCKED, pSrcItem, pDstItem);
- return;
- }
-
// NOW this is or item move (swap with empty), or swap with another item (including bags in bag possitions)
// or swap empty bag with another empty or not empty bag (with items exchange)
@@ -12785,8 +12632,7 @@ void Player::SwapItem(uint16 src, uint16 dst)
RemoveItem(srcbag, srcslot, true);
BankItem(dest, pSrcItem, true);
- if (!IsReagentBankPos(dst))
- ItemRemovedQuestCheck(pSrcItem->GetEntry(), pSrcItem->GetCount());
+ ItemRemovedQuestCheck(pSrcItem->GetEntry(), pSrcItem->GetCount());
}
else if (IsEquipmentPos(dst))
{
@@ -17819,7 +17665,7 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
struct PlayerLoadData
{
// "SELECT c.guid, account, name, race, class, gender, level, xp, money, inventorySlots, inventoryBagFlags, bagSlotFlags1, bagSlotFlags2, bagSlotFlags3, bagSlotFlags4, bagSlotFlags5, "
- // "bankSlots, bankBagFlags, bankBagSlotFlags1, bankBagSlotFlags2, bankBagSlotFlags3, bankBagSlotFlags4, bankBagSlotFlags5, bankBagSlotFlags6, bankBagSlotFlags7, restState, playerFlags, playerFlagsEx, "
+ // "bankSlots, bankTabs, bankBagFlags, restState, playerFlags, playerFlagsEx, "
// "position_x, position_y, position_z, map, orientation, taximask, createTime, createMode, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, "
// "resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, summonedPetNumber, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, "
// "totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, "
@@ -17841,8 +17687,8 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
EnumFlag<BagSlotFlags> inventoryBagFlags = BagSlotFlags::None;
std::array<BagSlotFlags, 5> bagSlotFlags;
uint8 bankSlots;
+ uint8 bankTabs;
EnumFlag<BagSlotFlags> bankBagFlags = BagSlotFlags::None;
- std::array<BagSlotFlags, 7> bankBagSlotFlags;
PlayerRestState restState;
PlayerFlags playerFlags;
PlayerFlagsEx playerFlagsEx;
@@ -17921,9 +17767,8 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
for (BagSlotFlags& flags : bagSlotFlags)
flags = static_cast<BagSlotFlags>(fields[i++].GetUInt32());
bankSlots = fields[i++].GetUInt8();
+ bankTabs = fields[i++].GetUInt8();
bankBagFlags = static_cast<BagSlotFlags>(fields[i++].GetUInt32());
- for (BagSlotFlags& flags : bankBagSlotFlags)
- flags = static_cast<BagSlotFlags>(fields[i++].GetUInt32());
restState = PlayerRestState(fields[i++].GetUInt8());
playerFlags = PlayerFlags(fields[i++].GetUInt32());
playerFlagsEx = PlayerFlagsEx(fields[i++].GetUInt32());
@@ -18083,9 +17928,8 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
for (uint32 bagIndex = 0; bagIndex < fields.bagSlotFlags.size(); ++bagIndex)
ReplaceAllBagSlotFlags(bagIndex, fields.bagSlotFlags[bagIndex]);
SetBankBagSlotCount(fields.bankSlots);
+ SetCharacterBankTabCount(fields.bankTabs);
SetBankAutoSortDisabled(fields.bankBagFlags.HasFlag(BagSlotFlags::DisableAutoSort));
- for (uint32 bagIndex = 0; bagIndex < fields.bankBagSlotFlags.size(); ++bagIndex)
- ReplaceAllBankBagSlotFlags(bagIndex, fields.bankBagSlotFlags[bagIndex]);
SetNativeGender(fields.gender);
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::Inebriation), fields.drunk);
ReplaceAllPlayerFlags(fields.playerFlags);
@@ -18520,6 +18364,8 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
// must be before inventory (some items required reputation check)
m_reputationMgr->LoadFromDB(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_REPUTATION));
+ _LoadCharacterBankTabSettings(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_BANK_TAB_SETTINGS));
+
_LoadInventory(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_INVENTORY),
holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_ARTIFACTS),
holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AZERITE),
@@ -18528,9 +18374,6 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AZERITE_EMPOWERED),
time_diff);
- if (IsVoidStorageUnlocked())
- _LoadVoidStorage(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_VOID_STORAGE));
-
// update items with duration and realtime
UpdateItemDuration(time_diff, true);
@@ -19195,63 +19038,6 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
ApplyAllAzeriteItemMods(true);
}
-void Player::_LoadVoidStorage(PreparedQueryResult result)
-{
- if (!result)
- return;
-
- do
- {
- // SELECT itemId, itemEntry, slot, creatorGuid, randomBonusListId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?
- Field* fields = result->Fetch();
-
- uint64 itemId = fields[0].GetUInt64();
- uint32 itemEntry = fields[1].GetUInt32();
- uint8 slot = fields[2].GetUInt8();
- ObjectGuid creatorGuid = fields[3].GetUInt64() ? ObjectGuid::Create<HighGuid::Player>(fields[3].GetUInt64()) : ObjectGuid::Empty;
- ItemRandomBonusListId randomBonusListId = fields[4].GetUInt32();
- uint32 fixedScalingLevel = fields[5].GetUInt32();
- uint32 artifactKnowledgeLevel = fields[6].GetUInt32();
- ItemContext context = ItemContext(fields[7].GetUInt8());
- std::vector<int32> bonusListIDs;
- for (std::string_view bonusListIDtoken : Trinity::Tokenize(fields[8].GetStringView(), ' ', false))
- if (Optional<int32> bonusListID = Trinity::StringTo<int32>(bonusListIDtoken))
- bonusListIDs.push_back(*bonusListID);
-
- if (!itemId)
- {
- TC_LOG_ERROR("entities.player", "Player::_LoadVoidStorage: Player '{}' ({}) has an item with an invalid id (item id: {}, entry: {}).",
- GetName(), GetGUID().ToString(), itemId, itemEntry);
- continue;
- }
-
- if (!sObjectMgr->GetItemTemplate(itemEntry))
- {
- TC_LOG_ERROR("entities.player", "Player::_LoadVoidStorage: Player '{}' ({}) has an item with an invalid entry (item id: {}, entry: {}).",
- GetName(), GetGUID().ToString(), itemId, itemEntry);
- continue;
- }
-
- if (slot >= VOID_STORAGE_MAX_SLOT)
- {
- TC_LOG_ERROR("entities.player", "Player::_LoadVoidStorage: Player '{}' ({}) has an item with an invalid slot (item id: {}, entry: {}, slot: {}).",
- GetName(), GetGUID().ToString(), itemId, itemEntry, slot);
- continue;
- }
-
- _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid, randomBonusListId, fixedScalingLevel, artifactKnowledgeLevel,
- context, bonusListIDs);
-
- WorldPackets::Item::ItemInstance voidInstance;
- voidInstance.Initialize(_voidStorageItems[slot]);
- BonusData bonus;
- bonus.Initialize(voidInstance);
-
- GetSession()->GetCollectionMgr()->AddItemAppearance(itemEntry, bonus.AppearanceModID);
- }
- while (result->NextRow());
-}
-
Item* Player::_LoadItem(CharacterDatabaseTransaction trans, uint32 zoneId, uint32 timeDiff, Field* fields)
{
Item* item = nullptr;
@@ -20300,6 +20086,27 @@ void Player::_LoadPlayerData(PreparedQueryResult elementsResult, PreparedQueryRe
}
}
+void Player::_LoadCharacterBankTabSettings(PreparedQueryResult result)
+{
+ if (result)
+ {
+ do
+ {
+ DEFINE_FIELD_ACCESSOR_CACHE_ANONYMOUS(PreparedResultSet, (tabId)(name)(icon)(description)(depositFlags)) fields { *result };
+
+ if (fields.tabId().GetUInt8() >= (BANK_SLOT_BAG_END - BANK_SLOT_BAG_START))
+ continue;
+
+ SetCharacterBankTabSettings(fields.tabId().GetUInt8(), fields.name().GetString(), fields.icon().GetString(),
+ fields.description().GetString(), static_cast<BagSlotFlags>(fields.depositFlags().GetUInt32()));
+
+ } while (result->NextRow());
+ }
+
+ while (m_activePlayerData->CharacterBankTabSettings.size() < *m_activePlayerData->NumCharacterBankTabs)
+ AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CharacterBankTabSettings));
+}
+
/*********************************************************/
/*** SAVE SYSTEM ***/
/*********************************************************/
@@ -20372,6 +20179,7 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
for (uint32 bagSlotFlag : m_activePlayerData->BagSlotFlags)
stmt->setUInt32(index++, bagSlotFlag);
stmt->setUInt8(index++, GetBankBagSlotCount());
+ stmt->setUInt8(index++, GetCharacterBankTabCount());
stmt->setUInt32(index++, [&]
{
BagSlotFlags inventoryFlags = BagSlotFlags::None;
@@ -20379,8 +20187,6 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
inventoryFlags |= BagSlotFlags::DisableAutoSort;
return AsUnderlyingType(inventoryFlags);
}());
- for (uint32 bankBagSlotFlag : m_activePlayerData->BankBagSlotFlags)
- stmt->setUInt32(index++, bankBagSlotFlag);
stmt->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_XP].StateID);
stmt->setUInt32(index++, m_playerData->PlayerFlags);
stmt->setUInt32(index++, m_playerData->PlayerFlagsEx);
@@ -20512,6 +20318,7 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
for (uint32 bagSlotFlag : m_activePlayerData->BagSlotFlags)
stmt->setUInt32(index++, bagSlotFlag);
stmt->setUInt8(index++, GetBankBagSlotCount());
+ stmt->setUInt8(index++, GetCharacterBankTabCount());
stmt->setUInt32(index++, [&]
{
BagSlotFlags inventoryFlags = BagSlotFlags::None;
@@ -20519,8 +20326,6 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
inventoryFlags |= BagSlotFlags::DisableAutoSort;
return AsUnderlyingType(inventoryFlags);
}());
- for (uint32 bankBagSlotFlag : m_activePlayerData->BankBagSlotFlags)
- stmt->setUInt32(index++, bankBagSlotFlag);
stmt->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_XP].StateID);
stmt->setUInt32(index++, m_playerData->PlayerFlags);
stmt->setUInt32(index++, m_playerData->PlayerFlagsEx);
@@ -20675,7 +20480,6 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
_SaveCustomizations(trans);
_SaveBGData(trans);
_SaveInventory(trans);
- _SaveVoidStorage(trans);
_SaveQuestStatus(trans);
_SaveDailyQuestStatus(trans);
_SaveWeeklyQuestStatus(trans);
@@ -20699,6 +20503,7 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
_SaveCurrency(trans);
_SaveCUFProfiles(trans);
_SavePlayerData(trans);
+ _SaveCharacterBankTabSettings(trans);
if (_garrison)
_garrison->SaveToDB(trans);
@@ -21044,42 +20849,6 @@ void Player::_SaveInventory(CharacterDatabaseTransaction trans)
m_itemUpdateQueue.clear();
}
-void Player::_SaveVoidStorage(CharacterDatabaseTransaction trans)
-{
- CharacterDatabasePreparedStatement* stmt = nullptr;
-
- for (uint8 i = 0; i < VOID_STORAGE_MAX_SLOT; ++i)
- {
- if (!_voidStorageItems[i]) // unused item
- {
- // DELETE FROM void_storage WHERE slot = ? AND playerGuid = ?
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_VOID_STORAGE_ITEM_BY_SLOT);
- stmt->setUInt8(0, i);
- stmt->setUInt64(1, GetGUID().GetCounter());
- }
- else
- {
- // REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomBonusListId, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CHAR_VOID_STORAGE_ITEM);
- stmt->setUInt64(0, _voidStorageItems[i]->ItemId);
- stmt->setUInt64(1, GetGUID().GetCounter());
- stmt->setUInt32(2, _voidStorageItems[i]->ItemEntry);
- stmt->setUInt8(3, i);
- stmt->setUInt64(4, _voidStorageItems[i]->CreatorGuid.GetCounter());
- stmt->setUInt32(5, _voidStorageItems[i]->RandomBonusListId);
- stmt->setUInt32(6, _voidStorageItems[i]->FixedScalingLevel);
- stmt->setUInt32(7, _voidStorageItems[i]->ArtifactKnowledgeLevel);
- stmt->setUInt8(8, AsUnderlyingType(_voidStorageItems[i]->Context));
- std::ostringstream bonusListIDs;
- for (int32 bonusListID : _voidStorageItems[i]->BonusListIDs)
- bonusListIDs << bonusListID << ' ';
- stmt->setString(9, bonusListIDs.str());
- }
-
- trans->Append(stmt);
- }
-}
-
void Player::_SaveCUFProfiles(CharacterDatabaseTransaction trans)
{
CharacterDatabasePreparedStatement* stmt;
@@ -21666,6 +21435,26 @@ void Player::_SavePlayerData(CharacterDatabaseTransaction trans)
_playerDataFlagsNeedSave.clear();
}
+void Player::_SaveCharacterBankTabSettings(CharacterDatabaseTransaction trans) const
+{
+ CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_BANK_TAB_SETTINGS);
+ stmt->setUInt64(0, GetGUID().GetCounter());
+ trans->Append(stmt);
+
+ for (std::size_t i = 0; i < m_activePlayerData->CharacterBankTabSettings.size(); ++i)
+ {
+ UF::BankTabSettings const& tabSetting = m_activePlayerData->CharacterBankTabSettings[i];
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_BANK_TAB_SETTINGS);
+ stmt->setUInt64(0, GetGUID().GetCounter());
+ stmt->setUInt8(1, i);
+ stmt->setString(2, *tabSetting.Name);
+ stmt->setString(3, *tabSetting.Icon);
+ stmt->setString(4, *tabSetting.Description);
+ stmt->setInt32(5, *tabSetting.DepositFlags);
+ trans->Append(stmt);
+ }
+}
+
void Player::outDebugValues() const
{
if (!sLog->ShouldLog("entities.unit", LOG_LEVEL_DEBUG))
@@ -28387,7 +28176,13 @@ void Player::_LoadTraits(PreparedQueryResult configsResult, PreparedQueryResult
});
if (activeConfig >= 0)
- SetActiveCombatTraitConfigID(m_activePlayerData->TraitConfigs[activeConfig].ID);
+ {
+ UF::TraitConfig const& activeTraitConfig = m_activePlayerData->TraitConfigs[activeConfig];
+ SetActiveCombatTraitConfigID(activeTraitConfig.ID);
+ int32 activeSubTree = activeTraitConfig.SubTrees.FindIndexIf([](UF::TraitSubTreeCache const& subTree) { return subTree.Active != 0; });
+ if (activeSubTree >= 0)
+ SetCurrentCombatTraitConfigSubTreeID(activeTraitConfig.SubTrees[activeSubTree].TraitSubTreeID);
+ }
for (UF::TraitConfig const& traitConfig : m_activePlayerData->TraitConfigs)
{
@@ -28657,9 +28452,20 @@ void Player::ActivateTalentGroup(ChrSpecializationEntry const* spec)
&& (static_cast<TraitCombatConfigFlags>(*traitConfig.CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) != TraitCombatConfigFlags::None;
});
if (specTraitConfigIndex >= 0)
- SetActiveCombatTraitConfigID(m_activePlayerData->TraitConfigs[specTraitConfigIndex].ID);
+ {
+ UF::TraitConfig const& activeTraitConfig = m_activePlayerData->TraitConfigs[specTraitConfigIndex];
+ SetActiveCombatTraitConfigID(activeTraitConfig.ID);
+ int32 activeSubTree = activeTraitConfig.SubTrees.FindIndexIf([](UF::TraitSubTreeCache const& subTree) { return subTree.Active != 0; });
+ if (activeSubTree >= 0)
+ SetCurrentCombatTraitConfigSubTreeID(activeTraitConfig.SubTrees[activeSubTree].TraitSubTreeID);
+ else
+ SetCurrentCombatTraitConfigSubTreeID(0);
+ }
else
+ {
SetActiveCombatTraitConfigID(0);
+ SetCurrentCombatTraitConfigSubTreeID(0);
+ }
for (uint32 talentId = 0; talentId < sTalentStore.GetNumRows(); ++talentId)
{
@@ -29097,6 +28903,17 @@ void Player::ApplyTraitEntryChanges(int32 editedConfigId, WorldPackets::Traits::
}
}
+ if (applyTraits)
+ {
+ int32 activeSubTree = editedConfig.SubTrees.FindIndexIf([](UF::TraitSubTreeCache const& subTree) { return subTree.Active != 0; });
+ if (activeSubTree >= 0)
+ SetCurrentCombatTraitConfigSubTreeID(editedConfig.SubTrees[activeSubTree].TraitSubTreeID);
+ else
+ SetCurrentCombatTraitConfigSubTreeID(0);
+
+ UpdateItemSetAuras(this, false);
+ }
+
m_traitConfigStates[editedConfigId] = PLAYERSPELL_CHANGED;
}
@@ -29856,86 +29673,6 @@ bool Player::IsInWhisperWhiteList(ObjectGuid guid)
return false;
}
-uint8 Player::GetNextVoidStorageFreeSlot() const
-{
- for (uint8 i = 0; i < VOID_STORAGE_MAX_SLOT; ++i)
- if (!_voidStorageItems[i]) // unused item
- return i;
-
- return VOID_STORAGE_MAX_SLOT;
-}
-
-uint8 Player::GetNumOfVoidStorageFreeSlots() const
-{
- uint8 count = 0;
-
- for (uint8 i = 0; i < VOID_STORAGE_MAX_SLOT; ++i)
- if (!_voidStorageItems[i])
- count++;
-
- return count;
-}
-
-uint8 Player::AddVoidStorageItem(VoidStorageItem&& item)
-{
- uint8 slot = GetNextVoidStorageFreeSlot();
-
- if (slot >= VOID_STORAGE_MAX_SLOT)
- {
- GetSession()->SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_FULL);
- return 255;
- }
-
- _voidStorageItems[slot] = new VoidStorageItem(std::move(item));
- return slot;
-}
-
-void Player::DeleteVoidStorageItem(uint8 slot)
-{
- if (slot >= VOID_STORAGE_MAX_SLOT)
- {
- GetSession()->SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_INTERNAL_ERROR_1);
- return;
- }
-
- delete _voidStorageItems[slot];
- _voidStorageItems[slot] = nullptr;
-}
-
-bool Player::SwapVoidStorageItem(uint8 oldSlot, uint8 newSlot)
-{
- if (oldSlot >= VOID_STORAGE_MAX_SLOT || newSlot >= VOID_STORAGE_MAX_SLOT || oldSlot == newSlot)
- return false;
-
- std::swap(_voidStorageItems[newSlot], _voidStorageItems[oldSlot]);
- return true;
-}
-
-VoidStorageItem* Player::GetVoidStorageItem(uint8 slot) const
-{
- if (slot >= VOID_STORAGE_MAX_SLOT)
- {
- GetSession()->SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_INTERNAL_ERROR_1);
- return nullptr;
- }
-
- return _voidStorageItems[slot];
-}
-
-VoidStorageItem* Player::GetVoidStorageItem(uint64 id, uint8& slot) const
-{
- for (uint8 i = 0; i < VOID_STORAGE_MAX_SLOT; ++i)
- {
- if (_voidStorageItems[i] && _voidStorageItems[i]->ItemId == id)
- {
- slot = i;
- return _voidStorageItems[i];
- }
- }
-
- return nullptr;
-}
-
void Player::CreateGarrison(uint32 garrSiteId)
{
std::unique_ptr<Garrison> garrison(new Garrison(this));
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 2a51422b9a7..2a28c516dc0 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -511,21 +511,24 @@ DEFINE_ENUM_FLAG(PlayerFlagsEx);
enum PlayerLocalFlags
{
- PLAYER_LOCAL_FLAG_CONTROLLING_PET = 0x00000001, // Displays "You have an active summon already" when trying to tame new pet
- PLAYER_LOCAL_FLAG_TRACK_STEALTHED = 0x00000002,
- PLAYER_LOCAL_FLAG_RELEASE_TIMER = 0x00000008, // Display time till auto release spirit
- PLAYER_LOCAL_FLAG_NO_RELEASE_WINDOW = 0x00000010, // Display no "release spirit" window at all
- PLAYER_LOCAL_FLAG_NO_PET_BAR = 0x00000020, // CGPetInfo::IsPetBarUsed
- PLAYER_LOCAL_FLAG_OVERRIDE_CAMERA_MIN_HEIGHT = 0x00000040,
- PLAYER_LOCAL_FLAG_NEWLY_BOOSTED_CHARACTER = 0x00000080,
- PLAYER_LOCAL_FLAG_USING_PARTY_GARRISON = 0x00000100,
- PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED = 0x00000200,
- PLAYER_LOCAL_FLAG_CAN_VISIT_PARTY_GARRISON = 0x00000400,
- PLAYER_LOCAL_FLAG_WAR_MODE = 0x00000800,
- PLAYER_LOCAL_FLAG_ACCOUNT_SECURED = 0x00001000, // Script_IsAccountSecured
- PLAYER_LOCAL_FLAG_OVERRIDE_TRANSPORT_SERVER_TIME= 0x00008000,
- PLAYER_LOCAL_FLAG_MENTOR_RESTRICTED = 0x00020000,
- PLAYER_LOCAL_FLAG_WEEKLY_REWARD_AVAILABLE = 0x00040000,
+ PLAYER_LOCAL_FLAG_CONTROLLING_PET = 0x00000001, // Displays "You have an active summon already" when trying to tame new pet
+ PLAYER_LOCAL_FLAG_TRACK_STEALTHED = 0x00000002,
+ PLAYER_LOCAL_FLAG_RELEASE_TIMER = 0x00000008, // Display time till auto release spirit
+ PLAYER_LOCAL_FLAG_NO_RELEASE_WINDOW = 0x00000010, // Display no "release spirit" window at all
+ PLAYER_LOCAL_FLAG_NO_PET_BAR = 0x00000020, // CGPetInfo::IsPetBarUsed
+ PLAYER_LOCAL_FLAG_OVERRIDE_CAMERA_MIN_HEIGHT = 0x00000040,
+ PLAYER_LOCAL_FLAG_NEWLY_BOOSTED_CHARACTER = 0x00000080,
+ PLAYER_LOCAL_FLAG_USING_PARTY_GARRISON = 0x00000100,
+ PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED = 0x00000200,
+ PLAYER_LOCAL_FLAG_CAN_VISIT_PARTY_GARRISON = 0x00000400,
+ PLAYER_LOCAL_FLAG_WAR_MODE = 0x00000800,
+ PLAYER_LOCAL_FLAG_ACCOUNT_SECURED = 0x00001000, // Script_IsAccountSecured
+ PLAYER_LOCAL_FLAG_OVERRIDE_TRANSPORT_SERVER_TIME = 0x00008000,
+ PLAYER_LOCAL_FLAG_MENTOR_RESTRICTED = 0x00020000,
+ PLAYER_LOCAL_FLAG_HAS_ACCOUNT_BANK_LOCK = 0x00040000,
+ PLAYER_LOCAL_FLAG_CHARACTER_BANK_DISABLED = 0x00080000,
+ PLAYER_LOCAL_FLAG_CHARACTER_BANK_CONVERSION_FAILED = 0x00100000,
+ PLAYER_LOCAL_FLAG_ACCOUNT_BANK_DISABLED = 0x00200000,
};
DEFINE_ENUM_FLAG(PlayerLocalFlags);
@@ -642,7 +645,6 @@ typedef std::unordered_map<uint32, SkillStatusData> SkillStatusMap;
class Quest;
class Spell;
-class Item;
class WorldSession;
enum PlayerSlots
@@ -650,7 +652,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 = 232,
+ PLAYER_SLOT_END = 105,
PLAYER_SLOTS_COUNT = (PLAYER_SLOT_END - PLAYER_SLOT_START)
};
@@ -722,61 +724,49 @@ enum InventoryPackSlots : uint8 // 28 slots
INVENTORY_SLOT_ITEM_END = 63
};
-enum BankItemSlots // 28 slots
-{
- BANK_SLOT_ITEM_START = 63,
- BANK_SLOT_ITEM_END = 91
-};
-
-enum BankBagSlots // 7 slots
+enum BankBagSlots // 6 slots
{
- BANK_SLOT_BAG_START = 91,
- BANK_SLOT_BAG_END = 98
+ BANK_SLOT_BAG_START = 63,
+ BANK_SLOT_BAG_END = 69
};
enum BuyBackSlots // 12 slots
{
// stored in m_buybackitems
- BUYBACK_SLOT_START = 98,
- BUYBACK_SLOT_END = 110
-};
-
-enum ReagentSlots // 98 slots
-{
- REAGENT_SLOT_START = 110,
- REAGENT_SLOT_END = 208,
+ BUYBACK_SLOT_START = 69,
+ BUYBACK_SLOT_END = 81
};
enum ChildEquipmentSlots
{
- CHILD_EQUIPMENT_SLOT_START = 208,
- CHILD_EQUIPMENT_SLOT_END = 211,
+ CHILD_EQUIPMENT_SLOT_START = 81,
+ CHILD_EQUIPMENT_SLOT_END = 84,
};
enum EquipableSpellSlots
{
- EQUIPABLE_SPELL_OFFENSIVE_SLOT1 = 211,
- EQUIPABLE_SPELL_OFFENSIVE_SLOT2 = 212,
- EQUIPABLE_SPELL_OFFENSIVE_SLOT3 = 213,
- EQUIPABLE_SPELL_OFFENSIVE_SLOT4 = 214,
- EQUIPABLE_SPELL_UTILITY_SLOT1 = 215,
- EQUIPABLE_SPELL_UTILITY_SLOT2 = 216,
- EQUIPABLE_SPELL_UTILITY_SLOT3 = 217,
- EQUIPABLE_SPELL_UTILITY_SLOT4 = 218,
- EQUIPABLE_SPELL_DEFENSIVE_SLOT1 = 219,
- EQUIPABLE_SPELL_DEFENSIVE_SLOT2 = 220,
- EQUIPABLE_SPELL_DEFENSIVE_SLOT3 = 221,
- EQUIPABLE_SPELL_DEFENSIVE_SLOT4 = 222,
- EQUIPABLE_SPELL_WEAPON_SLOT1 = 223,
- EQUIPABLE_SPELL_WEAPON_SLOT2 = 224,
- EQUIPABLE_SPELL_WEAPON_SLOT3 = 225,
- EQUIPABLE_SPELL_WEAPON_SLOT4 = 226,
+ EQUIPABLE_SPELL_OFFENSIVE_SLOT1 = 84,
+ EQUIPABLE_SPELL_OFFENSIVE_SLOT2 = 85,
+ EQUIPABLE_SPELL_OFFENSIVE_SLOT3 = 86,
+ EQUIPABLE_SPELL_OFFENSIVE_SLOT4 = 87,
+ EQUIPABLE_SPELL_UTILITY_SLOT1 = 88,
+ EQUIPABLE_SPELL_UTILITY_SLOT2 = 89,
+ EQUIPABLE_SPELL_UTILITY_SLOT3 = 90,
+ EQUIPABLE_SPELL_UTILITY_SLOT4 = 91,
+ EQUIPABLE_SPELL_DEFENSIVE_SLOT1 = 92,
+ EQUIPABLE_SPELL_DEFENSIVE_SLOT2 = 93,
+ EQUIPABLE_SPELL_DEFENSIVE_SLOT3 = 94,
+ EQUIPABLE_SPELL_DEFENSIVE_SLOT4 = 95,
+ EQUIPABLE_SPELL_WEAPON_SLOT1 = 96,
+ EQUIPABLE_SPELL_WEAPON_SLOT2 = 97,
+ EQUIPABLE_SPELL_WEAPON_SLOT3 = 98,
+ EQUIPABLE_SPELL_WEAPON_SLOT4 = 99,
};
enum AccountBankBagSlots
{
- ACCOUNT_BANK_SLOT_BAG_START = 227,
- ACCOUNT_BANK_SLOT_BAG_END = 232
+ ACCOUNT_BANK_SLOT_BAG_START = 100,
+ ACCOUNT_BANK_SLOT_BAG_END = 105
};
struct ItemPosCount
@@ -810,14 +800,17 @@ enum class ItemSearchCallbackResult
enum class BagSlotFlags : uint32
{
- None = 0x00,
- DisableAutoSort = 0x01,
- PriorityEquipment = 0x02,
- PriorityConsumables = 0x04,
- PriorityTradeGoods = 0x08,
- PriorityJunk = 0x10,
- PriorityQuestItems = 0x20,
- ExcludeJunkSell = 0x40,
+ None = 0x0000,
+ DisableAutoSort = 0x0001,
+ PriorityEquipment = 0x0002,
+ PriorityConsumables = 0x0004,
+ PriorityTradeGoods = 0x0008,
+ PriorityJunk = 0x0010,
+ PriorityQuestItems = 0x0020,
+ ExcludeJunkSell = 0x0040,
+ PriorityReagents = 0x0080,
+ ExpansionCurrent = 0x0100,
+ ExpansionLegacy = 0x0200,
};
DEFINE_ENUM_FLAG(BagSlotFlags);
@@ -939,7 +932,6 @@ enum PlayerLoginQueryIndex
PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES,
PLAYER_LOGIN_QUERY_LOAD_SEASONAL_QUEST_STATUS,
PLAYER_LOGIN_QUERY_LOAD_MONTHLY_QUEST_STATUS,
- PLAYER_LOGIN_QUERY_LOAD_VOID_STORAGE,
PLAYER_LOGIN_QUERY_LOAD_CURRENCY,
PLAYER_LOGIN_QUERY_LOAD_CUF_PROFILES,
PLAYER_LOGIN_QUERY_LOAD_CORPSE_LOCATION,
@@ -953,6 +945,7 @@ enum PlayerLoginQueryIndex
PLAYER_LOGIN_QUERY_LOAD_TRAIT_CONFIGS,
PLAYER_LOGIN_QUERY_LOAD_DATA_ELEMENTS,
PLAYER_LOGIN_QUERY_LOAD_DATA_FLAGS,
+ PLAYER_LOGIN_QUERY_LOAD_BANK_TAB_SETTINGS,
MAX_PLAYER_LOGIN_QUERY
};
@@ -1084,29 +1077,6 @@ struct BGData
bool HasTaxiPath() const { return taxiPath[0] && taxiPath[1]; }
};
-struct VoidStorageItem
-{
- VoidStorageItem() : ItemId(0), ItemEntry(0), RandomBonusListId(0), FixedScalingLevel(0), ArtifactKnowledgeLevel(0), Context(ItemContext::NONE) { }
- VoidStorageItem(uint64 id, uint32 entry, ObjectGuid const& creator, ItemRandomBonusListId randomBonusListId,
- uint32 fixedScalingLevel, uint32 artifactKnowledgeLevel, ItemContext context, std::vector<int32> const& bonuses)
- : ItemId(id), ItemEntry(entry), CreatorGuid(creator), RandomBonusListId(randomBonusListId),
- FixedScalingLevel(fixedScalingLevel), ArtifactKnowledgeLevel(artifactKnowledgeLevel), Context(context)
- {
- BonusListIDs.insert(BonusListIDs.end(), bonuses.begin(), bonuses.end());
- }
- VoidStorageItem(VoidStorageItem&& vsi) noexcept : ItemId(vsi.ItemId), ItemEntry(vsi.ItemEntry), CreatorGuid(vsi.CreatorGuid), RandomBonusListId(vsi.RandomBonusListId),
- FixedScalingLevel(vsi.FixedScalingLevel), ArtifactKnowledgeLevel(vsi.ArtifactKnowledgeLevel), Context(vsi.Context), BonusListIDs(std::move(vsi.BonusListIDs)) { }
-
- uint64 ItemId;
- uint32 ItemEntry;
- ObjectGuid CreatorGuid;
- ItemRandomBonusListId RandomBonusListId;
- uint32 FixedScalingLevel;
- uint32 ArtifactKnowledgeLevel;
- ItemContext Context;
- std::vector<int32> BonusListIDs;
-};
-
struct ResurrectionData
{
ObjectGuid GUID;
@@ -1391,11 +1361,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
if (flag.HasFlag(ItemSearchLocation::Bank))
{
- for (uint8 i = BANK_SLOT_ITEM_START; i < BANK_SLOT_BAG_END; ++i)
- if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
- if (callback(pItem) == ItemSearchCallbackResult::Stop)
- return false;
-
for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; ++i)
if (Bag* pBag = GetBagByPos(i))
for (uint32 j = 0; j < GetBagSize(pBag); ++j)
@@ -1412,11 +1377,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
if (Item* pItem = GetItemInBag(bag, j))
if (callback(pItem) == ItemSearchCallbackResult::Stop)
return false;
-
- for (uint8 i = REAGENT_SLOT_START; i < REAGENT_SLOT_END; ++i)
- if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
- if (callback(pItem) == ItemSearchCallbackResult::Stop)
- return false;
}
return true;
@@ -1450,16 +1410,37 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
static bool IsBagPos(uint16 pos);
static bool IsBankPos(uint16 pos) { return IsBankPos(pos >> 8, pos & 255); }
static bool IsBankPos(uint8 bag, uint8 slot);
- static bool IsReagentBankPos(uint16 pos) { return IsReagentBankPos(pos >> 8, pos & 255); }
- static bool IsReagentBankPos(uint8 bag, uint8 slot);
static bool IsChildEquipmentPos(uint16 pos) { return IsChildEquipmentPos(pos >> 8, pos & 255); }
static bool IsChildEquipmentPos(uint8 bag, uint8 slot);
+ static bool IsAccountBankPos(uint16 pos) { return IsBankPos(pos >> 8, pos & 255); }
+ static bool IsAccountBankPos(uint8 bag, uint8 slot);
bool IsValidPos(uint16 pos, bool explicit_pos) const { return IsValidPos(pos >> 8, pos & 255, explicit_pos); }
bool IsValidPos(uint8 bag, uint8 slot, bool explicit_pos) const;
uint8 GetInventorySlotCount() const { return m_activePlayerData->NumBackpackSlots; }
void SetInventorySlotCount(uint8 slots);
uint8 GetBankBagSlotCount() const { return m_activePlayerData->NumBankSlots; }
void SetBankBagSlotCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumBankSlots), count); }
+ uint8 GetCharacterBankTabCount() const { return m_activePlayerData->NumCharacterBankTabs; }
+ void SetCharacterBankTabCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumCharacterBankTabs), count); }
+ uint8 GetAccountBankTabCount() const { return m_activePlayerData->NumAccountBankTabs; }
+ void SetAccountBankTabCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumAccountBankTabs), count); }
+ void SetCharacterBankTabSettings(uint32 tabId, std::string const& name, std::string const& icon, std::string const& description, BagSlotFlags depositFlags)
+ {
+ auto setter = m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CharacterBankTabSettings, tabId);
+ SetBankTabSettings(setter, name, icon, description, depositFlags);
+ }
+ void SetAccountBankTabSettings(uint32 tabId, std::string const& name, std::string const& icon, std::string const& description, BagSlotFlags depositFlags)
+ {
+ auto setter = m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AccountBankTabSettings, tabId);
+ SetBankTabSettings(setter, name, icon, description, depositFlags);
+ }
+ void SetBankTabSettings(UF::MutableFieldReferenceWithChangesMask<UF::BankTabSettings, false> setter, std::string const& name, std::string const& icon, std::string const& description, BagSlotFlags depositFlags)
+ {
+ SetUpdateFieldValue(setter.ModifyValue(&UF::BankTabSettings::Name), name);
+ SetUpdateFieldValue(setter.ModifyValue(&UF::BankTabSettings::Icon), icon);
+ SetUpdateFieldValue(setter.ModifyValue(&UF::BankTabSettings::Description), description);
+ SetUpdateFieldValue(setter.ModifyValue(&UF::BankTabSettings::DepositFlags), int32(depositFlags));
+ }
bool IsBackpackAutoSortDisabled() const { return m_activePlayerData->BackpackAutoSortDisabled; }
void SetBackpackAutoSortDisabled(bool disabled) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BackpackAutoSortDisabled), disabled); }
bool IsBackpackSellJunkDisabled() const { return m_activePlayerData->BackpackSellJunkDisabled; }
@@ -1470,10 +1451,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void SetBagSlotFlag(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
void RemoveBagSlotFlag(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
void ReplaceAllBagSlotFlags(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
- EnumFlag<BagSlotFlags> GetBankBagSlotFlags(uint32 bagIndex) const { return static_cast<BagSlotFlags>(m_activePlayerData->BankBagSlotFlags[bagIndex]); }
- void SetBankBagSlotFlag(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BankBagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
- void RemoveBankBagSlotFlag(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BankBagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
- void ReplaceAllBankBagSlotFlags(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BankBagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
bool HasItemCount(uint32 item, uint32 count = 1, bool inBankAlso = false) const;
bool HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item const* ignoreItem = nullptr) const;
bool CanNoReagentCast(SpellInfo const* spellInfo) const;
@@ -1998,6 +1975,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void ApplyTraitConfig(int32 configId, bool apply);
void ApplyTraitEntry(int32 traitNodeEntryId, int32 rank, int32 grantedRanks, bool apply);
void SetActiveCombatTraitConfigID(int32 traitConfigId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ActiveCombatTraitConfigID), traitConfigId); }
+ void SetCurrentCombatTraitConfigSubTreeID(int32 traitSubTreeId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::CurrentCombatTraitConfigSubTreeID), traitSubTreeId); }
void SetTraitConfigUseStarterBuild(int32 traitConfigId, bool useStarterBuild);
void SetTraitConfigUseSharedActionBars(int32 traitConfigId, bool usesSharedActionBars, bool isLastSelectedSavedConfig);
Optional<PlayerSpellTrait> GetTraitInfoForSpell(uint32 spellId) const;
@@ -2807,18 +2785,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
std::string GetMapAreaAndZoneString() const;
std::string GetCoordsMapAreaAndZoneString() const;
- // Void Storage
- bool IsVoidStorageUnlocked() const { return HasPlayerFlag(PLAYER_FLAGS_VOID_UNLOCKED); }
- void UnlockVoidStorage() { SetPlayerFlag(PLAYER_FLAGS_VOID_UNLOCKED); }
- void LockVoidStorage() { RemovePlayerFlag(PLAYER_FLAGS_VOID_UNLOCKED); }
- uint8 GetNextVoidStorageFreeSlot() const;
- uint8 GetNumOfVoidStorageFreeSlots() const;
- uint8 AddVoidStorageItem(VoidStorageItem&& item);
- void DeleteVoidStorageItem(uint8 slot);
- bool SwapVoidStorageItem(uint8 oldSlot, uint8 newSlot);
- VoidStorageItem* GetVoidStorageItem(uint8 slot) const;
- VoidStorageItem* GetVoidStorageItem(uint64 id, uint8& slot) const;
-
// Reagent Bank
bool IsReagentBankUnlocked() const { return HasPlayerFlagEx(PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED); }
void UnlockReagentBank() { SetPlayerFlagEx(PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED); }
@@ -3058,7 +3024,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void _LoadInventory(PreparedQueryResult result, PreparedQueryResult artifactsResult, PreparedQueryResult azeriteResult,
PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult,
PreparedQueryResult azeriteEmpoweredItemResult, uint32 timeDiff);
- void _LoadVoidStorage(PreparedQueryResult result);
void _LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult, PreparedQueryResult artifactResult, PreparedQueryResult azeriteItemResult,
PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult, PreparedQueryResult azeriteEmpoweredItemResult);
static Item* _LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint64 mailId, Mail* mail, Field* fields, ItemAdditionalLoadInfo* addionalData);
@@ -3090,6 +3055,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void _LoadCurrency(PreparedQueryResult result);
void _LoadCUFProfiles(PreparedQueryResult result);
void _LoadPlayerData(PreparedQueryResult elementsResult, PreparedQueryResult flagsResult);
+ void _LoadCharacterBankTabSettings(PreparedQueryResult result);
/*********************************************************/
/*** SAVE SYSTEM ***/
@@ -3099,7 +3065,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void _SaveActions(CharacterDatabaseTransaction trans);
void _SaveAuras(CharacterDatabaseTransaction trans);
void _SaveInventory(CharacterDatabaseTransaction trans);
- void _SaveVoidStorage(CharacterDatabaseTransaction trans);
void _SaveMail(CharacterDatabaseTransaction trans);
void _SaveQuestStatus(CharacterDatabaseTransaction trans);
void _SaveDailyQuestStatus(CharacterDatabaseTransaction trans);
@@ -3119,6 +3084,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void _SaveCurrency(CharacterDatabaseTransaction trans);
void _SaveCUFProfiles(CharacterDatabaseTransaction trans);
void _SavePlayerData(CharacterDatabaseTransaction trans);
+ void _SaveCharacterBankTabSettings(CharacterDatabaseTransaction trans) const;
/*********************************************************/
/*** ENVIRONMENTAL SYSTEM ***/
@@ -3151,8 +3117,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
PlayerCurrenciesMap _currencyStorage;
- VoidStorageItem* _voidStorageItems[VOID_STORAGE_MAX_SLOT];
-
std::vector<Item*> m_itemUpdateQueue;
bool m_itemUpdateQueueBlocked;
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index f6917ee88f7..ab91bf1f62b 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1433,6 +1433,12 @@ class TC_GAME_API Unit : public WorldObject
void SetChannelObject(uint32 slot, ObjectGuid guid);
void RemoveChannelObject(ObjectGuid guid);
void ClearChannelObjects();
+ void SetChannelSpellData(uint32 startTimeMs, uint32 durationMs)
+ {
+ auto channelData = m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelData);
+ SetUpdateFieldValue(channelData.ModifyValue(&UF::UnitChannel::StartTimeMs), startTimeMs);
+ SetUpdateFieldValue(channelData.ModifyValue(&UF::UnitChannel::Duration), durationMs);
+ }
int8 GetSpellEmpowerStage() const { return m_unitData->SpellEmpowerStage; }
void SetSpellEmpowerStage(int8 stage) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::SpellEmpowerStage), stage); }
diff --git a/src/server/game/Globals/AreaTriggerDataStore.cpp b/src/server/game/Globals/AreaTriggerDataStore.cpp
index 9b67fef4467..a9ed6d056f9 100644
--- a/src/server/game/Globals/AreaTriggerDataStore.cpp
+++ b/src/server/game/Globals/AreaTriggerDataStore.cpp
@@ -272,8 +272,8 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates()
TC_LOG_INFO("server.loading", ">> Loaded 0 AreaTrigger create properties. DB table `areatrigger_create_properties` is empty.");
}
- // 0 1 2 3 4 5 6 7 8
- if (QueryResult circularMovementInfos = WorldDatabase.Query("SELECT AreaTriggerCreatePropertiesId, IsCustom, StartDelay, CircleRadius, BlendFromRadius, InitialAngle, ZOffset, CounterClockwise, CanLoop FROM `areatrigger_create_properties_orbit`"))
+ // 0 1 2 3 4 5 6 7 8
+ if (QueryResult circularMovementInfos = WorldDatabase.Query("SELECT AreaTriggerCreatePropertiesId, IsCustom, ExtraTimeForBlending, CircleRadius, BlendFromRadius, InitialAngle, ZOffset, CounterClockwise, CanLoop FROM `areatrigger_create_properties_orbit`"))
{
do
{
@@ -289,7 +289,7 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates()
createProperties->OrbitInfo.emplace();
- createProperties->OrbitInfo->StartDelay = circularMovementInfoFields[2].GetUInt32();
+ createProperties->OrbitInfo->ExtraTimeForBlending = circularMovementInfoFields[2].GetInt32();
#define VALIDATE_AND_SET_FLOAT(Float, Value) \
createProperties->OrbitInfo->Float = Value; \
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 6d24e727a39..f75382bc474 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -226,7 +226,6 @@ ObjectMgr::ObjectMgr():
_hiPetNumber(1),
_creatureSpawnId(1),
_gameObjectSpawnId(1),
- _voidItemId(1),
DBCLocaleIndex(LOCALE_enUS)
{
}
@@ -923,11 +922,11 @@ void ObjectMgr::LoadCreatureTemplateDifficulty()
// 0 1 2 3 4 5
QueryResult result = WorldDatabase.Query("SELECT Entry, DifficultyID, LevelScalingDeltaMin, LevelScalingDeltaMax, ContentTuningID, HealthScalingExpansion, "
- // 6 7 8 9 10 11 12
- "HealthModifier, ManaModifier, ArmorModifier, DamageModifier, CreatureDifficultyID, TypeFlags, TypeFlags2, "
- // 13 14 15 16 17
+ // 6 7 8 9 10 11 12 13
+ "HealthModifier, ManaModifier, ArmorModifier, DamageModifier, CreatureDifficultyID, TypeFlags, TypeFlags2, TypeFlags3, "
+ // 14 15 16 17 18
"LootID, PickPocketLootID, SkinLootID, GoldMin, GoldMax,"
- // 18 19 20 21 22 23 24 25
+ // 19 20 21 22 23 24 25 26
"StaticFlags1, StaticFlags2, StaticFlags3, StaticFlags4, StaticFlags5, StaticFlags6, StaticFlags7, StaticFlags8 "
"FROM creature_template_difficulty ORDER BY Entry");
@@ -964,14 +963,15 @@ void ObjectMgr::LoadCreatureTemplateDifficulty()
creatureDifficulty.CreatureDifficultyID = fields[10].GetInt32();
creatureDifficulty.TypeFlags = fields[11].GetUInt32();
creatureDifficulty.TypeFlags2 = fields[12].GetUInt32();
- creatureDifficulty.LootID = fields[13].GetUInt32();
- creatureDifficulty.PickPocketLootID = fields[14].GetUInt32();
- creatureDifficulty.SkinLootID = fields[15].GetUInt32();
- creatureDifficulty.GoldMin = fields[16].GetUInt32();
- creatureDifficulty.GoldMax = fields[17].GetUInt32();
- creatureDifficulty.StaticFlags = CreatureStaticFlagsHolder(CreatureStaticFlags(fields[18].GetUInt32()), CreatureStaticFlags2(fields[19].GetUInt32()),
- CreatureStaticFlags3(fields[20].GetUInt32()), CreatureStaticFlags4(fields[21].GetUInt32()), CreatureStaticFlags5(fields[22].GetUInt32()),
- CreatureStaticFlags6(fields[23].GetUInt32()), CreatureStaticFlags7(fields[24].GetUInt32()), CreatureStaticFlags8(fields[25].GetUInt32()));
+ creatureDifficulty.TypeFlags3 = fields[13].GetUInt32();
+ creatureDifficulty.LootID = fields[14].GetUInt32();
+ creatureDifficulty.PickPocketLootID = fields[15].GetUInt32();
+ creatureDifficulty.SkinLootID = fields[16].GetUInt32();
+ creatureDifficulty.GoldMin = fields[17].GetUInt32();
+ creatureDifficulty.GoldMax = fields[18].GetUInt32();
+ creatureDifficulty.StaticFlags = CreatureStaticFlagsHolder(CreatureStaticFlags(fields[19].GetUInt32()), CreatureStaticFlags2(fields[20].GetUInt32()),
+ CreatureStaticFlags3(fields[21].GetUInt32()), CreatureStaticFlags4(fields[22].GetUInt32()), CreatureStaticFlags5(fields[23].GetUInt32()),
+ CreatureStaticFlags6(fields[24].GetUInt32()), CreatureStaticFlags7(fields[25].GetUInt32()), CreatureStaticFlags8(fields[26].GetUInt32()));
// TODO: Check if this still applies
creatureDifficulty.DamageModifier *= Creature::GetDamageMod(itr->second.Classification);
@@ -7448,10 +7448,6 @@ void ObjectMgr::SetHighestGuids()
if (result)
sGroupMgr->SetGroupDbStoreSize((*result)[0].GetUInt32()+1);
- result = CharacterDatabase.Query("SELECT MAX(itemId) from character_void_storage");
- if (result)
- _voidItemId = (*result)[0].GetUInt64()+1;
-
result = WorldDatabase.Query("SELECT MAX(guid) FROM creature");
if (result)
_creatureSpawnId = (*result)[0].GetUInt64() + 1;
@@ -7506,16 +7502,6 @@ uint32 ObjectMgr::GeneratePetNumber()
return _hiPetNumber++;
}
-uint64 ObjectMgr::GenerateVoidStorageItemId()
-{
- if (_voidItemId >= uint64(0xFFFFFFFFFFFFFFFELL))
- {
- TC_LOG_ERROR("misc", "_voidItemId overflow!! Can't continue, shutting down server. ");
- World::StopNow(ERROR_EXIT_CODE);
- }
- return _voidItemId++;
-}
-
uint64 ObjectMgr::GenerateCreatureSpawnId()
{
if (_creatureSpawnId >= uint64(0xFFFFFFFFFFFFFFFELL))
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index a5684df7b94..b8c4cc292ff 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -1366,7 +1366,6 @@ class TC_GAME_API ObjectMgr
uint64 GenerateEquipmentSetGuid();
uint64 GenerateMailID();
uint32 GeneratePetNumber();
- uint64 GenerateVoidStorageItemId();
ObjectGuid::LowType GenerateCreatureSpawnId();
ObjectGuid::LowType GenerateGameObjectSpawnId();
@@ -1701,7 +1700,6 @@ class TC_GAME_API ObjectMgr
std::atomic<uint32> _hiPetNumber;
ObjectGuid::LowType _creatureSpawnId;
ObjectGuid::LowType _gameObjectSpawnId;
- uint64 _voidItemId;
// first free low guid for selected guid type
ObjectGuidGenerator& GetGuidSequenceGenerator(HighGuid high);
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 4a270a005f9..28230a309b0 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -52,11 +52,13 @@ uint32 const EMBLEM_PRICE = 10 * GOLD;
inline uint64 GetGuildBankTabPrice(uint8 tabId)
{
- // these prices are in gold units, not copper
- static uint64 const tabPrices[GUILD_BANK_MAX_TABS] = { 100, 250, 500, 1000, 2500, 5000, 0, 0 };
- ASSERT(tabId < GUILD_BANK_MAX_TABS);
+ auto bankTab = std::ranges::find(sBankTabStore, std::pair(BankType::Guild, int8(tabId)),
+ [](BankTabEntry const* bankTab) { return std::pair(BankType(bankTab->BankType), bankTab->OrderIndex); });
- return tabPrices[tabId];
+ if (bankTab != sBankTabStore.end())
+ return bankTab->Cost;
+
+ return 0;
}
void Guild::SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string_view param)
@@ -1659,7 +1661,7 @@ void Guild::HandleBuyBankTab(WorldSession* session, uint8 tabId)
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
// Remove money from bank
- uint64 tabCost = GetGuildBankTabPrice(tabId) * GOLD;
+ uint64 tabCost = GetGuildBankTabPrice(tabId);
if (tabCost && !_ModifyBankMoney(trans, tabCost, false)) // Should not happen, this is checked by client
return;
diff --git a/src/server/game/Handlers/BankHandler.cpp b/src/server/game/Handlers/BankHandler.cpp
index 91a65dfb58b..db3a34e0403 100644
--- a/src/server/game/Handlers/BankHandler.cpp
+++ b/src/server/game/Handlers/BankHandler.cpp
@@ -31,7 +31,7 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& pa
if (!CanUseBank())
{
- TC_LOG_ERROR("network", "WORLD: HandleAutoBankItemOpcode - Unit ({}) not found or you can't interact with him.", _player->PlayerTalkClass->GetInteractionData().SourceGuid.ToString());
+ TC_LOG_ERROR("network", "WORLD: HandleAutoBankItemOpcode - Unit ({}) not found or you can't interact with him.", _player->PlayerTalkClass->GetInteractionData().SourceGuid);
return;
}
@@ -106,7 +106,7 @@ void WorldSession::HandleAutoStoreBankItemOpcode(WorldPackets::Bank::AutoStoreBa
if (!CanUseBank())
{
- TC_LOG_ERROR("network", "WORLD: HandleAutoStoreBankItemOpcode - Unit ({}) not found or you can't interact with him.", _player->PlayerTalkClass->GetInteractionData().SourceGuid.ToString());
+ TC_LOG_ERROR("network", "WORLD: HandleAutoStoreBankItemOpcode - Unit ({}) not found or you can't interact with him.", _player->PlayerTalkClass->GetInteractionData().SourceGuid);
return;
}
@@ -144,67 +144,129 @@ void WorldSession::HandleAutoStoreBankItemOpcode(WorldPackets::Bank::AutoStoreBa
}
}
-void WorldSession::HandleBuyBankSlotOpcode(WorldPackets::Bank::BuyBankSlot& packet)
+void WorldSession::HandleBuyBankTab(WorldPackets::Bank::BuyBankTab const& buyBankTab)
{
- if (!CanUseBank(packet.Guid))
+ if (!CanUseBank(buyBankTab.Banker))
{
- TC_LOG_ERROR("network", "WORLD: HandleBuyBankSlotOpcode - {} not found or you can't interact with him.", packet.Guid.ToString());
+ TC_LOG_ERROR("network", "WorldSession::HandleBuyBankTab {} - Banker {} not found or can't interact with him.",
+ _player->GetGUID(), buyBankTab.Banker);
return;
}
- uint32 slot = _player->GetBankBagSlotCount();
+ if (buyBankTab.BankType != BankType::Character)
+ {
+ TC_LOG_DEBUG("network", "WorldSession::HandleBuyBankTab {} - Bank type {} is not supported.",
+ _player->GetGUID(), buyBankTab.BankType);
+ return;
+ }
+
+ uint32 itemId = 0;
+ uint8 slot = 0;
+ uint8 inventorySlot = 0;
+
+ switch (buyBankTab.BankType)
+ {
+ case BankType::Character:
+ itemId = ITEM_CHARACTER_BANK_TAB_BAG;
+ slot = _player->GetCharacterBankTabCount();
+ inventorySlot = BANK_SLOT_BAG_START;
+ break;
+ case BankType::Account:
+ itemId = ITEM_ACCOUNT_BANK_TAB_BAG;
+ slot = _player->GetAccountBankTabCount();
+ inventorySlot = ACCOUNT_BANK_SLOT_BAG_START;
+ break;
+ default:
+ TC_LOG_DEBUG("network", "WorldSession::HandleBuyBankTab {} - Bank type {} is not supported.",
+ _player->GetGUID(), buyBankTab.BankType);
+ return;
+ }
// next slot
++slot;
- TC_LOG_INFO("network", "PLAYER: Buy bank bag slot, slot number = {}", slot);
+ auto bankTab = std::ranges::find(sBankTabStore, std::pair(buyBankTab.BankType, int8(slot)),
+ [](BankTabEntry const* bankTab) { return std::pair(BankType(bankTab->BankType), bankTab->OrderIndex); });
- BankBagSlotPricesEntry const* slotEntry = sBankBagSlotPricesStore.LookupEntry(slot);
- if (!slotEntry)
+ if (bankTab == sBankTabStore.end())
return;
- uint32 price = slotEntry->Cost;
-
- if (!_player->HasEnoughMoney(uint64(price)))
+ uint64 price = bankTab->Cost;
+ if (!_player->HasEnoughMoney(price))
return;
- _player->SetBankBagSlotCount(slot);
- _player->ModifyMoney(-int64(price));
-
- _player->UpdateCriteria(CriteriaType::BankSlotsPurchased);
-}
-
-void WorldSession::HandleBuyReagentBankOpcode(WorldPackets::Bank::ReagentBank& reagentBank)
-{
- if (!CanUseBank(reagentBank.Banker))
+ uint16 inventoryPos = 0;
+ InventoryResult msg = _player->CanEquipNewItem(inventorySlot, inventoryPos, itemId, false);
+ if (msg != EQUIP_ERR_OK)
{
- TC_LOG_DEBUG("network", "WORLD: HandleBuyReagentBankOpcode - {} not found or you can't interact with him.", reagentBank.Banker.ToString());
+ _player->SendEquipError(msg, nullptr, nullptr, itemId);
return;
}
- if (_player->IsReagentBankUnlocked())
- {
- TC_LOG_DEBUG("network", "WORLD: HandleBuyReagentBankOpcode - Player ({}, name: {}) tried to unlock reagent bank a 2nd time.", _player->GetGUID().ToString(), _player->GetName());
+ Item* bag = _player->EquipNewItem(inventoryPos, itemId, ItemContext::NONE, true);
+ if (!bag)
return;
+
+ switch (buyBankTab.BankType)
+ {
+ case BankType::Character:
+ _player->SetCharacterBankTabCount(slot);
+ break;
+ case BankType::Account:
+ _player->SetAccountBankTabCount(slot);
+ break;
+ default:
+ break;
}
- constexpr int64 price = 100 * GOLD;
+ _player->ModifyMoney(-int64(price));
- if (!_player->HasEnoughMoney(price))
+ _player->UpdateCriteria(CriteriaType::BankTabPurchased, uint64(buyBankTab.BankType));
+}
+
+void WorldSession::HandleUpdateBankTabSettings(WorldPackets::Bank::UpdateBankTabSettings const& updateBankTabSettings)
+{
+ if (!CanUseBank(updateBankTabSettings.Banker))
{
- TC_LOG_DEBUG("network", "WORLD: HandleBuyReagentBankOpcode - Player ({}, name: {}) without enough gold.", _player->GetGUID().ToString(), _player->GetName());
+ TC_LOG_ERROR("network", "WorldSession::HandleUpdateBankTabSettings {} - Banker {} not found or can't interact with him.",
+ _player->GetGUID(), updateBankTabSettings.Banker);
return;
}
- _player->ModifyMoney(-price);
- _player->UnlockReagentBank();
+ switch (updateBankTabSettings.BankType)
+ {
+ case BankType::Character:
+ if (updateBankTabSettings.Tab >= _player->m_activePlayerData->CharacterBankTabSettings.size())
+ {
+ TC_LOG_DEBUG("network", "WorldSession::HandleUpdateBankTabSettings {} doesn't have bank tab {} in bank type {}.",
+ _player->GetGUID(), updateBankTabSettings.Tab, updateBankTabSettings.BankType);
+ return;
+ }
+ _player->SetCharacterBankTabSettings(updateBankTabSettings.Tab, updateBankTabSettings.Settings.Name,
+ updateBankTabSettings.Settings.Icon, updateBankTabSettings.Settings.Description, updateBankTabSettings.Settings.DepositFlags);
+ break;
+ case BankType::Account:
+ if (updateBankTabSettings.Tab >= _player->m_activePlayerData->AccountBankTabSettings.size())
+ {
+ TC_LOG_DEBUG("network", "WorldSession::HandleUpdateBankTabSettings {} doesn't have bank tab {} in bank type {}.",
+ _player->GetGUID(), updateBankTabSettings.Tab, updateBankTabSettings.BankType);
+ return;
+ }
+ _player->SetAccountBankTabSettings(updateBankTabSettings.Tab, updateBankTabSettings.Settings.Name,
+ updateBankTabSettings.Settings.Icon, updateBankTabSettings.Settings.Description, updateBankTabSettings.Settings.DepositFlags);
+ break;
+ default:
+ TC_LOG_DEBUG("network", "WorldSession::HandleUpdateBankTabSettings {} - Bank type {} is not supported.",
+ _player->GetGUID(), updateBankTabSettings.BankType);
+ break;
+ }
}
-void WorldSession::HandleReagentBankDepositOpcode(WorldPackets::Bank::ReagentBank& reagentBank)
+void WorldSession::HandleAutoDepositCharacterBank(WorldPackets::Bank::AutoDepositCharacterBank const& autoDepositCharacterBank)
{
- if (!CanUseBank(reagentBank.Banker))
+ if (!CanUseBank(autoDepositCharacterBank.Banker))
{
- TC_LOG_DEBUG("network", "WORLD: HandleReagentBankDepositOpcode - {} not found or you can't interact with him.", reagentBank.Banker.ToString());
+ TC_LOG_DEBUG("network", "WORLD: HandleReagentBankDepositOpcode - {} not found or you can't interact with him.", autoDepositCharacterBank.Banker);
return;
}
@@ -240,88 +302,6 @@ void WorldSession::HandleReagentBankDepositOpcode(WorldPackets::Bank::ReagentBan
}
}
-void WorldSession::HandleAutoBankReagentOpcode(WorldPackets::Bank::AutoBankReagent& autoBankReagent)
-{
- if (!CanUseBank())
- {
- TC_LOG_DEBUG("network", "WORLD: HandleAutoBankReagentOpcode - {} not found or you can't interact with him.", _player->PlayerTalkClass->GetInteractionData().SourceGuid.ToString());
- return;
- }
-
- if (!_player->IsReagentBankUnlocked())
- {
- _player->SendEquipError(EQUIP_ERR_REAGENT_BANK_LOCKED);
- return;
- }
-
- Item* item = _player->GetItemByPos(autoBankReagent.PackSlot, autoBankReagent.Slot);
- if (!item)
- return;
-
- ItemPosCountVec dest;
- InventoryResult msg = _player->CanBankItem(NULL_BAG, NULL_SLOT, dest, item, false, true, true);
- if (msg != EQUIP_ERR_OK)
- {
- _player->SendEquipError(msg, item, nullptr);
- return;
- }
-
- if (dest.size() == 1 && dest[0].pos == item->GetPos())
- {
- _player->SendEquipError(EQUIP_ERR_CANT_SWAP, item, nullptr);
- return;
- }
-
- _player->RemoveItem(autoBankReagent.PackSlot, autoBankReagent.Slot, true);
- _player->BankItem(dest, item, true);
-}
-
-void WorldSession::HandleAutoStoreBankReagentOpcode(WorldPackets::Bank::AutoStoreBankReagent& autoStoreBankReagent)
-{
- if (!CanUseBank())
- {
- TC_LOG_DEBUG("network", "WORLD: HandleAutoBankReagentOpcode - {} not found or you can't interact with him.", _player->PlayerTalkClass->GetInteractionData().SourceGuid.ToString());
- return;
- }
-
- if (!_player->IsReagentBankUnlocked())
- {
- _player->SendEquipError(EQUIP_ERR_REAGENT_BANK_LOCKED);
- return;
- }
-
- Item* pItem = _player->GetItemByPos(autoStoreBankReagent.Slot, autoStoreBankReagent.PackSlot);
- if (!pItem)
- return;
-
- if (_player->IsReagentBankPos(autoStoreBankReagent.Slot, autoStoreBankReagent.PackSlot))
- {
- ItemPosCountVec dest;
- InventoryResult msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, pItem, false);
- if (msg != EQUIP_ERR_OK)
- {
- _player->SendEquipError(msg, pItem, nullptr);
- return;
- }
-
- _player->RemoveItem(autoStoreBankReagent.Slot, autoStoreBankReagent.PackSlot, true);
- _player->StoreItem(dest, pItem, true);
- }
- else
- {
- ItemPosCountVec dest;
- InventoryResult msg = _player->CanBankItem(NULL_BAG, NULL_SLOT, dest, pItem, false, true, true);
- if (msg != EQUIP_ERR_OK)
- {
- _player->SendEquipError(msg, pItem, nullptr);
- return;
- }
-
- _player->RemoveItem(autoStoreBankReagent.Slot, autoStoreBankReagent.PackSlot, true);
- _player->BankItem(dest, pItem, true);
- }
-}
-
void WorldSession::SendShowBank(ObjectGuid guid, PlayerInteractionType interactionType)
{
_player->PlayerTalkClass->GetInteractionData().StartInteraction(guid, interactionType);
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 116390128d2..f0f60870bf1 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -182,10 +182,6 @@ bool LoginQueryHolder::Initialize()
stmt->setUInt64(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_AZERITE_EMPOWERED, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_VOID_STORAGE);
- stmt->setUInt64(0, lowGuid);
- res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_VOID_STORAGE, stmt);
-
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL);
stmt->setUInt64(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_MAILS, stmt);
@@ -353,6 +349,10 @@ bool LoginQueryHolder::Initialize()
stmt->setUInt64(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_DATA_FLAGS, stmt);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_BANK_TAB_SETTINGS);
+ stmt->setUInt64(0, lowGuid);
+ res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_BANK_TAB_SETTINGS, stmt);
+
return res;
}
@@ -1504,7 +1504,6 @@ void WorldSession::SendFeatureSystemStatus()
features.CfgRealmRecID = 0;
features.CommercePricePollTimeSeconds = 300;
features.VoiceEnabled = false;
- features.BrowserEnabled = false; // Has to be false, otherwise client will crash if "Customer Support" is opened
// Enable guilds only.
// This is required to restore old guild channel behavior for GMs.
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index e63ed58e7e4..a8602605c7d 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -1251,13 +1251,6 @@ void WorldSession::HandleSortBankBags(WorldPackets::Item::SortBankBags& /*sortBa
SendPacket(WorldPackets::Item::BagCleanupFinished().Write());
}
-void WorldSession::HandleSortReagentBankBags(WorldPackets::Item::SortReagentBankBags& /*sortReagentBankBags*/)
-{
- // TODO: Implement sorting
- // Placeholder to prevent completely locking out bags clientside
- SendPacket(WorldPackets::Item::BagCleanupFinished().Write());
-}
-
void WorldSession::HandleRemoveNewItem(WorldPackets::Item::RemoveNewItem& removeNewItem)
{
Item* item = _player->GetItemByGuid(removeNewItem.ItemGuid);
@@ -1285,17 +1278,6 @@ void WorldSession::HandleChangeBagSlotFlag(WorldPackets::Item::ChangeBagSlotFlag
_player->RemoveBagSlotFlag(changeBagSlotFlag.BagIndex, changeBagSlotFlag.FlagToChange);
}
-void WorldSession::HandleChangeBankBagSlotFlag(WorldPackets::Item::ChangeBankBagSlotFlag const& changeBankBagSlotFlag)
-{
- if (changeBankBagSlotFlag.BagIndex >= _player->m_activePlayerData->BankBagSlotFlags.size())
- return;
-
- if (changeBankBagSlotFlag.On)
- _player->SetBankBagSlotFlag(changeBankBagSlotFlag.BagIndex, changeBankBagSlotFlag.FlagToChange);
- else
- _player->RemoveBankBagSlotFlag(changeBankBagSlotFlag.BagIndex, changeBankBagSlotFlag.FlagToChange);
-}
-
void WorldSession::HandleSetBackpackAutosortDisabled(WorldPackets::Item::SetBackpackAutosortDisabled const& setBackpackAutosortDisabled)
{
_player->SetBackpackAutoSortDisabled(setBackpackAutosortDisabled.Disable);
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index 4012ccff590..37fda27000e 100644
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -322,6 +322,14 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acc
SendTradeStatus(info);
return;
}
+
+ if (Player::IsAccountBankPos(item->GetSlot(), item->GetBagSlot()))
+ {
+ info.Status = TRADE_STATUS_FAILED;
+ info.BagResult = EQUIP_ERR_CANT_TRADE_ACCOUNT_ITEM;
+ SendTradeStatus(info);
+ return;
+ }
}
if (Item* item = his_trade->GetItem(TradeSlots(i)))
@@ -338,6 +346,14 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acc
// his_trade->SetAccepted(false, true);
// return;
//}
+
+ if (Player::IsAccountBankPos(item->GetSlot(), item->GetBagSlot()))
+ {
+ info.Status = TRADE_STATUS_FAILED;
+ info.BagResult = EQUIP_ERR_CANT_TRADE_ACCOUNT_ITEM;
+ SendTradeStatus(info);
+ return;
+ }
}
}
diff --git a/src/server/game/Handlers/VoidStorageHandler.cpp b/src/server/game/Handlers/VoidStorageHandler.cpp
deleted file mode 100644
index 2ab4ee8fb8f..00000000000
--- a/src/server/game/Handlers/VoidStorageHandler.cpp
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "WorldSession.h"
-#include "Bag.h"
-#include "CollectionMgr.h"
-#include "Common.h"
-#include "Log.h"
-#include "ObjectAccessor.h"
-#include "ObjectMgr.h"
-#include "Player.h"
-#include "VoidStoragePackets.h"
-
-void WorldSession::SendVoidStorageTransferResult(VoidTransferError result)
-{
- SendPacket(WorldPackets::VoidStorage::VoidTransferResult(result).Write());
-}
-
-void WorldSession::HandleVoidStorageUnlock(WorldPackets::VoidStorage::UnlockVoidStorage& unlockVoidStorage)
-{
- Creature* unit = _player->GetNPCIfCanInteractWith(unlockVoidStorage.Npc, UNIT_NPC_FLAG_VAULTKEEPER, UNIT_NPC_FLAG_2_NONE);
- if (!unit)
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageUnlock - {} not found or player can't interact with it.", unlockVoidStorage.Npc.ToString());
- return;
- }
-
- if (_player->IsVoidStorageUnlocked())
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageUnlock - Player ({}, name: {}) tried to unlock void storage a 2nd time.", _player->GetGUID().ToString(), _player->GetName());
- return;
- }
-
- _player->ModifyMoney(-int64(VOID_STORAGE_UNLOCK_COST));
- _player->UnlockVoidStorage();
-}
-
-void WorldSession::HandleVoidStorageQuery(WorldPackets::VoidStorage::QueryVoidStorage& queryVoidStorage)
-{
- Creature* unit = _player->GetNPCIfCanInteractWith(queryVoidStorage.Npc, UNIT_NPC_FLAG_TRANSMOGRIFIER | UNIT_NPC_FLAG_VAULTKEEPER, UNIT_NPC_FLAG_2_NONE);
- if (!unit)
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageQuery - {} not found or player can't interact with it.", queryVoidStorage.Npc.ToString());
- SendPacket(WorldPackets::VoidStorage::VoidStorageFailed().Write());
- return;
- }
-
- if (!_player->IsVoidStorageUnlocked())
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageQuery - Player ({}, name: {}) queried void storage without unlocking it.", _player->GetGUID().ToString(), _player->GetName());
- SendPacket(WorldPackets::VoidStorage::VoidStorageFailed().Write());
- return;
- }
-
- WorldPackets::VoidStorage::VoidStorageContents voidStorageContents;
- voidStorageContents.Items.reserve(VOID_STORAGE_MAX_SLOT);
-
- for (uint8 i = 0; i < VOID_STORAGE_MAX_SLOT; ++i)
- {
- VoidStorageItem* item = _player->GetVoidStorageItem(i);
- if (!item)
- continue;
-
- WorldPackets::VoidStorage::VoidItem voidItem;
- voidItem.Guid = ObjectGuid::Create<HighGuid::Item>(item->ItemId);
- voidItem.Creator = item->CreatorGuid;
- voidItem.Slot = i;
- voidItem.Item.Initialize(item);
-
- voidStorageContents.Items.push_back(voidItem);
- }
-
- SendPacket(voidStorageContents.Write());
-}
-
-void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStorageTransfer& voidStorageTransfer)
-{
- Creature* unit = _player->GetNPCIfCanInteractWith(voidStorageTransfer.Npc, UNIT_NPC_FLAG_VAULTKEEPER, UNIT_NPC_FLAG_2_NONE);
- if (!unit)
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageTransfer - {} not found or player can't interact with it.", voidStorageTransfer.Npc.ToString());
- return;
- }
-
- if (!_player->IsVoidStorageUnlocked())
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageTransfer - Player ({}, name: {}) queried void storage without unlocking it.", _player->GetGUID().ToString(), _player->GetName());
- return;
- }
-
- if (voidStorageTransfer.Deposits.size() > _player->GetNumOfVoidStorageFreeSlots())
- {
- SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_FULL);
- return;
- }
-
- if (!voidStorageTransfer.Withdrawals.empty() && voidStorageTransfer.Withdrawals.size() > _player->GetFreeInventorySlotCount(ItemSearchLocation::Inventory))
- {
- SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_INVENTORY_FULL);
- return;
- }
-
- if (!_player->HasEnoughMoney(uint64(voidStorageTransfer.Deposits.size() * VOID_STORAGE_STORE_ITEM_COST)))
- {
- SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_NOT_ENOUGH_MONEY);
- return;
- }
-
- WorldPackets::VoidStorage::VoidStorageTransferChanges voidStorageTransferChanges;
- voidStorageTransferChanges.AddedItems.reserve(VOID_STORAGE_MAX_DEPOSIT);
- voidStorageTransferChanges.RemovedItems.reserve(VOID_STORAGE_MAX_DEPOSIT);
-
- uint8 depositCount = 0;
- for (uint32 i = 0; i < voidStorageTransfer.Deposits.size(); ++i)
- {
- Item* item = _player->GetItemByGuid(voidStorageTransfer.Deposits[i]);
- if (!item)
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageTransfer - {} {} wants to deposit an invalid item ({}).", _player->GetGUID().ToString(), _player->GetName(), voidStorageTransfer.Deposits[i].ToString());
- continue;
- }
-
- VoidStorageItem itemVS(sObjectMgr->GenerateVoidStorageItemId(), item->GetEntry(), item->GetCreator(),
- item->GetItemRandomBonusListId(), item->GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL), item->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL),
- item->GetContext(), item->GetBonusListIDs());
-
- WorldPackets::VoidStorage::VoidItem voidItem;
- voidItem.Guid = ObjectGuid::Create<HighGuid::Item>(itemVS.ItemId);
- voidItem.Creator = item->GetCreator();
- voidItem.Item.Initialize(&itemVS);
- voidItem.Slot = _player->AddVoidStorageItem(std::move(itemVS));
-
- voidStorageTransferChanges.AddedItems.push_back(voidItem);
-
- _player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
- ++depositCount;
- }
-
- int64 cost = depositCount * VOID_STORAGE_STORE_ITEM_COST;
-
- _player->ModifyMoney(-cost);
-
- for (uint32 i = 0; i < voidStorageTransfer.Withdrawals.size(); ++i)
- {
- uint8 slot = 0;
- VoidStorageItem* itemVS = _player->GetVoidStorageItem(voidStorageTransfer.Withdrawals[i].GetCounter(), slot);
- if (!itemVS)
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageTransfer - {} {} tried to withdraw an invalid item (id: {})", _player->GetGUID().ToString(), _player->GetName(), voidStorageTransfer.Withdrawals[i].ToString());
- continue;
- }
-
- ItemPosCountVec dest;
- InventoryResult msg = _player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemVS->ItemEntry, 1);
- if (msg != EQUIP_ERR_OK)
- {
- SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_INVENTORY_FULL);
- TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageTransfer - {} {} couldn't withdraw item id {} because inventory was full.", _player->GetGUID().ToString(), _player->GetName(), voidStorageTransfer.Withdrawals[i].ToString());
- return;
- }
-
- if (Item* item = _player->StoreNewItem(dest, itemVS->ItemEntry, true, itemVS->RandomBonusListId, GuidSet(), itemVS->Context, &itemVS->BonusListIDs))
- {
- item->SetCreator(itemVS->CreatorGuid);
- item->SetBinding(true);
- GetCollectionMgr()->AddItemAppearance(item);
- }
-
- voidStorageTransferChanges.RemovedItems.push_back(ObjectGuid::Create<HighGuid::Item>(itemVS->ItemId));
-
- _player->DeleteVoidStorageItem(slot);
- }
-
- SendPacket(voidStorageTransferChanges.Write());
-
- SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_NO_ERROR);
-}
-
-void WorldSession::HandleVoidSwapItem(WorldPackets::VoidStorage::SwapVoidItem& swapVoidItem)
-{
- Creature* unit = _player->GetNPCIfCanInteractWith(swapVoidItem.Npc, UNIT_NPC_FLAG_VAULTKEEPER, UNIT_NPC_FLAG_2_NONE);
- if (!unit)
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidSwapItem - {} not found or player can't interact with it.", swapVoidItem.Npc.ToString());
- return;
- }
-
- if (!_player->IsVoidStorageUnlocked())
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidSwapItem - Player ({}, name: {}) queried void storage without unlocking it.", _player->GetGUID().ToString(), _player->GetName());
- return;
- }
-
- uint8 oldSlot;
- if (!_player->GetVoidStorageItem(swapVoidItem.VoidItemGuid.GetCounter(), oldSlot))
- {
- TC_LOG_DEBUG("network", "WORLD: HandleVoidSwapItem - {} {} requested swapping an invalid item (slot: {}, itemid: {}).", _player->GetGUID().ToString(), _player->GetName(), swapVoidItem.DstSlot, swapVoidItem.VoidItemGuid.ToString());
- return;
- }
-
- bool usedDestSlot = _player->GetVoidStorageItem(swapVoidItem.DstSlot) != nullptr;
- ObjectGuid itemIdDest;
- if (usedDestSlot)
- itemIdDest = ObjectGuid::Create<HighGuid::Item>(_player->GetVoidStorageItem(swapVoidItem.DstSlot)->ItemId);
-
- if (!_player->SwapVoidStorageItem(oldSlot, swapVoidItem.DstSlot))
- {
- SendVoidStorageTransferResult(VOID_TRANSFER_ERROR_INTERNAL_ERROR_1);
- return;
- }
-
- WorldPackets::VoidStorage::VoidItemSwapResponse voidItemSwapResponse;
- voidItemSwapResponse.VoidItemA = swapVoidItem.VoidItemGuid;
- voidItemSwapResponse.VoidItemSlotA = swapVoidItem.DstSlot;
- if (usedDestSlot)
- {
- voidItemSwapResponse.VoidItemB = itemIdDest;
- voidItemSwapResponse.VoidItemSlotB = oldSlot;
- }
-
- SendPacket(voidItemSwapResponse.Write());
-}
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 8afe51bbdf9..8664db8e3bb 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -1635,6 +1635,10 @@ enum SpellEffectName
SPELL_EFFECT_UI_ACTION = 339,
SPELL_EFFECT_340 = 340,
SPELL_EFFECT_LEARN_WARBAND_SCENE = 341,
+ SPELL_EFFECT_342 = 342,
+ SPELL_EFFECT_343 = 343,
+ SPELL_EFFECT_344 = 344, // some kind of teleport
+ SPELL_EFFECT_ASSIST_ACTION = 345, // MiscValue[0] = AssistActionType, MiscValue[1] = ID, depends on type
TOTAL_SPELL_EFFECTS
};
@@ -3151,9 +3155,11 @@ enum GameobjectTypes : uint8
GAMEOBJECT_TYPE_CLIENT_MODEL = 60,
GAMEOBJECT_TYPE_CRAFTING_TABLE = 61,
GAMEOBJECT_TYPE_PERKS_PROGRAM_CHEST = 62,
+ GAMEOBJECT_TYPE_FUTURE_PATCH = 63,
+ GAMEOBJECT_TYPE_ASSIST_ACTION = 64,
};
-#define MAX_GAMEOBJECT_TYPE 63 // sending to client this or greater value can crash client.
+#define MAX_GAMEOBJECT_TYPE 65 // sending to client this or greater value can crash client.
#define MAX_GAMEOBJECT_DATA 35 // Max number of uint32 vars in gameobject_template data field
enum GameObjectFlags
@@ -6952,29 +6958,6 @@ enum DungeonStatusFlag
RAID_STATUSFLAG_25MAN_HEROIC = 0x08
};
-enum VoidStorageConstants
-{
- VOID_STORAGE_UNLOCK_COST = 100 * GOLD,
- VOID_STORAGE_STORE_ITEM_COST = 10 * GOLD,
- VOID_STORAGE_MAX_DEPOSIT = 9,
- VOID_STORAGE_MAX_WITHDRAW = 9,
- VOID_STORAGE_MAX_SLOT = 160
-};
-
-enum VoidTransferError
-{
- VOID_TRANSFER_ERROR_NO_ERROR = 0,
- VOID_TRANSFER_ERROR_INTERNAL_ERROR_1 = 1,
- VOID_TRANSFER_ERROR_INTERNAL_ERROR_2 = 2,
- VOID_TRANSFER_ERROR_FULL = 3,
- VOID_TRANSFER_ERROR_INTERNAL_ERROR_3 = 4,
- VOID_TRANSFER_ERROR_INTERNAL_ERROR_4 = 5,
- VOID_TRANSFER_ERROR_NOT_ENOUGH_MONEY = 6,
- VOID_TRANSFER_ERROR_INVENTORY_FULL = 7,
- VOID_TRANSFER_ERROR_ITEM_INVALID = 8,
- VOID_TRANSFER_ERROR_TRANSFER_UNKNOWN = 9
-};
-
enum class CurrencyDbFlags : uint8
{
None = 0x00,
@@ -7516,903 +7499,910 @@ enum class GameError : uint32
ERR_SET_LOOT_ROUNDROBIN = 294,
ERR_SET_LOOT_MASTER = 295,
ERR_SET_LOOT_GROUP = 296,
- ERR_SET_LOOT_THRESHOLD_S = 297,
- ERR_NEW_LOOT_MASTER_S = 298,
- ERR_SPECIFY_MASTER_LOOTER = 299,
- ERR_LOOT_SPEC_CHANGED_S = 300,
- ERR_TAME_FAILED = 301,
- ERR_CHAT_WHILE_DEAD = 302,
- ERR_CHAT_PLAYER_NOT_FOUND_S = 303,
- ERR_NEWTAXIPATH = 304,
- ERR_NO_PET = 305,
- ERR_NOTYOURPET = 306,
- ERR_PET_NOT_RENAMEABLE = 307,
- ERR_QUEST_OBJECTIVE_COMPLETE_S = 308,
- ERR_QUEST_UNKNOWN_COMPLETE = 309,
- ERR_QUEST_ADD_KILL_SII = 310,
- ERR_QUEST_ADD_FOUND_SII = 311,
- ERR_QUEST_ADD_ITEM_SII = 312,
- ERR_QUEST_ADD_PLAYER_KILL_SII = 313,
- ERR_CANNOTCREATEDIRECTORY = 314,
- ERR_CANNOTCREATEFILE = 315,
- ERR_PLAYER_WRONG_FACTION = 316,
- ERR_PLAYER_IS_NEUTRAL = 317,
- ERR_BANKSLOT_FAILED_TOO_MANY = 318,
- ERR_BANKSLOT_INSUFFICIENT_FUNDS = 319,
- ERR_BANKSLOT_NOTBANKER = 320,
- ERR_FRIEND_DB_ERROR = 321,
- ERR_FRIEND_LIST_FULL = 322,
- ERR_FRIEND_ADDED_S = 323,
- ERR_BATTLETAG_FRIEND_ADDED_S = 324,
- ERR_FRIEND_ONLINE_SS = 325,
- ERR_FRIEND_OFFLINE_S = 326,
- ERR_FRIEND_NOT_FOUND = 327,
- ERR_FRIEND_WRONG_FACTION = 328,
- ERR_FRIEND_REMOVED_S = 329,
- ERR_BATTLETAG_FRIEND_REMOVED_S = 330,
- ERR_FRIEND_ERROR = 331,
- ERR_FRIEND_ALREADY_S = 332,
- ERR_FRIEND_SELF = 333,
- ERR_FRIEND_DELETED = 334,
- ERR_IGNORE_FULL = 335,
- ERR_IGNORE_SELF = 336,
- ERR_IGNORE_NOT_FOUND = 337,
- ERR_IGNORE_ALREADY_S = 338,
- ERR_IGNORE_ADDED_S = 339,
- ERR_IGNORE_REMOVED_S = 340,
- ERR_IGNORE_AMBIGUOUS = 341,
- ERR_IGNORE_DELETED = 342,
- ERR_ONLY_ONE_BOLT = 343,
- ERR_ONLY_ONE_AMMO = 344,
- ERR_SPELL_FAILED_EQUIPPED_SPECIFIC_ITEM = 345,
- ERR_WRONG_BAG_TYPE_SUBCLASS = 346,
- ERR_CANT_WRAP_STACKABLE = 347,
- ERR_CANT_WRAP_EQUIPPED = 348,
- ERR_CANT_WRAP_WRAPPED = 349,
- ERR_CANT_WRAP_BOUND = 350,
- ERR_CANT_WRAP_UNIQUE = 351,
- ERR_CANT_WRAP_BAGS = 352,
- ERR_OUT_OF_MANA = 353,
- ERR_OUT_OF_RAGE = 354,
- ERR_OUT_OF_FOCUS = 355,
- ERR_OUT_OF_ENERGY = 356,
- ERR_OUT_OF_CHI = 357,
- ERR_OUT_OF_HEALTH = 358,
- ERR_OUT_OF_RUNES = 359,
- ERR_OUT_OF_RUNIC_POWER = 360,
- ERR_OUT_OF_SOUL_SHARDS = 361,
- ERR_OUT_OF_LUNAR_POWER = 362,
- ERR_OUT_OF_HOLY_POWER = 363,
- ERR_OUT_OF_MAELSTROM = 364,
- ERR_OUT_OF_COMBO_POINTS = 365,
- ERR_OUT_OF_INSANITY = 366,
- ERR_OUT_OF_ESSENCE = 367,
- ERR_OUT_OF_ARCANE_CHARGES = 368,
- ERR_OUT_OF_FURY = 369,
- ERR_OUT_OF_PAIN = 370,
- ERR_OUT_OF_POWER_DISPLAY = 371,
- ERR_OUT_OF_RUNE_BLOOD = 372,
- ERR_OUT_OF_RUNE_FROST = 373,
- ERR_OUT_OF_RUNE_UNHOLY = 374,
- ERR_OUT_OF_ALTERNATE_QUEST = 375,
- ERR_OUT_OF_ALTERNATE_ENCOUNTER = 376,
- ERR_OUT_OF_ALTERNATE_MOUNT = 377,
- ERR_OUT_OF_BALANCE = 378,
- ERR_OUT_OF_HAPPINESS = 379,
- ERR_OUT_OF_SHADOW_ORBS = 380,
- ERR_OUT_OF_RUNE_CHROMATIC = 381,
- ERR_LOOT_GONE = 382,
- ERR_MOUNT_FORCEDDISMOUNT = 383,
- ERR_AUTOFOLLOW_TOO_FAR = 384,
- ERR_UNIT_NOT_FOUND = 385,
- ERR_INVALID_FOLLOW_TARGET = 386,
- ERR_INVALID_FOLLOW_PVP_COMBAT = 387,
- ERR_INVALID_FOLLOW_TARGET_PVP_COMBAT = 388,
- ERR_INVALID_INSPECT_TARGET = 389,
- ERR_GUILDEMBLEM_SUCCESS = 390,
- ERR_GUILDEMBLEM_INVALID_TABARD_COLORS = 391,
- ERR_GUILDEMBLEM_NOGUILD = 392,
- ERR_GUILDEMBLEM_NOTGUILDMASTER = 393,
- ERR_GUILDEMBLEM_NOTENOUGHMONEY = 394,
- ERR_GUILDEMBLEM_INVALIDVENDOR = 395,
- ERR_EMBLEMERROR_NOTABARDGEOSET = 396,
- ERR_SPELL_OUT_OF_RANGE = 397,
- ERR_COMMAND_NEEDS_TARGET = 398,
- ERR_NOAMMO_S = 399,
- ERR_TOOBUSYTOFOLLOW = 400,
- ERR_DUEL_REQUESTED = 401,
- ERR_DUEL_CANCELLED = 402,
- ERR_DEATHBINDALREADYBOUND = 403,
- ERR_DEATHBIND_SUCCESS_S = 404,
- ERR_NOEMOTEWHILERUNNING = 405,
- ERR_ZONE_EXPLORED = 406,
- ERR_ZONE_EXPLORED_XP = 407,
- ERR_INVALID_ITEM_TARGET = 408,
- ERR_INVALID_QUEST_TARGET = 409,
- ERR_IGNORING_YOU_S = 410,
- ERR_FISH_NOT_HOOKED = 411,
- ERR_FISH_ESCAPED = 412,
- ERR_SPELL_FAILED_NOTUNSHEATHED = 413,
- ERR_PETITION_OFFERED_S = 414,
- ERR_PETITION_SIGNED = 415,
- ERR_PETITION_SIGNED_S = 416,
- ERR_PETITION_DECLINED_S = 417,
- ERR_PETITION_ALREADY_SIGNED = 418,
- ERR_PETITION_RESTRICTED_ACCOUNT_TRIAL = 419,
- ERR_PETITION_ALREADY_SIGNED_OTHER = 420,
- ERR_PETITION_IN_GUILD = 421,
- ERR_PETITION_CREATOR = 422,
- ERR_PETITION_NOT_ENOUGH_SIGNATURES = 423,
- ERR_PETITION_NOT_SAME_SERVER = 424,
- ERR_PETITION_FULL = 425,
- ERR_PETITION_ALREADY_SIGNED_BY_S = 426,
- ERR_GUILD_NAME_INVALID = 427,
- ERR_SPELL_UNLEARNED_S = 428,
- ERR_PET_SPELL_ROOTED = 429,
- ERR_PET_SPELL_AFFECTING_COMBAT = 430,
- ERR_PET_SPELL_OUT_OF_RANGE = 431,
- ERR_PET_SPELL_NOT_BEHIND = 432,
- ERR_PET_SPELL_TARGETS_DEAD = 433,
- ERR_PET_SPELL_DEAD = 434,
- ERR_PET_SPELL_NOPATH = 435,
- ERR_ITEM_CANT_BE_DESTROYED = 436,
- ERR_TICKET_ALREADY_EXISTS = 437,
- ERR_TICKET_CREATE_ERROR = 438,
- ERR_TICKET_UPDATE_ERROR = 439,
- ERR_TICKET_DB_ERROR = 440,
- ERR_TICKET_NO_TEXT = 441,
- ERR_TICKET_TEXT_TOO_LONG = 442,
- ERR_OBJECT_IS_BUSY = 443,
- ERR_EXHAUSTION_WELLRESTED = 444,
- ERR_EXHAUSTION_RESTED = 445,
- ERR_EXHAUSTION_NORMAL = 446,
- ERR_EXHAUSTION_TIRED = 447,
- ERR_EXHAUSTION_EXHAUSTED = 448,
- ERR_NO_ITEMS_WHILE_SHAPESHIFTED = 449,
- ERR_CANT_INTERACT_SHAPESHIFTED = 450,
- ERR_REALM_NOT_FOUND = 451,
- ERR_MAIL_QUEST_ITEM = 452,
- ERR_MAIL_BOUND_ITEM = 453,
- ERR_MAIL_CONJURED_ITEM = 454,
- ERR_MAIL_BAG = 455,
- ERR_MAIL_TO_SELF = 456,
- ERR_MAIL_TARGET_NOT_FOUND = 457,
- ERR_MAIL_DATABASE_ERROR = 458,
- ERR_MAIL_DELETE_ITEM_ERROR = 459,
- ERR_MAIL_WRAPPED_COD = 460,
- ERR_MAIL_CANT_SEND_REALM = 461,
- ERR_MAIL_TEMP_RETURN_OUTAGE = 462,
- ERR_MAIL_RECEPIENT_CANT_RECEIVE_MAIL = 463,
- ERR_MAIL_SENT = 464,
- ERR_MAIL_TARGET_IS_TRIAL = 465,
- ERR_NOT_HAPPY_ENOUGH = 466,
- ERR_USE_CANT_IMMUNE = 467,
- ERR_CANT_BE_DISENCHANTED = 468,
- ERR_CANT_USE_DISARMED = 469,
- ERR_AUCTION_DATABASE_ERROR = 470,
- ERR_AUCTION_HIGHER_BID = 471,
- ERR_AUCTION_ALREADY_BID = 472,
- ERR_AUCTION_OUTBID_S = 473,
- ERR_AUCTION_WON_S = 474,
- ERR_AUCTION_REMOVED_S = 475,
- ERR_AUCTION_BID_PLACED = 476,
- ERR_LOGOUT_FAILED = 477,
- ERR_QUEST_PUSH_SUCCESS_S = 478,
- ERR_QUEST_PUSH_INVALID_S = 479,
- ERR_QUEST_PUSH_INVALID_TO_RECIPIENT_S = 480,
- ERR_QUEST_PUSH_ACCEPTED_S = 481,
- ERR_QUEST_PUSH_DECLINED_S = 482,
- ERR_QUEST_PUSH_BUSY_S = 483,
- ERR_QUEST_PUSH_DEAD_S = 484,
- ERR_QUEST_PUSH_DEAD_TO_RECIPIENT_S = 485,
- ERR_QUEST_PUSH_LOG_FULL_S = 486,
- ERR_QUEST_PUSH_LOG_FULL_TO_RECIPIENT_S = 487,
- ERR_QUEST_PUSH_ONQUEST_S = 488,
- ERR_QUEST_PUSH_ONQUEST_TO_RECIPIENT_S = 489,
- ERR_QUEST_PUSH_ALREADY_DONE_S = 490,
- ERR_QUEST_PUSH_ALREADY_DONE_TO_RECIPIENT_S = 491,
- ERR_QUEST_PUSH_NOT_DAILY_S = 492,
- ERR_QUEST_PUSH_TIMER_EXPIRED_S = 493,
- ERR_QUEST_PUSH_NOT_IN_PARTY_S = 494,
- ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S = 495,
- ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_TO_RECIPIENT_S = 496,
- ERR_QUEST_PUSH_NOT_ALLOWED_S = 497,
- ERR_QUEST_PUSH_PREREQUISITE_S = 498,
- ERR_QUEST_PUSH_PREREQUISITE_TO_RECIPIENT_S = 499,
- ERR_QUEST_PUSH_LOW_LEVEL_S = 500,
- ERR_QUEST_PUSH_LOW_LEVEL_TO_RECIPIENT_S = 501,
- ERR_QUEST_PUSH_HIGH_LEVEL_S = 502,
- ERR_QUEST_PUSH_HIGH_LEVEL_TO_RECIPIENT_S = 503,
- ERR_QUEST_PUSH_CLASS_S = 504,
- ERR_QUEST_PUSH_CLASS_TO_RECIPIENT_S = 505,
- ERR_QUEST_PUSH_RACE_S = 506,
- ERR_QUEST_PUSH_RACE_TO_RECIPIENT_S = 507,
- ERR_QUEST_PUSH_LOW_FACTION_S = 508,
- ERR_QUEST_PUSH_LOW_FACTION_TO_RECIPIENT_S = 509,
- ERR_QUEST_PUSH_HIGH_FACTION_S = 510,
- ERR_QUEST_PUSH_HIGH_FACTION_TO_RECIPIENT_S = 511,
- ERR_QUEST_PUSH_EXPANSION_S = 512,
- ERR_QUEST_PUSH_EXPANSION_TO_RECIPIENT_S = 513,
- ERR_QUEST_PUSH_NOT_GARRISON_OWNER_S = 514,
- ERR_QUEST_PUSH_NOT_GARRISON_OWNER_TO_RECIPIENT_S = 515,
- ERR_QUEST_PUSH_WRONG_COVENANT_S = 516,
- ERR_QUEST_PUSH_WRONG_COVENANT_TO_RECIPIENT_S = 517,
- ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_S = 518,
- ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_TO_RECIPIENT_S = 519,
- ERR_QUEST_PUSH_WRONG_FACTION_S = 520,
- ERR_QUEST_PUSH_WRONG_FACTION_TO_RECIPIENT_S = 521,
- ERR_QUEST_PUSH_CROSS_FACTION_RESTRICTED_S = 522,
- ERR_RAID_GROUP_LOWLEVEL = 523,
- ERR_RAID_GROUP_ONLY = 524,
- ERR_RAID_GROUP_FULL = 525,
- ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 526,
- ERR_CORPSE_IS_NOT_IN_INSTANCE = 527,
- ERR_PVP_KILL_HONORABLE = 528,
- ERR_PVP_KILL_DISHONORABLE = 529,
- ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 530,
- ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 531,
- ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 532,
- ERR_AUTOLOOT_MONEY_S = 533,
- ERR_GENERIC_STUNNED = 534,
- ERR_GENERIC_THROTTLE = 535,
- ERR_CLUB_FINDER_SEARCHING_TOO_FAST = 536,
- ERR_TARGET_STUNNED = 537,
- ERR_MUST_REPAIR_DURABILITY = 538,
- ERR_RAID_YOU_JOINED = 539,
- ERR_RAID_YOU_LEFT = 540,
- ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 541,
- ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 542,
- ERR_RAID_MEMBER_ADDED_S = 543,
- ERR_RAID_MEMBER_REMOVED_S = 544,
- ERR_INSTANCE_GROUP_ADDED_S = 545,
- ERR_INSTANCE_GROUP_REMOVED_S = 546,
- ERR_CLICK_ON_ITEM_TO_FEED = 547,
- ERR_TOO_MANY_CHAT_CHANNELS = 548,
- ERR_LOOT_ROLL_PENDING = 549,
- ERR_LOOT_PLAYER_NOT_FOUND = 550,
- ERR_NOT_IN_RAID = 551,
- ERR_LOGGING_OUT = 552,
- ERR_TARGET_LOGGING_OUT = 553,
- ERR_NOT_WHILE_MOUNTED = 554,
- ERR_NOT_WHILE_SHAPESHIFTED = 555,
- ERR_NOT_IN_COMBAT = 556,
- ERR_NOT_WHILE_DISARMED = 557,
- ERR_PET_BROKEN = 558,
- ERR_TALENT_WIPE_ERROR = 559,
- ERR_SPEC_WIPE_ERROR = 560,
- ERR_GLYPH_WIPE_ERROR = 561,
- ERR_PET_SPEC_WIPE_ERROR = 562,
- ERR_FEIGN_DEATH_RESISTED = 563,
- ERR_MEETING_STONE_IN_QUEUE_S = 564,
- ERR_MEETING_STONE_LEFT_QUEUE_S = 565,
- ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 566,
- ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 567,
- ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 568,
- ERR_MEETING_STONE_SUCCESS = 569,
- ERR_MEETING_STONE_IN_PROGRESS = 570,
- ERR_MEETING_STONE_MEMBER_ADDED_S = 571,
- ERR_MEETING_STONE_GROUP_FULL = 572,
- ERR_MEETING_STONE_NOT_LEADER = 573,
- ERR_MEETING_STONE_INVALID_LEVEL = 574,
- ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 575,
- ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 576,
- ERR_MEETING_STONE_MUST_BE_LEADER = 577,
- ERR_MEETING_STONE_NO_RAID_GROUP = 578,
- ERR_MEETING_STONE_NEED_PARTY = 579,
- ERR_MEETING_STONE_NOT_FOUND = 580,
- ERR_MEETING_STONE_TARGET_IN_VEHICLE = 581,
- ERR_GUILDEMBLEM_SAME = 582,
- ERR_EQUIP_TRADE_ITEM = 583,
- ERR_PVP_TOGGLE_ON = 584,
- ERR_PVP_TOGGLE_OFF = 585,
- ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 586,
- ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 587,
- ERR_GROUP_JOIN_BATTLEGROUND_S = 588,
- ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 589,
- ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 590,
- ERR_SOLO_JOIN_BATTLEGROUND_S = 591,
- ERR_JOIN_SINGLE_SCENARIO_S = 592,
- ERR_BATTLEGROUND_TOO_MANY_QUEUES = 593,
- ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 594,
- ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 595,
- ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 596,
- ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 597,
- ERR_ALREADY_IN_ARENA_TEAM_S = 598,
- ERR_INVALID_PROMOTION_CODE = 599,
- ERR_BG_PLAYER_JOINED_SS = 600,
- ERR_BG_PLAYER_LEFT_S = 601,
- ERR_RESTRICTED_ACCOUNT = 602,
- ERR_RESTRICTED_ACCOUNT_TRIAL = 603,
- ERR_NOT_ENOUGH_PURCHASED_GAME_TIME = 604,
- ERR_PLAY_TIME_EXCEEDED = 605,
- ERR_APPROACHING_PARTIAL_PLAY_TIME = 606,
- ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 607,
- ERR_APPROACHING_NO_PLAY_TIME = 608,
- ERR_APPROACHING_NO_PLAY_TIME_2 = 609,
- ERR_UNHEALTHY_TIME = 610,
- ERR_CHAT_RESTRICTED_TRIAL = 611,
- ERR_CHAT_THROTTLED = 612,
- ERR_MAIL_REACHED_CAP = 613,
- ERR_INVALID_RAID_TARGET = 614,
- ERR_RAID_LEADER_READY_CHECK_START_S = 615,
- ERR_READY_CHECK_IN_PROGRESS = 616,
- ERR_READY_CHECK_THROTTLED = 617,
- ERR_DUNGEON_DIFFICULTY_FAILED = 618,
- ERR_DUNGEON_DIFFICULTY_CHANGED_S = 619,
- ERR_TRADE_WRONG_REALM = 620,
- ERR_TRADE_NOT_ON_TAPLIST = 621,
- ERR_CHAT_PLAYER_AMBIGUOUS_S = 622,
- ERR_LOOT_CANT_LOOT_THAT_NOW = 623,
- ERR_LOOT_MASTER_INV_FULL = 624,
- ERR_LOOT_MASTER_UNIQUE_ITEM = 625,
- ERR_LOOT_MASTER_OTHER = 626,
- ERR_FILTERING_YOU_S = 627,
- ERR_USE_PREVENTED_BY_MECHANIC_S = 628,
- ERR_ITEM_UNIQUE_EQUIPPABLE = 629,
- ERR_LFG_LEADER_IS_LFM_S = 630,
- ERR_LFG_PENDING = 631,
- ERR_CANT_SPEAK_LANGAGE = 632,
- ERR_VENDOR_MISSING_TURNINS = 633,
- ERR_BATTLEGROUND_NOT_IN_TEAM = 634,
- ERR_NOT_IN_BATTLEGROUND = 635,
- ERR_NOT_ENOUGH_HONOR_POINTS = 636,
- ERR_NOT_ENOUGH_ARENA_POINTS = 637,
- ERR_SOCKETING_REQUIRES_META_GEM = 638,
- ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 639,
- ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 640,
- ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 641,
- ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 642,
- ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 643,
- ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 644,
- ERR_ITEM_MAX_COUNT_SOCKETED = 645,
- ERR_SYSTEM_DISABLED = 646,
- ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 647,
- ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 648,
- ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 649,
- ERR_USER_SQUELCHED = 650,
- ERR_ACCOUNT_SILENCED = 651,
- ERR_PARTY_MEMBER_SILENCED = 652,
- ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 653,
- ERR_TOO_MUCH_GOLD = 654,
- ERR_NOT_BARBER_SITTING = 655,
- ERR_QUEST_FAILED_CAIS = 656,
- ERR_INVITE_RESTRICTED_TRIAL = 657,
- ERR_VOICE_IGNORE_FULL = 658,
- ERR_VOICE_IGNORE_SELF = 659,
- ERR_VOICE_IGNORE_NOT_FOUND = 660,
- ERR_VOICE_IGNORE_ALREADY_S = 661,
- ERR_VOICE_IGNORE_ADDED_S = 662,
- ERR_VOICE_IGNORE_REMOVED_S = 663,
- ERR_VOICE_IGNORE_AMBIGUOUS = 664,
- ERR_VOICE_IGNORE_DELETED = 665,
- ERR_UNKNOWN_MACRO_OPTION_S = 666,
- ERR_NOT_DURING_ARENA_MATCH = 667,
- ERR_NOT_IN_RATED_BATTLEGROUND = 668,
- ERR_PLAYER_SILENCED = 669,
- ERR_PLAYER_UNSILENCED = 670,
- ERR_COMSAT_DISCONNECT = 671,
- ERR_COMSAT_RECONNECT_ATTEMPT = 672,
- ERR_COMSAT_CONNECT_FAIL = 673,
- ERR_MAIL_INVALID_ATTACHMENT_SLOT = 674,
- ERR_MAIL_TOO_MANY_ATTACHMENTS = 675,
- ERR_MAIL_INVALID_ATTACHMENT = 676,
- ERR_MAIL_ATTACHMENT_EXPIRED = 677,
- ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 678,
- ERR_PROFANE_CHAT_NAME = 679,
- ERR_PLAYER_SILENCED_ECHO = 680,
- ERR_PLAYER_UNSILENCED_ECHO = 681,
- ERR_LOOT_CANT_LOOT_THAT = 682,
- ERR_ARENA_EXPIRED_CAIS = 683,
- ERR_GROUP_ACTION_THROTTLED = 684,
- ERR_ALREADY_PICKPOCKETED = 685,
- ERR_NAME_INVALID = 686,
- ERR_NAME_NO_NAME = 687,
- ERR_NAME_TOO_SHORT = 688,
- ERR_NAME_TOO_LONG = 689,
- ERR_NAME_MIXED_LANGUAGES = 690,
- ERR_NAME_PROFANE = 691,
- ERR_NAME_RESERVED = 692,
- ERR_NAME_THREE_CONSECUTIVE = 693,
- ERR_NAME_INVALID_SPACE = 694,
- ERR_NAME_CONSECUTIVE_SPACES = 695,
- ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 696,
- ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 697,
- ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 698,
- ERR_RECRUIT_A_FRIEND_NOT_LINKED = 699,
- ERR_RECRUIT_A_FRIEND_NOT_NOW = 700,
- ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 701,
- ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 702,
- ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 703,
- ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 704,
- ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 705,
- ERR_NOT_SAME_ACCOUNT = 706,
- ERR_BAD_ON_USE_ENCHANT = 707,
- ERR_TRADE_SELF = 708,
- ERR_TOO_MANY_SOCKETS = 709,
- ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 710,
- ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 711,
- ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 712,
- ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 713,
- ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 714,
- ERR_ITEM_INVENTORY_FULL_SATCHEL = 715,
- ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 716,
- ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 717,
- ERR_PURCHASE_LEVEL_TOO_LOW = 718,
- ERR_GROUP_SWAP_FAILED = 719,
- ERR_INVITE_IN_COMBAT = 720,
- ERR_INVALID_GLYPH_SLOT = 721,
- ERR_GENERIC_NO_VALID_TARGETS = 722,
- ERR_CALENDAR_EVENT_ALERT_S = 723,
- ERR_PET_LEARN_SPELL_S = 724,
- ERR_PET_LEARN_ABILITY_S = 725,
- ERR_PET_SPELL_UNLEARNED_S = 726,
- ERR_INVITE_UNKNOWN_REALM = 727,
- ERR_INVITE_NO_PARTY_SERVER = 728,
- ERR_INVITE_PARTY_BUSY = 729,
- ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 730,
- ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 731,
- ERR_PARTY_TARGET_AMBIGUOUS = 732,
- ERR_PARTY_LFG_INVITE_RAID_LOCKED = 733,
- ERR_PARTY_LFG_BOOT_LIMIT = 734,
- ERR_PARTY_LFG_BOOT_COOLDOWN_S = 735,
- ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 736,
- ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 737,
- ERR_PARTY_LFG_BOOT_IN_PROGRESS = 738,
- ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 739,
- ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 740,
- ERR_PARTY_LFG_BOOT_VOTE_FAILED = 741,
- ERR_PARTY_LFG_BOOT_DISALLOWED_BY_MAP = 742,
- ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 743,
- ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 744,
- ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 745,
- ERR_PARTY_PRIVATE_GROUP_ONLY = 746,
- ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 747,
- ERR_PARTY_TIME_RUNNING_SEASON_ID_MUST_MATCH = 748,
- ERR_RAID_DISALLOWED_BY_LEVEL = 749,
- ERR_RAID_DISALLOWED_BY_CROSS_REALM = 750,
- ERR_PARTY_ROLE_NOT_AVAILABLE = 751,
- ERR_JOIN_LFG_OBJECT_FAILED = 752,
- ERR_LFG_REMOVED_LEVELUP = 753,
- ERR_LFG_REMOVED_XP_TOGGLE = 754,
- ERR_LFG_REMOVED_FACTION_CHANGE = 755,
- ERR_BATTLEGROUND_INFO_THROTTLED = 756,
- ERR_BATTLEGROUND_ALREADY_IN = 757,
- ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 758,
- ERR_ARENA_TEAM_PERMISSIONS = 759,
- ERR_NOT_WHILE_FALLING = 760,
- ERR_NOT_WHILE_MOVING = 761,
- ERR_NOT_WHILE_FATIGUED = 762,
- ERR_MAX_SOCKETS = 763,
- ERR_MULTI_CAST_ACTION_TOTEM_S = 764,
- ERR_BATTLEGROUND_JOIN_LEVELUP = 765,
- ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 766,
- ERR_BATTLEGROUND_JOIN_XP_GAIN = 767,
- ERR_BATTLEGROUND_JOIN_MERCENARY = 768,
- ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 769,
- ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 770,
- ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 771,
- ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 772,
- ERR_RAID_DIFFICULTY_FAILED = 773,
- ERR_RAID_DIFFICULTY_CHANGED_S = 774,
- ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 775,
- ERR_RAID_LOCKOUT_CHANGED_S = 776,
- ERR_RAID_CONVERTED_TO_PARTY = 777,
- ERR_PARTY_CONVERTED_TO_RAID = 778,
- ERR_PLAYER_DIFFICULTY_CHANGED_S = 779,
- ERR_GMRESPONSE_DB_ERROR = 780,
- ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 781,
- ERR_ARENA_JOIN_RANGE_INDEX = 782,
- ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 783,
- ERR_BATTLEGROUND_JOIN_FAILED = 784,
- ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 785,
- ERR_BATTLEGROUND_JOIN_RESPEC = 786,
- ERR_BATTLEGROUND_INVITATION_DECLINED = 787,
- ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 788,
- ERR_BATTLEGROUND_JOIN_TIMED_OUT = 789,
- ERR_BATTLEGROUND_DUPE_QUEUE = 790,
- ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 791,
- ERR_IN_BATTLEGROUND_RESPEC = 792,
- ERR_MAIL_LIMITED_DURATION_ITEM = 793,
- ERR_YELL_RESTRICTED_TRIAL = 794,
- ERR_CHAT_RAID_RESTRICTED_TRIAL = 795,
- ERR_LFG_ROLE_CHECK_FAILED = 796,
- ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 797,
- ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 798,
- ERR_LFG_READY_CHECK_FAILED = 799,
- ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 800,
- ERR_LFG_GROUP_FULL = 801,
- ERR_LFG_NO_LFG_OBJECT = 802,
- ERR_LFG_NO_SLOTS_PLAYER = 803,
- ERR_LFG_NO_SLOTS_PARTY = 804,
- ERR_LFG_NO_SPEC = 805,
- ERR_LFG_MISMATCHED_SLOTS = 806,
- ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 807,
- ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 808,
- ERR_LFG_MEMBERS_NOT_PRESENT = 809,
- ERR_LFG_GET_INFO_TIMEOUT = 810,
- ERR_LFG_INVALID_SLOT = 811,
- ERR_LFG_DESERTER_PLAYER = 812,
- ERR_LFG_DESERTER_PARTY = 813,
- ERR_LFG_DEAD = 814,
- ERR_LFG_RANDOM_COOLDOWN_PLAYER = 815,
- ERR_LFG_RANDOM_COOLDOWN_PARTY = 816,
- ERR_LFG_TOO_MANY_MEMBERS = 817,
- ERR_LFG_TOO_FEW_MEMBERS = 818,
- ERR_LFG_PROPOSAL_FAILED = 819,
- ERR_LFG_PROPOSAL_DECLINED_SELF = 820,
- ERR_LFG_PROPOSAL_DECLINED_PARTY = 821,
- ERR_LFG_NO_SLOTS_SELECTED = 822,
- ERR_LFG_NO_ROLES_SELECTED = 823,
- ERR_LFG_ROLE_CHECK_INITIATED = 824,
- ERR_LFG_READY_CHECK_INITIATED = 825,
- ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 826,
- ERR_LFG_PLAYER_DECLINED_READY_CHECK = 827,
- ERR_LFG_LOREWALKING = 828,
- ERR_LFG_JOINED_QUEUE = 829,
- ERR_LFG_JOINED_FLEX_QUEUE = 830,
- ERR_LFG_JOINED_RF_QUEUE = 831,
- ERR_LFG_JOINED_SCENARIO_QUEUE = 832,
- ERR_LFG_JOINED_WORLD_PVP_QUEUE = 833,
- ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 834,
- ERR_LFG_JOINED_LIST = 835,
- ERR_QUEUED_PLUNDERSTORM = 836,
- ERR_LFG_LEFT_QUEUE = 837,
- ERR_LFG_LEFT_LIST = 838,
- ERR_LFG_ROLE_CHECK_ABORTED = 839,
- ERR_LFG_READY_CHECK_ABORTED = 840,
- ERR_LFG_CANT_USE_BATTLEGROUND = 841,
- ERR_LFG_CANT_USE_DUNGEONS = 842,
- ERR_LFG_REASON_TOO_MANY_LFG = 843,
- ERR_LFG_FARM_LIMIT = 844,
- ERR_LFG_NO_CROSS_FACTION_PARTIES = 845,
- ERR_INVALID_TELEPORT_LOCATION = 846,
- ERR_TOO_FAR_TO_INTERACT = 847,
- ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 848,
- ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 849,
- ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 850,
- ERR_DIFFICULTY_CHANGE_WORLDSTATE = 851,
- ERR_DIFFICULTY_CHANGE_ENCOUNTER = 852,
- ERR_DIFFICULTY_CHANGE_COMBAT = 853,
- ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 854,
- ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 855,
- ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 856,
- ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 857,
- ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 858,
- ERR_ARENA_TEAM_PARTY_SIZE = 859,
- ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 860,
- ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 861,
- ERR_SOLO_RBG_WARGAME_GROUP_SIZE = 862,
- ERR_SOLO_RBG_WARGAME_GROUP_COMP = 863,
- ERR_SOLO_MIN_ITEM_LEVEL = 864,
- ERR_PVP_PLAYER_ABANDONED = 865,
- ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 866,
- ERR_QUEST_FORCE_REMOVED_S = 867,
- ERR_ATTACK_NO_ACTIONS = 868,
- ERR_IN_RANDOM_BG = 869,
- ERR_IN_NON_RANDOM_BG = 870,
- ERR_BN_FRIEND_SELF = 871,
- ERR_BN_FRIEND_ALREADY = 872,
- ERR_BN_FRIEND_BLOCKED = 873,
- ERR_BN_FRIEND_LIST_FULL = 874,
- ERR_BN_FRIEND_REQUEST_SENT = 875,
- ERR_BN_BROADCAST_THROTTLE = 876,
- ERR_BG_DEVELOPER_ONLY = 877,
- ERR_CURRENCY_SPELL_SLOT_MISMATCH = 878,
- ERR_CURRENCY_NOT_TRADABLE = 879,
- ERR_REQUIRES_EXPANSION_S = 880,
- ERR_QUEST_FAILED_SPELL = 881,
- ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 882,
- ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 883,
- ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 884,
- ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 885,
- ERR_TALENT_FAILED_UNKNOWN = 886,
- ERR_TALENT_FAILED_IN_COMBAT = 887,
- ERR_TALENT_FAILED_IN_PVP_MATCH = 888,
- ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 889,
- ERR_WARGAME_REQUEST_FAILURE = 890,
- ERR_RANK_REQUIRES_AUTHENTICATOR = 891,
- ERR_GUILD_BANK_VOUCHER_FAILED = 892,
- ERR_WARGAME_REQUEST_SENT = 893,
- ERR_REQUIRES_ACHIEVEMENT_I = 894,
- ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 895,
- ERR_CANT_BUY_QUANTITY = 896,
- ERR_ITEM_IS_BATTLE_PAY_LOCKED = 897,
- ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 898,
- ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 899,
- ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 900,
- ERR_INSUFF_TRACKED_CURRENCY_IS = 901,
- ERR_NOT_ON_TOURNAMENT_REALM = 902,
- ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 903,
- ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 904,
- ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 905,
- ERR_CANT_DO_THAT_IN_A_GROUP = 906,
- ERR_GUILD_LEADER_REPLACED = 907,
- ERR_TRANSMOGRIFY_CANT_EQUIP = 908,
- ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 909,
- ERR_TRANSMOGRIFY_NOT_SOULBOUND = 910,
- ERR_TRANSMOGRIFY_INVALID_SOURCE = 911,
- ERR_TRANSMOGRIFY_INVALID_DESTINATION = 912,
- ERR_TRANSMOGRIFY_MISMATCH = 913,
- ERR_TRANSMOGRIFY_LEGENDARY = 914,
- ERR_TRANSMOGRIFY_SAME_ITEM = 915,
- ERR_TRANSMOGRIFY_SAME_APPEARANCE = 916,
- ERR_TRANSMOGRIFY_NOT_EQUIPPED = 917,
- ERR_VOID_DEPOSIT_FULL = 918,
- ERR_VOID_WITHDRAW_FULL = 919,
- ERR_VOID_STORAGE_WRAPPED = 920,
- ERR_VOID_STORAGE_STACKABLE = 921,
- ERR_VOID_STORAGE_UNBOUND = 922,
- ERR_VOID_STORAGE_REPAIR = 923,
- ERR_VOID_STORAGE_CHARGES = 924,
- ERR_VOID_STORAGE_QUEST = 925,
- ERR_VOID_STORAGE_CONJURED = 926,
- ERR_VOID_STORAGE_MAIL = 927,
- ERR_VOID_STORAGE_BAG = 928,
- ERR_VOID_TRANSFER_STORAGE_FULL = 929,
- ERR_VOID_TRANSFER_INV_FULL = 930,
- ERR_VOID_TRANSFER_INTERNAL_ERROR = 931,
- ERR_VOID_TRANSFER_ITEM_INVALID = 932,
- ERR_DIFFICULTY_DISABLED_IN_LFG = 933,
- ERR_VOID_STORAGE_UNIQUE = 934,
- ERR_VOID_STORAGE_LOOT = 935,
- ERR_VOID_STORAGE_HOLIDAY = 936,
- ERR_VOID_STORAGE_DURATION = 937,
- ERR_VOID_STORAGE_LOAD_FAILED = 938,
- ERR_VOID_STORAGE_INVALID_ITEM = 939,
- ERR_VOID_STORAGE_ACCOUNT_ITEM = 940,
- ERR_PARENTAL_CONTROLS_CHAT_MUTED = 941,
- ERR_SOR_START_EXPERIENCE_INCOMPLETE = 942,
- ERR_SOR_INVALID_EMAIL = 943,
- ERR_SOR_INVALID_COMMENT = 944,
- ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 945,
- ERR_CHALLENGE_MODE_RESET_KEYSTONE = 946,
- ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 947,
- ERR_REPORT_SUBMITTED_SUCCESSFULLY = 948,
- ERR_REPORT_SUBMISSION_FAILED = 949,
- ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 950,
- ERR_BUG_SUBMITTED_SUCCESSFULLY = 951,
- ERR_CHALLENGE_MODE_ENABLED = 952,
- ERR_CHALLENGE_MODE_DISABLED = 953,
- ERR_PETBATTLE_CREATE_FAILED = 954,
- ERR_PETBATTLE_NOT_HERE = 955,
- ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 956,
- ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 957,
- ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 958,
- ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 959,
- ERR_PETBATTLE_NOT_WHILE_DEAD = 960,
- ERR_PETBATTLE_NOT_WHILE_FLYING = 961,
- ERR_PETBATTLE_TARGET_INVALID = 962,
- ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 963,
- ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 964,
- ERR_PETBATTLE_NOT_A_TRAINER = 965,
- ERR_PETBATTLE_DECLINED = 966,
- ERR_PETBATTLE_IN_BATTLE = 967,
- ERR_PETBATTLE_INVALID_LOADOUT = 968,
- ERR_PETBATTLE_ALL_PETS_DEAD = 969,
- ERR_PETBATTLE_NO_PETS_IN_SLOTS = 970,
- ERR_PETBATTLE_NO_ACCOUNT_LOCK = 971,
- ERR_PETBATTLE_WILD_PET_TAPPED = 972,
- ERR_PETBATTLE_RESTRICTED_ACCOUNT = 973,
- ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 974,
- ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 975,
- ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 976,
- ERR_CANT_HAVE_MORE_PETS = 977,
- ERR_PVP_MAP_NOT_FOUND = 978,
- ERR_PVP_MAP_NOT_SET = 979,
- ERR_PETBATTLE_QUEUE_QUEUED = 980,
- ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 981,
- ERR_PETBATTLE_QUEUE_JOIN_FAILED = 982,
- ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 983,
- ERR_PETBATTLE_QUEUE_REMOVED = 984,
- ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 985,
- ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 986,
- ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 987,
- ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 988,
- ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 989,
- ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 990,
- ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 991,
- ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 992,
- ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 993,
- ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 994,
- ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 995,
- ERR_PETBATTLE_QUEUE_SLOT_DEAD = 996,
- ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 997,
- ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 998,
- ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 999,
- ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 1000,
- ERR_HAS_RESTRICTION = 1001,
- ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 1002,
- ERR_ITEM_UPGRADE_NO_PATH = 1003,
- ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 1004,
- ERR_BONUS_ROLL_EMPTY = 1005,
- ERR_CHALLENGE_MODE_FULL = 1006,
- ERR_CHALLENGE_MODE_IN_PROGRESS = 1007,
- ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 1008,
- ERR_BATTLETAG_FRIEND_NOT_FOUND = 1009,
- ERR_BATTLETAG_FRIEND_NOT_VALID = 1010,
- ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 1011,
- ERR_BATTLETAG_FRIEND_THROTTLED = 1012,
- ERR_BATTLETAG_FRIEND_SUCCESS = 1013,
- ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 1014,
- ERR_PETBATTLE_INTERNAL = 1015,
- ERR_CANT_CAGE_PET_YET = 1016,
- ERR_NO_LOOT_IN_CHALLENGE_MODE = 1017,
- ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 1018,
- ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 1019,
- ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 1020,
- ERR_RECRUIT_A_FRIEND_FAILED = 1021,
- ERR_SET_LOOT_PERSONAL = 1022,
- ERR_SET_LOOT_METHOD_FAILED_COMBAT = 1023,
- ERR_REAGENT_BANK_FULL = 1024,
- ERR_REAGENT_BANK_LOCKED = 1025,
- ERR_GARRISON_BUILDING_EXISTS = 1026,
- ERR_GARRISON_INVALID_PLOT = 1027,
- ERR_GARRISON_INVALID_BUILDINGID = 1028,
- ERR_GARRISON_INVALID_PLOT_BUILDING = 1029,
- ERR_GARRISON_REQUIRES_BLUEPRINT = 1030,
- ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1031,
- ERR_GARRISON_NOT_ENOUGH_GOLD = 1032,
- ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1033,
- ERR_ALREADY_USING_LFG_LIST = 1034,
- ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1035,
- ERR_TOY_USE_LIMIT_REACHED = 1036,
- ERR_TOY_ALREADY_KNOWN = 1037,
- ERR_TRANSMOG_SET_ALREADY_KNOWN = 1038,
- ERR_NOT_ENOUGH_CURRENCY = 1039,
- ERR_SPEC_IS_DISABLED = 1040,
- ERR_FEATURE_RESTRICTED_TRIAL = 1041,
- ERR_CANT_BE_OBLITERATED = 1042,
- ERR_CANT_BE_SCRAPPED = 1043,
- ERR_CANT_BE_RECRAFTED = 1044,
- ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1045,
- ERR_MUST_EQUIP_ARTIFACT = 1046,
- ERR_CANT_DO_THAT_RIGHT_NOW = 1047,
- ERR_AFFECTING_COMBAT = 1048,
- ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1049,
- ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1050,
- ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1051,
- ERR_MOVIE_RECORDING_WARNING_PERF = 1052,
- ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1053,
- ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1054,
- ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1055,
- ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1056,
- ERR_NO_CHALLENGE_MODE_REWARD = 1057,
- ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1058,
- ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1059,
- ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1060,
- ERR_TALENT_FAILED_REST_AREA = 1061,
- ERR_CANNOT_ABANDON_LAST_PET = 1062,
- ERR_TEST_CVAR_SET_SSS = 1063,
- ERR_QUEST_TURN_IN_FAIL_REASON = 1064,
- ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1065,
- ERR_TALENT_GRANTED_BY_AURA = 1066,
- ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1067,
- ERR_GLYPH_TARGET_NOT_AVAILABLE = 1068,
- ERR_PVP_WARMODE_TOGGLE_ON = 1069,
- ERR_PVP_WARMODE_TOGGLE_OFF = 1070,
- ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1071,
- ERR_SPELL_FAILED_CANT_FLY_HERE = 1072,
- ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1073,
- ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1074,
- ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1075,
- ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1076,
- ERR_VOICE_CHAT_SERVICE_LOST = 1077,
- ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1078,
- ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1079,
- ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1080,
- ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1081,
- ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1082,
- ERR_VOICE_CHAT_PLAYER_SILENCED = 1083,
- ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1084,
- ERR_VOICE_CHAT_DISABLED = 1085,
- ERR_NO_PVP_REWARD = 1086,
- ERR_CLAIMED_PVP_REWARD = 1087,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1088,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1089,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1090,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1091,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1092,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1093,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1094,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1095,
- ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1096,
- ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1097,
- ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1098,
- ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1099,
- ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1100,
- ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1101,
- ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1102,
- ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1103,
- ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1104,
- ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1105,
- ERR_SOCKETING_REQUIRES_TINKER_GEM = 1106,
- ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1107,
- ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1108,
- ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1109,
- ERR_SOCKETING_REQUIRES_FRAGRANCE_GEM = 1110,
- ERR_SOCKETING_FRAGRANCE_GEM_ONLY_IN_FRAGRANCESLOT = 1111,
- ERR_SOCKETING_REQUIRES_SINGING_THUNDER_GEM = 1112,
- ERR_SOCKETING_SINGINGTHUNDER_GEM_ONLY_IN_SINGINGTHUNDERSLOT = 1113,
- ERR_SOCKETING_REQUIRES_SINGING_SEA_GEM = 1114,
- ERR_SOCKETING_SINGINGSEA_GEM_ONLY_IN_SINGINGSEASLOT = 1115,
- ERR_SOCKETING_REQUIRES_SINGING_WIND_GEM = 1116,
- ERR_SOCKETING_SINGINGWIND_GEM_ONLY_IN_SINGINGWINDSLOT = 1117,
- ERR_LEVEL_LINKING_RESULT_LINKED = 1118,
- ERR_LEVEL_LINKING_RESULT_UNLINKED = 1119,
- ERR_CLUB_FINDER_ERROR_POST_CLUB = 1120,
- ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1121,
- ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1122,
- ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1123,
- ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1124,
- ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1125,
- ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1126,
- ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1127,
- ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1128,
- ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1129,
- ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1130,
- ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1131,
- ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1132,
- ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1133,
- ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1134,
- ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1135,
- ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1136,
- ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1137,
- ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1138,
- ERR_SOULBIND_INVALID_CONDUIT = 1139,
- ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1140,
- ERR_SOULBIND_INVALID_TALENT = 1141,
- ERR_SOULBIND_DUPLICATE_CONDUIT = 1142,
- ERR_ACTIVATE_SOULBIND_S = 1143,
- ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1144,
- ERR_CANT_USE_PROFANITY = 1145,
- ERR_NOT_IN_PET_BATTLE = 1146,
- ERR_NOT_IN_NPE = 1147,
- ERR_NO_SPEC = 1148,
- ERR_NO_DOMINATIONSHARD_OVERWRITE = 1149,
- ERR_USE_WEEKLY_REWARDS_DISABLED = 1150,
- ERR_CROSS_FACTION_GROUP_JOINED = 1151,
- ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1152,
- ERR_EQUIPABLESPELLS_SLOTS_FULL = 1153,
- ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1154,
- ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1155,
- ERR_NO_SOULBOUND_ITEM_IN_ACCOUNT_BANK = 1156,
- ERR_NO_REFUNDABLE_ITEM_IN_ACCOUNT_BANK = 1157,
- ERR_CANT_DELETE_IN_ACCOUNT_BANK = 1158,
- ERR_NO_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1159,
- ERR_NO_OPEN_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1160,
- ERR_CANT_TRADE_ACCOUNT_ITEM = 1161,
- ERR_NO_ACCOUNT_INVENTORY_LOCK = 1162,
- ERR_BANK_NOT_ACCESSIBLE = 1163,
- ERR_TOO_MANY_ACCOUNT_BANK_TABS = 1164,
- ERR_ACCOUNT_BANK_TAB_NOT_UNLOCKED = 1165,
- ERR_ACCOUNT_MONEY_LOCKED = 1166,
- ERR_BANK_TAB_INVALID_NAME = 1167,
- ERR_BANK_TAB_INVALID_TEXT = 1168,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1169,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1170,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1171,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1172,
- ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1173,
- ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1174,
- ERR_WOW_LABS_SET_WOW_LABS_AREA_ID_FAILED = 1175,
- ERR_PLUNDERSTORM_CANNOT_QUEUE = 1176,
- ERR_TARGET_IS_SELF_FOUND_CANNOT_TRADE = 1177,
- ERR_PLAYER_IS_SELF_FOUND_CANNOT_TRADE = 1178,
- ERR_MAIL_RECEPIENT_IS_SELF_FOUND_CANNOT_RECEIVE_MAIL = 1179,
- ERR_PLAYER_IS_SELF_FOUND_CANNOT_SEND_MAIL = 1180,
- ERR_PLAYER_IS_SELF_FOUND_CANNOT_USE_AUCTION_HOUSE = 1181,
- ERR_MAIL_TARGET_CANNOT_RECEIVE_MAIL = 1182,
- ERR_REMIX_INVALID_TRANSFER_REQUEST = 1183,
- ERR_CURRENCY_TRANSFER_INVALID_CHARACTER = 1184,
- ERR_CURRENCY_TRANSFER_INVALID_CURRENCY = 1185,
- ERR_CURRENCY_TRANSFER_INSUFFICIENT_CURRENCY = 1186,
- ERR_CURRENCY_TRANSFER_MAX_QUANTITY = 1187,
- ERR_CURRENCY_TRANSFER_NO_VALID_SOURCE = 1188,
- ERR_CURRENCY_TRANSFER_CHARACTER_LOGGED_IN = 1189,
- ERR_CURRENCY_TRANSFER_SERVER_ERROR = 1190,
- ERR_CURRENCY_TRANSFER_UNMET_REQUIREMENTS = 1191,
- ERR_CURRENCY_TRANSFER_TRANSACTION_IN_PROGRESS = 1192,
- ERR_CURRENCY_TRANSFER_DISABLED = 1193,
+ ERR_SET_LOOT_NBG = 297,
+ ERR_SET_LOOT_THRESHOLD_S = 298,
+ ERR_NEW_LOOT_MASTER_S = 299,
+ ERR_SPECIFY_MASTER_LOOTER = 300,
+ ERR_LOOT_SPEC_CHANGED_S = 301,
+ ERR_TAME_FAILED = 302,
+ ERR_CHAT_WHILE_DEAD = 303,
+ ERR_CHAT_PLAYER_NOT_FOUND_S = 304,
+ ERR_NEWTAXIPATH = 305,
+ ERR_NO_PET = 306,
+ ERR_NOTYOURPET = 307,
+ ERR_PET_NOT_RENAMEABLE = 308,
+ ERR_QUEST_OBJECTIVE_COMPLETE_S = 309,
+ ERR_QUEST_UNKNOWN_COMPLETE = 310,
+ ERR_QUEST_ADD_KILL_SII = 311,
+ ERR_QUEST_ADD_FOUND_SII = 312,
+ ERR_QUEST_ADD_ITEM_SII = 313,
+ ERR_QUEST_ADD_PLAYER_KILL_SII = 314,
+ ERR_CANNOTCREATEDIRECTORY = 315,
+ ERR_CANNOTCREATEFILE = 316,
+ ERR_PLAYER_WRONG_FACTION = 317,
+ ERR_PLAYER_IS_NEUTRAL = 318,
+ ERR_BANKSLOT_FAILED_TOO_MANY = 319,
+ ERR_BANKSLOT_INSUFFICIENT_FUNDS = 320,
+ ERR_BANKSLOT_NOTBANKER = 321,
+ ERR_FRIEND_DB_ERROR = 322,
+ ERR_FRIEND_LIST_FULL = 323,
+ ERR_FRIEND_ADDED_S = 324,
+ ERR_BATTLETAG_FRIEND_ADDED_S = 325,
+ ERR_FRIEND_ONLINE_SS = 326,
+ ERR_FRIEND_OFFLINE_S = 327,
+ ERR_FRIEND_NOT_FOUND = 328,
+ ERR_FRIEND_WRONG_FACTION = 329,
+ ERR_FRIEND_REMOVED_S = 330,
+ ERR_BATTLETAG_FRIEND_REMOVED_S = 331,
+ ERR_FRIEND_ERROR = 332,
+ ERR_FRIEND_ALREADY_S = 333,
+ ERR_FRIEND_SELF = 334,
+ ERR_FRIEND_DELETED = 335,
+ ERR_IGNORE_FULL = 336,
+ ERR_IGNORE_SELF = 337,
+ ERR_IGNORE_NOT_FOUND = 338,
+ ERR_IGNORE_ALREADY_S = 339,
+ ERR_IGNORE_ADDED_S = 340,
+ ERR_IGNORE_REMOVED_S = 341,
+ ERR_IGNORE_AMBIGUOUS = 342,
+ ERR_IGNORE_DELETED = 343,
+ ERR_ONLY_ONE_BOLT = 344,
+ ERR_ONLY_ONE_AMMO = 345,
+ ERR_SPELL_FAILED_EQUIPPED_SPECIFIC_ITEM = 346,
+ ERR_WRONG_BAG_TYPE_SUBCLASS = 347,
+ ERR_CANT_WRAP_STACKABLE = 348,
+ ERR_CANT_WRAP_EQUIPPED = 349,
+ ERR_CANT_WRAP_WRAPPED = 350,
+ ERR_CANT_WRAP_BOUND = 351,
+ ERR_CANT_WRAP_UNIQUE = 352,
+ ERR_CANT_WRAP_BAGS = 353,
+ ERR_OUT_OF_MANA = 354,
+ ERR_OUT_OF_RAGE = 355,
+ ERR_OUT_OF_FOCUS = 356,
+ ERR_OUT_OF_ENERGY = 357,
+ ERR_OUT_OF_CHI = 358,
+ ERR_OUT_OF_HEALTH = 359,
+ ERR_OUT_OF_RUNES = 360,
+ ERR_OUT_OF_RUNIC_POWER = 361,
+ ERR_OUT_OF_SOUL_SHARDS = 362,
+ ERR_OUT_OF_LUNAR_POWER = 363,
+ ERR_OUT_OF_HOLY_POWER = 364,
+ ERR_OUT_OF_MAELSTROM = 365,
+ ERR_OUT_OF_COMBO_POINTS = 366,
+ ERR_OUT_OF_INSANITY = 367,
+ ERR_OUT_OF_ESSENCE = 368,
+ ERR_OUT_OF_ARCANE_CHARGES = 369,
+ ERR_OUT_OF_FURY = 370,
+ ERR_OUT_OF_PAIN = 371,
+ ERR_OUT_OF_POWER_DISPLAY = 372,
+ ERR_OUT_OF_RUNE_BLOOD = 373,
+ ERR_OUT_OF_RUNE_FROST = 374,
+ ERR_OUT_OF_RUNE_UNHOLY = 375,
+ ERR_OUT_OF_ALTERNATE_QUEST = 376,
+ ERR_OUT_OF_ALTERNATE_ENCOUNTER = 377,
+ ERR_OUT_OF_ALTERNATE_MOUNT = 378,
+ ERR_OUT_OF_BALANCE = 379,
+ ERR_OUT_OF_HAPPINESS = 380,
+ ERR_OUT_OF_SHADOW_ORBS = 381,
+ ERR_OUT_OF_RUNE_CHROMATIC = 382,
+ ERR_LOOT_GONE = 383,
+ ERR_MOUNT_FORCEDDISMOUNT = 384,
+ ERR_AUTOFOLLOW_TOO_FAR = 385,
+ ERR_UNIT_NOT_FOUND = 386,
+ ERR_INVALID_FOLLOW_TARGET = 387,
+ ERR_INVALID_FOLLOW_PVP_COMBAT = 388,
+ ERR_INVALID_FOLLOW_TARGET_PVP_COMBAT = 389,
+ ERR_INVALID_INSPECT_TARGET = 390,
+ ERR_GUILDEMBLEM_SUCCESS = 391,
+ ERR_GUILDEMBLEM_INVALID_TABARD_COLORS = 392,
+ ERR_GUILDEMBLEM_NOGUILD = 393,
+ ERR_GUILDEMBLEM_NOTGUILDMASTER = 394,
+ ERR_GUILDEMBLEM_NOTENOUGHMONEY = 395,
+ ERR_GUILDEMBLEM_INVALIDVENDOR = 396,
+ ERR_EMBLEMERROR_NOTABARDGEOSET = 397,
+ ERR_SPELL_OUT_OF_RANGE = 398,
+ ERR_COMMAND_NEEDS_TARGET = 399,
+ ERR_NOAMMO_S = 400,
+ ERR_TOOBUSYTOFOLLOW = 401,
+ ERR_DUEL_REQUESTED = 402,
+ ERR_DUEL_CANCELLED = 403,
+ ERR_DEATHBINDALREADYBOUND = 404,
+ ERR_DEATHBIND_SUCCESS_S = 405,
+ ERR_NOEMOTEWHILERUNNING = 406,
+ ERR_ZONE_EXPLORED = 407,
+ ERR_ZONE_EXPLORED_XP = 408,
+ ERR_INVALID_ITEM_TARGET = 409,
+ ERR_INVALID_QUEST_TARGET = 410,
+ ERR_IGNORING_YOU_S = 411,
+ ERR_FISH_NOT_HOOKED = 412,
+ ERR_FISH_ESCAPED = 413,
+ ERR_SPELL_FAILED_NOTUNSHEATHED = 414,
+ ERR_PETITION_OFFERED_S = 415,
+ ERR_PETITION_SIGNED = 416,
+ ERR_PETITION_SIGNED_S = 417,
+ ERR_PETITION_DECLINED_S = 418,
+ ERR_PETITION_ALREADY_SIGNED = 419,
+ ERR_PETITION_RESTRICTED_ACCOUNT_TRIAL = 420,
+ ERR_PETITION_ALREADY_SIGNED_OTHER = 421,
+ ERR_PETITION_IN_GUILD = 422,
+ ERR_PETITION_CREATOR = 423,
+ ERR_PETITION_NOT_ENOUGH_SIGNATURES = 424,
+ ERR_PETITION_NOT_SAME_SERVER = 425,
+ ERR_PETITION_FULL = 426,
+ ERR_PETITION_ALREADY_SIGNED_BY_S = 427,
+ ERR_GUILD_NAME_INVALID = 428,
+ ERR_SPELL_UNLEARNED_S = 429,
+ ERR_PET_SPELL_ROOTED = 430,
+ ERR_PET_SPELL_AFFECTING_COMBAT = 431,
+ ERR_PET_SPELL_OUT_OF_RANGE = 432,
+ ERR_PET_SPELL_NOT_BEHIND = 433,
+ ERR_PET_SPELL_TARGETS_DEAD = 434,
+ ERR_PET_SPELL_DEAD = 435,
+ ERR_PET_SPELL_NOPATH = 436,
+ ERR_ITEM_CANT_BE_DESTROYED = 437,
+ ERR_TICKET_ALREADY_EXISTS = 438,
+ ERR_TICKET_CREATE_ERROR = 439,
+ ERR_TICKET_UPDATE_ERROR = 440,
+ ERR_TICKET_DB_ERROR = 441,
+ ERR_TICKET_NO_TEXT = 442,
+ ERR_TICKET_TEXT_TOO_LONG = 443,
+ ERR_OBJECT_IS_BUSY = 444,
+ ERR_EXHAUSTION_WELLRESTED = 445,
+ ERR_EXHAUSTION_RESTED = 446,
+ ERR_EXHAUSTION_NORMAL = 447,
+ ERR_EXHAUSTION_TIRED = 448,
+ ERR_EXHAUSTION_EXHAUSTED = 449,
+ ERR_NO_ITEMS_WHILE_SHAPESHIFTED = 450,
+ ERR_CANT_INTERACT_SHAPESHIFTED = 451,
+ ERR_REALM_NOT_FOUND = 452,
+ ERR_MAIL_QUEST_ITEM = 453,
+ ERR_MAIL_BOUND_ITEM = 454,
+ ERR_MAIL_CONJURED_ITEM = 455,
+ ERR_MAIL_BAG = 456,
+ ERR_MAIL_TO_SELF = 457,
+ ERR_MAIL_TARGET_NOT_FOUND = 458,
+ ERR_MAIL_DATABASE_ERROR = 459,
+ ERR_MAIL_DELETE_ITEM_ERROR = 460,
+ ERR_MAIL_WRAPPED_COD = 461,
+ ERR_MAIL_CANT_SEND_REALM = 462,
+ ERR_MAIL_TEMP_RETURN_OUTAGE = 463,
+ ERR_MAIL_RECEPIENT_CANT_RECEIVE_MAIL = 464,
+ ERR_MAIL_SENT = 465,
+ ERR_MAIL_TARGET_IS_TRIAL = 466,
+ ERR_NOT_HAPPY_ENOUGH = 467,
+ ERR_USE_CANT_IMMUNE = 468,
+ ERR_CANT_BE_DISENCHANTED = 469,
+ ERR_CANT_USE_DISARMED = 470,
+ ERR_AUCTION_DATABASE_ERROR = 471,
+ ERR_AUCTION_HIGHER_BID = 472,
+ ERR_AUCTION_ALREADY_BID = 473,
+ ERR_AUCTION_OUTBID_S = 474,
+ ERR_AUCTION_WON_S = 475,
+ ERR_AUCTION_REMOVED_S = 476,
+ ERR_AUCTION_BID_PLACED = 477,
+ ERR_LOGOUT_FAILED = 478,
+ ERR_QUEST_PUSH_SUCCESS_S = 479,
+ ERR_QUEST_PUSH_INVALID_S = 480,
+ ERR_QUEST_PUSH_INVALID_TO_RECIPIENT_S = 481,
+ ERR_QUEST_PUSH_ACCEPTED_S = 482,
+ ERR_QUEST_PUSH_DECLINED_S = 483,
+ ERR_QUEST_PUSH_BUSY_S = 484,
+ ERR_QUEST_PUSH_DEAD_S = 485,
+ ERR_QUEST_PUSH_DEAD_TO_RECIPIENT_S = 486,
+ ERR_QUEST_PUSH_LOG_FULL_S = 487,
+ ERR_QUEST_PUSH_LOG_FULL_TO_RECIPIENT_S = 488,
+ ERR_QUEST_PUSH_ONQUEST_S = 489,
+ ERR_QUEST_PUSH_ONQUEST_TO_RECIPIENT_S = 490,
+ ERR_QUEST_PUSH_ALREADY_DONE_S = 491,
+ ERR_QUEST_PUSH_ALREADY_DONE_TO_RECIPIENT_S = 492,
+ ERR_QUEST_PUSH_NOT_DAILY_S = 493,
+ ERR_QUEST_PUSH_TIMER_EXPIRED_S = 494,
+ ERR_QUEST_PUSH_NOT_IN_PARTY_S = 495,
+ ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S = 496,
+ ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_TO_RECIPIENT_S = 497,
+ ERR_QUEST_PUSH_NOT_ALLOWED_S = 498,
+ ERR_QUEST_PUSH_PREREQUISITE_S = 499,
+ ERR_QUEST_PUSH_PREREQUISITE_TO_RECIPIENT_S = 500,
+ ERR_QUEST_PUSH_LOW_LEVEL_S = 501,
+ ERR_QUEST_PUSH_LOW_LEVEL_TO_RECIPIENT_S = 502,
+ ERR_QUEST_PUSH_HIGH_LEVEL_S = 503,
+ ERR_QUEST_PUSH_HIGH_LEVEL_TO_RECIPIENT_S = 504,
+ ERR_QUEST_PUSH_CLASS_S = 505,
+ ERR_QUEST_PUSH_CLASS_TO_RECIPIENT_S = 506,
+ ERR_QUEST_PUSH_RACE_S = 507,
+ ERR_QUEST_PUSH_RACE_TO_RECIPIENT_S = 508,
+ ERR_QUEST_PUSH_LOW_FACTION_S = 509,
+ ERR_QUEST_PUSH_LOW_FACTION_TO_RECIPIENT_S = 510,
+ ERR_QUEST_PUSH_HIGH_FACTION_S = 511,
+ ERR_QUEST_PUSH_HIGH_FACTION_TO_RECIPIENT_S = 512,
+ ERR_QUEST_PUSH_EXPANSION_S = 513,
+ ERR_QUEST_PUSH_EXPANSION_TO_RECIPIENT_S = 514,
+ ERR_QUEST_PUSH_NOT_GARRISON_OWNER_S = 515,
+ ERR_QUEST_PUSH_NOT_GARRISON_OWNER_TO_RECIPIENT_S = 516,
+ ERR_QUEST_PUSH_WRONG_COVENANT_S = 517,
+ ERR_QUEST_PUSH_WRONG_COVENANT_TO_RECIPIENT_S = 518,
+ ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_S = 519,
+ ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_TO_RECIPIENT_S = 520,
+ ERR_QUEST_PUSH_WRONG_FACTION_S = 521,
+ ERR_QUEST_PUSH_WRONG_FACTION_TO_RECIPIENT_S = 522,
+ ERR_QUEST_PUSH_CROSS_FACTION_RESTRICTED_S = 523,
+ ERR_RAID_GROUP_LOWLEVEL = 524,
+ ERR_RAID_GROUP_ONLY = 525,
+ ERR_RAID_GROUP_FULL = 526,
+ ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 527,
+ ERR_CORPSE_IS_NOT_IN_INSTANCE = 528,
+ ERR_PVP_KILL_HONORABLE = 529,
+ ERR_PVP_KILL_DISHONORABLE = 530,
+ ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 531,
+ ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 532,
+ ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 533,
+ ERR_AUTOLOOT_MONEY_S = 534,
+ ERR_GENERIC_STUNNED = 535,
+ ERR_GENERIC_THROTTLE = 536,
+ ERR_CLUB_FINDER_SEARCHING_TOO_FAST = 537,
+ ERR_TARGET_STUNNED = 538,
+ ERR_MUST_REPAIR_DURABILITY = 539,
+ ERR_RAID_YOU_JOINED = 540,
+ ERR_RAID_YOU_LEFT = 541,
+ ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 542,
+ ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 543,
+ ERR_RAID_MEMBER_ADDED_S = 544,
+ ERR_RAID_MEMBER_REMOVED_S = 545,
+ ERR_INSTANCE_GROUP_ADDED_S = 546,
+ ERR_INSTANCE_GROUP_REMOVED_S = 547,
+ ERR_CLICK_ON_ITEM_TO_FEED = 548,
+ ERR_TOO_MANY_CHAT_CHANNELS = 549,
+ ERR_LOOT_ROLL_PENDING = 550,
+ ERR_LOOT_PLAYER_NOT_FOUND = 551,
+ ERR_NOT_IN_RAID = 552,
+ ERR_LOGGING_OUT = 553,
+ ERR_TARGET_LOGGING_OUT = 554,
+ ERR_NOT_WHILE_MOUNTED = 555,
+ ERR_NOT_WHILE_SHAPESHIFTED = 556,
+ ERR_NOT_IN_COMBAT = 557,
+ ERR_NOT_WHILE_DISARMED = 558,
+ ERR_PET_BROKEN = 559,
+ ERR_TALENT_WIPE_ERROR = 560,
+ ERR_SPEC_WIPE_ERROR = 561,
+ ERR_GLYPH_WIPE_ERROR = 562,
+ ERR_PET_SPEC_WIPE_ERROR = 563,
+ ERR_FEIGN_DEATH_RESISTED = 564,
+ ERR_MEETING_STONE_IN_QUEUE_S = 565,
+ ERR_MEETING_STONE_LEFT_QUEUE_S = 566,
+ ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 567,
+ ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 568,
+ ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 569,
+ ERR_MEETING_STONE_SUCCESS = 570,
+ ERR_MEETING_STONE_IN_PROGRESS = 571,
+ ERR_MEETING_STONE_MEMBER_ADDED_S = 572,
+ ERR_MEETING_STONE_GROUP_FULL = 573,
+ ERR_MEETING_STONE_NOT_LEADER = 574,
+ ERR_MEETING_STONE_INVALID_LEVEL = 575,
+ ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 576,
+ ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 577,
+ ERR_MEETING_STONE_MUST_BE_LEADER = 578,
+ ERR_MEETING_STONE_NO_RAID_GROUP = 579,
+ ERR_MEETING_STONE_NEED_PARTY = 580,
+ ERR_MEETING_STONE_NOT_FOUND = 581,
+ ERR_MEETING_STONE_TARGET_IN_VEHICLE = 582,
+ ERR_GUILDEMBLEM_SAME = 583,
+ ERR_EQUIP_TRADE_ITEM = 584,
+ ERR_PVP_TOGGLE_ON = 585,
+ ERR_PVP_TOGGLE_OFF = 586,
+ ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 587,
+ ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 588,
+ ERR_GROUP_JOIN_BATTLEGROUND_S = 589,
+ ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 590,
+ ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 591,
+ ERR_SOLO_JOIN_BATTLEGROUND_S = 592,
+ ERR_JOIN_SINGLE_SCENARIO_S = 593,
+ ERR_BATTLEGROUND_TOO_MANY_QUEUES = 594,
+ ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 595,
+ ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 596,
+ ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 597,
+ ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 598,
+ ERR_ALREADY_IN_ARENA_TEAM_S = 599,
+ ERR_INVALID_PROMOTION_CODE = 600,
+ ERR_BG_PLAYER_JOINED_SS = 601,
+ ERR_BG_PLAYER_LEFT_S = 602,
+ ERR_RESTRICTED_ACCOUNT = 603,
+ ERR_RESTRICTED_ACCOUNT_TRIAL = 604,
+ ERR_NOT_ENOUGH_PURCHASED_GAME_TIME = 605,
+ ERR_PLAY_TIME_EXCEEDED = 606,
+ ERR_APPROACHING_PARTIAL_PLAY_TIME = 607,
+ ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 608,
+ ERR_APPROACHING_NO_PLAY_TIME = 609,
+ ERR_APPROACHING_NO_PLAY_TIME_2 = 610,
+ ERR_UNHEALTHY_TIME = 611,
+ ERR_CHAT_RESTRICTED_TRIAL = 612,
+ ERR_CHAT_THROTTLED = 613,
+ ERR_MAIL_REACHED_CAP = 614,
+ ERR_INVALID_RAID_TARGET = 615,
+ ERR_RAID_LEADER_READY_CHECK_START_S = 616,
+ ERR_READY_CHECK_IN_PROGRESS = 617,
+ ERR_READY_CHECK_THROTTLED = 618,
+ ERR_VOTE_TO_ABANDON_NOT_YET = 619,
+ ERR_DUNGEON_DIFFICULTY_FAILED = 620,
+ ERR_DUNGEON_DIFFICULTY_CHANGED_S = 621,
+ ERR_TRADE_WRONG_REALM = 622,
+ ERR_TRADE_NOT_ON_TAPLIST = 623,
+ ERR_CHAT_PLAYER_AMBIGUOUS_S = 624,
+ ERR_LOOT_CANT_LOOT_THAT_NOW = 625,
+ ERR_LOOT_MASTER_INV_FULL = 626,
+ ERR_LOOT_MASTER_UNIQUE_ITEM = 627,
+ ERR_LOOT_MASTER_OTHER = 628,
+ ERR_FILTERING_YOU_S = 629,
+ ERR_USE_PREVENTED_BY_MECHANIC_S = 630,
+ ERR_ITEM_UNIQUE_EQUIPPABLE = 631,
+ ERR_LFG_LEADER_IS_LFM_S = 632,
+ ERR_LFG_PENDING = 633,
+ ERR_CANT_SPEAK_LANGAGE = 634,
+ ERR_VENDOR_MISSING_TURNINS = 635,
+ ERR_BATTLEGROUND_NOT_IN_TEAM = 636,
+ ERR_NOT_IN_BATTLEGROUND = 637,
+ ERR_NOT_ENOUGH_HONOR_POINTS = 638,
+ ERR_NOT_ENOUGH_ARENA_POINTS = 639,
+ ERR_SOCKETING_REQUIRES_META_GEM = 640,
+ ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 641,
+ ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 642,
+ ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 643,
+ ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 644,
+ ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 645,
+ ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 646,
+ ERR_ITEM_MAX_COUNT_SOCKETED = 647,
+ ERR_SYSTEM_DISABLED = 648,
+ ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 649,
+ ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 650,
+ ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 651,
+ ERR_USER_SQUELCHED = 652,
+ ERR_ACCOUNT_SILENCED = 653,
+ ERR_PARTY_MEMBER_SILENCED = 654,
+ ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 655,
+ ERR_TOO_MUCH_GOLD = 656,
+ ERR_NOT_BARBER_SITTING = 657,
+ ERR_QUEST_FAILED_CAIS = 658,
+ ERR_INVITE_RESTRICTED_TRIAL = 659,
+ ERR_VOICE_IGNORE_FULL = 660,
+ ERR_VOICE_IGNORE_SELF = 661,
+ ERR_VOICE_IGNORE_NOT_FOUND = 662,
+ ERR_VOICE_IGNORE_ALREADY_S = 663,
+ ERR_VOICE_IGNORE_ADDED_S = 664,
+ ERR_VOICE_IGNORE_REMOVED_S = 665,
+ ERR_VOICE_IGNORE_AMBIGUOUS = 666,
+ ERR_VOICE_IGNORE_DELETED = 667,
+ ERR_UNKNOWN_MACRO_OPTION_S = 668,
+ ERR_NOT_DURING_ARENA_MATCH = 669,
+ ERR_NOT_IN_RATED_BATTLEGROUND = 670,
+ ERR_PLAYER_SILENCED = 671,
+ ERR_PLAYER_UNSILENCED = 672,
+ ERR_COMSAT_DISCONNECT = 673,
+ ERR_COMSAT_RECONNECT_ATTEMPT = 674,
+ ERR_COMSAT_CONNECT_FAIL = 675,
+ ERR_MAIL_INVALID_ATTACHMENT_SLOT = 676,
+ ERR_MAIL_TOO_MANY_ATTACHMENTS = 677,
+ ERR_MAIL_INVALID_ATTACHMENT = 678,
+ ERR_MAIL_ATTACHMENT_EXPIRED = 679,
+ ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 680,
+ ERR_PROFANE_CHAT_NAME = 681,
+ ERR_PLAYER_SILENCED_ECHO = 682,
+ ERR_PLAYER_UNSILENCED_ECHO = 683,
+ ERR_LOOT_CANT_LOOT_THAT = 684,
+ ERR_ARENA_EXPIRED_CAIS = 685,
+ ERR_GROUP_ACTION_THROTTLED = 686,
+ ERR_ALREADY_PICKPOCKETED = 687,
+ ERR_NAME_INVALID = 688,
+ ERR_NAME_NO_NAME = 689,
+ ERR_NAME_TOO_SHORT = 690,
+ ERR_NAME_TOO_LONG = 691,
+ ERR_NAME_MIXED_LANGUAGES = 692,
+ ERR_NAME_PROFANE = 693,
+ ERR_NAME_RESERVED = 694,
+ ERR_NAME_THREE_CONSECUTIVE = 695,
+ ERR_NAME_INVALID_SPACE = 696,
+ ERR_NAME_CONSECUTIVE_SPACES = 697,
+ ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 698,
+ ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 699,
+ ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 700,
+ ERR_RECRUIT_A_FRIEND_NOT_LINKED = 701,
+ ERR_RECRUIT_A_FRIEND_NOT_NOW = 702,
+ ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 703,
+ ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 704,
+ ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 705,
+ ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 706,
+ ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 707,
+ ERR_NOT_SAME_ACCOUNT = 708,
+ ERR_BAD_ON_USE_ENCHANT = 709,
+ ERR_TRADE_SELF = 710,
+ ERR_TOO_MANY_SOCKETS = 711,
+ ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 712,
+ ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 713,
+ ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 714,
+ ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 715,
+ ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 716,
+ ERR_ITEM_INVENTORY_FULL_SATCHEL = 717,
+ ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 718,
+ ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 719,
+ ERR_PURCHASE_LEVEL_TOO_LOW = 720,
+ ERR_GROUP_SWAP_FAILED = 721,
+ ERR_INVITE_IN_COMBAT = 722,
+ ERR_INVALID_GLYPH_SLOT = 723,
+ ERR_GENERIC_NO_VALID_TARGETS = 724,
+ ERR_CALENDAR_EVENT_ALERT_S = 725,
+ ERR_PET_LEARN_SPELL_S = 726,
+ ERR_PET_LEARN_ABILITY_S = 727,
+ ERR_PET_SPELL_UNLEARNED_S = 728,
+ ERR_INVITE_UNKNOWN_REALM = 729,
+ ERR_INVITE_NO_PARTY_SERVER = 730,
+ ERR_INVITE_PARTY_BUSY = 731,
+ ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 732,
+ ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 733,
+ ERR_PARTY_TARGET_AMBIGUOUS = 734,
+ ERR_PARTY_LFG_INVITE_RAID_LOCKED = 735,
+ ERR_PARTY_LFG_BOOT_LIMIT = 736,
+ ERR_PARTY_LFG_BOOT_COOLDOWN_S = 737,
+ ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 738,
+ ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 739,
+ ERR_PARTY_LFG_BOOT_IN_PROGRESS = 740,
+ ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 741,
+ ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 742,
+ ERR_PARTY_LFG_BOOT_VOTE_FAILED = 743,
+ ERR_PARTY_LFG_BOOT_DISALLOWED_BY_MAP = 744,
+ ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 745,
+ ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 746,
+ ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 747,
+ ERR_PARTY_PRIVATE_GROUP_ONLY = 748,
+ ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 749,
+ ERR_PARTY_TIME_RUNNING_SEASON_ID_MUST_MATCH = 750,
+ ERR_RAID_DISALLOWED_BY_LEVEL = 751,
+ ERR_RAID_DISALLOWED_BY_CROSS_REALM = 752,
+ ERR_PARTY_ROLE_NOT_AVAILABLE = 753,
+ ERR_JOIN_LFG_OBJECT_FAILED = 754,
+ ERR_LFG_REMOVED_LEVELUP = 755,
+ ERR_LFG_REMOVED_XP_TOGGLE = 756,
+ ERR_LFG_REMOVED_FACTION_CHANGE = 757,
+ ERR_BATTLEGROUND_INFO_THROTTLED = 758,
+ ERR_BATTLEGROUND_ALREADY_IN = 759,
+ ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 760,
+ ERR_ARENA_TEAM_PERMISSIONS = 761,
+ ERR_NOT_WHILE_FALLING = 762,
+ ERR_NOT_WHILE_MOVING = 763,
+ ERR_NOT_WHILE_FATIGUED = 764,
+ ERR_MAX_SOCKETS = 765,
+ ERR_MULTI_CAST_ACTION_TOTEM_S = 766,
+ ERR_BATTLEGROUND_JOIN_LEVELUP = 767,
+ ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 768,
+ ERR_BATTLEGROUND_JOIN_XP_GAIN = 769,
+ ERR_BATTLEGROUND_JOIN_MERCENARY = 770,
+ ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 771,
+ ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 772,
+ ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 773,
+ ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 774,
+ ERR_RAID_DIFFICULTY_FAILED = 775,
+ ERR_RAID_DIFFICULTY_CHANGED_S = 776,
+ ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 777,
+ ERR_RAID_LOCKOUT_CHANGED_S = 778,
+ ERR_RAID_CONVERTED_TO_PARTY = 779,
+ ERR_PARTY_CONVERTED_TO_RAID = 780,
+ ERR_PLAYER_DIFFICULTY_CHANGED_S = 781,
+ ERR_GMRESPONSE_DB_ERROR = 782,
+ ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 783,
+ ERR_ARENA_JOIN_RANGE_INDEX = 784,
+ ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 785,
+ ERR_BATTLEGROUND_JOIN_FAILED = 786,
+ ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 787,
+ ERR_BATTLEGROUND_JOIN_RESPEC = 788,
+ ERR_BATTLEGROUND_INVITATION_DECLINED = 789,
+ ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 790,
+ ERR_BATTLEGROUND_JOIN_TIMED_OUT = 791,
+ ERR_BATTLEGROUND_DUPE_QUEUE = 792,
+ ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 793,
+ ERR_IN_BATTLEGROUND_RESPEC = 794,
+ ERR_MAIL_LIMITED_DURATION_ITEM = 795,
+ ERR_YELL_RESTRICTED_TRIAL = 796,
+ ERR_CHAT_RAID_RESTRICTED_TRIAL = 797,
+ ERR_LFG_ROLE_CHECK_FAILED = 798,
+ ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 799,
+ ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 800,
+ ERR_LFG_READY_CHECK_FAILED = 801,
+ ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 802,
+ ERR_LFG_GROUP_FULL = 803,
+ ERR_LFG_NO_LFG_OBJECT = 804,
+ ERR_LFG_NO_SLOTS_PLAYER = 805,
+ ERR_LFG_NO_SLOTS_PARTY = 806,
+ ERR_LFG_NO_SPEC = 807,
+ ERR_LFG_MISMATCHED_SLOTS = 808,
+ ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 809,
+ ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 810,
+ ERR_LFG_MEMBERS_NOT_PRESENT = 811,
+ ERR_LFG_GET_INFO_TIMEOUT = 812,
+ ERR_LFG_INVALID_SLOT = 813,
+ ERR_LFG_DESERTER_PLAYER = 814,
+ ERR_LFG_DESERTER_PARTY = 815,
+ ERR_LFG_DEAD = 816,
+ ERR_LFG_RANDOM_COOLDOWN_PLAYER = 817,
+ ERR_LFG_RANDOM_COOLDOWN_PARTY = 818,
+ ERR_LFG_TOO_MANY_MEMBERS = 819,
+ ERR_LFG_TOO_FEW_MEMBERS = 820,
+ ERR_LFG_PROPOSAL_FAILED = 821,
+ ERR_LFG_PROPOSAL_DECLINED_SELF = 822,
+ ERR_LFG_PROPOSAL_DECLINED_PARTY = 823,
+ ERR_LFG_NO_SLOTS_SELECTED = 824,
+ ERR_LFG_NO_ROLES_SELECTED = 825,
+ ERR_LFG_ROLE_CHECK_INITIATED = 826,
+ ERR_LFG_READY_CHECK_INITIATED = 827,
+ ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 828,
+ ERR_LFG_PLAYER_DECLINED_READY_CHECK = 829,
+ ERR_LFG_LOREWALKING = 830,
+ ERR_LFG_JOINED_QUEUE = 831,
+ ERR_LFG_JOINED_FLEX_QUEUE = 832,
+ ERR_LFG_JOINED_RF_QUEUE = 833,
+ ERR_LFG_JOINED_SCENARIO_QUEUE = 834,
+ ERR_LFG_JOINED_WORLD_PVP_QUEUE = 835,
+ ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 836,
+ ERR_LFG_JOINED_LIST = 837,
+ ERR_QUEUED_PLUNDERSTORM = 838,
+ ERR_LFG_LEFT_QUEUE = 839,
+ ERR_LFG_LEFT_LIST = 840,
+ ERR_LFG_ROLE_CHECK_ABORTED = 841,
+ ERR_LFG_READY_CHECK_ABORTED = 842,
+ ERR_LFG_CANT_USE_BATTLEGROUND = 843,
+ ERR_LFG_CANT_USE_DUNGEONS = 844,
+ ERR_LFG_REASON_TOO_MANY_LFG = 845,
+ ERR_LFG_FARM_LIMIT = 846,
+ ERR_LFG_NO_CROSS_FACTION_PARTIES = 847,
+ ERR_INVALID_TELEPORT_LOCATION = 848,
+ ERR_TOO_FAR_TO_INTERACT = 849,
+ ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 850,
+ ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 851,
+ ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 852,
+ ERR_DIFFICULTY_CHANGE_WORLDSTATE = 853,
+ ERR_DIFFICULTY_CHANGE_ENCOUNTER = 854,
+ ERR_DIFFICULTY_CHANGE_COMBAT = 855,
+ ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 856,
+ ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 857,
+ ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 858,
+ ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 859,
+ ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 860,
+ ERR_ARENA_TEAM_PARTY_SIZE = 861,
+ ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 862,
+ ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 863,
+ ERR_SOLO_RBG_WARGAME_GROUP_SIZE = 864,
+ ERR_SOLO_RBG_WARGAME_GROUP_COMP = 865,
+ ERR_SOLO_MIN_ITEM_LEVEL = 866,
+ ERR_PVP_PLAYER_ABANDONED = 867,
+ ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 868,
+ ERR_QUEST_FORCE_REMOVED_S = 869,
+ ERR_ATTACK_NO_ACTIONS = 870,
+ ERR_IN_RANDOM_BG = 871,
+ ERR_IN_NON_RANDOM_BG = 872,
+ ERR_BN_FRIEND_SELF = 873,
+ ERR_BN_FRIEND_ALREADY = 874,
+ ERR_BN_FRIEND_BLOCKED = 875,
+ ERR_BN_FRIEND_LIST_FULL = 876,
+ ERR_BN_FRIEND_REQUEST_SENT = 877,
+ ERR_BN_BROADCAST_THROTTLE = 878,
+ ERR_BG_DEVELOPER_ONLY = 879,
+ ERR_CURRENCY_SPELL_SLOT_MISMATCH = 880,
+ ERR_CURRENCY_NOT_TRADABLE = 881,
+ ERR_REQUIRES_EXPANSION_S = 882,
+ ERR_QUEST_FAILED_SPELL = 883,
+ ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 884,
+ ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 885,
+ ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 886,
+ ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 887,
+ ERR_TALENT_FAILED_UNKNOWN = 888,
+ ERR_TALENT_FAILED_IN_COMBAT = 889,
+ ERR_TALENT_FAILED_IN_PVP_MATCH = 890,
+ ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 891,
+ ERR_WARGAME_REQUEST_FAILURE = 892,
+ ERR_RANK_REQUIRES_AUTHENTICATOR = 893,
+ ERR_GUILD_BANK_VOUCHER_FAILED = 894,
+ ERR_WARGAME_REQUEST_SENT = 895,
+ ERR_REQUIRES_ACHIEVEMENT_I = 896,
+ ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 897,
+ ERR_CANT_BUY_QUANTITY = 898,
+ ERR_ITEM_IS_BATTLE_PAY_LOCKED = 899,
+ ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 900,
+ ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 901,
+ ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 902,
+ ERR_INSUFF_TRACKED_CURRENCY_IS = 903,
+ ERR_NOT_ON_TOURNAMENT_REALM = 904,
+ ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 905,
+ ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 906,
+ ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 907,
+ ERR_CANT_DO_THAT_IN_A_GROUP = 908,
+ ERR_GUILD_LEADER_REPLACED = 909,
+ ERR_TRANSMOGRIFY_CANT_EQUIP = 910,
+ ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 911,
+ ERR_TRANSMOGRIFY_NOT_SOULBOUND = 912,
+ ERR_TRANSMOGRIFY_INVALID_SOURCE = 913,
+ ERR_TRANSMOGRIFY_INVALID_DESTINATION = 914,
+ ERR_TRANSMOGRIFY_MISMATCH = 915,
+ ERR_TRANSMOGRIFY_LEGENDARY = 916,
+ ERR_TRANSMOGRIFY_SAME_ITEM = 917,
+ ERR_TRANSMOGRIFY_SAME_APPEARANCE = 918,
+ ERR_TRANSMOGRIFY_NOT_EQUIPPED = 919,
+ ERR_VOID_DEPOSIT_FULL = 920,
+ ERR_VOID_WITHDRAW_FULL = 921,
+ ERR_VOID_STORAGE_WRAPPED = 922,
+ ERR_VOID_STORAGE_STACKABLE = 923,
+ ERR_VOID_STORAGE_UNBOUND = 924,
+ ERR_VOID_STORAGE_REPAIR = 925,
+ ERR_VOID_STORAGE_CHARGES = 926,
+ ERR_VOID_STORAGE_QUEST = 927,
+ ERR_VOID_STORAGE_CONJURED = 928,
+ ERR_VOID_STORAGE_MAIL = 929,
+ ERR_VOID_STORAGE_BAG = 930,
+ ERR_VOID_TRANSFER_STORAGE_FULL = 931,
+ ERR_VOID_TRANSFER_INV_FULL = 932,
+ ERR_VOID_TRANSFER_INTERNAL_ERROR = 933,
+ ERR_VOID_TRANSFER_ITEM_INVALID = 934,
+ ERR_DIFFICULTY_DISABLED_IN_LFG = 935,
+ ERR_VOID_STORAGE_UNIQUE = 936,
+ ERR_VOID_STORAGE_LOOT = 937,
+ ERR_VOID_STORAGE_HOLIDAY = 938,
+ ERR_VOID_STORAGE_DURATION = 939,
+ ERR_VOID_STORAGE_LOAD_FAILED = 940,
+ ERR_VOID_STORAGE_INVALID_ITEM = 941,
+ ERR_VOID_STORAGE_ACCOUNT_ITEM = 942,
+ ERR_PARENTAL_CONTROLS_CHAT_MUTED = 943,
+ ERR_SOR_START_EXPERIENCE_INCOMPLETE = 944,
+ ERR_SOR_INVALID_EMAIL = 945,
+ ERR_SOR_INVALID_COMMENT = 946,
+ ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 947,
+ ERR_CHALLENGE_MODE_RESET_KEYSTONE = 948,
+ ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 949,
+ ERR_REPORT_SUBMITTED_SUCCESSFULLY = 950,
+ ERR_REPORT_SUBMISSION_FAILED = 951,
+ ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 952,
+ ERR_BUG_SUBMITTED_SUCCESSFULLY = 953,
+ ERR_CHALLENGE_MODE_ENABLED = 954,
+ ERR_CHALLENGE_MODE_DISABLED = 955,
+ ERR_PETBATTLE_CREATE_FAILED = 956,
+ ERR_PETBATTLE_NOT_HERE = 957,
+ ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 958,
+ ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 959,
+ ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 960,
+ ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 961,
+ ERR_PETBATTLE_NOT_WHILE_DEAD = 962,
+ ERR_PETBATTLE_NOT_WHILE_FLYING = 963,
+ ERR_PETBATTLE_TARGET_INVALID = 964,
+ ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 965,
+ ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 966,
+ ERR_PETBATTLE_NOT_A_TRAINER = 967,
+ ERR_PETBATTLE_DECLINED = 968,
+ ERR_PETBATTLE_IN_BATTLE = 969,
+ ERR_PETBATTLE_INVALID_LOADOUT = 970,
+ ERR_PETBATTLE_ALL_PETS_DEAD = 971,
+ ERR_PETBATTLE_NO_PETS_IN_SLOTS = 972,
+ ERR_PETBATTLE_NO_ACCOUNT_LOCK = 973,
+ ERR_PETBATTLE_WILD_PET_TAPPED = 974,
+ ERR_PETBATTLE_RESTRICTED_ACCOUNT = 975,
+ ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 976,
+ ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 977,
+ ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 978,
+ ERR_CANT_HAVE_MORE_PETS = 979,
+ ERR_PVP_MAP_NOT_FOUND = 980,
+ ERR_PVP_MAP_NOT_SET = 981,
+ ERR_PETBATTLE_QUEUE_QUEUED = 982,
+ ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 983,
+ ERR_PETBATTLE_QUEUE_JOIN_FAILED = 984,
+ ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 985,
+ ERR_PETBATTLE_QUEUE_REMOVED = 986,
+ ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 987,
+ ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 988,
+ ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 989,
+ ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 990,
+ ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 991,
+ ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 992,
+ ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 993,
+ ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 994,
+ ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 995,
+ ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 996,
+ ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 997,
+ ERR_PETBATTLE_QUEUE_SLOT_DEAD = 998,
+ ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 999,
+ ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 1000,
+ ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 1001,
+ ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 1002,
+ ERR_HAS_RESTRICTION = 1003,
+ ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 1004,
+ ERR_ITEM_UPGRADE_NO_PATH = 1005,
+ ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 1006,
+ ERR_BONUS_ROLL_EMPTY = 1007,
+ ERR_CHALLENGE_MODE_FULL = 1008,
+ ERR_CHALLENGE_MODE_IN_PROGRESS = 1009,
+ ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 1010,
+ ERR_START_RESTRICTED_CHALLENGE_MODE = 1011,
+ ERR_BATTLETAG_FRIEND_NOT_FOUND = 1012,
+ ERR_BATTLETAG_FRIEND_NOT_VALID = 1013,
+ ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 1014,
+ ERR_BATTLETAG_FRIEND_THROTTLED = 1015,
+ ERR_BATTLETAG_FRIEND_SUCCESS = 1016,
+ ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 1017,
+ ERR_PETBATTLE_INTERNAL = 1018,
+ ERR_CANT_CAGE_PET_YET = 1019,
+ ERR_NO_LOOT_IN_CHALLENGE_MODE = 1020,
+ ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 1021,
+ ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 1022,
+ ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 1023,
+ ERR_RECRUIT_A_FRIEND_FAILED = 1024,
+ ERR_SET_LOOT_PERSONAL = 1025,
+ ERR_SET_LOOT_METHOD_FAILED_COMBAT = 1026,
+ ERR_REAGENT_BANK_FULL = 1027,
+ ERR_REAGENT_BANK_LOCKED = 1028,
+ ERR_GARRISON_BUILDING_EXISTS = 1029,
+ ERR_GARRISON_INVALID_PLOT = 1030,
+ ERR_GARRISON_INVALID_BUILDINGID = 1031,
+ ERR_GARRISON_INVALID_PLOT_BUILDING = 1032,
+ ERR_GARRISON_REQUIRES_BLUEPRINT = 1033,
+ ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1034,
+ ERR_GARRISON_NOT_ENOUGH_GOLD = 1035,
+ ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1036,
+ ERR_ALREADY_USING_LFG_LIST = 1037,
+ ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1038,
+ ERR_TOY_USE_LIMIT_REACHED = 1039,
+ ERR_TOY_ALREADY_KNOWN = 1040,
+ ERR_TRANSMOG_SET_ALREADY_KNOWN = 1041,
+ ERR_NOT_ENOUGH_CURRENCY = 1042,
+ ERR_SPEC_IS_DISABLED = 1043,
+ ERR_FEATURE_RESTRICTED_TRIAL = 1044,
+ ERR_CANT_BE_OBLITERATED = 1045,
+ ERR_CANT_BE_SCRAPPED = 1046,
+ ERR_CANT_BE_RECRAFTED = 1047,
+ ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1048,
+ ERR_MUST_EQUIP_ARTIFACT = 1049,
+ ERR_CANT_DO_THAT_RIGHT_NOW = 1050,
+ ERR_AFFECTING_COMBAT = 1051,
+ ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1052,
+ ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1053,
+ ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1054,
+ ERR_MOVIE_RECORDING_WARNING_PERF = 1055,
+ ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1056,
+ ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1057,
+ ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1058,
+ ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1059,
+ ERR_NO_CHALLENGE_MODE_REWARD = 1060,
+ ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1061,
+ ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1062,
+ ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1063,
+ ERR_TALENT_FAILED_REST_AREA = 1064,
+ ERR_CANNOT_ABANDON_LAST_PET = 1065,
+ ERR_TEST_CVAR_SET_SSS = 1066,
+ ERR_QUEST_TURN_IN_FAIL_REASON = 1067,
+ ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1068,
+ ERR_TALENT_GRANTED_BY_AURA = 1069,
+ ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1070,
+ ERR_GLYPH_TARGET_NOT_AVAILABLE = 1071,
+ ERR_PVP_WARMODE_TOGGLE_ON = 1072,
+ ERR_PVP_WARMODE_TOGGLE_OFF = 1073,
+ ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1074,
+ ERR_SPELL_FAILED_CANT_FLY_HERE = 1075,
+ ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1076,
+ ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1077,
+ ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1078,
+ ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1079,
+ ERR_VOICE_CHAT_SERVICE_LOST = 1080,
+ ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1081,
+ ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1082,
+ ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1083,
+ ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1084,
+ ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1085,
+ ERR_VOICE_CHAT_PLAYER_SILENCED = 1086,
+ ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1087,
+ ERR_VOICE_CHAT_DISABLED = 1088,
+ ERR_NO_PVP_REWARD = 1089,
+ ERR_CLAIMED_PVP_REWARD = 1090,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1091,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1092,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1093,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1094,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1095,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1096,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1097,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1098,
+ ERR_SOCKETING_GENERIC_FAILURE = 1099,
+ ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1100,
+ ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1101,
+ ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1102,
+ ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1103,
+ ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1104,
+ ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1105,
+ ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1106,
+ ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1107,
+ ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1108,
+ ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1109,
+ ERR_SOCKETING_REQUIRES_TINKER_GEM = 1110,
+ ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1111,
+ ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1112,
+ ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1113,
+ ERR_SOCKETING_REQUIRES_FRAGRANCE_GEM = 1114,
+ ERR_SOCKETING_FRAGRANCE_GEM_ONLY_IN_FRAGRANCESLOT = 1115,
+ ERR_SOCKETING_REQUIRES_SINGING_THUNDER_GEM = 1116,
+ ERR_SOCKETING_SINGINGTHUNDER_GEM_ONLY_IN_SINGINGTHUNDERSLOT = 1117,
+ ERR_SOCKETING_REQUIRES_SINGING_SEA_GEM = 1118,
+ ERR_SOCKETING_SINGINGSEA_GEM_ONLY_IN_SINGINGSEASLOT = 1119,
+ ERR_SOCKETING_REQUIRES_SINGING_WIND_GEM = 1120,
+ ERR_SOCKETING_SINGINGWIND_GEM_ONLY_IN_SINGINGWINDSLOT = 1121,
+ ERR_SOCKETING_REQUIRES_FIBER_GEM = 1122,
+ ERR_SOCKETING_FIBER_GEM_ONLY_IN_FIBERSLOT = 1123,
+ ERR_LEVEL_LINKING_RESULT_LINKED = 1124,
+ ERR_LEVEL_LINKING_RESULT_UNLINKED = 1125,
+ ERR_CLUB_FINDER_ERROR_POST_CLUB = 1126,
+ ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1127,
+ ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1128,
+ ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1129,
+ ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1130,
+ ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1131,
+ ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1132,
+ ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1133,
+ ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1134,
+ ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1135,
+ ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1136,
+ ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1137,
+ ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1138,
+ ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1139,
+ ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1140,
+ ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1141,
+ ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1142,
+ ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1143,
+ ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1144,
+ ERR_SOULBIND_INVALID_CONDUIT = 1145,
+ ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1146,
+ ERR_SOULBIND_INVALID_TALENT = 1147,
+ ERR_SOULBIND_DUPLICATE_CONDUIT = 1148,
+ ERR_ACTIVATE_SOULBIND_S = 1149,
+ ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1150,
+ ERR_CANT_USE_PROFANITY = 1151,
+ ERR_NOT_IN_PET_BATTLE = 1152,
+ ERR_NOT_IN_NPE = 1153,
+ ERR_NO_SPEC = 1154,
+ ERR_NO_DOMINATIONSHARD_OVERWRITE = 1155,
+ ERR_USE_WEEKLY_REWARDS_DISABLED = 1156,
+ ERR_CROSS_FACTION_GROUP_JOINED = 1157,
+ ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1158,
+ ERR_EQUIPABLESPELLS_SLOTS_FULL = 1159,
+ ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1160,
+ ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1161,
+ ERR_NO_SOULBOUND_ITEM_IN_ACCOUNT_BANK = 1162,
+ ERR_NO_REFUNDABLE_ITEM_IN_ACCOUNT_BANK = 1163,
+ ERR_CANT_DELETE_IN_ACCOUNT_BANK = 1164,
+ ERR_NO_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1165,
+ ERR_NO_OPEN_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1166,
+ ERR_CANT_TRADE_ACCOUNT_ITEM = 1167,
+ ERR_NO_ACCOUNT_INVENTORY_LOCK = 1168,
+ ERR_BANK_NOT_ACCESSIBLE = 1169,
+ ERR_TOO_MANY_ACCOUNT_BANK_TABS = 1170,
+ ERR_BANK_TAB_NOT_UNLOCKED = 1171,
+ ERR_ACCOUNT_MONEY_LOCKED = 1172,
+ ERR_BANK_TAB_INVALID_NAME = 1173,
+ ERR_BANK_TAB_INVALID_TEXT = 1174,
+ ERR_CHARACTER_BANK_NOT_CONVERTED = 1175,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1176,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1177,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1178,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1179,
+ ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1180,
+ ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1181,
+ ERR_WOW_LABS_SET_WOW_LABS_AREA_ID_FAILED = 1182,
+ ERR_PLUNDERSTORM_CANNOT_QUEUE = 1183,
+ ERR_TARGET_IS_SELF_FOUND_CANNOT_TRADE = 1184,
+ ERR_PLAYER_IS_SELF_FOUND_CANNOT_TRADE = 1185,
+ ERR_MAIL_RECEPIENT_IS_SELF_FOUND_CANNOT_RECEIVE_MAIL = 1186,
+ ERR_PLAYER_IS_SELF_FOUND_CANNOT_SEND_MAIL = 1187,
+ ERR_PLAYER_IS_SELF_FOUND_CANNOT_USE_AUCTION_HOUSE = 1188,
+ ERR_MAIL_TARGET_CANNOT_RECEIVE_MAIL = 1189,
+ ERR_REMIX_INVALID_TRANSFER_REQUEST = 1190,
+ ERR_CURRENCY_TRANSFER_INVALID_CHARACTER = 1191,
+ ERR_CURRENCY_TRANSFER_INVALID_CURRENCY = 1192,
+ ERR_CURRENCY_TRANSFER_INSUFFICIENT_CURRENCY = 1193,
+ ERR_CURRENCY_TRANSFER_MAX_QUANTITY = 1194,
+ ERR_CURRENCY_TRANSFER_NO_VALID_SOURCE = 1195,
+ ERR_CURRENCY_TRANSFER_CHARACTER_LOGGED_IN = 1196,
+ ERR_CURRENCY_TRANSFER_SERVER_ERROR = 1197,
+ ERR_CURRENCY_TRANSFER_UNMET_REQUIREMENTS = 1198,
+ ERR_CURRENCY_TRANSFER_TRANSACTION_IN_PROGRESS = 1199,
+ ERR_CURRENCY_TRANSFER_DISABLED = 1200,
};
enum class MountResult : uint32
diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h
index 211c1bcb38b..1450dab14dd 100644
--- a/src/server/game/Server/Packets/AllPackets.h
+++ b/src/server/game/Server/Packets/AllPackets.h
@@ -79,7 +79,6 @@
#include "TransmogrificationPackets.h"
#include "VehiclePackets.h"
#include "VignettePackets.h"
-#include "VoidStoragePackets.h"
#include "WardenPackets.h"
#include "WhoPackets.h"
#include "WorldStatePackets.h"
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.cpp b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
index c063b19305e..34c98aabcf4 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.cpp
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
@@ -17,57 +17,9 @@
#include "AreaTriggerPackets.h"
#include "PacketOperators.h"
-#include "Spline.h"
namespace WorldPackets::AreaTrigger
{
-void WriteAreaTriggerSpline(ByteBuffer& data, uint32 timeToTarget, uint32 elapsedTimeForMovement, ::Movement::Spline<float> const& areaTriggerSpline)
-{
- data << uint32(timeToTarget);
- data << uint32(elapsedTimeForMovement);
-
- data << BitsSize<16>(areaTriggerSpline.getPoints());
- data.append(reinterpret_cast<float const*>(areaTriggerSpline.getPoints().data()), areaTriggerSpline.getPoints().size() * 3);
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerSplineInfo const& areaTriggerSpline)
-{
- WriteAreaTriggerSpline(data, areaTriggerSpline.TimeToTarget, areaTriggerSpline.ElapsedTimeForMovement, *areaTriggerSpline.Points);
- return data;
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerOrbitInfo const& areaTriggerCircularMovement)
-{
- data << OptionalInit(areaTriggerCircularMovement.PathTarget);
- data << OptionalInit(areaTriggerCircularMovement.Center);
- data << Bits<1>(areaTriggerCircularMovement.CounterClockwise);
- data << Bits<1>(areaTriggerCircularMovement.CanLoop);
-
- data << uint32(areaTriggerCircularMovement.TimeToTarget);
- data << int32(areaTriggerCircularMovement.ElapsedTimeForMovement);
- data << uint32(areaTriggerCircularMovement.StartDelay);
- data << float(areaTriggerCircularMovement.Radius);
- data << float(areaTriggerCircularMovement.BlendFromRadius);
- data << float(areaTriggerCircularMovement.InitialAngle);
- data << float(areaTriggerCircularMovement.ZOffset);
-
- if (areaTriggerCircularMovement.PathTarget)
- data << *areaTriggerCircularMovement.PathTarget;
-
- if (areaTriggerCircularMovement.Center)
- data << *areaTriggerCircularMovement.Center;
-
- return data;
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerMovementScriptInfo const& areaTriggerMovementScript)
-{
- data << int32(areaTriggerMovementScript.SpellScriptID);
- data << areaTriggerMovementScript.Center;
-
- return data;
-}
-
void AreaTrigger::Read()
{
_worldPacket >> AreaTriggerID;
@@ -84,28 +36,6 @@ WorldPacket const* AreaTriggerDenied::Write()
return &_worldPacket;
}
-WorldPacket const* AreaTriggerRePath::Write()
-{
- _worldPacket << TriggerGUID;
- _worldPacket << Unused_1100;
-
- _worldPacket << OptionalInit(AreaTriggerSpline);
- _worldPacket << OptionalInit(AreaTriggerOrbit);
- _worldPacket << OptionalInit(AreaTriggerMovementScript);
- _worldPacket.FlushBits();
-
- if (AreaTriggerSpline)
- _worldPacket << *AreaTriggerSpline;
-
- if (AreaTriggerMovementScript)
- _worldPacket << *AreaTriggerMovementScript;
-
- if (AreaTriggerOrbit)
- _worldPacket << *AreaTriggerOrbit;
-
- return &_worldPacket;
-}
-
WorldPacket const* AreaTriggerPlaySpellVisual::Write()
{
_worldPacket << AreaTriggerGUID;
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.h b/src/server/game/Server/Packets/AreaTriggerPackets.h
index b0742733857..ac1defafc8f 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.h
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.h
@@ -19,34 +19,13 @@
#define TRINITYCORE_AREA_TRIGGER_PACKETS_H
#include "Packet.h"
-#include "AreaTriggerTemplate.h"
#include "CombatLogPacketsCommon.h"
#include "ObjectGuid.h"
-#include "Optional.h"
-
-namespace Movement
-{
-template<class index_type>
-class Spline;
-}
namespace WorldPackets
{
namespace AreaTrigger
{
- struct AreaTriggerSplineInfo
- {
- uint32 TimeToTarget = 0;
- uint32 ElapsedTimeForMovement = 0;
- ::Movement::Spline<float>* Points = nullptr;
- };
-
- struct AreaTriggerMovementScriptInfo
- {
- uint32 SpellScriptID = 0;
- TaggedPosition<Position::XYZ> Center;
- };
-
class AreaTrigger final : public ClientPacket
{
public:
@@ -78,20 +57,6 @@ namespace WorldPackets
WorldPacket const* Write() override { return &_worldPacket; }
};
- class AreaTriggerRePath final : public ServerPacket
- {
- public:
- explicit AreaTriggerRePath() : ServerPacket(SMSG_AREA_TRIGGER_RE_PATH, 17) { }
-
- WorldPacket const* Write() override;
-
- Optional<AreaTriggerSplineInfo> AreaTriggerSpline;
- Optional<AreaTriggerOrbitInfo> AreaTriggerOrbit;
- Optional<AreaTriggerMovementScriptInfo> AreaTriggerMovementScript;
- ObjectGuid TriggerGUID;
- ObjectGuid Unused_1100;
- };
-
class AreaTriggerPlaySpellVisual final : public ServerPacket
{
public:
@@ -114,9 +79,6 @@ namespace WorldPackets
Spells::SpellCastVisual Visual;
ObjectGuid TargetGUID;
};
-
- void WriteAreaTriggerSpline(ByteBuffer& data, uint32 timeToTarget, uint32 elapsedTimeForMovement, ::Movement::Spline<float> const& areaTriggerSpline);
- ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerOrbitInfo const& areaTriggerCircularMovement);
}
}
diff --git a/src/server/game/Server/Packets/BankPackets.cpp b/src/server/game/Server/Packets/BankPackets.cpp
index c30fed72584..59ddb9be346 100644
--- a/src/server/game/Server/Packets/BankPackets.cpp
+++ b/src/server/game/Server/Packets/BankPackets.cpp
@@ -18,47 +18,60 @@
#include "BankPackets.h"
#include "PacketOperators.h"
-void WorldPackets::Bank::AutoBankItem::Read()
+namespace WorldPackets::Bank
{
- _worldPacket >> Inv
- >> As<int8>(BankType)
- >> Bag
- >> Slot;
+void AutoBankItem::Read()
+{
+ _worldPacket >> Inv;
+ _worldPacket >> As<uint8>(BankType);
+ _worldPacket >> Bag;
+ _worldPacket >> Slot;
}
-void WorldPackets::Bank::AutoStoreBankItem::Read()
+void AutoStoreBankItem::Read()
{
- _worldPacket >> Inv
- >> Bag
- >> Slot;
+ _worldPacket >> Inv;
+ _worldPacket >> Bag;
+ _worldPacket >> Slot;
}
-void WorldPackets::Bank::BuyBankSlot::Read()
+void BuyBankTab::Read()
{
- _worldPacket >> Guid;
+ _worldPacket >> Banker;
+ _worldPacket >> As<uint8>(BankType);
}
-void WorldPackets::Bank::AutoBankReagent::Read()
+void AutoDepositCharacterBank::Read()
{
- _worldPacket >> Inv;
- _worldPacket >> PackSlot;
- _worldPacket >> Slot;
+ _worldPacket >> Banker;
}
-void WorldPackets::Bank::AutoStoreBankReagent::Read()
+void BankerActivate::Read()
{
- _worldPacket >> Inv;
- _worldPacket >> Slot;
- _worldPacket >> PackSlot;
+ _worldPacket >> Banker;
+ _worldPacket >> As<int32>(InteractionType);
}
-void WorldPackets::Bank::ReagentBank::Read()
+ByteBuffer& operator>>(ByteBuffer& data, BankTabSettings& settings)
{
- _worldPacket >> Banker;
+ data.ResetBitPos();
+ data >> SizedString::BitsSize<7>(settings.Name);
+ data >> SizedString::BitsSize<9>(settings.Icon);
+ data >> SizedString::BitsSize<14>(settings.Description);
+ data >> As<int32>(settings.DepositFlags);
+
+ data >> SizedString::Data(settings.Name);
+ data >> SizedString::Data(settings.Icon);
+ data >> SizedString::Data(settings.Description);
+
+ return data;
}
-void WorldPackets::Bank::BankerActivate::Read()
+void UpdateBankTabSettings::Read()
{
_worldPacket >> Banker;
- _worldPacket >> As<int32>(InteractionType);
+ _worldPacket >> As<uint8>(BankType);
+ _worldPacket >> Tab;
+ _worldPacket >> Settings;
+}
}
diff --git a/src/server/game/Server/Packets/BankPackets.h b/src/server/game/Server/Packets/BankPackets.h
index 047b5085c2d..04a0f694bd3 100644
--- a/src/server/game/Server/Packets/BankPackets.h
+++ b/src/server/game/Server/Packets/BankPackets.h
@@ -22,6 +22,7 @@
#include "ItemPacketsCommon.h"
#include "ObjectGuid.h"
+enum class BagSlotFlags : uint32;
enum class PlayerInteractionType : int32;
namespace WorldPackets
@@ -53,61 +54,57 @@ namespace WorldPackets
uint8 Slot = 0;
};
- class BuyBankSlot final : public ClientPacket
+ class BuyBankTab final : public ClientPacket
{
public:
- explicit BuyBankSlot(WorldPacket&& packet) : ClientPacket(CMSG_BUY_BANK_SLOT, std::move(packet)) { }
+ explicit BuyBankTab(WorldPacket&& packet) : ClientPacket(CMSG_BUY_ACCOUNT_BANK_TAB, std::move(packet)) { }
void Read() override;
- ObjectGuid Guid;
+ ObjectGuid Banker;
+ ::BankType BankType = ::BankType::Character;
};
- class AutoBankReagent final : public ClientPacket
+ class AutoDepositCharacterBank final : public ClientPacket
{
public:
- explicit AutoBankReagent(WorldPacket&& packet) : ClientPacket(CMSG_AUTOBANK_REAGENT, std::move(packet)) { }
+ explicit AutoDepositCharacterBank(WorldPacket&& packet) : ClientPacket(CMSG_AUTO_DEPOSIT_CHARACTER_BANK, std::move(packet)) { }
void Read() override;
- WorldPackets::Item::InvUpdate Inv;
- uint8 Slot = 0;
- uint8 PackSlot = 0;
+ ObjectGuid Banker;
};
- class AutoStoreBankReagent final : public ClientPacket
+ class BankerActivate final : public ClientPacket
{
public:
- explicit AutoStoreBankReagent(WorldPacket&& packet) : ClientPacket(CMSG_AUTOSTORE_BANK_REAGENT, std::move(packet)) { }
+ explicit BankerActivate(WorldPacket&& packet) : ClientPacket(CMSG_BANKER_ACTIVATE, std::move(packet)) { }
void Read() override;
- WorldPackets::Item::InvUpdate Inv;
- uint8 Slot = 0;
- uint8 PackSlot = 0;
+ ObjectGuid Banker;
+ PlayerInteractionType InteractionType = { };
};
- // CMSG_BUY_REAGENT_BANK
- // CMSG_REAGENT_BANK_DEPOSIT
- class ReagentBank final : public ClientPacket
+ struct BankTabSettings
{
- public:
- explicit ReagentBank(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
-
- void Read() override;
-
- ObjectGuid Banker;
+ std::string Name;
+ std::string Icon;
+ std::string Description;
+ BagSlotFlags DepositFlags = { };
};
- class BankerActivate final : public ClientPacket
+ class UpdateBankTabSettings final : public ClientPacket
{
public:
- explicit BankerActivate(WorldPacket&& packet) : ClientPacket(CMSG_BANKER_ACTIVATE, std::move(packet)) { }
+ explicit UpdateBankTabSettings(WorldPacket&& packet) : ClientPacket(CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS, std::move(packet)) { }
void Read() override;
ObjectGuid Banker;
- PlayerInteractionType InteractionType = { };
+ ::BankType BankType = ::BankType::Character;
+ uint8 Tab = 0;
+ BankTabSettings Settings;
};
}
}
diff --git a/src/server/game/Server/Packets/DuelPackets.h b/src/server/game/Server/Packets/DuelPackets.h
index efa8b970d11..f2ec5c9fff4 100644
--- a/src/server/game/Server/Packets/DuelPackets.h
+++ b/src/server/game/Server/Packets/DuelPackets.h
@@ -96,7 +96,7 @@ namespace WorldPackets
bool ToTheDeath = false;
};
- class DuelResponse : public ClientPacket
+ class DuelResponse final : public ClientPacket
{
public:
explicit DuelResponse(WorldPacket&& packet) : ClientPacket(CMSG_DUEL_RESPONSE, std::move(packet)) { }
diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h
index 3841fffd092..566830dfa7c 100644
--- a/src/server/game/Server/Packets/GuildPackets.h
+++ b/src/server/game/Server/Packets/GuildPackets.h
@@ -605,7 +605,7 @@ namespace WorldPackets
ObjectGuid Promotee;
};
- class GuildOfficerRemoveMember : public ClientPacket
+ class GuildOfficerRemoveMember final : public ClientPacket
{
public:
explicit GuildOfficerRemoveMember(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_OFFICER_REMOVE_MEMBER, std::move(packet)) { }
diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp
index ddebb53d225..75d3b6d784a 100644
--- a/src/server/game/Server/Packets/InspectPackets.cpp
+++ b/src/server/game/Server/Packets/InspectPackets.cpp
@@ -225,6 +225,8 @@ WorldPacket const* InspectResult::Write()
if (!PvpTalents.empty())
_worldPacket.append(PvpTalents.data(), PvpTalents.size());
+ _worldPacket << TalentInfo;
+
_worldPacket << OptionalInit(GuildData);
_worldPacket << OptionalInit(AzeriteLevel);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h
index d78ffbe78da..de9d4c61ae7 100644
--- a/src/server/game/Server/Packets/InspectPackets.h
+++ b/src/server/game/Server/Packets/InspectPackets.h
@@ -25,6 +25,7 @@
#include "ObjectGuid.h"
#include "RaceMask.h"
#include "SharedDefines.h"
+#include "TalentPackets.h"
#include "TraitPacketsCommon.h"
class Item;
@@ -145,6 +146,7 @@ namespace WorldPackets
uint16 TodayHK = 0;
uint16 YesterdayHK = 0;
uint8 LifetimeMaxRank = 0;
+ Talent::ClassicTalentInfoUpdate TalentInfo;
TraitInspectInfo TraitsInfo;
};
diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp
index 637b1ae8755..0dcf8eacb17 100644
--- a/src/server/game/Server/Packets/ItemPackets.cpp
+++ b/src/server/game/Server/Packets/ItemPackets.cpp
@@ -385,13 +385,6 @@ void ChangeBagSlotFlag::Read()
_worldPacket >> Bits<1>(On);
}
-void ChangeBankBagSlotFlag::Read()
-{
- _worldPacket >> BagIndex;
- _worldPacket >> As<uint32>(FlagToChange);
- _worldPacket >> Bits<1>(On);
-}
-
void SetBackpackAutosortDisabled::Read()
{
_worldPacket >> Bits<1>(Disable);
diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h
index 825e452f5cd..b783d6cc5a9 100644
--- a/src/server/game/Server/Packets/ItemPackets.h
+++ b/src/server/game/Server/Packets/ItemPackets.h
@@ -513,14 +513,6 @@ namespace WorldPackets
void Read() override { }
};
- class SortReagentBankBags final : public ClientPacket
- {
- public:
- explicit SortReagentBankBags(WorldPacket&& packet) : ClientPacket(CMSG_SORT_REAGENT_BANK_BAGS, std::move(packet)) { }
-
- void Read() override { }
- };
-
class BagCleanupFinished final : public ServerPacket
{
public:
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
index 08edcc0bc0c..d1dae8ae299 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
@@ -19,7 +19,6 @@
#include "Item.h"
#include "Loot.h"
#include "PacketOperators.h"
-#include "Player.h"
namespace WorldPackets::Item
{
@@ -79,24 +78,6 @@ void ItemInstance::Initialize(::LootItem const& lootItem)
}
}
-void ItemInstance::Initialize(::VoidStorageItem const* voidItem)
-{
- ItemID = voidItem->ItemEntry;
-
- if (voidItem->FixedScalingLevel)
- Modifications.Values.push_back({ .Value = int32(voidItem->FixedScalingLevel), .Type = ITEM_MODIFIER_TIMEWALKER_LEVEL });
-
- if (voidItem->ArtifactKnowledgeLevel)
- Modifications.Values.push_back({ .Value = int32(voidItem->ArtifactKnowledgeLevel), .Type = ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL });
-
- if (!voidItem->BonusListIDs.empty())
- {
- ItemBonus.emplace();
- ItemBonus->Context = voidItem->Context;
- ItemBonus->BonusListIDs = voidItem->BonusListIDs;
- }
-}
-
bool ItemInstance::operator==(ItemInstance const& r) const
{
if (ItemID != r.ItemID)
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.h b/src/server/game/Server/Packets/ItemPacketsCommon.h
index 552d25623e3..e54353fcbaf 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.h
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.h
@@ -66,7 +66,6 @@ namespace WorldPackets
void Initialize(::Item const* item);
void Initialize(UF::SocketedGem const* gem);
void Initialize(::LootItem const& lootItem);
- void Initialize(::VoidStorageItem const* voidItem);
uint32 ItemID = 0;
Optional<ItemBonuses> ItemBonus;
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index f6351382dd5..4f2a5bd132f 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -182,6 +182,7 @@ WorldPacket const* TriggerMovie::Write()
return &_worldPacket;
}
+
WorldPacket const* TriggerCinematic::Write()
{
_worldPacket << uint32(CinematicID);
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index b9796743e6c..629544a68de 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -318,9 +318,9 @@ ByteBuffer& operator<<(ByteBuffer& data, MonsterSplineTurnData const& turnData)
ByteBuffer& operator<<(ByteBuffer& data, MonsterSplineAnimTierTransition const& animTierTransition)
{
data << int32(animTierTransition.TierTransitionID);
+ data << uint8(animTierTransition.AnimTier);
data << uint32(animTierTransition.StartTime);
data << uint32(animTierTransition.EndTime);
- data << uint8(animTierTransition.AnimTier);
return data;
}
@@ -518,9 +518,9 @@ void CommonMovement::WriteCreateObjectSplineDataBlock(::Movement::MoveSpline con
if (moveSpline.anim_tier)
{
data << int32(moveSpline.anim_tier->TierTransitionId);
+ data << uint8(moveSpline.anim_tier->AnimTier);
data << uint32(moveSpline.effect_start_time);
data << uint32(0);
- data << uint8(moveSpline.anim_tier->AnimTier);
}
//if (HasUnknown901)
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index fa559dbef04..1c329d41239 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -458,6 +458,23 @@ WorldPacket const* GroupNewLeader::Write()
return &_worldPacket;
}
+ByteBuffer& operator<<(ByteBuffer& data, LeaverInfo const& leaverInfo)
+{
+ data << leaverInfo.BnetAccountGUID;
+ data << float(leaverInfo.LeaveScore);
+ data << uint32(leaverInfo.SeasonID);
+ data << uint32(leaverInfo.TotalLeaves);
+ data << uint32(leaverInfo.TotalSuccesses);
+ data << int32(leaverInfo.ConsecutiveSuccesses);
+ data << leaverInfo.LastPenaltyTime;
+ data << leaverInfo.LeaverExpirationTime;
+ data << int32(leaverInfo.Unknown_1120);
+ data << Bits<1>(leaverInfo.LeaverStatus);
+ data.FlushBits();
+
+ return data;
+}
+
ByteBuffer& operator<<(ByteBuffer& data, PartyPlayerInfo const& playerInfo)
{
data << SizedString::BitsSize<6>(playerInfo.Name);
@@ -465,6 +482,7 @@ ByteBuffer& operator<<(ByteBuffer& data, PartyPlayerInfo const& playerInfo)
data << Bits<1>(playerInfo.Connected);
data << Bits<1>(playerInfo.VoiceChatSilenced);
data << Bits<1>(playerInfo.FromSocialQueue);
+ data << playerInfo.Leaver;
data << playerInfo.GUID;
data << uint8(playerInfo.Subgroup);
data << uint8(playerInfo.Flags);
@@ -477,6 +495,22 @@ ByteBuffer& operator<<(ByteBuffer& data, PartyPlayerInfo const& playerInfo)
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, ChallengeModeData const& challengeMode)
+{
+ data << int32(challengeMode.Unknown_1120_1);
+ data << int32(challengeMode.Unknown_1120_2);
+ data << uint64(challengeMode.Unknown_1120_3);
+ data << int64(challengeMode.Unknown_1120_4);
+ data << challengeMode.KeystoneOwnerGUID;
+ data << challengeMode.LeaverGUID;
+ data << Bits<1>(challengeMode.IsActive);
+ data << Bits<1>(challengeMode.HasRestrictions);
+ data << Bits<1>(challengeMode.CanVoteAbandon);
+ data.FlushBits();
+
+ return data;
+}
+
ByteBuffer& operator<<(ByteBuffer& data, PartyLFGInfo const& lfgInfos)
{
data << uint32(lfgInfos.Slot);
@@ -524,6 +558,7 @@ WorldPacket const* PartyUpdate::Write()
_worldPacket << uint8(LeaderFactionGroup);
_worldPacket << int32(PingRestriction);
_worldPacket << Size<uint32>(PlayerList);
+ _worldPacket << OptionalInit(ChallengeMode);
_worldPacket << OptionalInit(LfgInfos);
_worldPacket << OptionalInit(LootSettings);
_worldPacket << OptionalInit(DifficultySettings);
@@ -538,6 +573,9 @@ WorldPacket const* PartyUpdate::Write()
if (DifficultySettings)
_worldPacket << *DifficultySettings;
+ if (ChallengeMode)
+ _worldPacket << *ChallengeMode;
+
if (LfgInfos)
_worldPacket << *LfgInfos;
diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h
index 8c287fe8b12..5b8e4c2ca1e 100644
--- a/src/server/game/Server/Packets/PartyPackets.h
+++ b/src/server/game/Server/Packets/PartyPackets.h
@@ -508,11 +508,26 @@ namespace WorldPackets
std::string Name;
};
+ struct LeaverInfo
+ {
+ ObjectGuid BnetAccountGUID;
+ float LeaveScore = 0.0f;
+ uint32 SeasonID = 0;
+ uint32 TotalLeaves = 0;
+ uint32 TotalSuccesses = 0;
+ int32 ConsecutiveSuccesses = 0;
+ Timestamp<> LastPenaltyTime;
+ Timestamp<> LeaverExpirationTime;
+ int32 Unknown_1120 = 0;
+ bool LeaverStatus = false;
+ };
+
struct PartyPlayerInfo
{
ObjectGuid GUID;
std::string Name;
std::string VoiceStateID; // same as bgs.protocol.club.v1.MemberVoiceState.id
+ LeaverInfo Leaver;
uint8 Class = 0u;
uint8 Subgroup = 0u;
uint8 Flags = 0u;
@@ -551,6 +566,19 @@ namespace WorldPackets
uint32 LegacyRaidDifficultyID = 0u;
};
+ struct ChallengeModeData
+ {
+ int32 Unknown_1120_1 = 0;
+ int32 Unknown_1120_2 = 0;
+ uint64 Unknown_1120_3 = 0;
+ int64 Unknown_1120_4 = 0;
+ ObjectGuid KeystoneOwnerGUID;
+ ObjectGuid LeaverGUID;
+ bool IsActive = false;
+ bool HasRestrictions = false;
+ bool CanVoteAbandon = false;
+ };
+
class PartyUpdate final : public ServerPacket
{
public:
@@ -573,6 +601,7 @@ namespace WorldPackets
std::vector<PartyPlayerInfo> PlayerList;
+ Optional<ChallengeModeData> ChallengeMode;
Optional<PartyLFGInfo> LfgInfos;
Optional<PartyLootSettings> LootSettings;
Optional<PartyDifficultySettings> DifficultySettings;
diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h
index 633cae4f340..4d30b3b6fdc 100644
--- a/src/server/game/Server/Packets/QueryPackets.h
+++ b/src/server/game/Server/Packets/QueryPackets.h
@@ -83,7 +83,7 @@ namespace WorldPackets
int32 CreatureDifficultyID = 0;
int32 WidgetSetID = 0;
int32 WidgetSetUnitConditionID = 0;
- std::array<uint32, 2> Flags = { };
+ std::array<uint32, 3> Flags = { };
std::array<uint32, 2> ProxyCreatureID = { };
std::array<std::string, 4> Name = { };
std::array<std::string, 4> NameAlt = { };
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index d3414c11436..ee5c38e7b2f 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -127,8 +127,6 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << uint32(KioskSessionDurationMinutes);
_worldPacket << int64(RedeemForBalanceAmount);
- _worldPacket << uint32(BpayStorePurchaseTimeout);
-
_worldPacket << uint32(ClubsPresenceDelay);
_worldPacket << uint32(ClubPresenceUnsubscribeDelay);
@@ -156,60 +154,58 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << Bits<1>(VoiceEnabled);
_worldPacket << OptionalInit(EuropaTicketSystemStatus);
- _worldPacket << Bits<1>(BpayStoreEnabled);
_worldPacket << Bits<1>(BpayStoreAvailable);
_worldPacket << Bits<1>(BpayStoreDisabledByParentalControls);
_worldPacket << Bits<1>(ItemRestorationButtonEnabled);
- _worldPacket << Bits<1>(BrowserEnabled);
_worldPacket << OptionalInit(SessionAlert);
-
_worldPacket << Bits<1>(RAFSystem.Enabled);
_worldPacket << Bits<1>(RAFSystem.RecruitingEnabled);
+
_worldPacket << Bits<1>(CharUndeleteEnabled);
_worldPacket << Bits<1>(RestrictedAccount);
_worldPacket << Bits<1>(CommerceServerEnabled);
_worldPacket << Bits<1>(TutorialEnabled);
_worldPacket << Bits<1>(VeteranTokenRedeemWillKick);
_worldPacket << Bits<1>(WorldTokenRedeemWillKick);
-
_worldPacket << Bits<1>(KioskModeEnabled);
_worldPacket << Bits<1>(CompetitiveModeEnabled);
+
_worldPacket << Bits<1>(RedeemForBalanceAvailable);
_worldPacket << Bits<1>(WarModeEnabled);
_worldPacket << Bits<1>(CommunitiesEnabled);
_worldPacket << Bits<1>(BnetGroupsEnabled);
_worldPacket << Bits<1>(CharacterCommunitiesEnabled);
_worldPacket << Bits<1>(ClubPresenceAllowSubscribeAll);
-
_worldPacket << Bits<1>(VoiceChatParentalDisabled);
_worldPacket << Bits<1>(VoiceChatParentalMuted);
+
_worldPacket << Bits<1>(QuestSessionEnabled);
_worldPacket << Bits<1>(IsChatMuted);
_worldPacket << Bits<1>(ClubFinderEnabled);
_worldPacket << Bits<1>(CommunityFinderEnabled);
_worldPacket << Bits<1>(BrowserCrashReporterEnabled);
_worldPacket << Bits<1>(SpeakForMeAllowed);
-
_worldPacket << Bits<1>(DoesAccountNeedAADCPrompt);
_worldPacket << Bits<1>(IsAccountOptedInToAADC);
+
_worldPacket << Bits<1>(LfgRequireAuthenticatorEnabled);
_worldPacket << Bits<1>(ScriptsDisallowedForBeta);
_worldPacket << Bits<1>(TimerunningEnabled);
_worldPacket << Bits<1>(WarGamesEnabled);
_worldPacket << Bits<1>(IsPlayerContentTrackingEnabled);
_worldPacket << Bits<1>(SellAllJunkEnabled);
-
_worldPacket << Bits<1>(GroupFinderEnabled);
_worldPacket << Bits<1>(IsPremadeGroupEnabled);
+
_worldPacket << Bits<1>(false); // unused 10.2.7
_worldPacket << Bits<1>(GuildEventsEditsEnabled);
_worldPacket << Bits<1>(GuildTradeSkillsEnabled);
- _worldPacket << SizedString::BitsSize<7>(Unknown1027);
+ _worldPacket << SizedString::BitsSize<10>(Unknown1027);
_worldPacket << Bits<1>(BNSendWhisperUseV2Services);
_worldPacket << Bits<1>(BNSendGameDataUseV2Services);
_worldPacket << Bits<1>(IsAccountCurrencyTransferEnabled);
- _worldPacket << Bits<1>(false); // unused 11.0.7
+ _worldPacket << Bits<1>(false); // unused 11.0.7
_worldPacket << Bits<1>(LobbyMatchmakerQueueFromMainlineEnabled);
_worldPacket << Bits<1>(CanSendLobbyMatchmakerPartyCustomizations);
_worldPacket << Bits<1>(AddonProfilerEnabled);
@@ -235,7 +231,6 @@ WorldPacket const* FeatureSystemStatus::Write()
WorldPacket const* FeatureSystemStatusGlueScreen::Write()
{
- _worldPacket << Bits<1>(BpayStoreEnabled);
_worldPacket << Bits<1>(BpayStoreAvailable);
_worldPacket << Bits<1>(BpayStoreDisabledByParentalControls);
_worldPacket << Bits<1>(CharUndeleteEnabled);
@@ -243,8 +238,8 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << Bits<1>(VeteranTokenRedeemWillKick);
_worldPacket << Bits<1>(WorldTokenRedeemWillKick);
_worldPacket << Bits<1>(ExpansionPreorderInStore);
-
_worldPacket << Bits<1>(KioskModeEnabled);
+
_worldPacket << Bits<1>(CompetitiveModeEnabled);
_worldPacket << Bits<1>(BoostEnabled);
_worldPacket << Bits<1>(TrialBoostEnabled);
@@ -252,8 +247,8 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << Bits<1>(PaidCharacterTransfersBetweenBnetAccountsEnabled);
_worldPacket << Bits<1>(LiveRegionCharacterListEnabled);
_worldPacket << Bits<1>(LiveRegionCharacterCopyEnabled);
-
_worldPacket << Bits<1>(LiveRegionAccountCopyEnabled);
+
_worldPacket << Bits<1>(LiveRegionKeyBindingsCopyEnabled);
_worldPacket << Bits<1>(BrowserCrashReporterEnabled);
_worldPacket << Bits<1>(IsEmployeeAccount);
@@ -261,8 +256,8 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << Bits<1>(NameReservationOnly);
_worldPacket << OptionalInit(LaunchDurationETA);
_worldPacket << Bits<1>(TimerunningEnabled);
-
_worldPacket << Bits<1>(ScriptsDisallowedForBeta);
+
_worldPacket << Bits<1>(PlayerIdentityOptionsEnabled);
_worldPacket << Bits<1>(AccountExportEnabled);
_worldPacket << Bits<1>(AccountLockedPostExport);
@@ -270,8 +265,8 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << SizedCString::BitsSize<11>(RealmHiddenAlert);
_worldPacket << Bits<1>(BNSendWhisperUseV2Services);
-
_worldPacket << Bits<1>(BNSendGameDataUseV2Services);
+
_worldPacket << Bits<1>(CharacterSelectListModeRealmless);
_worldPacket << Bits<1>(WowTokenLimitedMode);
_worldPacket << Bits<1>(false); // unused 11.1.7
@@ -288,7 +283,6 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << int64(RedeemForBalanceAmount);
_worldPacket << int32(MaxCharactersOnThisRealm);
_worldPacket << Size<uint32>(LiveRegionCharacterCopySourceRegions);
- _worldPacket << uint32(BpayStorePurchaseTimeout);
_worldPacket << int32(ActiveBoostType);
_worldPacket << int32(TrialBoostType);
_worldPacket << int32(MinimumExpansionLevel);
diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h
index 9a3cd43350d..b74adbc0fca 100644
--- a/src/server/game/Server/Packets/SystemPackets.h
+++ b/src/server/game/Server/Packets/SystemPackets.h
@@ -119,9 +119,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
bool VoiceEnabled = false;
- bool BrowserEnabled = false;
bool BpayStoreAvailable = false;
- bool BpayStoreEnabled = false;
Optional<SessionAlertConfig> SessionAlert;
Optional<EuropaTicketConfig> EuropaTicketSystemStatus;
uint32 CfgRealmID = 0;
@@ -211,7 +209,6 @@ namespace WorldPackets
bool BpayStoreAvailable = false; // NYI
bool BpayStoreDisabledByParentalControls = false; // NYI
bool CharUndeleteEnabled = false;
- bool BpayStoreEnabled = false;
bool CommerceServerEnabled = false; // NYI
bool VeteranTokenRedeemWillKick = false; // NYI
bool WorldTokenRedeemWillKick = false; // NYI
@@ -244,7 +241,6 @@ namespace WorldPackets
uint32 CommercePricePollTimeSeconds = 0; // NYI
int64 RedeemForBalanceAmount = 0; // NYI
int32 MaxCharactersOnThisRealm = 0;
- uint32 BpayStorePurchaseTimeout = 0; // NYI
int32 ActiveBoostType = 0; // NYI
int32 TrialBoostType = 0; // NYI
int32 MinimumExpansionLevel = 0;
diff --git a/src/server/game/Server/Packets/TalentPackets.cpp b/src/server/game/Server/Packets/TalentPackets.cpp
index 6fd35cc00c0..63487076b02 100644
--- a/src/server/game/Server/Packets/TalentPackets.cpp
+++ b/src/server/game/Server/Packets/TalentPackets.cpp
@@ -36,6 +36,49 @@ ByteBuffer& operator<<(ByteBuffer& data, PvPTalent const& pvpTalent)
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, ClassicTalentEntry const& talentEntry)
+{
+ data << int32(talentEntry.TalentID);
+ data << int32(talentEntry.Rank);
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, ClassicTalentGroupInfo const& talentGroupInfo)
+{
+ data << uint8(talentGroupInfo.NumTalents);
+ data << Size<uint32>(talentGroupInfo.Talents);
+
+ data << uint8(talentGroupInfo.NumGlyphs);
+ data << Size<uint32>(talentGroupInfo.GlyphIDs);
+
+ data << int8(talentGroupInfo.Role);
+ data << int32(talentGroupInfo.PrimarySpecialization);
+
+ for (ClassicTalentEntry const& talentEntry : talentGroupInfo.Talents)
+ data << talentEntry;
+
+ if (!talentGroupInfo.GlyphIDs.empty())
+ data.append(talentGroupInfo.GlyphIDs.data(), talentGroupInfo.GlyphIDs.size());
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, ClassicTalentInfoUpdate const& talentInfoUpdate)
+{
+ data << int32(talentInfoUpdate.UnspentTalentPoints);
+ data << uint8(talentInfoUpdate.ActiveGroup);
+ data << Size<uint32>(talentInfoUpdate.Talents);
+
+ for (ClassicTalentGroupInfo const& talents : talentInfoUpdate.Talents)
+ data << talents;
+
+ data << Bits<1>(talentInfoUpdate.IsPetTalents);
+ data.FlushBits();
+
+ return data;
+}
+
WorldPacket const* UpdateTalentData::Write()
{
_worldPacket << uint8(Info.ActiveGroup);
@@ -47,12 +90,16 @@ WorldPacket const* UpdateTalentData::Write()
_worldPacket << uint32(talentGroupInfo.SpecID);
_worldPacket << Size<uint32>(talentGroupInfo.TalentIDs);
_worldPacket << Size<uint32>(talentGroupInfo.PvPTalents);
+ _worldPacket << Size<uint32>(talentGroupInfo.GlyphIDs);
for (uint16 talent : talentGroupInfo.TalentIDs)
_worldPacket << uint16(talent);
for (PvPTalent talent : talentGroupInfo.PvPTalents)
_worldPacket << talent;
+
+ for (uint32 talent : talentGroupInfo.GlyphIDs)
+ _worldPacket << uint16(talent);
}
return &_worldPacket;
diff --git a/src/server/game/Server/Packets/TalentPackets.h b/src/server/game/Server/Packets/TalentPackets.h
index 8b342345109..5b9566e83c2 100644
--- a/src/server/game/Server/Packets/TalentPackets.h
+++ b/src/server/game/Server/Packets/TalentPackets.h
@@ -38,6 +38,7 @@ namespace WorldPackets
uint32 SpecID = 0;
std::vector<uint16> TalentIDs;
std::vector<PvPTalent> PvPTalents;
+ std::vector<uint32> GlyphIDs;
};
struct TalentInfoUpdate
@@ -47,6 +48,30 @@ namespace WorldPackets
std::vector<TalentGroupInfo> TalentGroups;
};
+ struct ClassicTalentEntry
+ {
+ int32 TalentID = 0;
+ int32 Rank = 0;
+ };
+
+ struct ClassicTalentGroupInfo
+ {
+ uint8 NumTalents = 0;
+ std::vector<ClassicTalentEntry> Talents;
+ uint8 NumGlyphs = 0;
+ std::vector<uint16> GlyphIDs;
+ int8 Role = 0;
+ int32 PrimarySpecialization = 0;
+ };
+
+ struct ClassicTalentInfoUpdate
+ {
+ int32 UnspentTalentPoints = 0;
+ uint8 ActiveGroup = 0;
+ bool IsPetTalents = false;
+ std::vector<ClassicTalentGroupInfo> Talents;
+ };
+
class UpdateTalentData final : public ServerPacket
{
public:
@@ -141,6 +166,8 @@ namespace WorldPackets
int32 SpellID = 0;
std::vector<PvPTalent> Talents;
};
+
+ ByteBuffer& operator<<(ByteBuffer& data, ClassicTalentInfoUpdate const& talentInfoInfo);
}
}
diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.cpp b/src/server/game/Server/Packets/TraitPacketsCommon.cpp
index 704d6bc6bf8..692ed9cb330 100644
--- a/src/server/game/Server/Packets/TraitPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/TraitPacketsCommon.cpp
@@ -66,6 +66,7 @@ ByteBuffer& operator>>(ByteBuffer& data, TraitEntry& traitEntry)
data >> traitEntry.TraitNodeEntryID;
data >> traitEntry.Rank;
data >> traitEntry.GrantedRanks;
+ data >> traitEntry.BonusRanks;
return data;
}
@@ -76,6 +77,7 @@ ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry)
data << int32(traitEntry.TraitNodeEntryID);
data << int32(traitEntry.Rank);
data << int32(traitEntry.GrantedRanks);
+ data << int32(traitEntry.BonusRanks);
return data;
}
diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.h b/src/server/game/Server/Packets/TraitPacketsCommon.h
index 8cf075bc7a8..94b88e29746 100644
--- a/src/server/game/Server/Packets/TraitPacketsCommon.h
+++ b/src/server/game/Server/Packets/TraitPacketsCommon.h
@@ -41,6 +41,7 @@ struct TraitEntry
int32 TraitNodeEntryID = 0;
int32 Rank = 0;
int32 GrantedRanks = 0;
+ int32 BonusRanks = 0;
};
struct TraitSubTreeCache
diff --git a/src/server/game/Server/Packets/VoidStoragePackets.cpp b/src/server/game/Server/Packets/VoidStoragePackets.cpp
deleted file mode 100644
index 0b7cef0f6be..00000000000
--- a/src/server/game/Server/Packets/VoidStoragePackets.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "VoidStoragePackets.h"
-#include "PacketOperators.h"
-
-namespace WorldPackets::VoidStorage
-{
-WorldPacket const* VoidTransferResult::Write()
-{
- _worldPacket << int32(Result);
-
- return &_worldPacket;
-}
-
-void UnlockVoidStorage::Read()
-{
- _worldPacket >> Npc;
-}
-
-void QueryVoidStorage::Read()
-{
- _worldPacket >> Npc;
-}
-
-WorldPacket const* VoidStorageFailed::Write()
-{
- _worldPacket << uint8(Reason);
-
- return &_worldPacket;
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, VoidItem const& voidItem)
-{
- data << voidItem.Guid;
- data << voidItem.Creator;
- data << uint32(voidItem.Slot);
- data << voidItem.Item;
-
- return data;
-}
-
-WorldPacket const* VoidStorageContents::Write()
-{
- _worldPacket.reserve(1 + Items.size() * sizeof(VoidItem));
-
- _worldPacket << BitsSize<8>(Items);
- _worldPacket.FlushBits();
-
- for (VoidItem const& voidItem : Items)
- _worldPacket << voidItem;
-
- return &_worldPacket;
-}
-
-void VoidStorageTransfer::Read()
-{
- _worldPacket >> Npc;
- _worldPacket >> Size<uint32>(Deposits);
- _worldPacket >> Size<uint32>(Withdrawals);
-
- for (ObjectGuid& deposit : Deposits)
- _worldPacket >> deposit;
-
- for (ObjectGuid& withdrawal : Withdrawals)
- _worldPacket >> withdrawal;
-}
-
-WorldPacket const* VoidStorageTransferChanges::Write()
-{
- _worldPacket.reserve(1 + AddedItems.size() * sizeof(VoidItem) + RemovedItems.size() * 16);
-
- _worldPacket << BitsSize<4>(AddedItems);
- _worldPacket << BitsSize<4>(RemovedItems);
- _worldPacket.FlushBits();
-
- for (VoidItem const& addedItem : AddedItems)
- _worldPacket << addedItem;
-
- for (ObjectGuid const& removedItem : RemovedItems)
- _worldPacket << removedItem;
-
- return &_worldPacket;
-}
-
-void SwapVoidItem::Read()
-{
- _worldPacket >> Npc;
- _worldPacket >> VoidItemGuid;
- _worldPacket >> DstSlot;
-}
-
-WorldPacket const* VoidItemSwapResponse::Write()
-{
- _worldPacket << VoidItemA << uint32(VoidItemSlotA);
- _worldPacket << VoidItemB << uint32(VoidItemSlotB);
-
- return &_worldPacket;
-}
-}
diff --git a/src/server/game/Server/Packets/VoidStoragePackets.h b/src/server/game/Server/Packets/VoidStoragePackets.h
deleted file mode 100644
index c7a9793cd0b..00000000000
--- a/src/server/game/Server/Packets/VoidStoragePackets.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef TRINITYCORE_VOID_STORAGE_PACKETS_H
-#define TRINITYCORE_VOID_STORAGE_PACKETS_H
-
-#include "Packet.h"
-#include "ItemPacketsCommon.h"
-#include "ObjectGuid.h"
-#include "SharedDefines.h"
-
-namespace WorldPackets
-{
- namespace VoidStorage
- {
- class VoidTransferResult final : public ServerPacket
- {
- public:
- explicit VoidTransferResult(int32 result) : ServerPacket(SMSG_VOID_TRANSFER_RESULT, 4), Result(result) { }
-
- WorldPacket const* Write() override;
-
- int32 Result;
- };
-
- class UnlockVoidStorage final : public ClientPacket
- {
- public:
- explicit UnlockVoidStorage(WorldPacket&& packet) : ClientPacket(CMSG_UNLOCK_VOID_STORAGE, std::move(packet)) { }
-
- void Read() override;
-
- ObjectGuid Npc;
- };
-
- class QueryVoidStorage final : public ClientPacket
- {
- public:
- explicit QueryVoidStorage(WorldPacket&& packet) : ClientPacket(CMSG_QUERY_VOID_STORAGE, std::move(packet)) { }
-
- void Read() override;
-
- ObjectGuid Npc;
- };
-
- class VoidStorageFailed final : public ServerPacket
- {
- public:
- explicit VoidStorageFailed() : ServerPacket(SMSG_VOID_STORAGE_FAILED, 1) { }
-
- WorldPacket const* Write() override;
-
- uint8 Reason = 0;
- };
-
- struct VoidItem
- {
- ObjectGuid Guid;
- ObjectGuid Creator;
- uint32 Slot = 0;
- WorldPackets::Item::ItemInstance Item;
- };
-
- class VoidStorageContents final : public ServerPacket
- {
- public:
- explicit VoidStorageContents() : ServerPacket(SMSG_VOID_STORAGE_CONTENTS, 0) { }
-
- WorldPacket const* Write() override;
-
- std::vector<VoidItem> Items;
- };
-
- class VoidStorageTransfer final : public ClientPacket
- {
- public:
- explicit VoidStorageTransfer(WorldPacket&& packet) : ClientPacket(CMSG_VOID_STORAGE_TRANSFER, std::move(packet)) { }
-
- void Read() override;
-
- Array<ObjectGuid, VOID_STORAGE_MAX_WITHDRAW> Withdrawals;
- Array<ObjectGuid, VOID_STORAGE_MAX_DEPOSIT> Deposits;
- ObjectGuid Npc;
- };
-
- class VoidStorageTransferChanges final : public ServerPacket
- {
- public:
- explicit VoidStorageTransferChanges() : ServerPacket(SMSG_VOID_STORAGE_TRANSFER_CHANGES, 0) { }
-
- WorldPacket const* Write() override;
-
- std::vector<ObjectGuid> RemovedItems;
- std::vector<VoidItem> AddedItems;
- };
-
- class SwapVoidItem final : public ClientPacket
- {
- public:
- explicit SwapVoidItem(WorldPacket&& packet) : ClientPacket(CMSG_SWAP_VOID_ITEM, std::move(packet)) { }
-
- void Read() override;
-
- ObjectGuid Npc;
- ObjectGuid VoidItemGuid;
- uint32 DstSlot = 0;
- };
-
- class VoidItemSwapResponse final : public ServerPacket
- {
- public:
- explicit VoidItemSwapResponse() : ServerPacket(SMSG_VOID_ITEM_SWAP_RESPONSE, 16 + 16 + 4 + 4) { }
-
- WorldPacket const* Write() override;
-
- ObjectGuid VoidItemA;
- ObjectGuid VoidItemB;
- uint32 VoidItemSlotA = 0;
- uint32 VoidItemSlotB = 0;
- };
- }
-}
-
-#endif // TRINITYCORE_VOID_STORAGE_PACKETS_H
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index ec6d0792dbc..23add3e1448 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -195,10 +195,9 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_AUTH_CONTINUED_SESSION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess);
DEFINE_HANDLER(CMSG_AUTH_SESSION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess);
DEFINE_HANDLER(CMSG_AUTOBANK_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAutoBankItemOpcode);
- 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_DEPOSIT_CHARACTER_BANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoDepositCharacterBank);
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);
@@ -251,11 +250,9 @@ 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_ACCOUNT_BANK_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyBankTab);
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);
- DEFINE_HANDLER(CMSG_BUY_REAGENT_BANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyReagentBankOpcode);
DEFINE_HANDLER(CMSG_CAGE_BATTLE_PET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCageBattlePet);
DEFINE_HANDLER(CMSG_CALENDAR_ADD_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarAddEvent);
DEFINE_HANDLER(CMSG_CALENDAR_COMMUNITY_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarCommunityInvite);
@@ -288,7 +285,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_CAST_SPELL, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleCastSpellOpcode);
DEFINE_HANDLER(CMSG_CHALLENGE_MODE_REQUEST_LEADERS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CHANGE_BAG_SLOT_FLAG, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChangeBagSlotFlag);
- DEFINE_HANDLER(CMSG_CHANGE_BANK_BAG_SLOT_FLAG, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChangeBankBagSlotFlag);
+ DEFINE_HANDLER(CMSG_CHANGE_BANK_BAG_SLOT_FLAG, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CHANGE_MONUMENT_APPEARANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CHANGE_REALM_TICKET, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlenetChangeRealmTicket);
DEFINE_HANDLER(CMSG_CHANGE_SUB_GROUP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSubGroupOpcode);
@@ -426,7 +423,6 @@ void OpcodeTable::InitializeClientOpcodes()
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);
DEFINE_HANDLER(CMSG_DESTROY_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleDestroyItemOpcode);
DEFINE_HANDLER(CMSG_DF_BOOT_PLAYER_VOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgSetBootVoteOpcode);
DEFINE_HANDLER(CMSG_DF_CONFIRM_EXPAND_SEARCH, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
@@ -557,6 +553,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_INITIATE_ROLE_POLL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInitiateRolePoll);
DEFINE_HANDLER(CMSG_INITIATE_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInitiateTradeOpcode);
DEFINE_HANDLER(CMSG_INSPECT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleInspectOpcode);
+ DEFINE_HANDLER(CMSG_INSTANCE_ABANDON_VOTE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_INSTANCE_LOCK_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInstanceLockResponse);
DEFINE_HANDLER(CMSG_ISLAND_QUEUE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_ITEM_PURCHASE_REFUND, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleItemRefund);
@@ -795,7 +792,6 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_QUERY_SELECTED_WOW_LABS_AREA, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_QUERY_TIME, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryTimeOpcode);
DEFINE_HANDLER(CMSG_QUERY_TREASURE_PICKER, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryTreasurePicker);
- DEFINE_HANDLER(CMSG_QUERY_VOID_STORAGE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleVoidStorageQuery);
DEFINE_HANDLER(CMSG_QUERY_WOW_LABS_AREA_INFO, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_QUEST_CONFIRM_ACCEPT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestConfirmAccept);
DEFINE_HANDLER(CMSG_QUEST_GIVER_ACCEPT_QUEST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQuestgiverAcceptQuestOpcode);
@@ -951,7 +947,6 @@ void OpcodeTable::InitializeClientOpcodes()
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);
DEFINE_HANDLER(CMSG_SPECTATE_CHANGE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SPAWN_TRACKING_UPDATE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSpawnTrackingUpdate);
DEFINE_HANDLER(CMSG_SPELL_CLICK, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSpellClick);
@@ -964,6 +959,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_SPLIT_ITEM_TO_GUILD_BANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSplitItemToGuildBank);
DEFINE_HANDLER(CMSG_STAND_STATE_CHANGE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleStandStateChangeOpcode);
DEFINE_HANDLER(CMSG_START_CHALLENGE_MODE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_START_INSTANCE_ABANDON_VOTE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_START_SPECTATOR_WAR_GAME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_START_WAR_GAME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_STORE_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleStoreGuildBankItem);
@@ -979,7 +975,6 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_SWAP_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSwapItem);
DEFINE_HANDLER(CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSwapItemWithGuildBankItem);
DEFINE_HANDLER(CMSG_SWAP_SUB_GROUPS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSwapSubGroupsOpcode);
- DEFINE_HANDLER(CMSG_SWAP_VOID_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleVoidSwapItem);
DEFINE_HANDLER(CMSG_TABARD_VENDOR_ACTIVATE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTabardVendorActivateOpcode);
DEFINE_HANDLER(CMSG_TALK_TO_GOSSIP, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGossipHelloOpcode);
DEFINE_HANDLER(CMSG_TAXI_NODE_STATUS_QUERY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleTaxiNodeStatusQueryOpcode);
@@ -1007,9 +1002,8 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_UNDELETE_CHARACTER, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharUndeleteOpcode);
DEFINE_HANDLER(CMSG_UNLEARN_SKILL, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUnlearnSkillOpcode);
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_BANK_TAB_SETTINGS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateBankTabSettings);
DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateAccountData);
DEFINE_HANDLER(CMSG_UPDATE_AREA_TRIGGER_VISUAL, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUpdateAreaTriggerVisual);
DEFINE_HANDLER(CMSG_UPDATE_CLIENT_SETTINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
@@ -1032,7 +1026,6 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_VOICE_CHAT_JOIN_CHANNEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_VOICE_CHAT_LOGIN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_VOID_STORAGE_TRANSFER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleVoidStorageTransfer);
DEFINE_HANDLER(CMSG_WARDEN3_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleWardenData);
DEFINE_HANDLER(CMSG_WHO, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleWhoOpcode);
DEFINE_HANDLER(CMSG_WHO_IS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleWhoIsOpcode);
@@ -1096,12 +1089,8 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_POI_UPDATE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_SPIRIT_HEALER_TIME, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_DENIED, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_NO_CORPSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_PATH, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_SHAPE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_UNATTACH, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_CLEAR_OPPONENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
@@ -1246,6 +1235,7 @@ void OpcodeTable::InitializeServerOpcodes()
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);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_SET_LEAVER_PENALTY_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1415,7 +1405,6 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCED_DEATH_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_ANIM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
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_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FRIEND_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1599,6 +1588,10 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIAL_SETUP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INIT_WORLD_STATES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSPECT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ABANDON_VOTE_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ABANDON_VOTE_PLAYER_LEFT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ABANDON_VOTE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ABANDON_VOTE_STARTED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_END, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -1712,6 +1705,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MINIMAP_PING, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_COMPONENTED_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_CREATURE_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_VARS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MISSILE_CANCEL, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MODIFY_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOUNT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -2097,6 +2091,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_STANDING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FACTION_VISIBLE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_FLAT_SPELL_MODIFIER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_INSTANCE_LEAVER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ITEM_PURCHASE_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_LOOT_METHOD_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_MAX_WEEKLY_QUANTITY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -2210,6 +2205,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNLEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNLOAD_CHILD_MAP, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNSET_INSTANCE_LEAVER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_AADC_STATUS_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_ACCOUNT_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_ACCOUNT_DATA_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 475bf20ab3e..65ea46c0c86 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -36,2191 +36,2188 @@ constexpr uint32 UNKNOWN_OPCODE = 0xBADD; // special marker value for uninitia
enum OpcodeClient : uint32
{
- CMSG_ABANDON_NPE_RESPONSE = 0x31029A,
- CMSG_ACCEPT_GUILD_INVITE = 0x360029,
- CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x31025B,
- CMSG_ACCEPT_SOCIAL_CONTRACT = 0x360172,
- CMSG_ACCEPT_TRADE = 0x310004,
- CMSG_ACCEPT_WARGAME_INVITE = 0x36000C,
- CMSG_ACCOUNT_BANK_DEPOSIT_MONEY = 0x3102DD,
- CMSG_ACCOUNT_BANK_WITHDRAW_MONEY = 0x3102DE,
- CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x36015E,
- CMSG_ACCOUNT_STORE_BEGIN_PURCHASE_OR_REFUND = 0x3600BE,
- CMSG_ACTIVATE_SOULBIND = 0x310289,
- CMSG_ACTIVATE_TAXI = 0x32003E,
- CMSG_ADDON_LIST = 0x360004,
- CMSG_ADD_ACCOUNT_COSMETIC = 0x310170,
- CMSG_ADD_BATTLENET_FRIEND = 0x360084,
- CMSG_ADD_FRIEND = 0x3600FC,
- CMSG_ADD_IGNORE = 0x360100,
- CMSG_ADD_TOY = 0x31016F,
- CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3100B3,
- CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x31028C,
- CMSG_ADVENTURE_MAP_START_QUEST = 0x31022C,
- CMSG_ALTER_APPEARANCE = 0x32008F,
- CMSG_AREA_SPIRIT_HEALER_QUERY = 0x320043,
- CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x320044,
- CMSG_AREA_TRIGGER = 0x310086,
- CMSG_ARTIFACT_ADD_POWER = 0x310056,
- CMSG_ARTIFACT_SET_APPEARANCE = 0x310058,
- CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3100BF,
- CMSG_ATTACK_STOP = 0x31011D,
- CMSG_ATTACK_SWING = 0x31011C,
- CMSG_AUCTIONABLE_TOKEN_SELL = 0x360112,
- CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x360113,
- CMSG_AUCTION_BROWSE_QUERY = 0x320063,
- CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x32006B,
- CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x32006A,
- CMSG_AUCTION_GET_COMMODITY_QUOTE = 0x320069,
- CMSG_AUCTION_HELLO_REQUEST = 0x32005E,
- CMSG_AUCTION_LIST_BIDDED_ITEMS = 0x320067,
- CMSG_AUCTION_LIST_BUCKETS_BY_BUCKET_KEYS = 0x320068,
- CMSG_AUCTION_LIST_ITEMS_BY_BUCKET_KEY = 0x320064,
- CMSG_AUCTION_LIST_ITEMS_BY_ITEM_ID = 0x320065,
- CMSG_AUCTION_LIST_OWNED_ITEMS = 0x320066,
- CMSG_AUCTION_PLACE_BID = 0x320062,
- CMSG_AUCTION_REMOVE_ITEM = 0x320060,
- CMSG_AUCTION_REPLICATE_ITEMS = 0x320061,
- CMSG_AUCTION_SELL_COMMODITY = 0x32006C,
- CMSG_AUCTION_SELL_ITEM = 0x32005F,
- CMSG_AUCTION_SET_FAVORITE_ITEM = 0x36015F,
- CMSG_AUTH_CONTINUED_SESSION = 0x370002,
- CMSG_AUTH_SESSION = 0x370001,
- CMSG_AUTOBANK_ITEM = 0x330003,
- CMSG_AUTOBANK_REAGENT = 0x330005,
- CMSG_AUTOSTORE_BANK_ITEM = 0x330002,
- CMSG_AUTOSTORE_BANK_REAGENT = 0x330004,
- CMSG_AUTO_DEPOSIT_ACCOUNT_BANK = 0x3102E7,
- CMSG_AUTO_EQUIP_ITEM = 0x330006,
- CMSG_AUTO_EQUIP_ITEM_SLOT = 0x33000B,
- CMSG_AUTO_GUILD_BANK_ITEM = 0x32004A,
- CMSG_AUTO_STORE_BAG_ITEM = 0x330007,
- CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x320053,
- CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x310257,
- CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x310238,
- CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x310259,
- CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x310258,
- CMSG_BANKER_ACTIVATE = 0x320046,
- CMSG_BATTLEFIELD_LEAVE = 0x31001F,
- CMSG_BATTLEFIELD_LIST = 0x31002A,
- CMSG_BATTLEFIELD_PORT = 0x3200C5,
- CMSG_BATTLEMASTER_HELLO = 0x31018E,
- CMSG_BATTLEMASTER_JOIN = 0x3200BC,
- CMSG_BATTLEMASTER_JOIN_ARENA = 0x3200BD,
- CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3200C3,
- CMSG_BATTLEMASTER_JOIN_RATED_BG_BLITZ = 0x3200BF,
- CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3200BE,
- CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3200C0,
- CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x3600FF,
- CMSG_BATTLENET_REQUEST = 0x360120,
- CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x3600F9,
- CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x36013C,
- CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x3600F8,
- CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x3600EF,
- CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x360162,
- CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x3600E6,
- CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x3600E7,
- CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x360135,
- CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x360131,
- CMSG_BATTLE_PAY_START_PURCHASE = 0x3600F7,
- CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36011E,
- CMSG_BATTLE_PET_CLEAR_FANFARE = 0x2B0002,
- CMSG_BATTLE_PET_DELETE_PET = 0x36004F,
- CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x360050,
- CMSG_BATTLE_PET_MODIFY_NAME = 0x360052,
- CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x36004E,
- CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x36004D,
- CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x360057,
- CMSG_BATTLE_PET_SET_FLAGS = 0x36005A,
- CMSG_BATTLE_PET_SUMMON = 0x360053,
- CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x310090,
- CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31008F,
- CMSG_BEGIN_TRADE = 0x310001,
- CMSG_BINDER_ACTIVATE = 0x320045,
- CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3200CD,
- CMSG_BLACK_MARKET_OPEN = 0x3200CB,
- CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3200CC,
- CMSG_BONUS_ROLL = 0x31025A,
- CMSG_BUG_REPORT = 0x3600AF,
- CMSG_BUSY_TRADE = 0x310002,
- CMSG_BUY_ACCOUNT_BANK_TAB = 0x320122,
- CMSG_BUY_BACK_ITEM = 0x320037,
- CMSG_BUY_BANK_SLOT = 0x320047,
- CMSG_BUY_ITEM = 0x320036,
- CMSG_BUY_REAGENT_BANK = 0x320048,
- CMSG_CAGE_BATTLE_PET = 0x3100A3,
- CMSG_CALENDAR_ADD_EVENT = 0x3600A7,
- CMSG_CALENDAR_COMMUNITY_INVITE = 0x36009B,
- CMSG_CALENDAR_COMPLAIN = 0x3600A3,
- CMSG_CALENDAR_COPY_EVENT = 0x3600A2,
- CMSG_CALENDAR_EVENT_SIGN_UP = 0x3600A5,
- CMSG_CALENDAR_GET = 0x360099,
- CMSG_CALENDAR_GET_EVENT = 0x36009A,
- CMSG_CALENDAR_GET_NUM_PENDING = 0x3600A4,
- CMSG_CALENDAR_INVITE = 0x36009C,
- CMSG_CALENDAR_MODERATOR_STATUS = 0x3600A0,
- CMSG_CALENDAR_REMOVE_EVENT = 0x3600A1,
- CMSG_CALENDAR_REMOVE_INVITE = 0x36009D,
- CMSG_CALENDAR_RSVP = 0x36009E,
- CMSG_CALENDAR_STATUS = 0x36009F,
- CMSG_CALENDAR_UPDATE_EVENT = 0x3600A8,
- CMSG_CANCEL_AURA = 0x31005A,
- CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x320081,
- CMSG_CANCEL_CAST = 0x310176,
- CMSG_CANCEL_CHANNELLING = 0x310137,
- CMSG_CANCEL_GROWTH_AURA = 0x31013F,
- CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3100CC,
- CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x310059,
- CMSG_CANCEL_MOUNT_AURA = 0x310152,
- CMSG_CANCEL_QUEUED_SPELL = 0x31002B,
- CMSG_CANCEL_TEMP_ENCHANTMENT = 0x32008C,
- CMSG_CANCEL_TRADE = 0x310006,
- CMSG_CAN_DUEL = 0x36008C,
- CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x360130,
- CMSG_CAST_SPELL = 0x310173,
- CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x2E0002,
- CMSG_CHANGE_BAG_SLOT_FLAG = 0x310210,
- CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x310211,
- CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3101F1,
- CMSG_CHANGE_REALM_TICKET = 0x360125,
- CMSG_CHANGE_SUB_GROUP = 0x360076,
- CMSG_CHARACTER_CHECK_UPGRADE = 0x3600F2,
- CMSG_CHARACTER_RENAME_REQUEST = 0x3600ED,
- CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x3600F0,
- CMSG_CHARACTER_UPGRADE_START = 0x3600F1,
- CMSG_CHAR_CUSTOMIZE = 0x3600B6,
- CMSG_CHAR_DELETE = 0x3600C8,
- CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3600BC,
- CMSG_CHAT_ADDON_MESSAGE = 0x2D002A,
- CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x2D002B,
- CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x2D0032,
- CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x2D001F,
- CMSG_CHAT_CHANNEL_BAN = 0x2D001D,
- CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x2D0022,
- CMSG_CHAT_CHANNEL_DISPLAY_LIST = 0x2D0012,
- CMSG_CHAT_CHANNEL_INVITE = 0x2D001B,
- CMSG_CHAT_CHANNEL_KICK = 0x2D001C,
- CMSG_CHAT_CHANNEL_LIST = 0x2D0011,
- CMSG_CHAT_CHANNEL_MODERATE = 0x2D0016,
- CMSG_CHAT_CHANNEL_MODERATOR = 0x2D0017,
- CMSG_CHAT_CHANNEL_OWNER = 0x2D0015,
- CMSG_CHAT_CHANNEL_PASSWORD = 0x2D0013,
- CMSG_CHAT_CHANNEL_SET_OWNER = 0x2D0014,
- CMSG_CHAT_CHANNEL_SILENCE_ALL = 0x2D0020,
- CMSG_CHAT_CHANNEL_UNBAN = 0x2D001E,
- CMSG_CHAT_CHANNEL_UNMODERATOR = 0x2D0018,
- CMSG_CHAT_CHANNEL_UNSILENCE_ALL = 0x2D0021,
- CMSG_CHAT_DROP_CAUTIONARY_CHAT_MESSAGE = 0x2D000A,
- CMSG_CHAT_JOIN_CHANNEL = 0x2D0000,
- CMSG_CHAT_LEAVE_CHANNEL = 0x2D0001,
- CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_INSTANCE_CHAT = 0x2D0031,
- CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_PARTY = 0x2D0030,
- CMSG_CHAT_MESSAGE_AFK = 0x2D000F,
- CMSG_CHAT_MESSAGE_CHANNEL = 0x2D0007,
- CMSG_CHAT_MESSAGE_DND = 0x2D0010,
- CMSG_CHAT_MESSAGE_EMOTE = 0x2D0024,
- CMSG_CHAT_MESSAGE_GUILD = 0x2D000D,
- CMSG_CHAT_MESSAGE_INSTANCE_CHAT = 0x2D0028,
- CMSG_CHAT_MESSAGE_OFFICER = 0x2D000E,
- CMSG_CHAT_MESSAGE_PARTY = 0x2D0026,
- CMSG_CHAT_MESSAGE_RAID = 0x2D0027,
- CMSG_CHAT_MESSAGE_RAID_WARNING = 0x2D0029,
- CMSG_CHAT_MESSAGE_SAY = 0x2D0023,
- CMSG_CHAT_MESSAGE_WHISPER = 0x2D0008,
- CMSG_CHAT_MESSAGE_YELL = 0x2D0025,
- CMSG_CHAT_REGISTER_ADDON_PREFIXES = 0x2D0005,
- CMSG_CHAT_REPORT_FILTERED = 0x2D0004,
- CMSG_CHAT_REPORT_IGNORED = 0x2D0003,
- CMSG_CHAT_SEND_CAUTIONARY_CHANNEL_MESSAGE = 0x2D000B,
- CMSG_CHAT_SEND_CAUTIONARY_CHAT_MESSAGE = 0x2D0009,
- CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x2D0006,
- CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x36006F,
- CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x31010E,
- CMSG_CHOICE_RESPONSE = 0x31017B,
- CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x310288,
- CMSG_CLAIM_WEEKLY_REWARD = 0x310265,
- CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3102C2,
- CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3100C3,
- CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x3102C4,
- CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x3102C1,
- CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3102C0,
- CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x3102C5,
- CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3100C2,
- CMSG_CLEAR_NEW_APPEARANCE = 0x2B0005,
- CMSG_CLEAR_RAID_MARKER = 0x310052,
- CMSG_CLEAR_TRADE_ITEM = 0x310008,
- CMSG_CLIENT_PORT_GRAVEYARD = 0x3200C7,
- CMSG_CLOSE_INTERACTION = 0x320025,
- CMSG_CLOSE_QUEST_CHOICE = 0x31017C,
- CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x310290,
- CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x3102C6,
- CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x360147,
- CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x360145,
- CMSG_CLUB_FINDER_POST = 0x360142,
- CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x360149,
- CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x360143,
- CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x360144,
- CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x360148,
- CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x36014A,
- CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x360146,
- CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x360165,
- CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x360122,
- CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x36005D,
- CMSG_COMMENTATOR_ENABLE = 0x36001C,
- CMSG_COMMENTATOR_ENTER_INSTANCE = 0x360020,
- CMSG_COMMENTATOR_EXIT_INSTANCE = 0x360021,
- CMSG_COMMENTATOR_GET_MAP_INFO = 0x36001D,
- CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x36001F,
- CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x36001E,
- CMSG_COMMENTATOR_SPECTATE = 0x360163,
- CMSG_COMMENTATOR_START_WARGAME = 0x36001B,
- CMSG_COMMERCE_TOKEN_GET_COUNT = 0x360110,
- CMSG_COMMERCE_TOKEN_GET_LOG = 0x36011A,
- CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x360111,
- CMSG_COMPLAINT = 0x360096,
- CMSG_COMPLETE_CINEMATIC = 0x3200E5,
- CMSG_COMPLETE_MOVIE = 0x320077,
- CMSG_CONFIRM_ARTIFACT_RESPEC = 0x310057,
- CMSG_CONFIRM_PROFESSION_RESPEC = 0x3100C6,
- CMSG_CONFIRM_RESPEC_WIPE = 0x3100C5,
- CMSG_CONNECT_TO_FAILED = 0x360000,
- CMSG_CONSUMABLE_TOKEN_BUY = 0x360115,
- CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x360116,
- CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x360114,
- CMSG_CONSUMABLE_TOKEN_REDEEM = 0x360118,
- CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x360119,
- CMSG_CONTENT_TRACKING_START_TRACKING = 0x3102D6,
- CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x3102D7,
- CMSG_CONTRIBUTION_CONTRIBUTE = 0x3200FA,
- CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x3200FB,
- CMSG_CONVERSATION_CINEMATIC_READY = 0x3200E7,
- CMSG_CONVERSATION_LINE_STARTED = 0x3200E6,
- CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT = 0x3102E6,
- CMSG_CONVERT_RAID = 0x360078,
- CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x32010E,
- CMSG_CRAFTING_ORDER_CANCEL = 0x32011A,
- CMSG_CRAFTING_ORDER_CLAIM = 0x320117,
- CMSG_CRAFTING_ORDER_CREATE = 0x320113,
- CMSG_CRAFTING_ORDER_FULFILL = 0x320119,
- CMSG_CRAFTING_ORDER_GET_NPC_REWARD_INFO = 0x320116,
- CMSG_CRAFTING_ORDER_LIST_CRAFTER_ORDERS = 0x320115,
- CMSG_CRAFTING_ORDER_LIST_MY_ORDERS = 0x320114,
- CMSG_CRAFTING_ORDER_REJECT = 0x32011B,
- CMSG_CRAFTING_ORDER_RELEASE = 0x320118,
- CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x32011C,
- CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x32011D,
- CMSG_CREATE_CHARACTER = 0x36006E,
- CMSG_CREATE_SHIPMENT = 0x3101DA,
- CMSG_DB_QUERY_BULK = 0x360010,
- CMSG_DECLINE_GUILD_INVITES = 0x3200B9,
- CMSG_DECLINE_PETITION = 0x3200D4,
- CMSG_DELETE_EQUIPMENT_SET = 0x3200A5,
- CMSG_DELVE_TELEPORT_OUT = 0x320129,
- CMSG_DEL_FRIEND = 0x3600FD,
- CMSG_DEL_IGNORE = 0x360101,
- CMSG_DEPOSIT_REAGENT_BANK = 0x31021A,
- CMSG_DESTROY_ITEM = 0x310169,
- CMSG_DF_BOOT_PLAYER_VOTE = 0x360044,
- CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x360036,
- CMSG_DF_GET_JOIN_STATUS = 0x360042,
- CMSG_DF_GET_SYSTEM_INFO = 0x360041,
- CMSG_DF_JOIN = 0x360037,
- CMSG_DF_LEAVE = 0x360040,
- CMSG_DF_PROPOSAL_RESPONSE = 0x360035,
- CMSG_DF_READY_CHECK_RESPONSE = 0x360048,
- CMSG_DF_SET_ROLES = 0x360043,
- CMSG_DF_TELEPORT = 0x360045,
- CMSG_DISCARDED_TIME_SYNC_ACKS = 0x34005E,
- CMSG_DISMISS_CRITTER = 0x320093,
- CMSG_DO_COUNTDOWN = 0x360141,
- CMSG_DO_MASTER_LOOT_ROLL = 0x3100CB,
- CMSG_DO_READY_CHECK = 0x36005E,
- CMSG_DUEL_RESPONSE = 0x32007C,
- CMSG_EJECT_PASSENGER = 0x310103,
- CMSG_EMOTE = 0x3200E1,
- CMSG_ENABLE_NAGLE = 0x370007,
- CMSG_ENABLE_TAXI_NODE = 0x32003C,
- CMSG_ENGINE_SURVEY = 0x36010F,
- CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x370003,
- CMSG_ENUM_CHARACTERS = 0x360014,
- CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x360109,
- CMSG_FAR_SIGHT = 0x320082,
- CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31005E,
- CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31005D,
- CMSG_GAME_OBJ_REPORT_USE = 0x320089,
- CMSG_GAME_OBJ_USE = 0x320088,
- CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3101D5,
- CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x3101BB,
- CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x3101A8,
- CMSG_GARRISON_CHECK_UPGRADEABLE = 0x31020C,
- CMSG_GARRISON_COMPLETE_MISSION = 0x3101FE,
- CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x3101D6,
- CMSG_GARRISON_GENERATE_RECRUITS = 0x3101BE,
- CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3101CD,
- CMSG_GARRISON_GET_MAP_DATA = 0x3101D4,
- CMSG_GARRISON_GET_MISSION_REWARD = 0x310230,
- CMSG_GARRISON_LEARN_TALENT = 0x3101C9,
- CMSG_GARRISON_MISSION_BONUS_ROLL = 0x310200,
- CMSG_GARRISON_PURCHASE_BUILDING = 0x3101A4,
- CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3101C0,
- CMSG_GARRISON_REMOVE_FOLLOWER = 0x3101F5,
- CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x3101BC,
- CMSG_GARRISON_RENAME_FOLLOWER = 0x3101BD,
- CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x3101A3,
- CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3101D8,
- CMSG_GARRISON_RESEARCH_TALENT = 0x3101C1,
- CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x3101A5,
- CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x3101B9,
- CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x3101B1,
- CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3101BF,
- CMSG_GARRISON_SOCKET_TALENT = 0x31029D,
- CMSG_GARRISON_START_MISSION = 0x3101FD,
- CMSG_GARRISON_SWAP_BUILDINGS = 0x3101A9,
- CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x360013,
- CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x3600E1,
- CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x36015D,
- CMSG_GET_GARRISON_INFO = 0x31019E,
- CMSG_GET_ITEM_PURCHASE_DATA = 0x3200CF,
- CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x3101D9,
- CMSG_GET_MIRROR_IMAGE_DATA = 0x31016D,
- CMSG_GET_PVP_OPTIONS_ENABLED = 0x36001A,
- CMSG_GET_RAF_ACCOUNT_INFO = 0x36014B,
- CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA = 0x36018E,
- CMSG_GET_REMAINING_GAME_TIME = 0x360117,
- CMSG_GET_TROPHY_LIST = 0x3101EE,
- CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36010B,
- CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36011C,
- CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36011D,
- CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3600BA,
- CMSG_GM_TICKET_GET_CASE_STATUS = 0x3600B9,
- CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3600B8,
- CMSG_GOSSIP_REFRESH_OPTIONS = 0x32010D,
- CMSG_GOSSIP_SELECT_OPTION = 0x320026,
- CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x2F0020,
- CMSG_GUILD_ADD_RANK = 0x2F0005,
- CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x2F0002,
- CMSG_GUILD_BANK_ACTIVATE = 0x320049,
- CMSG_GUILD_BANK_BUY_TAB = 0x320057,
- CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x320059,
- CMSG_GUILD_BANK_LOG_QUERY = 0x2F0019,
- CMSG_GUILD_BANK_QUERY_TAB = 0x320056,
- CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x2F001A,
- CMSG_GUILD_BANK_SET_TAB_TEXT = 0x2F001D,
- CMSG_GUILD_BANK_TEXT_QUERY = 0x2F001E,
- CMSG_GUILD_BANK_UPDATE_TAB = 0x320058,
- CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x32005A,
- CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x2F0017,
- CMSG_GUILD_CHANGE_NAME_REQUEST = 0x2F0018,
- CMSG_GUILD_DECLINE_INVITATION = 0x36002A,
- CMSG_GUILD_DELETE = 0x2F0009,
- CMSG_GUILD_DELETE_RANK = 0x2F0006,
- CMSG_GUILD_DEMOTE_MEMBER = 0x2F0001,
- CMSG_GUILD_EVENT_LOG_QUERY = 0x2F001C,
- CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x2F0012,
- CMSG_GUILD_GET_RANKS = 0x2F000E,
- CMSG_GUILD_GET_ROSTER = 0x2F0014,
- CMSG_GUILD_INVITE_BY_NAME = 0x360034,
- CMSG_GUILD_LEAVE = 0x2F0003,
- CMSG_GUILD_NEWS_UPDATE_STICKY = 0x2F000F,
- CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x2F0004,
- CMSG_GUILD_PERMISSIONS_QUERY = 0x2F001B,
- CMSG_GUILD_PROMOTE_MEMBER = 0x2F0000,
- CMSG_GUILD_QUERY_MEMBERS_FOR_RECIPE = 0x2F000C,
- CMSG_GUILD_QUERY_MEMBER_RECIPES = 0x2F000A,
- CMSG_GUILD_QUERY_NEWS = 0x2F000D,
- CMSG_GUILD_QUERY_RECIPES = 0x2F000B,
- CMSG_GUILD_REPLACE_GUILD_MASTER = 0x2F001F,
- CMSG_GUILD_REQUEST_RENAME = 0x2F0023,
- CMSG_GUILD_REQUEST_RENAME_NAME_CHECK = 0x2F0022,
- CMSG_GUILD_REQUEST_RENAME_REFUND = 0x2F0024,
- CMSG_GUILD_REQUEST_RENAME_STATUS = 0x2F0021,
- CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x2F0010,
- CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x2F0011,
- CMSG_GUILD_SET_GUILD_MASTER = 0x3600F4,
- CMSG_GUILD_SET_MEMBER_NOTE = 0x2F0013,
- CMSG_GUILD_SET_RANK_PERMISSIONS = 0x2F0008,
- CMSG_GUILD_SHIFT_RANK = 0x2F0007,
- CMSG_GUILD_UPDATE_INFO_TEXT = 0x2F0016,
- CMSG_GUILD_UPDATE_MOTD_TEXT = 0x2F0015,
- CMSG_HEARTH_AND_RESURRECT = 0x3200A1,
- CMSG_HIDE_QUEST_CHOICE = 0x31017D,
- CMSG_HOTFIX_REQUEST = 0x360011,
- CMSG_IGNORE_TRADE = 0x310003,
- CMSG_INITIATE_ROLE_POLL = 0x360006,
- CMSG_INITIATE_TRADE = 0x310000,
- CMSG_INSPECT = 0x3200C9,
- CMSG_INSTANCE_LOCK_RESPONSE = 0x3200A6,
- CMSG_ISLAND_QUEUE = 0x310261,
- CMSG_ITEM_PURCHASE_REFUND = 0x3200D0,
- CMSG_ITEM_TEXT_QUERY = 0x31020D,
- CMSG_JOIN_PET_BATTLE_QUEUE = 0x31008D,
- CMSG_JOIN_RATED_BATTLEGROUND = 0x310025,
- CMSG_KEEP_ALIVE = 0x3600A9,
- CMSG_KEYBOUND_OVERRIDE = 0x3100E1,
- CMSG_LATENCY_REPORT = 0x37000D,
- CMSG_LEARN_PVP_TALENTS = 0x3200F9,
- CMSG_LEARN_TALENTS = 0x3200F7,
- CMSG_LEAVE_GROUP = 0x360073,
- CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31008E,
- CMSG_LFG_LIST_APPLY_TO_GROUP = 0x36003B,
- CMSG_LFG_LIST_CANCEL_APPLICATION = 0x36003C,
- CMSG_LFG_LIST_DECLINE_APPLICANT = 0x36003D,
- CMSG_LFG_LIST_GET_STATUS = 0x360039,
- CMSG_LFG_LIST_INVITE_APPLICANT = 0x36003E,
- CMSG_LFG_LIST_INVITE_RESPONSE = 0x36003F,
- CMSG_LFG_LIST_JOIN = 0x310255,
- CMSG_LFG_LIST_LEAVE = 0x360038,
- CMSG_LFG_LIST_SEARCH = 0x36003A,
- CMSG_LFG_LIST_UPDATE_REQUEST = 0x310256,
- CMSG_LIST_INVENTORY = 0x320033,
- CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x3600E4,
- CMSG_LIVE_REGION_CHARACTER_COPY = 0x3600E3,
- CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x3600E2,
- CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x3600E5,
- CMSG_LOADING_SCREEN_NOTIFY = 0x360024,
- CMSG_LOAD_SELECTED_TROPHY = 0x3101EF,
- CMSG_LOBBY_MATCHMAKER_ABANDON_QUEUE = 0x360170,
- CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x360167,
- CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x360179,
- CMSG_LOBBY_MATCHMAKER_ENTER_QUEUE = 0x36016E,
- CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x36016A,
- CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x360166,
- CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x360169,
- CMSG_LOBBY_MATCHMAKER_QUEUE_PROPSAL_RESPONSE = 0x36016F,
- CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x360168,
- CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x36016B,
- CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x36016C,
- CMSG_LOGOUT_CANCEL = 0x320072,
- CMSG_LOGOUT_INSTANT = 0x320073,
- CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x320121,
- CMSG_LOGOUT_REQUEST = 0x320071,
- CMSG_LOG_DISCONNECT = 0x370005,
- CMSG_LOG_STREAMING_ERROR = 0x370009,
- CMSG_LOOT_ITEM = 0x3100C9,
- CMSG_LOOT_MONEY = 0x3100C8,
- CMSG_LOOT_RELEASE = 0x3100CD,
- CMSG_LOOT_ROLL = 0x3100CE,
- CMSG_LOOT_UNIT = 0x3100C7,
- CMSG_LOW_LEVEL_RAID1 = 0x3600CC,
- CMSG_LOW_LEVEL_RAID2 = 0x3200AD,
- CMSG_MAIL_CREATE_TEXT_ITEM = 0x3200DB,
- CMSG_MAIL_DELETE = 0x3100E3,
- CMSG_MAIL_GET_LIST = 0x3200D6,
- CMSG_MAIL_MARK_AS_READ = 0x3200DA,
- CMSG_MAIL_RETURN_TO_SENDER = 0x36007F,
- CMSG_MAIL_TAKE_ITEM = 0x3200D8,
- CMSG_MAIL_TAKE_MONEY = 0x3200D7,
- CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3100E4,
- CMSG_MASTER_LOOT_ITEM = 0x3100CA,
- CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x320054,
- CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x320051,
- CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x32004F,
- CMSG_MINIMAP_PING = 0x360075,
- CMSG_MISSILE_TRAJECTORY_COLLISION = 0x310036,
- CMSG_MOUNT_CLEAR_FANFARE = 0x2B0003,
- CMSG_MOUNT_SET_FAVORITE = 0x36005C,
- CMSG_MOUNT_SPECIAL_ANIM = 0x310153,
- CMSG_MOVE_ADD_IMPULSE_ACK = 0x34006D,
- CMSG_MOVE_APPLY_INERTIA_ACK = 0x34006B,
- CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x340031,
- CMSG_MOVE_CHANGE_TRANSPORT = 0x34004C,
- CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x340051,
- CMSG_MOVE_COLLISION_DISABLE_ACK = 0x340056,
- CMSG_MOVE_COLLISION_ENABLE_ACK = 0x340057,
- CMSG_MOVE_DISMISS_VEHICLE = 0x340050,
- CMSG_MOVE_DOUBLE_JUMP = 0x340007,
- CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK = 0x34003A,
- CMSG_MOVE_ENABLE_FULL_SPEED_TURNING_ACK = 0x340083,
- CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x340040,
- CMSG_MOVE_FALL_LAND = 0x340017,
- CMSG_MOVE_FALL_RESET = 0x340035,
- CMSG_MOVE_FEATHER_FALL_ACK = 0x340038,
- CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x34004B,
- CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x34004A,
- CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x34004F,
- CMSG_MOVE_FORCE_ROOT_ACK = 0x34002A,
- CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x340028,
- CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x340027,
- CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK = 0x34003E,
- CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK = 0x340029,
- CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x34003F,
- CMSG_MOVE_FORCE_UNROOT_ACK = 0x34002B,
- CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK = 0x34003D,
- CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x340052,
- CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x340053,
- CMSG_MOVE_GUILD_BANK_ITEM = 0x32004E,
- CMSG_MOVE_HEARTBEAT = 0x34002C,
- CMSG_MOVE_HOVER_ACK = 0x34002F,
- CMSG_MOVE_INERTIA_DISABLE_ACK = 0x340054,
- CMSG_MOVE_INERTIA_ENABLE_ACK = 0x340055,
- CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x340063,
- CMSG_MOVE_JUMP = 0x340006,
- CMSG_MOVE_KNOCK_BACK_ACK = 0x34002E,
- CMSG_MOVE_REMOVE_INERTIA_ACK = 0x34006C,
- CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x340033,
- CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x340032,
- CMSG_MOVE_SET_ADV_FLY = 0x34006F,
- CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK = 0x340077,
- CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK = 0x340072,
- CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK = 0x340078,
- CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK = 0x340075,
- CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK = 0x340076,
- CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK = 0x34007F,
- CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK = 0x340074,
- CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK = 0x340073,
- CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK = 0x34007D,
- CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK = 0x340079,
- CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK = 0x34007A,
- CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK = 0x34007C,
- CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK = 0x34007B,
- CMSG_MOVE_SET_CAN_ADV_FLY_ACK = 0x34006E,
- CMSG_MOVE_SET_CAN_DRIVE_ACK = 0x340070,
- CMSG_MOVE_SET_CAN_FLY_ACK = 0x340043,
- CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x340041,
- CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x340058,
- CMSG_MOVE_SET_FACING = 0x340025,
- CMSG_MOVE_SET_FACING_HEARTBEAT = 0x34007E,
- CMSG_MOVE_SET_FLY = 0x340045,
- CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK = 0x340042,
- CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x34005F,
- CMSG_MOVE_SET_PITCH = 0x340026,
- CMSG_MOVE_SET_RUN_MODE = 0x34000E,
- CMSG_MOVE_SET_TURN_RATE_CHEAT = 0x340022,
- CMSG_MOVE_SET_VEHICLE_REC_ID_ACK = 0x340030,
- CMSG_MOVE_SET_WALK_MODE = 0x34000F,
- CMSG_MOVE_SPLINE_DONE = 0x340034,
- CMSG_MOVE_START_ASCEND = 0x340046,
- CMSG_MOVE_START_BACKWARD = 0x340001,
- CMSG_MOVE_START_DESCEND = 0x34004D,
- CMSG_MOVE_START_DRIVE_FORWARD = 0x340071,
- CMSG_MOVE_START_FORWARD = 0x340000,
- CMSG_MOVE_START_PITCH_DOWN = 0x34000C,
- CMSG_MOVE_START_PITCH_UP = 0x34000B,
- CMSG_MOVE_START_STRAFE_LEFT = 0x340003,
- CMSG_MOVE_START_STRAFE_RIGHT = 0x340004,
- CMSG_MOVE_START_SWIM = 0x340018,
- CMSG_MOVE_START_TURN_LEFT = 0x340008,
- CMSG_MOVE_START_TURN_RIGHT = 0x340009,
- CMSG_MOVE_STOP = 0x340002,
- CMSG_MOVE_STOP_ASCEND = 0x340047,
- CMSG_MOVE_STOP_PITCH = 0x34000D,
- CMSG_MOVE_STOP_STRAFE = 0x340005,
- CMSG_MOVE_STOP_SWIM = 0x340019,
- CMSG_MOVE_STOP_TURN = 0x34000A,
- CMSG_MOVE_TELEPORT_ACK = 0x340016,
- CMSG_MOVE_TIME_SKIPPED = 0x340037,
- CMSG_MOVE_UPDATE_FALL_SPEED = 0x340036,
- CMSG_MOVE_WATER_WALK_ACK = 0x340039,
- CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x2E0001,
- CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x310083,
- CMSG_NEXT_CINEMATIC_CAMERA = 0x3200E4,
- CMSG_OBJECT_UPDATE_FAILED = 0x31002C,
- CMSG_OBJECT_UPDATE_RESCUED = 0x31002D,
- CMSG_OFFER_PETITION = 0x310287,
- CMSG_OPENING_CINEMATIC = 0x3200E3,
- CMSG_OPEN_ITEM = 0x31020E,
- CMSG_OPEN_MISSION_NPC = 0x3101CF,
- CMSG_OPEN_SHIPMENT_NPC = 0x3101D7,
- CMSG_OPEN_TRADESKILL_NPC = 0x3101E2,
- CMSG_OPT_OUT_OF_LOOT = 0x320090,
- CMSG_OVERRIDE_SCREEN_FLASH = 0x3200BA,
- CMSG_PARTY_INVITE = 0x360030,
- CMSG_PARTY_INVITE_RESPONSE = 0x360032,
- CMSG_PARTY_UNINVITE = 0x360071,
- CMSG_PERFORM_ITEM_INTERACTION = 0x3100EC,
- CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x3102AF,
- CMSG_PERKS_PROGRAM_REQUEST_CART_CHECKOUT = 0x3102B2,
- CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x2B0012,
- CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3102B1,
- CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3102B3,
- CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3102B4,
- CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3102B0,
- CMSG_PETITION_BUY = 0x32005C,
- CMSG_PETITION_RENAME_GUILD = 0x3600F5,
- CMSG_PETITION_SHOW_LIST = 0x32005B,
- CMSG_PETITION_SHOW_SIGNATURES = 0x32005D,
- CMSG_PET_ABANDON = 0x32001E,
- CMSG_PET_ABANDON_BY_NUMBER = 0x32001F,
- CMSG_PET_ACTION = 0x32001C,
- CMSG_PET_BATTLE_FINAL_NOTIFY = 0x310092,
- CMSG_PET_BATTLE_INPUT = 0x36006B,
- CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3100E2,
- CMSG_PET_BATTLE_QUIT_NOTIFY = 0x310091,
- CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x36006C,
- CMSG_PET_BATTLE_REQUEST_PVP = 0x31008B,
- CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31008C,
- CMSG_PET_BATTLE_REQUEST_WILD = 0x310089,
- CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x310093,
- CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31008A,
- CMSG_PET_CANCEL_AURA = 0x320020,
- CMSG_PET_CAST_SPELL = 0x310172,
- CMSG_PET_RENAME = 0x3600AE,
- CMSG_PET_SET_ACTION = 0x32001B,
- CMSG_PET_SPELL_AUTOCAST = 0x320021,
- CMSG_PET_STOP_ATTACK = 0x32001D,
- CMSG_PING = 0x370004,
- CMSG_PLAYER_LOGIN = 0x360016,
- CMSG_PUSH_QUEST_TO_PARTY = 0x320031,
- CMSG_PVP_LOG_DATA = 0x310028,
- CMSG_QUERY_BATTLE_PET_NAME = 0x310146,
- CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x36008A,
- CMSG_QUERY_CORPSE_TRANSPORT = 0x36008B,
- CMSG_QUERY_COUNTDOWN_TIMER = 0x310055,
- CMSG_QUERY_CREATURE = 0x310140,
- CMSG_QUERY_GAME_OBJECT = 0x310141,
- CMSG_QUERY_GARRISON_PET_NAME = 0x310147,
- CMSG_QUERY_GUILD_INFO = 0x3600B4,
- CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x32009A,
- CMSG_QUERY_NEXT_MAIL_TIME = 0x3200D9,
- CMSG_QUERY_NPC_TEXT = 0x310142,
- CMSG_QUERY_PAGE_TEXT = 0x310144,
- CMSG_QUERY_PETITION = 0x310148,
- CMSG_QUERY_PET_NAME = 0x310145,
- CMSG_QUERY_PLAYER_NAMES = 0x37000E,
- CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x37000C,
- CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x37000B,
- CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x310021,
- CMSG_QUERY_QUEST_INFO = 0x310143,
- CMSG_QUERY_QUEST_ITEM_USABILITY = 0x310022,
- CMSG_QUERY_REALM_NAME = 0x3600B3,
- CMSG_QUERY_SCENARIO_POI = 0x360080,
- CMSG_QUERY_SELECTED_WOW_LABS_AREA = 0x3102EB,
- CMSG_QUERY_TIME = 0x320070,
- CMSG_QUERY_TREASURE_PICKER = 0x310233,
- CMSG_QUERY_VOID_STORAGE = 0x31004E,
- CMSG_QUERY_WOW_LABS_AREA_INFO = 0x3102EC,
- CMSG_QUEST_CONFIRM_ACCEPT = 0x320030,
- CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x32002A,
- CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x32002C,
- CMSG_QUEST_GIVER_CLOSE_QUEST = 0x3200EA,
- CMSG_QUEST_GIVER_COMPLETE_QUEST = 0x32002B,
- CMSG_QUEST_GIVER_HELLO = 0x320028,
- CMSG_QUEST_GIVER_QUERY_QUEST = 0x320029,
- CMSG_QUEST_GIVER_REQUEST_REWARD = 0x32002D,
- CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x32002F,
- CMSG_QUEST_GIVER_STATUS_QUERY = 0x32002E,
- CMSG_QUEST_LOG_REMOVE_QUEST = 0x3200CE,
- CMSG_QUEST_POI_QUERY = 0x3600DB,
- CMSG_QUEST_PUSH_RESULT = 0x320032,
- CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x310279,
- CMSG_QUEST_SESSION_REQUEST_START = 0x310278,
- CMSG_QUEST_SESSION_REQUEST_STOP = 0x360156,
- CMSG_QUEUED_MESSAGES_END = 0x370008,
- CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x36012E,
- CMSG_QUICK_JOIN_REQUEST_INVITE = 0x36012D,
- CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x36015B,
- CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x36012C,
- CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x36012B,
- CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x32009E,
- CMSG_RAF_CLAIM_NEXT_REWARD = 0x36014C,
- CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x36014E,
- CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x36014D,
- CMSG_RANDOM_ROLL = 0x36007E,
- CMSG_READY_CHECK_RESPONSE = 0x36005F,
- CMSG_READ_ITEM = 0x31020F,
- CMSG_RECLAIM_CORPSE = 0x320075,
- CMSG_REMOVE_NEW_ITEM = 0x310237,
- CMSG_REMOVE_RAF_RECRUIT = 0x36014F,
- CMSG_REORDER_CHARACTERS = 0x360015,
- CMSG_REPAIR_ITEM = 0x320086,
- CMSG_REPLACE_TROPHY = 0x3101F0,
- CMSG_REPOP_REQUEST = 0x3200C6,
- CMSG_REPORT_PVP_PLAYER_AFK = 0x32008E,
- CMSG_REPORT_SERVER_LAG = 0x310271,
- CMSG_REPORT_STUCK_IN_COMBAT = 0x310272,
- CMSG_REQUEST_ACCOUNT_DATA = 0x3600C0,
- CMSG_REQUEST_AREA_POI_UPDATE = 0x310235,
- CMSG_REQUEST_BATTLEFIELD_STATUS = 0x360008,
- CMSG_REQUEST_CEMETERY_LIST = 0x310023,
- CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3600B5,
- CMSG_REQUEST_COVENANT_CALLINGS = 0x310263,
- CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x3200CA,
- CMSG_REQUEST_CURRENCY_DATA_FOR_ACCOUNT_CHARACTERS = 0x2B0019,
- CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x31029C,
- CMSG_REQUEST_GUILD_PARTY_STATE = 0x310054,
- CMSG_REQUEST_GUILD_REWARDS_LIST = 0x310053,
- CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x310273,
- CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x31017E,
- CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3100B7,
- CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3100B8,
- CMSG_REQUEST_PARTY_ELIGIBILITY_FOR_DELVE_TIERS = 0x3102EA,
- CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x360023,
- CMSG_REQUEST_PARTY_MEMBER_STATS = 0x36007D,
- CMSG_REQUEST_PET_INFO = 0x320022,
- CMSG_REQUEST_PLAYED_TIME = 0x31014B,
- CMSG_REQUEST_PVP_REWARDS = 0x310041,
- CMSG_REQUEST_RAID_INFO = 0x3600F6,
- CMSG_REQUEST_RATED_PVP_INFO = 0x36000F,
- CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x360191,
- CMSG_REQUEST_SCHEDULED_AREA_POI_UPDATE = 0x310236,
- CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x310042,
- CMSG_REQUEST_STABLED_PETS = 0x320023,
- CMSG_REQUEST_STORE_FRONT_INFO_UPDATE = 0x2B001E,
- CMSG_REQUEST_VEHICLE_EXIT = 0x3100FE,
- CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x310100,
- CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3100FF,
- CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x310101,
- CMSG_REQUEST_WEEKLY_REWARDS = 0x310266,
- CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x310234,
- CMSG_RESET_CHALLENGE_MODE = 0x3100B5,
- CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3100B6,
- CMSG_RESET_INSTANCES = 0x360092,
- CMSG_RESURRECT_RESPONSE = 0x3600AD,
- CMSG_REVERT_MONUMENT_APPEARANCE = 0x3101F2,
- CMSG_RIDE_VEHICLE_INTERACT = 0x310102,
- CMSG_RPE_RESET_CHARACTER = 0x36017C,
- CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x360176,
- CMSG_SAVE_CUF_PROFILES = 0x310037,
- CMSG_SAVE_EQUIPMENT_SET = 0x3200A4,
- CMSG_SAVE_GUILD_EMBLEM = 0x310183,
- CMSG_SAVE_PERSONAL_EMBLEM = 0x310184,
- CMSG_SCENE_PLAYBACK_CANCELED = 0x3100DE,
- CMSG_SCENE_PLAYBACK_COMPLETE = 0x3100DD,
- CMSG_SCENE_TRIGGER_EVENT = 0x3100DF,
- CMSG_SEAMLESS_TRANSFER_COMPLETE = 0x3102D9,
- CMSG_SELECT_WOW_LABS_AREA = 0x3102ED,
- CMSG_SELF_RES = 0x3200D1,
- CMSG_SELL_ALL_JUNK_ITEMS = 0x320035,
- CMSG_SELL_ITEM = 0x320034,
- CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x360124,
- CMSG_SEND_CONTACT_LIST = 0x3600FB,
- CMSG_SEND_MAIL = 0x360026,
- CMSG_SEND_PING_UNIT = 0x3102DB,
- CMSG_SEND_PING_WORLD_POINT = 0x3102DC,
- CMSG_SEND_TEXT_EMOTE = 0x320019,
- CMSG_SERVER_TIME_OFFSET_REQUEST = 0x3600C7,
- CMSG_SETUP_WARBAND_GROUPS = 0x36018A,
- CMSG_SET_ACTION_BAR_TOGGLES = 0x3200D2,
- CMSG_SET_ACTION_BUTTON = 0x360060,
- CMSG_SET_ACTIVE_MOVER = 0x340059,
- CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x310191,
- CMSG_SET_ASSISTANT_LEADER = 0x360079,
- CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x310212,
- CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x310213,
- CMSG_SET_BANK_AUTOSORT_DISABLED = 0x310214,
- CMSG_SET_CONTACT_NOTES = 0x3600FE,
- CMSG_SET_CURRENCY_FLAGS = 0x310015,
- CMSG_SET_DIFFICULTY_ID = 0x3100E0,
- CMSG_SET_DUNGEON_DIFFICULTY = 0x3600AC,
- CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x31013A,
- CMSG_SET_EVERYONE_IS_ASSISTANT = 0x360046,
- CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x36012F,
- CMSG_SET_FACTION_AT_WAR = 0x320078,
- CMSG_SET_FACTION_INACTIVE = 0x32007A,
- CMSG_SET_FACTION_NOT_AT_WAR = 0x320079,
- CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x310065,
- CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x310216,
- CMSG_SET_LOOT_METHOD = 0x360072,
- CMSG_SET_LOOT_SPECIALIZATION = 0x3200DF,
- CMSG_SET_PARTY_ASSIGNMENT = 0x36007B,
- CMSG_SET_PARTY_LEADER = 0x360074,
- CMSG_SET_PET_FAVORITE = 0x310012,
- CMSG_SET_PET_SLOT = 0x310011,
- CMSG_SET_PET_SPECIALIZATION = 0x310013,
- CMSG_SET_PLAYER_DECLINED_NAMES = 0x3600B2,
- CMSG_SET_PREFERRED_CEMETERY = 0x310024,
- CMSG_SET_PVP = 0x310188,
- CMSG_SET_RAID_DIFFICULTY = 0x360107,
- CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x360047,
- CMSG_SET_ROLE = 0x360005,
- CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3600B0,
- CMSG_SET_SELECTION = 0x3200C8,
- CMSG_SET_SHEATHED = 0x32001A,
- CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x310215,
- CMSG_SET_TAXI_BENCHMARK_MODE = 0x32008D,
- CMSG_SET_TITLE = 0x310151,
- CMSG_SET_TRADE_CURRENCY = 0x31000A,
- CMSG_SET_TRADE_GOLD = 0x310009,
- CMSG_SET_TRADE_ITEM = 0x310007,
- CMSG_SET_USING_PARTY_GARRISON = 0x3101D1,
- CMSG_SET_WAR_MODE = 0x310189,
- CMSG_SET_WATCHED_FACTION = 0x32007B,
- CMSG_SHOW_TRADE_SKILL = 0x3600EE,
- CMSG_SIGN_PETITION = 0x3200D3,
- CMSG_SILENCE_PARTY_TALKER = 0x36007C,
- CMSG_SOCIAL_CONTRACT_REQUEST = 0x360171,
- CMSG_SOCKET_GEMS = 0x320085,
- CMSG_SORT_ACCOUNT_BANK_BAGS = 0x3102DF,
- CMSG_SORT_BAGS = 0x310217,
- CMSG_SORT_BANK_BAGS = 0x310218,
- CMSG_SORT_REAGENT_BANK_BAGS = 0x310219,
- CMSG_SPAWN_TRACKING_UPDATE = 0x310166,
- CMSG_SPECTATE_CHANGE = 0x3102D2,
- CMSG_SPELL_CLICK = 0x320027,
- CMSG_SPELL_EMPOWER_RELEASE = 0x310138,
- CMSG_SPELL_EMPOWER_RESTART = 0x310139,
- CMSG_SPIRIT_HEALER_ACTIVATE = 0x320042,
- CMSG_SPLIT_GUILD_BANK_ITEM = 0x320055,
- CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY = 0x320052,
- CMSG_SPLIT_ITEM = 0x33000A,
- CMSG_SPLIT_ITEM_TO_GUILD_BANK = 0x320050,
- CMSG_STAND_STATE_CHANGE = 0x310035,
- CMSG_START_CHALLENGE_MODE = 0x3200EB,
- CMSG_START_SPECTATOR_WAR_GAME = 0x36000B,
- CMSG_START_WAR_GAME = 0x36000A,
- CMSG_STORE_GUILD_BANK_ITEM = 0x32004B,
- CMSG_SUBMIT_USER_FEEDBACK = 0x3600BF,
- CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x310291,
- CMSG_SUMMON_RESPONSE = 0x360094,
- CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x360070,
- CMSG_SURRENDER_ARENA = 0x310020,
- CMSG_SUSPEND_COMMS_ACK = 0x370000,
- CMSG_SUSPEND_TOKEN_RESPONSE = 0x370006,
- CMSG_SWAP_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x32004D,
- CMSG_SWAP_INV_ITEM = 0x330009,
- CMSG_SWAP_ITEM = 0x330008,
- CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x32004C,
- CMSG_SWAP_SUB_GROUPS = 0x360077,
- CMSG_SWAP_VOID_ITEM = 0x310050,
- CMSG_TABARD_VENDOR_ACTIVATE = 0x310185,
- CMSG_TALK_TO_GOSSIP = 0x320024,
- CMSG_TAXI_NODE_STATUS_QUERY = 0x32003B,
- CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x32003D,
- CMSG_TAXI_REQUEST_EARLY_LANDING = 0x32003F,
- CMSG_TIME_ADJUSTMENT_RESPONSE = 0x34005D,
- CMSG_TIME_SYNC_RESPONSE = 0x34005A,
- CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x34005C,
- CMSG_TIME_SYNC_RESPONSE_FAILED = 0x34005B,
- CMSG_TOGGLE_DIFFICULTY = 0x360081,
- CMSG_TOGGLE_PVP = 0x310187,
- CMSG_TOTEM_DESTROYED = 0x320092,
- CMSG_TOY_CLEAR_FANFARE = 0x2B0004,
- CMSG_TRADE_SKILL_SET_FAVORITE = 0x310232,
- CMSG_TRAINER_BUY_SPELL = 0x320041,
- CMSG_TRAINER_LIST = 0x320040,
- CMSG_TRAITS_COMMIT_CONFIG = 0x3102BA,
- CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3102B8,
- CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER = 0x3102E8,
- CMSG_TRANSMOGRIFY_ITEMS = 0x310043,
- CMSG_TURN_IN_PETITION = 0x3200D5,
- CMSG_TUTORIAL = 0x360108,
- CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x310262,
- CMSG_UNACCEPT_TRADE = 0x310005,
- CMSG_UNDELETE_CHARACTER = 0x36010A,
- CMSG_UNLEARN_SKILL = 0x32007F,
- CMSG_UNLEARN_SPECIALIZATION = 0x310051,
- CMSG_UNLOCK_VOID_STORAGE = 0x31004D,
- CMSG_UPDATE_AADC_STATUS = 0x360161,
- CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS = 0x320128,
- CMSG_UPDATE_ACCOUNT_DATA = 0x3600C1,
- CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x310175,
- CMSG_UPDATE_CLIENT_SETTINGS = 0x36008E,
- CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3101E3,
- CMSG_UPDATE_MISSILE_TRAJECTORY = 0x340060,
- CMSG_UPDATE_RAID_TARGET = 0x36007A,
- CMSG_UPDATE_SPELL_VISUAL = 0x310174,
- CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36011F,
- CMSG_UPGRADE_GARRISON = 0x310199,
- CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x31028F,
- CMSG_USED_FOLLOW = 0x310032,
- CMSG_USE_CRITTER_ITEM = 0x310108,
- CMSG_USE_EQUIPMENT_SET = 0x330001,
- CMSG_USE_ITEM = 0x31016E,
- CMSG_USE_TOY = 0x310171,
- CMSG_VAS_CHECK_TRANSFER_OK = 0x360134,
- CMSG_VAS_GET_QUEUE_MINUTES = 0x360133,
- CMSG_VAS_GET_SERVICE_STATUS = 0x360132,
- CMSG_VIOLENCE_LEVEL = 0x310030,
- CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x360138,
- CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x360139,
- CMSG_VOICE_CHAT_LOGIN = 0x360137,
- CMSG_VOID_STORAGE_TRANSFER = 0x31004F,
- CMSG_WARDEN3_DATA = 0x360018,
- CMSG_WHO = 0x3600AB,
- CMSG_WHO_IS = 0x3600AA,
- CMSG_WORLD_LOOT_OBJECT_CLICK = 0x3102D5,
- CMSG_WORLD_PORT_RESPONSE = 0x360025,
- CMSG_WRAP_ITEM = 0x330000,
+ CMSG_ABANDON_NPE_RESPONSE = 0x2F0299,
+ CMSG_ACCEPT_GUILD_INVITE = 0x340029,
+ CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x2F025A,
+ CMSG_ACCEPT_SOCIAL_CONTRACT = 0x340174,
+ CMSG_ACCEPT_TRADE = 0x2F0004,
+ CMSG_ACCEPT_WARGAME_INVITE = 0x34000C,
+ CMSG_ACCOUNT_BANK_DEPOSIT_MONEY = 0x2F02DC,
+ CMSG_ACCOUNT_BANK_WITHDRAW_MONEY = 0x2F02DD,
+ CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x340160,
+ CMSG_ACCOUNT_STORE_BEGIN_PURCHASE_OR_REFUND = 0x3400C0,
+ CMSG_ACTIVATE_SOULBIND = 0x2F0288,
+ CMSG_ACTIVATE_TAXI = 0x30003E,
+ CMSG_ADDON_LIST = 0x340004,
+ CMSG_ADD_ACCOUNT_COSMETIC = 0x2F0171,
+ CMSG_ADD_BATTLENET_FRIEND = 0x340086,
+ CMSG_ADD_FRIEND = 0x3400FE,
+ CMSG_ADD_IGNORE = 0x340102,
+ CMSG_ADD_TOY = 0x2F0170,
+ CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x2F00B3,
+ CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x2F028B,
+ CMSG_ADVENTURE_MAP_START_QUEST = 0x2F022B,
+ CMSG_ALTER_APPEARANCE = 0x30008D,
+ CMSG_AREA_SPIRIT_HEALER_QUERY = 0x300043,
+ CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x300044,
+ CMSG_AREA_TRIGGER = 0x2F0086,
+ CMSG_ARTIFACT_ADD_POWER = 0x2F0056,
+ CMSG_ARTIFACT_SET_APPEARANCE = 0x2F0058,
+ CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x2F00BF,
+ CMSG_ATTACK_STOP = 0x2F011D,
+ CMSG_ATTACK_SWING = 0x2F011C,
+ CMSG_AUCTIONABLE_TOKEN_SELL = 0x340114,
+ CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x340115,
+ CMSG_AUCTION_BROWSE_QUERY = 0x300061,
+ CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x300069,
+ CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x300068,
+ CMSG_AUCTION_GET_COMMODITY_QUOTE = 0x300067,
+ CMSG_AUCTION_HELLO_REQUEST = 0x30005C,
+ CMSG_AUCTION_LIST_BIDDED_ITEMS = 0x300065,
+ CMSG_AUCTION_LIST_BUCKETS_BY_BUCKET_KEYS = 0x300066,
+ CMSG_AUCTION_LIST_ITEMS_BY_BUCKET_KEY = 0x300062,
+ CMSG_AUCTION_LIST_ITEMS_BY_ITEM_ID = 0x300063,
+ CMSG_AUCTION_LIST_OWNED_ITEMS = 0x300064,
+ CMSG_AUCTION_PLACE_BID = 0x300060,
+ CMSG_AUCTION_REMOVE_ITEM = 0x30005E,
+ CMSG_AUCTION_REPLICATE_ITEMS = 0x30005F,
+ CMSG_AUCTION_SELL_COMMODITY = 0x30006A,
+ CMSG_AUCTION_SELL_ITEM = 0x30005D,
+ CMSG_AUCTION_SET_FAVORITE_ITEM = 0x340161,
+ CMSG_AUTH_CONTINUED_SESSION = 0x350002,
+ CMSG_AUTH_SESSION = 0x350001,
+ CMSG_AUTOBANK_ITEM = 0x310003,
+ CMSG_AUTOSTORE_BANK_ITEM = 0x310002,
+ CMSG_AUTO_DEPOSIT_ACCOUNT_BANK = 0x2F02E6,
+ CMSG_AUTO_DEPOSIT_CHARACTER_BANK = 0x2F02EE,
+ CMSG_AUTO_EQUIP_ITEM = 0x310004,
+ CMSG_AUTO_EQUIP_ITEM_SLOT = 0x310009,
+ CMSG_AUTO_GUILD_BANK_ITEM = 0x300048,
+ CMSG_AUTO_STORE_BAG_ITEM = 0x310005,
+ CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x300051,
+ CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x2F0256,
+ CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x2F0237,
+ CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x2F0258,
+ CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x2F0257,
+ CMSG_BANKER_ACTIVATE = 0x300046,
+ CMSG_BATTLEFIELD_LEAVE = 0x2F001F,
+ CMSG_BATTLEFIELD_LIST = 0x2F002A,
+ CMSG_BATTLEFIELD_PORT = 0x3000C3,
+ CMSG_BATTLEMASTER_HELLO = 0x2F018F,
+ CMSG_BATTLEMASTER_JOIN = 0x3000BA,
+ CMSG_BATTLEMASTER_JOIN_ARENA = 0x3000BB,
+ CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3000C1,
+ CMSG_BATTLEMASTER_JOIN_RATED_BG_BLITZ = 0x3000BD,
+ CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3000BC,
+ CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3000BE,
+ CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x340101,
+ CMSG_BATTLENET_REQUEST = 0x340122,
+ CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x3400FB,
+ CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x34013E,
+ CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x3400FA,
+ CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x3400F1,
+ CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x340164,
+ CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x3400E8,
+ CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x3400E9,
+ CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x340137,
+ CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x340133,
+ CMSG_BATTLE_PAY_START_PURCHASE = 0x3400F9,
+ CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x340120,
+ CMSG_BATTLE_PET_CLEAR_FANFARE = 0x290002,
+ CMSG_BATTLE_PET_DELETE_PET = 0x34004F,
+ CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x340050,
+ CMSG_BATTLE_PET_MODIFY_NAME = 0x340052,
+ CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x34004E,
+ CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x34004D,
+ CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x340057,
+ CMSG_BATTLE_PET_SET_FLAGS = 0x34005A,
+ CMSG_BATTLE_PET_SUMMON = 0x340053,
+ CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x2F0090,
+ CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x2F008F,
+ CMSG_BEGIN_TRADE = 0x2F0001,
+ CMSG_BINDER_ACTIVATE = 0x300045,
+ CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3000CB,
+ CMSG_BLACK_MARKET_OPEN = 0x3000C9,
+ CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3000CA,
+ CMSG_BONUS_ROLL = 0x2F0259,
+ CMSG_BUG_REPORT = 0x3400B1,
+ CMSG_BUSY_TRADE = 0x2F0002,
+ CMSG_BUY_ACCOUNT_BANK_TAB = 0x300123,
+ CMSG_BUY_BACK_ITEM = 0x300037,
+ CMSG_BUY_ITEM = 0x300036,
+ CMSG_CAGE_BATTLE_PET = 0x2F00A3,
+ CMSG_CALENDAR_ADD_EVENT = 0x3400A9,
+ CMSG_CALENDAR_COMMUNITY_INVITE = 0x34009D,
+ CMSG_CALENDAR_COMPLAIN = 0x3400A5,
+ CMSG_CALENDAR_COPY_EVENT = 0x3400A4,
+ CMSG_CALENDAR_EVENT_SIGN_UP = 0x3400A7,
+ CMSG_CALENDAR_GET = 0x34009B,
+ CMSG_CALENDAR_GET_EVENT = 0x34009C,
+ CMSG_CALENDAR_GET_NUM_PENDING = 0x3400A6,
+ CMSG_CALENDAR_INVITE = 0x34009E,
+ CMSG_CALENDAR_MODERATOR_STATUS = 0x3400A2,
+ CMSG_CALENDAR_REMOVE_EVENT = 0x3400A3,
+ CMSG_CALENDAR_REMOVE_INVITE = 0x34009F,
+ CMSG_CALENDAR_RSVP = 0x3400A0,
+ CMSG_CALENDAR_STATUS = 0x3400A1,
+ CMSG_CALENDAR_UPDATE_EVENT = 0x3400AA,
+ CMSG_CANCEL_AURA = 0x2F005A,
+ CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x30007F,
+ CMSG_CANCEL_CAST = 0x2F0177,
+ CMSG_CANCEL_CHANNELLING = 0x2F0138,
+ CMSG_CANCEL_GROWTH_AURA = 0x2F0140,
+ CMSG_CANCEL_MASTER_LOOT_ROLL = 0x2F00CC,
+ CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x2F0059,
+ CMSG_CANCEL_MOUNT_AURA = 0x2F0153,
+ CMSG_CANCEL_QUEUED_SPELL = 0x2F002B,
+ CMSG_CANCEL_TEMP_ENCHANTMENT = 0x30008A,
+ CMSG_CANCEL_TRADE = 0x2F0006,
+ CMSG_CAN_DUEL = 0x34008E,
+ CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x340132,
+ CMSG_CAST_SPELL = 0x2F0174,
+ CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x2C0002,
+ CMSG_CHANGE_BAG_SLOT_FLAG = 0x2F0211,
+ CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x2F0212,
+ CMSG_CHANGE_MONUMENT_APPEARANCE = 0x2F01F2,
+ CMSG_CHANGE_REALM_TICKET = 0x340127,
+ CMSG_CHANGE_SUB_GROUP = 0x340078,
+ CMSG_CHARACTER_CHECK_UPGRADE = 0x3400F4,
+ CMSG_CHARACTER_RENAME_REQUEST = 0x3400EF,
+ CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x3400F2,
+ CMSG_CHARACTER_UPGRADE_START = 0x3400F3,
+ CMSG_CHAR_CUSTOMIZE = 0x3400B8,
+ CMSG_CHAR_DELETE = 0x3400CA,
+ CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3400BE,
+ CMSG_CHAT_ADDON_MESSAGE = 0x2B002A,
+ CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x2B002B,
+ CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x2B0032,
+ CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x2B001F,
+ CMSG_CHAT_CHANNEL_BAN = 0x2B001D,
+ CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x2B0022,
+ CMSG_CHAT_CHANNEL_DISPLAY_LIST = 0x2B0012,
+ CMSG_CHAT_CHANNEL_INVITE = 0x2B001B,
+ CMSG_CHAT_CHANNEL_KICK = 0x2B001C,
+ CMSG_CHAT_CHANNEL_LIST = 0x2B0011,
+ CMSG_CHAT_CHANNEL_MODERATE = 0x2B0016,
+ CMSG_CHAT_CHANNEL_MODERATOR = 0x2B0017,
+ CMSG_CHAT_CHANNEL_OWNER = 0x2B0015,
+ CMSG_CHAT_CHANNEL_PASSWORD = 0x2B0013,
+ CMSG_CHAT_CHANNEL_SET_OWNER = 0x2B0014,
+ CMSG_CHAT_CHANNEL_SILENCE_ALL = 0x2B0020,
+ CMSG_CHAT_CHANNEL_UNBAN = 0x2B001E,
+ CMSG_CHAT_CHANNEL_UNMODERATOR = 0x2B0018,
+ CMSG_CHAT_CHANNEL_UNSILENCE_ALL = 0x2B0021,
+ CMSG_CHAT_DROP_CAUTIONARY_CHAT_MESSAGE = 0x2B000A,
+ CMSG_CHAT_JOIN_CHANNEL = 0x2B0000,
+ CMSG_CHAT_LEAVE_CHANNEL = 0x2B0001,
+ CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_INSTANCE_CHAT = 0x2B0031,
+ CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_PARTY = 0x2B0030,
+ CMSG_CHAT_MESSAGE_AFK = 0x2B000F,
+ CMSG_CHAT_MESSAGE_CHANNEL = 0x2B0007,
+ CMSG_CHAT_MESSAGE_DND = 0x2B0010,
+ CMSG_CHAT_MESSAGE_EMOTE = 0x2B0024,
+ CMSG_CHAT_MESSAGE_GUILD = 0x2B000D,
+ CMSG_CHAT_MESSAGE_INSTANCE_CHAT = 0x2B0028,
+ CMSG_CHAT_MESSAGE_OFFICER = 0x2B000E,
+ CMSG_CHAT_MESSAGE_PARTY = 0x2B0026,
+ CMSG_CHAT_MESSAGE_RAID = 0x2B0027,
+ CMSG_CHAT_MESSAGE_RAID_WARNING = 0x2B0029,
+ CMSG_CHAT_MESSAGE_SAY = 0x2B0023,
+ CMSG_CHAT_MESSAGE_WHISPER = 0x2B0008,
+ CMSG_CHAT_MESSAGE_YELL = 0x2B0025,
+ CMSG_CHAT_REGISTER_ADDON_PREFIXES = 0x2B0005,
+ CMSG_CHAT_REPORT_FILTERED = 0x2B0004,
+ CMSG_CHAT_REPORT_IGNORED = 0x2B0003,
+ CMSG_CHAT_SEND_CAUTIONARY_CHANNEL_MESSAGE = 0x2B000B,
+ CMSG_CHAT_SEND_CAUTIONARY_CHAT_MESSAGE = 0x2B0009,
+ CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x2B0006,
+ CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x340071,
+ CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x2F010E,
+ CMSG_CHOICE_RESPONSE = 0x2F017C,
+ CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x2F0287,
+ CMSG_CLAIM_WEEKLY_REWARD = 0x2F0264,
+ CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x2F02C1,
+ CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x2F00C3,
+ CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x2F02C3,
+ CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x2F02C0,
+ CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x2F02BF,
+ CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x2F02C4,
+ CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x2F00C2,
+ CMSG_CLEAR_NEW_APPEARANCE = 0x290005,
+ CMSG_CLEAR_RAID_MARKER = 0x2F0052,
+ CMSG_CLEAR_TRADE_ITEM = 0x2F0008,
+ CMSG_CLIENT_PORT_GRAVEYARD = 0x3000C5,
+ CMSG_CLOSE_INTERACTION = 0x300025,
+ CMSG_CLOSE_QUEST_CHOICE = 0x2F017D,
+ CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x2F028F,
+ CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x2F02C5,
+ CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x340149,
+ CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x340147,
+ CMSG_CLUB_FINDER_POST = 0x340144,
+ CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x34014B,
+ CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x340145,
+ CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x340146,
+ CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x34014A,
+ CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x34014C,
+ CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x340148,
+ CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x340167,
+ CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x340124,
+ CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x34005D,
+ CMSG_COMMENTATOR_ENABLE = 0x34001C,
+ CMSG_COMMENTATOR_ENTER_INSTANCE = 0x340020,
+ CMSG_COMMENTATOR_EXIT_INSTANCE = 0x340021,
+ CMSG_COMMENTATOR_GET_MAP_INFO = 0x34001D,
+ CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x34001F,
+ CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x34001E,
+ CMSG_COMMENTATOR_SPECTATE = 0x340165,
+ CMSG_COMMENTATOR_START_WARGAME = 0x34001B,
+ CMSG_COMMERCE_TOKEN_GET_COUNT = 0x340112,
+ CMSG_COMMERCE_TOKEN_GET_LOG = 0x34011C,
+ CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x340113,
+ CMSG_COMPLAINT = 0x340098,
+ CMSG_COMPLETE_CINEMATIC = 0x3000E3,
+ CMSG_COMPLETE_MOVIE = 0x300075,
+ CMSG_CONFIRM_ARTIFACT_RESPEC = 0x2F0057,
+ CMSG_CONFIRM_PROFESSION_RESPEC = 0x2F00C6,
+ CMSG_CONFIRM_RESPEC_WIPE = 0x2F00C5,
+ CMSG_CONNECT_TO_FAILED = 0x340000,
+ CMSG_CONSUMABLE_TOKEN_BUY = 0x340117,
+ CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x340118,
+ CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x340116,
+ CMSG_CONSUMABLE_TOKEN_REDEEM = 0x34011A,
+ CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x34011B,
+ CMSG_CONTENT_TRACKING_START_TRACKING = 0x2F02D5,
+ CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x2F02D6,
+ CMSG_CONTRIBUTION_CONTRIBUTE = 0x3000FB,
+ CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x3000FC,
+ CMSG_CONVERSATION_CINEMATIC_READY = 0x3000E5,
+ CMSG_CONVERSATION_LINE_STARTED = 0x3000E4,
+ CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT = 0x2F02E5,
+ CMSG_CONVERT_RAID = 0x34007A,
+ CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x30010F,
+ CMSG_CRAFTING_ORDER_CANCEL = 0x30011B,
+ CMSG_CRAFTING_ORDER_CLAIM = 0x300118,
+ CMSG_CRAFTING_ORDER_CREATE = 0x300114,
+ CMSG_CRAFTING_ORDER_FULFILL = 0x30011A,
+ CMSG_CRAFTING_ORDER_GET_NPC_REWARD_INFO = 0x300117,
+ CMSG_CRAFTING_ORDER_LIST_CRAFTER_ORDERS = 0x300116,
+ CMSG_CRAFTING_ORDER_LIST_MY_ORDERS = 0x300115,
+ CMSG_CRAFTING_ORDER_REJECT = 0x30011C,
+ CMSG_CRAFTING_ORDER_RELEASE = 0x300119,
+ CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x30011D,
+ CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x30011E,
+ CMSG_CREATE_CHARACTER = 0x340070,
+ CMSG_CREATE_SHIPMENT = 0x2F01DB,
+ CMSG_DB_QUERY_BULK = 0x340010,
+ CMSG_DECLINE_GUILD_INVITES = 0x3000B7,
+ CMSG_DECLINE_PETITION = 0x3000D2,
+ CMSG_DELETE_EQUIPMENT_SET = 0x3000A3,
+ CMSG_DELVE_TELEPORT_OUT = 0x30012B,
+ CMSG_DEL_FRIEND = 0x3400FF,
+ CMSG_DEL_IGNORE = 0x340103,
+ CMSG_DESTROY_ITEM = 0x2F016A,
+ CMSG_DF_BOOT_PLAYER_VOTE = 0x340044,
+ CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x340036,
+ CMSG_DF_GET_JOIN_STATUS = 0x340042,
+ CMSG_DF_GET_SYSTEM_INFO = 0x340041,
+ CMSG_DF_JOIN = 0x340037,
+ CMSG_DF_LEAVE = 0x340040,
+ CMSG_DF_PROPOSAL_RESPONSE = 0x340035,
+ CMSG_DF_READY_CHECK_RESPONSE = 0x340048,
+ CMSG_DF_SET_ROLES = 0x340043,
+ CMSG_DF_TELEPORT = 0x340045,
+ CMSG_DISCARDED_TIME_SYNC_ACKS = 0x32005E,
+ CMSG_DISMISS_CRITTER = 0x300091,
+ CMSG_DO_COUNTDOWN = 0x340143,
+ CMSG_DO_MASTER_LOOT_ROLL = 0x2F00CB,
+ CMSG_DO_READY_CHECK = 0x34005E,
+ CMSG_DUEL_RESPONSE = 0x30007A,
+ CMSG_EJECT_PASSENGER = 0x2F0103,
+ CMSG_EMOTE = 0x3000DF,
+ CMSG_ENABLE_NAGLE = 0x350007,
+ CMSG_ENABLE_TAXI_NODE = 0x30003C,
+ CMSG_ENGINE_SURVEY = 0x340111,
+ CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x350003,
+ CMSG_ENUM_CHARACTERS = 0x340014,
+ CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x34010B,
+ CMSG_FAR_SIGHT = 0x300080,
+ CMSG_GAME_EVENT_DEBUG_DISABLE = 0x2F005E,
+ CMSG_GAME_EVENT_DEBUG_ENABLE = 0x2F005D,
+ CMSG_GAME_OBJ_REPORT_USE = 0x300087,
+ CMSG_GAME_OBJ_USE = 0x300086,
+ CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x2F01D6,
+ CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x2F01BC,
+ CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x2F01A9,
+ CMSG_GARRISON_CHECK_UPGRADEABLE = 0x2F020D,
+ CMSG_GARRISON_COMPLETE_MISSION = 0x2F01FF,
+ CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x2F01D7,
+ CMSG_GARRISON_GENERATE_RECRUITS = 0x2F01BF,
+ CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x2F01CE,
+ CMSG_GARRISON_GET_MAP_DATA = 0x2F01D5,
+ CMSG_GARRISON_GET_MISSION_REWARD = 0x2F022F,
+ CMSG_GARRISON_LEARN_TALENT = 0x2F01CA,
+ CMSG_GARRISON_MISSION_BONUS_ROLL = 0x2F0201,
+ CMSG_GARRISON_PURCHASE_BUILDING = 0x2F01A5,
+ CMSG_GARRISON_RECRUIT_FOLLOWER = 0x2F01C1,
+ CMSG_GARRISON_REMOVE_FOLLOWER = 0x2F01F6,
+ CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x2F01BD,
+ CMSG_GARRISON_RENAME_FOLLOWER = 0x2F01BE,
+ CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x2F01A4,
+ CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x2F01D9,
+ CMSG_GARRISON_RESEARCH_TALENT = 0x2F01C2,
+ CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x2F01A6,
+ CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x2F01BA,
+ CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x2F01B2,
+ CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x2F01C0,
+ CMSG_GARRISON_SOCKET_TALENT = 0x2F029C,
+ CMSG_GARRISON_START_MISSION = 0x2F01FE,
+ CMSG_GARRISON_SWAP_BUILDINGS = 0x2F01AA,
+ CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x340013,
+ CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x3400E3,
+ CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x34015F,
+ CMSG_GET_GARRISON_INFO = 0x2F019F,
+ CMSG_GET_ITEM_PURCHASE_DATA = 0x3000CD,
+ CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x2F01DA,
+ CMSG_GET_MIRROR_IMAGE_DATA = 0x2F016E,
+ CMSG_GET_PVP_OPTIONS_ENABLED = 0x34001A,
+ CMSG_GET_RAF_ACCOUNT_INFO = 0x34014D,
+ CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA = 0x340190,
+ CMSG_GET_REMAINING_GAME_TIME = 0x340119,
+ CMSG_GET_TROPHY_LIST = 0x2F01EF,
+ CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x34010D,
+ CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x34011E,
+ CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x34011F,
+ CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3400BC,
+ CMSG_GM_TICKET_GET_CASE_STATUS = 0x3400BB,
+ CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3400BA,
+ CMSG_GOSSIP_REFRESH_OPTIONS = 0x30010E,
+ CMSG_GOSSIP_SELECT_OPTION = 0x300026,
+ CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x2D0020,
+ CMSG_GUILD_ADD_RANK = 0x2D0005,
+ CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x2D0002,
+ CMSG_GUILD_BANK_ACTIVATE = 0x300047,
+ CMSG_GUILD_BANK_BUY_TAB = 0x300055,
+ CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x300057,
+ CMSG_GUILD_BANK_LOG_QUERY = 0x2D0019,
+ CMSG_GUILD_BANK_QUERY_TAB = 0x300054,
+ CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x2D001A,
+ CMSG_GUILD_BANK_SET_TAB_TEXT = 0x2D001D,
+ CMSG_GUILD_BANK_TEXT_QUERY = 0x2D001E,
+ CMSG_GUILD_BANK_UPDATE_TAB = 0x300056,
+ CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x300058,
+ CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x2D0017,
+ CMSG_GUILD_CHANGE_NAME_REQUEST = 0x2D0018,
+ CMSG_GUILD_DECLINE_INVITATION = 0x34002A,
+ CMSG_GUILD_DELETE = 0x2D0009,
+ CMSG_GUILD_DELETE_RANK = 0x2D0006,
+ CMSG_GUILD_DEMOTE_MEMBER = 0x2D0001,
+ CMSG_GUILD_EVENT_LOG_QUERY = 0x2D001C,
+ CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x2D0012,
+ CMSG_GUILD_GET_RANKS = 0x2D000E,
+ CMSG_GUILD_GET_ROSTER = 0x2D0014,
+ CMSG_GUILD_INVITE_BY_NAME = 0x340034,
+ CMSG_GUILD_LEAVE = 0x2D0003,
+ CMSG_GUILD_NEWS_UPDATE_STICKY = 0x2D000F,
+ CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x2D0004,
+ CMSG_GUILD_PERMISSIONS_QUERY = 0x2D001B,
+ CMSG_GUILD_PROMOTE_MEMBER = 0x2D0000,
+ CMSG_GUILD_QUERY_MEMBERS_FOR_RECIPE = 0x2D000C,
+ CMSG_GUILD_QUERY_MEMBER_RECIPES = 0x2D000A,
+ CMSG_GUILD_QUERY_NEWS = 0x2D000D,
+ CMSG_GUILD_QUERY_RECIPES = 0x2D000B,
+ CMSG_GUILD_REPLACE_GUILD_MASTER = 0x2D001F,
+ CMSG_GUILD_REQUEST_RENAME = 0x2D0023,
+ CMSG_GUILD_REQUEST_RENAME_NAME_CHECK = 0x2D0022,
+ CMSG_GUILD_REQUEST_RENAME_REFUND = 0x2D0024,
+ CMSG_GUILD_REQUEST_RENAME_STATUS = 0x2D0021,
+ CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x2D0010,
+ CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x2D0011,
+ CMSG_GUILD_SET_GUILD_MASTER = 0x3400F6,
+ CMSG_GUILD_SET_MEMBER_NOTE = 0x2D0013,
+ CMSG_GUILD_SET_RANK_PERMISSIONS = 0x2D0008,
+ CMSG_GUILD_SHIFT_RANK = 0x2D0007,
+ CMSG_GUILD_UPDATE_INFO_TEXT = 0x2D0016,
+ CMSG_GUILD_UPDATE_MOTD_TEXT = 0x2D0015,
+ CMSG_HEARTH_AND_RESURRECT = 0x30009F,
+ CMSG_HIDE_QUEST_CHOICE = 0x2F017E,
+ CMSG_HOTFIX_REQUEST = 0x340011,
+ CMSG_IGNORE_TRADE = 0x2F0003,
+ CMSG_INITIATE_ROLE_POLL = 0x340006,
+ CMSG_INITIATE_TRADE = 0x2F0000,
+ CMSG_INSPECT = 0x3000C7,
+ CMSG_INSTANCE_ABANDON_VOTE_RESPONSE = 0x340061,
+ CMSG_INSTANCE_LOCK_RESPONSE = 0x3000A4,
+ CMSG_ISLAND_QUEUE = 0x2F0260,
+ CMSG_ITEM_PURCHASE_REFUND = 0x3000CE,
+ CMSG_ITEM_TEXT_QUERY = 0x2F020E,
+ CMSG_JOIN_PET_BATTLE_QUEUE = 0x2F008D,
+ CMSG_JOIN_RATED_BATTLEGROUND = 0x2F0025,
+ CMSG_KEEP_ALIVE = 0x3400AB,
+ CMSG_KEYBOUND_OVERRIDE = 0x2F00E1,
+ CMSG_LATENCY_REPORT = 0x35000D,
+ CMSG_LEARN_PVP_TALENTS = 0x3000FA,
+ CMSG_LEARN_TALENTS = 0x3000F8,
+ CMSG_LEAVE_GROUP = 0x340075,
+ CMSG_LEAVE_PET_BATTLE_QUEUE = 0x2F008E,
+ CMSG_LFG_LIST_APPLY_TO_GROUP = 0x34003B,
+ CMSG_LFG_LIST_CANCEL_APPLICATION = 0x34003C,
+ CMSG_LFG_LIST_DECLINE_APPLICANT = 0x34003D,
+ CMSG_LFG_LIST_GET_STATUS = 0x340039,
+ CMSG_LFG_LIST_INVITE_APPLICANT = 0x34003E,
+ CMSG_LFG_LIST_INVITE_RESPONSE = 0x34003F,
+ CMSG_LFG_LIST_JOIN = 0x2F0254,
+ CMSG_LFG_LIST_LEAVE = 0x340038,
+ CMSG_LFG_LIST_SEARCH = 0x34003A,
+ CMSG_LFG_LIST_UPDATE_REQUEST = 0x2F0255,
+ CMSG_LIST_INVENTORY = 0x300033,
+ CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x3400E6,
+ CMSG_LIVE_REGION_CHARACTER_COPY = 0x3400E5,
+ CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x3400E4,
+ CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x3400E7,
+ CMSG_LOADING_SCREEN_NOTIFY = 0x340024,
+ CMSG_LOAD_SELECTED_TROPHY = 0x2F01F0,
+ CMSG_LOBBY_MATCHMAKER_ABANDON_QUEUE = 0x340172,
+ CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x340169,
+ CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x34017B,
+ CMSG_LOBBY_MATCHMAKER_ENTER_QUEUE = 0x340170,
+ CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x34016C,
+ CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x340168,
+ CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x34016B,
+ CMSG_LOBBY_MATCHMAKER_QUEUE_PROPSAL_RESPONSE = 0x340171,
+ CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x34016A,
+ CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x34016D,
+ CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x34016E,
+ CMSG_LOGOUT_CANCEL = 0x300070,
+ CMSG_LOGOUT_INSTANT = 0x300071,
+ CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x300122,
+ CMSG_LOGOUT_REQUEST = 0x30006F,
+ CMSG_LOG_DISCONNECT = 0x350005,
+ CMSG_LOG_STREAMING_ERROR = 0x350009,
+ CMSG_LOOT_ITEM = 0x2F00C9,
+ CMSG_LOOT_MONEY = 0x2F00C8,
+ CMSG_LOOT_RELEASE = 0x2F00CD,
+ CMSG_LOOT_ROLL = 0x2F00CE,
+ CMSG_LOOT_UNIT = 0x2F00C7,
+ CMSG_LOW_LEVEL_RAID1 = 0x3400CE,
+ CMSG_LOW_LEVEL_RAID2 = 0x3000AB,
+ CMSG_MAIL_CREATE_TEXT_ITEM = 0x3000D9,
+ CMSG_MAIL_DELETE = 0x2F00E3,
+ CMSG_MAIL_GET_LIST = 0x3000D4,
+ CMSG_MAIL_MARK_AS_READ = 0x3000D8,
+ CMSG_MAIL_RETURN_TO_SENDER = 0x340081,
+ CMSG_MAIL_TAKE_ITEM = 0x3000D6,
+ CMSG_MAIL_TAKE_MONEY = 0x3000D5,
+ CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x2F00E4,
+ CMSG_MASTER_LOOT_ITEM = 0x2F00CA,
+ CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x300052,
+ CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x30004F,
+ CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x30004D,
+ CMSG_MINIMAP_PING = 0x340077,
+ CMSG_MISSILE_TRAJECTORY_COLLISION = 0x2F0036,
+ CMSG_MOUNT_CLEAR_FANFARE = 0x290003,
+ CMSG_MOUNT_SET_FAVORITE = 0x34005C,
+ CMSG_MOUNT_SPECIAL_ANIM = 0x2F0154,
+ CMSG_MOVE_ADD_IMPULSE_ACK = 0x32006D,
+ CMSG_MOVE_APPLY_INERTIA_ACK = 0x32006B,
+ CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x320031,
+ CMSG_MOVE_CHANGE_TRANSPORT = 0x32004C,
+ CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x320051,
+ CMSG_MOVE_COLLISION_DISABLE_ACK = 0x320056,
+ CMSG_MOVE_COLLISION_ENABLE_ACK = 0x320057,
+ CMSG_MOVE_DISMISS_VEHICLE = 0x320050,
+ CMSG_MOVE_DOUBLE_JUMP = 0x320007,
+ CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK = 0x32003A,
+ CMSG_MOVE_ENABLE_FULL_SPEED_TURNING_ACK = 0x320083,
+ CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x320040,
+ CMSG_MOVE_FALL_LAND = 0x320017,
+ CMSG_MOVE_FALL_RESET = 0x320035,
+ CMSG_MOVE_FEATHER_FALL_ACK = 0x320038,
+ CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x32004B,
+ CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x32004A,
+ CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x32004F,
+ CMSG_MOVE_FORCE_ROOT_ACK = 0x32002A,
+ CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x320028,
+ CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x320027,
+ CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK = 0x32003E,
+ CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK = 0x320029,
+ CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x32003F,
+ CMSG_MOVE_FORCE_UNROOT_ACK = 0x32002B,
+ CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK = 0x32003D,
+ CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x320052,
+ CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x320053,
+ CMSG_MOVE_GUILD_BANK_ITEM = 0x30004C,
+ CMSG_MOVE_HEARTBEAT = 0x32002C,
+ CMSG_MOVE_HOVER_ACK = 0x32002F,
+ CMSG_MOVE_INERTIA_DISABLE_ACK = 0x320054,
+ CMSG_MOVE_INERTIA_ENABLE_ACK = 0x320055,
+ CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x320063,
+ CMSG_MOVE_JUMP = 0x320006,
+ CMSG_MOVE_KNOCK_BACK_ACK = 0x32002E,
+ CMSG_MOVE_REMOVE_INERTIA_ACK = 0x32006C,
+ CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x320033,
+ CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x320032,
+ CMSG_MOVE_SET_ADV_FLY = 0x32006F,
+ CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK = 0x320077,
+ CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK = 0x320072,
+ CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK = 0x320078,
+ CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK = 0x320075,
+ CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK = 0x320076,
+ CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK = 0x32007F,
+ CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK = 0x320074,
+ CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK = 0x320073,
+ CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK = 0x32007D,
+ CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK = 0x320079,
+ CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK = 0x32007A,
+ CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK = 0x32007C,
+ CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK = 0x32007B,
+ CMSG_MOVE_SET_CAN_ADV_FLY_ACK = 0x32006E,
+ CMSG_MOVE_SET_CAN_DRIVE_ACK = 0x320070,
+ CMSG_MOVE_SET_CAN_FLY_ACK = 0x320043,
+ CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x320041,
+ CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x320058,
+ CMSG_MOVE_SET_FACING = 0x320025,
+ CMSG_MOVE_SET_FACING_HEARTBEAT = 0x32007E,
+ CMSG_MOVE_SET_FLY = 0x320045,
+ CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK = 0x320042,
+ CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x32005F,
+ CMSG_MOVE_SET_PITCH = 0x320026,
+ CMSG_MOVE_SET_RUN_MODE = 0x32000E,
+ CMSG_MOVE_SET_TURN_RATE_CHEAT = 0x320022,
+ CMSG_MOVE_SET_VEHICLE_REC_ID_ACK = 0x320030,
+ CMSG_MOVE_SET_WALK_MODE = 0x32000F,
+ CMSG_MOVE_SPLINE_DONE = 0x320034,
+ CMSG_MOVE_START_ASCEND = 0x320046,
+ CMSG_MOVE_START_BACKWARD = 0x320001,
+ CMSG_MOVE_START_DESCEND = 0x32004D,
+ CMSG_MOVE_START_DRIVE_FORWARD = 0x320071,
+ CMSG_MOVE_START_FORWARD = 0x320000,
+ CMSG_MOVE_START_PITCH_DOWN = 0x32000C,
+ CMSG_MOVE_START_PITCH_UP = 0x32000B,
+ CMSG_MOVE_START_STRAFE_LEFT = 0x320003,
+ CMSG_MOVE_START_STRAFE_RIGHT = 0x320004,
+ CMSG_MOVE_START_SWIM = 0x320018,
+ CMSG_MOVE_START_TURN_LEFT = 0x320008,
+ CMSG_MOVE_START_TURN_RIGHT = 0x320009,
+ CMSG_MOVE_STOP = 0x320002,
+ CMSG_MOVE_STOP_ASCEND = 0x320047,
+ CMSG_MOVE_STOP_PITCH = 0x32000D,
+ CMSG_MOVE_STOP_STRAFE = 0x320005,
+ CMSG_MOVE_STOP_SWIM = 0x320019,
+ CMSG_MOVE_STOP_TURN = 0x32000A,
+ CMSG_MOVE_TELEPORT_ACK = 0x320016,
+ CMSG_MOVE_TIME_SKIPPED = 0x320037,
+ CMSG_MOVE_UPDATE_FALL_SPEED = 0x320036,
+ CMSG_MOVE_WATER_WALK_ACK = 0x320039,
+ CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x2C0001,
+ CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x2F0083,
+ CMSG_NEXT_CINEMATIC_CAMERA = 0x3000E2,
+ CMSG_OBJECT_UPDATE_FAILED = 0x2F002C,
+ CMSG_OBJECT_UPDATE_RESCUED = 0x2F002D,
+ CMSG_OFFER_PETITION = 0x2F0286,
+ CMSG_OPENING_CINEMATIC = 0x3000E1,
+ CMSG_OPEN_ITEM = 0x2F020F,
+ CMSG_OPEN_MISSION_NPC = 0x2F01D0,
+ CMSG_OPEN_SHIPMENT_NPC = 0x2F01D8,
+ CMSG_OPEN_TRADESKILL_NPC = 0x2F01E3,
+ CMSG_OPT_OUT_OF_LOOT = 0x30008E,
+ CMSG_OVERRIDE_SCREEN_FLASH = 0x3000B8,
+ CMSG_PARTY_INVITE = 0x340030,
+ CMSG_PARTY_INVITE_RESPONSE = 0x340032,
+ CMSG_PARTY_UNINVITE = 0x340073,
+ CMSG_PERFORM_ITEM_INTERACTION = 0x2F00EC,
+ CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x2F02AE,
+ CMSG_PERKS_PROGRAM_REQUEST_CART_CHECKOUT = 0x2F02B1,
+ CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x290012,
+ CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x2F02B0,
+ CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x2F02B2,
+ CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x2F02B3,
+ CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x2F02AF,
+ CMSG_PETITION_BUY = 0x30005A,
+ CMSG_PETITION_RENAME_GUILD = 0x3400F7,
+ CMSG_PETITION_SHOW_LIST = 0x300059,
+ CMSG_PETITION_SHOW_SIGNATURES = 0x30005B,
+ CMSG_PET_ABANDON = 0x30001E,
+ CMSG_PET_ABANDON_BY_NUMBER = 0x30001F,
+ CMSG_PET_ACTION = 0x30001C,
+ CMSG_PET_BATTLE_FINAL_NOTIFY = 0x2F0092,
+ CMSG_PET_BATTLE_INPUT = 0x34006D,
+ CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x2F00E2,
+ CMSG_PET_BATTLE_QUIT_NOTIFY = 0x2F0091,
+ CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x34006E,
+ CMSG_PET_BATTLE_REQUEST_PVP = 0x2F008B,
+ CMSG_PET_BATTLE_REQUEST_UPDATE = 0x2F008C,
+ CMSG_PET_BATTLE_REQUEST_WILD = 0x2F0089,
+ CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x2F0093,
+ CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x3D008A,
+ CMSG_PET_CANCEL_AURA = 0x300020,
+ CMSG_PET_CAST_SPELL = 0x2F0173,
+ CMSG_PET_RENAME = 0x3400B0,
+ CMSG_PET_SET_ACTION = 0x30001B,
+ CMSG_PET_SPELL_AUTOCAST = 0x300021,
+ CMSG_PET_STOP_ATTACK = 0x30001D,
+ CMSG_PING = 0x350004,
+ CMSG_PLAYER_LOGIN = 0x340016,
+ CMSG_PUSH_QUEST_TO_PARTY = 0x300031,
+ CMSG_PVP_LOG_DATA = 0x2F0028,
+ CMSG_QUERY_BATTLE_PET_NAME = 0x2F0147,
+ CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x34008C,
+ CMSG_QUERY_CORPSE_TRANSPORT = 0x34008D,
+ CMSG_QUERY_COUNTDOWN_TIMER = 0x2F0055,
+ CMSG_QUERY_CREATURE = 0x2F0141,
+ CMSG_QUERY_GAME_OBJECT = 0x2F0142,
+ CMSG_QUERY_GARRISON_PET_NAME = 0x2F0148,
+ CMSG_QUERY_GUILD_INFO = 0x3400B6,
+ CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x300098,
+ CMSG_QUERY_NEXT_MAIL_TIME = 0x3000D7,
+ CMSG_QUERY_NPC_TEXT = 0x2F0143,
+ CMSG_QUERY_PAGE_TEXT = 0x2F0145,
+ CMSG_QUERY_PETITION = 0x2F0149,
+ CMSG_QUERY_PET_NAME = 0x2F0146,
+ CMSG_QUERY_PLAYER_NAMES = 0x35000E,
+ CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x35000C,
+ CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x35000B,
+ CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x2F0021,
+ CMSG_QUERY_QUEST_INFO = 0x2F0144,
+ CMSG_QUERY_QUEST_ITEM_USABILITY = 0x2F0022,
+ CMSG_QUERY_REALM_NAME = 0x3400B5,
+ CMSG_QUERY_SCENARIO_POI = 0x340082,
+ CMSG_QUERY_SELECTED_WOW_LABS_AREA = 0x2F02EA,
+ CMSG_QUERY_TIME = 0x30006E,
+ CMSG_QUERY_TREASURE_PICKER = 0x2F0232,
+ CMSG_QUERY_WOW_LABS_AREA_INFO = 0x2F02EB,
+ CMSG_QUEST_CONFIRM_ACCEPT = 0x300030,
+ CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x30002A,
+ CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x30002C,
+ CMSG_QUEST_GIVER_CLOSE_QUEST = 0x3000E8,
+ CMSG_QUEST_GIVER_COMPLETE_QUEST = 0x30002B,
+ CMSG_QUEST_GIVER_HELLO = 0x300028,
+ CMSG_QUEST_GIVER_QUERY_QUEST = 0x300029,
+ CMSG_QUEST_GIVER_REQUEST_REWARD = 0x30002D,
+ CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x30002F,
+ CMSG_QUEST_GIVER_STATUS_QUERY = 0x30002E,
+ CMSG_QUEST_LOG_REMOVE_QUEST = 0x3000CC,
+ CMSG_QUEST_POI_QUERY = 0x3400DD,
+ CMSG_QUEST_PUSH_RESULT = 0x300032,
+ CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x2F0278,
+ CMSG_QUEST_SESSION_REQUEST_START = 0x2F0277,
+ CMSG_QUEST_SESSION_REQUEST_STOP = 0x340158,
+ CMSG_QUEUED_MESSAGES_END = 0x350008,
+ CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x340130,
+ CMSG_QUICK_JOIN_REQUEST_INVITE = 0x34012F,
+ CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x34015D,
+ CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x34012E,
+ CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x34012D,
+ CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x30009C,
+ CMSG_RAF_CLAIM_NEXT_REWARD = 0x34014E,
+ CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x340150,
+ CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x34014F,
+ CMSG_RANDOM_ROLL = 0x340080,
+ CMSG_READY_CHECK_RESPONSE = 0x34005F,
+ CMSG_READ_ITEM = 0x2F0210,
+ CMSG_RECLAIM_CORPSE = 0x300073,
+ CMSG_REMOVE_NEW_ITEM = 0x2F0236,
+ CMSG_REMOVE_RAF_RECRUIT = 0x340151,
+ CMSG_REORDER_CHARACTERS = 0x340015,
+ CMSG_REPAIR_ITEM = 0x300084,
+ CMSG_REPLACE_TROPHY = 0x2F01F1,
+ CMSG_REPOP_REQUEST = 0x3000C4,
+ CMSG_REPORT_PVP_PLAYER_AFK = 0x30008C,
+ CMSG_REPORT_SERVER_LAG = 0x2F0270,
+ CMSG_REPORT_STUCK_IN_COMBAT = 0x2F0271,
+ CMSG_REQUEST_ACCOUNT_DATA = 0x3400C2,
+ CMSG_REQUEST_AREA_POI_UPDATE = 0x2F0234,
+ CMSG_REQUEST_BATTLEFIELD_STATUS = 0x340008,
+ CMSG_REQUEST_CEMETERY_LIST = 0x2F0023,
+ CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3400B7,
+ CMSG_REQUEST_COVENANT_CALLINGS = 0x2F0262,
+ CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x3000C8,
+ CMSG_REQUEST_CURRENCY_DATA_FOR_ACCOUNT_CHARACTERS = 0x290019,
+ CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x2F029B,
+ CMSG_REQUEST_GUILD_PARTY_STATE = 0x2F0054,
+ CMSG_REQUEST_GUILD_REWARDS_LIST = 0x2F0053,
+ CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x2F0272,
+ CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x2F017F,
+ CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x2F00B7,
+ CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x2F00B8,
+ CMSG_REQUEST_PARTY_ELIGIBILITY_FOR_DELVE_TIERS = 0x2F02E9,
+ CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x340023,
+ CMSG_REQUEST_PARTY_MEMBER_STATS = 0x34007F,
+ CMSG_REQUEST_PET_INFO = 0x300022,
+ CMSG_REQUEST_PLAYED_TIME = 0x2F014C,
+ CMSG_REQUEST_PVP_REWARDS = 0x2F0041,
+ CMSG_REQUEST_RAID_INFO = 0x3400F8,
+ CMSG_REQUEST_RATED_PVP_INFO = 0x34000F,
+ CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x340193,
+ CMSG_REQUEST_SCHEDULED_AREA_POI_UPDATE = 0x2F0235,
+ CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x2F0042,
+ CMSG_REQUEST_STABLED_PETS = 0x300023,
+ CMSG_REQUEST_STORE_FRONT_INFO_UPDATE = 0x29001E,
+ CMSG_REQUEST_VEHICLE_EXIT = 0x2F00FE,
+ CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x2F0100,
+ CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x2F00FF,
+ CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x2F0101,
+ CMSG_REQUEST_WEEKLY_REWARDS = 0x2F0265,
+ CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x2F0233,
+ CMSG_RESET_CHALLENGE_MODE = 0x2F00B5,
+ CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x2F00B6,
+ CMSG_RESET_INSTANCES = 0x340094,
+ CMSG_RESURRECT_RESPONSE = 0x3400AF,
+ CMSG_REVERT_MONUMENT_APPEARANCE = 0x2F01F3,
+ CMSG_RIDE_VEHICLE_INTERACT = 0x2F0102,
+ CMSG_RPE_RESET_CHARACTER = 0x34017E,
+ CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x340178,
+ CMSG_SAVE_CUF_PROFILES = 0x2F0037,
+ CMSG_SAVE_EQUIPMENT_SET = 0x3000A2,
+ CMSG_SAVE_GUILD_EMBLEM = 0x2F0184,
+ CMSG_SAVE_PERSONAL_EMBLEM = 0x2F0185,
+ CMSG_SCENE_PLAYBACK_CANCELED = 0x2F00DE,
+ CMSG_SCENE_PLAYBACK_COMPLETE = 0x2F00DD,
+ CMSG_SCENE_TRIGGER_EVENT = 0x2F00DF,
+ CMSG_SEAMLESS_TRANSFER_COMPLETE = 0x2F02D8,
+ CMSG_SELECT_WOW_LABS_AREA = 0x2F02EC,
+ CMSG_SELF_RES = 0x3000CF,
+ CMSG_SELL_ALL_JUNK_ITEMS = 0x300035,
+ CMSG_SELL_ITEM = 0x300034,
+ CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x340126,
+ CMSG_SEND_CONTACT_LIST = 0x3400FD,
+ CMSG_SEND_MAIL = 0x340026,
+ CMSG_SEND_PING_UNIT = 0x2F02DA,
+ CMSG_SEND_PING_WORLD_POINT = 0x2F02DB,
+ CMSG_SEND_TEXT_EMOTE = 0x300019,
+ CMSG_SERVER_TIME_OFFSET_REQUEST = 0x3400C9,
+ CMSG_SETUP_WARBAND_GROUPS = 0x34018C,
+ CMSG_SET_ACTION_BAR_TOGGLES = 0x3000D0,
+ CMSG_SET_ACTION_BUTTON = 0x340062,
+ CMSG_SET_ACTIVE_MOVER = 0x320059,
+ CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x2F0192,
+ CMSG_SET_ASSISTANT_LEADER = 0x34007B,
+ CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x2F0213,
+ CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x2F0214,
+ CMSG_SET_BANK_AUTOSORT_DISABLED = 0x2F0215,
+ CMSG_SET_CONTACT_NOTES = 0x340100,
+ CMSG_SET_CURRENCY_FLAGS = 0x2F0015,
+ CMSG_SET_DIFFICULTY_ID = 0x2F00E0,
+ CMSG_SET_DUNGEON_DIFFICULTY = 0x3400AE,
+ CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x2F013B,
+ CMSG_SET_EVERYONE_IS_ASSISTANT = 0x340046,
+ CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x340131,
+ CMSG_SET_FACTION_AT_WAR = 0x300076,
+ CMSG_SET_FACTION_INACTIVE = 0x300078,
+ CMSG_SET_FACTION_NOT_AT_WAR = 0x300077,
+ CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x2F0065,
+ CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x2F0217,
+ CMSG_SET_LOOT_METHOD = 0x340074,
+ CMSG_SET_LOOT_SPECIALIZATION = 0x3000DD,
+ CMSG_SET_PARTY_ASSIGNMENT = 0x34007D,
+ CMSG_SET_PARTY_LEADER = 0x340076,
+ CMSG_SET_PET_FAVORITE = 0x2F0012,
+ CMSG_SET_PET_SLOT = 0x2F0011,
+ CMSG_SET_PET_SPECIALIZATION = 0x2F0013,
+ CMSG_SET_PLAYER_DECLINED_NAMES = 0x3400B4,
+ CMSG_SET_PREFERRED_CEMETERY = 0x2F0024,
+ CMSG_SET_PVP = 0x2F0189,
+ CMSG_SET_RAID_DIFFICULTY = 0x340109,
+ CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x340047,
+ CMSG_SET_ROLE = 0x340005,
+ CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3400B2,
+ CMSG_SET_SELECTION = 0x3000C6,
+ CMSG_SET_SHEATHED = 0x30001A,
+ CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x2F0216,
+ CMSG_SET_TAXI_BENCHMARK_MODE = 0x30008B,
+ CMSG_SET_TITLE = 0x2F0152,
+ CMSG_SET_TRADE_CURRENCY = 0x2F000A,
+ CMSG_SET_TRADE_GOLD = 0x2F0009,
+ CMSG_SET_TRADE_ITEM = 0x2F0007,
+ CMSG_SET_USING_PARTY_GARRISON = 0x2F01D2,
+ CMSG_SET_WAR_MODE = 0x2F018A,
+ CMSG_SET_WATCHED_FACTION = 0x300079,
+ CMSG_SHOW_TRADE_SKILL = 0x3400F0,
+ CMSG_SIGN_PETITION = 0x3000D1,
+ CMSG_SILENCE_PARTY_TALKER = 0x34007E,
+ CMSG_SOCIAL_CONTRACT_REQUEST = 0x340173,
+ CMSG_SOCKET_GEMS = 0x300083,
+ CMSG_SORT_ACCOUNT_BANK_BAGS = 0x2F02DE,
+ CMSG_SORT_BAGS = 0x2F0218,
+ CMSG_SORT_BANK_BAGS = 0x2F0219,
+ CMSG_SPAWN_TRACKING_UPDATE = 0x2F0167,
+ CMSG_SPECTATE_CHANGE = 0x2F02D1,
+ CMSG_SPELL_CLICK = 0x300027,
+ CMSG_SPELL_EMPOWER_RELEASE = 0x2F0139,
+ CMSG_SPELL_EMPOWER_RESTART = 0x2F013A,
+ CMSG_SPIRIT_HEALER_ACTIVATE = 0x300042,
+ CMSG_SPLIT_GUILD_BANK_ITEM = 0x300053,
+ CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY = 0x300050,
+ CMSG_SPLIT_ITEM = 0x310008,
+ CMSG_SPLIT_ITEM_TO_GUILD_BANK = 0x30004E,
+ CMSG_STAND_STATE_CHANGE = 0x2F0035,
+ CMSG_START_CHALLENGE_MODE = 0x3000E9,
+ CMSG_START_INSTANCE_ABANDON_VOTE = 0x340060,
+ CMSG_START_SPECTATOR_WAR_GAME = 0x34000B,
+ CMSG_START_WAR_GAME = 0x34000A,
+ CMSG_STORE_GUILD_BANK_ITEM = 0x300049,
+ CMSG_SUBMIT_USER_FEEDBACK = 0x3400C1,
+ CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x2F0290,
+ CMSG_SUMMON_RESPONSE = 0x340096,
+ CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x340072,
+ CMSG_SURRENDER_ARENA = 0x2F0020,
+ CMSG_SUSPEND_COMMS_ACK = 0x350000,
+ CMSG_SUSPEND_TOKEN_RESPONSE = 0x350006,
+ CMSG_SWAP_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x30004B,
+ CMSG_SWAP_INV_ITEM = 0x310007,
+ CMSG_SWAP_ITEM = 0x310006,
+ CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x30004A,
+ CMSG_SWAP_SUB_GROUPS = 0x340079,
+ CMSG_TABARD_VENDOR_ACTIVATE = 0x2F0186,
+ CMSG_TALK_TO_GOSSIP = 0x300024,
+ CMSG_TAXI_NODE_STATUS_QUERY = 0x30003B,
+ CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x30003D,
+ CMSG_TAXI_REQUEST_EARLY_LANDING = 0x30003F,
+ CMSG_TIME_ADJUSTMENT_RESPONSE = 0x32005D,
+ CMSG_TIME_SYNC_RESPONSE = 0x32005A,
+ CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x32005C,
+ CMSG_TIME_SYNC_RESPONSE_FAILED = 0x32005B,
+ CMSG_TOGGLE_DIFFICULTY = 0x340083,
+ CMSG_TOGGLE_PVP = 0x2F0188,
+ CMSG_TOTEM_DESTROYED = 0x300090,
+ CMSG_TOY_CLEAR_FANFARE = 0x290004,
+ CMSG_TRADE_SKILL_SET_FAVORITE = 0x2F0231,
+ CMSG_TRAINER_BUY_SPELL = 0x300041,
+ CMSG_TRAINER_LIST = 0x300040,
+ CMSG_TRAITS_COMMIT_CONFIG = 0x2F02B9,
+ CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x2F02B7,
+ CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER = 0x2F02E7,
+ CMSG_TRANSMOGRIFY_ITEMS = 0x2F0043,
+ CMSG_TURN_IN_PETITION = 0x3000D3,
+ CMSG_TUTORIAL = 0x34010A,
+ CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x2F0261,
+ CMSG_UNACCEPT_TRADE = 0x2F0005,
+ CMSG_UNDELETE_CHARACTER = 0x34010C,
+ CMSG_UNLEARN_SKILL = 0x30007D,
+ CMSG_UNLEARN_SPECIALIZATION = 0x2F0051,
+ CMSG_UPDATE_AADC_STATUS = 0x340163,
+ CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS = 0x30012A,
+ CMSG_UPDATE_ACCOUNT_DATA = 0x3400C3,
+ CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x2F0176,
+ CMSG_UPDATE_CLIENT_SETTINGS = 0x340090,
+ CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2F01E4,
+ CMSG_UPDATE_MISSILE_TRAJECTORY = 0x320060,
+ CMSG_UPDATE_RAID_TARGET = 0x34007C,
+ CMSG_UPDATE_SPELL_VISUAL = 0x2F0175,
+ CMSG_UPDATE_VAS_PURCHASE_STATES = 0x340121,
+ CMSG_UPGRADE_GARRISON = 0x2F019A,
+ CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x2F028E,
+ CMSG_USED_FOLLOW = 0x2F0032,
+ CMSG_USE_CRITTER_ITEM = 0x2F0108,
+ CMSG_USE_EQUIPMENT_SET = 0x310001,
+ CMSG_USE_ITEM = 0x2F016F,
+ CMSG_USE_TOY = 0x2F0172,
+ CMSG_VAS_CHECK_TRANSFER_OK = 0x340136,
+ CMSG_VAS_GET_QUEUE_MINUTES = 0x340135,
+ CMSG_VAS_GET_SERVICE_STATUS = 0x340134,
+ CMSG_VIOLENCE_LEVEL = 0x2F0030,
+ CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x34013A,
+ CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x34013B,
+ CMSG_VOICE_CHAT_LOGIN = 0x340139,
+ CMSG_WARDEN3_DATA = 0x340018,
+ CMSG_WHO = 0x3400AD,
+ CMSG_WHO_IS = 0x3400AC,
+ CMSG_WORLD_LOOT_OBJECT_CLICK = 0x2F02D4,
+ CMSG_WORLD_PORT_RESPONSE = 0x340025,
+ CMSG_WRAP_ITEM = 0x310000,
};
-inline constexpr std::size_t NUM_CMSG_OPCODES = 1732;
+inline constexpr std::size_t NUM_CMSG_OPCODES = 1735;
inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeClient opcode)
{
uint32 idInGroup = opcode & 0xFFFF;
switch (opcode >> 16)
{
- case 0x2B: return idInGroup < 31 ? idInGroup + 0 : -1;
- case 0x2D: return idInGroup < 51 ? idInGroup + 31 : -1;
- case 0x2E: return idInGroup < 3 ? idInGroup + 82 : -1;
- case 0x2F: return idInGroup < 37 ? idInGroup + 85 : -1;
- case 0x31: return idInGroup < 750 ? idInGroup + 122 : -1;
- case 0x32: return idInGroup < 299 ? idInGroup + 872 : -1;
- case 0x33: return idInGroup < 12 ? idInGroup + 1171 : -1;
- case 0x34: return idInGroup < 132 ? idInGroup + 1183 : -1;
- case 0x36: return idInGroup < 402 ? idInGroup + 1315 : -1;
- case 0x37: return idInGroup < 15 ? idInGroup + 1717 : -1;
+ case 0x29: return idInGroup < 31 ? idInGroup + 0 : -1;
+ case 0x2B: return idInGroup < 51 ? idInGroup + 31 : -1;
+ case 0x2C: return idInGroup < 3 ? idInGroup + 82 : -1;
+ case 0x2D: return idInGroup < 37 ? idInGroup + 85 : -1;
+ case 0x2F: return idInGroup < 751 ? idInGroup + 122 : -1;
+ case 0x30: return idInGroup < 301 ? idInGroup + 873 : -1;
+ case 0x31: return idInGroup < 10 ? idInGroup + 1174 : -1;
+ case 0x32: return idInGroup < 132 ? idInGroup + 1184 : -1;
+ case 0x34: return idInGroup < 404 ? idInGroup + 1316 : -1;
+ case 0x35: return idInGroup < 15 ? idInGroup + 1720 : -1;
default: return -1;
}
}
enum OpcodeServer : uint32
{
- SMSG_ABORT_NEW_WORLD = 0x380030,
- SMSG_ACCOUNT_CHARACTER_CURRENCY_LISTS = 0x380342,
- SMSG_ACCOUNT_CONVERSION_STATE_UPDATE = 0x380347,
- SMSG_ACCOUNT_COSMETIC_ADDED = 0x3802FB,
- SMSG_ACCOUNT_CRITERIA_UPDATE = 0x3802E3,
- SMSG_ACCOUNT_DATA_TIMES = 0x3801A4,
- SMSG_ACCOUNT_EXPORT_RESPONSE = 0x380333,
- SMSG_ACCOUNT_ITEM_COLLECTION_DATA = 0x38034D,
- SMSG_ACCOUNT_MOUNT_REMOVED = 0x380047,
- SMSG_ACCOUNT_MOUNT_UPDATE = 0x380046,
- SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x3802FA,
- SMSG_ACCOUNT_STORE_CURRENCY_UPDATE = 0x38031C,
- SMSG_ACCOUNT_STORE_FRONT_UPDATE = 0x38031D,
- SMSG_ACCOUNT_STORE_ITEM_STATE_CHANGED = 0x38031E,
- SMSG_ACCOUNT_STORE_RESULT = 0x38031F,
- SMSG_ACCOUNT_TOY_UPDATE = 0x380048,
- SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x38004C,
- SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x38004B,
- SMSG_ACCOUNT_WARBAND_SCENE_UPDATE = 0x38004E,
- SMSG_ACHIEVEMENT_DELETED = 0x380181,
- SMSG_ACHIEVEMENT_EARNED = 0x3800DB,
- SMSG_ACTIVATE_ESSENCE_FAILED = 0x4B0020,
- SMSG_ACTIVATE_SOULBIND_FAILED = 0x4B0022,
- SMSG_ACTIVATE_TAXI_REPLY = 0x380118,
- SMSG_ACTIVE_GLYPHS = 0x4E0045,
- SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x3801DF,
- SMSG_ADDON_LIST_REQUEST = 0x3800DA,
- SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x3800D5,
- SMSG_ADD_ITEM_PASSIVE = 0x380042,
- SMSG_ADD_LOSS_OF_CONTROL = 0x38010B,
- SMSG_ADD_RUNE_POWER = 0x380152,
- SMSG_ADJUST_SPLINE_DURATION = 0x380069,
- SMSG_ADVANCED_COMBAT_LOG = 0x3802F8,
- SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x3802F3,
- SMSG_AE_LOOT_TARGETS = 0x3800B0,
- SMSG_AE_LOOT_TARGET_ACK = 0x3800B1,
- SMSG_AI_REACTION = 0x38014F,
- SMSG_ALLIED_RACE_DETAILS = 0x38028D,
- SMSG_ALL_ACCOUNT_CRITERIA = 0x380005,
- SMSG_ALL_ACHIEVEMENT_DATA = 0x380004,
- SMSG_ALL_GUILD_ACHIEVEMENTS = 0x440000,
- SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x3802D0,
- SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x38001D,
- SMSG_AREA_POI_UPDATE_RESPONSE = 0x4B0018,
- SMSG_AREA_SPIRIT_HEALER_TIME = 0x3801D8,
- SMSG_AREA_TRIGGER_DENIED = 0x390009,
- SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x390006,
- SMSG_AREA_TRIGGER_NO_CORPSE = 0x3801B0,
- SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x390004,
- SMSG_AREA_TRIGGER_RE_PATH = 0x390003,
- SMSG_AREA_TRIGGER_RE_SHAPE = 0x390008,
- SMSG_AREA_TRIGGER_UNATTACH = 0x390007,
- SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES = 0x390005,
- SMSG_ARENA_CLEAR_OPPONENTS = 0x3800E1,
- SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x3800CA,
- SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x3800E0,
- SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x38023A,
- SMSG_ARTIFACT_FORGE_ERROR = 0x380238,
- SMSG_ARTIFACT_RESPEC_PROMPT = 0x380239,
- SMSG_ARTIFACT_XP_GAIN = 0x380280,
- SMSG_ATTACKER_STATE_UPDATE = 0x3E002C,
- SMSG_ATTACK_START = 0x3E0017,
- SMSG_ATTACK_STOP = 0x3E0018,
- SMSG_ATTACK_SWING_ERROR = 0x3E0026,
- SMSG_ATTACK_SWING_LANDED_LOG = 0x3E0027,
- SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x380269,
- SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x380268,
- SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x380267,
- SMSG_AUCTION_CLOSED_NOTIFICATION = 0x38018C,
- SMSG_AUCTION_COMMAND_RESULT = 0x380189,
- SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x380320,
- SMSG_AUCTION_FAVORITE_LIST = 0x3802EA,
- SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x3802E2,
- SMSG_AUCTION_HELLO_RESPONSE = 0x380187,
- SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x3802E1,
- SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x3802DD,
- SMSG_AUCTION_LIST_ITEMS_RESULT = 0x3802DE,
- SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x3802E0,
- SMSG_AUCTION_OUTBID_NOTIFICATION = 0x38018B,
- SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x38018D,
- SMSG_AUCTION_REPLICATE_RESPONSE = 0x380188,
- SMSG_AUCTION_WON_NOTIFICATION = 0x38018A,
- SMSG_AURA_POINTS_DEPLETED = 0x4E0012,
- SMSG_AURA_UPDATE = 0x4E0011,
- SMSG_AUTH_CHALLENGE = 0x3F0000,
- SMSG_AUTH_FAILED = 0x380000,
- SMSG_AUTH_RESPONSE = 0x380001,
- SMSG_AVAILABLE_HOTFIXES = 0x3C0001,
- SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x380321,
- SMSG_BAG_CLEANUP_FINISHED = 0x4F0007,
- SMSG_BARBER_SHOP_RESULT = 0x380157,
- SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x3802C1,
- SMSG_BATTLEFIELD_LIST = 0x3E0005,
- SMSG_BATTLEFIELD_PORT_DENIED = 0x3E000B,
- SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x3E0001,
- SMSG_BATTLEFIELD_STATUS_FAILED = 0x3E0004,
- SMSG_BATTLEFIELD_STATUS_GROUP_PROPOSAL_FAILED = 0x3E000E,
- SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION = 0x3E0000,
- SMSG_BATTLEFIELD_STATUS_NONE = 0x3E0003,
- SMSG_BATTLEFIELD_STATUS_QUEUED = 0x3E0002,
- SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x3E000D,
- SMSG_BATTLEGROUND_INFO_THROTTLED = 0x3E000C,
- SMSG_BATTLEGROUND_INIT = 0x3E0029,
- SMSG_BATTLEGROUND_PLAYER_JOINED = 0x3E0009,
- SMSG_BATTLEGROUND_PLAYER_LEFT = 0x3E000A,
- SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x3E0006,
- SMSG_BATTLEGROUND_POINTS = 0x3E0028,
- SMSG_BATTLENET_CHALLENGE_ABORT = 0x380222,
- SMSG_BATTLENET_CHALLENGE_START = 0x380221,
- SMSG_BATTLENET_NOTIFICATION = 0x380299,
- SMSG_BATTLENET_RESPONSE = 0x380298,
- SMSG_BATTLE_NET_CONNECTION_STATUS = 0x38029A,
- SMSG_BATTLE_PAY_ACK_FAILED = 0x38021D,
- SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x380212,
- SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x380213,
- SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x38021C,
- SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x380210,
- SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x38020F,
- SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x380300,
- SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x38020D,
- SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x38020E,
- SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x38020C,
- SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x38020A,
- SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x38020B,
- SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x380211,
- SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x38021B,
- SMSG_BATTLE_PAY_START_CHECKOUT = 0x3802B5,
- SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x380219,
- SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x380218,
- SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x3802A9,
- SMSG_BATTLE_PETS_HEALED = 0x38008B,
- SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x380113,
- SMSG_BATTLE_PET_DELETED = 0x380088,
- SMSG_BATTLE_PET_ERROR = 0x3800D0,
- SMSG_BATTLE_PET_JOURNAL = 0x380087,
- SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x380085,
- SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x380086,
- SMSG_BATTLE_PET_RESTORED = 0x38008A,
- SMSG_BATTLE_PET_REVOKED = 0x380089,
- SMSG_BATTLE_PET_TRAP_LEVEL = 0x380083,
- SMSG_BATTLE_PET_UPDATES = 0x380082,
- SMSG_BIND_POINT_UPDATE = 0x380011,
- SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x3800C0,
- SMSG_BLACK_MARKET_OUTBID = 0x3800C1,
- SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x3800BF,
- SMSG_BLACK_MARKET_WON = 0x3800C2,
- SMSG_BONUS_ROLL_EMPTY = 0x3800DD,
- SMSG_BOSS_KILL = 0x3E002B,
- SMSG_BREAK_TARGET = 0x3E0016,
- SMSG_BROADCAST_ACHIEVEMENT = 0x3D0012,
- SMSG_BROADCAST_SUMMON_CAST = 0x3802C3,
- SMSG_BROADCAST_SUMMON_RESPONSE = 0x3802C4,
- SMSG_BUY_FAILED = 0x380160,
- SMSG_BUY_SUCCEEDED = 0x38015F,
- SMSG_CACHE_INFO = 0x3C000F,
- SMSG_CACHE_VERSION = 0x3C000E,
- SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x380138,
- SMSG_CALENDAR_COMMAND_RESULT = 0x380139,
- SMSG_CALENDAR_COMMUNITY_INVITE = 0x380128,
- SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x380130,
- SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x380131,
- SMSG_CALENDAR_INVITE_ADDED = 0x380129,
- SMSG_CALENDAR_INVITE_ALERT = 0x38012D,
- SMSG_CALENDAR_INVITE_NOTES = 0x380132,
- SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x380133,
- SMSG_CALENDAR_INVITE_REMOVED = 0x38012A,
- SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x38012F,
- SMSG_CALENDAR_INVITE_STATUS = 0x38012B,
- SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x38012E,
- SMSG_CALENDAR_MODERATOR_STATUS = 0x38012C,
- SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x380134,
- SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x380135,
- SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x380136,
- SMSG_CALENDAR_SEND_CALENDAR = 0x380126,
- SMSG_CALENDAR_SEND_EVENT = 0x380127,
- SMSG_CALENDAR_SEND_NUM_PENDING = 0x380137,
- SMSG_CAMERA_EFFECT = 0x3801BE,
- SMSG_CANCEL_AUTO_REPEAT = 0x380177,
- SMSG_CANCEL_COMBAT = 0x3E0025,
- SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x4E0037,
- SMSG_CANCEL_PING_PIN = 0x38003B,
- SMSG_CANCEL_PRELOAD_WORLD = 0x38002E,
- SMSG_CANCEL_SCENE = 0x3800CF,
- SMSG_CANCEL_SPELL_VISUAL = 0x4E0035,
- SMSG_CANCEL_SPELL_VISUAL_KIT = 0x4E0039,
- SMSG_CAN_DUEL_RESULT = 0x3E0021,
- SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x3802A8,
- SMSG_CAPTURE_POINT_REMOVED = 0x3E0008,
- SMSG_CAST_FAILED = 0x4E0048,
- SMSG_CAS_REFRESH_REMOTE_DATA = 0x380111,
- SMSG_CAUTIONARY_CHANNEL_MESSAGE = 0x3D0009,
- SMSG_CAUTIONARY_CHAT_MESSAGE = 0x3D0008,
- SMSG_CHAIN_MISSILE_BOUNCE = 0x380061,
- SMSG_CHALLENGE_MODE_COMPLETE = 0x3800A2,
- SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x3800A8,
- SMSG_CHALLENGE_MODE_RESET = 0x3800A1,
- SMSG_CHALLENGE_MODE_START = 0x38009F,
- SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x3800A0,
- SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x4B000C,
- SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x38029B,
- SMSG_CHANNEL_LIST = 0x3D001B,
- SMSG_CHANNEL_NOTIFY = 0x3D0017,
- SMSG_CHANNEL_NOTIFY_JOINED = 0x3D0019,
- SMSG_CHANNEL_NOTIFY_LEFT = 0x3D001A,
- SMSG_CHANNEL_NOTIFY_NPE_JOINED_BATCH = 0x3D0018,
- SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x380255,
- SMSG_CHARACTER_LOGIN_FAILED = 0x38019E,
- SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x380220,
- SMSG_CHARACTER_RENAME_RESULT = 0x3801FB,
- SMSG_CHARACTER_UPGRADE_ABORTED = 0x380254,
- SMSG_CHARACTER_UPGRADE_COMPLETE = 0x380253,
- SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x380256,
- SMSG_CHARACTER_UPGRADE_STARTED = 0x380252,
- SMSG_CHAR_CUSTOMIZE_FAILURE = 0x38017B,
- SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x38017C,
- SMSG_CHAR_FACTION_CHANGE_RESULT = 0x38023F,
- SMSG_CHAT = 0x3D0001,
- SMSG_CHAT_AUTO_RESPONDED = 0x3D000E,
- SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x3D0022,
- SMSG_CHAT_DOWN = 0x3D0014,
- SMSG_CHAT_IGNORED_ACCOUNT_MUTED = 0x3D0000,
- SMSG_CHAT_IS_DOWN = 0x3D0015,
- SMSG_CHAT_NOT_IN_GUILD = 0x3D0023,
- SMSG_CHAT_NOT_IN_PARTY = 0x3D0006,
- SMSG_CHAT_PLAYER_AMBIGUOUS = 0x3D0004,
- SMSG_CHAT_PLAYER_NOTFOUND = 0x3D000D,
- SMSG_CHAT_RECONNECT = 0x3D0016,
- SMSG_CHAT_REGIONAL_SERVICE_STATUS = 0x3D001D,
- SMSG_CHAT_RESTRICTED = 0x3D0007,
- SMSG_CHAT_SERVER_MESSAGE = 0x3D001C,
- SMSG_CHEAT_IGNORE_DIMISHING_RETURNS = 0x4E0002,
- SMSG_CHECK_ABANDON_NPE = 0x4B0023,
- SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x38001B,
- SMSG_CHECK_WARGAME_ENTRY = 0x380027,
- SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x3802ED,
- SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x3802D4,
- SMSG_CLEAR_ALL_SPELL_CHARGES = 0x4E0016,
- SMSG_CLEAR_BOSS_EMOTES = 0x380054,
- SMSG_CLEAR_COOLDOWN = 0x380154,
- SMSG_CLEAR_COOLDOWNS = 0x4E0015,
- SMSG_CLEAR_RESURRECT = 0x380013,
- SMSG_CLEAR_SPELL_CHARGES = 0x4E0017,
- SMSG_CLEAR_TARGET = 0x3E0022,
- SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x4C0022,
- SMSG_CLOSE_ARTIFACT_FORGE = 0x380237,
- SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x3802CC,
- SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x3802CF,
- SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x3802CD,
- SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x3802CA,
- SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x3802CE,
- SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x3802CB,
- SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x38030C,
- SMSG_COIN_REMOVED = 0x3800AF,
- SMSG_COMBAT_EVENT_FAILED = 0x3E0019,
- SMSG_COMMENTATOR_MAP_INFO = 0x3801A0,
- SMSG_COMMENTATOR_PLAYER_INFO = 0x3801A1,
- SMSG_COMMENTATOR_STATE_CHANGED = 0x38019F,
- SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x380264,
- SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x380270,
- SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x380266,
- SMSG_COMMERCE_TOKEN_UPDATE = 0x380265,
- SMSG_COMPLAINT_RESULT = 0x380146,
- SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x380230,
- SMSG_CONFIRM_PARTY_INVITE = 0x3802A7,
- SMSG_CONNECT_TO = 0x3F0005,
- SMSG_CONSOLE_WRITE = 0x3800CD,
- SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x38026C,
- SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x38026B,
- SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x38026A,
- SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x38026E,
- SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x38026F,
- SMSG_CONTACT_LIST = 0x38021E,
- SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x3802AE,
- SMSG_CONTROL_UPDATE = 0x3800DF,
- SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x3802F6,
- SMSG_COOLDOWN_CHEAT = 0x3801D1,
- SMSG_COOLDOWN_EVENT = 0x380153,
- SMSG_CORPSE_LOCATION = 0x3800E7,
- SMSG_CORPSE_RECLAIM_DELAY = 0x3801E2,
- SMSG_CORPSE_TRANSPORT_QUERY = 0x3801AC,
- SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x4C0024,
- SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x380290,
- SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x3802F7,
- SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x38032D,
- SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x380329,
- SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x380325,
- SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x380327,
- SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x380323,
- SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x380328,
- SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x380324,
- SMSG_CRAFTING_ORDER_NPC_REWARD_INFO = 0x38032F,
- SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x38032B,
- SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x380326,
- SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x38032E,
- SMSG_CRAFT_ENCHANT_RESULT = 0x38032C,
- SMSG_CREATE_CHAR = 0x38019A,
- SMSG_CREATE_SHIPMENT_RESPONSE = 0x38022F,
- SMSG_CREATOR_VISUALS_OVERRIDE = 0x380332,
- SMSG_CRITERIA_DELETED = 0x380180,
- SMSG_CRITERIA_UPDATE = 0x38017A,
- SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x38015B,
- SMSG_CURRENCY_TRANSFER_LOG = 0x380344,
- SMSG_CURRENCY_TRANSFER_RESULT = 0x380343,
- SMSG_CUSTOM_LOAD_SCREEN = 0x380064,
- SMSG_DAILY_QUESTS_RESET = 0x4C0000,
- SMSG_DAMAGE_CALC_LOG = 0x4E0054,
- SMSG_DB_REPLY = 0x3C0000,
- SMSG_DEATH_RELEASE_LOC = 0x38016D,
- SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x3800EF,
- SMSG_DEFENSE_MESSAGE = 0x3D000C,
- SMSG_DELETE_CHAR = 0x38019B,
- SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x420022,
- SMSG_DELVES_ACCOUNT_DATA_ELEMENT_CHANGED = 0x380349,
- SMSG_DESTROY_ARENA_UNIT = 0x3801DA,
- SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x380192,
- SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x380020,
- SMSG_DISENCHANT_CREDIT = 0x38003F,
- SMSG_DISMOUNT_RESULT = 0x380010,
- SMSG_DISPEL_FAILED = 0x4E001E,
- SMSG_DISPLAY_GAME_ERROR = 0x380035,
- SMSG_DISPLAY_PLAYER_CHOICE = 0x4B0004,
- SMSG_DISPLAY_PROMOTION = 0x3800E4,
- SMSG_DISPLAY_QUEST_POPUP = 0x4C001E,
- SMSG_DISPLAY_TOAST = 0x3800BC,
- SMSG_DISPLAY_WORLD_TEXT = 0x380281,
- SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x4E0053,
- SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x380079,
- SMSG_DROP_NEW_CONNECTION = 0x3F0004,
- SMSG_DUEL_ARRANGED = 0x3E001B,
- SMSG_DUEL_COMPLETE = 0x3E001F,
- SMSG_DUEL_COUNTDOWN = 0x3E001E,
- SMSG_DUEL_IN_BOUNDS = 0x3E001D,
- SMSG_DUEL_OUT_OF_BOUNDS = 0x3E001C,
- SMSG_DUEL_REQUESTED = 0x3E001A,
- SMSG_DUEL_WINNER = 0x3E0020,
- SMSG_DURABILITY_DAMAGE_DEATH = 0x3801DD,
- SMSG_EMOTE = 0x38025C,
- SMSG_ENABLE_BARBER_SHOP = 0x380156,
- SMSG_ENCHANTMENT_LOG = 0x3801AD,
- SMSG_ENCOUNTER_END = 0x380217,
- SMSG_ENCOUNTER_START = 0x380216,
- SMSG_END_LIGHTNING_STORM = 0x380143,
- SMSG_ENTER_ENCRYPTED_MODE = 0x3F0001,
- SMSG_ENUM_CHARACTERS_RESULT = 0x380018,
- SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x380286,
- SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x4E000E,
- SMSG_EQUIPMENT_SET_ID = 0x38014C,
- SMSG_EXPECTED_SPAM_RECORDS = 0x3D0005,
- SMSG_EXPLORATION_EXPERIENCE = 0x3801F7,
- SMSG_EXPORT_ACCOUNT_PROFILE = 0x3800EC,
- SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x3802F4,
- SMSG_FACTION_BONUS_INFO = 0x3801BD,
- SMSG_FAILED_PLAYER_CONDITION = 0x4B0002,
- SMSG_FAILED_QUEST_TURN_IN = 0x3802A4,
- SMSG_FEATURE_SYSTEM_STATUS = 0x380058,
- SMSG_FEATURE_SYSTEM_STATUS2 = 0x380341,
- SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x380059,
- SMSG_FEIGN_DEATH_RESISTED = 0x3801DC,
- SMSG_FISH_ESCAPED = 0x38016A,
- SMSG_FISH_NOT_HOOKED = 0x380169,
- SMSG_FLIGHT_SPLINE_SYNC = 0x49005B,
- SMSG_FLUSH_COMBAT_LOG_FILE = 0x4E0010,
- SMSG_FORCED_DEATH_UPDATE = 0x38016E,
- SMSG_FORCE_ANIM = 0x3801E9,
- SMSG_FORCE_ANIMATIONS = 0x3801EA,
- SMSG_FORCE_OBJECT_RELINK = 0x3800E3,
- SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x38004A,
- SMSG_FORCE_SPAWN_TRACKING_UPDATE = 0x4C0021,
- SMSG_FRIEND_STATUS = 0x38021F,
- SMSG_GAIN_MAW_POWER = 0x380275,
- SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x38005C,
- SMSG_GAME_OBJECT_BASE = 0x3802BB,
- SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x38030B,
- SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x38005D,
- SMSG_GAME_OBJECT_DESPAWN = 0x38005E,
- SMSG_GAME_OBJECT_INTERACTION = 0x38030A,
- SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x4E003C,
- SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x4E003B,
- SMSG_GAME_OBJECT_RESET_STATE = 0x3801B7,
- SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x380297,
- SMSG_GAME_SPEED_SET = 0x38011C,
- SMSG_GAME_TIME_SET = 0x3801A6,
- SMSG_GAME_TIME_UPDATE = 0x3801A5,
- SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x420024,
- SMSG_GARRISON_ADD_EVENT = 0x420048,
- SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x420016,
- SMSG_GARRISON_ADD_MISSION_RESULT = 0x42001A,
- SMSG_GARRISON_ADD_SPEC_GROUPS = 0x42004B,
- SMSG_GARRISON_APPLY_TALENT_SOCKET_DATA_CHANGES = 0x42004F,
- SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x42002C,
- SMSG_GARRISON_AUTO_TROOP_MIN_LEVEL_UPDATE_RESULT = 0x420051,
- SMSG_GARRISON_BUILDING_ACTIVATED = 0x42000B,
- SMSG_GARRISON_BUILDING_REMOVED = 0x420004,
- SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT = 0x420006,
- SMSG_GARRISON_CHANGE_MISSION_START_TIME_RESULT = 0x42001D,
- SMSG_GARRISON_CLEAR_COLLECTION = 0x420047,
- SMSG_GARRISON_CLEAR_EVENT_LIST = 0x42004A,
- SMSG_GARRISON_CLEAR_SPEC_GROUPS = 0x42004C,
- SMSG_GARRISON_COLLECTION_REMOVE_ENTRY = 0x420046,
- SMSG_GARRISON_COLLECTION_UPDATE_ENTRY = 0x420045,
- SMSG_GARRISON_COMPLETE_BUILDING_CONSTRUCTION_RESULT = 0x42003D,
- SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x42001C,
- SMSG_GARRISON_CREATE_RESULT = 0x42000C,
- SMSG_GARRISON_DELETE_MISSION_RESULT = 0x420023,
- SMSG_GARRISON_DELETE_RESULT = 0x420035,
- SMSG_GARRISON_FOLLOWER_ACTIVATIONS_SET = 0x42002B,
- SMSG_GARRISON_FOLLOWER_CHANGED_FLAGS = 0x420029,
- SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL = 0x420027,
- SMSG_GARRISON_FOLLOWER_CHANGED_QUALITY = 0x420028,
- SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x420026,
- SMSG_GARRISON_FOLLOWER_FATIGUE_CLEARED = 0x42002A,
- SMSG_GARRISON_GENERATE_FOLLOWERS_RESULT = 0x420033,
- SMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO_RESULT = 0x420015,
- SMSG_GARRISON_GET_RECALL_PORTAL_LAST_USED_TIME_RESULT = 0x42001E,
- SMSG_GARRISON_IS_UPGRADEABLE_RESPONSE = 0x42003F,
- SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x420007,
- SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x420005,
- SMSG_GARRISON_LIST_COMPLETED_MISSIONS_CHEAT_RESULT = 0x420040,
- SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x420019,
- SMSG_GARRISON_MAP_DATA_RESPONSE = 0x420042,
- SMSG_GARRISON_MISSION_BONUS_ROLL_RESULT = 0x420020,
- SMSG_GARRISON_MISSION_REQUEST_REWARD_INFO_RESPONSE = 0x420043,
- SMSG_GARRISON_MISSION_START_CONDITION_UPDATE = 0x420025,
- SMSG_GARRISON_OPEN_CRAFTER = 0x420037,
- SMSG_GARRISON_OPEN_RECRUITMENT_NPC = 0x420030,
- SMSG_GARRISON_PLACE_BUILDING_RESULT = 0x420003,
- SMSG_GARRISON_PLOT_PLACED = 0x420001,
- SMSG_GARRISON_PLOT_REMOVED = 0x420002,
- SMSG_GARRISON_RECRUIT_FOLLOWER_RESULT = 0x420034,
- SMSG_GARRISON_REMOTE_INFO = 0x42000A,
- SMSG_GARRISON_REMOVE_EVENT = 0x420049,
- SMSG_GARRISON_REMOVE_FOLLOWER_ABILITY_RESULT = 0x42002F,
- SMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING_RESULT = 0x42002D,
- SMSG_GARRISON_REMOVE_FOLLOWER_RESULT = 0x420017,
- SMSG_GARRISON_RENAME_FOLLOWER_RESULT = 0x42002E,
- SMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA_RESULT = 0x420009,
- SMSG_GARRISON_RESEARCH_TALENT_RESULT = 0x42000E,
- SMSG_GARRISON_RESET_TALENT_TREE = 0x420013,
- SMSG_GARRISON_RESET_TALENT_TREE_SOCKET_DATA = 0x420014,
- SMSG_GARRISON_START_MISSION_RESULT = 0x42001B,
- SMSG_GARRISON_SWAP_BUILDINGS_RESPONSE = 0x42003C,
- SMSG_GARRISON_SWITCH_TALENT_TREE_BRANCH = 0x42004D,
- SMSG_GARRISON_TALENT_COMPLETED = 0x42000F,
- SMSG_GARRISON_TALENT_REMOVED = 0x420010,
- SMSG_GARRISON_TALENT_REMOVE_SOCKET_DATA = 0x420012,
- SMSG_GARRISON_TALENT_UPDATE_SOCKET_DATA = 0x420011,
- SMSG_GARRISON_TALENT_WORLD_QUEST_UNLOCKS_RESPONSE = 0x42004E,
- SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x420008,
- SMSG_GARRISON_UPDATE_FOLLOWER = 0x420018,
- SMSG_GARRISON_UPDATE_GARRISON_MONUMENT_SELECTIONS = 0x42003E,
- SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT = 0x420050,
- SMSG_GARRISON_UPGRADE_RESULT = 0x42000D,
- SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x42001F,
- SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x38001C,
- SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x3802AF,
- SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x3801F9,
- SMSG_GET_GARRISON_INFO_RESULT = 0x420000,
- SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x380232,
- SMSG_GET_REALM_HIDDEN_RESULT = 0x380338,
- SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x38026D,
- SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x38025A,
- SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x380231,
- SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x38022D,
- SMSG_GET_TROPHY_LIST_RESPONSE = 0x380259,
- SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x380282,
- SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x380283,
- SMSG_GM_PLAYER_INFO = 0x4B000D,
- SMSG_GM_REQUEST_PLAYER_INFO = 0x4B0003,
- SMSG_GM_TICKET_CASE_STATUS = 0x38013E,
- SMSG_GM_TICKET_SYSTEM_STATUS = 0x38013D,
- SMSG_GOD_MODE = 0x380195,
- SMSG_GOSSIP_COMPLETE = 0x4C0017,
- SMSG_GOSSIP_MESSAGE = 0x4C0018,
- SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x4C0028,
- SMSG_GOSSIP_POI = 0x38022A,
- SMSG_GOSSIP_QUEST_UPDATE = 0x4C0019,
- SMSG_GOSSIP_REFRESH_OPTIONS = 0x4C0027,
- SMSG_GROUP_ACTION_THROTTLED = 0x380024,
- SMSG_GROUP_AUTO_KICK = 0x380227,
- SMSG_GROUP_DECLINE = 0x380223,
- SMSG_GROUP_DESTROYED = 0x380226,
- SMSG_GROUP_NEW_LEADER = 0x3800C5,
- SMSG_GROUP_REQUEST_DECLINE = 0x380224,
- SMSG_GROUP_UNINVITE = 0x380225,
- SMSG_GUILD_ACHIEVEMENT_DELETED = 0x44000D,
- SMSG_GUILD_ACHIEVEMENT_EARNED = 0x44000C,
- SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x44000F,
- SMSG_GUILD_BANK_LOG_QUERY_RESULTS = 0x440027,
- SMSG_GUILD_BANK_QUERY_RESULTS = 0x440026,
- SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY = 0x440028,
- SMSG_GUILD_BANK_TEXT_QUERY_RESULT = 0x44002B,
- SMSG_GUILD_CHALLENGE_COMPLETED = 0x44001B,
- SMSG_GUILD_CHALLENGE_UPDATE = 0x44001A,
- SMSG_GUILD_CHANGE_NAME_RESULT = 0x440025,
- SMSG_GUILD_COMMAND_RESULT = 0x440002,
- SMSG_GUILD_CRITERIA_DELETED = 0x44000E,
- SMSG_GUILD_CRITERIA_UPDATE = 0x44000B,
- SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED = 0x440040,
- SMSG_GUILD_EVENT_BANK_MONEY_CHANGED = 0x44003F,
- SMSG_GUILD_EVENT_DISBANDED = 0x440035,
- SMSG_GUILD_EVENT_LOG_QUERY_RESULTS = 0x44002A,
- SMSG_GUILD_EVENT_MOTD = 0x440036,
- SMSG_GUILD_EVENT_NEW_LEADER = 0x440034,
- SMSG_GUILD_EVENT_PLAYER_JOINED = 0x440032,
- SMSG_GUILD_EVENT_PLAYER_LEFT = 0x440033,
- SMSG_GUILD_EVENT_PRESENCE_CHANGE = 0x440037,
- SMSG_GUILD_EVENT_RANKS_UPDATED = 0x440039,
- SMSG_GUILD_EVENT_RANK_CHANGED = 0x44003A,
- SMSG_GUILD_EVENT_STATUS_CHANGE = 0x440038,
- SMSG_GUILD_EVENT_TAB_ADDED = 0x44003B,
- SMSG_GUILD_EVENT_TAB_DELETED = 0x44003C,
- SMSG_GUILD_EVENT_TAB_MODIFIED = 0x44003D,
- SMSG_GUILD_EVENT_TAB_TEXT_CHANGED = 0x44003E,
- SMSG_GUILD_FLAGGED_FOR_RENAME = 0x440024,
- SMSG_GUILD_HARDCORE_MEMBER_DEATH = 0x440004,
- SMSG_GUILD_INVITE = 0x440012,
- SMSG_GUILD_INVITE_DECLINED = 0x440030,
- SMSG_GUILD_INVITE_EXPIRED = 0x440031,
- SMSG_GUILD_ITEM_LOOTED_NOTIFY = 0x44001C,
- SMSG_GUILD_KNOWN_RECIPES = 0x440006,
- SMSG_GUILD_MEMBERS_WITH_RECIPE = 0x440007,
- SMSG_GUILD_MEMBER_DAILY_RESET = 0x44002C,
- SMSG_GUILD_MEMBER_RECIPES = 0x440005,
- SMSG_GUILD_MEMBER_UPDATE_NOTE = 0x440011,
- SMSG_GUILD_MOVED = 0x440022,
- SMSG_GUILD_MOVE_STARTING = 0x440021,
- SMSG_GUILD_NAME_CHANGED = 0x440023,
- SMSG_GUILD_NEWS = 0x440009,
- SMSG_GUILD_NEWS_DELETED = 0x44000A,
- SMSG_GUILD_PARTY_STATE = 0x440013,
- SMSG_GUILD_PERMISSIONS_QUERY_RESULTS = 0x440029,
- SMSG_GUILD_RANKS = 0x440010,
- SMSG_GUILD_RENAME_NAME_CHECK = 0x440044,
- SMSG_GUILD_RENAME_REFUND_RESULT = 0x440046,
- SMSG_GUILD_RENAME_REQUESTED_RESULT = 0x440045,
- SMSG_GUILD_RENAME_STATUS_UPDATE = 0x440043,
- SMSG_GUILD_REPUTATION_REACTION_CHANGED = 0x440014,
- SMSG_GUILD_RESET = 0x440020,
- SMSG_GUILD_REWARD_LIST = 0x440008,
- SMSG_GUILD_ROSTER = 0x440003,
- SMSG_GUILD_SEND_RANK_CHANGE = 0x440001,
- SMSG_HARDCORE_DEATH_ALERT = 0x380340,
- SMSG_HEALTH_UPDATE = 0x38016B,
- SMSG_HIGHEST_THREAT_UPDATE = 0x380173,
- SMSG_HOTFIX_CONNECT = 0x3C0003,
- SMSG_HOTFIX_MESSAGE = 0x3C0002,
- SMSG_INITIALIZE_FACTIONS = 0x3801BC,
- SMSG_INITIAL_SETUP = 0x380014,
- SMSG_INIT_WORLD_STATES = 0x3801DE,
- SMSG_INSPECT_RESULT = 0x3800C9,
- SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x380245,
- SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x380244,
- SMSG_INSTANCE_ENCOUNTER_END = 0x38024D,
- SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x380243,
- SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x38024F,
- SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x38024E,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x380248,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x380247,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x38024C,
- SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x380250,
- SMSG_INSTANCE_ENCOUNTER_START = 0x380249,
- SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x380246,
- SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x38024B,
- SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x38024A,
- SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x380193,
- SMSG_INSTANCE_INFO = 0x3800CC,
- SMSG_INSTANCE_RESET = 0x380121,
- SMSG_INSTANCE_RESET_FAILED = 0x380122,
- SMSG_INSTANCE_SAVE_CREATED = 0x380215,
- SMSG_INTERRUPT_POWER_REGEN = 0x4E004A,
- SMSG_INVALIDATE_PAGE_TEXT = 0x3C000A,
- SMSG_INVALIDATE_PLAYER = 0x4B0007,
- SMSG_INVALID_PROMOTION_CODE = 0x3801EB,
- SMSG_INVENTORY_CHANGE_FAILURE = 0x4F0005,
- SMSG_INVENTORY_FIXUP_COMPLETE = 0x3802A6,
- SMSG_INVENTORY_FULL_OVERFLOW = 0x3802B7,
- SMSG_ISLAND_AZERITE_GAIN = 0x3801F4,
- SMSG_ISLAND_COMPLETE = 0x3801F5,
- SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x4C0004,
- SMSG_ITEM_CHANGED = 0x380184,
- SMSG_ITEM_COOLDOWN = 0x38025B,
- SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x3801ED,
- SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x380034,
- SMSG_ITEM_INTERACTION_COMPLETE = 0x3802EC,
- SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x380032,
- SMSG_ITEM_PUSH_RESULT = 0x3800BB,
- SMSG_ITEM_TIME_UPDATE = 0x3801EC,
- SMSG_KICK_REASON = 0x380124,
- SMSG_LATENCY_REPORT_PING = 0x3802FC,
- SMSG_LEARNED_SPELLS = 0x4E003E,
- SMSG_LEARN_PVP_TALENT_FAILED = 0x38006D,
- SMSG_LEARN_TALENT_FAILED = 0x38006C,
- SMSG_LEGACY_LOOT_RULES = 0x3802BC,
- SMSG_LEVEL_LINKING_RESULT = 0x3802D2,
- SMSG_LEVEL_UP_INFO = 0x380182,
- SMSG_LFG_BOOT_PLAYER = 0x460019,
- SMSG_LFG_DISABLED = 0x460017,
- SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x46001F,
- SMSG_LFG_INSTANCE_SHUTDOWN_COUNTDOWN = 0x460009,
- SMSG_LFG_JOIN_LOBBY_MATCHMAKER_QUEUE = 0x460020,
- SMSG_LFG_JOIN_RESULT = 0x460000,
- SMSG_LFG_LIST_APPLICANT_LIST_UPDATE = 0x46000F,
- SMSG_LFG_LIST_APPLICATION_STATUS_UPDATE = 0x46000C,
- SMSG_LFG_LIST_APPLY_TO_GROUP_RESULT = 0x46000D,
- SMSG_LFG_LIST_JOIN_RESULT = 0x460001,
- SMSG_LFG_LIST_SEARCH_RESULTS = 0x460002,
- SMSG_LFG_LIST_SEARCH_RESULTS_UPDATE = 0x460010,
- SMSG_LFG_LIST_SEARCH_STATUS = 0x460003,
- SMSG_LFG_LIST_UPDATE_BLACKLIST = 0x46000E,
- SMSG_LFG_LIST_UPDATE_EXPIRATION = 0x46000B,
- SMSG_LFG_LIST_UPDATE_STATUS = 0x46000A,
- SMSG_LFG_OFFER_CONTINUE = 0x460018,
- SMSG_LFG_PARTY_INFO = 0x46001A,
- SMSG_LFG_PLAYER_INFO = 0x46001B,
- SMSG_LFG_PLAYER_REWARD = 0x46001C,
- SMSG_LFG_PROPOSAL_UPDATE = 0x460011,
- SMSG_LFG_QUEUE_STATUS = 0x460004,
- SMSG_LFG_READY_CHECK_RESULT = 0x46001E,
- SMSG_LFG_READY_CHECK_UPDATE = 0x460006,
- SMSG_LFG_ROLE_CHECK_UPDATE = 0x460005,
- SMSG_LFG_SLOT_INVALID = 0x460014,
- SMSG_LFG_TELEPORT_DENIED = 0x460016,
- SMSG_LFG_UPDATE_STATUS = 0x460008,
- SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x380207,
- SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x380206,
- SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x3801FA,
- SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x380208,
- SMSG_LOAD_CUF_PROFILES = 0x380055,
- SMSG_LOAD_EQUIPMENT_SET = 0x3801A8,
- SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x38030D,
- SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x38030E,
- SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x38030F,
- SMSG_LOBBY_MATCHMAKER_QUEUE_PROPOSED = 0x380311,
- SMSG_LOBBY_MATCHMAKER_QUEUE_RESULT = 0x380312,
- SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x380310,
- SMSG_LOGIN_SET_TIME_SPEED = 0x3801A7,
- SMSG_LOGIN_VERIFY_WORLD = 0x38002F,
- SMSG_LOGOUT_CANCEL_ACK = 0x380120,
- SMSG_LOGOUT_COMPLETE = 0x38011F,
- SMSG_LOGOUT_RESPONSE = 0x38011E,
- SMSG_LOG_XP_GAIN = 0x38017E,
- SMSG_LOOT_ALL_PASSED = 0x3800B9,
- SMSG_LOOT_LIST = 0x3801D9,
- SMSG_LOOT_MONEY_NOTIFY = 0x3800B4,
- SMSG_LOOT_RELEASE = 0x3800B3,
- SMSG_LOOT_RELEASE_ALL = 0x3800B2,
- SMSG_LOOT_REMOVED = 0x3800AE,
- SMSG_LOOT_RESPONSE = 0x3800AD,
- SMSG_LOOT_ROLL = 0x3800B6,
- SMSG_LOOT_ROLLS_COMPLETE = 0x3800B8,
- SMSG_LOOT_ROLL_WON = 0x3800BA,
- SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x38010A,
- SMSG_MAIL_COMMAND_RESULT = 0x3800D3,
- SMSG_MAIL_LIST_RESULT = 0x3801EE,
- SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x3801EF,
- SMSG_MAP_OBJECTIVES_INIT = 0x3E002A,
- SMSG_MAP_OBJ_EVENTS = 0x38005F,
- SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x3800B7,
- SMSG_MEETING_STONE_FAILED = 0x380313,
- SMSG_MESSAGE_BOX = 0x38000A,
- SMSG_MINIMAP_PING = 0x380168,
- SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x4E0004,
- SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x4E0003,
- SMSG_MISSILE_CANCEL = 0x380060,
- SMSG_MODIFY_COOLDOWN = 0x3801FC,
- SMSG_MOTD = 0x3D0003,
- SMSG_MOUNT_RESULT = 0x38000F,
- SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x3802C2,
- SMSG_MOVE_ADD_IMPULSE = 0x490062,
- SMSG_MOVE_APPLY_INERTIA = 0x49005E,
- SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x490045,
- SMSG_MOVE_DISABLE_COLLISION = 0x490041,
- SMSG_MOVE_DISABLE_DOUBLE_JUMP = 0x49002B,
- SMSG_MOVE_DISABLE_FULL_SPEED_TURNING = 0x490075,
- SMSG_MOVE_DISABLE_GRAVITY = 0x49003D,
- SMSG_MOVE_DISABLE_INERTIA = 0x49003F,
- SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x49003C,
- SMSG_MOVE_ENABLE_COLLISION = 0x490042,
- SMSG_MOVE_ENABLE_DOUBLE_JUMP = 0x49002A,
- SMSG_MOVE_ENABLE_FULL_SPEED_TURNING = 0x490074,
- SMSG_MOVE_ENABLE_GRAVITY = 0x49003E,
- SMSG_MOVE_ENABLE_INERTIA = 0x490040,
- SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x49003B,
- SMSG_MOVE_KNOCK_BACK = 0x490031,
- SMSG_MOVE_REMOVE_INERTIA = 0x49005F,
- SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x490046,
- SMSG_MOVE_ROOT = 0x490027,
- SMSG_MOVE_SET_ACTIVE_MOVER = 0x490003,
- SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED = 0x49006B,
- SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION = 0x490066,
- SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE = 0x49006C,
- SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD = 0x490069,
- SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT = 0x49006A,
- SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT = 0x490072,
- SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT = 0x490068,
- SMSG_MOVE_SET_ADV_FLYING_MAX_VEL = 0x490067,
- SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION = 0x490071,
- SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN = 0x49006D,
- SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP = 0x49006E,
- SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION = 0x490070,
- SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD = 0x49006F,
- SMSG_MOVE_SET_CANT_SWIM = 0x490035,
- SMSG_MOVE_SET_CAN_ADV_FLY = 0x490064,
- SMSG_MOVE_SET_CAN_DRIVE = 0x490076,
- SMSG_MOVE_SET_CAN_FLY = 0x490033,
- SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING = 0x490037,
- SMSG_MOVE_SET_COLLISION_HEIGHT = 0x490043,
- SMSG_MOVE_SET_COMPOUND_STATE = 0x490047,
- SMSG_MOVE_SET_FEATHER_FALL = 0x49002D,
- SMSG_MOVE_SET_FLIGHT_BACK_SPEED = 0x490023,
- SMSG_MOVE_SET_FLIGHT_SPEED = 0x490022,
- SMSG_MOVE_SET_HOVERING = 0x49002F,
- SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES = 0x490039,
- SMSG_MOVE_SET_LAND_WALK = 0x49002C,
- SMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x490014,
- SMSG_MOVE_SET_NORMAL_FALL = 0x49002E,
- SMSG_MOVE_SET_PITCH_RATE = 0x490026,
- SMSG_MOVE_SET_RUN_BACK_SPEED = 0x49001F,
- SMSG_MOVE_SET_RUN_SPEED = 0x49001E,
- SMSG_MOVE_SET_SWIM_BACK_SPEED = 0x490021,
- SMSG_MOVE_SET_SWIM_SPEED = 0x490020,
- SMSG_MOVE_SET_TURN_RATE = 0x490025,
- SMSG_MOVE_SET_VEHICLE_REC_ID = 0x490044,
- SMSG_MOVE_SET_WALK_SPEED = 0x490024,
- SMSG_MOVE_SET_WATER_WALK = 0x490029,
- SMSG_MOVE_SKIP_TIME = 0x490048,
- SMSG_MOVE_SPLINE_DISABLE_COLLISION = 0x49004D,
- SMSG_MOVE_SPLINE_DISABLE_GRAVITY = 0x49004B,
- SMSG_MOVE_SPLINE_ENABLE_COLLISION = 0x49004E,
- SMSG_MOVE_SPLINE_ENABLE_GRAVITY = 0x49004C,
- SMSG_MOVE_SPLINE_ROOT = 0x490049,
- SMSG_MOVE_SPLINE_SET_FEATHER_FALL = 0x49004F,
- SMSG_MOVE_SPLINE_SET_FLIGHT_BACK_SPEED = 0x49001A,
- SMSG_MOVE_SPLINE_SET_FLIGHT_SPEED = 0x490019,
- SMSG_MOVE_SPLINE_SET_FLYING = 0x490059,
- SMSG_MOVE_SPLINE_SET_HOVER = 0x490051,
- SMSG_MOVE_SPLINE_SET_LAND_WALK = 0x490054,
- SMSG_MOVE_SPLINE_SET_NORMAL_FALL = 0x490050,
- SMSG_MOVE_SPLINE_SET_PITCH_RATE = 0x49001D,
- SMSG_MOVE_SPLINE_SET_RUN_BACK_SPEED = 0x490016,
- SMSG_MOVE_SPLINE_SET_RUN_MODE = 0x490057,
- SMSG_MOVE_SPLINE_SET_RUN_SPEED = 0x490015,
- SMSG_MOVE_SPLINE_SET_SWIM_BACK_SPEED = 0x490018,
- SMSG_MOVE_SPLINE_SET_SWIM_SPEED = 0x490017,
- SMSG_MOVE_SPLINE_SET_TURN_RATE = 0x49001C,
- SMSG_MOVE_SPLINE_SET_WALK_MODE = 0x490058,
- SMSG_MOVE_SPLINE_SET_WALK_SPEED = 0x49001B,
- SMSG_MOVE_SPLINE_SET_WATER_WALK = 0x490053,
- SMSG_MOVE_SPLINE_START_SWIM = 0x490055,
- SMSG_MOVE_SPLINE_STOP_SWIM = 0x490056,
- SMSG_MOVE_SPLINE_UNROOT = 0x49004A,
- SMSG_MOVE_SPLINE_UNSET_FLYING = 0x49005A,
- SMSG_MOVE_SPLINE_UNSET_HOVER = 0x490052,
- SMSG_MOVE_TELEPORT = 0x490032,
- SMSG_MOVE_UNROOT = 0x490028,
- SMSG_MOVE_UNSET_CANT_SWIM = 0x490036,
- SMSG_MOVE_UNSET_CAN_ADV_FLY = 0x490065,
- SMSG_MOVE_UNSET_CAN_DRIVE = 0x490077,
- SMSG_MOVE_UNSET_CAN_FLY = 0x490034,
- SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING = 0x490038,
- SMSG_MOVE_UNSET_HOVERING = 0x490030,
- SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x49003A,
- SMSG_MOVE_UPDATE = 0x49000E,
- SMSG_MOVE_UPDATE_ADD_IMPULSE = 0x490063,
- SMSG_MOVE_UPDATE_APPLY_INERTIA = 0x490060,
- SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE = 0x490012,
- SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0x49000D,
- SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0x49000A,
- SMSG_MOVE_UPDATE_FLIGHT_SPEED = 0x490009,
- SMSG_MOVE_UPDATE_KNOCK_BACK = 0x490010,
- SMSG_MOVE_UPDATE_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x490011,
- SMSG_MOVE_UPDATE_PITCH_RATE = 0x49000C,
- SMSG_MOVE_UPDATE_REMOVE_INERTIA = 0x490061,
- SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE = 0x490013,
- SMSG_MOVE_UPDATE_RUN_BACK_SPEED = 0x490005,
- SMSG_MOVE_UPDATE_RUN_SPEED = 0x490004,
- SMSG_MOVE_UPDATE_SWIM_BACK_SPEED = 0x490008,
- SMSG_MOVE_UPDATE_SWIM_SPEED = 0x490007,
- SMSG_MOVE_UPDATE_TELEPORT = 0x49000F,
- SMSG_MOVE_UPDATE_TURN_RATE = 0x49000B,
- SMSG_MOVE_UPDATE_WALK_SPEED = 0x490006,
- SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x380272,
- SMSG_MULTI_FLOOR_NEW_FLOOR = 0x380271,
- SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x3800A3,
- SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x3800A5,
- SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x3800AA,
- SMSG_MYTHIC_PLUS_SEASON_DATA = 0x3800A4,
- SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x380074,
- SMSG_NEW_DATA_BUILD = 0x380337,
- SMSG_NEW_TAXI_PATH = 0x380119,
- SMSG_NEW_WORLD = 0x38002B,
- SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x4E0034,
- SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x380145,
- SMSG_NOTIFY_MONEY = 0x380031,
- SMSG_NOTIFY_RECEIVED_MAIL = 0x3800D4,
- SMSG_NPC_INTERACTION_OPEN_RESULT = 0x380309,
- SMSG_OFFER_PETITION_ERROR = 0x380150,
- SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x38017F,
- SMSG_ON_MONSTER_MOVE = 0x490002,
- SMSG_OPEN_ARTIFACT_FORGE = 0x380236,
- SMSG_OPEN_CONTAINER = 0x4F0006,
- SMSG_OPEN_LFG_DUNGEON_FINDER = 0x460015,
- SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x38022E,
- SMSG_OVERRIDE_LIGHT = 0x380155,
- SMSG_PAGE_TEXT = 0x3801B3,
- SMSG_PARTY_COMMAND_RESULT = 0x380228,
- SMSG_PARTY_ELIGIBILITY_FOR_DELVE_TIERS_RESPONSE = 0x38034C,
- SMSG_PARTY_INVITE = 0x380056,
- SMSG_PARTY_KILL_LOG = 0x3801F2,
- SMSG_PARTY_MEMBER_FULL_STATE = 0x3801F1,
- SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x3801F0,
- SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x3802F2,
- SMSG_PARTY_UPDATE = 0x38008C,
- SMSG_PAST_TIME_EVENTS = 0x38005B,
- SMSG_PAUSE_MIRROR_TIMER = 0x3801AA,
- SMSG_PENDING_RAID_LOCK = 0x380191,
- SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x380306,
- SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x380302,
- SMSG_PERKS_PROGRAM_DISABLED = 0x380307,
- SMSG_PERKS_PROGRAM_RESULT = 0x380303,
- SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x380301,
- SMSG_PETITION_ALREADY_SIGNED = 0x380037,
- SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x440042,
- SMSG_PETITION_SHOW_LIST = 0x380158,
- SMSG_PETITION_SHOW_SIGNATURES = 0x380159,
- SMSG_PETITION_SIGN_RESULTS = 0x3801E4,
- SMSG_PET_ACTION_FEEDBACK = 0x3801E1,
- SMSG_PET_ACTION_SOUND = 0x38013B,
- SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x38009A,
- SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x38010F,
- SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x380093,
- SMSG_PET_BATTLE_FINAL_ROUND = 0x380098,
- SMSG_PET_BATTLE_FINISHED = 0x380099,
- SMSG_PET_BATTLE_FIRST_ROUND = 0x380095,
- SMSG_PET_BATTLE_INITIAL_UPDATE = 0x380094,
- SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x38009B,
- SMSG_PET_BATTLE_PVP_CHALLENGE = 0x380092,
- SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x3800D1,
- SMSG_PET_BATTLE_QUEUE_STATUS = 0x3800D2,
- SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x380097,
- SMSG_PET_BATTLE_REQUEST_FAILED = 0x380091,
- SMSG_PET_BATTLE_ROUND_RESULT = 0x380096,
- SMSG_PET_BATTLE_SLOT_UPDATES = 0x380084,
- SMSG_PET_CAST_FAILED = 0x4E0049,
- SMSG_PET_CLEAR_SPELLS = 0x4E0013,
- SMSG_PET_DISMISS_SOUND = 0x38013C,
- SMSG_PET_GOD_MODE = 0x380116,
- SMSG_PET_GUIDS = 0x38019D,
- SMSG_PET_LEARNED_SPELLS = 0x4E0040,
- SMSG_PET_MODE = 0x38001F,
- SMSG_PET_NAME_INVALID = 0x38015D,
- SMSG_PET_NEWLY_TAMED = 0x38001E,
- SMSG_PET_SPELLS_MESSAGE = 0x4E0014,
- SMSG_PET_STABLE_RESULT = 0x38002A,
- SMSG_PET_TAME_FAILURE = 0x38014D,
- SMSG_PET_UNLEARNED_SPELLS = 0x4E0041,
- SMSG_PHASE_SHIFT_CHANGE = 0x38000C,
- SMSG_PLAYED_TIME = 0x38016F,
- SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT = 0x4B002D,
- SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x4B001F,
- SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x4B001E,
- SMSG_PLAYER_BONUS_ROLL_FAILED = 0x4B0021,
- SMSG_PLAYER_BOUND = 0x4B0000,
- SMSG_PLAYER_CHOICE_CLEAR = 0x4B0006,
- SMSG_PLAYER_CHOICE_DISPLAY_ERROR = 0x4B0005,
- SMSG_PLAYER_CONDITION_RESULT = 0x4B0012,
- SMSG_PLAYER_END_OF_MATCH_DETAILS = 0x4B002F,
- SMSG_PLAYER_HIDE_ARROW_CALLOUT = 0x4B002C,
- SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x4B0011,
- SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x4B0016,
- SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x440041,
- SMSG_PLAYER_SAVE_PERSONAL_EMBLEM = 0x4B002E,
- SMSG_PLAYER_SHOW_ARROW_CALLOUT = 0x4B002B,
- SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x4B0029,
- SMSG_PLAYER_SHOW_PARTY_POSE_UI = 0x4B002A,
- SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x4B0024,
- SMSG_PLAYER_SKINNED = 0x4B000E,
- SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x4B0015,
- SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x4B0014,
- SMSG_PLAY_MUSIC = 0x380201,
- SMSG_PLAY_OBJECT_SOUND = 0x380203,
- SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x3801C9,
- SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x4E0038,
- SMSG_PLAY_SCENE = 0x3800CE,
- SMSG_PLAY_SOUND = 0x380200,
- SMSG_PLAY_SPEAKERBOT_SOUND = 0x380204,
- SMSG_PLAY_SPELL_VISUAL = 0x4E0036,
- SMSG_PLAY_SPELL_VISUAL_KIT = 0x4E003A,
- SMSG_PLAY_TIME_WARNING = 0x380197,
- SMSG_PONG = 0x3F0006,
- SMSG_POWER_UPDATE = 0x38016C,
- SMSG_PRELOAD_CHILD_MAP = 0x38000D,
- SMSG_PRELOAD_WORLD = 0x38002C,
- SMSG_PREPOPULATE_NAME_CACHE = 0x3802C5,
- SMSG_PRE_RESSURECT = 0x3801FF,
- SMSG_PRINT_NOTIFICATION = 0x380063,
- SMSG_PROC_RESIST = 0x3801F3,
- SMSG_PROFESSION_GOSSIP = 0x380292,
- SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x4E0042,
- SMSG_PVP_CREDIT = 0x3E0024,
- SMSG_PVP_MATCH_COMPLETE = 0x3E002F,
- SMSG_PVP_MATCH_INITIALIZE = 0x3E0030,
- SMSG_PVP_MATCH_SET_STATE = 0x3E002E,
- SMSG_PVP_MATCH_START = 0x3E002D,
- SMSG_PVP_MATCH_STATISTICS = 0x3E0010,
- SMSG_PVP_OPTIONS_ENABLED = 0x3E0013,
- SMSG_PVP_TIER_RECORD = 0x3802FD,
- SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x3C000C,
- SMSG_QUERY_CREATURE_RESPONSE = 0x3C0006,
- SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x3C0007,
- SMSG_QUERY_GARRISON_PET_NAME_RESPONSE = 0x420041,
- SMSG_QUERY_GUILD_FOLLOW_INFO_RESPONSE = 0x44002F,
- SMSG_QUERY_GUILD_INFO_RESPONSE = 0x44002D,
- SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x3C0010,
- SMSG_QUERY_NPC_TEXT_RESPONSE = 0x3C0008,
- SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x3C0009,
- SMSG_QUERY_PETITION_RESPONSE = 0x3C000D,
- SMSG_QUERY_PET_NAME_RESPONSE = 0x3C000B,
- SMSG_QUERY_PLAYER_NAMES_RESPONSE = 0x4B0026,
- SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x4B000A,
- SMSG_QUERY_QUEST_INFO_RESPONSE = 0x4C0016,
- SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x44002E,
- SMSG_QUERY_TIME_RESPONSE = 0x38017D,
- SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x4C0001,
- SMSG_QUEST_CONFIRM_ACCEPT = 0x4C000F,
- SMSG_QUEST_FORCE_REMOVED = 0x4C001C,
- SMSG_QUEST_GIVER_INVALID_QUEST = 0x4C0005,
- SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE = 0x4C0014,
- SMSG_QUEST_GIVER_QUEST_COMPLETE = 0x4C0003,
- SMSG_QUEST_GIVER_QUEST_DETAILS = 0x4C0012,
- SMSG_QUEST_GIVER_QUEST_FAILED = 0x4C0006,
- SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE = 0x4C001A,
- SMSG_QUEST_GIVER_REQUEST_ITEMS = 0x4C0013,
- SMSG_QUEST_GIVER_STATUS = 0x4C001B,
- SMSG_QUEST_GIVER_STATUS_MULTIPLE = 0x4C0011,
- SMSG_QUEST_ITEM_USABILITY_RESPONSE = 0x4C0002,
- SMSG_QUEST_LOG_FULL = 0x4C0007,
- SMSG_QUEST_NON_LOG_UPDATE_COMPLETE = 0x4C0008,
- SMSG_QUEST_POI_QUERY_RESPONSE = 0x4C001D,
- SMSG_QUEST_POI_UPDATE_RESPONSE = 0x4C001F,
- SMSG_QUEST_PUSH_RESULT = 0x4C0010,
- SMSG_QUEST_SESSION_INFO_RESPONSE = 0x3802E8,
- SMSG_QUEST_SESSION_READY_CHECK = 0x3802D6,
- SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x3802D7,
- SMSG_QUEST_SESSION_RESULT = 0x3802D5,
- SMSG_QUEST_UPDATE_ADD_CREDIT = 0x4C000C,
- SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x4C000D,
- SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x4C000E,
- SMSG_QUEST_UPDATE_COMPLETE = 0x4C0009,
- SMSG_QUEST_UPDATE_FAILED = 0x4C000A,
- SMSG_QUEST_UPDATE_FAILED_TIMER = 0x4C000B,
- SMSG_QUEUE_SUMMARY_UPDATE = 0x3802A5,
- SMSG_RAF_ACCOUNT_INFO = 0x3802D3,
- SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x3802E4,
- SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x380334,
- SMSG_RAID_DIFFICULTY_SET = 0x380240,
- SMSG_RAID_GROUP_ONLY = 0x380242,
- SMSG_RAID_INSTANCE_MESSAGE = 0x3D000A,
- SMSG_RAID_MARKERS_CHANGED = 0x380038,
- SMSG_RANDOM_ROLL = 0x3800C8,
- SMSG_RATED_PVP_INFO = 0x3E000F,
- SMSG_READY_CHECK_COMPLETED = 0x380090,
- SMSG_READY_CHECK_RESPONSE = 0x38008F,
- SMSG_READY_CHECK_STARTED = 0x38008E,
- SMSG_READ_ITEM_RESULT_FAILED = 0x38023C,
- SMSG_READ_ITEM_RESULT_OK = 0x380233,
- SMSG_REALM_QUERY_RESPONSE = 0x3C0005,
- SMSG_REATTACH_RESURRECT = 0x3801E3,
- SMSG_RECEIVE_PING_UNIT = 0x380039,
- SMSG_RECEIVE_PING_WORLD_POINT = 0x38003A,
- SMSG_RECRAFT_ITEM_RESULT = 0x38032A,
- SMSG_RECRUIT_A_FRIEND_FAILURE = 0x38015A,
- SMSG_REFRESH_COMPONENT = 0x3800E9,
- SMSG_REGIONWIDE_CHARACTER_MAIL_DATA = 0x38001A,
- SMSG_REGIONWIDE_CHARACTER_RESTRICTIONS_DATA = 0x380019,
- SMSG_REMOVE_ITEM_PASSIVE = 0x380043,
- SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x4E0043,
- SMSG_REPLACE_TROPHY_RESPONSE = 0x380258,
- SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x4B0009,
- SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x380025,
- SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x3E0014,
- SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x3E0015,
- SMSG_RESET_COMPRESSION_CONTEXT = 0x3F0007,
- SMSG_RESET_FAILED_NOTIFY = 0x380151,
- SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x380331,
- SMSG_RESET_QUEST_POI = 0x4C0020,
- SMSG_RESET_RANGED_COMBAT_TIMER = 0x3E0023,
- SMSG_RESET_WEEKLY_CURRENCY = 0x380009,
- SMSG_RESPEC_WIPE_CONFIRM = 0x3800AB,
- SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x380006,
- SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x380304,
- SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x380305,
- SMSG_RESTART_GLOBAL_COOLDOWN = 0x4E0052,
- SMSG_RESTRICTED_ACCOUNT_WARNING = 0x380052,
- SMSG_RESUME_CAST = 0x4E002C,
- SMSG_RESUME_CAST_BAR = 0x4E002F,
- SMSG_RESUME_COMMS = 0x3F0003,
- SMSG_RESUME_TOKEN = 0x380041,
- SMSG_RESURRECT_REQUEST = 0x380012,
- SMSG_RESYNC_RUNES = 0x4E0050,
- SMSG_RETURNING_PLAYER_PROMPT = 0x38023B,
- SMSG_RETURN_APPLICANT_LIST = 0x3802C9,
- SMSG_RETURN_RECRUITING_CLUBS = 0x3802C8,
- SMSG_ROLE_CHANGED_INFORM = 0x380021,
- SMSG_ROLE_CHOSEN = 0x46001D,
- SMSG_ROLE_POLL_INFORM = 0x380022,
- SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x380291,
- SMSG_RUNE_REGEN_DEBUG = 0x38004F,
- SMSG_SCENARIO_COMPLETED = 0x38027F,
- SMSG_SCENARIO_POIS = 0x3800CB,
- SMSG_SCENARIO_PROGRESS_UPDATE = 0x3800C4,
- SMSG_SCENARIO_SHOW_CRITERIA = 0x380295,
- SMSG_SCENARIO_STATE = 0x3800C3,
- SMSG_SCENARIO_UI_UPDATE = 0x380294,
- SMSG_SCENARIO_VACATE = 0x38023D,
- SMSG_SCENE_OBJECT_EVENT = 0x38007A,
- SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x38007F,
- SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x380080,
- SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x38007C,
- SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x38007B,
- SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x38007E,
- SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x38007D,
- SMSG_SCHEDULED_AREA_POI_UPDATE_RESPONSE = 0x4B0019,
- SMSG_SCRIPT_CAST = 0x4E0047,
- SMSG_SEASON_INFO = 0x38005A,
- SMSG_SELL_RESPONSE = 0x38015E,
- SMSG_SEND_ITEM_PASSIVES = 0x380044,
- SMSG_SEND_KNOWN_SPELLS = 0x4E0019,
- SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x3800C6,
- SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x3800C7,
- SMSG_SEND_SPELL_CHARGES = 0x4E001B,
- SMSG_SEND_SPELL_HISTORY = 0x4E001A,
- SMSG_SEND_UNLEARN_SPELLS = 0x4E001C,
- SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x3800E6,
- SMSG_SERVER_TIME = 0x38011D,
- SMSG_SERVER_TIME_OFFSET = 0x3801AE,
- SMSG_SETUP_COMBAT_LOG_FILE_FLUSH = 0x4E000F,
- SMSG_SETUP_CURRENCY = 0x380007,
- SMSG_SET_AI_ANIM_KIT = 0x3801C8,
- SMSG_SET_ANIM_TIER = 0x3801CC,
- SMSG_SET_CHR_UPGRADE_TIER = 0x380077,
- SMSG_SET_CURRENCY = 0x380008,
- SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x460012,
- SMSG_SET_DUNGEON_DIFFICULTY = 0x38013F,
- SMSG_SET_FACTION_AT_WAR = 0x380199,
- SMSG_SET_FACTION_NOT_VISIBLE = 0x3801C3,
- SMSG_SET_FACTION_STANDING = 0x3801C4,
- SMSG_SET_FACTION_VISIBLE = 0x3801C2,
- SMSG_SET_FLAT_SPELL_MODIFIER = 0x4E0027,
- SMSG_SET_ITEM_PURCHASE_DATA = 0x380033,
- SMSG_SET_LOOT_METHOD_FAILED = 0x380263,
- SMSG_SET_MAX_WEEKLY_QUANTITY = 0x380036,
- SMSG_SET_MELEE_ANIM_KIT = 0x3801CB,
- SMSG_SET_MOVEMENT_ANIM_KIT = 0x3801CA,
- SMSG_SET_PCT_SPELL_MODIFIER = 0x4E0028,
- SMSG_SET_PET_SPECIALIZATION = 0x3800BD,
- SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x4B000B,
- SMSG_SET_PLAY_HOVER_ANIM = 0x380053,
- SMSG_SET_PROFICIENCY = 0x3801CD,
- SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x3802DC,
- SMSG_SET_SHIPMENT_READY_RESPONSE = 0x42003A,
- SMSG_SET_SPELL_CHARGES = 0x4E0018,
- SMSG_SET_TIME_ZONE_INFORMATION = 0x380112,
- SMSG_SET_VEHICLE_REC_ID = 0x380190,
- SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x380308,
- SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x42003B,
- SMSG_SHOW_DELVES_COMPANION_CONFIGURATION_UI = 0x38034A,
- SMSG_SHOW_DELVES_DISPLAY_UI = 0x380348,
- SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x380073,
- SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x4C0015,
- SMSG_SHOW_TAXI_NODES = 0x380167,
- SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x380209,
- SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x380314,
- SMSG_SOCKET_GEMS_FAILURE = 0x3801C0,
- SMSG_SOCKET_GEMS_SUCCESS = 0x3801BF,
- SMSG_SPECIAL_MOUNT_ANIM = 0x38013A,
- SMSG_SPECTATE_END = 0x380336,
- SMSG_SPECTATE_PLAYER = 0x380335,
- SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x3801B2,
- SMSG_SPELL_ABSORB_LOG = 0x4E000C,
- SMSG_SPELL_CATEGORY_COOLDOWN = 0x4E0006,
- SMSG_SPELL_CHANNEL_START = 0x4E0022,
- SMSG_SPELL_CHANNEL_UPDATE = 0x4E0023,
- SMSG_SPELL_COOLDOWN = 0x4E0005,
- SMSG_SPELL_DAMAGE_SHIELD = 0x4E001F,
- SMSG_SPELL_DELAYED = 0x4E0030,
- SMSG_SPELL_DISPELL_LOG = 0x4E0007,
- SMSG_SPELL_EMPOWER_SET_STAGE = 0x4E0026,
- SMSG_SPELL_EMPOWER_START = 0x4E0024,
- SMSG_SPELL_EMPOWER_UPDATE = 0x4E0025,
- SMSG_SPELL_ENERGIZE_LOG = 0x4E0009,
- SMSG_SPELL_EXECUTE_LOG = 0x4E0031,
- SMSG_SPELL_FAILED_OTHER = 0x4E0046,
- SMSG_SPELL_FAILURE = 0x4E0044,
- SMSG_SPELL_FAILURE_MESSAGE = 0x4E004B,
- SMSG_SPELL_GO = 0x4E002A,
- SMSG_SPELL_HEAL_ABSORB_LOG = 0x4E000B,
- SMSG_SPELL_HEAL_LOG = 0x4E000A,
- SMSG_SPELL_INSTAKILL_LOG = 0x4E0021,
- SMSG_SPELL_INTERRUPT_LOG = 0x4E000D,
- SMSG_SPELL_MISS_LOG = 0x4E0032,
- SMSG_SPELL_NON_MELEE_DAMAGE_LOG = 0x4E0020,
- SMSG_SPELL_OR_DAMAGE_IMMUNE = 0x4E001D,
- SMSG_SPELL_PERIODIC_AURA_LOG = 0x4E0008,
- SMSG_SPELL_PREPARE = 0x4E0029,
- SMSG_SPELL_START = 0x4E002B,
- SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x380065,
- SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x3802EE,
- SMSG_STAND_STATE_UPDATE = 0x3801B6,
- SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x38006B,
- SMSG_START_ELAPSED_TIMER = 0x38009C,
- SMSG_START_ELAPSED_TIMERS = 0x38009E,
- SMSG_START_LIGHTNING_STORM = 0x380142,
- SMSG_START_LOOT_ROLL = 0x3800B5,
- SMSG_START_MIRROR_TIMER = 0x3801A9,
- SMSG_START_TIMER = 0x38003D,
- SMSG_STOP_ELAPSED_TIMER = 0x38009D,
- SMSG_STOP_MIRROR_TIMER = 0x3801AB,
- SMSG_STOP_SPEAKERBOT_SOUND = 0x380205,
- SMSG_STOP_TIMER = 0x38003E,
- SMSG_STREAMING_MOVIES = 0x38003C,
- SMSG_SUGGEST_INVITE_INFORM = 0x380229,
- SMSG_SUMMON_CANCEL = 0x38014B,
- SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x380023,
- SMSG_SUMMON_REQUEST = 0x3801BA,
- SMSG_SUPERCEDED_SPELLS = 0x4E003D,
- SMSG_SUSPEND_COMMS = 0x3F0002,
- SMSG_SUSPEND_TOKEN = 0x380040,
- SMSG_SYNC_WOW_ENTITLEMENTS = 0x3802E6,
- SMSG_TALENTS_INVOLUNTARILY_RESET = 0x3801B1,
- SMSG_TAXI_NODE_STATUS = 0x380117,
- SMSG_TEXT_EMOTE = 0x380115,
- SMSG_THREAT_CLEAR = 0x380176,
- SMSG_THREAT_REMOVE = 0x380175,
- SMSG_THREAT_UPDATE = 0x380174,
- SMSG_TIMERUNNING_SEASON_ENDED = 0x38034B,
- SMSG_TIME_ADJUSTMENT = 0x490001,
- SMSG_TIME_SYNC_REQUEST = 0x490000,
- SMSG_TITLE_EARNED = 0x380171,
- SMSG_TITLE_LOST = 0x380172,
- SMSG_TOTEM_CREATED = 0x380161,
- SMSG_TOTEM_DURATION_CHANGED = 0x380163,
- SMSG_TOTEM_MOVED = 0x380164,
- SMSG_TOTEM_REMOVED = 0x380162,
- SMSG_TRADE_STATUS = 0x380017,
- SMSG_TRADE_UPDATED = 0x380016,
- SMSG_TRAINER_BUY_FAILED = 0x380179,
- SMSG_TRAINER_LIST = 0x380178,
- SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x38006A,
- SMSG_TRANSFER_ABORTED = 0x38019C,
- SMSG_TRANSFER_PENDING = 0x380066,
- SMSG_TREASURE_PICKER_RESPONSE = 0x3C0011,
- SMSG_TRIGGER_CINEMATIC = 0x38025D,
- SMSG_TRIGGER_MOVIE = 0x380165,
- SMSG_TURN_IN_PETITION_RESULT = 0x3801E6,
- SMSG_TUTORIAL_FLAGS = 0x380251,
- SMSG_UI_ACTION = 0x380202,
- SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x4C0023,
- SMSG_UNDELETE_CHARACTER_RESPONSE = 0x38025E,
- SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x38025F,
- SMSG_UNLEARNED_SPELLS = 0x4E003F,
- SMSG_UNLOAD_CHILD_MAP = 0x38000E,
- SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x3802FE,
- SMSG_UPDATE_ACCOUNT_DATA = 0x3801A2,
- SMSG_UPDATE_ACCOUNT_DATA_COMPLETE = 0x3801A3,
- SMSG_UPDATE_ACTION_BUTTONS = 0x380078,
- SMSG_UPDATE_BNET_SESSION_KEY = 0x3802B6,
- SMSG_UPDATE_CAPTURE_POINT = 0x3E0007,
- SMSG_UPDATE_CELESTIAL_BODY = 0x3802B2,
- SMSG_UPDATE_CHARACTER_FLAGS = 0x380257,
- SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x3801FE,
- SMSG_UPDATE_COOLDOWN = 0x3801FD,
- SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x420038,
- SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x420021,
- SMSG_UPDATE_EXPANSION_LEVEL = 0x3800DE,
- SMSG_UPDATE_GAME_TIME_STATE = 0x3802B9,
- SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x380144,
- SMSG_UPDATE_LAST_INSTANCE = 0x380123,
- SMSG_UPDATE_OBJECT = 0x480000,
- SMSG_UPDATE_PRIMARY_SPEC = 0x380070,
- SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x38008D,
- SMSG_UPDATE_TALENT_DATA = 0x38006F,
- SMSG_UPDATE_WORLD_STATE = 0x3801E0,
- SMSG_USERLIST_ADD = 0x3D000F,
- SMSG_USERLIST_REMOVE = 0x3D0010,
- SMSG_USERLIST_UPDATE = 0x3D0011,
- SMSG_USE_EQUIPMENT_SET_RESULT = 0x3801E7,
- SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x3802AD,
- SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x3802AB,
- SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x3802AA,
- SMSG_VAS_PURCHASE_COMPLETE = 0x380285,
- SMSG_VAS_PURCHASE_STATE_UPDATE = 0x380284,
- SMSG_VENDOR_INVENTORY = 0x380051,
- SMSG_VIGNETTE_UPDATE = 0x4B0010,
- SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x3802B1,
- SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x3802F9,
- SMSG_VOICE_LOGIN_RESPONSE = 0x3802B0,
- SMSG_VOID_ITEM_SWAP_RESPONSE = 0x4F0004,
- SMSG_VOID_STORAGE_CONTENTS = 0x4F0001,
- SMSG_VOID_STORAGE_FAILED = 0x4F0000,
- SMSG_VOID_STORAGE_TRANSFER_CHANGES = 0x4F0002,
- SMSG_VOID_TRANSFER_RESULT = 0x4F0003,
- SMSG_WAIT_QUEUE_FINISH = 0x380003,
- SMSG_WAIT_QUEUE_UPDATE = 0x380002,
- SMSG_WARDEN3_DATA = 0x38000B,
- SMSG_WARDEN3_DISABLED = 0x3802B4,
- SMSG_WARDEN3_ENABLED = 0x3802B3,
- SMSG_WARFRONT_COMPLETE = 0x3801F6,
- SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE = 0x3E0012,
- SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x3E0011,
- SMSG_WEATHER = 0x380141,
- SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x3802F1,
- SMSG_WEEKLY_REWARDS_RESULT = 0x3802EF,
- SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x3802F0,
- SMSG_WHO = 0x3D0002,
- SMSG_WHO_IS = 0x380140,
- SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x3802B8,
- SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x4B0017,
- SMSG_WORLD_SERVER_INFO = 0x380045,
- SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x3802E7,
- SMSG_WOW_LABS_AREA_INFO = 0x380319,
- SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x380315,
- SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x380316,
- SMSG_WOW_LABS_PARTY_ERROR = 0x380322,
- SMSG_WOW_LABS_SET_AREA_ID_RESULT = 0x380317,
- SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x38031B,
- SMSG_WOW_LABS_SET_SELECTED_AREA_ID = 0x380318,
- SMSG_XP_AWARDED_FROM_CURRENCY = 0x380330,
- SMSG_XP_GAIN_ABORTED = 0x380062,
- SMSG_XP_GAIN_ENABLED = 0x380241,
- SMSG_ZONE_UNDER_ATTACK = 0x3D000B,
+ SMSG_ABORT_NEW_WORLD = 0x360030,
+ SMSG_ACCOUNT_CHARACTER_CURRENCY_LISTS = 0x360346,
+ SMSG_ACCOUNT_CONVERSION_STATE_UPDATE = 0x36034B,
+ SMSG_ACCOUNT_COSMETIC_ADDED = 0x3602FF,
+ SMSG_ACCOUNT_CRITERIA_UPDATE = 0x3602E7,
+ SMSG_ACCOUNT_DATA_TIMES = 0x3601A8,
+ SMSG_ACCOUNT_EXPORT_RESPONSE = 0x360337,
+ SMSG_ACCOUNT_ITEM_COLLECTION_DATA = 0x360351,
+ SMSG_ACCOUNT_MOUNT_REMOVED = 0x360047,
+ SMSG_ACCOUNT_MOUNT_UPDATE = 0x360046,
+ SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x3602FE,
+ SMSG_ACCOUNT_STORE_CURRENCY_UPDATE = 0x360320,
+ SMSG_ACCOUNT_STORE_FRONT_UPDATE = 0x360321,
+ SMSG_ACCOUNT_STORE_ITEM_STATE_CHANGED = 0x360322,
+ SMSG_ACCOUNT_STORE_RESULT = 0x360323,
+ SMSG_ACCOUNT_TOY_UPDATE = 0x360048,
+ SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x36004C,
+ SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x36004B,
+ SMSG_ACCOUNT_WARBAND_SCENE_UPDATE = 0x36004E,
+ SMSG_ACHIEVEMENT_DELETED = 0x360185,
+ SMSG_ACHIEVEMENT_EARNED = 0x3600E0,
+ SMSG_ACTIVATE_ESSENCE_FAILED = 0x4A0020,
+ SMSG_ACTIVATE_SOULBIND_FAILED = 0x4A0022,
+ SMSG_ACTIVATE_TAXI_REPLY = 0x36011C,
+ SMSG_ACTIVE_GLYPHS = 0x4D0045,
+ SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x3601E3,
+ SMSG_ADDON_LIST_REQUEST = 0x3600DF,
+ SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x3600DA,
+ SMSG_ADD_ITEM_PASSIVE = 0x360042,
+ SMSG_ADD_LOSS_OF_CONTROL = 0x36010F,
+ SMSG_ADD_RUNE_POWER = 0x360156,
+ SMSG_ADJUST_SPLINE_DURATION = 0x360069,
+ SMSG_ADVANCED_COMBAT_LOG = 0x3602FC,
+ SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x3602F7,
+ SMSG_AE_LOOT_TARGETS = 0x3600B5,
+ SMSG_AE_LOOT_TARGET_ACK = 0x3600B6,
+ SMSG_AI_REACTION = 0x360153,
+ SMSG_ALLIED_RACE_DETAILS = 0x360291,
+ SMSG_ALL_ACCOUNT_CRITERIA = 0x360005,
+ SMSG_ALL_ACHIEVEMENT_DATA = 0x360004,
+ SMSG_ALL_GUILD_ACHIEVEMENTS = 0x420000,
+ SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x3602D4,
+ SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x36001D,
+ SMSG_AREA_POI_UPDATE_RESPONSE = 0x4A0018,
+ SMSG_AREA_SPIRIT_HEALER_TIME = 0x3601DC,
+ SMSG_AREA_TRIGGER_DENIED = 0x370004,
+ SMSG_AREA_TRIGGER_NO_CORPSE = 0x3601B4,
+ SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x370002,
+ SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES = 0x370003,
+ SMSG_ARENA_CLEAR_OPPONENTS = 0x3600E6,
+ SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x3600CF,
+ SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x3600E5,
+ SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x36023E,
+ SMSG_ARTIFACT_FORGE_ERROR = 0x36023C,
+ SMSG_ARTIFACT_RESPEC_PROMPT = 0x36023D,
+ SMSG_ARTIFACT_XP_GAIN = 0x360284,
+ SMSG_ATTACKER_STATE_UPDATE = 0x3C002C,
+ SMSG_ATTACK_START = 0x3C0017,
+ SMSG_ATTACK_STOP = 0x3C0018,
+ SMSG_ATTACK_SWING_ERROR = 0x3C0026,
+ SMSG_ATTACK_SWING_LANDED_LOG = 0x3C0027,
+ SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x36026D,
+ SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x36026C,
+ SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x36026B,
+ SMSG_AUCTION_CLOSED_NOTIFICATION = 0x360190,
+ SMSG_AUCTION_COMMAND_RESULT = 0x36018D,
+ SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x360324,
+ SMSG_AUCTION_FAVORITE_LIST = 0x3602EE,
+ SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x3602E6,
+ SMSG_AUCTION_HELLO_RESPONSE = 0x36018B,
+ SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x3602E5,
+ SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x3602E1,
+ SMSG_AUCTION_LIST_ITEMS_RESULT = 0x3602E2,
+ SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x3602E4,
+ SMSG_AUCTION_OUTBID_NOTIFICATION = 0x36018F,
+ SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x360191,
+ SMSG_AUCTION_REPLICATE_RESPONSE = 0x36018C,
+ SMSG_AUCTION_WON_NOTIFICATION = 0x36018E,
+ SMSG_AURA_POINTS_DEPLETED = 0x4D0012,
+ SMSG_AURA_UPDATE = 0x4D0011,
+ SMSG_AUTH_CHALLENGE = 0x3D0000,
+ SMSG_AUTH_FAILED = 0x360000,
+ SMSG_AUTH_RESPONSE = 0x360001,
+ SMSG_AVAILABLE_HOTFIXES = 0x3A0001,
+ SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x360325,
+ SMSG_BAG_CLEANUP_FINISHED = 0x4E0007,
+ SMSG_BARBER_SHOP_RESULT = 0x36015B,
+ SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x3602C5,
+ SMSG_BATTLEFIELD_LIST = 0x3C0005,
+ SMSG_BATTLEFIELD_PORT_DENIED = 0x3C000B,
+ SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x3C0001,
+ SMSG_BATTLEFIELD_STATUS_FAILED = 0x3C0004,
+ SMSG_BATTLEFIELD_STATUS_GROUP_PROPOSAL_FAILED = 0x3C000E,
+ SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION = 0x3C0000,
+ SMSG_BATTLEFIELD_STATUS_NONE = 0x3C0003,
+ SMSG_BATTLEFIELD_STATUS_QUEUED = 0x3C0002,
+ SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x3C000D,
+ SMSG_BATTLEGROUND_INFO_THROTTLED = 0x3C000C,
+ SMSG_BATTLEGROUND_INIT = 0x3C0029,
+ SMSG_BATTLEGROUND_PLAYER_JOINED = 0x3C0009,
+ SMSG_BATTLEGROUND_PLAYER_LEFT = 0x3C000A,
+ SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x3C0006,
+ SMSG_BATTLEGROUND_POINTS = 0x3C0028,
+ SMSG_BATTLENET_CHALLENGE_ABORT = 0x360226,
+ SMSG_BATTLENET_CHALLENGE_START = 0x360225,
+ SMSG_BATTLENET_NOTIFICATION = 0x36029D,
+ SMSG_BATTLENET_RESPONSE = 0x36029C,
+ SMSG_BATTLE_NET_CONNECTION_STATUS = 0x36029E,
+ SMSG_BATTLE_PAY_ACK_FAILED = 0x360221,
+ SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x360216,
+ SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x360217,
+ SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x360220,
+ SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x360214,
+ SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x360213,
+ SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x360304,
+ SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x360211,
+ SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x360212,
+ SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x360210,
+ SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x36020E,
+ SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x36020F,
+ SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x360215,
+ SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x36021F,
+ SMSG_BATTLE_PAY_START_CHECKOUT = 0x3602B9,
+ SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x36021D,
+ SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x36021C,
+ SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x3602AD,
+ SMSG_BATTLE_PETS_HEALED = 0x36008B,
+ SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x360117,
+ SMSG_BATTLE_PET_DELETED = 0x360088,
+ SMSG_BATTLE_PET_ERROR = 0x3600D5,
+ SMSG_BATTLE_PET_JOURNAL = 0x360087,
+ SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x360085,
+ SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x360086,
+ SMSG_BATTLE_PET_RESTORED = 0x36008A,
+ SMSG_BATTLE_PET_REVOKED = 0x360089,
+ SMSG_BATTLE_PET_TRAP_LEVEL = 0x360083,
+ SMSG_BATTLE_PET_UPDATES = 0x360082,
+ SMSG_BIND_POINT_UPDATE = 0x360011,
+ SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x3600C5,
+ SMSG_BLACK_MARKET_OUTBID = 0x3600C6,
+ SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x3600C4,
+ SMSG_BLACK_MARKET_WON = 0x3600C7,
+ SMSG_BONUS_ROLL_EMPTY = 0x3600E2,
+ SMSG_BOSS_KILL = 0x3C002B,
+ SMSG_BREAK_TARGET = 0x3C0016,
+ SMSG_BROADCAST_ACHIEVEMENT = 0x3B0012,
+ SMSG_BROADCAST_SUMMON_CAST = 0x3602C7,
+ SMSG_BROADCAST_SUMMON_RESPONSE = 0x3602C8,
+ SMSG_BUY_FAILED = 0x360164,
+ SMSG_BUY_SUCCEEDED = 0x360163,
+ SMSG_CACHE_INFO = 0x3A000F,
+ SMSG_CACHE_VERSION = 0x3A000E,
+ SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x36013C,
+ SMSG_CALENDAR_COMMAND_RESULT = 0x36013D,
+ SMSG_CALENDAR_COMMUNITY_INVITE = 0x36012C,
+ SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x360134,
+ SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x360135,
+ SMSG_CALENDAR_INVITE_ADDED = 0x36012D,
+ SMSG_CALENDAR_INVITE_ALERT = 0x360131,
+ SMSG_CALENDAR_INVITE_NOTES = 0x360136,
+ SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x360137,
+ SMSG_CALENDAR_INVITE_REMOVED = 0x36012E,
+ SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x360133,
+ SMSG_CALENDAR_INVITE_STATUS = 0x36012F,
+ SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x360132,
+ SMSG_CALENDAR_MODERATOR_STATUS = 0x360130,
+ SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x360138,
+ SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x360139,
+ SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x36013A,
+ SMSG_CALENDAR_SEND_CALENDAR = 0x36012A,
+ SMSG_CALENDAR_SEND_EVENT = 0x36012B,
+ SMSG_CALENDAR_SEND_NUM_PENDING = 0x36013B,
+ SMSG_CAMERA_EFFECT = 0x3601C2,
+ SMSG_CANCEL_AUTO_REPEAT = 0x36017B,
+ SMSG_CANCEL_COMBAT = 0x3C0025,
+ SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x4D0037,
+ SMSG_CANCEL_PING_PIN = 0x36003B,
+ SMSG_CANCEL_PRELOAD_WORLD = 0x36002E,
+ SMSG_CANCEL_SCENE = 0x3600D4,
+ SMSG_CANCEL_SPELL_VISUAL = 0x4D0035,
+ SMSG_CANCEL_SPELL_VISUAL_KIT = 0x4D0039,
+ SMSG_CAN_DUEL_RESULT = 0x3C0021,
+ SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x3602AC,
+ SMSG_CAPTURE_POINT_REMOVED = 0x3C0008,
+ SMSG_CAST_FAILED = 0x4D0048,
+ SMSG_CAS_REFRESH_REMOTE_DATA = 0x360115,
+ SMSG_CAUTIONARY_CHANNEL_MESSAGE = 0x3B0009,
+ SMSG_CAUTIONARY_CHAT_MESSAGE = 0x3B0008,
+ SMSG_CHAIN_MISSILE_BOUNCE = 0x360061,
+ SMSG_CHALLENGE_MODE_COMPLETE = 0x3600A6,
+ SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x3600A7,
+ SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x3600AD,
+ SMSG_CHALLENGE_MODE_RESET = 0x3600A5,
+ SMSG_CHALLENGE_MODE_SET_LEAVER_PENALTY_TIMER = 0x4A0030,
+ SMSG_CHALLENGE_MODE_START = 0x3600A3,
+ SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x3600A4,
+ SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x4A000C,
+ SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x36029F,
+ SMSG_CHANNEL_LIST = 0x3B001B,
+ SMSG_CHANNEL_NOTIFY = 0x3B0017,
+ SMSG_CHANNEL_NOTIFY_JOINED = 0x3B0019,
+ SMSG_CHANNEL_NOTIFY_LEFT = 0x3B001A,
+ SMSG_CHANNEL_NOTIFY_NPE_JOINED_BATCH = 0x3B0018,
+ SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x360259,
+ SMSG_CHARACTER_LOGIN_FAILED = 0x3601A2,
+ SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x360224,
+ SMSG_CHARACTER_RENAME_RESULT = 0x3601FF,
+ SMSG_CHARACTER_UPGRADE_ABORTED = 0x360258,
+ SMSG_CHARACTER_UPGRADE_COMPLETE = 0x360257,
+ SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x36025A,
+ SMSG_CHARACTER_UPGRADE_STARTED = 0x360256,
+ SMSG_CHAR_CUSTOMIZE_FAILURE = 0x36017F,
+ SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x360180,
+ SMSG_CHAR_FACTION_CHANGE_RESULT = 0x360243,
+ SMSG_CHAT = 0x3B0001,
+ SMSG_CHAT_AUTO_RESPONDED = 0x3B000E,
+ SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x3B0022,
+ SMSG_CHAT_DOWN = 0x3B0014,
+ SMSG_CHAT_IGNORED_ACCOUNT_MUTED = 0x3B0000,
+ SMSG_CHAT_IS_DOWN = 0x3B0015,
+ SMSG_CHAT_NOT_IN_GUILD = 0x3B0023,
+ SMSG_CHAT_NOT_IN_PARTY = 0x3B0006,
+ SMSG_CHAT_PLAYER_AMBIGUOUS = 0x3B0004,
+ SMSG_CHAT_PLAYER_NOTFOUND = 0x3B000D,
+ SMSG_CHAT_RECONNECT = 0x3B0016,
+ SMSG_CHAT_REGIONAL_SERVICE_STATUS = 0x3B001D,
+ SMSG_CHAT_RESTRICTED = 0x3B0007,
+ SMSG_CHAT_SERVER_MESSAGE = 0x3B001C,
+ SMSG_CHEAT_IGNORE_DIMISHING_RETURNS = 0x4D0002,
+ SMSG_CHECK_ABANDON_NPE = 0x4A0023,
+ SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x36001B,
+ SMSG_CHECK_WARGAME_ENTRY = 0x360027,
+ SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x3602F1,
+ SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x3602D8,
+ SMSG_CLEAR_ALL_SPELL_CHARGES = 0x4D0016,
+ SMSG_CLEAR_BOSS_EMOTES = 0x360054,
+ SMSG_CLEAR_COOLDOWN = 0x360158,
+ SMSG_CLEAR_COOLDOWNS = 0x4D0015,
+ SMSG_CLEAR_RESURRECT = 0x360013,
+ SMSG_CLEAR_SPELL_CHARGES = 0x4D0017,
+ SMSG_CLEAR_TARGET = 0x3C0022,
+ SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x4B0022,
+ SMSG_CLOSE_ARTIFACT_FORGE = 0x36023B,
+ SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x3602D0,
+ SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x3602D3,
+ SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x3602D1,
+ SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x3602CE,
+ SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x3602D2,
+ SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x3602CF,
+ SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x360310,
+ SMSG_COIN_REMOVED = 0x3600B4,
+ SMSG_COMBAT_EVENT_FAILED = 0x3C0019,
+ SMSG_COMMENTATOR_MAP_INFO = 0x3601A4,
+ SMSG_COMMENTATOR_PLAYER_INFO = 0x3601A5,
+ SMSG_COMMENTATOR_STATE_CHANGED = 0x3601A3,
+ SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x360268,
+ SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x360274,
+ SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x36026A,
+ SMSG_COMMERCE_TOKEN_UPDATE = 0x360269,
+ SMSG_COMPLAINT_RESULT = 0x36014A,
+ SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x360234,
+ SMSG_CONFIRM_PARTY_INVITE = 0x3602AB,
+ SMSG_CONNECT_TO = 0x3D0005,
+ SMSG_CONSOLE_WRITE = 0x3600D2,
+ SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x360270,
+ SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x36026F,
+ SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x36026E,
+ SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x360272,
+ SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x360273,
+ SMSG_CONTACT_LIST = 0x360222,
+ SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x3602B2,
+ SMSG_CONTROL_UPDATE = 0x3600E4,
+ SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x3602FA,
+ SMSG_COOLDOWN_CHEAT = 0x3601D5,
+ SMSG_COOLDOWN_EVENT = 0x360157,
+ SMSG_CORPSE_LOCATION = 0x3600EB,
+ SMSG_CORPSE_RECLAIM_DELAY = 0x3601E6,
+ SMSG_CORPSE_TRANSPORT_QUERY = 0x3601B0,
+ SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x4B0024,
+ SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x360294,
+ SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x3602FB,
+ SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x360331,
+ SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x36032D,
+ SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x360329,
+ SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x36032B,
+ SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x360327,
+ SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x36032C,
+ SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x360328,
+ SMSG_CRAFTING_ORDER_NPC_REWARD_INFO = 0x360333,
+ SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x36032F,
+ SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x36032A,
+ SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x360332,
+ SMSG_CRAFT_ENCHANT_RESULT = 0x360330,
+ SMSG_CREATE_CHAR = 0x36019E,
+ SMSG_CREATE_SHIPMENT_RESPONSE = 0x360233,
+ SMSG_CREATOR_VISUALS_OVERRIDE = 0x360336,
+ SMSG_CRITERIA_DELETED = 0x360184,
+ SMSG_CRITERIA_UPDATE = 0x36017E,
+ SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x36015F,
+ SMSG_CURRENCY_TRANSFER_LOG = 0x360348,
+ SMSG_CURRENCY_TRANSFER_RESULT = 0x360347,
+ SMSG_CUSTOM_LOAD_SCREEN = 0x360064,
+ SMSG_DAILY_QUESTS_RESET = 0x4B0000,
+ SMSG_DAMAGE_CALC_LOG = 0x4D0054,
+ SMSG_DB_REPLY = 0x3A0000,
+ SMSG_DEATH_RELEASE_LOC = 0x360171,
+ SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x3600F3,
+ SMSG_DEFENSE_MESSAGE = 0x3B000C,
+ SMSG_DELETE_CHAR = 0x36019F,
+ SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x400022,
+ SMSG_DELVES_ACCOUNT_DATA_ELEMENT_CHANGED = 0x36034D,
+ SMSG_DESTROY_ARENA_UNIT = 0x3601DE,
+ SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x360196,
+ SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x360020,
+ SMSG_DISENCHANT_CREDIT = 0x36003F,
+ SMSG_DISMOUNT_RESULT = 0x360010,
+ SMSG_DISPEL_FAILED = 0x4D001E,
+ SMSG_DISPLAY_GAME_ERROR = 0x360035,
+ SMSG_DISPLAY_PLAYER_CHOICE = 0x4A0004,
+ SMSG_DISPLAY_PROMOTION = 0x3600E8,
+ SMSG_DISPLAY_QUEST_POPUP = 0x4B001E,
+ SMSG_DISPLAY_TOAST = 0x3600C1,
+ SMSG_DISPLAY_WORLD_TEXT = 0x360285,
+ SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x4D0053,
+ SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x360079,
+ SMSG_DROP_NEW_CONNECTION = 0x3D0004,
+ SMSG_DUEL_ARRANGED = 0x3C001B,
+ SMSG_DUEL_COMPLETE = 0x3C001F,
+ SMSG_DUEL_COUNTDOWN = 0x3C001E,
+ SMSG_DUEL_IN_BOUNDS = 0x3C001D,
+ SMSG_DUEL_OUT_OF_BOUNDS = 0x3C001C,
+ SMSG_DUEL_REQUESTED = 0x3C001A,
+ SMSG_DUEL_WINNER = 0x3C0020,
+ SMSG_DURABILITY_DAMAGE_DEATH = 0x3601E1,
+ SMSG_EMOTE = 0x360260,
+ SMSG_ENABLE_BARBER_SHOP = 0x36015A,
+ SMSG_ENCHANTMENT_LOG = 0x3601B1,
+ SMSG_ENCOUNTER_END = 0x36021B,
+ SMSG_ENCOUNTER_START = 0x36021A,
+ SMSG_END_LIGHTNING_STORM = 0x360147,
+ SMSG_ENTER_ENCRYPTED_MODE = 0x3D0001,
+ SMSG_ENUM_CHARACTERS_RESULT = 0x360018,
+ SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x36028A,
+ SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x4D000E,
+ SMSG_EQUIPMENT_SET_ID = 0x360150,
+ SMSG_EXPECTED_SPAM_RECORDS = 0x3B0005,
+ SMSG_EXPLORATION_EXPERIENCE = 0x3601FB,
+ SMSG_EXPORT_ACCOUNT_PROFILE = 0x3600F0,
+ SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x3602F8,
+ SMSG_FACTION_BONUS_INFO = 0x3601C1,
+ SMSG_FAILED_PLAYER_CONDITION = 0x4A0002,
+ SMSG_FAILED_QUEST_TURN_IN = 0x3602A8,
+ SMSG_FEATURE_SYSTEM_STATUS = 0x360058,
+ SMSG_FEATURE_SYSTEM_STATUS2 = 0x360345,
+ SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x360059,
+ SMSG_FEIGN_DEATH_RESISTED = 0x3601E0,
+ SMSG_FISH_ESCAPED = 0x36016E,
+ SMSG_FISH_NOT_HOOKED = 0x36016D,
+ SMSG_FLIGHT_SPLINE_SYNC = 0x48005B,
+ SMSG_FLUSH_COMBAT_LOG_FILE = 0x4D0010,
+ SMSG_FORCED_DEATH_UPDATE = 0x360172,
+ SMSG_FORCE_ANIM = 0x3601ED,
+ SMSG_FORCE_ANIMATIONS = 0x3601EE,
+ SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x36004A,
+ SMSG_FORCE_SPAWN_TRACKING_UPDATE = 0x4B0021,
+ SMSG_FRIEND_STATUS = 0x360223,
+ SMSG_GAIN_MAW_POWER = 0x360279,
+ SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x36005C,
+ SMSG_GAME_OBJECT_BASE = 0x3602BF,
+ SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x36030F,
+ SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x36005D,
+ SMSG_GAME_OBJECT_DESPAWN = 0x36005E,
+ SMSG_GAME_OBJECT_INTERACTION = 0x36030E,
+ SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x4D003C,
+ SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x4D003B,
+ SMSG_GAME_OBJECT_RESET_STATE = 0x3601BB,
+ SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x36029B,
+ SMSG_GAME_SPEED_SET = 0x360120,
+ SMSG_GAME_TIME_SET = 0x3601AA,
+ SMSG_GAME_TIME_UPDATE = 0x3601A9,
+ SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x400024,
+ SMSG_GARRISON_ADD_EVENT = 0x400048,
+ SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x400016,
+ SMSG_GARRISON_ADD_MISSION_RESULT = 0x40001A,
+ SMSG_GARRISON_ADD_SPEC_GROUPS = 0x40004B,
+ SMSG_GARRISON_APPLY_TALENT_SOCKET_DATA_CHANGES = 0x40004F,
+ SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x40002C,
+ SMSG_GARRISON_AUTO_TROOP_MIN_LEVEL_UPDATE_RESULT = 0x400051,
+ SMSG_GARRISON_BUILDING_ACTIVATED = 0x40000B,
+ SMSG_GARRISON_BUILDING_REMOVED = 0x400004,
+ SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT = 0x400006,
+ SMSG_GARRISON_CHANGE_MISSION_START_TIME_RESULT = 0x40001D,
+ SMSG_GARRISON_CLEAR_COLLECTION = 0x400047,
+ SMSG_GARRISON_CLEAR_EVENT_LIST = 0x40004A,
+ SMSG_GARRISON_CLEAR_SPEC_GROUPS = 0x40004C,
+ SMSG_GARRISON_COLLECTION_REMOVE_ENTRY = 0x400046,
+ SMSG_GARRISON_COLLECTION_UPDATE_ENTRY = 0x400045,
+ SMSG_GARRISON_COMPLETE_BUILDING_CONSTRUCTION_RESULT = 0x40003D,
+ SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x40001C,
+ SMSG_GARRISON_CREATE_RESULT = 0x40000C,
+ SMSG_GARRISON_DELETE_MISSION_RESULT = 0x400023,
+ SMSG_GARRISON_DELETE_RESULT = 0x400035,
+ SMSG_GARRISON_FOLLOWER_ACTIVATIONS_SET = 0x40002B,
+ SMSG_GARRISON_FOLLOWER_CHANGED_FLAGS = 0x400029,
+ SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL = 0x400027,
+ SMSG_GARRISON_FOLLOWER_CHANGED_QUALITY = 0x400028,
+ SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x400026,
+ SMSG_GARRISON_FOLLOWER_FATIGUE_CLEARED = 0x40002A,
+ SMSG_GARRISON_GENERATE_FOLLOWERS_RESULT = 0x400033,
+ SMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO_RESULT = 0x400015,
+ SMSG_GARRISON_GET_RECALL_PORTAL_LAST_USED_TIME_RESULT = 0x40001E,
+ SMSG_GARRISON_IS_UPGRADEABLE_RESPONSE = 0x40003F,
+ SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x400007,
+ SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x400005,
+ SMSG_GARRISON_LIST_COMPLETED_MISSIONS_CHEAT_RESULT = 0x400040,
+ SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x400019,
+ SMSG_GARRISON_MAP_DATA_RESPONSE = 0x400042,
+ SMSG_GARRISON_MISSION_BONUS_ROLL_RESULT = 0x400020,
+ SMSG_GARRISON_MISSION_REQUEST_REWARD_INFO_RESPONSE = 0x400043,
+ SMSG_GARRISON_MISSION_START_CONDITION_UPDATE = 0x400025,
+ SMSG_GARRISON_OPEN_CRAFTER = 0x400037,
+ SMSG_GARRISON_OPEN_RECRUITMENT_NPC = 0x400030,
+ SMSG_GARRISON_PLACE_BUILDING_RESULT = 0x400003,
+ SMSG_GARRISON_PLOT_PLACED = 0x400001,
+ SMSG_GARRISON_PLOT_REMOVED = 0x400002,
+ SMSG_GARRISON_RECRUIT_FOLLOWER_RESULT = 0x400034,
+ SMSG_GARRISON_REMOTE_INFO = 0x40000A,
+ SMSG_GARRISON_REMOVE_EVENT = 0x400049,
+ SMSG_GARRISON_REMOVE_FOLLOWER_ABILITY_RESULT = 0x40002F,
+ SMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING_RESULT = 0x40002D,
+ SMSG_GARRISON_REMOVE_FOLLOWER_RESULT = 0x400017,
+ SMSG_GARRISON_RENAME_FOLLOWER_RESULT = 0x40002E,
+ SMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA_RESULT = 0x400009,
+ SMSG_GARRISON_RESEARCH_TALENT_RESULT = 0x40000E,
+ SMSG_GARRISON_RESET_TALENT_TREE = 0x400013,
+ SMSG_GARRISON_RESET_TALENT_TREE_SOCKET_DATA = 0x400014,
+ SMSG_GARRISON_START_MISSION_RESULT = 0x40001B,
+ SMSG_GARRISON_SWAP_BUILDINGS_RESPONSE = 0x40003C,
+ SMSG_GARRISON_SWITCH_TALENT_TREE_BRANCH = 0x40004D,
+ SMSG_GARRISON_TALENT_COMPLETED = 0x40000F,
+ SMSG_GARRISON_TALENT_REMOVED = 0x400010,
+ SMSG_GARRISON_TALENT_REMOVE_SOCKET_DATA = 0x400012,
+ SMSG_GARRISON_TALENT_UPDATE_SOCKET_DATA = 0x400011,
+ SMSG_GARRISON_TALENT_WORLD_QUEST_UNLOCKS_RESPONSE = 0x40004E,
+ SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x400008,
+ SMSG_GARRISON_UPDATE_FOLLOWER = 0x400018,
+ SMSG_GARRISON_UPDATE_GARRISON_MONUMENT_SELECTIONS = 0x40003E,
+ SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT = 0x400050,
+ SMSG_GARRISON_UPGRADE_RESULT = 0x40000D,
+ SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x40001F,
+ SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x36001C,
+ SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x3602B3,
+ SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x3601FD,
+ SMSG_GET_GARRISON_INFO_RESULT = 0x400000,
+ SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x360236,
+ SMSG_GET_REALM_HIDDEN_RESULT = 0x36033C,
+ SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x360271,
+ SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x36025E,
+ SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x360235,
+ SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x360231,
+ SMSG_GET_TROPHY_LIST_RESPONSE = 0x36025D,
+ SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x360286,
+ SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x360287,
+ SMSG_GM_PLAYER_INFO = 0x4A000D,
+ SMSG_GM_REQUEST_PLAYER_INFO = 0x4A0003,
+ SMSG_GM_TICKET_CASE_STATUS = 0x360142,
+ SMSG_GM_TICKET_SYSTEM_STATUS = 0x360141,
+ SMSG_GOD_MODE = 0x360199,
+ SMSG_GOSSIP_COMPLETE = 0x4B0017,
+ SMSG_GOSSIP_MESSAGE = 0x4B0018,
+ SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x4B0028,
+ SMSG_GOSSIP_POI = 0x36022E,
+ SMSG_GOSSIP_QUEST_UPDATE = 0x4B0019,
+ SMSG_GOSSIP_REFRESH_OPTIONS = 0x4B0027,
+ SMSG_GROUP_ACTION_THROTTLED = 0x360024,
+ SMSG_GROUP_AUTO_KICK = 0x36022B,
+ SMSG_GROUP_DECLINE = 0x360227,
+ SMSG_GROUP_DESTROYED = 0x36022A,
+ SMSG_GROUP_NEW_LEADER = 0x3600CA,
+ SMSG_GROUP_REQUEST_DECLINE = 0x360228,
+ SMSG_GROUP_UNINVITE = 0x360229,
+ SMSG_GUILD_ACHIEVEMENT_DELETED = 0x42000D,
+ SMSG_GUILD_ACHIEVEMENT_EARNED = 0x42000C,
+ SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x42000F,
+ SMSG_GUILD_BANK_LOG_QUERY_RESULTS = 0x420027,
+ SMSG_GUILD_BANK_QUERY_RESULTS = 0x420026,
+ SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY = 0x420028,
+ SMSG_GUILD_BANK_TEXT_QUERY_RESULT = 0x42002B,
+ SMSG_GUILD_CHALLENGE_COMPLETED = 0x42001B,
+ SMSG_GUILD_CHALLENGE_UPDATE = 0x42001A,
+ SMSG_GUILD_CHANGE_NAME_RESULT = 0x420025,
+ SMSG_GUILD_COMMAND_RESULT = 0x420002,
+ SMSG_GUILD_CRITERIA_DELETED = 0x42000E,
+ SMSG_GUILD_CRITERIA_UPDATE = 0x42000B,
+ SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED = 0x420040,
+ SMSG_GUILD_EVENT_BANK_MONEY_CHANGED = 0x42003F,
+ SMSG_GUILD_EVENT_DISBANDED = 0x420035,
+ SMSG_GUILD_EVENT_LOG_QUERY_RESULTS = 0x42002A,
+ SMSG_GUILD_EVENT_MOTD = 0x420036,
+ SMSG_GUILD_EVENT_NEW_LEADER = 0x420034,
+ SMSG_GUILD_EVENT_PLAYER_JOINED = 0x420032,
+ SMSG_GUILD_EVENT_PLAYER_LEFT = 0x420033,
+ SMSG_GUILD_EVENT_PRESENCE_CHANGE = 0x420037,
+ SMSG_GUILD_EVENT_RANKS_UPDATED = 0x420039,
+ SMSG_GUILD_EVENT_RANK_CHANGED = 0x42003A,
+ SMSG_GUILD_EVENT_STATUS_CHANGE = 0x420038,
+ SMSG_GUILD_EVENT_TAB_ADDED = 0x42003B,
+ SMSG_GUILD_EVENT_TAB_DELETED = 0x42003C,
+ SMSG_GUILD_EVENT_TAB_MODIFIED = 0x42003D,
+ SMSG_GUILD_EVENT_TAB_TEXT_CHANGED = 0x42003E,
+ SMSG_GUILD_FLAGGED_FOR_RENAME = 0x420024,
+ SMSG_GUILD_HARDCORE_MEMBER_DEATH = 0x420004,
+ SMSG_GUILD_INVITE = 0x420012,
+ SMSG_GUILD_INVITE_DECLINED = 0x420030,
+ SMSG_GUILD_INVITE_EXPIRED = 0x420031,
+ SMSG_GUILD_ITEM_LOOTED_NOTIFY = 0x42001C,
+ SMSG_GUILD_KNOWN_RECIPES = 0x420006,
+ SMSG_GUILD_MEMBERS_WITH_RECIPE = 0x420007,
+ SMSG_GUILD_MEMBER_DAILY_RESET = 0x42002C,
+ SMSG_GUILD_MEMBER_RECIPES = 0x420005,
+ SMSG_GUILD_MEMBER_UPDATE_NOTE = 0x420011,
+ SMSG_GUILD_MOVED = 0x420022,
+ SMSG_GUILD_MOVE_STARTING = 0x420021,
+ SMSG_GUILD_NAME_CHANGED = 0x420023,
+ SMSG_GUILD_NEWS = 0x420009,
+ SMSG_GUILD_NEWS_DELETED = 0x42000A,
+ SMSG_GUILD_PARTY_STATE = 0x420013,
+ SMSG_GUILD_PERMISSIONS_QUERY_RESULTS = 0x420029,
+ SMSG_GUILD_RANKS = 0x420010,
+ SMSG_GUILD_RENAME_NAME_CHECK = 0x420044,
+ SMSG_GUILD_RENAME_REFUND_RESULT = 0x420046,
+ SMSG_GUILD_RENAME_REQUESTED_RESULT = 0x420045,
+ SMSG_GUILD_RENAME_STATUS_UPDATE = 0x420043,
+ SMSG_GUILD_REPUTATION_REACTION_CHANGED = 0x420014,
+ SMSG_GUILD_RESET = 0x420020,
+ SMSG_GUILD_REWARD_LIST = 0x420008,
+ SMSG_GUILD_ROSTER = 0x420003,
+ SMSG_GUILD_SEND_RANK_CHANGE = 0x420001,
+ SMSG_HARDCORE_DEATH_ALERT = 0x360344,
+ SMSG_HEALTH_UPDATE = 0x36016F,
+ SMSG_HIGHEST_THREAT_UPDATE = 0x360177,
+ SMSG_HOTFIX_CONNECT = 0x3A0003,
+ SMSG_HOTFIX_MESSAGE = 0x3A0002,
+ SMSG_INITIALIZE_FACTIONS = 0x3601C0,
+ SMSG_INITIAL_SETUP = 0x360014,
+ SMSG_INIT_WORLD_STATES = 0x3601E2,
+ SMSG_INSPECT_RESULT = 0x3600CE,
+ SMSG_INSTANCE_ABANDON_VOTE_COMPLETED = 0x360093,
+ SMSG_INSTANCE_ABANDON_VOTE_PLAYER_LEFT = 0x360094,
+ SMSG_INSTANCE_ABANDON_VOTE_RESPONSE = 0x360092,
+ SMSG_INSTANCE_ABANDON_VOTE_STARTED = 0x360091,
+ SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x360249,
+ SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x360248,
+ SMSG_INSTANCE_ENCOUNTER_END = 0x360251,
+ SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x360247,
+ SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x360253,
+ SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x360252,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x36024C,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x36024B,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x360250,
+ SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x360254,
+ SMSG_INSTANCE_ENCOUNTER_START = 0x36024D,
+ SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x36024A,
+ SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x36024F,
+ SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x36024E,
+ SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x360197,
+ SMSG_INSTANCE_INFO = 0x3600D1,
+ SMSG_INSTANCE_RESET = 0x360125,
+ SMSG_INSTANCE_RESET_FAILED = 0x360126,
+ SMSG_INSTANCE_SAVE_CREATED = 0x360219,
+ SMSG_INTERRUPT_POWER_REGEN = 0x4D004A,
+ SMSG_INVALIDATE_PAGE_TEXT = 0x3A000A,
+ SMSG_INVALIDATE_PLAYER = 0x4A0007,
+ SMSG_INVALID_PROMOTION_CODE = 0x3601EF,
+ SMSG_INVENTORY_CHANGE_FAILURE = 0x4E0005,
+ SMSG_INVENTORY_FIXUP_COMPLETE = 0x3602AA,
+ SMSG_INVENTORY_FULL_OVERFLOW = 0x3602BB,
+ SMSG_ISLAND_AZERITE_GAIN = 0x3601F8,
+ SMSG_ISLAND_COMPLETE = 0x3601F9,
+ SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x4B0004,
+ SMSG_ITEM_CHANGED = 0x360188,
+ SMSG_ITEM_COOLDOWN = 0x36025F,
+ SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x3601F1,
+ SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x360034,
+ SMSG_ITEM_INTERACTION_COMPLETE = 0x3602F0,
+ SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x360032,
+ SMSG_ITEM_PUSH_RESULT = 0x3600C0,
+ SMSG_ITEM_TIME_UPDATE = 0x3601F0,
+ SMSG_KICK_REASON = 0x360128,
+ SMSG_LATENCY_REPORT_PING = 0x360300,
+ SMSG_LEARNED_SPELLS = 0x4D003E,
+ SMSG_LEARN_PVP_TALENT_FAILED = 0x36006D,
+ SMSG_LEARN_TALENT_FAILED = 0x36006C,
+ SMSG_LEGACY_LOOT_RULES = 0x3602C0,
+ SMSG_LEVEL_LINKING_RESULT = 0x3602D6,
+ SMSG_LEVEL_UP_INFO = 0x360186,
+ SMSG_LFG_BOOT_PLAYER = 0x440019,
+ SMSG_LFG_DISABLED = 0x440017,
+ SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x44001F,
+ SMSG_LFG_INSTANCE_SHUTDOWN_COUNTDOWN = 0x440009,
+ SMSG_LFG_JOIN_LOBBY_MATCHMAKER_QUEUE = 0x440020,
+ SMSG_LFG_JOIN_RESULT = 0x440000,
+ SMSG_LFG_LIST_APPLICANT_LIST_UPDATE = 0x44000F,
+ SMSG_LFG_LIST_APPLICATION_STATUS_UPDATE = 0x44000C,
+ SMSG_LFG_LIST_APPLY_TO_GROUP_RESULT = 0x44000D,
+ SMSG_LFG_LIST_JOIN_RESULT = 0x440001,
+ SMSG_LFG_LIST_SEARCH_RESULTS = 0x440002,
+ SMSG_LFG_LIST_SEARCH_RESULTS_UPDATE = 0x440010,
+ SMSG_LFG_LIST_SEARCH_STATUS = 0x440003,
+ SMSG_LFG_LIST_UPDATE_BLACKLIST = 0x44000E,
+ SMSG_LFG_LIST_UPDATE_EXPIRATION = 0x44000B,
+ SMSG_LFG_LIST_UPDATE_STATUS = 0x44000A,
+ SMSG_LFG_OFFER_CONTINUE = 0x440018,
+ SMSG_LFG_PARTY_INFO = 0x44001A,
+ SMSG_LFG_PLAYER_INFO = 0x44001B,
+ SMSG_LFG_PLAYER_REWARD = 0x44001C,
+ SMSG_LFG_PROPOSAL_UPDATE = 0x440011,
+ SMSG_LFG_QUEUE_STATUS = 0x440004,
+ SMSG_LFG_READY_CHECK_RESULT = 0x44001E,
+ SMSG_LFG_READY_CHECK_UPDATE = 0x440006,
+ SMSG_LFG_ROLE_CHECK_UPDATE = 0x440005,
+ SMSG_LFG_SLOT_INVALID = 0x440014,
+ SMSG_LFG_TELEPORT_DENIED = 0x440016,
+ SMSG_LFG_UPDATE_STATUS = 0x440008,
+ SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x36020B,
+ SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x36020A,
+ SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x3601FE,
+ SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x36020C,
+ SMSG_LOAD_CUF_PROFILES = 0x360055,
+ SMSG_LOAD_EQUIPMENT_SET = 0x3601AC,
+ SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x360311,
+ SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x360312,
+ SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x360313,
+ SMSG_LOBBY_MATCHMAKER_QUEUE_PROPOSED = 0x360315,
+ SMSG_LOBBY_MATCHMAKER_QUEUE_RESULT = 0x360316,
+ SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x360314,
+ SMSG_LOGIN_SET_TIME_SPEED = 0x3601AB,
+ SMSG_LOGIN_VERIFY_WORLD = 0x36002F,
+ SMSG_LOGOUT_CANCEL_ACK = 0x360124,
+ SMSG_LOGOUT_COMPLETE = 0x360123,
+ SMSG_LOGOUT_RESPONSE = 0x360122,
+ SMSG_LOG_XP_GAIN = 0x360182,
+ SMSG_LOOT_ALL_PASSED = 0x3600BE,
+ SMSG_LOOT_LIST = 0x3601DD,
+ SMSG_LOOT_MONEY_NOTIFY = 0x3600B9,
+ SMSG_LOOT_RELEASE = 0x3600B8,
+ SMSG_LOOT_RELEASE_ALL = 0x3600B7,
+ SMSG_LOOT_REMOVED = 0x3600B3,
+ SMSG_LOOT_RESPONSE = 0x3600B2,
+ SMSG_LOOT_ROLL = 0x3600BB,
+ SMSG_LOOT_ROLLS_COMPLETE = 0x3600BD,
+ SMSG_LOOT_ROLL_WON = 0x3600BF,
+ SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x36010E,
+ SMSG_MAIL_COMMAND_RESULT = 0x3600D8,
+ SMSG_MAIL_LIST_RESULT = 0x3601F2,
+ SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x3601F3,
+ SMSG_MAP_OBJECTIVES_INIT = 0x3C002A,
+ SMSG_MAP_OBJ_EVENTS = 0x36005F,
+ SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x3600BC,
+ SMSG_MEETING_STONE_FAILED = 0x360317,
+ SMSG_MESSAGE_BOX = 0x36000A,
+ SMSG_MINIMAP_PING = 0x36016C,
+ SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x4D0004,
+ SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x4D0003,
+ SMSG_MIRROR_VARS = 0x360355,
+ SMSG_MISSILE_CANCEL = 0x360060,
+ SMSG_MODIFY_COOLDOWN = 0x360200,
+ SMSG_MOTD = 0x3B0003,
+ SMSG_MOUNT_RESULT = 0x36000F,
+ SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x3602C6,
+ SMSG_MOVE_ADD_IMPULSE = 0x480062,
+ SMSG_MOVE_APPLY_INERTIA = 0x48005E,
+ SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x480045,
+ SMSG_MOVE_DISABLE_COLLISION = 0x480041,
+ SMSG_MOVE_DISABLE_DOUBLE_JUMP = 0x48002B,
+ SMSG_MOVE_DISABLE_FULL_SPEED_TURNING = 0x480075,
+ SMSG_MOVE_DISABLE_GRAVITY = 0x48003D,
+ SMSG_MOVE_DISABLE_INERTIA = 0x48003F,
+ SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x48003C,
+ SMSG_MOVE_ENABLE_COLLISION = 0x480042,
+ SMSG_MOVE_ENABLE_DOUBLE_JUMP = 0x48002A,
+ SMSG_MOVE_ENABLE_FULL_SPEED_TURNING = 0x480074,
+ SMSG_MOVE_ENABLE_GRAVITY = 0x48003E,
+ SMSG_MOVE_ENABLE_INERTIA = 0x480040,
+ SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x48003B,
+ SMSG_MOVE_KNOCK_BACK = 0x480031,
+ SMSG_MOVE_REMOVE_INERTIA = 0x48005F,
+ SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x480046,
+ SMSG_MOVE_ROOT = 0x480027,
+ SMSG_MOVE_SET_ACTIVE_MOVER = 0x480003,
+ SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED = 0x48006B,
+ SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION = 0x480066,
+ SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE = 0x48006C,
+ SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD = 0x480069,
+ SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT = 0x48006A,
+ SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT = 0x480072,
+ SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT = 0x480068,
+ SMSG_MOVE_SET_ADV_FLYING_MAX_VEL = 0x480067,
+ SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION = 0x480071,
+ SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN = 0x48006D,
+ SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP = 0x48006E,
+ SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION = 0x480070,
+ SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD = 0x48006F,
+ SMSG_MOVE_SET_CANT_SWIM = 0x480035,
+ SMSG_MOVE_SET_CAN_ADV_FLY = 0x480064,
+ SMSG_MOVE_SET_CAN_DRIVE = 0x480076,
+ SMSG_MOVE_SET_CAN_FLY = 0x480033,
+ SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING = 0x480037,
+ SMSG_MOVE_SET_COLLISION_HEIGHT = 0x480043,
+ SMSG_MOVE_SET_COMPOUND_STATE = 0x480047,
+ SMSG_MOVE_SET_FEATHER_FALL = 0x48002D,
+ SMSG_MOVE_SET_FLIGHT_BACK_SPEED = 0x480023,
+ SMSG_MOVE_SET_FLIGHT_SPEED = 0x480022,
+ SMSG_MOVE_SET_HOVERING = 0x48002F,
+ SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES = 0x480039,
+ SMSG_MOVE_SET_LAND_WALK = 0x48002C,
+ SMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x480014,
+ SMSG_MOVE_SET_NORMAL_FALL = 0x48002E,
+ SMSG_MOVE_SET_PITCH_RATE = 0x480026,
+ SMSG_MOVE_SET_RUN_BACK_SPEED = 0x48001F,
+ SMSG_MOVE_SET_RUN_SPEED = 0x48001E,
+ SMSG_MOVE_SET_SWIM_BACK_SPEED = 0x480021,
+ SMSG_MOVE_SET_SWIM_SPEED = 0x480020,
+ SMSG_MOVE_SET_TURN_RATE = 0x480025,
+ SMSG_MOVE_SET_VEHICLE_REC_ID = 0x480044,
+ SMSG_MOVE_SET_WALK_SPEED = 0x480024,
+ SMSG_MOVE_SET_WATER_WALK = 0x480029,
+ SMSG_MOVE_SKIP_TIME = 0x480048,
+ SMSG_MOVE_SPLINE_DISABLE_COLLISION = 0x48004D,
+ SMSG_MOVE_SPLINE_DISABLE_GRAVITY = 0x48004B,
+ SMSG_MOVE_SPLINE_ENABLE_COLLISION = 0x48004E,
+ SMSG_MOVE_SPLINE_ENABLE_GRAVITY = 0x48004C,
+ SMSG_MOVE_SPLINE_ROOT = 0x480049,
+ SMSG_MOVE_SPLINE_SET_FEATHER_FALL = 0x48004F,
+ SMSG_MOVE_SPLINE_SET_FLIGHT_BACK_SPEED = 0x48001A,
+ SMSG_MOVE_SPLINE_SET_FLIGHT_SPEED = 0x480019,
+ SMSG_MOVE_SPLINE_SET_FLYING = 0x480059,
+ SMSG_MOVE_SPLINE_SET_HOVER = 0x480051,
+ SMSG_MOVE_SPLINE_SET_LAND_WALK = 0x480054,
+ SMSG_MOVE_SPLINE_SET_NORMAL_FALL = 0x480050,
+ SMSG_MOVE_SPLINE_SET_PITCH_RATE = 0x48001D,
+ SMSG_MOVE_SPLINE_SET_RUN_BACK_SPEED = 0x480016,
+ SMSG_MOVE_SPLINE_SET_RUN_MODE = 0x480057,
+ SMSG_MOVE_SPLINE_SET_RUN_SPEED = 0x480015,
+ SMSG_MOVE_SPLINE_SET_SWIM_BACK_SPEED = 0x480018,
+ SMSG_MOVE_SPLINE_SET_SWIM_SPEED = 0x480017,
+ SMSG_MOVE_SPLINE_SET_TURN_RATE = 0x48001C,
+ SMSG_MOVE_SPLINE_SET_WALK_MODE = 0x480058,
+ SMSG_MOVE_SPLINE_SET_WALK_SPEED = 0x48001B,
+ SMSG_MOVE_SPLINE_SET_WATER_WALK = 0x480053,
+ SMSG_MOVE_SPLINE_START_SWIM = 0x480055,
+ SMSG_MOVE_SPLINE_STOP_SWIM = 0x480056,
+ SMSG_MOVE_SPLINE_UNROOT = 0x48004A,
+ SMSG_MOVE_SPLINE_UNSET_FLYING = 0x48005A,
+ SMSG_MOVE_SPLINE_UNSET_HOVER = 0x480052,
+ SMSG_MOVE_TELEPORT = 0x480032,
+ SMSG_MOVE_UNROOT = 0x480028,
+ SMSG_MOVE_UNSET_CANT_SWIM = 0x480036,
+ SMSG_MOVE_UNSET_CAN_ADV_FLY = 0x480065,
+ SMSG_MOVE_UNSET_CAN_DRIVE = 0x480077,
+ SMSG_MOVE_UNSET_CAN_FLY = 0x480034,
+ SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING = 0x480038,
+ SMSG_MOVE_UNSET_HOVERING = 0x480030,
+ SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x48003A,
+ SMSG_MOVE_UPDATE = 0x48000E,
+ SMSG_MOVE_UPDATE_ADD_IMPULSE = 0x480063,
+ SMSG_MOVE_UPDATE_APPLY_INERTIA = 0x480060,
+ SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE = 0x480012,
+ SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0x48000D,
+ SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0x48000A,
+ SMSG_MOVE_UPDATE_FLIGHT_SPEED = 0x480009,
+ SMSG_MOVE_UPDATE_KNOCK_BACK = 0x480010,
+ SMSG_MOVE_UPDATE_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x480011,
+ SMSG_MOVE_UPDATE_PITCH_RATE = 0x48000C,
+ SMSG_MOVE_UPDATE_REMOVE_INERTIA = 0x480061,
+ SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE = 0x480013,
+ SMSG_MOVE_UPDATE_RUN_BACK_SPEED = 0x480005,
+ SMSG_MOVE_UPDATE_RUN_SPEED = 0x480004,
+ SMSG_MOVE_UPDATE_SWIM_BACK_SPEED = 0x480008,
+ SMSG_MOVE_UPDATE_SWIM_SPEED = 0x480007,
+ SMSG_MOVE_UPDATE_TELEPORT = 0x48000F,
+ SMSG_MOVE_UPDATE_TURN_RATE = 0x48000B,
+ SMSG_MOVE_UPDATE_WALK_SPEED = 0x480006,
+ SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x360276,
+ SMSG_MULTI_FLOOR_NEW_FLOOR = 0x360275,
+ SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x3600A8,
+ SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x3600AA,
+ SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x3600AF,
+ SMSG_MYTHIC_PLUS_SEASON_DATA = 0x3600A9,
+ SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x360074,
+ SMSG_NEW_DATA_BUILD = 0x36033B,
+ SMSG_NEW_TAXI_PATH = 0x36011D,
+ SMSG_NEW_WORLD = 0x36002B,
+ SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x4D0034,
+ SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x360149,
+ SMSG_NOTIFY_MONEY = 0x360031,
+ SMSG_NOTIFY_RECEIVED_MAIL = 0x3600D9,
+ SMSG_NPC_INTERACTION_OPEN_RESULT = 0x36030D,
+ SMSG_OFFER_PETITION_ERROR = 0x360154,
+ SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x360183,
+ SMSG_ON_MONSTER_MOVE = 0x480002,
+ SMSG_OPEN_ARTIFACT_FORGE = 0x36023A,
+ SMSG_OPEN_CONTAINER = 0x4E0006,
+ SMSG_OPEN_LFG_DUNGEON_FINDER = 0x440015,
+ SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x360232,
+ SMSG_OVERRIDE_LIGHT = 0x360159,
+ SMSG_PAGE_TEXT = 0x3601B7,
+ SMSG_PARTY_COMMAND_RESULT = 0x36022C,
+ SMSG_PARTY_ELIGIBILITY_FOR_DELVE_TIERS_RESPONSE = 0x360350,
+ SMSG_PARTY_INVITE = 0x360056,
+ SMSG_PARTY_KILL_LOG = 0x3601F6,
+ SMSG_PARTY_MEMBER_FULL_STATE = 0x3601F5,
+ SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x3601F4,
+ SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x3602F6,
+ SMSG_PARTY_UPDATE = 0x36008C,
+ SMSG_PAST_TIME_EVENTS = 0x36005B,
+ SMSG_PAUSE_MIRROR_TIMER = 0x3601AE,
+ SMSG_PENDING_RAID_LOCK = 0x360195,
+ SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x36030A,
+ SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x360306,
+ SMSG_PERKS_PROGRAM_DISABLED = 0x36030B,
+ SMSG_PERKS_PROGRAM_RESULT = 0x360307,
+ SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x360305,
+ SMSG_PETITION_ALREADY_SIGNED = 0x360037,
+ SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x420042,
+ SMSG_PETITION_SHOW_LIST = 0x36015C,
+ SMSG_PETITION_SHOW_SIGNATURES = 0x36015D,
+ SMSG_PETITION_SIGN_RESULTS = 0x3601E8,
+ SMSG_PET_ACTION_FEEDBACK = 0x3601E5,
+ SMSG_PET_ACTION_SOUND = 0x36013F,
+ SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x36009E,
+ SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x360113,
+ SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x360097,
+ SMSG_PET_BATTLE_FINAL_ROUND = 0x36009C,
+ SMSG_PET_BATTLE_FINISHED = 0x36009D,
+ SMSG_PET_BATTLE_FIRST_ROUND = 0x360099,
+ SMSG_PET_BATTLE_INITIAL_UPDATE = 0x360098,
+ SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x36009F,
+ SMSG_PET_BATTLE_PVP_CHALLENGE = 0x360096,
+ SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x3600D6,
+ SMSG_PET_BATTLE_QUEUE_STATUS = 0x3600D7,
+ SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x36009B,
+ SMSG_PET_BATTLE_REQUEST_FAILED = 0x360095,
+ SMSG_PET_BATTLE_ROUND_RESULT = 0x36009A,
+ SMSG_PET_BATTLE_SLOT_UPDATES = 0x360084,
+ SMSG_PET_CAST_FAILED = 0x4D0049,
+ SMSG_PET_CLEAR_SPELLS = 0x4D0013,
+ SMSG_PET_DISMISS_SOUND = 0x360140,
+ SMSG_PET_GOD_MODE = 0x36011A,
+ SMSG_PET_GUIDS = 0x3601A1,
+ SMSG_PET_LEARNED_SPELLS = 0x4D0040,
+ SMSG_PET_MODE = 0x36001F,
+ SMSG_PET_NAME_INVALID = 0x360161,
+ SMSG_PET_NEWLY_TAMED = 0x36001E,
+ SMSG_PET_SPELLS_MESSAGE = 0x4D0014,
+ SMSG_PET_STABLE_RESULT = 0x36002A,
+ SMSG_PET_TAME_FAILURE = 0x360151,
+ SMSG_PET_UNLEARNED_SPELLS = 0x4D0041,
+ SMSG_PHASE_SHIFT_CHANGE = 0x36000C,
+ SMSG_PLAYED_TIME = 0x360173,
+ SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT = 0x4A002D,
+ SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x4A001F,
+ SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x4A001E,
+ SMSG_PLAYER_BONUS_ROLL_FAILED = 0x4A0021,
+ SMSG_PLAYER_BOUND = 0x4A0000,
+ SMSG_PLAYER_CHOICE_CLEAR = 0x4A0006,
+ SMSG_PLAYER_CHOICE_DISPLAY_ERROR = 0x4A0005,
+ SMSG_PLAYER_CONDITION_RESULT = 0x4A0012,
+ SMSG_PLAYER_END_OF_MATCH_DETAILS = 0x4A002F,
+ SMSG_PLAYER_HIDE_ARROW_CALLOUT = 0x4A002C,
+ SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x4A0011,
+ SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x4A0016,
+ SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x420041,
+ SMSG_PLAYER_SAVE_PERSONAL_EMBLEM = 0x4A002E,
+ SMSG_PLAYER_SHOW_ARROW_CALLOUT = 0x4A002B,
+ SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x4A0029,
+ SMSG_PLAYER_SHOW_PARTY_POSE_UI = 0x4A002A,
+ SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x4A0024,
+ SMSG_PLAYER_SKINNED = 0x4A000E,
+ SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x4A0015,
+ SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x4A0014,
+ SMSG_PLAY_MUSIC = 0x360205,
+ SMSG_PLAY_OBJECT_SOUND = 0x360207,
+ SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x3601CD,
+ SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x4D0038,
+ SMSG_PLAY_SCENE = 0x3600D3,
+ SMSG_PLAY_SOUND = 0x360204,
+ SMSG_PLAY_SPEAKERBOT_SOUND = 0x360208,
+ SMSG_PLAY_SPELL_VISUAL = 0x4D0036,
+ SMSG_PLAY_SPELL_VISUAL_KIT = 0x4D003A,
+ SMSG_PLAY_TIME_WARNING = 0x36019B,
+ SMSG_PONG = 0x3D0006,
+ SMSG_POWER_UPDATE = 0x360170,
+ SMSG_PRELOAD_CHILD_MAP = 0x36000D,
+ SMSG_PRELOAD_WORLD = 0x36002C,
+ SMSG_PREPOPULATE_NAME_CACHE = 0x3602C9,
+ SMSG_PRE_RESSURECT = 0x360203,
+ SMSG_PRINT_NOTIFICATION = 0x360063,
+ SMSG_PROC_RESIST = 0x3601F7,
+ SMSG_PROFESSION_GOSSIP = 0x360296,
+ SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x4D0042,
+ SMSG_PVP_CREDIT = 0x3C0024,
+ SMSG_PVP_MATCH_COMPLETE = 0x3C002F,
+ SMSG_PVP_MATCH_INITIALIZE = 0x3C0030,
+ SMSG_PVP_MATCH_SET_STATE = 0x3C002E,
+ SMSG_PVP_MATCH_START = 0x3C002D,
+ SMSG_PVP_MATCH_STATISTICS = 0x3C0010,
+ SMSG_PVP_OPTIONS_ENABLED = 0x3C0013,
+ SMSG_PVP_TIER_RECORD = 0x360301,
+ SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x3A000C,
+ SMSG_QUERY_CREATURE_RESPONSE = 0x3A0006,
+ SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x3A0007,
+ SMSG_QUERY_GARRISON_PET_NAME_RESPONSE = 0x400041,
+ SMSG_QUERY_GUILD_FOLLOW_INFO_RESPONSE = 0x42002F,
+ SMSG_QUERY_GUILD_INFO_RESPONSE = 0x42002D,
+ SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x3A0010,
+ SMSG_QUERY_NPC_TEXT_RESPONSE = 0x3A0008,
+ SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x3A0009,
+ SMSG_QUERY_PETITION_RESPONSE = 0x3A000D,
+ SMSG_QUERY_PET_NAME_RESPONSE = 0x3A000B,
+ SMSG_QUERY_PLAYER_NAMES_RESPONSE = 0x4A0026,
+ SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x4A000A,
+ SMSG_QUERY_QUEST_INFO_RESPONSE = 0x4B0016,
+ SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x42002E,
+ SMSG_QUERY_TIME_RESPONSE = 0x360181,
+ SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x4B0001,
+ SMSG_QUEST_CONFIRM_ACCEPT = 0x4B000F,
+ SMSG_QUEST_FORCE_REMOVED = 0x4B001C,
+ SMSG_QUEST_GIVER_INVALID_QUEST = 0x4B0005,
+ SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE = 0x4B0014,
+ SMSG_QUEST_GIVER_QUEST_COMPLETE = 0x4B0003,
+ SMSG_QUEST_GIVER_QUEST_DETAILS = 0x4B0012,
+ SMSG_QUEST_GIVER_QUEST_FAILED = 0x4B0006,
+ SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE = 0x4B001A,
+ SMSG_QUEST_GIVER_REQUEST_ITEMS = 0x4B0013,
+ SMSG_QUEST_GIVER_STATUS = 0x4B001B,
+ SMSG_QUEST_GIVER_STATUS_MULTIPLE = 0x4B0011,
+ SMSG_QUEST_ITEM_USABILITY_RESPONSE = 0x4B0002,
+ SMSG_QUEST_LOG_FULL = 0x4B0007,
+ SMSG_QUEST_NON_LOG_UPDATE_COMPLETE = 0x4B0008,
+ SMSG_QUEST_POI_QUERY_RESPONSE = 0x4B001D,
+ SMSG_QUEST_POI_UPDATE_RESPONSE = 0x4B001F,
+ SMSG_QUEST_PUSH_RESULT = 0x4B0010,
+ SMSG_QUEST_SESSION_INFO_RESPONSE = 0x3602EC,
+ SMSG_QUEST_SESSION_READY_CHECK = 0x3602DA,
+ SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x3602DB,
+ SMSG_QUEST_SESSION_RESULT = 0x3602D9,
+ SMSG_QUEST_UPDATE_ADD_CREDIT = 0x4B000C,
+ SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x4B000D,
+ SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x4B000E,
+ SMSG_QUEST_UPDATE_COMPLETE = 0x4B0009,
+ SMSG_QUEST_UPDATE_FAILED = 0x4B000A,
+ SMSG_QUEST_UPDATE_FAILED_TIMER = 0x4B000B,
+ SMSG_QUEUE_SUMMARY_UPDATE = 0x3602A9,
+ SMSG_RAF_ACCOUNT_INFO = 0x3602D7,
+ SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x3602E8,
+ SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x360338,
+ SMSG_RAID_DIFFICULTY_SET = 0x360244,
+ SMSG_RAID_GROUP_ONLY = 0x360246,
+ SMSG_RAID_INSTANCE_MESSAGE = 0x3B000A,
+ SMSG_RAID_MARKERS_CHANGED = 0x360038,
+ SMSG_RANDOM_ROLL = 0x3600CD,
+ SMSG_RATED_PVP_INFO = 0x3C000F,
+ SMSG_READY_CHECK_COMPLETED = 0x360090,
+ SMSG_READY_CHECK_RESPONSE = 0x36008F,
+ SMSG_READY_CHECK_STARTED = 0x36008E,
+ SMSG_READ_ITEM_RESULT_FAILED = 0x360240,
+ SMSG_READ_ITEM_RESULT_OK = 0x360237,
+ SMSG_REALM_QUERY_RESPONSE = 0x3A0005,
+ SMSG_REATTACH_RESURRECT = 0x3601E7,
+ SMSG_RECEIVE_PING_UNIT = 0x360039,
+ SMSG_RECEIVE_PING_WORLD_POINT = 0x36003A,
+ SMSG_RECRAFT_ITEM_RESULT = 0x36032E,
+ SMSG_RECRUIT_A_FRIEND_FAILURE = 0x36015E,
+ SMSG_REFRESH_COMPONENT = 0x3600ED,
+ SMSG_REGIONWIDE_CHARACTER_MAIL_DATA = 0x36001A,
+ SMSG_REGIONWIDE_CHARACTER_RESTRICTIONS_DATA = 0x360019,
+ SMSG_REMOVE_ITEM_PASSIVE = 0x360043,
+ SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x4D0043,
+ SMSG_REPLACE_TROPHY_RESPONSE = 0x36025C,
+ SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x4A0009,
+ SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x360025,
+ SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x3C0014,
+ SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x3C0015,
+ SMSG_RESET_COMPRESSION_CONTEXT = 0x3D0007,
+ SMSG_RESET_FAILED_NOTIFY = 0x360155,
+ SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x360335,
+ SMSG_RESET_QUEST_POI = 0x4B0020,
+ SMSG_RESET_RANGED_COMBAT_TIMER = 0x3C0023,
+ SMSG_RESET_WEEKLY_CURRENCY = 0x360009,
+ SMSG_RESPEC_WIPE_CONFIRM = 0x3600B0,
+ SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x360006,
+ SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x360308,
+ SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x360309,
+ SMSG_RESTART_GLOBAL_COOLDOWN = 0x4D0052,
+ SMSG_RESTRICTED_ACCOUNT_WARNING = 0x360052,
+ SMSG_RESUME_CAST = 0x4D002C,
+ SMSG_RESUME_CAST_BAR = 0x4D002F,
+ SMSG_RESUME_COMMS = 0x3D0003,
+ SMSG_RESUME_TOKEN = 0x360041,
+ SMSG_RESURRECT_REQUEST = 0x360012,
+ SMSG_RESYNC_RUNES = 0x4D0050,
+ SMSG_RETURNING_PLAYER_PROMPT = 0x36023F,
+ SMSG_RETURN_APPLICANT_LIST = 0x3602CD,
+ SMSG_RETURN_RECRUITING_CLUBS = 0x3602CC,
+ SMSG_ROLE_CHANGED_INFORM = 0x360021,
+ SMSG_ROLE_CHOSEN = 0x44001D,
+ SMSG_ROLE_POLL_INFORM = 0x360022,
+ SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x360295,
+ SMSG_RUNE_REGEN_DEBUG = 0x36004F,
+ SMSG_SCENARIO_COMPLETED = 0x360283,
+ SMSG_SCENARIO_POIS = 0x3600D0,
+ SMSG_SCENARIO_PROGRESS_UPDATE = 0x3600C9,
+ SMSG_SCENARIO_SHOW_CRITERIA = 0x360299,
+ SMSG_SCENARIO_STATE = 0x3600C8,
+ SMSG_SCENARIO_UI_UPDATE = 0x360298,
+ SMSG_SCENARIO_VACATE = 0x360241,
+ SMSG_SCENE_OBJECT_EVENT = 0x36007A,
+ SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x36007F,
+ SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x360080,
+ SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x36007C,
+ SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x36007B,
+ SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x36007E,
+ SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x36007D,
+ SMSG_SCHEDULED_AREA_POI_UPDATE_RESPONSE = 0x4A0019,
+ SMSG_SCRIPT_CAST = 0x4D0047,
+ SMSG_SEASON_INFO = 0x36005A,
+ SMSG_SELL_RESPONSE = 0x360162,
+ SMSG_SEND_ITEM_PASSIVES = 0x360044,
+ SMSG_SEND_KNOWN_SPELLS = 0x4D0019,
+ SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x3600CB,
+ SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x3600CC,
+ SMSG_SEND_SPELL_CHARGES = 0x4D001B,
+ SMSG_SEND_SPELL_HISTORY = 0x4D001A,
+ SMSG_SEND_UNLEARN_SPELLS = 0x4D001C,
+ SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x3600EA,
+ SMSG_SERVER_TIME = 0x360121,
+ SMSG_SERVER_TIME_OFFSET = 0x3601B2,
+ SMSG_SETUP_COMBAT_LOG_FILE_FLUSH = 0x4D000F,
+ SMSG_SETUP_CURRENCY = 0x360007,
+ SMSG_SET_AI_ANIM_KIT = 0x3601CC,
+ SMSG_SET_ANIM_TIER = 0x3601D0,
+ SMSG_SET_CHR_UPGRADE_TIER = 0x360077,
+ SMSG_SET_CURRENCY = 0x360008,
+ SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x440012,
+ SMSG_SET_DUNGEON_DIFFICULTY = 0x360143,
+ SMSG_SET_FACTION_AT_WAR = 0x36019D,
+ SMSG_SET_FACTION_NOT_VISIBLE = 0x3601C7,
+ SMSG_SET_FACTION_STANDING = 0x3601C8,
+ SMSG_SET_FACTION_VISIBLE = 0x3601C6,
+ SMSG_SET_FLAT_SPELL_MODIFIER = 0x4D0027,
+ SMSG_SET_INSTANCE_LEAVER = 0x360356,
+ SMSG_SET_ITEM_PURCHASE_DATA = 0x360033,
+ SMSG_SET_LOOT_METHOD_FAILED = 0x360267,
+ SMSG_SET_MAX_WEEKLY_QUANTITY = 0x360036,
+ SMSG_SET_MELEE_ANIM_KIT = 0x3601CF,
+ SMSG_SET_MOVEMENT_ANIM_KIT = 0x3601CE,
+ SMSG_SET_PCT_SPELL_MODIFIER = 0x4D0028,
+ SMSG_SET_PET_SPECIALIZATION = 0x3600C2,
+ SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x4A000B,
+ SMSG_SET_PLAY_HOVER_ANIM = 0x360053,
+ SMSG_SET_PROFICIENCY = 0x3601D1,
+ SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x3602E0,
+ SMSG_SET_SHIPMENT_READY_RESPONSE = 0x40003A,
+ SMSG_SET_SPELL_CHARGES = 0x4D0018,
+ SMSG_SET_TIME_ZONE_INFORMATION = 0x360116,
+ SMSG_SET_VEHICLE_REC_ID = 0x360194,
+ SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x36030C,
+ SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x40003B,
+ SMSG_SHOW_DELVES_COMPANION_CONFIGURATION_UI = 0x36034E,
+ SMSG_SHOW_DELVES_DISPLAY_UI = 0x36034C,
+ SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x360073,
+ SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x4B0015,
+ SMSG_SHOW_TAXI_NODES = 0x36016B,
+ SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x36020D,
+ SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x360318,
+ SMSG_SOCKET_GEMS_FAILURE = 0x3601C4,
+ SMSG_SOCKET_GEMS_SUCCESS = 0x3601C3,
+ SMSG_SPECIAL_MOUNT_ANIM = 0x36013E,
+ SMSG_SPECTATE_END = 0x36033A,
+ SMSG_SPECTATE_PLAYER = 0x360339,
+ SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x3601B6,
+ SMSG_SPELL_ABSORB_LOG = 0x4D000C,
+ SMSG_SPELL_CATEGORY_COOLDOWN = 0x4D0006,
+ SMSG_SPELL_CHANNEL_START = 0x4D0022,
+ SMSG_SPELL_CHANNEL_UPDATE = 0x4D0023,
+ SMSG_SPELL_COOLDOWN = 0x4D0005,
+ SMSG_SPELL_DAMAGE_SHIELD = 0x4D001F,
+ SMSG_SPELL_DELAYED = 0x4D0030,
+ SMSG_SPELL_DISPELL_LOG = 0x4D0007,
+ SMSG_SPELL_EMPOWER_SET_STAGE = 0x4D0026,
+ SMSG_SPELL_EMPOWER_START = 0x4D0024,
+ SMSG_SPELL_EMPOWER_UPDATE = 0x4D0025,
+ SMSG_SPELL_ENERGIZE_LOG = 0x4D0009,
+ SMSG_SPELL_EXECUTE_LOG = 0x4D0031,
+ SMSG_SPELL_FAILED_OTHER = 0x4D0046,
+ SMSG_SPELL_FAILURE = 0x4D0044,
+ SMSG_SPELL_FAILURE_MESSAGE = 0x4D004B,
+ SMSG_SPELL_GO = 0x4D002A,
+ SMSG_SPELL_HEAL_ABSORB_LOG = 0x4D000B,
+ SMSG_SPELL_HEAL_LOG = 0x4D000A,
+ SMSG_SPELL_INSTAKILL_LOG = 0x4D0021,
+ SMSG_SPELL_INTERRUPT_LOG = 0x4D000D,
+ SMSG_SPELL_MISS_LOG = 0x4D0032,
+ SMSG_SPELL_NON_MELEE_DAMAGE_LOG = 0x4D0020,
+ SMSG_SPELL_OR_DAMAGE_IMMUNE = 0x4D001D,
+ SMSG_SPELL_PERIODIC_AURA_LOG = 0x4D0008,
+ SMSG_SPELL_PREPARE = 0x4D0029,
+ SMSG_SPELL_START = 0x4D002B,
+ SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x360065,
+ SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x3602F2,
+ SMSG_STAND_STATE_UPDATE = 0x3601BA,
+ SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x36006B,
+ SMSG_START_ELAPSED_TIMER = 0x3600A0,
+ SMSG_START_ELAPSED_TIMERS = 0x3600A2,
+ SMSG_START_LIGHTNING_STORM = 0x360146,
+ SMSG_START_LOOT_ROLL = 0x3600BA,
+ SMSG_START_MIRROR_TIMER = 0x3601AD,
+ SMSG_START_TIMER = 0x36003D,
+ SMSG_STOP_ELAPSED_TIMER = 0x3600A1,
+ SMSG_STOP_MIRROR_TIMER = 0x3601AF,
+ SMSG_STOP_SPEAKERBOT_SOUND = 0x360209,
+ SMSG_STOP_TIMER = 0x36003E,
+ SMSG_STREAMING_MOVIES = 0x36003C,
+ SMSG_SUGGEST_INVITE_INFORM = 0x36022D,
+ SMSG_SUMMON_CANCEL = 0x36014F,
+ SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x360023,
+ SMSG_SUMMON_REQUEST = 0x3601BE,
+ SMSG_SUPERCEDED_SPELLS = 0x4D003D,
+ SMSG_SUSPEND_COMMS = 0x3D0002,
+ SMSG_SUSPEND_TOKEN = 0x360040,
+ SMSG_SYNC_WOW_ENTITLEMENTS = 0x3602EA,
+ SMSG_TALENTS_INVOLUNTARILY_RESET = 0x3601B5,
+ SMSG_TAXI_NODE_STATUS = 0x36011B,
+ SMSG_TEXT_EMOTE = 0x360119,
+ SMSG_THREAT_CLEAR = 0x36017A,
+ SMSG_THREAT_REMOVE = 0x360179,
+ SMSG_THREAT_UPDATE = 0x360178,
+ SMSG_TIMERUNNING_SEASON_ENDED = 0x36034F,
+ SMSG_TIME_ADJUSTMENT = 0x480001,
+ SMSG_TIME_SYNC_REQUEST = 0x480000,
+ SMSG_TITLE_EARNED = 0x360175,
+ SMSG_TITLE_LOST = 0x360176,
+ SMSG_TOTEM_CREATED = 0x360165,
+ SMSG_TOTEM_DURATION_CHANGED = 0x360167,
+ SMSG_TOTEM_MOVED = 0x360168,
+ SMSG_TOTEM_REMOVED = 0x360166,
+ SMSG_TRADE_STATUS = 0x360017,
+ SMSG_TRADE_UPDATED = 0x360016,
+ SMSG_TRAINER_BUY_FAILED = 0x36017D,
+ SMSG_TRAINER_LIST = 0x36017C,
+ SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x36006A,
+ SMSG_TRANSFER_ABORTED = 0x3601A0,
+ SMSG_TRANSFER_PENDING = 0x360066,
+ SMSG_TREASURE_PICKER_RESPONSE = 0x3A0011,
+ SMSG_TRIGGER_CINEMATIC = 0x360261,
+ SMSG_TRIGGER_MOVIE = 0x360169,
+ SMSG_TURN_IN_PETITION_RESULT = 0x3601EA,
+ SMSG_TUTORIAL_FLAGS = 0x360255,
+ SMSG_UI_ACTION = 0x360206,
+ SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x4B0023,
+ SMSG_UNDELETE_CHARACTER_RESPONSE = 0x360262,
+ SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x360263,
+ SMSG_UNLEARNED_SPELLS = 0x4D003F,
+ SMSG_UNLOAD_CHILD_MAP = 0x36000E,
+ SMSG_UNSET_INSTANCE_LEAVER = 0x360357,
+ SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x360302,
+ SMSG_UPDATE_ACCOUNT_DATA = 0x3601A6,
+ SMSG_UPDATE_ACCOUNT_DATA_COMPLETE = 0x3601A7,
+ SMSG_UPDATE_ACTION_BUTTONS = 0x360078,
+ SMSG_UPDATE_BNET_SESSION_KEY = 0x3602BA,
+ SMSG_UPDATE_CAPTURE_POINT = 0x3C0007,
+ SMSG_UPDATE_CELESTIAL_BODY = 0x3602B6,
+ SMSG_UPDATE_CHARACTER_FLAGS = 0x36025B,
+ SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x360202,
+ SMSG_UPDATE_COOLDOWN = 0x360201,
+ SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x400038,
+ SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x400021,
+ SMSG_UPDATE_EXPANSION_LEVEL = 0x3600E3,
+ SMSG_UPDATE_GAME_TIME_STATE = 0x3602BD,
+ SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x360148,
+ SMSG_UPDATE_LAST_INSTANCE = 0x360127,
+ SMSG_UPDATE_OBJECT = 0x460000,
+ SMSG_UPDATE_PRIMARY_SPEC = 0x360070,
+ SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x36008D,
+ SMSG_UPDATE_TALENT_DATA = 0x36006F,
+ SMSG_UPDATE_WORLD_STATE = 0x3601E4,
+ SMSG_USERLIST_ADD = 0x3B000F,
+ SMSG_USERLIST_REMOVE = 0x3B0010,
+ SMSG_USERLIST_UPDATE = 0x3B0011,
+ SMSG_USE_EQUIPMENT_SET_RESULT = 0x3601EB,
+ SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x3602B1,
+ SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x3602AF,
+ SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x3602AE,
+ SMSG_VAS_PURCHASE_COMPLETE = 0x360289,
+ SMSG_VAS_PURCHASE_STATE_UPDATE = 0x360288,
+ SMSG_VENDOR_INVENTORY = 0x360051,
+ SMSG_VIGNETTE_UPDATE = 0x4A0010,
+ SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x3602B5,
+ SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x3602FD,
+ SMSG_VOICE_LOGIN_RESPONSE = 0x3602B4,
+ SMSG_VOID_ITEM_SWAP_RESPONSE = 0x4E0004,
+ SMSG_VOID_STORAGE_CONTENTS = 0x4E0001,
+ SMSG_VOID_STORAGE_FAILED = 0x4E0000,
+ SMSG_VOID_STORAGE_TRANSFER_CHANGES = 0x4E0002,
+ SMSG_VOID_TRANSFER_RESULT = 0x4E0003,
+ SMSG_WAIT_QUEUE_FINISH = 0x360003,
+ SMSG_WAIT_QUEUE_UPDATE = 0x360002,
+ SMSG_WARDEN3_DATA = 0x36000B,
+ SMSG_WARDEN3_DISABLED = 0x3602B8,
+ SMSG_WARDEN3_ENABLED = 0x3602B7,
+ SMSG_WARFRONT_COMPLETE = 0x3601FA,
+ SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE = 0x3C0012,
+ SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x3C0011,
+ SMSG_WEATHER = 0x360145,
+ SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x3602F5,
+ SMSG_WEEKLY_REWARDS_RESULT = 0x3602F3,
+ SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x3602F4,
+ SMSG_WHO = 0x3B0002,
+ SMSG_WHO_IS = 0x360144,
+ SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x3602BC,
+ SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x4A0017,
+ SMSG_WORLD_SERVER_INFO = 0x360045,
+ SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x3602EB,
+ SMSG_WOW_LABS_AREA_INFO = 0x36031D,
+ SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x360319,
+ SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x36031A,
+ SMSG_WOW_LABS_PARTY_ERROR = 0x360326,
+ SMSG_WOW_LABS_SET_AREA_ID_RESULT = 0x36031B,
+ SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x36031F,
+ SMSG_WOW_LABS_SET_SELECTED_AREA_ID = 0x36031C,
+ SMSG_XP_AWARDED_FROM_CURRENCY = 0x360334,
+ SMSG_XP_GAIN_ABORTED = 0x360062,
+ SMSG_XP_GAIN_ENABLED = 0x360245,
+ SMSG_ZONE_UNDER_ATTACK = 0x3B000B,
// Opcodes that are not generated automatically
SMSG_ACCOUNT_HEIRLOOM_UPDATE = SMSG_ACCOUNT_TOY_UPDATE + 1, // no client handler
- SMSG_COMPRESSED_PACKET = 0x3F000A,
- SMSG_MULTIPLE_PACKETS = 0x3F0009,
+ SMSG_COMPRESSED_PACKET = SMSG_AUTH_CHALLENGE + 0xA,
+ SMSG_MULTIPLE_PACKETS = SMSG_AUTH_CHALLENGE + 0x9,
// Deleted opcodes, here only to allow compile
SMSG_ARENA_TEAM_STATS = UNKNOWN_OPCODE,
};
-inline constexpr std::size_t NUM_SMSG_OPCODES = 1473;
+inline constexpr std::size_t NUM_SMSG_OPCODES = 1479;
inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeServer opcode)
{
uint32 idInGroup = opcode & 0xFFFF;
switch (opcode >> 16)
{
- case 0x38: return idInGroup < 848 ? idInGroup + 0 : -1;
- case 0x39: return idInGroup < 10 ? idInGroup + 848 : -1;
- case 0x3C: return idInGroup < 18 ? idInGroup + 858 : -1;
- case 0x3D: return idInGroup < 36 ? idInGroup + 876 : -1;
- case 0x3E: return idInGroup < 49 ? idInGroup + 912 : -1;
- case 0x3F: return idInGroup < 11 ? idInGroup + 961 : -1;
- case 0x40: return idInGroup < 12 ? idInGroup + 972 : -1;
- case 0x42: return idInGroup < 82 ? idInGroup + 984 : -1;
- case 0x44: return idInGroup < 71 ? idInGroup + 1066 : -1;
- case 0x46: return idInGroup < 33 ? idInGroup + 1137 : -1;
- case 0x48: return idInGroup < 1 ? idInGroup + 1170 : -1;
- case 0x49: return idInGroup < 120 ? idInGroup + 1171 : -1;
- case 0x4B: return idInGroup < 48 ? idInGroup + 1291 : -1;
- case 0x4C: return idInGroup < 41 ? idInGroup + 1339 : -1;
- case 0x4E: return idInGroup < 85 ? idInGroup + 1380 : -1;
- case 0x4F: return idInGroup < 8 ? idInGroup + 1465 : -1;
- case 0x51: return idInGroup < 1 ? idInGroup + 1473 : -1;
+ case 0x36: return idInGroup < 857 ? idInGroup + 0 : -1;
+ case 0x37: return idInGroup < 5 ? idInGroup + 857 : -1;
+ case 0x3A: return idInGroup < 18 ? idInGroup + 862 : -1;
+ case 0x3B: return idInGroup < 36 ? idInGroup + 880 : -1;
+ case 0x3C: return idInGroup < 49 ? idInGroup + 916 : -1;
+ case 0x3D: return idInGroup < 11 ? idInGroup + 965 : -1;
+ case 0x3E: return idInGroup < 12 ? idInGroup + 976 : -1;
+ case 0x40: return idInGroup < 82 ? idInGroup + 988 : -1;
+ case 0x42: return idInGroup < 71 ? idInGroup + 1070 : -1;
+ case 0x44: return idInGroup < 33 ? idInGroup + 1141 : -1;
+ case 0x46: return idInGroup < 1 ? idInGroup + 1174 : -1;
+ case 0x48: return idInGroup < 120 ? idInGroup + 1175 : -1;
+ case 0x4A: return idInGroup < 49 ? idInGroup + 1295 : -1;
+ case 0x4B: return idInGroup < 41 ? idInGroup + 1344 : -1;
+ case 0x4D: return idInGroup < 85 ? idInGroup + 1385 : -1;
+ case 0x4E: return idInGroup < 8 ? idInGroup + 1470 : -1;
+ case 0x50: return idInGroup < 1 ? idInGroup + 1478 : -1;
default: return -1;
}
}
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 88a6cc1d815..b62697bce23 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -22,6 +22,7 @@
#include "WorldSession.h"
#include "AccountMgr.h"
#include "AuthenticationPackets.h"
+#include "Bag.h"
#include "BattlePetMgr.h"
#include "BattlegroundMgr.h"
#include "BattlenetPackets.h"
@@ -1525,7 +1526,7 @@ uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint32 opcode) co
case CMSG_QUEST_GIVER_REQUEST_REWARD: // 0 1
case CMSG_COMPLETE_CINEMATIC: // 0 1
case CMSG_BANKER_ACTIVATE: // 0 1
- case CMSG_BUY_BANK_SLOT: // 0 1
+ case CMSG_BUY_ACCOUNT_BANK_TAB: // 0 1
case CMSG_OPT_OUT_OF_LOOT: // 0 1
case CMSG_DUEL_RESPONSE: // 0 1
case CMSG_CALENDAR_COMPLAIN: // 0 1
@@ -1722,7 +1723,11 @@ uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint32 opcode) co
case CMSG_GET_ITEM_PURCHASE_DATA: // not profiled
{
- maxPacketCounterAllowed = PLAYER_SLOTS_COUNT;
+ maxPacketCounterAllowed = PLAYER_SLOTS_COUNT + MAX_BAG_SIZE * (
+ (INVENTORY_SLOT_BAG_END - INVENTORY_SLOT_BAG_START)
+ + (REAGENT_BAG_SLOT_END - REAGENT_BAG_SLOT_START)
+ + (BANK_SLOT_BAG_END - BANK_SLOT_BAG_START)
+ + (ACCOUNT_BANK_SLOT_BAG_END - ACCOUNT_BANK_SLOT_BAG_START));
break;
}
case CMSG_HOTFIX_REQUEST: // not profiled
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 01299cc9f7c..442e1495da3 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -169,10 +169,9 @@ namespace WorldPackets
{
class AutoBankItem;
class AutoStoreBankItem;
- class BuyBankSlot;
- class AutoBankReagent;
- class AutoStoreBankReagent;
- class ReagentBank;
+ class BuyBankTab;
+ class UpdateBankTabSettings;
+ class AutoDepositCharacterBank;
class BankerActivate;
}
@@ -454,11 +453,9 @@ namespace WorldPackets
class SortAccountBankBags;
class SortBags;
class SortBankBags;
- class SortReagentBankBags;
struct ItemInstance;
class RemoveNewItem;
class ChangeBagSlotFlag;
- class ChangeBankBagSlotFlag;
class SetBackpackAutosortDisabled;
class SetBackpackSellJunkDisabled;
class SetBankAutosortDisabled;
@@ -830,14 +827,6 @@ namespace WorldPackets
class MoveSetVehicleRecIdAck;
}
- namespace VoidStorage
- {
- class UnlockVoidStorage;
- class QueryVoidStorage;
- class VoidStorageTransfer;
- class SwapVoidItem;
- }
-
namespace Warden
{
class WardenData;
@@ -1518,11 +1507,9 @@ class TC_GAME_API WorldSession
// Bank
void HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& packet);
void HandleAutoStoreBankItemOpcode(WorldPackets::Bank::AutoStoreBankItem& packet);
- void HandleBuyBankSlotOpcode(WorldPackets::Bank::BuyBankSlot& packet);
- void HandleBuyReagentBankOpcode(WorldPackets::Bank::ReagentBank& reagentBank);
- void HandleAutoBankReagentOpcode(WorldPackets::Bank::AutoBankReagent& autoBankRegent);
- void HandleAutoStoreBankReagentOpcode(WorldPackets::Bank::AutoStoreBankReagent& autoStoreBankReagent);
- void HandleReagentBankDepositOpcode(WorldPackets::Bank::ReagentBank& reagentBank);
+ void HandleBuyBankTab(WorldPackets::Bank::BuyBankTab const& buyBankTab);
+ void HandleUpdateBankTabSettings(WorldPackets::Bank::UpdateBankTabSettings const& updateBankTabSettings);
+ void HandleAutoDepositCharacterBank(WorldPackets::Bank::AutoDepositCharacterBank const& autoDepositCharacterBank);
// Black Market
void HandleBlackMarketOpen(WorldPackets::BlackMarket::BlackMarketOpen& blackMarketOpen);
@@ -1555,7 +1542,6 @@ class TC_GAME_API WorldSession
void HandleWrapItem(WorldPackets::Item::WrapItem& packet);
void HandleUseCritterItem(WorldPackets::Item::UseCritterItem& packet);
void HandleChangeBagSlotFlag(WorldPackets::Item::ChangeBagSlotFlag const& changeBagSlotFlag);
- void HandleChangeBankBagSlotFlag(WorldPackets::Item::ChangeBankBagSlotFlag const& changeBankBagSlotFlag);
void HandleSetBackpackAutosortDisabled(WorldPackets::Item::SetBackpackAutosortDisabled const& setBackpackAutosortDisabled);
void HandleSetBackpackSellJunkDisabled(WorldPackets::Item::SetBackpackSellJunkDisabled const& setBackpackSellJunkDisabled);
void HandleSetBankAutosortDisabled(WorldPackets::Item::SetBankAutosortDisabled const& setBankAutosortDisabled);
@@ -1737,7 +1723,6 @@ class TC_GAME_API WorldSession
void HandleSortAccountBankBags(WorldPackets::Item::SortAccountBankBags& sortBankBags);
void HandleSortBags(WorldPackets::Item::SortBags& sortBags);
void HandleSortBankBags(WorldPackets::Item::SortBankBags& sortBankBags);
- void HandleSortReagentBankBags(WorldPackets::Item::SortReagentBankBags& sortReagentBankBags);
void HandleRemoveNewItem(WorldPackets::Item::RemoveNewItem& removeNewItem);
void HandleCancelTempEnchantmentOpcode(WorldPackets::Item::CancelTempEnchantment& cancelTempEnchantment);
@@ -1794,13 +1779,6 @@ class TC_GAME_API WorldSession
void SendCalendarRaidLockoutRemoved(InstanceLock const* lock);
void HandleSetSavedInstanceExtend(WorldPackets::Calendar::SetSavedInstanceExtend& setSavedInstanceExtend);
- // Void Storage
- void HandleVoidStorageUnlock(WorldPackets::VoidStorage::UnlockVoidStorage& unlockVoidStorage);
- void HandleVoidStorageQuery(WorldPackets::VoidStorage::QueryVoidStorage& queryVoidStorage);
- void HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStorageTransfer& voidStorageTransfer);
- void HandleVoidSwapItem(WorldPackets::VoidStorage::SwapVoidItem& swapVoidItem);
- void SendVoidStorageTransferResult(VoidTransferError result);
-
// Collections
void HandleCollectionItemSetFavorite(WorldPackets::Collections::CollectionItemSetFavorite& collectionItemSetFavorite);
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index e9db7862247..0bd91797019 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -728,6 +728,8 @@ enum AuraType : uint32
SPELL_AURA_641 = 641,
SPELL_AURA_642 = 642,
SPELL_AURA_MOD_RANGED_ATTACK_SPEED_FLAT = 643, // NYI
+ SPELL_AURA_644 = 644,
+ SPELL_AURA_645 = 645,
TOTAL_AURAS
};
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 6d138b02b10..ed0e87ddc8f 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -712,7 +712,9 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNULL, //640
&AuraEffect::HandleNULL, //641
&AuraEffect::HandleNULL, //642
- &AuraEffect::HandleNULL, //642 SPELL_AURA_MOD_RANGED_ATTACK_SPEED_FLAT
+ &AuraEffect::HandleNULL, //643 SPELL_AURA_MOD_RANGED_ATTACK_SPEED_FLAT
+ &AuraEffect::HandleNULL, //644
+ &AuraEffect::HandleNULL, //645
};
AuraEffect::AuraEffect(Aura* base, SpellEffectInfo const& spellEfffectInfo, int32 const* baseAmount, Unit* caster) :
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 07f0bf1c20a..58996ebb379 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -5284,6 +5284,7 @@ void Spell::SendChannelUpdate(uint32 time, Optional<SpellCastResult> result)
unitCaster->ClearChannelObjects();
unitCaster->SetChannelSpellId(0);
unitCaster->SetChannelVisual({});
+ unitCaster->SetChannelSpellData(0, 0);
unitCaster->SetSpellEmpowerStage(-1);
}
@@ -5365,6 +5366,7 @@ void Spell::SendChannelStart(uint32 duration)
unitCaster->SetChannelSpellId(m_spellInfo->Id);
unitCaster->SetChannelVisual(m_SpellVisual);
+ unitCaster->SetChannelSpellData(GameTime::GetGameTimeMS(), duration);
auto setImmunitiesAndHealPrediction = [&](Optional<WorldPackets::Spells::SpellChannelStartInterruptImmunities>& interruptImmunities, Optional<WorldPackets::Spells::SpellTargetedHealPrediction>& healPrediction)
{
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index ef3394e367e..da0fd7be46c 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -430,6 +430,10 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF
&Spell::EffectNULL, //339 SPELL_EFFECT_UI_ACTION
&Spell::EffectNULL, //340 SPELL_EFFECT_340
&Spell::EffectLearnWarbandScene, //341 SPELL_EFFECT_LEARN_WARBAND_SCENE
+ &Spell::EffectNULL, //342 SPELL_EFFECT_342
+ &Spell::EffectNULL, //343 SPELL_EFFECT_343
+ &Spell::EffectNULL, //344 SPELL_EFFECT_344
+ &Spell::EffectNULL, //345 SPELL_EFFECT_ASSIST_ACTION
};
void Spell::EffectNULL()
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 4cfd315baad..3c6d3f6504e 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1256,6 +1256,10 @@ std::array<SpellEffectInfo::StaticData, TOTAL_SPELL_EFFECTS> SpellEffectInfo::_d
{EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 339 SPELL_EFFECT_UI_ACTION
{EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 340 SPELL_EFFECT_340
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 341 SPELL_EFFECT_LEARN_WARBAND_SCENE
+ {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 342 SPELL_EFFECT_342
+ {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 343 SPELL_EFFECT_343
+ {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 344 SPELL_EFFECT_344
+ {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 345 SPELL_EFFECT_ASSIST_ACTION
} };
SpellInfo::SpellInfo(SpellNameEntry const* spellName, ::Difficulty difficulty, SpellInfoLoadHelper const& data)
diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp
index 1bfa3d50fe9..c15833f90d9 100644
--- a/src/server/game/Tools/PlayerDump.cpp
+++ b/src/server/game/Tools/PlayerDump.cpp
@@ -127,7 +127,6 @@ DumpTable const DumpTables[] =
{ "character_spell_cooldown", DTT_CHAR_TABLE },
{ "character_talent", DTT_CHAR_TABLE },
{ "character_transmog_outfits", DTT_CHAR_TRANSMOG },
- /// @todo: character_void_storage
{ "mail", DTT_MAIL },
{ "mail_items", DTT_MAIL_ITEM }, // must be after mail
{ "pet_aura", DTT_PET_TABLE }, // must be after character_pet