aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/Utilities/EnumClassFlag.h2
-rw-r--r--src/server/database/Database/Implementation/LoginDatabase.cpp4
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp18
-rw-r--r--src/server/game/DataStores/DB2Stores.h7
-rw-r--r--src/server/game/DataStores/DBCEnums.h3
-rw-r--r--src/server/game/DungeonFinding/LFG.h2
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp45
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.h7
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h3
-rw-r--r--src/server/game/Entities/Item/Item.cpp5
-rw-r--r--src/server/game/Entities/Object/Object.cpp12
-rw-r--r--src/server/game/Entities/Player/CollectionMgr.cpp44
-rw-r--r--src/server/game/Entities/Player/CollectionMgr.h15
-rw-r--r--src/server/game/Entities/Player/Player.cpp18
-rw-r--r--src/server/game/Entities/Player/Player.h9
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp8
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp65
-rw-r--r--src/server/game/Globals/ObjectMgr.h10
-rw-r--r--src/server/game/Groups/Group.cpp7
-rw-r--r--src/server/game/Guilds/Guild.cpp5
-rw-r--r--src/server/game/Guilds/Guild.h2
-rw-r--r--src/server/game/Handlers/ArenaTeamHandler.cpp73
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp21
-rw-r--r--src/server/game/Handlers/BlackMarketHandler.cpp2
-rw-r--r--src/server/game/Handlers/GuildHandler.cpp3
-rw-r--r--src/server/game/Handlers/HotfixHandler.cpp41
-rw-r--r--src/server/game/Handlers/InspectHandler.cpp58
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp1
-rw-r--r--src/server/game/Handlers/LFGHandler.cpp3
-rw-r--r--src/server/game/Handlers/LootHandler.cpp24
-rw-r--r--src/server/game/Handlers/QueryHandler.cpp3
-rw-r--r--src/server/game/Handlers/ToyHandler.cpp7
-rw-r--r--src/server/game/Quests/QuestDef.cpp21
-rw-r--r--src/server/game/Quests/QuestDef.h2
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.h5
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp16
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h9
-rw-r--r--src/server/game/Server/Packets/ChatPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.cpp3
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.h1
-rw-r--r--src/server/game/Server/Packets/DuelPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.h6
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h3
-rw-r--r--src/server/game/Server/Packets/HotfixPackets.cpp55
-rw-r--r--src/server/game/Server/Packets/HotfixPackets.h24
-rw-r--r--src/server/game/Server/Packets/InspectPackets.cpp81
-rw-r--r--src/server/game/Server/Packets/InspectPackets.h80
-rw-r--r--src/server/game/Server/Packets/InstancePackets.h2
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.cpp14
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.h2
-rw-r--r--src/server/game/Server/Packets/LFGPackets.cpp13
-rw-r--r--src/server/game/Server/Packets/LFGPackets.h3
-rw-r--r--src/server/game/Server/Packets/LootPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/LootPackets.h3
-rw-r--r--src/server/game/Server/Packets/MailPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/MailPackets.h4
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp12
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h3
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h2
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h1
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/PartyPackets.h10
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h3
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp13
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h7
-rw-r--r--src/server/game/Server/Packets/ReputationPackets.h2
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp37
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h31
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h2
-rw-r--r--src/server/game/Server/Packets/TokenPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/TokenPackets.h2
-rw-r--r--src/server/game/Server/Packets/ToyPackets.cpp23
-rw-r--r--src/server/game/Server/Packets/ToyPackets.h10
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp28
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h1281
-rw-r--r--src/server/game/Server/WorldSession.h7
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp2
-rw-r--r--src/server/game/Spells/Spell.cpp9
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp2
-rw-r--r--src/server/shared/Realm/RealmList.cpp62
-rw-r--r--src/server/shared/Realm/RealmList.h1
89 files changed, 1289 insertions, 1183 deletions
diff --git a/src/common/Utilities/EnumClassFlag.h b/src/common/Utilities/EnumClassFlag.h
index d2e2132605b..4d77b4c5930 100644
--- a/src/common/Utilities/EnumClassFlag.h
+++ b/src/common/Utilities/EnumClassFlag.h
@@ -39,7 +39,7 @@ public:
return left &= right;
}
- EnumClassFlag operator|=(EnumClassFlag right)
+ EnumClassFlag& operator|=(EnumClassFlag right)
{
_value = static_cast<T>(static_cast<std::underlying_type_t<T>>(_value) | static_cast<std::underlying_type_t<T>>(right._value));
return *this;
diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp
index c560bfa396e..6c7429d37be 100644
--- a/src/server/database/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/database/Database/Implementation/LoginDatabase.cpp
@@ -151,8 +151,8 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_UPD_LAST_CHAR_UNDELETE, "UPDATE battlenet_accounts SET LastCharacterUndelete = UNIX_TIMESTAMP() WHERE Id = ?", CONNECTION_ASYNC);
// Account wide toys
- PrepareStatement(LOGIN_SEL_ACCOUNT_TOYS, "SELECT itemId, isFavourite FROM battlenet_account_toys WHERE accountId = ?", CONNECTION_ASYNC);
- PrepareStatement(LOGIN_REP_ACCOUNT_TOYS, "REPLACE INTO battlenet_account_toys (accountId, itemId, isFavourite) VALUES (?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_SEL_ACCOUNT_TOYS, "SELECT itemId, isFavourite, hasFanfare FROM battlenet_account_toys WHERE accountId = ?", CONNECTION_ASYNC);
+ PrepareStatement(LOGIN_REP_ACCOUNT_TOYS, "REPLACE INTO battlenet_account_toys (accountId, itemId, isFavourite, hasFanfare) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
// Battle Pets
PrepareStatement(LOGIN_SEL_BATTLE_PETS, "SELECT guid, species, breed, level, exp, health, quality, flags, name FROM battle_pets WHERE battlenetAccountId = ?", CONNECTION_ASYNC);
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index d13400c5494..74e53d79887 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -347,7 +347,8 @@ namespace
};
StorageMap _stores;
- std::map<uint64, int32> _hotfixData;
+ uint32 _hotfixCount = 0;
+ DB2Manager::HotfixContainer _hotfixData;
std::map<std::pair<uint32 /*tableHash*/, int32 /*recordId*/>, std::vector<uint8>> _hotfixBlob;
AreaGroupMemberContainer _areaGroupMembers;
@@ -1302,7 +1303,7 @@ void DB2Manager::LoadHotfixData()
{
Field* fields = result->Fetch();
- uint32 id = fields[0].GetUInt32();
+ int32 id = fields[0].GetInt32();
uint32 tableHash = fields[1].GetUInt32();
int32 recordId = fields[2].GetInt32();
bool deleted = fields[3].GetBool();
@@ -1313,7 +1314,8 @@ void DB2Manager::LoadHotfixData()
}
_maxHotfixId = std::max(_maxHotfixId, id);
- _hotfixData[MAKE_PAIR64(id, tableHash)] = recordId;
+ _hotfixData[id].emplace_back(tableHash, recordId);
+ ++_hotfixCount;
deletedRecords[std::make_pair(tableHash, recordId)] = deleted;
++count;
} while (result->NextRow());
@@ -1359,7 +1361,12 @@ void DB2Manager::LoadHotfixBlob()
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " hotfix blob records in %u ms", _hotfixBlob.size(), GetMSTimeDiffToNow(oldMSTime));
}
-std::map<uint64, int32> const& DB2Manager::GetHotfixData() const
+uint32 DB2Manager::GetHotfixCount() const
+{
+ return _hotfixCount;
+}
+
+DB2Manager::HotfixContainer const& DB2Manager::GetHotfixData() const
{
return _hotfixData;
}
@@ -1371,7 +1378,8 @@ std::vector<uint8> const* DB2Manager::GetHotfixBlobData(uint32 tableHash, int32
void DB2Manager::InsertNewHotfix(uint32 tableHash, uint32 recordId)
{
- _hotfixData[MAKE_PAIR64(tableHash, ++_maxHotfixId)] = recordId;
+ _hotfixData[++_maxHotfixId].emplace_back(tableHash, recordId);
+ ++_hotfixCount;
}
std::vector<uint32> DB2Manager::GetAreasForGroup(uint32 areaGroupId) const
diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h
index 245f8f1f592..2960d4fb185 100644
--- a/src/server/game/DataStores/DB2Stores.h
+++ b/src/server/game/DataStores/DB2Stores.h
@@ -247,6 +247,8 @@ class TC_GAME_API DB2Manager
public:
DEFINE_DB2_SET_COMPARATOR(MountTypeXCapabilityEntry)
+ typedef std::map<int32 /*hotfixId*/, std::vector<std::pair<uint32 /*tableHash*/, int32 /*recordId*/>>> HotfixContainer;
+
typedef std::vector<ItemBonusEntry const*> ItemBonusList;
typedef std::unordered_map<uint32, std::unordered_map<uint32, MapDifficultyEntry const*>> MapDifficultyContainer;
typedef std::set<MountTypeXCapabilityEntry const*, MountTypeXCapabilityEntryComparator> MountTypeXCapabilitySet;
@@ -259,7 +261,8 @@ public:
void LoadHotfixData();
void LoadHotfixBlob();
- std::map<uint64, int32> const& GetHotfixData() const;
+ uint32 GetHotfixCount() const;
+ HotfixContainer const& GetHotfixData() const;
std::vector<uint8> const* GetHotfixBlobData(uint32 tableHash, int32 recordId);
std::vector<uint32> GetAreasForGroup(uint32 areaGroupId) const;
@@ -346,7 +349,7 @@ public:
private:
friend class DB2HotfixGeneratorBase;
void InsertNewHotfix(uint32 tableHash, uint32 recordId);
- uint32 _maxHotfixId = 0;
+ int32 _maxHotfixId = 0;
};
#define sDB2Manager DB2Manager::Instance()
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index e96dbd661bd..312b1d403a7 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -550,7 +550,8 @@ enum CharSectionFlags
{
SECTION_FLAG_PLAYER = 0x01,
SECTION_FLAG_DEATH_KNIGHT = 0x04,
- SECTION_FLAG_DEMON_HUNTER = 0x20
+ SECTION_FLAG_DEMON_HUNTER = 0x20,
+ SECTION_FLAG_CONDITIONAL = 0x400
};
enum CharSectionType
diff --git a/src/server/game/DungeonFinding/LFG.h b/src/server/game/DungeonFinding/LFG.h
index 9acd3324c2f..cc12ac71617 100644
--- a/src/server/game/DungeonFinding/LFG.h
+++ b/src/server/game/DungeonFinding/LFG.h
@@ -99,6 +99,8 @@ enum LfgLockStatusType
LFG_LOCKSTATUS_TOO_LOW_GEAR_SCORE = 4,
LFG_LOCKSTATUS_TOO_HIGH_GEAR_SCORE = 5,
LFG_LOCKSTATUS_RAID_LOCKED = 6,
+ LFG_LOCKSTATUS_NO_SPEC = 14,
+ LFG_LOCKSTATUS_HAS_RESTRICTION = 15,
LFG_LOCKSTATUS_ATTUNEMENT_TOO_LOW_LEVEL = 1001,
LFG_LOCKSTATUS_ATTUNEMENT_TOO_HIGH_LEVEL = 1002,
LFG_LOCKSTATUS_QUEST_NOT_COMPLETED = 1022,
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index bd8f1f81c1c..77c1bef1900 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -422,7 +422,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons)
// Check player or group member restrictions
if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_JOIN_DUNGEON_FINDER))
- joinData.result = LFG_JOIN_NO_SLOTS_PLAYER;
+ joinData.result = LFG_JOIN_NO_SLOTS;
else if (player->InBattleground() || player->InArena() || player->InBattlegroundQueue())
joinData.result = LFG_JOIN_CANT_USE_DUNGEONS;
else if (player->HasAura(LFG_SPELL_DUNGEON_DESERTER))
@@ -430,9 +430,9 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons)
else if (player->HasAura(LFG_SPELL_DUNGEON_COOLDOWN))
joinData.result = LFG_JOIN_RANDOM_COOLDOWN_PLAYER;
else if (dungeons.empty())
- joinData.result = LFG_JOIN_NO_SLOTS_PLAYER;
+ joinData.result = LFG_JOIN_NO_SLOTS;
else if (player->HasAura(9454)) // check Freeze debuff
- joinData.result = LFG_JOIN_NO_SLOTS_PLAYER;
+ joinData.result = LFG_JOIN_NO_SLOTS;
else if (grp)
{
if (grp->GetMembersCount() > MAX_GROUP_SIZE)
@@ -453,7 +453,10 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons)
else if (plrg->InBattleground() || plrg->InArena() || plrg->InBattlegroundQueue())
joinData.result = LFG_JOIN_CANT_USE_DUNGEONS;
else if (plrg->HasAura(9454)) // check Freeze debuff
- joinData.result = LFG_JOIN_PARTY_NOT_MEET_REQS;
+ {
+ joinData.result = LFG_JOIN_NO_SLOTS;
+ joinData.playersMissingRequirement.push_back(&plrg->GetName());
+ }
++memberCount;
players.insert(plrg->GetGUID());
}
@@ -507,9 +510,9 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons)
dungeons = GetDungeonsByRandom(rDungeonId);
// if we have lockmap then there are no compatible dungeons
- GetCompatibleDungeons(dungeons, players, joinData.lockmap, isContinue);
+ GetCompatibleDungeons(&dungeons, players, &joinData.lockmap, &joinData.playersMissingRequirement, isContinue);
if (dungeons.empty())
- joinData.result = grp ? LFG_JOIN_NO_LFG_OBJECT : LFG_JOIN_NO_SLOTS_PLAYER;
+ joinData.result = LFG_JOIN_NO_SLOTS;
}
}
@@ -782,22 +785,23 @@ void LFGMgr::UpdateRoleCheck(ObjectGuid gguid, ObjectGuid guid /* = ObjectGuid::
@param[in] players Set of players to check their dungeon restrictions
@param[out] lockMap Map of players Lock status info of given dungeons (Empty if dungeons is not empty)
*/
-void LFGMgr::GetCompatibleDungeons(LfgDungeonSet& dungeons, GuidSet const& players, LfgLockPartyMap& lockMap, bool isContinue)
+void LFGMgr::GetCompatibleDungeons(LfgDungeonSet* dungeons, GuidSet const& players, LfgLockPartyMap* lockMap, std::vector<std::string const*>* playersMissingRequirement, bool isContinue)
{
- lockMap.clear();
+ lockMap->clear();
std::map<uint32, uint32> lockedDungeons;
+ std::unordered_set<uint32> dungeonsToRemove;
- for (GuidSet::const_iterator it = players.begin(); it != players.end() && !dungeons.empty(); ++it)
+ for (GuidSet::const_iterator it = players.begin(); it != players.end() && !dungeons->empty(); ++it)
{
ObjectGuid guid = (*it);
- LfgLockMap const& cachedLockMap = GetLockedDungeons(guid);
+ LfgLockMap cachedLockMap = GetLockedDungeons(guid);
Player* player = ObjectAccessor::FindConnectedPlayer(guid);
- for (LfgLockMap::const_iterator it2 = cachedLockMap.begin(); it2 != cachedLockMap.end() && !dungeons.empty(); ++it2)
+ for (LfgLockMap::const_iterator it2 = cachedLockMap.begin(); it2 != cachedLockMap.end() && !dungeons->empty(); ++it2)
{
uint32 dungeonId = (it2->first & 0x00FFFFFF); // Compare dungeon ids
- LfgDungeonSet::iterator itDungeon = dungeons.find(dungeonId);
- if (itDungeon != dungeons.end())
+ LfgDungeonSet::iterator itDungeon = dungeons->find(dungeonId);
+ if (itDungeon != dungeons->end())
{
bool eraseDungeon = true;
@@ -822,14 +826,19 @@ void LFGMgr::GetCompatibleDungeons(LfgDungeonSet& dungeons, GuidSet const& playe
}
if (eraseDungeon)
- dungeons.erase(itDungeon);
+ dungeonsToRemove.insert(dungeonId);
- lockMap[guid][dungeonId] = it2->second;
+ (*lockMap)[guid][dungeonId] = it2->second;
+ playersMissingRequirement->push_back(&player->GetName());
}
}
}
- if (!dungeons.empty())
- lockMap.clear();
+
+ for (uint32 dungeonIdToRemove : dungeonsToRemove)
+ dungeons->erase(dungeonIdToRemove);
+
+ if (!dungeons->empty())
+ lockMap->clear();
}
/**
@@ -1601,7 +1610,7 @@ LfgDungeonSet const& LFGMgr::GetSelectedDungeons(ObjectGuid guid)
return PlayersStore[guid].GetSelectedDungeons();
}
-LfgLockMap const LFGMgr::GetLockedDungeons(ObjectGuid guid)
+LfgLockMap LFGMgr::GetLockedDungeons(ObjectGuid guid)
{
TC_LOG_TRACE("lfg.data.player.dungeons.locked.get", "Player: %s, LockedDungeons.", guid.ToString().c_str());
LfgLockMap lock;
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index 8cb332d3e45..0107d9adcfb 100644
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -112,7 +112,7 @@ enum LfgJoinResult
LFG_JOIN_OK = 0x00, // Joined (no client msg)
LFG_JOIN_GROUP_FULL = 0x1F, // Your group is already full.
LFG_JOIN_NO_LFG_OBJECT = 0x21, // Internal LFG Error.
- LFG_JOIN_NO_SLOTS_PLAYER = 0x22, // You do not meet the requirements for the chosen dungeons.
+ LFG_JOIN_NO_SLOTS = 0x22, // You do not meet the requirements for the chosen dungeons.
LFG_JOIN_MISMATCHED_SLOTS = 0x23, // You cannot mix dungeons, raids, and random when picking dungeons.
LFG_JOIN_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 0x24, // The dungeon you chose does not support players from multiple realms.
LFG_JOIN_MEMBERS_NOT_PRESENT = 0x25, // One or more group members are pending invites or disconnected.
@@ -177,6 +177,7 @@ struct LfgJoinResultData
LfgJoinResult result;
LfgRoleCheckState state;
LfgLockPartyMap lockmap;
+ std::vector<std::string const*> playersMissingRequirement;
};
// Data needed by SMSG_LFG_UPDATE_STATUS
@@ -386,7 +387,7 @@ class TC_GAME_API LFGMgr
// LFGHandler
/// Get locked dungeons
- LfgLockMap const GetLockedDungeons(ObjectGuid guid);
+ LfgLockMap GetLockedDungeons(ObjectGuid guid);
/// Returns current lfg status
LfgUpdateData GetLfgStatus(ObjectGuid guid);
/// Checks if Seasonal dungeon is active
@@ -447,7 +448,7 @@ class TC_GAME_API LFGMgr
void SetState(ObjectGuid guid, LfgState state);
void SetVoteKick(ObjectGuid gguid, bool active);
void RemovePlayerData(ObjectGuid guid);
- void GetCompatibleDungeons(LfgDungeonSet& dungeons, GuidSet const& players, LfgLockPartyMap& lockMap, bool isContinue);
+ void GetCompatibleDungeons(LfgDungeonSet* dungeons, GuidSet const& players, LfgLockPartyMap* lockMap, std::vector<std::string const*>* playersMissingRequirement, bool isContinue);
void _SaveToDB(ObjectGuid guid, uint32 db_guid);
LFGDungeonData const* GetLFGDungeon(uint32 id);
diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h
index 36715732e48..01c19a2e8d1 100644
--- a/src/server/game/Entities/Creature/CreatureData.h
+++ b/src/server/game/Entities/Creature/CreatureData.h
@@ -379,6 +379,9 @@ struct TC_GAME_API CreatureTemplate
float ModExperience;
bool RacialLeader;
uint32 movementId;
+ float FadeRegionRadius;
+ int32 WidgetSetID;
+ int32 WidgetSetUnitConditionID;
bool RegenHealth;
uint32 MechanicImmuneMask;
uint32 flags_extra;
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index a157035a06b..af16870c6d5 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1707,11 +1707,8 @@ bool Item::HasStats() const
return false;
}
-bool Item::HasStats(WorldPackets::Item::ItemInstance const& itemInstance, BonusData const* bonus)
+bool Item::HasStats(WorldPackets::Item::ItemInstance const& /*itemInstance*/, BonusData const* bonus)
{
- if (itemInstance.RandomPropertiesID != 0)
- return true;
-
for (uint8 i = 0; i < MAX_ITEM_PROTO_STATS; ++i)
if (bonus->ItemStatAllocation[i] != 0)
return true;
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 392d418a3e7..ca25867df39 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -424,14 +424,14 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const
if (HasFall)
{
- *data << uint32(unit->m_movementInfo.jump.fallTime); // Time
- *data << float(unit->m_movementInfo.jump.zspeed); // JumpVelocity
+ *data << uint32(unit->m_movementInfo.jump.fallTime); // Time
+ *data << float(unit->m_movementInfo.jump.zspeed); // JumpVelocity
if (data->WriteBit(HasFallDirection))
{
- *data << float(unit->m_movementInfo.jump.sinAngle); // Direction
+ *data << float(unit->m_movementInfo.jump.sinAngle); // Direction
*data << float(unit->m_movementInfo.jump.cosAngle);
- *data << float(unit->m_movementInfo.jump.xyspeed); // Speed
+ *data << float(unit->m_movementInfo.jump.xyspeed); // Speed
}
}
@@ -445,7 +445,9 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const
*data << float(unit->GetSpeed(MOVE_TURN_RATE));
*data << float(unit->GetSpeed(MOVE_PITCH_RATE));
- *data << uint32(0); // unit->m_movementInfo.forces.size()
+ *data << uint32(0); // unit->m_movementInfo.forces.size()
+
+ *data << float(1.0f); // MovementForcesModMagnitude
data->WriteBit(HasSpline);
data->FlushBits();
diff --git a/src/server/game/Entities/Player/CollectionMgr.cpp b/src/server/game/Entities/Player/CollectionMgr.cpp
index 8ee265ab53b..8ec7d65551b 100644
--- a/src/server/game/Entities/Player/CollectionMgr.cpp
+++ b/src/server/game/Entities/Player/CollectionMgr.cpp
@@ -70,6 +70,21 @@ void CollectionMgr::LoadMountDefinitions()
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " mount definitions in %u ms", FactionSpecificMounts.size(), GetMSTimeDiffToNow(oldMSTime));
}
+namespace
+{
+ EnumClassFlag<ToyFlags> GetToyFlags(bool isFavourite, bool hasFanfare)
+ {
+ EnumClassFlag<ToyFlags> flags(ToyFlags::None);
+ if (isFavourite)
+ flags |= ToyFlags::Favorite;
+
+ if (hasFanfare)
+ flags |= ToyFlags::HasFanfare;
+
+ return flags;
+ }
+}
+
CollectionMgr::CollectionMgr(WorldSession* owner) : _owner(owner), _appearances(Trinity::make_unique<boost::dynamic_bitset<uint32>>())
{
}
@@ -84,9 +99,9 @@ void CollectionMgr::LoadToys()
_owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS, t.first);
}
-bool CollectionMgr::AddToy(uint32 itemId, bool isFavourite /*= false*/)
+bool CollectionMgr::AddToy(uint32 itemId, bool isFavourite, bool hasFanfare)
{
- if (UpdateAccountToys(itemId, isFavourite))
+ if (UpdateAccountToys(itemId, isFavourite, hasFanfare))
{
_owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS, itemId);
return true;
@@ -104,9 +119,7 @@ void CollectionMgr::LoadAccountToys(PreparedQueryResult result)
{
Field* fields = result->Fetch();
uint32 itemId = fields[0].GetUInt32();
- bool isFavourite = fields[1].GetBool();
-
- _toys[itemId] = isFavourite;
+ _toys[itemId] = GetToyFlags(fields[1].GetBool(), fields[2].GetBool());
} while (result->NextRow());
}
@@ -118,14 +131,15 @@ void CollectionMgr::SaveAccountToys(SQLTransaction& trans)
stmt = LoginDatabase.GetPreparedStatement(LOGIN_REP_ACCOUNT_TOYS);
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
stmt->setUInt32(1, toy.first);
- stmt->setBool(2, toy.second);
+ stmt->setBool(2, toy.second.HasFlag(ToyFlags::Favorite));
+ stmt->setBool(3, toy.second.HasFlag(ToyFlags::HasFanfare));
trans->Append(stmt);
}
}
-bool CollectionMgr::UpdateAccountToys(uint32 itemId, bool isFavourite /*= false*/)
+bool CollectionMgr::UpdateAccountToys(uint32 itemId, bool isFavourite, bool hasFanfare)
{
- return _toys.insert(ToyBoxContainer::value_type(itemId, isFavourite)).second;
+ return _toys.insert(ToyBoxContainer::value_type(itemId, GetToyFlags(isFavourite, hasFanfare))).second;
}
void CollectionMgr::ToySetFavorite(uint32 itemId, bool favorite)
@@ -134,7 +148,19 @@ void CollectionMgr::ToySetFavorite(uint32 itemId, bool favorite)
if (itr == _toys.end())
return;
- itr->second = favorite;
+ if (favorite)
+ itr->second |= ToyFlags::Favorite;
+ else
+ itr->second.RemoveFlag(ToyFlags::Favorite);
+}
+
+void CollectionMgr::ToyClearFanfare(uint32 itemId)
+{
+ auto itr = _toys.find(itemId);
+ if (itr == _toys.end())
+ return;
+
+ itr->second.RemoveFlag(ToyFlags::HasFanfare);
}
void CollectionMgr::OnItemAdded(Item* item)
diff --git a/src/server/game/Entities/Player/CollectionMgr.h b/src/server/game/Entities/Player/CollectionMgr.h
index 5894e32cc77..5f3d054424b 100644
--- a/src/server/game/Entities/Player/CollectionMgr.h
+++ b/src/server/game/Entities/Player/CollectionMgr.h
@@ -20,6 +20,7 @@
#include "Define.h"
#include "DatabaseEnvFwd.h"
+#include "EnumClassFlag.h"
#include "ObjectGuid.h"
#include <boost/dynamic_bitset_fwd.hpp>
#include <map>
@@ -53,7 +54,14 @@ struct HeirloomData
uint32 bonusId;
};
-typedef std::map<uint32, bool> ToyBoxContainer;
+enum class ToyFlags : uint32
+{
+ None = 0,
+ Favorite = 0x01,
+ HasFanfare = 0x02
+};
+
+typedef std::map<uint32, EnumClassFlag<ToyFlags>> ToyBoxContainer;
typedef std::map<uint32, HeirloomData> HeirloomContainer;
enum MountStatusFlags : uint8
@@ -79,9 +87,10 @@ public:
void LoadAccountToys(PreparedQueryResult result);
void SaveAccountToys(SQLTransaction& trans);
void ToySetFavorite(uint32 itemId, bool favorite);
+ void ToyClearFanfare(uint32 itemId);
- bool AddToy(uint32 itemId, bool isFavourite /*= false*/);
- bool UpdateAccountToys(uint32 itemId, bool isFavourite /*= false*/);
+ bool AddToy(uint32 itemId, bool isFavourite, bool hasFanfare);
+ bool UpdateAccountToys(uint32 itemId, bool isFavourite, bool hasFanfare);
bool HasToy(uint32 itemId) const { return _toys.count(itemId) > 0; }
ToyBoxContainer const& GetAccountToys() const { return _toys; }
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 0e0592eb3b2..3e92e1f2a5c 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -92,7 +92,7 @@
#include "QuestDef.h"
#include "QuestObjectiveCriteriaMgr.h"
#include "QuestPackets.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "ReputationMgr.h"
#include "RestMgr.h"
#include "Scenario.h"
@@ -2766,7 +2766,7 @@ void Player::SendMailResult(uint32 mailId, MailResponseType mailAction, MailResp
void Player::SendNewMail() const
{
// deliver undelivered mail
- WorldPackets::Mail::NotifyRecievedMail notify;
+ WorldPackets::Mail::NotifyReceivedMail notify;
notify.Delay = 0.0f;
GetSession()->SendPacket(notify.Write());
@@ -6765,6 +6765,7 @@ void Player::ModifyCurrency(uint32 id, int32 count, bool printLog/* = true*/, bo
packet.WeeklyQuantity = newWeekCount;
packet.TrackedQuantity = newTrackedCount;
packet.Flags = itr->second.Flags;
+ packet.QuantityChange = count;
GetSession()->SendPacket(packet.Write());
}
@@ -8224,7 +8225,7 @@ void Player::RemoveAELootedObject(ObjectGuid const& lootObjectGuid)
bool Player::HasLootWorldObjectGUID(ObjectGuid const& lootWorldObjectGuid) const
{
- return m_AELootView.end() != std::find_if(m_AELootView.begin(), m_AELootView.end(), [&lootWorldObjectGuid](std::pair<ObjectGuid, ObjectGuid> const& lootView)
+ return m_AELootView.end() != std::find_if(m_AELootView.begin(), m_AELootView.end(), [&lootWorldObjectGuid](std::pair<ObjectGuid const, ObjectGuid> const& lootView)
{
return lootView.second == lootWorldObjectGuid;
});
@@ -20067,7 +20068,7 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setUInt8(index++, GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES));
stmt->setUInt32(index++, m_grantableLevels);
- stmt->setUInt32(index++, realm.Build);
+ stmt->setUInt32(index++, sRealmList->GetMinorMajorBugfixVersionForBuild(realm.Build));
}
else
{
@@ -27586,6 +27587,7 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId)
displayPlayerChoice.SenderGUID = sender;
displayPlayerChoice.ChoiceID = choiceId;
displayPlayerChoice.UiTextureKitID = playerChoice->UiTextureKitId;
+ displayPlayerChoice.SoundKitID = playerChoice->SoundKitId;
displayPlayerChoice.Question = playerChoice->Question;
if (playerChoiceLocale)
ObjectMgr::GetLocaleString(playerChoiceLocale->Question, locale, displayPlayerChoice.Question);
@@ -27603,9 +27605,13 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId)
playerChoiceResponse.ChoiceArtFileID = playerChoiceResponseTemplate.ChoiceArtFileId;
playerChoiceResponse.Flags = playerChoiceResponseTemplate.Flags;
playerChoiceResponse.WidgetSetID = playerChoiceResponseTemplate.WidgetSetID;
+ playerChoiceResponse.UiTextureAtlasElementID = playerChoiceResponseTemplate.UiTextureAtlasElementID;
+ playerChoiceResponse.SoundKitID = playerChoiceResponseTemplate.SoundKitID;
playerChoiceResponse.GroupID = playerChoiceResponseTemplate.GroupID;
playerChoiceResponse.Answer = playerChoiceResponseTemplate.Answer;
playerChoiceResponse.Header = playerChoiceResponseTemplate.Header;
+ playerChoiceResponse.SubHeader = playerChoiceResponseTemplate.SubHeader;
+ playerChoiceResponse.ButtonTooltip = playerChoiceResponseTemplate.ButtonTooltip;
playerChoiceResponse.Description = playerChoiceResponseTemplate.Description;
playerChoiceResponse.Confirmation = playerChoiceResponseTemplate.Confirmation;
if (playerChoiceLocale)
@@ -27614,6 +27620,8 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId)
{
ObjectMgr::GetLocaleString(playerChoiceResponseLocale->Answer, locale, playerChoiceResponse.Answer);
ObjectMgr::GetLocaleString(playerChoiceResponseLocale->Header, locale, playerChoiceResponse.Header);
+ ObjectMgr::GetLocaleString(playerChoiceResponseLocale->SubHeader, locale, playerChoiceResponse.SubHeader);
+ ObjectMgr::GetLocaleString(playerChoiceResponseLocale->ButtonTooltip, locale, playerChoiceResponse.ButtonTooltip);
ObjectMgr::GetLocaleString(playerChoiceResponseLocale->Description, locale, playerChoiceResponse.Description);
ObjectMgr::GetLocaleString(playerChoiceResponseLocale->Confirmation, locale, playerChoiceResponse.Confirmation);
}
@@ -27657,6 +27665,8 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId)
rewardEntry.Quantity = faction.Quantity;
}
}
+
+ playerChoiceResponse.RewardQuestID = playerChoiceResponseTemplate.RewardQuestID;
}
SendDirectMessage(displayPlayerChoice.Write());
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index b2c46670849..c9bc2b7d020 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1029,15 +1029,6 @@ private:
SpecializationInfo& operator=(SpecializationInfo const&) = delete;
};
-#pragma pack(push, 1)
-struct PlayerDynamicFieldSpellModByLabel
-{
- uint32 Mod;
- float Value;
- uint32 Label;
-};
-#pragma pack(pop)
-
uint32 constexpr PLAYER_MAX_HONOR_LEVEL = 500;
uint8 constexpr PLAYER_LEVEL_MIN_HONOR = 110;
uint32 constexpr SPELL_PVP_RULES_ENABLED = 134735;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index c5d40871d7d..7835d0e002a 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -11901,7 +11901,7 @@ void Unit::SendPlayOrphanSpellVisual(ObjectGuid const& target, uint32 spellVisua
playOrphanSpellVisual.SpellVisualID = spellVisualId;
playOrphanSpellVisual.TravelSpeed = travelSpeed;
playOrphanSpellVisual.SpeedAsTime = speedAsTime;
- playOrphanSpellVisual.UnkZero = 0.0f;
+ playOrphanSpellVisual.LaunchDelay = 0.0f;
SendMessageToSet(playOrphanSpellVisual.Write(), true);
}
@@ -11915,7 +11915,7 @@ void Unit::SendPlayOrphanSpellVisual(Position const& targetLocation, uint32 spel
playOrphanSpellVisual.SpellVisualID = spellVisualId;
playOrphanSpellVisual.TravelSpeed = travelSpeed;
playOrphanSpellVisual.SpeedAsTime = speedAsTime;
- playOrphanSpellVisual.UnkZero = 0.0f;
+ playOrphanSpellVisual.LaunchDelay = 0.0f;
SendMessageToSet(playOrphanSpellVisual.Write(), true);
}
@@ -11940,12 +11940,12 @@ void Unit::SendPlaySpellVisual(ObjectGuid const& targetGuid, uint32 spellVisualI
SendMessageToSet(playSpellVisual.Write(), true);
}
-void Unit::SendPlaySpellVisual(Position const& targetPosition, float o, uint32 spellVisualId, uint16 missReason, uint16 reflectStatus, float travelSpeed, bool speedAsTime /*= false*/)
+void Unit::SendPlaySpellVisual(Position const& targetPosition, float launchDelay, uint32 spellVisualId, uint16 missReason, uint16 reflectStatus, float travelSpeed, bool speedAsTime /*= false*/)
{
WorldPackets::Spells::PlaySpellVisual playSpellVisual;
playSpellVisual.Source = GetGUID();
playSpellVisual.TargetPosition = targetPosition; // exclusive with Target
- playSpellVisual.Orientation = o;
+ playSpellVisual.LaunchDelay = launchDelay;
playSpellVisual.SpellVisualID = spellVisualId;
playSpellVisual.TravelSpeed = travelSpeed;
playSpellVisual.MissReason = missReason;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 8ad7d0b14ae..624b42737e1 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -426,8 +426,10 @@ void ObjectMgr::LoadCreatureTemplates()
"spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, VehicleId, mingold, maxgold, AIName, MovementType, "
// 60 61 62 63 64 65 66 67 68
"InhabitType, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, "
- // 69 70 71 72 73 74
- "RacialLeader, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template");
+ // 69 70 71 72 73 74 75 76
+ "RacialLeader, movementId, FadeRegionRadius, WidgetSetID, WidgetSetUnitConditionID, RegenHealth, mechanic_immune_mask, flags_extra, "
+ // 77
+ "ScriptName FROM creature_template");
if (!result)
{
@@ -525,10 +527,13 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields)
creatureTemplate.ModExperience = fields[68].GetFloat();
creatureTemplate.RacialLeader = fields[69].GetBool();
creatureTemplate.movementId = fields[70].GetUInt32();
- creatureTemplate.RegenHealth = fields[71].GetBool();
- creatureTemplate.MechanicImmuneMask = fields[72].GetUInt32();
- creatureTemplate.flags_extra = fields[73].GetUInt32();
- creatureTemplate.ScriptID = GetScriptId(fields[74].GetString());
+ creatureTemplate.FadeRegionRadius = fields[71].GetFloat();
+ creatureTemplate.WidgetSetID = fields[72].GetInt32();
+ creatureTemplate.WidgetSetUnitConditionID = fields[73].GetInt32();
+ creatureTemplate.RegenHealth = fields[74].GetBool();
+ creatureTemplate.MechanicImmuneMask = fields[75].GetUInt32();
+ creatureTemplate.flags_extra = fields[76].GetUInt32();
+ creatureTemplate.ScriptID = GetScriptId(fields[77].GetString());
}
void ObjectMgr::LoadCreatureTemplateModels()
@@ -3963,9 +3968,9 @@ void ObjectMgr::LoadQuests()
"RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, "
//96 97 98 99 100 101 102 103
"RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, "
- //104 105 106 107 108 109 110
- "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, "
- //111 112 113 114 115 116 117 118 119
+ //104 105 106 107 108 109 110 111
+ "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, "
+ //112 113 114 115 116 117 118 119 120
"LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog"
" FROM quest_template");
if (!result)
@@ -10101,7 +10106,7 @@ void ObjectMgr::LoadPlayerChoices()
uint32 oldMSTime = getMSTime();
_playerChoices.clear();
- QueryResult choices = WorldDatabase.Query("SELECT ChoiceId, UiTextureKitId, Question, HideWarboardHeader, KeepOpenAfterChoice FROM playerchoice");
+ QueryResult choices = WorldDatabase.Query("SELECT ChoiceId, UiTextureKitId, SoundKitId, Question, HideWarboardHeader, KeepOpenAfterChoice FROM playerchoice");
if (!choices)
{
@@ -10124,13 +10129,14 @@ void ObjectMgr::LoadPlayerChoices()
PlayerChoice& choice = _playerChoices[choiceId];
choice.ChoiceId = choiceId;
choice.UiTextureKitId = fields[1].GetInt32();
- choice.Question = fields[2].GetString();
- choice.HideWarboardHeader = fields[3].GetBool();
- choice.KeepOpenAfterChoice = fields[4].GetBool();
+ choice.SoundKitId = fields[2].GetUInt32();
+ choice.Question = fields[3].GetString();
+ choice.HideWarboardHeader = fields[4].GetBool();
+ choice.KeepOpenAfterChoice = fields[5].GetBool();
} while (choices->NextRow());
- if (QueryResult responses = WorldDatabase.Query("SELECT ChoiceId, ResponseId, ChoiceArtFileId, Flags, WidgetSetID, GroupID, Header, Answer, Description, Confirmation FROM playerchoice_response ORDER BY `Index` ASC"))
+ if (QueryResult responses = WorldDatabase.Query("SELECT ChoiceId, ResponseId, ChoiceArtFileId, Flags, WidgetSetID, UiTextureAtlasElementID, SoundKitID, GroupID, Answer, Header, SubHeader, ButtonTemplate, Description, Confirmation, RewardQuestID FROM playerchoice_response ORDER BY `Index` ASC"))
{
do
{
@@ -10153,11 +10159,18 @@ void ObjectMgr::LoadPlayerChoices()
response.ChoiceArtFileId = fields[2].GetInt32();
response.Flags = fields[3].GetInt32();
response.WidgetSetID = fields[4].GetUInt32();
- response.GroupID = fields[5].GetUInt8();
- response.Header = fields[6].GetString();
- response.Answer = fields[7].GetString();
- response.Description = fields[8].GetString();
- response.Confirmation = fields[9].GetString();
+ response.UiTextureAtlasElementID = fields[5].GetUInt32();
+ response.SoundKitID = fields[6].GetUInt32();
+ response.GroupID = fields[7].GetUInt8();
+ response.Answer = fields[8].GetString();
+ response.Header = fields[9].GetString();
+ response.SubHeader = fields[10].GetString();
+ response.ButtonTooltip = fields[11].GetString();
+ response.Description = fields[12].GetString();
+ response.Confirmation = fields[13].GetString();
+ if (!fields[14].IsNull())
+ response.RewardQuestID = fields[14].GetUInt32();
+
++responseCount;
} while (responses->NextRow());
@@ -10404,8 +10417,8 @@ void ObjectMgr::LoadPlayerChoicesLocale()
oldMSTime = getMSTime();
- // 0 1 2 3 4 5 6
- if (QueryResult result = WorldDatabase.Query("SELECT ChoiceID, ResponseID, locale, Header, Answer, Description, Confirmation FROM playerchoice_response_locale"))
+ // 0 1 2 3 4 5 6 7 8
+ if (QueryResult result = WorldDatabase.Query("SELECT ChoiceID, ResponseID, locale, Answer, Header, SubHeader, ButtonTooltip, Description, Confirmation FROM playerchoice_response_locale"))
{
std::size_t count = 0;
do
@@ -10437,10 +10450,12 @@ void ObjectMgr::LoadPlayerChoicesLocale()
continue;
PlayerChoiceResponseLocale& data = itr->second.Responses[responseId];
- AddLocaleString(fields[3].GetString(), locale, data.Header);
- AddLocaleString(fields[4].GetString(), locale, data.Answer);
- AddLocaleString(fields[5].GetString(), locale, data.Description);
- AddLocaleString(fields[6].GetString(), locale, data.Confirmation);
+ AddLocaleString(fields[3].GetString(), locale, data.Answer);
+ AddLocaleString(fields[4].GetString(), locale, data.Header);
+ AddLocaleString(fields[5].GetString(), locale, data.SubHeader);
+ AddLocaleString(fields[6].GetString(), locale, data.ButtonTooltip);
+ AddLocaleString(fields[7].GetString(), locale, data.Description);
+ AddLocaleString(fields[8].GetString(), locale, data.Confirmation);
++count;
} while (result->NextRow());
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index fb195e123b6..0aa19c37287 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -520,6 +520,8 @@ struct PlayerChoiceResponseLocale
{
std::vector<std::string> Answer;
std::vector<std::string> Header;
+ std::vector<std::string> SubHeader;
+ std::vector<std::string> ButtonTooltip;
std::vector<std::string> Description;
std::vector<std::string> Confirmation;
};
@@ -795,18 +797,24 @@ struct PlayerChoiceResponse
int32 ChoiceArtFileId;
int32 Flags;
uint32 WidgetSetID;
+ uint32 UiTextureAtlasElementID = 0;
+ uint32 SoundKitID = 0;
uint8 GroupID;
- std::string Header;
std::string Answer;
+ std::string Header;
+ std::string SubHeader;
+ std::string ButtonTooltip;
std::string Description;
std::string Confirmation;
Optional<PlayerChoiceResponseReward> Reward;
+ Optional<uint32> RewardQuestID;
};
struct PlayerChoice
{
int32 ChoiceId;
int32 UiTextureKitId;
+ uint32 SoundKitId;
std::string Question;
std::vector<PlayerChoiceResponse> Responses;
bool HideWarboardHeader;
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 8871d179a6c..c0b5d775642 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -585,13 +585,8 @@ bool Group::RemoveMember(ObjectGuid guid, const RemoveMethod& method /*= GROUP_R
player->SetPartyType(m_groupCategory, GROUP_TYPE_NONE);
- WorldPacket data;
-
if (method == GROUP_REMOVEMETHOD_KICK || method == GROUP_REMOVEMETHOD_KICK_LFG)
- {
- data.Initialize(SMSG_GROUP_UNINVITE, 0);
- player->GetSession()->SendPacket(&data);
- }
+ player->SendDirectMessage(WorldPackets::Party::GroupUninvite().Write());
_homebindIfInstance(player);
}
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index c8f95d6f242..6de90abd781 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -1355,10 +1355,11 @@ void Guild::HandleRoster(WorldSession* session)
session->SendPacket(roster.Write());
}
-void Guild::SendQueryResponse(WorldSession* session)
+void Guild::SendQueryResponse(WorldSession* session, ObjectGuid const& playerGuid)
{
WorldPackets::Guild::QueryGuildInfoResponse response;
response.GuildGuid = GetGUID();
+ response.PlayerGuid = playerGuid;
response.Info = boost::in_place();
response.Info->GuildGUID = GetGUID();
@@ -1507,7 +1508,7 @@ void Guild::HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo)
SendSaveEmblemResult(session, ERR_GUILDEMBLEM_SUCCESS); // "Guild Emblem saved."
- SendQueryResponse(session);
+ SendQueryResponse(session, ObjectGuid::Empty);
}
}
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index b39d258b438..d29f24785a5 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -754,7 +754,7 @@ class TC_GAME_API Guild
// Handle client commands
void HandleRoster(WorldSession* session);
- void SendQueryResponse(WorldSession* session);
+ void SendQueryResponse(WorldSession* session, ObjectGuid const& playerGuid);
void HandleSetAchievementTracking(WorldSession* session, std::set<uint32> const& achievementIds);
void HandleGetAchievementMembers(WorldSession* session, uint32 achievementId) const;
void HandleSetMOTD(WorldSession* session, std::string const& motd);
diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp
deleted file mode 100644
index 81daf20c389..00000000000
--- a/src/server/game/Handlers/ArenaTeamHandler.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/>
- * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
- *
- * 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 "Player.h"
-#include "WorldPacket.h"
-#include "WorldSession.h"
-#include "Opcodes.h"
-
-void WorldSession::SendNotInArenaTeamPacket(uint8 type)
-{
- WorldPacket data(SMSG_ARENA_ERROR, 4+1);
- uint32 error = 0;
- data << uint32(error); // 0 = ERR_ARENA_NO_TEAM_II, 1 = ERR_ARENA_EXPIRED_CAIS, 2 = ERR_LFG_CANT_USE_BATTLEGROUND
- if (!error)
- data << uint8(type); // team type (2=2v2, 3=3v3, 5=5v5), can be used for custom types...
- SendPacket(&data);
-}
-
-/*
-+ERR_ARENA_NO_TEAM_II "You are not in a %dv%d arena team"
-
-+ERR_ARENA_TEAM_CREATE_S "%s created. To disband, use /teamdisband [2v2, 3v3, 5v5]."
-+ERR_ARENA_TEAM_INVITE_SS "You have invited %s to join %s"
-+ERR_ARENA_TEAM_QUIT_S "You are no longer a member of %s"
-ERR_ARENA_TEAM_FOUNDER_S "Congratulations, you are a founding member of %s! To leave, use /teamquit [2v2, 3v3, 5v5]."
-
-+ERR_ARENA_TEAM_INTERNAL "Internal arena team error"
-+ERR_ALREADY_IN_ARENA_TEAM "You are already in an arena team of that size"
-+ERR_ALREADY_IN_ARENA_TEAM_S "%s is already in an arena team of that size"
-+ERR_INVITED_TO_ARENA_TEAM "You have already been invited into an arena team"
-+ERR_ALREADY_INVITED_TO_ARENA_TEAM_S "%s has already been invited to an arena team"
-+ERR_ARENA_TEAM_NAME_INVALID "That name contains invalid characters, please enter a new name"
-+ERR_ARENA_TEAM_NAME_EXISTS_S "There is already an arena team named \"%s\""
-+ERR_ARENA_TEAM_LEADER_LEAVE_S "You must promote a new team captain using /teamcaptain before leaving the team"
-+ERR_ARENA_TEAM_PERMISSIONS "You don't have permission to do that"
-+ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM "You are not in an arena team of that size"
-+ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM_SS "%s is not in %s"
-+ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S "\"%s\" not found"
-+ERR_ARENA_TEAM_NOT_ALLIED "You cannot invite players from the opposing alliance"
-
-+ERR_ARENA_TEAM_JOIN_SS "%s has joined %s"
-+ERR_ARENA_TEAM_YOU_JOIN_S "You have joined %s. To leave, use /teamquit [2v2, 3v3, 5v5]."
-
-+ERR_ARENA_TEAM_LEAVE_SS "%s has left %s"
-
-+ERR_ARENA_TEAM_LEADER_IS_SS "%s is the captain of %s"
-+ERR_ARENA_TEAM_LEADER_CHANGED_SSS "%s has made %s the new captain of %s"
-
-+ERR_ARENA_TEAM_REMOVE_SSS "%s has been kicked out of %s by %s"
-
-+ERR_ARENA_TEAM_DISBANDED_S "%s has disbanded %s"
-
-ERR_ARENA_TEAM_TARGET_TOO_LOW_S "%s is not high enough level to join your team"
-
-ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S "%s is full"
-
-ERR_ARENA_TEAM_LEVEL_TOO_LOW_I "You must be level %d to form an arena team"
-*/
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index d5e5bb4eb11..5388940936e 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -64,8 +64,13 @@ void WorldSession::HandleBattlemasterHelloOpcode(WorldPackets::NPC::Hello& hello
void WorldSession::HandleBattlemasterJoinOpcode(WorldPackets::Battleground::BattlemasterJoin& battlemasterJoin)
{
bool isPremade = false;
- Group* grp = NULL;
- uint32 bgTypeId_ = battlemasterJoin.QueueID & 0xFFFF;
+ if (battlemasterJoin.QueueIDs.empty())
+ {
+ TC_LOG_ERROR("network", "Battleground: no bgtype received. possible cheater? %s", _player->GetGUID().ToString().c_str());
+ return;
+ }
+
+ uint32 bgTypeId_ = battlemasterJoin.QueueIDs[0] & 0xFFFF;
if (!sBattlemasterListStore.LookupEntry(bgTypeId_))
{
TC_LOG_ERROR("network", "Battleground: invalid bgtype (%u) received. possible cheater? %s", bgTypeId_, _player->GetGUID().ToString().c_str());
@@ -100,8 +105,10 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPackets::Battleground::Batt
GroupJoinBattlegroundResult err = ERR_BATTLEGROUND_NONE;
+ Group* grp = _player->GetGroup();
+
// check queue conditions
- if (!battlemasterJoin.JoinAsGroup)
+ if (!grp)
{
if (GetPlayer()->isUsingLfg())
{
@@ -171,11 +178,6 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPackets::Battleground::Batt
}
else
{
- grp = _player->GetGroup();
-
- if (!grp)
- return;
-
if (grp->GetLeaderGUID() != _player->GetGUID())
return;
@@ -525,10 +527,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPackets::Battleground::Battl
// check real arenateam existence only here (if it was moved to group->CanJoin .. () then we would ahve to get it twice)
ArenaTeam* at = sArenaTeamMgr->GetArenaTeamById(ateamId);
if (!at)
- {
- _player->GetSession()->SendNotInArenaTeamPacket(arenatype);
return;
- }
// get the team rating for queuing
uint32 arenaRating = at->GetRating();
diff --git a/src/server/game/Handlers/BlackMarketHandler.cpp b/src/server/game/Handlers/BlackMarketHandler.cpp
index dd539e96ff5..a750125927f 100644
--- a/src/server/game/Handlers/BlackMarketHandler.cpp
+++ b/src/server/game/Handlers/BlackMarketHandler.cpp
@@ -153,7 +153,7 @@ void WorldSession::SendBlackMarketOutbidNotification(BlackMarketTemplate const*
packet.MarketID = templ->MarketID;
packet.Item = templ->Item;
- packet.RandomPropertiesID = templ->Item.RandomPropertiesID;
+ packet.RandomPropertiesID = 0;
SendPacket(packet.Write());
}
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp
index 4f8e630b53b..31221a9207d 100644
--- a/src/server/game/Handlers/GuildHandler.cpp
+++ b/src/server/game/Handlers/GuildHandler.cpp
@@ -37,12 +37,13 @@ void WorldSession::HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& q
if (Guild* guild = sGuildMgr->GetGuildByGuid(query.GuildGuid))
if (guild->IsMember(query.PlayerGuid))
{
- guild->SendQueryResponse(this);
+ guild->SendQueryResponse(this, query.PlayerGuid);
return;
}
WorldPackets::Guild::QueryGuildInfoResponse response;
response.GuildGuid = query.GuildGuid;
+ response.PlayerGuid = query.PlayerGuid;
SendPacket(response.Write());
TC_LOG_DEBUG("guild", "SMSG_GUILD_QUERY_RESPONSE [%s]", GetPlayerInfo().c_str());
diff --git a/src/server/game/Handlers/HotfixHandler.cpp b/src/server/game/Handlers/HotfixHandler.cpp
index 0ed74be8023..b58b7bedbe1 100644
--- a/src/server/game/Handlers/HotfixHandler.cpp
+++ b/src/server/game/Handlers/HotfixHandler.cpp
@@ -56,35 +56,38 @@ void WorldSession::HandleDBQueryBulk(WorldPackets::Hotfix::DBQueryBulk& dbQuery)
void WorldSession::SendAvailableHotfixes(int32 version)
{
- SendPacket(WorldPackets::Hotfix::AvailableHotfixes(version, sDB2Manager.GetHotfixData()).Write());
+ SendPacket(WorldPackets::Hotfix::AvailableHotfixes(version, sDB2Manager.GetHotfixCount(), sDB2Manager.GetHotfixData()).Write());
}
void WorldSession::HandleHotfixRequest(WorldPackets::Hotfix::HotfixRequest& hotfixQuery)
{
- std::map<uint64, int32> const& hotfixes = sDB2Manager.GetHotfixData();
+ DB2Manager::HotfixContainer const& hotfixes = sDB2Manager.GetHotfixData();
WorldPackets::Hotfix::HotfixResponse hotfixQueryResponse;
hotfixQueryResponse.Hotfixes.reserve(hotfixQuery.Hotfixes.size());
- for (uint64 hotfixId : hotfixQuery.Hotfixes)
+ for (WorldPackets::Hotfix::HotfixRecord const& hotfixRecord : hotfixQuery.Hotfixes)
{
- if (int32 const* hotfix = Trinity::Containers::MapGetValuePtr(hotfixes, hotfixId))
+ if (auto const* hotfixedRecords = Trinity::Containers::MapGetValuePtr(hotfixes, hotfixRecord.HotfixID))
{
- DB2StorageBase const* storage = sDB2Manager.GetStorage(PAIR64_HIPART(hotfixId));
-
- WorldPackets::Hotfix::HotfixResponse::HotfixData hotfixData;
- hotfixData.ID = hotfixId;
- hotfixData.RecordID = *hotfix;
- if (storage && storage->HasRecord(hotfixData.RecordID))
- {
- hotfixData.Data = boost::in_place();
- storage->WriteRecord(hotfixData.RecordID, GetSessionDbcLocale(), *hotfixData.Data);
- }
- else if (std::vector<uint8> const* blobData = sDB2Manager.GetHotfixBlobData(PAIR64_HIPART(hotfixId), *hotfix))
+ for (auto const& tableRecord : *hotfixedRecords)
{
- hotfixData.Data = boost::in_place();
- hotfixData.Data->append(blobData->data(), blobData->size());
- }
+ DB2StorageBase const* storage = sDB2Manager.GetStorage(hotfixRecord.TableHash);
+
+ WorldPackets::Hotfix::HotfixResponse::HotfixData hotfixData;
+ hotfixData.Record = hotfixRecord;
+ if (storage && storage->HasRecord(hotfixData.Record.RecordID))
+ {
+ std::size_t pos = hotfixQueryResponse.HotfixContent.size();
+ storage->WriteRecord(hotfixData.Record.RecordID, GetSessionDbcLocale(), hotfixQueryResponse.HotfixContent);
+ hotfixData.Size = hotfixQueryResponse.HotfixContent.size() - pos;
+ }
+ else if (std::vector<uint8> const* blobData = sDB2Manager.GetHotfixBlobData(hotfixData.Record.TableHash, hotfixData.Record.RecordID))
+ {
+ hotfixData.Size = blobData->size();
+ hotfixQueryResponse.HotfixContent.append(blobData->data(), blobData->size());
+ }
- hotfixQueryResponse.Hotfixes.emplace_back(std::move(hotfixData));
+ hotfixQueryResponse.Hotfixes.emplace_back(std::move(hotfixData));
+ }
}
}
diff --git a/src/server/game/Handlers/InspectHandler.cpp b/src/server/game/Handlers/InspectHandler.cpp
index f659b35db34..5641db4e5c2 100644
--- a/src/server/game/Handlers/InspectHandler.cpp
+++ b/src/server/game/Handlers/InspectHandler.cpp
@@ -78,63 +78,15 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect)
inspectResult.InspecteeGUID = inspect.Target;
inspectResult.SpecializationID = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID);
+ inspectResult.LifetimeMaxRank = player->GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_LIFETIME_MAX_PVP_RANK);
+ inspectResult.TodayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS);
+ inspectResult.YesterdayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS);
+ inspectResult.LifetimeHK = player->GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS);
+ inspectResult.HonorLevel = player->GetUInt32Value(PLAYER_FIELD_HONOR_LEVEL);
SendPacket(inspectResult.Write());
}
-void WorldSession::HandleRequestHonorStatsOpcode(WorldPackets::Inspect::RequestHonorStats& request)
-{
- Player* player = ObjectAccessor::FindPlayer(request.TargetGUID);
- if (!player)
- {
- TC_LOG_DEBUG("network", "WorldSession::HandleRequestHonorStatsOpcode: Target %s not found.", request.TargetGUID.ToString().c_str());
- return;
- }
-
- TC_LOG_DEBUG("network", "WorldSession::HandleRequestHonorStatsOpcode: Target %s.", request.TargetGUID.ToString().c_str());
-
- if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false))
- return;
-
- if (GetPlayer()->IsValidAttackTarget(player))
- return;
-
- WorldPackets::Inspect::InspectHonorStats honorStats;
- honorStats.PlayerGUID = request.TargetGUID;
- honorStats.LifetimeHK = player->GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS);
- honorStats.YesterdayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS);
- honorStats.TodayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS);
- honorStats.LifetimeMaxRank = 0; /// @todo
-
- SendPacket(honorStats.Write());
-}
-
-void WorldSession::HandleInspectPVP(WorldPackets::Inspect::InspectPVPRequest& request)
-{
- /// @todo: deal with request.InspectRealmAddress
-
- Player* player = ObjectAccessor::FindPlayer(request.InspectTarget);
- if (!player)
- {
- TC_LOG_DEBUG("network", "WorldSession::HandleInspectPVP: Target %s not found.", request.InspectTarget.ToString().c_str());
- return;
- }
-
- TC_LOG_DEBUG("network", "WorldSession::HandleInspectPVP: Target %s, InspectRealmAddress %u.", request.InspectTarget.ToString().c_str(), request.InspectRealmAddress);
-
- if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false))
- return;
-
- if (GetPlayer()->IsValidAttackTarget(player))
- return;
-
- WorldPackets::Inspect::InspectPVPResponse response;
- response.ClientGUID = request.InspectTarget;
- /// @todo: fill brackets
-
- SendPacket(response.Write());
-}
-
void WorldSession::HandleQueryInspectAchievements(WorldPackets::Inspect::QueryInspectAchievements& inspect)
{
Player* player = ObjectAccessor::FindPlayer(inspect.Guid);
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 2a557e18874..8ba5dc93333 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -666,6 +666,7 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid)
item.StackCount = itemTemplate->GetBuyCount();
item.Price = price;
item.DoNotFilterOnVendor = vendorItem->IgnoreFiltering;
+ item.Refundable = itemTemplate->GetFlags() & ITEM_FLAG_ITEM_PURCHASE_RECORD && vendorItem->ExtendedCost && itemTemplate->GetMaxStackSize() == 1;
item.Item.ItemID = vendorItem->item;
if (!vendorItem->BonusListIDs.empty())
diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp
index 82fe040ea68..2074d150dc3 100644
--- a/src/server/game/Handlers/LFGHandler.cpp
+++ b/src/server/game/Handlers/LFGHandler.cpp
@@ -308,7 +308,6 @@ void WorldSession::SendLfgRoleCheckUpdate(lfg::LfgRoleCheck const& roleCheck)
{
return sLFGMgr->GetLFGDungeonEntry(dungeonId);
});
- lfgRoleCheckUpdate.BgQueueID = 0;
lfgRoleCheckUpdate.GroupFinderActivityID = 0;
if (!roleCheck.roles.empty())
{
@@ -340,6 +339,8 @@ void WorldSession::SendLfgJoinResult(lfg::LfgJoinResultData const& joinData)
lfgJoinResult.Result = joinData.result;
if (joinData.result == lfg::LFG_JOIN_ROLE_CHECK_FAILED)
lfgJoinResult.ResultDetail = joinData.state;
+ else if (joinData.result == lfg::LFG_JOIN_NO_SLOTS)
+ lfgJoinResult.BlackListNames = joinData.playersMissingRequirement;
for (lfg::LfgLockPartyMap::const_iterator it = joinData.lockmap.begin(); it != joinData.lockmap.end(); ++it)
{
diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp
index 5b96b4260e4..c9ac113c623 100644
--- a/src/server/game/Handlers/LootHandler.cpp
+++ b/src/server/game/Handlers/LootHandler.cpp
@@ -145,7 +145,7 @@ void WorldSession::HandleAutostoreLootItemOpcode(WorldPackets::Loot::LootItem& p
void WorldSession::HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& /*packet*/)
{
Player* player = GetPlayer();
- for (std::pair<ObjectGuid, ObjectGuid> const& lootView : player->GetAELootView())
+ for (std::pair<ObjectGuid const, ObjectGuid> const& lootView : player->GetAELootView())
{
ObjectGuid guid = lootView.second;
Loot* loot = nullptr;
@@ -222,34 +222,32 @@ void WorldSession::HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& /*packet
playersNear.push_back(member);
}
- uint32 goldPerPlayer = uint32((loot->gold) / (playersNear.size()));
+ uint64 goldPerPlayer = uint64(loot->gold / playersNear.size());
for (std::vector<Player*>::const_iterator i = playersNear.begin(); i != playersNear.end(); ++i)
{
- (*i)->ModifyMoney(goldPerPlayer);
- (*i)->UpdateCriteria(CRITERIA_TYPE_LOOT_MONEY, goldPerPlayer);
+ uint64 goldMod = CalculatePct(goldPerPlayer, (*i)->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_MONEY_GAIN, 1));
- if (Guild* guild = sGuildMgr->GetGuildById((*i)->GetGuildId()))
- if (uint32 guildGold = CalculatePct(goldPerPlayer, (*i)->GetTotalAuraModifier(SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT)))
- guild->HandleMemberDepositMoney(this, guildGold, true);
+ (*i)->ModifyMoney(goldPerPlayer + goldMod);
+ (*i)->UpdateCriteria(CRITERIA_TYPE_LOOT_MONEY, goldPerPlayer);
WorldPackets::Loot::LootMoneyNotify packet;
packet.Money = goldPerPlayer;
+ packet.MoneyMod = goldMod;
packet.SoleLooter = playersNear.size() <= 1 ? true : false;
(*i)->SendDirectMessage(packet.Write());
}
}
else
{
- player->ModifyMoney(loot->gold);
- player->UpdateCriteria(CRITERIA_TYPE_LOOT_MONEY, loot->gold);
+ uint64 goldMod = CalculatePct(loot->gold, player->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_MONEY_GAIN, 1));
- if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId()))
- if (uint32 guildGold = CalculatePct(loot->gold, player->GetTotalAuraModifier(SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT)))
- guild->HandleMemberDepositMoney(this, guildGold, true);
+ player->ModifyMoney(loot->gold + goldMod);
+ player->UpdateCriteria(CRITERIA_TYPE_LOOT_MONEY, loot->gold);
WorldPackets::Loot::LootMoneyNotify packet;
packet.Money = loot->gold;
+ packet.MoneyMod = goldMod;
packet.SoleLooter = true; // "You loot..."
SendPacket(packet.Write());
}
@@ -447,7 +445,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid)
void WorldSession::DoLootReleaseAll()
{
std::unordered_map<ObjectGuid, ObjectGuid> lootView = _player->GetAELootView();
- for (std::pair<ObjectGuid, ObjectGuid> lootPair : lootView)
+ for (std::pair<ObjectGuid const, ObjectGuid> const& lootPair : lootView)
DoLootRelease(lootPair.second);
}
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp
index 5ee4228db79..d9af761eb22 100644
--- a/src/server/game/Handlers/QueryHandler.cpp
+++ b/src/server/game/Handlers/QueryHandler.cpp
@@ -110,6 +110,9 @@ void WorldSession::HandleCreatureQuery(WorldPackets::Query::QueryCreature& packe
stats.HealthScalingExpansion = creatureInfo->HealthScalingExpansion;
stats.VignetteID = creatureInfo->VignetteID;
stats.Class = creatureInfo->unit_class;
+ stats.FadeRegionRadius = creatureInfo->FadeRegionRadius;
+ stats.WidgetSetID = creatureInfo->WidgetSetID;
+ stats.WidgetSetUnitConditionID = creatureInfo->WidgetSetUnitConditionID;
stats.Title = creatureInfo->SubName;
stats.TitleAlt = creatureInfo->TitleAlt;
diff --git a/src/server/game/Handlers/ToyHandler.cpp b/src/server/game/Handlers/ToyHandler.cpp
index 7ebb109df95..663e3de89ff 100644
--- a/src/server/game/Handlers/ToyHandler.cpp
+++ b/src/server/game/Handlers/ToyHandler.cpp
@@ -47,7 +47,7 @@ void WorldSession::HandleAddToy(WorldPackets::Toy::AddToy& packet)
return;
}
- if (_collectionMgr->AddToy(item->GetEntry(), false))
+ if (_collectionMgr->AddToy(item->GetEntry(), false, false))
_player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
}
@@ -95,3 +95,8 @@ void WorldSession::HandleUseToy(WorldPackets::Toy::UseToy& packet)
spell->m_castFlagsEx |= CAST_FLAG_EX_USE_TOY_SPELL;
spell->prepare(&targets);
}
+
+void WorldSession::HandleToyClearFanfare(WorldPackets::Toy::ToyClearFanfare& toyClearFanfare)
+{
+ _collectionMgr->ToyClearFanfare(toyClearFanfare.ItemID);
+}
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index 30434745296..247b2c37f30 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -126,16 +126,17 @@ Quest::Quest(Field* questRecord)
AllowableRaces = questRecord[108].GetUInt64();
TreasurePickerID = questRecord[109].GetInt32();
Expansion = questRecord[110].GetInt32();
-
- LogTitle = questRecord[111].GetString();
- LogDescription = questRecord[112].GetString();
- QuestDescription = questRecord[113].GetString();
- AreaDescription = questRecord[114].GetString();
- PortraitGiverText = questRecord[115].GetString();
- PortraitGiverName = questRecord[116].GetString();
- PortraitTurnInText = questRecord[117].GetString();
- PortraitTurnInName = questRecord[118].GetString();
- QuestCompletionLog = questRecord[119].GetString();
+ ManagedWorldStateID = questRecord[111].GetInt32();
+
+ LogTitle = questRecord[112].GetString();
+ LogDescription = questRecord[113].GetString();
+ QuestDescription = questRecord[114].GetString();
+ AreaDescription = questRecord[115].GetString();
+ PortraitGiverText = questRecord[116].GetString();
+ PortraitGiverName = questRecord[117].GetString();
+ PortraitTurnInText = questRecord[118].GetString();
+ PortraitTurnInName = questRecord[119].GetString();
+ QuestCompletionLog = questRecord[120].GetString();
for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
{
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index cac085e5a91..6382134acab 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -441,6 +441,7 @@ class TC_GAME_API Quest
uint32 GetRewardReputationMask() const { return RewardReputationMask; }
int32 GetTreasurePickerId() const { return TreasurePickerID; }
int32 GetExpansion() const { return Expansion; }
+ int32 GetManagedWorldStateId() const { return ManagedWorldStateID; }
uint32 GetQuestGiverPortrait() const { return QuestGiverPortrait; }
int32 GetQuestGiverPortraitMount() const { return QuestGiverPortraitMount; }
uint32 GetQuestTurnInPortrait() const { return QuestTurnInPortrait; }
@@ -533,6 +534,7 @@ class TC_GAME_API Quest
uint64 AllowableRaces;
int32 TreasurePickerID;
int32 Expansion;
+ int32 ManagedWorldStateID;
QuestObjectives Objectives;
std::string LogTitle;
std::string LogDescription;
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp
index 37d63a5e939..f4cd72123db 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.cpp
+++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp
@@ -21,6 +21,7 @@ WorldPacket const* WorldPackets::Battleground::PVPSeason::Write()
{
_worldPacket << uint32(CurrentSeason);
_worldPacket << uint32(PreviousSeason);
+ _worldPacket << uint32(PvpSeasonID);
return &_worldPacket;
}
@@ -125,10 +126,11 @@ WorldPacket const* WorldPackets::Battleground::PVPLogData::Write()
void WorldPackets::Battleground::BattlemasterJoin::Read()
{
- _worldPacket >> QueueID;
+ QueueIDs.resize(_worldPacket.read<uint32>());
_worldPacket >> Roles;
_worldPacket >> BlacklistMap[0] >> BlacklistMap[1];
- JoinAsGroup = _worldPacket.ReadBit();
+ for (uint64& queueId : QueueIDs)
+ _worldPacket >> queueId;
}
void WorldPackets::Battleground::BattlemasterJoinArena::Read()
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h
index 60d1d5ee210..c470ad7bbf6 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.h
+++ b/src/server/game/Server/Packets/BattlegroundPackets.h
@@ -22,6 +22,7 @@
#include "LFGPacketsCommon.h"
#include "ObjectGuid.h"
#include "Optional.h"
+#include "PacketUtilities.h"
#include "Position.h"
namespace WorldPackets
@@ -37,6 +38,7 @@ namespace WorldPackets
uint32 PreviousSeason = 0;
uint32 CurrentSeason = 0;
+ uint32 PvpSeasonID = 0;
};
class AreaSpiritHealerQuery final : public ClientPacket
@@ -220,9 +222,8 @@ namespace WorldPackets
void Read() override;
- bool JoinAsGroup = false;
+ Array<uint64, 1> QueueIDs;
uint8 Roles = 0;
- uint64 QueueID = 0;
int32 BlacklistMap[2] = { };
};
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index afd7b7bb87c..1739ef13eb9 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -117,7 +117,7 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel
if (ChrSpecializationEntry const* spec = sDB2Manager.GetChrSpecializationByIndex(Class, fields[29].GetUInt8()))
SpecID = spec->ID;
- LastLoginBuild = fields[30].GetUInt32();
+ LastLoginVersion = fields[30].GetUInt32();
for (uint8 slot = 0; slot < INVENTORY_SLOT_BAG_END; ++slot)
{
@@ -172,7 +172,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharacters
data << uint32(charInfo.LastPlayedTime);
data << uint16(charInfo.SpecID);
data << uint32(charInfo.Unknown703);
- data << uint32(charInfo.LastLoginBuild);
+ data << uint32(charInfo.LastLoginVersion);
data << uint32(charInfo.Flags4);
data.WriteBits(charInfo.Name.length(), 6);
data.WriteBit(charInfo.FirstLogin);
@@ -196,6 +196,14 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharacters
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharactersResult::UnlockedConditionalAppearance const& unlockedConditionalAppearance)
+{
+ data << int32(unlockedConditionalAppearance.AchievementID);
+ data << int32(unlockedConditionalAppearance.Unused);
+
+ return data;
+}
+
WorldPacket const* WorldPackets::Character::EnumCharactersResult::Write()
{
_worldPacket.reserve(9 + Characters.size() * sizeof(CharacterInfo) + RaceUnlockData.size() * sizeof(RaceUnlock));
@@ -210,10 +218,14 @@ WorldPacket const* WorldPackets::Character::EnumCharactersResult::Write()
_worldPacket << uint32(Characters.size());
_worldPacket << int32(MaxCharacterLevel);
_worldPacket << uint32(RaceUnlockData.size());
+ _worldPacket << uint32(UnlockedConditionalAppearances.size());
if (DisabledClassesMask)
_worldPacket << uint32(*DisabledClassesMask);
+ for (UnlockedConditionalAppearance const& unlockedConditionalAppearance : UnlockedConditionalAppearances)
+ _worldPacket << unlockedConditionalAppearance;
+
for (CharacterInfo const& charInfo : Characters)
_worldPacket << charInfo;
diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h
index d21c38b2afc..90f460b298d 100644
--- a/src/server/game/Server/Packets/CharacterPackets.h
+++ b/src/server/game/Server/Packets/CharacterPackets.h
@@ -148,7 +148,7 @@ namespace WorldPackets
uint32 LastPlayedTime = 0;
uint16 SpecID = 0;
uint32 Unknown703 = 0;
- uint32 LastLoginBuild = 0;
+ uint32 LastLoginVersion = 0;
struct PetInfo
{
@@ -178,6 +178,12 @@ namespace WorldPackets
bool HasHeritageArmor = false;
};
+ struct UnlockedConditionalAppearance
+ {
+ int32 AchievementID = 0;
+ int32 Unused = 0;
+ };
+
EnumCharactersResult() : ServerPacket(SMSG_ENUM_CHARACTERS_RESULT) { }
WorldPacket const* Write() override;
@@ -194,6 +200,7 @@ namespace WorldPackets
std::vector<CharacterInfo> Characters; ///< all characters on the list
std::vector<RaceUnlock> RaceUnlockData; ///<
+ std::vector<UnlockedConditionalAppearance> UnlockedConditionalAppearances;
};
class CreateCharacter final : public ClientPacket
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp
index 8b9a1a05c76..4bfc5d5062f 100644
--- a/src/server/game/Server/Packets/ChatPackets.cpp
+++ b/src/server/game/Server/Packets/ChatPackets.cpp
@@ -242,7 +242,7 @@ WorldPacket const* WorldPackets::Chat::ChatPlayerNotfound::Write()
WorldPacket const* WorldPackets::Chat::ChatServerMessage::Write()
{
- _worldPacket << MessageID;
+ _worldPacket << int32(MessageID);
_worldPacket.WriteBits(StringParam.length(), 11);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
index 86c999ddd83..fbc37cf5bf1 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
@@ -68,6 +68,7 @@ namespace WorldPackets
Type = TYPE_CREATURE_TO_PLAYER_DAMAGE;
PlayerLevelDelta = target->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
PlayerItemLevel = target->GetAverageItemLevel();
+ TargetItemLevel = 0;
ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID);
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
@@ -85,6 +86,7 @@ namespace WorldPackets
Type = TYPE_PLAYER_TO_CREATURE_DAMAGE;
PlayerLevelDelta = attacker->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
PlayerItemLevel = attacker->GetAverageItemLevel();
+ TargetItemLevel = 0;
ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID);
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
@@ -171,6 +173,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::ContentTuningPara
{
data << int16(contentTuningParams.PlayerLevelDelta);
data << uint16(contentTuningParams.PlayerItemLevel);
+ data << uint16(contentTuningParams.TargetItemLevel);
data << uint16(contentTuningParams.ScalingHealthItemLevelCurveID);
data << uint8(contentTuningParams.TargetLevel);
data << uint8(contentTuningParams.Expansion);
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.h b/src/server/game/Server/Packets/CombatLogPacketsCommon.h
index 40d317e7e02..10fcf040b09 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h
@@ -62,6 +62,7 @@ namespace WorldPackets
uint32 Type = 0;
int16 PlayerLevelDelta = 0;
uint16 PlayerItemLevel = 0;
+ uint16 TargetItemLevel = 0;
uint16 ScalingHealthItemLevelCurveID = 0;
uint8 TargetLevel = 0;
uint8 Expansion = 0;
diff --git a/src/server/game/Server/Packets/DuelPackets.cpp b/src/server/game/Server/Packets/DuelPackets.cpp
index 7d2602c4e41..dd358c8cee8 100644
--- a/src/server/game/Server/Packets/DuelPackets.cpp
+++ b/src/server/game/Server/Packets/DuelPackets.cpp
@@ -41,7 +41,7 @@ WorldPacket const* WorldPackets::Duel::DuelComplete::Write()
WorldPacket const* WorldPackets::Duel::DuelCountdown::Write()
{
- _worldPacket << Countdown;
+ _worldPacket << uint32(Countdown);
return &_worldPacket;
}
@@ -67,8 +67,8 @@ WorldPacket const* WorldPackets::Duel::DuelWinner::Write()
_worldPacket.WriteBits(BeatenName.size(), 6);
_worldPacket.WriteBits(WinnerName.size(), 6);
_worldPacket.WriteBit(Fled);
- _worldPacket << BeatenVirtualRealmAddress;
- _worldPacket << WinnerVirtualRealmAddress;
+ _worldPacket << uint32(BeatenVirtualRealmAddress);
+ _worldPacket << uint32(WinnerVirtualRealmAddress);
_worldPacket.WriteString(BeatenName);
_worldPacket.WriteString(WinnerName);
diff --git a/src/server/game/Server/Packets/GarrisonPackets.cpp b/src/server/game/Server/Packets/GarrisonPackets.cpp
index 48732b43aba..ec37ad28893 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.cpp
+++ b/src/server/game/Server/Packets/GarrisonPackets.cpp
@@ -110,7 +110,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonMission
return data;
}
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonMissionAreaBonus const& areaBonus)
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonMissionBonusAbility const& areaBonus)
{
data << uint32(areaBonus.GarrMssnBonusAbilityID);
data << uint32(areaBonus.StartTime);
@@ -169,7 +169,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonInfo co
data << missionRewardItem;
}
- for (WorldPackets::Garrison::GarrisonMissionAreaBonus const* areaBonus : garrison.MissionAreaBonuses)
+ for (WorldPackets::Garrison::GarrisonMissionBonusAbility const* areaBonus : garrison.MissionAreaBonuses)
data << *areaBonus;
for (WorldPackets::Garrison::GarrisonTalent const& talent : garrison.Talents)
diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h
index 7ec0b01c3e6..7eddbb46cf9 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.h
+++ b/src/server/game/Server/Packets/GarrisonPackets.h
@@ -122,7 +122,7 @@ namespace WorldPackets
int32 Unknown = 0;
};
- struct GarrisonMissionAreaBonus
+ struct GarrisonMissionBonusAbility
{
uint32 GarrMssnBonusAbilityID = 0;
time_t StartTime = time_t(0);
@@ -148,7 +148,7 @@ namespace WorldPackets
std::vector<GarrisonMission const*> Missions;
std::vector<std::vector<GarrisonMissionReward>> MissionRewards;
std::vector<std::vector<GarrisonMissionReward>> MissionOvermaxRewards;
- std::vector<GarrisonMissionAreaBonus const*> MissionAreaBonuses;
+ std::vector<GarrisonMissionBonusAbility const*> MissionAreaBonuses;
std::vector<GarrisonTalent> Talents;
std::vector<bool> CanStartMission;
std::vector<int32> ArchivedMissions;
@@ -353,7 +353,7 @@ namespace WorldPackets
class GarrisonRemoveFollowerResult final : public ServerPacket
{
public:
- GarrisonRemoveFollowerResult() : ServerPacket(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, 8 + 4) { }
+ GarrisonRemoveFollowerResult() : ServerPacket(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, 8 + 4 + 4) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp
index 0a2868685af..56768fafe8f 100644
--- a/src/server/game/Server/Packets/GuildPackets.cpp
+++ b/src/server/game/Server/Packets/GuildPackets.cpp
@@ -29,6 +29,7 @@ WorldPackets::Guild::QueryGuildInfoResponse::QueryGuildInfoResponse()
WorldPacket const* WorldPackets::Guild::QueryGuildInfoResponse::Write()
{
_worldPacket << GuildGuid;
+ _worldPacket << PlayerGuid;
_worldPacket.WriteBit(Info.is_initialized());
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h
index 919fed8a88b..b72d4857d48 100644
--- a/src/server/game/Server/Packets/GuildPackets.h
+++ b/src/server/game/Server/Packets/GuildPackets.h
@@ -78,6 +78,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid GuildGuid;
+ ObjectGuid PlayerGuid;
Optional<GuildInfo> Info;
};
@@ -883,7 +884,7 @@ namespace WorldPackets
class GuildBankTextQueryResult : public ServerPacket
{
public:
- GuildBankTextQueryResult() : ServerPacket(SMSG_GUILD_BANK_TEXT_QUERY_RESULT, 5) { }
+ GuildBankTextQueryResult() : ServerPacket(SMSG_GUILD_BANK_TEXT_QUERY_RESULT, 4 + 2) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/HotfixPackets.cpp b/src/server/game/Server/Packets/HotfixPackets.cpp
index aee733ab4db..cf147b91031 100644
--- a/src/server/game/Server/Packets/HotfixPackets.cpp
+++ b/src/server/game/Server/Packets/HotfixPackets.cpp
@@ -47,36 +47,64 @@ WorldPacket const* WorldPackets::Hotfix::DBReply::Write()
WorldPacket const* WorldPackets::Hotfix::AvailableHotfixes::Write()
{
_worldPacket << int32(HotfixCacheVersion);
- _worldPacket << uint32(Hotfixes.size());
+ _worldPacket << uint32(HotfixCount);
for (auto const& hotfixEntry : Hotfixes)
- _worldPacket << uint64(hotfixEntry.first);
+ {
+ for (auto const& tableRecord : hotfixEntry.second)
+ {
+ _worldPacket << uint32(tableRecord.first);
+ _worldPacket << int32(tableRecord.second);
+ _worldPacket << int32(hotfixEntry.first);
+ }
+ }
return &_worldPacket;
}
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Hotfix::HotfixRecord& hotfixRecord)
+{
+ data >> hotfixRecord.TableHash;
+ data >> hotfixRecord.RecordID;
+ data >> hotfixRecord.HotfixID;
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Hotfix::HotfixRecord const& hotfixRecord)
+{
+ data << uint32(hotfixRecord.TableHash);
+ data << int32(hotfixRecord.RecordID);
+ data << int32(hotfixRecord.HotfixID);
+ return data;
+}
+
void WorldPackets::Hotfix::HotfixRequest::Read()
{
+ _worldPacket >> ClientBuild;
+ _worldPacket >> DataBuild;
+
uint32 hotfixCount = _worldPacket.read<uint32>();
- if (hotfixCount > sDB2Manager.GetHotfixData().size())
- throw PacketArrayMaxCapacityException(hotfixCount, sDB2Manager.GetHotfixData().size());
+ if (hotfixCount > sDB2Manager.GetHotfixCount())
+ throw PacketArrayMaxCapacityException(hotfixCount, sDB2Manager.GetHotfixCount());
Hotfixes.resize(hotfixCount);
- for (uint64& hotfixId : Hotfixes)
- _worldPacket >> hotfixId;
+ for (HotfixRecord& hotfixRecord : Hotfixes)
+ _worldPacket >> hotfixRecord;
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Hotfix::HotfixResponse::HotfixData const& hotfixData)
{
- data << uint64(hotfixData.ID);
- data << int32(hotfixData.RecordID);
- data.WriteBit(hotfixData.Data.is_initialized());
- if (hotfixData.Data)
+ data << hotfixData.Record;
+ if (hotfixData.Size)
{
- data << uint32(hotfixData.Data->size());
- data.append(*hotfixData.Data);
+ data << uint32(*hotfixData.Size);
+ data.WriteBit(true);
}
else
+ {
data << uint32(0);
+ data.WriteBit(false);
+ }
+ data.FlushBits();
return data;
}
@@ -87,5 +115,8 @@ WorldPacket const* WorldPackets::Hotfix::HotfixResponse::Write()
for (HotfixData const& hotfix : Hotfixes)
_worldPacket << hotfix;
+ _worldPacket << uint32(HotfixContent.size());
+ _worldPacket.append(HotfixContent);
+
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/HotfixPackets.h b/src/server/game/Server/Packets/HotfixPackets.h
index 9f0a4a1176f..100b51a5fb2 100644
--- a/src/server/game/Server/Packets/HotfixPackets.h
+++ b/src/server/game/Server/Packets/HotfixPackets.h
@@ -62,13 +62,21 @@ namespace WorldPackets
class AvailableHotfixes final : public ServerPacket
{
public:
- AvailableHotfixes(int32 hotfixCacheVersion, std::map<uint64, int32> const& hotfixes)
- : ServerPacket(SMSG_AVAILABLE_HOTFIXES), HotfixCacheVersion(hotfixCacheVersion), Hotfixes(hotfixes) { }
+ AvailableHotfixes(int32 hotfixCacheVersion, uint32 hotfixCount, DB2Manager::HotfixContainer const& hotfixes)
+ : ServerPacket(SMSG_AVAILABLE_HOTFIXES), HotfixCacheVersion(hotfixCacheVersion), HotfixCount(hotfixCount), Hotfixes(hotfixes) { }
WorldPacket const* Write() override;
int32 HotfixCacheVersion;
- std::map<uint64, int32> const& Hotfixes;
+ uint32 HotfixCount;
+ DB2Manager::HotfixContainer const& Hotfixes;
+ };
+
+ struct HotfixRecord
+ {
+ uint32 TableHash = 0;
+ int32 RecordID = 0;
+ int32 HotfixID = 0;
};
class HotfixRequest final : public ClientPacket
@@ -78,7 +86,9 @@ namespace WorldPackets
void Read() override;
- std::vector<uint64> Hotfixes;
+ uint32 ClientBuild = 0;
+ uint32 DataBuild = 0;
+ std::vector<HotfixRecord> Hotfixes;
};
class HotfixResponse final : public ServerPacket
@@ -86,9 +96,8 @@ namespace WorldPackets
public:
struct HotfixData
{
- uint64 ID = 0;
- int32 RecordID = 0;
- Optional<ByteBuffer> Data;
+ HotfixRecord Record;
+ Optional<uint32> Size;
};
HotfixResponse() : ServerPacket(SMSG_HOTFIX_RESPONSE) { }
@@ -96,6 +105,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
std::vector<HotfixData> Hotfixes;
+ ByteBuffer HotfixContent;
};
}
}
diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp
index 415aedaa56a..8a36270bec2 100644
--- a/src/server/game/Server/Packets/InspectPackets.cpp
+++ b/src/server/game/Server/Packets/InspectPackets.cpp
@@ -63,6 +63,24 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectGuildData
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData const& bracket)
+{
+ data << uint8(bracket.Bracket);
+ data << int32(bracket.Rating);
+ data << int32(bracket.Rank);
+ data << int32(bracket.WeeklyPlayed);
+ data << int32(bracket.WeeklyWon);
+ data << int32(bracket.SeasonPlayed);
+ data << int32(bracket.SeasonWon);
+ data << int32(bracket.WeeklyBestRating);
+ data << int32(bracket.Unk710);
+ data << int32(bracket.Unk801_1);
+ data.WriteBit(bracket.Unk801_2);
+ data.FlushBits();
+
+ return data;
+}
+
WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint8 index)
{
CreatorGUID = item->GetGuidValue(ITEM_FIELD_CREATOR);
@@ -100,6 +118,11 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
_worldPacket << int32(ClassID);
_worldPacket << int32(SpecializationID);
_worldPacket << int32(GenderID);
+ _worldPacket << uint8(LifetimeMaxRank);
+ _worldPacket << uint16(TodayHK);
+ _worldPacket << uint16(YesterdayHK);
+ _worldPacket << uint32(LifetimeHK);
+ _worldPacket << uint32(HonorLevel);
if (!Glyphs.empty())
_worldPacket.append(Glyphs.data(), Glyphs.size());
if (!Talents.empty())
@@ -111,8 +134,8 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
_worldPacket.WriteBit(AzeriteLevel.is_initialized());
_worldPacket.FlushBits();
- for (size_t i = 0; i < Items.size(); ++i)
- _worldPacket << Items[i];
+ for (PVPBracketData const& bracket : Bracket)
+ _worldPacket << bracket;
if (GuildData)
_worldPacket << *GuildData;
@@ -120,58 +143,8 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
if (AzeriteLevel)
_worldPacket << int32(*AzeriteLevel);
- return &_worldPacket;
-}
-
-void WorldPackets::Inspect::RequestHonorStats::Read()
-{
- _worldPacket >> TargetGUID;
-}
-
-WorldPacket const* WorldPackets::Inspect::InspectHonorStats::Write()
-{
- _worldPacket << PlayerGUID;
- _worldPacket << uint8(LifetimeMaxRank);
- _worldPacket << uint16(YesterdayHK); /// @todo: confirm order
- _worldPacket << uint16(TodayHK); /// @todo: confirm order
- _worldPacket << uint32(LifetimeHK);
-
- return &_worldPacket;
-}
-
-void WorldPackets::Inspect::InspectPVPRequest::Read()
-{
- _worldPacket >> InspectTarget;
- _worldPacket >> InspectRealmAddress;
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData const& bracket)
-{
- data << uint8(bracket.Bracket);
- data << int32(bracket.Rating);
- data << int32(bracket.Rank);
- data << int32(bracket.WeeklyPlayed);
- data << int32(bracket.WeeklyWon);
- data << int32(bracket.SeasonPlayed);
- data << int32(bracket.SeasonWon);
- data << int32(bracket.WeeklyBestRating);
- data << int32(bracket.Unk710);
- data << int32(bracket.Unk801_1);
- data.WriteBit(bracket.Unk801_2);
- data.FlushBits();
-
- return data;
-}
-
-WorldPacket const* WorldPackets::Inspect::InspectPVPResponse::Write()
-{
- _worldPacket << ClientGUID;
-
- _worldPacket.WriteBits(Bracket.size(), 3);
- _worldPacket.FlushBits();
-
- for (size_t i = 0; i < Bracket.size(); ++i)
- _worldPacket << Bracket[i];
+ for (InspectItemData const& item : Items)
+ _worldPacket << item;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h
index e16507904b9..51b1248e286 100644
--- a/src/server/game/Server/Packets/InspectPackets.h
+++ b/src/server/game/Server/Packets/InspectPackets.h
@@ -67,6 +67,21 @@ namespace WorldPackets
int32 AchievementPoints = 0;
};
+ struct PVPBracketData
+ {
+ int32 Rating = 0;
+ int32 Rank = 0;
+ int32 WeeklyPlayed = 0;
+ int32 WeeklyWon = 0;
+ int32 SeasonPlayed = 0;
+ int32 SeasonWon = 0;
+ int32 WeeklyBestRating = 0;
+ int32 Unk710 = 0;
+ int32 Unk801_1 = 0;
+ uint8 Bracket = 0;
+ bool Unk801_2 = false;
+ };
+
class InspectResult final : public ServerPacket
{
public:
@@ -85,71 +100,16 @@ namespace WorldPackets
int32 ClassID = CLASS_NONE;
int32 GenderID = GENDER_NONE;
Optional<InspectGuildData> GuildData;
+ std::array<PVPBracketData, 6> Bracket;
int32 SpecializationID = 0;
Optional<int32> AzeriteLevel;
- };
-
- class RequestHonorStats final : public ClientPacket
- {
- public:
- RequestHonorStats(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_HONOR_STATS, std::move(packet)) { }
-
- void Read() override;
-
- ObjectGuid TargetGUID;
- };
-
- class InspectHonorStats final : public ServerPacket
- {
- public:
- InspectHonorStats() : ServerPacket(SMSG_INSPECT_HONOR_STATS, 25) { }
-
- WorldPacket const* Write() override;
-
- ObjectGuid PlayerGUID;
- uint32 LifetimeHK = 0;
- uint16 YesterdayHK = 0;
- uint16 TodayHK = 0;
+ uint32 LifetimeHK = 0;
+ uint32 HonorLevel = 0;
+ uint16 TodayHK = 0;
+ uint16 YesterdayHK = 0;
uint8 LifetimeMaxRank = 0;
};
- class InspectPVPRequest final : public ClientPacket
- {
- public:
- InspectPVPRequest(WorldPacket&& packet) : ClientPacket(CMSG_INSPECT_PVP, std::move(packet)) { }
-
- void Read() override;
-
- ObjectGuid InspectTarget;
- uint32 InspectRealmAddress = 0;
- };
-
- struct PVPBracketData
- {
- int32 Rating = 0;
- int32 Rank = 0;
- int32 WeeklyPlayed = 0;
- int32 WeeklyWon = 0;
- int32 SeasonPlayed = 0;
- int32 SeasonWon = 0;
- int32 WeeklyBestRating = 0;
- int32 Unk710 = 0;
- int32 Unk801_1 = 0;
- uint8 Bracket = 0;
- bool Unk801_2 = false;
- };
-
- class InspectPVPResponse final : public ServerPacket
- {
- public:
- InspectPVPResponse() : ServerPacket(SMSG_INSPECT_PVP, 17) { }
-
- WorldPacket const* Write() override;
-
- std::vector<PVPBracketData> Bracket;
- ObjectGuid ClientGUID;
- };
-
class QueryInspectAchievements final : public ClientPacket
{
public:
diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h
index d6724f42286..311b1b14e65 100644
--- a/src/server/game/Server/Packets/InstancePackets.h
+++ b/src/server/game/Server/Packets/InstancePackets.h
@@ -229,7 +229,7 @@ namespace WorldPackets
class InstanceEncounterGainCombatResurrectionCharge final : public ServerPacket
{
public:
- InstanceEncounterGainCombatResurrectionCharge() : ServerPacket(SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE, 0) { }
+ InstanceEncounterGainCombatResurrectionCharge() : ServerPacket(SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE, 4 + 4) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
index aafdaa831b4..0803b3f044b 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
@@ -33,8 +33,6 @@ bool WorldPackets::Item::ItemBonusInstanceData::operator==(ItemBonusInstanceData
void WorldPackets::Item::ItemInstance::Initialize(::Item const* item)
{
ItemID = item->GetEntry();
- RandomPropertiesSeed = item->GetItemSuffixFactor();
- RandomPropertiesID = item->GetItemRandomPropertyId();
std::vector<uint32> const& bonusListIds = item->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS);
if (!bonusListIds.empty())
{
@@ -70,9 +68,6 @@ void WorldPackets::Item::ItemInstance::Initialize(::ItemDynamicFieldGems const*
void WorldPackets::Item::ItemInstance::Initialize(::LootItem const& lootItem)
{
ItemID = lootItem.itemid;
- RandomPropertiesSeed = lootItem.randomSuffix;
- if (lootItem.randomPropertyId.Type != ItemRandomEnchantmentType::BonusList)
- RandomPropertiesID = lootItem.randomPropertyId.Id;
if (!lootItem.BonusListIDs.empty())
{
@@ -91,9 +86,6 @@ void WorldPackets::Item::ItemInstance::Initialize(::LootItem const& lootItem)
void WorldPackets::Item::ItemInstance::Initialize(::VoidStorageItem const* voidItem)
{
ItemID = voidItem->ItemEntry;
- RandomPropertiesSeed = voidItem->ItemSuffixFactor;
- if (voidItem->ItemRandomPropertyId.Type != ItemRandomEnchantmentType::BonusList)
- RandomPropertiesID = voidItem->ItemRandomPropertyId.Id;
if (voidItem->ItemUpgradeId || voidItem->FixedScalingLevel || voidItem->ArtifactKnowledgeLevel)
{
@@ -116,7 +108,7 @@ void WorldPackets::Item::ItemInstance::Initialize(::VoidStorageItem const* voidI
bool WorldPackets::Item::ItemInstance::operator==(ItemInstance const& r) const
{
- if (ItemID != r.ItemID || RandomPropertiesID != r.RandomPropertiesID || RandomPropertiesSeed != r.RandomPropertiesSeed)
+ if (ItemID != r.ItemID)
return false;
if (ItemBonus.is_initialized() != r.ItemBonus.is_initialized() || Modifications.is_initialized() != r.Modifications.is_initialized())
@@ -161,8 +153,6 @@ ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemBonusInstanceDa
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemInstance const& itemInstance)
{
data << int32(itemInstance.ItemID);
- data << int32(itemInstance.RandomPropertiesSeed);
- data << int32(itemInstance.RandomPropertiesID);
data.WriteBit(itemInstance.ItemBonus.is_initialized());
data.WriteBit(itemInstance.Modifications.is_initialized());
@@ -180,8 +170,6 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemInstance const&
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemInstance& itemInstance)
{
data >> itemInstance.ItemID;
- data >> itemInstance.RandomPropertiesSeed;
- data >> itemInstance.RandomPropertiesID;
bool hasItemBonus = data.ReadBit();
bool hasModifications = data.ReadBit();
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.h b/src/server/game/Server/Packets/ItemPacketsCommon.h
index af7f06920b8..1c01447630e 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.h
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.h
@@ -50,8 +50,6 @@ namespace WorldPackets
void Initialize(::VoidStorageItem const* voidItem);
uint32 ItemID = 0;
- uint32 RandomPropertiesSeed = 0;
- uint32 RandomPropertiesID = 0;
Optional<ItemBonusInstanceData> ItemBonus;
Optional<CompactArray<int32>> Modifications;
diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp
index 91edfa54981..2a7707d06d0 100644
--- a/src/server/game/Server/Packets/LFGPackets.cpp
+++ b/src/server/game/Server/Packets/LFGPackets.cpp
@@ -241,13 +241,16 @@ WorldPacket const* WorldPackets::LFG::LFGRoleCheckUpdate::Write()
_worldPacket << uint8(PartyIndex);
_worldPacket << uint8(RoleCheckStatus);
_worldPacket << uint32(JoinSlots.size());
- _worldPacket << uint64(BgQueueID);
+ _worldPacket << uint32(BgQueueIDs.size());
_worldPacket << int32(GroupFinderActivityID);
_worldPacket << uint32(Members.size());
for (uint32 slot : JoinSlots)
_worldPacket << uint32(slot);
+ for (uint64 bgQueueID : BgQueueIDs)
+ _worldPacket << uint64(bgQueueID);
+
_worldPacket.WriteBit(IsBeginning);
_worldPacket.WriteBit(IsRequeue);
_worldPacket.FlushBits();
@@ -285,10 +288,18 @@ WorldPacket const* WorldPackets::LFG::LFGJoinResult::Write()
_worldPacket << uint8(Result);
_worldPacket << uint8(ResultDetail);
_worldPacket << uint32(BlackList.size());
+ _worldPacket << uint32(BlackListNames.size());
for (LFGJoinBlackList const& blackList : BlackList)
_worldPacket << blackList;
+ for (std::string const* str : BlackListNames)
+ _worldPacket.WriteBits(str->length() + 1, 24);
+
+ for (std::string const* str : BlackListNames)
+ if (!str->empty())
+ _worldPacket << *str;
+
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h
index aa081a98dda..b98f1d66334 100644
--- a/src/server/game/Server/Packets/LFGPackets.h
+++ b/src/server/game/Server/Packets/LFGPackets.h
@@ -269,7 +269,7 @@ namespace WorldPackets
uint8 PartyIndex = 0;
uint8 RoleCheckStatus = 0;
std::vector<uint32> JoinSlots;
- uint64 BgQueueID = 0;
+ std::vector<uint64> BgQueueIDs;
int32 GroupFinderActivityID = 0;
std::vector<LFGRoleCheckUpdateMember> Members;
bool IsBeginning = false;
@@ -305,6 +305,7 @@ namespace WorldPackets
uint8 Result = 0;
uint8 ResultDetail = 0;
std::vector<LFGJoinBlackList> BlackList;
+ std::vector<std::string const*> BlackListNames;
};
class LFGQueueStatus final : public ServerPacket
diff --git a/src/server/game/Server/Packets/LootPackets.cpp b/src/server/game/Server/Packets/LootPackets.cpp
index 86b3484c6c0..ff787c11b02 100644
--- a/src/server/game/Server/Packets/LootPackets.cpp
+++ b/src/server/game/Server/Packets/LootPackets.cpp
@@ -94,7 +94,8 @@ void WorldPackets::Loot::LootRelease::Read()
WorldPacket const* WorldPackets::Loot::LootMoneyNotify::Write()
{
- _worldPacket << Money;
+ _worldPacket << uint64(Money);
+ _worldPacket << uint64(MoneyMod);
_worldPacket.WriteBit(SoleLooter);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h
index f65e54d780f..adacd5c0fb7 100644
--- a/src/server/game/Server/Packets/LootPackets.h
+++ b/src/server/game/Server/Packets/LootPackets.h
@@ -129,7 +129,8 @@ namespace WorldPackets
WorldPacket const* Write() override;
- uint32 Money = 0;
+ uint64 Money = 0;
+ uint64 MoneyMod = 0;
bool SoleLooter = false;
};
diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp
index 6ca0a994b0a..294698728ff 100644
--- a/src/server/game/Server/Packets/MailPackets.cpp
+++ b/src/server/game/Server/Packets/MailPackets.cpp
@@ -272,7 +272,7 @@ WorldPacket const* WorldPackets::Mail::MailQueryNextTimeResult::Write()
return &_worldPacket;
}
-WorldPacket const* WorldPackets::Mail::NotifyRecievedMail::Write()
+WorldPacket const* WorldPackets::Mail::NotifyReceivedMail::Write()
{
_worldPacket << float(Delay);
diff --git a/src/server/game/Server/Packets/MailPackets.h b/src/server/game/Server/Packets/MailPackets.h
index ce6a7933af5..e7851b7dccd 100644
--- a/src/server/game/Server/Packets/MailPackets.h
+++ b/src/server/game/Server/Packets/MailPackets.h
@@ -227,10 +227,10 @@ namespace WorldPackets
std::vector<MailNextTimeEntry> Next;
};
- class NotifyRecievedMail : ServerPacket
+ class NotifyReceivedMail : ServerPacket
{
public:
- NotifyRecievedMail() : ServerPacket(SMSG_NOTIFY_RECEIVED_MAIL, 4) { }
+ NotifyReceivedMail() : ServerPacket(SMSG_NOTIFY_RECEIVED_MAIL, 4) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index 3f9bf709082..4039bd9e7b6 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -54,6 +54,9 @@ WorldPacket const* WorldPackets::Misc::SetCurrency::Write()
_worldPacket.WriteBit(TrackedQuantity.is_initialized());
_worldPacket.WriteBit(MaxQuantity.is_initialized());
_worldPacket.WriteBit(SuppressChatLog);
+ _worldPacket.WriteBit(QuantityChange.is_initialized());
+ _worldPacket.WriteBit(QuantityGainSource.is_initialized());
+ _worldPacket.WriteBit(QuantityLostSource.is_initialized());
_worldPacket.FlushBits();
if (WeeklyQuantity)
@@ -65,6 +68,15 @@ WorldPacket const* WorldPackets::Misc::SetCurrency::Write()
if (MaxQuantity)
_worldPacket << int32(*MaxQuantity);
+ if (QuantityChange)
+ _worldPacket << int32(*QuantityChange);
+
+ if (QuantityGainSource)
+ _worldPacket << int32(*QuantityGainSource);
+
+ if (QuantityLostSource)
+ _worldPacket << int32(*QuantityLostSource);
+
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 20ab3ac02ea..1c88f229a8c 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -109,6 +109,9 @@ namespace WorldPackets
Optional<int32> WeeklyQuantity;
Optional<int32> TrackedQuantity;
Optional<int32> MaxQuantity;
+ Optional<int32> QuantityChange;
+ Optional<int32> QuantityGainSource;
+ Optional<int32> QuantityLostSource;
bool SuppressChatLog = false;
};
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index c913637ad34..8276fb8d819 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -840,7 +840,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound
data.WriteBit(stateChange.VehicleRecID.is_initialized());
data.WriteBit(stateChange.CollisionHeight.is_initialized());
data.WriteBit(stateChange.MovementForce_.is_initialized());
- data.WriteBit(stateChange.Unknown.is_initialized());
+ data.WriteBit(stateChange.MovementForceGUID.is_initialized());
data.FlushBits();
if (stateChange.CollisionHeight)
@@ -864,8 +864,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound
if (stateChange.VehicleRecID)
data << int32(*stateChange.VehicleRecID);
- if (stateChange.Unknown)
- data << *stateChange.Unknown;
+ if (stateChange.MovementForceGUID)
+ data << *stateChange.MovementForceGUID;
if (stateChange.MovementForce_)
data << *stateChange.MovementForce_;
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index 52999613fe3..f806551c24c 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -592,7 +592,7 @@ namespace WorldPackets
Optional<int32> VehicleRecID;
Optional<CollisionHeightInfo> CollisionHeight;
Optional<MovementForce> MovementForce_;
- Optional<ObjectGuid> Unknown;
+ Optional<ObjectGuid> MovementForceGUID;
};
MoveSetCompoundState() : ServerPacket(SMSG_MOVE_SET_COMPOUND_STATE, 4 + 1) { }
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index 16da5d654a5..7e52b5d549a 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -64,7 +64,6 @@ WorldPacket const* WorldPackets::NPC::GossipMessage::Write()
return &_worldPacket;
}
-
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::NPC::VendorItem const &item)
{
data << uint32(item.MuID);
@@ -77,6 +76,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::NPC::VendorItem const &it
data << int32(item.PlayerConditionFailed);
data << item.Item;
data.WriteBit(item.DoNotFilterOnVendor);
+ data.WriteBit(item.Refundable);
data.FlushBits();
return data;
diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h
index a9d9207351b..39a25e25b7b 100644
--- a/src/server/game/Server/Packets/NPCPackets.h
+++ b/src/server/game/Server/Packets/NPCPackets.h
@@ -114,6 +114,7 @@ namespace WorldPackets
int32 ExtendedCostID = 0;
int32 PlayerConditionFailed = 0;
bool DoNotFilterOnVendor = false;
+ bool Refundable = false;
};
class VendorInventory final : public ServerPacket
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index 93961d15c9c..1cd4ab95dad 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -418,7 +418,7 @@ WorldPacket const* WorldPackets::Party::GroupNewLeader::Write()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyPlayerInfo const& playerInfo)
{
data.WriteBits(playerInfo.Name.size(), 6);
- data.WriteBits(playerInfo.VoiceStateID.size(), 6);
+ data.WriteBits(playerInfo.VoiceStateID.size() + 1, 6);
data.WriteBit(playerInfo.FromSocialQueue);
data.WriteBit(playerInfo.VoiceChatSilenced);
data << playerInfo.GUID;
@@ -428,7 +428,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyPlayerInfo co
data << uint8(playerInfo.RolesAssigned);
data << uint8(playerInfo.Class);
data.WriteString(playerInfo.Name);
- data.WriteString(playerInfo.VoiceStateID);
+ if (!playerInfo.VoiceStateID.empty())
+ data << playerInfo.VoiceStateID;
return data;
}
@@ -531,7 +532,7 @@ WorldPacket const* WorldPackets::Party::RaidMarkersChanged::Write()
_worldPacket.WriteBits(RaidMarkers.size(), 4);
_worldPacket.FlushBits();
- for (RaidMarker* raidMarker : RaidMarkers)
+ for (RaidMarker const* raidMarker : RaidMarkers)
{
_worldPacket << raidMarker->TransportGUID;
_worldPacket << raidMarker->Location.GetMapId();
diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h
index 4290656c16e..3e784c10706 100644
--- a/src/server/game/Server/Packets/PartyPackets.h
+++ b/src/server/game/Server/Packets/PartyPackets.h
@@ -124,6 +124,14 @@ namespace WorldPackets
std::string Name;
};
+ class GroupUninvite final : public ServerPacket
+ {
+ public:
+ GroupUninvite() : ServerPacket(SMSG_GROUP_UNINVITE, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
+
class RequestPartyMemberStats final : public ClientPacket
{
public:
@@ -603,7 +611,7 @@ namespace WorldPackets
uint8 PartyIndex = 0;
uint32 ActiveMarkers = 0u;
- std::vector<RaidMarker*> RaidMarkers;
+ std::vector<RaidMarker const*> RaidMarkers;
};
class PartyKillLog final : public ServerPacket
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index 338839e993d..8f651aeea7e 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -79,6 +79,9 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write()
_worldPacket << int32(Stats.RequiredExpansion);
_worldPacket << int32(Stats.VignetteID);
_worldPacket << int32(Stats.Class);
+ _worldPacket << float(Stats.FadeRegionRadius);
+ _worldPacket << int32(Stats.WidgetSetID);
+ _worldPacket << int32(Stats.WidgetSetUnitConditionID);
if (!Stats.Title.empty())
_worldPacket << Stats.Title;
diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h
index a262b2bcc2f..4331df38c85 100644
--- a/src/server/game/Server/Packets/QueryPackets.h
+++ b/src/server/game/Server/Packets/QueryPackets.h
@@ -82,6 +82,9 @@ namespace WorldPackets
uint32 RequiredExpansion = 0;
uint32 VignetteID = 0;
int32 Class = 0;
+ float FadeRegionRadius = 0.0f;
+ int32 WidgetSetID = 0;
+ int32 WidgetSetUnitConditionID = 0;
std::array<uint32, 2> Flags;
std::array<uint32, 2> ProxyCreatureID;
std::array<std::string, 4> Name;
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index 246a45992a5..0078bb8910d 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -146,6 +146,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << uint64(Info.AllowableRaces);
_worldPacket << int32(Info.TreasurePickerID);
_worldPacket << int32(Info.Expansion);
+ _worldPacket << int32(Info.ManagedWorldStateID);
_worldPacket.WriteBits(Info.LogTitle.size(), 9);
_worldPacket.WriteBits(Info.LogDescription.size(), 12);
@@ -649,12 +650,17 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::PlayerChoiceRespon
data << int32(playerChoiceResponse.ChoiceArtFileID);
data << int32(playerChoiceResponse.Flags);
data << uint32(playerChoiceResponse.WidgetSetID);
+ data << uint32(playerChoiceResponse.UiTextureAtlasElementID);
+ data << uint32(playerChoiceResponse.SoundKitID);
data << uint8(playerChoiceResponse.GroupID);
data.WriteBits(playerChoiceResponse.Answer.length(), 9);
data.WriteBits(playerChoiceResponse.Header.length(), 9);
+ data.WriteBits(playerChoiceResponse.SubHeader.length() , 7);
+ data.WriteBits(playerChoiceResponse.ButtonTooltip.length(), 9);
data.WriteBits(playerChoiceResponse.Description.length(), 11);
data.WriteBits(playerChoiceResponse.Confirmation.length(), 7);
+ data.WriteBit(playerChoiceResponse.RewardQuestID.is_initialized());
data.WriteBit(playerChoiceResponse.Reward.is_initialized());
data.FlushBits();
@@ -663,8 +669,14 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::PlayerChoiceRespon
data.WriteString(playerChoiceResponse.Answer);
data.WriteString(playerChoiceResponse.Header);
+ data.WriteString(playerChoiceResponse.SubHeader);
+ data.WriteString(playerChoiceResponse.ButtonTooltip);
data.WriteString(playerChoiceResponse.Description);
data.WriteString(playerChoiceResponse.Confirmation);
+
+ if (playerChoiceResponse.RewardQuestID)
+ data << uint32(*playerChoiceResponse.RewardQuestID);
+
return data;
}
@@ -674,6 +686,7 @@ WorldPacket const* WorldPackets::Quest::DisplayPlayerChoice::Write()
_worldPacket << uint32(Responses.size());
_worldPacket << SenderGUID;
_worldPacket << int32(UiTextureKitID);
+ _worldPacket << uint32(SoundKitID);
_worldPacket.WriteBits(Question.length(), 8);
_worldPacket.WriteBit(CloseChoiceFrame);
_worldPacket.WriteBit(HideWarboardHeader);
diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h
index aa449d93883..fd9ac659cae 100644
--- a/src/server/game/Server/Packets/QuestPackets.h
+++ b/src/server/game/Server/Packets/QuestPackets.h
@@ -162,6 +162,7 @@ namespace WorldPackets
int32 TimeAllowed = 0;
int32 TreasurePickerID = 0;
int32 Expansion = 0;
+ int32 ManagedWorldStateID = 0;
std::vector<QuestObjective> Objectives;
int32 RewardItems[QUEST_REWARD_ITEM_COUNT] = { };
int32 RewardAmount[QUEST_REWARD_ITEM_COUNT] = { };
@@ -670,12 +671,17 @@ namespace WorldPackets
int32 ChoiceArtFileID = 0;
int32 Flags = 0;
uint32 WidgetSetID = 0;
+ uint32 UiTextureAtlasElementID = 0;
+ uint32 SoundKitID = 0;
uint8 GroupID = 0;
std::string Answer;
std::string Header;
+ std::string SubHeader;
+ std::string ButtonTooltip;
std::string Description;
std::string Confirmation;
Optional<PlayerChoiceResponseReward> Reward;
+ Optional<uint32> RewardQuestID;
};
class DisplayPlayerChoice final : public ServerPacket
@@ -688,6 +694,7 @@ namespace WorldPackets
ObjectGuid SenderGUID;
int32 ChoiceID = 0;
int32 UiTextureKitID = 0;
+ uint32 SoundKitID = 0;
std::string Question;
std::vector<PlayerChoiceResponse> Responses;
bool CloseChoiceFrame = false;
diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h
index 3cd07e55845..9ad7efafc27 100644
--- a/src/server/game/Server/Packets/ReputationPackets.h
+++ b/src/server/game/Server/Packets/ReputationPackets.h
@@ -25,7 +25,7 @@ namespace WorldPackets
{
namespace Reputation
{
- static uint16 const FactionCount = 300;
+ static uint16 const FactionCount = 350;
class InitializeFactions final : public ServerPacket
{
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index 9469e675876..3e434f4899b 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -171,7 +171,7 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellTargetData
{
buffer.ResetBitPos();
- targetData.Flags = buffer.ReadBits(25);
+ targetData.Flags = buffer.ReadBits(26);
bool hasSrcLocation = buffer.ReadBit();
bool hasDstLocation = buffer.ReadBit();
bool hasOrientation = buffer.ReadBit();
@@ -274,7 +274,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::TargetLocation co
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellTargetData const& spellTargetData)
{
- data.WriteBits(spellTargetData.Flags, 25);
+ data.WriteBits(spellTargetData.Flags, 26);
data.WriteBit(spellTargetData.SrcLocation.is_initialized());
data.WriteBit(spellTargetData.DstLocation.is_initialized());
data.WriteBit(spellTargetData.Orientation.is_initialized());
@@ -312,6 +312,12 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellMissStatus c
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellHitStatus const& spellHitStatus)
+{
+ data << uint8(spellHitStatus.Reason);
+ return data;
+}
+
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellPowerData const& spellPowerData)
{
data << int32(spellPowerData.Cost);
@@ -377,22 +383,26 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastData con
data << spellCastData.Predict;
data.WriteBits(spellCastData.HitTargets.size(), 16);
data.WriteBits(spellCastData.MissTargets.size(), 16);
+ data.WriteBits(spellCastData.HitStatus.size(), 16);
data.WriteBits(spellCastData.MissStatus.size(), 16);
data.WriteBits(spellCastData.RemainingPower.size(), 9);
data.WriteBit(spellCastData.RemainingRunes.is_initialized());
data.WriteBits(spellCastData.TargetPoints.size(), 16);
data.FlushBits();
- for (WorldPackets::Spells::SpellMissStatus const& status : spellCastData.MissStatus)
- data << status;
+ for (WorldPackets::Spells::SpellMissStatus const& missStatus : spellCastData.MissStatus)
+ data << missStatus;
data << spellCastData.Target;
- for (ObjectGuid const& target : spellCastData.HitTargets)
- data << target;
+ for (ObjectGuid const& hitTarget : spellCastData.HitTargets)
+ data << hitTarget;
+
+ for (ObjectGuid const& missTarget : spellCastData.MissTargets)
+ data << missTarget;
- for (ObjectGuid const& target : spellCastData.MissTargets)
- data << target;
+ for (WorldPackets::Spells::SpellHitStatus const& hitStatus : spellCastData.HitStatus)
+ data << hitStatus;
for (WorldPackets::Spells::SpellPowerData const& power : spellCastData.RemainingPower)
data << power;
@@ -717,8 +727,8 @@ WorldPacket const* WorldPackets::Spells::PlayOrphanSpellVisual::Write()
_worldPacket << Target;
_worldPacket << int32(SpellVisualID);
_worldPacket << float(TravelSpeed);
- _worldPacket << float(UnkZero);
- _worldPacket << float(Unk801);
+ _worldPacket << float(LaunchDelay);
+ _worldPacket << float(MinDuration);
_worldPacket.WriteBit(SpeedAsTime);
_worldPacket.FlushBits();
@@ -729,14 +739,15 @@ WorldPacket const* WorldPackets::Spells::PlaySpellVisual::Write()
{
_worldPacket << Source;
_worldPacket << Target;
- _worldPacket << Unk801_1;
+ _worldPacket << Transport;
_worldPacket << TargetPosition;
_worldPacket << uint32(SpellVisualID);
_worldPacket << float(TravelSpeed);
+ _worldPacket << uint16(HitReason);
_worldPacket << uint16(MissReason);
_worldPacket << uint16(ReflectStatus);
- _worldPacket << float(Orientation);
- _worldPacket << float(Unk801_2);
+ _worldPacket << float(LaunchDelay);
+ _worldPacket << float(MinDuration);
_worldPacket.WriteBit(SpeedAsTime);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index 919666c9b53..8e1d46cc3da 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -297,8 +297,19 @@ namespace WorldPackets
ObjectGuid ServerCastID;
};
+ struct SpellHitStatus
+ {
+ SpellHitStatus() { }
+ SpellHitStatus(uint8 reason) : Reason(reason) { }
+
+ uint8 Reason;
+ };
+
struct SpellMissStatus
{
+ SpellMissStatus() { }
+ SpellMissStatus(uint8 reason, uint8 reflectStatus) : Reason(reason), ReflectStatus(reflectStatus) { }
+
uint8 Reason = 0;
uint8 ReflectStatus = 0;
};
@@ -354,6 +365,7 @@ namespace WorldPackets
uint32 CastTime = 0;
std::vector<ObjectGuid> HitTargets;
std::vector<ObjectGuid> MissTargets;
+ std::vector<SpellHitStatus> HitStatus;
std::vector<SpellMissStatus> MissStatus;
SpellTargetData Target;
std::vector<SpellPowerData> RemainingPower;
@@ -699,8 +711,8 @@ namespace WorldPackets
int32 SpellVisualID = 0;
bool SpeedAsTime = false;
float TravelSpeed = 0.0f;
- float UnkZero = 0.0f; // Always zero
- float Unk801 = 0.0f;
+ float LaunchDelay = 0.0f;
+ float MinDuration = 0.0f;
TaggedPosition<Position::XYZ> SourceRotation; // Vector of rotations, Orientation is z
TaggedPosition<Position::XYZ> TargetLocation; // Exclusive with Target
};
@@ -714,15 +726,16 @@ namespace WorldPackets
ObjectGuid Source;
ObjectGuid Target; // Exclusive with TargetPosition
- ObjectGuid Unk801_1;
- uint16 MissReason = 0;
+ ObjectGuid Transport; // Used when Target = Empty && (SpellVisual::Flags & 0x400) == 0
+ TaggedPosition<Position::XYZ> TargetPosition; // Exclusive with Target
uint32 SpellVisualID = 0;
- bool SpeedAsTime = false;
- uint16 ReflectStatus = 0;
float TravelSpeed = 0.0f;
- TaggedPosition<Position::XYZ> TargetPosition; // Exclusive with Target
- float Orientation = 0.0f;
- float Unk801_2 = 0.0f;
+ uint16 HitReason = 0;
+ uint16 MissReason = 0;
+ uint16 ReflectStatus = 0;
+ float LaunchDelay = 0.0f;
+ float MinDuration = 0.0f;
+ bool SpeedAsTime = false;
};
class PlaySpellVisualKit final : public ServerPacket
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index 76ce613b611..5e4d8b362fb 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -38,6 +38,7 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket << uint32(BpayStoreProductDeliveryDelay);
_worldPacket << uint32(ClubsPresenceUpdateTimer);
+ _worldPacket << uint32(HiddenUIClubsPresenceUpdateTimer);
_worldPacket.WriteBit(VoiceEnabled);
_worldPacket.WriteBit(EuropaTicketSystemStatus.is_initialized());
@@ -65,6 +66,7 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket.WriteBit(ClubsEnabled);
_worldPacket.WriteBit(ClubsBattleNetClubTypeAllowed);
_worldPacket.WriteBit(ClubsCharacterClubTypeAllowed);
+ _worldPacket.WriteBit(ClubsPresenceUpdateEnabled);
_worldPacket.WriteBit(VoiceChatDisabledByParentalControl);
_worldPacket.WriteBit(VoiceChatMutedByParentalControl);
diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h
index ee1704a0dac..17b404032dc 100644
--- a/src/server/game/Server/Packets/SystemPackets.h
+++ b/src/server/game/Server/Packets/SystemPackets.h
@@ -112,6 +112,7 @@ namespace WorldPackets
int64 TokenBalanceAmount = 0;
uint32 BpayStoreProductDeliveryDelay = 0;
uint32 ClubsPresenceUpdateTimer = 0;
+ uint32 HiddenUIClubsPresenceUpdateTimer = 0; ///< Timer for updating club presence when communities ui frame is hidden
bool ItemRestorationButtonEnabled = false;
bool CharUndeleteEnabled = false; ///< Implemented
bool BpayStoreDisabledByParentalControls = false;
@@ -129,6 +130,7 @@ namespace WorldPackets
bool ClubsEnabled = false;
bool ClubsBattleNetClubTypeAllowed = false;
bool ClubsCharacterClubTypeAllowed = false;
+ bool ClubsPresenceUpdateEnabled = false;
bool VoiceChatDisabledByParentalControl = false;
bool VoiceChatMutedByParentalControl = false;
diff --git a/src/server/game/Server/Packets/TokenPackets.cpp b/src/server/game/Server/Packets/TokenPackets.cpp
index 2f5b40e3fd9..8100f139604 100644
--- a/src/server/game/Server/Packets/TokenPackets.cpp
+++ b/src/server/game/Server/Packets/TokenPackets.cpp
@@ -49,7 +49,7 @@ WorldPacket const* WorldPackets::Token::WowTokenMarketPriceResponse::Write()
_worldPacket << CurrentMarketPrice;
_worldPacket << UnkInt;
_worldPacket << Result;
- _worldPacket << UnkInt2;
+ _worldPacket << AuctionDuration;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/TokenPackets.h b/src/server/game/Server/Packets/TokenPackets.h
index 21d8c2855cf..c7dd085c9b2 100644
--- a/src/server/game/Server/Packets/TokenPackets.h
+++ b/src/server/game/Server/Packets/TokenPackets.h
@@ -75,7 +75,7 @@ namespace WorldPackets
uint64 CurrentMarketPrice = 0;
uint32 UnkInt = 0; // send CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE
uint32 Result = 0;
- uint32 UnkInt2 = 0;
+ uint32 AuctionDuration = 0; // preset auction duration enum
};
}
}
diff --git a/src/server/game/Server/Packets/ToyPackets.cpp b/src/server/game/Server/Packets/ToyPackets.cpp
index a6a8d9706e9..111993db16d 100644
--- a/src/server/game/Server/Packets/ToyPackets.cpp
+++ b/src/server/game/Server/Packets/ToyPackets.cpp
@@ -32,17 +32,26 @@ WorldPacket const* WorldPackets::Toy::AccountToysUpdate::Write()
_worldPacket.WriteBit(IsFullUpdate);
_worldPacket.FlushBits();
- // both lists have to have the same size
- _worldPacket << int32(Toys->size());
- _worldPacket << int32(Toys->size());
+ // all lists have to have the same size
+ _worldPacket << int32(Toys->size()); // ids
+ _worldPacket << int32(Toys->size()); // favorites
+ _worldPacket << int32(Toys->size()); // fanfare
- for (auto const& item : *Toys)
- _worldPacket << uint32(item.first);
+ for (auto const& toy : *Toys)
+ _worldPacket << uint32(toy.first);
- for (auto const& favourite : *Toys)
- _worldPacket.WriteBit(favourite.second);
+ for (auto const& toy : *Toys)
+ _worldPacket.WriteBit(toy.second.HasFlag(ToyFlags::Favorite));
+
+ for (auto const& toy : *Toys)
+ _worldPacket.WriteBit(toy.second.HasFlag(ToyFlags::HasFanfare));
_worldPacket.FlushBits();
return &_worldPacket;
}
+
+void WorldPackets::Toy::ToyClearFanfare::Read()
+{
+ _worldPacket >> ItemID;
+}
diff --git a/src/server/game/Server/Packets/ToyPackets.h b/src/server/game/Server/Packets/ToyPackets.h
index a0157b6fab8..bc5699cf5ca 100644
--- a/src/server/game/Server/Packets/ToyPackets.h
+++ b/src/server/game/Server/Packets/ToyPackets.h
@@ -55,6 +55,16 @@ namespace WorldPackets
bool IsFullUpdate = false;
ToyBoxContainer const* Toys = nullptr;
};
+
+ class ToyClearFanfare final : public ClientPacket
+ {
+ public:
+ ToyClearFanfare(WorldPacket&& packet) : ClientPacket(CMSG_TOY_CLEAR_FANFARE, std::move(packet)) { }
+
+ void Read() override;
+
+ uint32 ItemID = 0;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 3a4256e9977..32cc88a0aee 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -472,7 +472,6 @@ void OpcodeTable::Initialize()
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_THREADUNSAFE, &WorldSession::HandleInspectOpcode);
- DEFINE_HANDLER(CMSG_INSPECT_PVP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectPVP);
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_THREADUNSAFE, &WorldSession::HandleItemRefund);
@@ -546,11 +545,11 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
DEFINE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
DEFINE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_MOVEMENT_FORCE_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
DEFINE_HANDLER(CMSG_MOVE_FORCE_ROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
DEFINE_HANDLER(CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
DEFINE_HANDLER(CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
DEFINE_HANDLER(CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
DEFINE_HANDLER(CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
@@ -564,6 +563,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_MOVE_KNOCK_BACK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveKnockBackAck);
DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCES, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
DEFINE_HANDLER(CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
DEFINE_HANDLER(CMSG_MOVE_SET_COLLISION_HEIGHT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetCollisionHeightAck);
@@ -595,6 +595,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_MOVE_TELEPORT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveTeleportAck);
DEFINE_HANDLER(CMSG_MOVE_TIME_SKIPPED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleMoveTimeSkippedOpcode);
DEFINE_HANDLER(CMSG_MOVE_TOGGLE_COLLISION_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_MOVE_UPDATE_FALL_SPEED, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
DEFINE_HANDLER(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
DEFINE_HANDLER(CMSG_NEUTRAL_PLAYER_SELECT_FACTION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_NEXT_CINEMATIC_CAMERA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNextCinematicCamera);
@@ -694,19 +695,20 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_REPORT_ENABLED_ADDONS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REPORT_PVP_PLAYER_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReportPvPAFK);
+ DEFINE_HANDLER(CMSG_REPORT_SERVER_LAG, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestAccountData);
DEFINE_HANDLER(CMSG_REQUEST_AREA_POI_UPDATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestBattlefieldStatusOpcode);
DEFINE_HANDLER(CMSG_REQUEST_CATEGORY_COOLDOWNS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCategoryCooldowns);
DEFINE_HANDLER(CMSG_REQUEST_CEMETERY_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCemeteryList);
DEFINE_HANDLER(CMSG_REQUEST_CHALLENGE_MODE_AFFIXES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_CROWD_CONTROL_SPELL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_FORCED_REACTIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestForcedReactionsOpcode);
DEFINE_HANDLER(CMSG_REQUEST_GUILD_PARTY_STATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestPartyState);
DEFINE_HANDLER(CMSG_REQUEST_GUILD_REWARDS_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestGuildRewardsList);
- DEFINE_HANDLER(CMSG_REQUEST_HONOR_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestHonorStatsOpcode);
DEFINE_HANDLER(CMSG_REQUEST_LFG_LIST_BLACKLIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_PARTY_JOIN_UPDATES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPartyJoinUpdates);
DEFINE_HANDLER(CMSG_REQUEST_PARTY_MEMBER_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPartyMemberStatsOpcode);
@@ -714,8 +716,10 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_REQUEST_PLAYED_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePlayedTime);
DEFINE_HANDLER(CMSG_REQUEST_PVP_BRAWL_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_PVP_REWARDS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPvpReward);
+ DEFINE_HANDLER(CMSG_REQUEST_QUEST_LINES_FOR_MAP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_RAID_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestRaidInfoOpcode);
DEFINE_HANDLER(CMSG_REQUEST_RATED_BATTLEFIELD_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestRatedBattlefieldInfo);
+ DEFINE_HANDLER(CMSG_REQUEST_REALM_GUILD_MASTER_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_RESEARCH_HISTORY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_STABLED_PETS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestStabledPets);
DEFINE_HANDLER(CMSG_REQUEST_VEHICLE_EXIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehicleExit);
@@ -822,6 +826,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_TOGGLE_DIFFICULTY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_TOGGLE_PVP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTogglePvP);
DEFINE_HANDLER(CMSG_TOTEM_DESTROYED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTotemDestroyed);
+ DEFINE_HANDLER(CMSG_TOY_CLEAR_FANFARE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleToyClearFanfare);
DEFINE_HANDLER(CMSG_TRADE_SKILL_SET_FAVORITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_TRAINER_BUY_SPELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTrainerBuySpellOpcode);
DEFINE_HANDLER(CMSG_TRAINER_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTrainerListOpcode);
@@ -897,10 +902,12 @@ void OpcodeTable::Initialize()
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_NO_CORPSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_PLAY_VISUAL_EVENT, STATUS_UNHANDLED, 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_ARENA_CROWD_CONTROL_SPELLS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_MATCH_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_MATCH_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_FORGE_OPENED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_RESPEC_CONFIRM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -927,6 +934,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_CHALLENGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AVAILABLE_HOTFIXES, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_EMPOWERED_ITEM_EQUIPPED_STATUS_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_EMPOWERED_ITEM_RESPEC_OPEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_XP_GAIN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BAN_REASON, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -967,10 +975,13 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_SUBSCRIPTION_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_TOY_DELIVERED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_BNET_TRANSFER_VALIDATION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_CHARACTER_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_CHARACTER_QUEUE_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_GUILD_FOLLOW_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_GUILD_MASTER_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_PURCHASE_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1299,11 +1310,11 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HIGHEST_THREAT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOTFIX_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOTFIX_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_INCOMING_SUMMON_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_INCOMING_SUMMON_PENDING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIALIZE_FACTIONS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
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_HONOR_STATS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSPECT_PVP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSPECT_RESULT, STATUS_NEVER, 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);
@@ -1402,6 +1413,8 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAIL_LIST_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAIL_QUERY_NEXT_TIME_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJECTIVES_INIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJECTIVE_ADD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJECTIVE_REMOVE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJ_EVENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MASTER_LOOT_CANDIDATE_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MESSAGE_BOX, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1666,6 +1679,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_CAST_BAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_COMMS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_TOKEN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESURRECT_CLEAR_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESURRECT_REQUEST, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESYNC_RUNES, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_CHANGED_INFORM, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1816,7 +1830,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_GAME_TIME_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_INSTANCE_OWNERSHIP, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_LAST_INSTANCE, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_OBJECT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_OBJECT, XXXXXXXXXXXX, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_TALENT_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_TASK_PROGRESS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_WEEKLY_SPELL_USAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 560ce425a96..5effe3ccd36 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -45,28 +45,28 @@ enum OpcodeMisc : uint16
enum OpcodeClient : uint16
{
- CMSG_ACCEPT_GUILD_INVITE = 0x35FC,
+ CMSG_ACCEPT_GUILD_INVITE = 0x35FD,
CMSG_ACCEPT_LEVEL_GRANT = 0x34FA,
CMSG_ACCEPT_TRADE = 0x315A,
- CMSG_ACCEPT_WARGAME_INVITE = 0x35E0,
+ CMSG_ACCEPT_WARGAME_INVITE = 0x35E1,
CMSG_ACTIVATE_TAXI = 0x34AB,
CMSG_ADDON_LIST = 0x35D8,
- CMSG_ADD_BATTLENET_FRIEND = 0x365A,
- CMSG_ADD_FRIEND = 0x36D0,
- CMSG_ADD_IGNORE = 0x36D4,
- CMSG_ADD_TOY = 0x3298,
+ CMSG_ADD_BATTLENET_FRIEND = 0x365C,
+ CMSG_ADD_FRIEND = 0x36D5,
+ CMSG_ADD_IGNORE = 0x36D9,
+ CMSG_ADD_TOY = 0x3297,
CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3201,
- CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x333D,
- CMSG_ADVENTURE_MAP_POI_QUERY = 0x3244,
+ CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x333E,
+ CMSG_ADVENTURE_MAP_POI_QUERY = 0x3245,
CMSG_ALTER_APPEARANCE = 0x34F6,
CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B0,
CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B1,
CMSG_AREA_TRIGGER = 0x31D5,
- CMSG_ARTIFACT_ADD_POWER = 0x31A9,
- CMSG_ARTIFACT_SET_APPEARANCE = 0x31AB,
+ CMSG_ARTIFACT_ADD_POWER = 0x31A8,
+ CMSG_ARTIFACT_SET_APPEARANCE = 0x31AA,
CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3209,
- CMSG_ATTACK_STOP = 0x3256,
- CMSG_ATTACK_SWING = 0x3255,
+ CMSG_ATTACK_STOP = 0x3254,
+ CMSG_ATTACK_SWING = 0x3253,
CMSG_AUCTION_HELLO_REQUEST = 0x34CB,
CMSG_AUCTION_LIST_BIDDER_ITEMS = 0x34D1,
CMSG_AUCTION_LIST_ITEMS = 0x34CE,
@@ -85,46 +85,46 @@ enum OpcodeClient : uint16
CMSG_AUTO_EQUIP_ITEM = 0x399A,
CMSG_AUTO_EQUIP_ITEM_SLOT = 0x399F,
CMSG_AUTO_STORE_BAG_ITEM = 0x399B,
- CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x335B,
- CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3347,
+ CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x335C,
+ CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3348,
CMSG_BANKER_ACTIVATE = 0x34B3,
CMSG_BATTLEFIELD_LEAVE = 0x3172,
- CMSG_BATTLEFIELD_LIST = 0x317E,
+ CMSG_BATTLEFIELD_LIST = 0x317D,
CMSG_BATTLEFIELD_PORT = 0x3527,
- CMSG_BATTLEMASTER_HELLO = 0x32B0,
+ CMSG_BATTLEMASTER_HELLO = 0x32AF,
CMSG_BATTLEMASTER_JOIN = 0x3522,
CMSG_BATTLEMASTER_JOIN_ARENA = 0x3523,
CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3525,
CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3524,
- CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D3,
- CMSG_BATTLENET_REQUEST = 0x36F7,
- CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x36FB,
- CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CB,
- CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3716,
- CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CA,
- CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C1,
- CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BB,
- CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BC,
- CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x370F,
- CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C4,
- CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE = 0x36C2,
- CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES = 0x370C,
- CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x370B,
- CMSG_BATTLE_PAY_REQUEST_VAS_CHARACTER_QUEUE_TIME = 0x370D,
- CMSG_BATTLE_PAY_START_PURCHASE = 0x36F3,
- CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F4,
- CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C3,
- CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER = 0x370E,
- CMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x36F2,
+ CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D8,
+ CMSG_BATTLENET_REQUEST = 0x36FC,
+ CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x3700,
+ CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36D0,
+ CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x371B,
+ CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CF,
+ CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C6,
+ CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BE,
+ CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BF,
+ CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x3714,
+ CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C9,
+ CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE = 0x36C7,
+ CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES = 0x3711,
+ CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3710,
+ CMSG_BATTLE_PAY_REQUEST_VAS_CHARACTER_QUEUE_TIME = 0x3712,
+ CMSG_BATTLE_PAY_START_PURCHASE = 0x36F8,
+ CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F9,
+ CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C8,
+ CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER = 0x3713,
+ CMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x36F7,
CMSG_BATTLE_PET_CLEAR_FANFARE = 0x312C,
- CMSG_BATTLE_PET_DELETE_PET = 0x3624,
- CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3625,
- CMSG_BATTLE_PET_MODIFY_NAME = 0x3627,
- CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3623,
- CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3622,
- CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362B,
- CMSG_BATTLE_PET_SET_FLAGS = 0x362F,
- CMSG_BATTLE_PET_SUMMON = 0x3628,
+ CMSG_BATTLE_PET_DELETE_PET = 0x3625,
+ CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3626,
+ CMSG_BATTLE_PET_MODIFY_NAME = 0x3628,
+ CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3624,
+ CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3623,
+ CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362D,
+ CMSG_BATTLE_PET_SET_FLAGS = 0x3631,
+ CMSG_BATTLE_PET_SUMMON = 0x3629,
CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31DF,
CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31DE,
CMSG_BEGIN_TRADE = 0x3157,
@@ -132,55 +132,55 @@ enum OpcodeClient : uint16
CMSG_BLACK_MARKET_BID_ON_ITEM = 0x352F,
CMSG_BLACK_MARKET_OPEN = 0x352D,
CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x352E,
- CMSG_BONUS_ROLL = 0x335C,
- CMSG_BUG_REPORT = 0x3686,
+ CMSG_BONUS_ROLL = 0x335D,
+ CMSG_BUG_REPORT = 0x3688,
CMSG_BUSY_TRADE = 0x3158,
CMSG_BUY_BACK_ITEM = 0x34A4,
CMSG_BUY_BANK_SLOT = 0x34B4,
CMSG_BUY_ITEM = 0x34A3,
CMSG_BUY_REAGENT_BANK = 0x34B5,
- CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36EC,
- CMSG_BUY_WOW_TOKEN_START = 0x36EB,
+ CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36F1,
+ CMSG_BUY_WOW_TOKEN_START = 0x36F0,
CMSG_CAGE_BATTLE_PET = 0x31F0,
- CMSG_CALENDAR_ADD_EVENT = 0x367D,
- CMSG_CALENDAR_COMMUNITY_FILTER = 0x3671,
- CMSG_CALENDAR_COMPLAIN = 0x3679,
- CMSG_CALENDAR_COPY_EVENT = 0x3678,
- CMSG_CALENDAR_EVENT_INVITE = 0x3672,
- CMSG_CALENDAR_EVENT_MODERATOR_STATUS = 0x3676,
- CMSG_CALENDAR_EVENT_RSVP = 0x3674,
- CMSG_CALENDAR_EVENT_SIGN_UP = 0x367B,
- CMSG_CALENDAR_EVENT_STATUS = 0x3675,
- CMSG_CALENDAR_GET = 0x366F,
- CMSG_CALENDAR_GET_EVENT = 0x3670,
- CMSG_CALENDAR_GET_NUM_PENDING = 0x367A,
- CMSG_CALENDAR_REMOVE_EVENT = 0x3677,
- CMSG_CALENDAR_REMOVE_INVITE = 0x3673,
- CMSG_CALENDAR_UPDATE_EVENT = 0x367E,
- CMSG_CANCEL_AURA = 0x31AD,
+ CMSG_CALENDAR_ADD_EVENT = 0x367F,
+ CMSG_CALENDAR_COMMUNITY_FILTER = 0x3673,
+ CMSG_CALENDAR_COMPLAIN = 0x367B,
+ CMSG_CALENDAR_COPY_EVENT = 0x367A,
+ CMSG_CALENDAR_EVENT_INVITE = 0x3674,
+ CMSG_CALENDAR_EVENT_MODERATOR_STATUS = 0x3678,
+ CMSG_CALENDAR_EVENT_RSVP = 0x3676,
+ CMSG_CALENDAR_EVENT_SIGN_UP = 0x367D,
+ CMSG_CALENDAR_EVENT_STATUS = 0x3677,
+ CMSG_CALENDAR_GET = 0x3671,
+ CMSG_CALENDAR_GET_EVENT = 0x3672,
+ CMSG_CALENDAR_GET_NUM_PENDING = 0x367C,
+ CMSG_CALENDAR_REMOVE_EVENT = 0x3679,
+ CMSG_CALENDAR_REMOVE_INVITE = 0x3675,
+ CMSG_CALENDAR_UPDATE_EVENT = 0x3680,
+ CMSG_CANCEL_AURA = 0x31AC,
CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34E8,
- CMSG_CANCEL_CAST = 0x329E,
- CMSG_CANCEL_CHANNELLING = 0x326A,
- CMSG_CANCEL_GROWTH_AURA = 0x326F,
+ CMSG_CANCEL_CAST = 0x329D,
+ CMSG_CANCEL_CHANNELLING = 0x3269,
+ CMSG_CANCEL_GROWTH_AURA = 0x326E,
CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3211,
- CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AC,
- CMSG_CANCEL_MOUNT_AURA = 0x3280,
- CMSG_CANCEL_QUEUED_SPELL = 0x317F,
+ CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AB,
+ CMSG_CANCEL_MOUNT_AURA = 0x327F,
+ CMSG_CANCEL_QUEUED_SPELL = 0x317E,
CMSG_CANCEL_TEMP_ENCHANTMENT = 0x34F3,
CMSG_CANCEL_TRADE = 0x315C,
- CMSG_CAN_DUEL = 0x3662,
- CMSG_CAN_REDEEM_WOW_TOKEN_FOR_BALANCE = 0x370A,
- CMSG_CAST_SPELL = 0x329B,
- CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x308F,
- CMSG_CHALLENGE_MODE_REQUEST_MAP_STATS = 0x308E,
- CMSG_CHANGE_BAG_SLOT_FLAG = 0x3321,
- CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3322,
- CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3303,
- CMSG_CHANGE_SUB_GROUP = 0x364C,
- CMSG_CHARACTER_RENAME_REQUEST = 0x36BF,
- CMSG_CHAR_CUSTOMIZE = 0x368F,
- CMSG_CHAR_DELETE = 0x369C,
- CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3695,
+ CMSG_CAN_DUEL = 0x3664,
+ CMSG_CAN_REDEEM_WOW_TOKEN_FOR_BALANCE = 0x370F,
+ CMSG_CAST_SPELL = 0x329A,
+ CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x3090,
+ CMSG_CHALLENGE_MODE_REQUEST_MAP_STATS = 0x308F,
+ CMSG_CHANGE_BAG_SLOT_FLAG = 0x3320,
+ CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3321,
+ CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3302,
+ CMSG_CHANGE_SUB_GROUP = 0x364E,
+ CMSG_CHARACTER_RENAME_REQUEST = 0x36C4,
+ CMSG_CHAR_CUSTOMIZE = 0x3693,
+ CMSG_CHAR_DELETE = 0x36A0,
+ CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3699,
CMSG_CHAT_ADDON_MESSAGE = 0x37EE,
CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x37EF,
CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x37E3,
@@ -217,197 +217,196 @@ enum OpcodeClient : uint16
CMSG_CHAT_REPORT_FILTERED = 0x37CC,
CMSG_CHAT_REPORT_IGNORED = 0x37CB,
CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE,
- CMSG_CHECK_RAF_EMAIL_ENABLED = 0x36CC,
- CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36EA,
- CMSG_CHOICE_RESPONSE = 0x32A0,
- CMSG_CLEAR_RAID_MARKER = 0x31A5,
+ CMSG_CHECK_RAF_EMAIL_ENABLED = 0x36D1,
+ CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36EF,
+ CMSG_CHOICE_RESPONSE = 0x329F,
+ CMSG_CLEAR_RAID_MARKER = 0x31A4,
CMSG_CLEAR_TRADE_ITEM = 0x315E,
CMSG_CLIENT_PORT_GRAVEYARD = 0x3529,
CMSG_CLOSE_INTERACTION = 0x3493,
- CMSG_CLOSE_QUEST_CHOICE = 0x32A1,
- CMSG_CLUB_INVITE = 0x36FA,
- CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3632,
- CMSG_COMMENTATOR_ENABLE = 0x35F0,
- CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F4,
- CMSG_COMMENTATOR_EXIT_INSTANCE = 0x35F5,
- CMSG_COMMENTATOR_GET_MAP_INFO = 0x35F1,
- CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x35F3,
- CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F2,
- CMSG_COMMENTATOR_START_WARGAME = 0x35EF,
- CMSG_COMPLAINT = 0x366C,
+ CMSG_CLOSE_QUEST_CHOICE = 0x32A0,
+ CMSG_CLUB_INVITE = 0x36FF,
+ CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3634,
+ CMSG_COMMENTATOR_ENABLE = 0x35F1,
+ CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F5,
+ CMSG_COMMENTATOR_EXIT_INSTANCE = 0x35F6,
+ CMSG_COMMENTATOR_GET_MAP_INFO = 0x35F2,
+ CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x35F4,
+ CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F3,
+ CMSG_COMMENTATOR_START_WARGAME = 0x35F0,
+ CMSG_COMPLAINT = 0x366E,
CMSG_COMPLETE_CINEMATIC = 0x3547,
CMSG_COMPLETE_MOVIE = 0x34DE,
- CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AA,
+ CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31A9,
CMSG_CONFIRM_RESPEC_WIPE = 0x320B,
CMSG_CONNECT_TO_FAILED = 0x35D4,
CMSG_CONTRIBUTION_CONTRIBUTE = 0x3557,
CMSG_CONTRIBUTION_GET_STATE = 0x3558,
CMSG_CONVERSATION_LINE_STARTED = 0x3548,
- CMSG_CONVERT_CONSUMPTION_TIME = 0x36FD,
- CMSG_CONVERT_RAID = 0x364E,
- CMSG_CREATE_CHARACTER = 0x3643,
- CMSG_CREATE_SHIPMENT = 0x32EF,
- CMSG_DB_QUERY_BULK = 0x35E4,
+ CMSG_CONVERT_CONSUMPTION_TIME = 0x3702,
+ CMSG_CONVERT_RAID = 0x3650,
+ CMSG_CREATE_CHARACTER = 0x3645,
+ CMSG_CREATE_SHIPMENT = 0x32EE,
+ CMSG_DB_QUERY_BULK = 0x35E5,
CMSG_DECLINE_GUILD_INVITES = 0x3520,
CMSG_DECLINE_PETITION = 0x3536,
CMSG_DELETE_EQUIPMENT_SET = 0x350D,
- CMSG_DEL_FRIEND = 0x36D1,
- CMSG_DEL_IGNORE = 0x36D5,
- CMSG_DEPOSIT_REAGENT_BANK = 0x332A,
- CMSG_DESTROY_ITEM = 0x3292,
- CMSG_DF_BOOT_PLAYER_VOTE = 0x3615,
- CMSG_DF_GET_JOIN_STATUS = 0x3613,
- CMSG_DF_GET_SYSTEM_INFO = 0x3612,
- CMSG_DF_JOIN = 0x3608,
- CMSG_DF_LEAVE = 0x3611,
- CMSG_DF_PROPOSAL_RESPONSE = 0x3607,
- CMSG_DF_READY_CHECK_RESPONSE = 0x3618,
- CMSG_DF_SET_ROLES = 0x3614,
- CMSG_DF_TELEPORT = 0x3616,
+ CMSG_DEL_FRIEND = 0x36D6,
+ CMSG_DEL_IGNORE = 0x36DA,
+ CMSG_DEPOSIT_REAGENT_BANK = 0x3329,
+ CMSG_DESTROY_ITEM = 0x3291,
+ CMSG_DF_BOOT_PLAYER_VOTE = 0x3616,
+ CMSG_DF_GET_JOIN_STATUS = 0x3614,
+ CMSG_DF_GET_SYSTEM_INFO = 0x3613,
+ CMSG_DF_JOIN = 0x3609,
+ CMSG_DF_LEAVE = 0x3612,
+ CMSG_DF_PROPOSAL_RESPONSE = 0x3608,
+ CMSG_DF_READY_CHECK_RESPONSE = 0x3619,
+ CMSG_DF_SET_ROLES = 0x3615,
+ CMSG_DF_TELEPORT = 0x3617,
CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A3C,
CMSG_DISMISS_CRITTER = 0x34FC,
CMSG_DO_MASTER_LOOT_ROLL = 0x3210,
- CMSG_DO_READY_CHECK = 0x3633,
+ CMSG_DO_READY_CHECK = 0x3635,
CMSG_DUEL_RESPONSE = 0x34E3,
- CMSG_EJECT_PASSENGER = 0x3239,
+ CMSG_EJECT_PASSENGER = 0x323A,
CMSG_EMOTE = 0x3543,
CMSG_ENABLE_ENCRYPTION_ACK = 0x3767,
CMSG_ENABLE_NAGLE = 0x376B,
CMSG_ENABLE_TAXI_NODE = 0x34A9,
- CMSG_ENGINE_SURVEY = 0x36E4,
- CMSG_ENUM_CHARACTERS = 0x35E8,
- CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DE,
+ CMSG_ENGINE_SURVEY = 0x36E9,
+ CMSG_ENUM_CHARACTERS = 0x35E9,
+ CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36E3,
CMSG_FAR_SIGHT = 0x34E9,
CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B0,
CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31AF,
CMSG_GAME_OBJ_REPORT_USE = 0x34F0,
CMSG_GAME_OBJ_USE = 0x34EF,
- CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32DA,
- CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32CB,
- CMSG_GARRISON_CHECK_UPGRADEABLE = 0x331D,
- CMSG_GARRISON_COMPLETE_MISSION = 0x3310,
- CMSG_GARRISON_GENERATE_RECRUITS = 0x32DD,
- CMSG_GARRISON_GET_BUILDING_LANDMARKS = 0x32EB,
- CMSG_GARRISON_GET_MISSION_REWARD = 0x3341,
- CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3312,
- CMSG_GARRISON_PURCHASE_BUILDING = 0x32C7,
- CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32DF,
- CMSG_GARRISON_REMOVE_FOLLOWER = 0x3307,
- CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32DB,
- CMSG_GARRISON_RENAME_FOLLOWER = 0x32DC,
- CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32C6,
- CMSG_GARRISON_REQUEST_CLASS_SPEC_CATEGORY_INFO = 0x32E4,
- CMSG_GARRISON_REQUEST_LANDING_PAGE_SHIPMENT_INFO = 0x32EE,
- CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x32ED,
- CMSG_GARRISON_RESEARCH_TALENT = 0x32E0,
- CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32C8,
- CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32D8,
- CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32D4,
- CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32DE,
- CMSG_GARRISON_START_MISSION = 0x330F,
- CMSG_GARRISON_SWAP_BUILDINGS = 0x32CC,
- CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7,
- CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B7,
- CMSG_GET_CHALLENGE_MODE_REWARDS = 0x3683,
- CMSG_GET_GARRISON_INFO = 0x32C1,
+ CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32D9,
+ CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32CA,
+ CMSG_GARRISON_CHECK_UPGRADEABLE = 0x331C,
+ CMSG_GARRISON_COMPLETE_MISSION = 0x330F,
+ CMSG_GARRISON_GENERATE_RECRUITS = 0x32DC,
+ CMSG_GARRISON_GET_BUILDING_LANDMARKS = 0x32EA,
+ CMSG_GARRISON_GET_MISSION_REWARD = 0x3342,
+ CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3311,
+ CMSG_GARRISON_PURCHASE_BUILDING = 0x32C6,
+ CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32DE,
+ CMSG_GARRISON_REMOVE_FOLLOWER = 0x3306,
+ CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32DA,
+ CMSG_GARRISON_RENAME_FOLLOWER = 0x32DB,
+ CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32C5,
+ CMSG_GARRISON_REQUEST_CLASS_SPEC_CATEGORY_INFO = 0x32E3,
+ CMSG_GARRISON_REQUEST_LANDING_PAGE_SHIPMENT_INFO = 0x32ED,
+ CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x32EC,
+ CMSG_GARRISON_RESEARCH_TALENT = 0x32DF,
+ CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32C7,
+ CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32D7,
+ CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32D3,
+ CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32DD,
+ CMSG_GARRISON_START_MISSION = 0x330E,
+ CMSG_GARRISON_SWAP_BUILDINGS = 0x32CB,
+ CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E8,
+ CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36BA,
+ CMSG_GET_CHALLENGE_MODE_REWARDS = 0x3685,
+ CMSG_GET_GARRISON_INFO = 0x32C0,
CMSG_GET_ITEM_PURCHASE_DATA = 0x3531,
- CMSG_GET_MIRROR_IMAGE_DATA = 0x3296,
- CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE,
- CMSG_GET_REMAINING_GAME_TIME = 0x36ED,
- CMSG_GET_TROPHY_LIST = 0x3300,
- CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36E0,
- CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3693,
- CMSG_GM_TICKET_GET_CASE_STATUS = 0x3692,
- CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3691,
+ CMSG_GET_MIRROR_IMAGE_DATA = 0x3295,
+ CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EF,
+ CMSG_GET_REMAINING_GAME_TIME = 0x36F2,
+ CMSG_GET_TROPHY_LIST = 0x32FF,
+ CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36E5,
+ CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3697,
+ CMSG_GM_TICKET_GET_CASE_STATUS = 0x3696,
+ CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3695,
CMSG_GOSSIP_SELECT_OPTION = 0x3494,
CMSG_GRANT_LEVEL = 0x34F8,
- CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308D,
- CMSG_GUILD_ADD_RANK = 0x3064,
- CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x305F,
- CMSG_GUILD_AUTO_DECLINE_INVITATION = 0x3061,
+ CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308E,
+ CMSG_GUILD_ADD_RANK = 0x3065,
+ CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x3060,
+ CMSG_GUILD_AUTO_DECLINE_INVITATION = 0x3062,
CMSG_GUILD_BANK_ACTIVATE = 0x34B6,
CMSG_GUILD_BANK_BUY_TAB = 0x34C4,
CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x34C6,
- CMSG_GUILD_BANK_LOG_QUERY = 0x3082,
+ CMSG_GUILD_BANK_LOG_QUERY = 0x3083,
CMSG_GUILD_BANK_QUERY_TAB = 0x34C3,
- CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x3083,
- CMSG_GUILD_BANK_SET_TAB_TEXT = 0x3086,
- CMSG_GUILD_BANK_TEXT_QUERY = 0x3087,
+ CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x3084,
+ CMSG_GUILD_BANK_SET_TAB_TEXT = 0x3087,
+ CMSG_GUILD_BANK_TEXT_QUERY = 0x3088,
CMSG_GUILD_BANK_UPDATE_TAB = 0x34C5,
CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x34C7,
- CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x307B,
- CMSG_GUILD_CHANGE_NAME_REQUEST = 0x307E,
- CMSG_GUILD_DECLINE_INVITATION = 0x3060,
- CMSG_GUILD_DELETE = 0x3068,
- CMSG_GUILD_DELETE_RANK = 0x3065,
- CMSG_GUILD_DEMOTE_MEMBER = 0x305E,
- CMSG_GUILD_EVENT_LOG_QUERY = 0x3085,
- CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x3071,
- CMSG_GUILD_GET_RANKS = 0x306D,
- CMSG_GUILD_GET_ROSTER = 0x3073,
- CMSG_GUILD_INVITE_BY_NAME = 0x3606,
- CMSG_GUILD_LEAVE = 0x3062,
- CMSG_GUILD_MEMBER_SEND_SOR_REQUEST = 0x308C,
- CMSG_GUILD_NEWS_UPDATE_STICKY = 0x306E,
- CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x3063,
- CMSG_GUILD_PERMISSIONS_QUERY = 0x3084,
- CMSG_GUILD_PROMOTE_MEMBER = 0x305D,
- CMSG_GUILD_QUERY_MEMBERS_FOR_RECIPE = 0x306B,
- CMSG_GUILD_QUERY_MEMBER_RECIPES = 0x3069,
- CMSG_GUILD_QUERY_NEWS = 0x306C,
- CMSG_GUILD_QUERY_RECIPES = 0x306A,
- CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3088,
- CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x306F,
- CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3070,
- CMSG_GUILD_SET_GUILD_MASTER = 0x36C6,
- CMSG_GUILD_SET_MEMBER_NOTE = 0x3072,
- CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3067,
- CMSG_GUILD_SHIFT_RANK = 0x3066,
- CMSG_GUILD_UPDATE_INFO_TEXT = 0x3075,
- CMSG_GUILD_UPDATE_MOTD_TEXT = 0x3074,
+ CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x307C,
+ CMSG_GUILD_CHANGE_NAME_REQUEST = 0x307F,
+ CMSG_GUILD_DECLINE_INVITATION = 0x3061,
+ CMSG_GUILD_DELETE = 0x3069,
+ CMSG_GUILD_DELETE_RANK = 0x3066,
+ CMSG_GUILD_DEMOTE_MEMBER = 0x305F,
+ CMSG_GUILD_EVENT_LOG_QUERY = 0x3086,
+ CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x3072,
+ CMSG_GUILD_GET_RANKS = 0x306E,
+ CMSG_GUILD_GET_ROSTER = 0x3074,
+ CMSG_GUILD_INVITE_BY_NAME = 0x3607,
+ CMSG_GUILD_LEAVE = 0x3063,
+ CMSG_GUILD_MEMBER_SEND_SOR_REQUEST = 0x308D,
+ CMSG_GUILD_NEWS_UPDATE_STICKY = 0x306F,
+ CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x3064,
+ CMSG_GUILD_PERMISSIONS_QUERY = 0x3085,
+ CMSG_GUILD_PROMOTE_MEMBER = 0x305E,
+ CMSG_GUILD_QUERY_MEMBERS_FOR_RECIPE = 0x306C,
+ CMSG_GUILD_QUERY_MEMBER_RECIPES = 0x306A,
+ CMSG_GUILD_QUERY_NEWS = 0x306D,
+ CMSG_GUILD_QUERY_RECIPES = 0x306B,
+ CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3089,
+ CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x3070,
+ CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3071,
+ CMSG_GUILD_SET_GUILD_MASTER = 0x36CB,
+ CMSG_GUILD_SET_MEMBER_NOTE = 0x3073,
+ CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3068,
+ CMSG_GUILD_SHIFT_RANK = 0x3067,
+ CMSG_GUILD_UPDATE_INFO_TEXT = 0x3076,
+ CMSG_GUILD_UPDATE_MOTD_TEXT = 0x3075,
CMSG_HEARTH_AND_RESURRECT = 0x3509,
- CMSG_HOTFIX_REQUEST = 0x35E5,
+ CMSG_HOTFIX_REQUEST = 0x35E6,
CMSG_IGNORE_TRADE = 0x3159,
CMSG_INITIATE_ROLE_POLL = 0x35DA,
CMSG_INITIATE_TRADE = 0x3156,
CMSG_INSPECT = 0x352B,
- CMSG_INSPECT_PVP = 0x36A2,
CMSG_INSTANCE_LOCK_RESPONSE = 0x350E,
- CMSG_ISLAND_QUEUE = 0x3387,
+ CMSG_ISLAND_QUEUE = 0x3388,
CMSG_ITEM_PURCHASE_REFUND = 0x3532,
- CMSG_ITEM_TEXT_QUERY = 0x331E,
+ CMSG_ITEM_TEXT_QUERY = 0x331D,
CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DC,
CMSG_JOIN_RATED_BATTLEGROUND = 0x3177,
- CMSG_KEEP_ALIVE = 0x367F,
+ CMSG_KEEP_ALIVE = 0x3681,
CMSG_KEYBOUND_OVERRIDE = 0x3222,
CMSG_LEARN_PVP_TALENTS = 0x3556,
CMSG_LEARN_TALENTS = 0x3554,
- CMSG_LEAVE_GROUP = 0x3649,
+ CMSG_LEAVE_GROUP = 0x364B,
CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31DD,
- CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360C,
- CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360D,
- CMSG_LFG_LIST_DECLINE_APPLICANT = 0x360E,
- CMSG_LFG_LIST_GET_STATUS = 0x360A,
- CMSG_LFG_LIST_INVITE_APPLICANT = 0x360F,
- CMSG_LFG_LIST_INVITE_RESPONSE = 0x3610,
- CMSG_LFG_LIST_JOIN = 0x3359,
- CMSG_LFG_LIST_LEAVE = 0x3609,
- CMSG_LFG_LIST_SEARCH = 0x360B,
- CMSG_LFG_LIST_UPDATE_REQUEST = 0x335A,
- CMSG_LF_GUILD_ADD_RECRUIT = 0x361B,
- CMSG_LF_GUILD_BROWSE = 0x361D,
- CMSG_LF_GUILD_DECLINE_RECRUIT = 0x3078,
- CMSG_LF_GUILD_GET_APPLICATIONS = 0x3079,
- CMSG_LF_GUILD_GET_GUILD_POST = 0x3076,
- CMSG_LF_GUILD_GET_RECRUITS = 0x3077,
- CMSG_LF_GUILD_REMOVE_RECRUIT = 0x307A,
- CMSG_LF_GUILD_SET_GUILD_POST = 0x361C,
+ CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360D,
+ CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360E,
+ CMSG_LFG_LIST_DECLINE_APPLICANT = 0x360F,
+ CMSG_LFG_LIST_GET_STATUS = 0x360B,
+ CMSG_LFG_LIST_INVITE_APPLICANT = 0x3610,
+ CMSG_LFG_LIST_INVITE_RESPONSE = 0x3611,
+ CMSG_LFG_LIST_JOIN = 0x335A,
+ CMSG_LFG_LIST_LEAVE = 0x360A,
+ CMSG_LFG_LIST_SEARCH = 0x360C,
+ CMSG_LFG_LIST_UPDATE_REQUEST = 0x335B,
+ CMSG_LF_GUILD_ADD_RECRUIT = 0x361C,
+ CMSG_LF_GUILD_BROWSE = 0x361E,
+ CMSG_LF_GUILD_DECLINE_RECRUIT = 0x3079,
+ CMSG_LF_GUILD_GET_APPLICATIONS = 0x307A,
+ CMSG_LF_GUILD_GET_GUILD_POST = 0x3077,
+ CMSG_LF_GUILD_GET_RECRUITS = 0x3078,
+ CMSG_LF_GUILD_REMOVE_RECRUIT = 0x307B,
+ CMSG_LF_GUILD_SET_GUILD_POST = 0x361D,
CMSG_LIST_INVENTORY = 0x34A1,
- CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36BA,
- CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B9,
- CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B8,
- CMSG_LOADING_SCREEN_NOTIFY = 0x35F8,
- CMSG_LOAD_SELECTED_TROPHY = 0x3301,
+ CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36BD,
+ CMSG_LIVE_REGION_CHARACTER_COPY = 0x36BC,
+ CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36BB,
+ CMSG_LOADING_SCREEN_NOTIFY = 0x35F9,
+ CMSG_LOAD_SELECTED_TROPHY = 0x3300,
CMSG_LOGOUT_CANCEL = 0x34D9,
CMSG_LOGOUT_INSTANT = 0x34DA,
CMSG_LOGOUT_REQUEST = 0x34D7,
@@ -418,22 +417,22 @@ enum OpcodeClient : uint16
CMSG_LOOT_RELEASE = 0x3212,
CMSG_LOOT_ROLL = 0x3213,
CMSG_LOOT_UNIT = 0x320C,
- CMSG_LOW_LEVEL_RAID1 = 0x36A0,
+ CMSG_LOW_LEVEL_RAID1 = 0x36A4,
CMSG_LOW_LEVEL_RAID2 = 0x3515,
CMSG_MAIL_CREATE_TEXT_ITEM = 0x353D,
CMSG_MAIL_DELETE = 0x3224,
CMSG_MAIL_GET_LIST = 0x3538,
CMSG_MAIL_MARK_AS_READ = 0x353C,
- CMSG_MAIL_RETURN_TO_SENDER = 0x3655,
+ CMSG_MAIL_RETURN_TO_SENDER = 0x3657,
CMSG_MAIL_TAKE_ITEM = 0x353A,
CMSG_MAIL_TAKE_MONEY = 0x3539,
CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3227,
CMSG_MASTER_LOOT_ITEM = 0x320F,
- CMSG_MINIMAP_PING = 0x364B,
- CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318A,
+ CMSG_MINIMAP_PING = 0x364D,
+ CMSG_MISSILE_TRAJECTORY_COLLISION = 0x3189,
CMSG_MOUNT_CLEAR_FANFARE = 0x312D,
- CMSG_MOUNT_SET_FAVORITE = 0x3631,
- CMSG_MOUNT_SPECIAL_ANIM = 0x3281,
+ CMSG_MOUNT_SET_FAVORITE = 0x3633,
+ CMSG_MOUNT_SPECIAL_ANIM = 0x3280,
CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A12,
CMSG_MOVE_CHANGE_TRANSPORT = 0x3A2C,
CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A31,
@@ -446,11 +445,11 @@ enum OpcodeClient : uint16
CMSG_MOVE_FEATHER_FALL_ACK = 0x3A19,
CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3A2B,
CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3A2A,
- CMSG_MOVE_FORCE_MOVEMENT_FORCE_SPEED_CHANGE_ACK = 0x3A3D,
CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3A2F,
CMSG_MOVE_FORCE_ROOT_ACK = 0x3A0B,
CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x3A09,
CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x3A08,
+ CMSG_MOVE_FORCE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x3A3D,
CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK = 0x3A1F,
CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK = 0x3A0A,
CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x3A20,
@@ -464,6 +463,7 @@ enum OpcodeClient : uint16
CMSG_MOVE_KNOCK_BACK_ACK = 0x3A0F,
CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x3A14,
CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x3A13,
+ CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE = 0x3A3F,
CMSG_MOVE_SET_CAN_FLY_ACK = 0x3A24,
CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x3A22,
CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x3A36,
@@ -495,71 +495,72 @@ enum OpcodeClient : uint16
CMSG_MOVE_TELEPORT_ACK = 0x39F8,
CMSG_MOVE_TIME_SKIPPED = 0x3A18,
CMSG_MOVE_TOGGLE_COLLISION_CHEAT = 0x3A05,
+ CMSG_MOVE_UPDATE_FALL_SPEED = 0x3A17,
CMSG_MOVE_WATER_WALK_ACK = 0x3A1A,
CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D2,
CMSG_NEXT_CINEMATIC_CAMERA = 0x3546,
- CMSG_OBJECT_UPDATE_FAILED = 0x3180,
- CMSG_OBJECT_UPDATE_RESCUED = 0x3181,
- CMSG_OFFER_PETITION = 0x36B0,
+ CMSG_OBJECT_UPDATE_FAILED = 0x317F,
+ CMSG_OBJECT_UPDATE_RESCUED = 0x3180,
+ CMSG_OFFER_PETITION = 0x36B3,
CMSG_OPENING_CINEMATIC = 0x3545,
- CMSG_OPEN_ITEM = 0x331F,
- CMSG_OPEN_MISSION_NPC = 0x32E6,
- CMSG_OPEN_SHIPMENT_NPC = 0x32EC,
- CMSG_OPEN_TRADESKILL_NPC = 0x32F7,
+ CMSG_OPEN_ITEM = 0x331E,
+ CMSG_OPEN_MISSION_NPC = 0x32E5,
+ CMSG_OPEN_SHIPMENT_NPC = 0x32EB,
+ CMSG_OPEN_TRADESKILL_NPC = 0x32F6,
CMSG_OPT_OUT_OF_LOOT = 0x34F7,
- CMSG_PARTY_INVITE = 0x3602,
- CMSG_PARTY_INVITE_RESPONSE = 0x3603,
- CMSG_PARTY_UNINVITE = 0x3647,
+ CMSG_PARTY_INVITE = 0x3603,
+ CMSG_PARTY_INVITE_RESPONSE = 0x3604,
+ CMSG_PARTY_UNINVITE = 0x3649,
CMSG_PETITION_BUY = 0x34C9,
- CMSG_PETITION_RENAME_GUILD = 0x36C7,
+ CMSG_PETITION_RENAME_GUILD = 0x36CC,
CMSG_PETITION_SHOW_LIST = 0x34C8,
CMSG_PETITION_SHOW_SIGNATURES = 0x34CA,
CMSG_PET_ABANDON = 0x348D,
CMSG_PET_ACTION = 0x348B,
CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E1,
- CMSG_PET_BATTLE_INPUT = 0x3640,
+ CMSG_PET_BATTLE_INPUT = 0x3642,
CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3223,
CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E0,
- CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3641,
+ CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3643,
CMSG_PET_BATTLE_REQUEST_PVP = 0x31DA,
CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DB,
CMSG_PET_BATTLE_REQUEST_WILD = 0x31D8,
CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E2,
CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31D9,
CMSG_PET_CANCEL_AURA = 0x348E,
- CMSG_PET_CAST_SPELL = 0x329A,
- CMSG_PET_RENAME = 0x3685,
+ CMSG_PET_CAST_SPELL = 0x3299,
+ CMSG_PET_RENAME = 0x3687,
CMSG_PET_SET_ACTION = 0x348A,
CMSG_PET_SPELL_AUTOCAST = 0x348F,
CMSG_PET_STOP_ATTACK = 0x348C,
CMSG_PING = 0x3768,
- CMSG_PLAYER_LOGIN = 0x35EA,
+ CMSG_PLAYER_LOGIN = 0x35EB,
CMSG_PROTOCOL_MISMATCH = 0x376E,
CMSG_PUSH_QUEST_TO_PARTY = 0x349F,
- CMSG_PVP_LOG_DATA = 0x317B,
- CMSG_QUERY_BATTLE_PET_NAME = 0x3276,
- CMSG_QUERY_COMMUNITY_NAME = 0x368C,
- CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3660,
- CMSG_QUERY_CORPSE_TRANSPORT = 0x3661,
- CMSG_QUERY_COUNTDOWN_TIMER = 0x31A8,
- CMSG_QUERY_CREATURE = 0x3270,
- CMSG_QUERY_GAME_OBJECT = 0x3271,
- CMSG_QUERY_GARRISON_CREATURE_NAME = 0x3277,
- CMSG_QUERY_GUILD_INFO = 0x368E,
+ CMSG_PVP_LOG_DATA = 0x317A,
+ CMSG_QUERY_BATTLE_PET_NAME = 0x3275,
+ CMSG_QUERY_COMMUNITY_NAME = 0x368E,
+ CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3662,
+ CMSG_QUERY_CORPSE_TRANSPORT = 0x3663,
+ CMSG_QUERY_COUNTDOWN_TIMER = 0x31A7,
+ CMSG_QUERY_CREATURE = 0x326F,
+ CMSG_QUERY_GAME_OBJECT = 0x3270,
+ CMSG_QUERY_GARRISON_CREATURE_NAME = 0x3276,
+ CMSG_QUERY_GUILD_INFO = 0x3691,
CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3503,
CMSG_QUERY_NEXT_MAIL_TIME = 0x353B,
- CMSG_QUERY_NPC_TEXT = 0x3272,
- CMSG_QUERY_PAGE_TEXT = 0x3274,
- CMSG_QUERY_PETITION = 0x3278,
- CMSG_QUERY_PET_NAME = 0x3275,
- CMSG_QUERY_PLAYER_NAME = 0x368B,
+ CMSG_QUERY_NPC_TEXT = 0x3271,
+ CMSG_QUERY_PAGE_TEXT = 0x3273,
+ CMSG_QUERY_PETITION = 0x3277,
+ CMSG_QUERY_PET_NAME = 0x3274,
+ CMSG_QUERY_PLAYER_NAME = 0x368D,
CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3174,
- CMSG_QUERY_QUEST_INFO = 0x3273,
- CMSG_QUERY_REALM_NAME = 0x368D,
- CMSG_QUERY_SCENARIO_POI = 0x3656,
+ CMSG_QUERY_QUEST_INFO = 0x3272,
+ CMSG_QUERY_REALM_NAME = 0x3690,
+ CMSG_QUERY_SCENARIO_POI = 0x3658,
CMSG_QUERY_TIME = 0x34D6,
- CMSG_QUERY_TREASURE_PICKER = 0x3343,
- CMSG_QUERY_VOID_STORAGE = 0x31A1,
+ CMSG_QUERY_TREASURE_PICKER = 0x3344,
+ CMSG_QUERY_VOID_STORAGE = 0x31A0,
CMSG_QUEST_CONFIRM_ACCEPT = 0x349E,
CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x3498,
CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x349A,
@@ -570,147 +571,150 @@ enum OpcodeClient : uint16
CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x349D,
CMSG_QUEST_GIVER_STATUS_QUERY = 0x349C,
CMSG_QUEST_LOG_REMOVE_QUEST = 0x3530,
- CMSG_QUEST_POI_QUERY = 0x36B1,
+ CMSG_QUEST_POI_QUERY = 0x36B4,
CMSG_QUEST_PUSH_RESULT = 0x34A0,
CMSG_QUEUED_MESSAGES_END = 0x376C,
- CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3709,
- CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3708,
- CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3707,
- CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3706,
- CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E5,
- CMSG_RANDOM_ROLL = 0x3654,
- CMSG_READY_CHECK_RESPONSE = 0x3634,
- CMSG_READ_ITEM = 0x3320,
+ CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x370E,
+ CMSG_QUICK_JOIN_REQUEST_INVITE = 0x370D,
+ CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x370C,
+ CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x370B,
+ CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36EA,
+ CMSG_RANDOM_ROLL = 0x3656,
+ CMSG_READY_CHECK_RESPONSE = 0x3636,
+ CMSG_READ_ITEM = 0x331F,
CMSG_RECLAIM_CORPSE = 0x34DC,
- CMSG_RECRUIT_A_FRIEND = 0x36CD,
- CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36EF,
- CMSG_REDEEM_WOW_TOKEN_START = 0x36EE,
- CMSG_REMOVE_NEW_ITEM = 0x3346,
- CMSG_REORDER_CHARACTERS = 0x35E9,
+ CMSG_RECRUIT_A_FRIEND = 0x36D2,
+ CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36F4,
+ CMSG_REDEEM_WOW_TOKEN_START = 0x36F3,
+ CMSG_REMOVE_NEW_ITEM = 0x3347,
+ CMSG_REORDER_CHARACTERS = 0x35EA,
CMSG_REPAIR_ITEM = 0x34ED,
- CMSG_REPLACE_TROPHY = 0x3302,
+ CMSG_REPLACE_TROPHY = 0x3301,
CMSG_REPOP_REQUEST = 0x3528,
- CMSG_REPORT_CLIENT_VARIABLES = 0x3703,
- CMSG_REPORT_ENABLED_ADDONS = 0x3702,
- CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3704,
+ CMSG_REPORT_CLIENT_VARIABLES = 0x3708,
+ CMSG_REPORT_ENABLED_ADDONS = 0x3707,
+ CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3709,
CMSG_REPORT_PVP_PLAYER_AFK = 0x34F5,
- CMSG_REQUEST_ACCOUNT_DATA = 0x3696,
- CMSG_REQUEST_AREA_POI_UPDATE = 0x3345,
- CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC,
- CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317D,
+ CMSG_REPORT_SERVER_LAG = 0x338D,
+ CMSG_REQUEST_ACCOUNT_DATA = 0x369A,
+ CMSG_REQUEST_AREA_POI_UPDATE = 0x3346,
+ CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DD,
+ CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317C,
CMSG_REQUEST_CEMETERY_LIST = 0x3175,
CMSG_REQUEST_CHALLENGE_MODE_AFFIXES = 0x3205,
- CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32B3,
- CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO = 0x36FC,
+ CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3692,
+ CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32B2,
+ CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO = 0x3701,
CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x352C,
CMSG_REQUEST_FORCED_REACTIONS = 0x3207,
- CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A7,
- CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A6,
- CMSG_REQUEST_HONOR_STATS = 0x317A,
- CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32A3,
- CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7,
- CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3653,
+ CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A6,
+ CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A5,
+ CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32A2,
+ CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F8,
+ CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3655,
CMSG_REQUEST_PET_INFO = 0x3490,
- CMSG_REQUEST_PLAYED_TIME = 0x327B,
- CMSG_REQUEST_PVP_BRAWL_INFO = 0x3195,
- CMSG_REQUEST_PVP_REWARDS = 0x3194,
- CMSG_REQUEST_RAID_INFO = 0x36C8,
- CMSG_REQUEST_RATED_BATTLEFIELD_INFO = 0x35E3,
+ CMSG_REQUEST_PLAYED_TIME = 0x327A,
+ CMSG_REQUEST_PVP_BRAWL_INFO = 0x3194,
+ CMSG_REQUEST_PVP_REWARDS = 0x3193,
+ CMSG_REQUEST_QUEST_LINES_FOR_MAP = 0x3389,
+ CMSG_REQUEST_RAID_INFO = 0x36CD,
+ CMSG_REQUEST_RATED_BATTLEFIELD_INFO = 0x35E4,
+ CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x309B,
CMSG_REQUEST_RESEARCH_HISTORY = 0x3167,
CMSG_REQUEST_STABLED_PETS = 0x3491,
- CMSG_REQUEST_VEHICLE_EXIT = 0x3234,
- CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3236,
- CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3235,
- CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3237,
- CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3344,
- CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36E7,
+ CMSG_REQUEST_VEHICLE_EXIT = 0x3235,
+ CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3237,
+ CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3236,
+ CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3238,
+ CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3345,
+ CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36EC,
CMSG_RESET_CHALLENGE_MODE = 0x3203,
CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3204,
- CMSG_RESET_INSTANCES = 0x3668,
- CMSG_RESURRECT_RESPONSE = 0x3684,
- CMSG_REVERT_MONUMENT_APPEARANCE = 0x3304,
- CMSG_RIDE_VEHICLE_INTERACT = 0x3238,
- CMSG_SAVE_CUF_PROFILES = 0x318B,
+ CMSG_RESET_INSTANCES = 0x366A,
+ CMSG_RESURRECT_RESPONSE = 0x3686,
+ CMSG_REVERT_MONUMENT_APPEARANCE = 0x3303,
+ CMSG_RIDE_VEHICLE_INTERACT = 0x3239,
+ CMSG_SAVE_CUF_PROFILES = 0x318A,
CMSG_SAVE_EQUIPMENT_SET = 0x350C,
- CMSG_SAVE_GUILD_EMBLEM = 0x32A7,
+ CMSG_SAVE_GUILD_EMBLEM = 0x32A6,
CMSG_SCENE_PLAYBACK_CANCELED = 0x321F,
CMSG_SCENE_PLAYBACK_COMPLETE = 0x321E,
CMSG_SCENE_TRIGGER_EVENT = 0x3220,
CMSG_SELF_RES = 0x3533,
CMSG_SELL_ITEM = 0x34A2,
- CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36E9,
- CMSG_SELL_WOW_TOKEN_START = 0x36E8,
- CMSG_SEND_CONTACT_LIST = 0x36CF,
- CMSG_SEND_MAIL = 0x35FA,
- CMSG_SEND_SOR_REQUEST_VIA_ADDRESS = 0x3620,
+ CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36EE,
+ CMSG_SELL_WOW_TOKEN_START = 0x36ED,
+ CMSG_SEND_CONTACT_LIST = 0x36D4,
+ CMSG_SEND_MAIL = 0x35FB,
+ CMSG_SEND_SOR_REQUEST_VIA_ADDRESS = 0x3621,
CMSG_SEND_TEXT_EMOTE = 0x3488,
CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3225,
CMSG_SET_ACTION_BAR_TOGGLES = 0x3534,
- CMSG_SET_ACTION_BUTTON = 0x3635,
+ CMSG_SET_ACTION_BUTTON = 0x3637,
CMSG_SET_ACTIVE_MOVER = 0x3A37,
- CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32B4,
- CMSG_SET_ASSISTANT_LEADER = 0x364F,
- CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3323,
- CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3324,
- CMSG_SET_CONTACT_NOTES = 0x36D2,
+ CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32B3,
+ CMSG_SET_ASSISTANT_LEADER = 0x3651,
+ CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3322,
+ CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3323,
+ CMSG_SET_CONTACT_NOTES = 0x36D7,
CMSG_SET_CURRENCY_FLAGS = 0x3169,
CMSG_SET_DIFFICULTY_ID = 0x3221,
- CMSG_SET_DUNGEON_DIFFICULTY = 0x3682,
- CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3617,
+ CMSG_SET_DUNGEON_DIFFICULTY = 0x3684,
+ CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3618,
CMSG_SET_FACTION_AT_WAR = 0x34DF,
CMSG_SET_FACTION_INACTIVE = 0x34E1,
CMSG_SET_FACTION_NOT_AT_WAR = 0x34E0,
CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31B8,
- CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3326,
- CMSG_SET_LFG_BONUS_FACTION_ID = 0x32A2,
- CMSG_SET_LOOT_METHOD = 0x3648,
+ CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3325,
+ CMSG_SET_LFG_BONUS_FACTION_ID = 0x32A1,
+ CMSG_SET_LOOT_METHOD = 0x364A,
CMSG_SET_LOOT_SPECIALIZATION = 0x3541,
- CMSG_SET_PARTY_ASSIGNMENT = 0x3651,
- CMSG_SET_PARTY_LEADER = 0x364A,
+ CMSG_SET_PARTY_ASSIGNMENT = 0x3653,
+ CMSG_SET_PARTY_LEADER = 0x364C,
CMSG_SET_PET_SLOT = 0x3168,
- CMSG_SET_PLAYER_DECLINED_NAMES = 0x368A,
+ CMSG_SET_PLAYER_DECLINED_NAMES = 0x368C,
CMSG_SET_PREFERRED_CEMETERY = 0x3176,
- CMSG_SET_PVP = 0x32AB,
- CMSG_SET_RAID_DIFFICULTY = 0x36DC,
+ CMSG_SET_PVP = 0x32AA,
+ CMSG_SET_RAID_DIFFICULTY = 0x36E1,
CMSG_SET_ROLE = 0x35D9,
- CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3688,
+ CMSG_SET_SAVED_INSTANCE_EXTEND = 0x368A,
CMSG_SET_SELECTION = 0x352A,
CMSG_SET_SHEATHED = 0x3489,
- CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3325,
+ CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3324,
CMSG_SET_TAXI_BENCHMARK_MODE = 0x34F4,
- CMSG_SET_TITLE = 0x327F,
+ CMSG_SET_TITLE = 0x327E,
CMSG_SET_TRADE_CURRENCY = 0x3160,
CMSG_SET_TRADE_GOLD = 0x315F,
CMSG_SET_TRADE_ITEM = 0x315D,
- CMSG_SET_USING_PARTY_GARRISON = 0x32E8,
- CMSG_SET_WAR_MODE = 0x32AC,
+ CMSG_SET_USING_PARTY_GARRISON = 0x32E7,
+ CMSG_SET_WAR_MODE = 0x32AB,
CMSG_SET_WATCHED_FACTION = 0x34E2,
- CMSG_SHOW_TRADE_SKILL = 0x36C0,
+ CMSG_SHOW_TRADE_SKILL = 0x36C5,
CMSG_SIGN_PETITION = 0x3535,
- CMSG_SILENCE_PARTY_TALKER = 0x3652,
+ CMSG_SILENCE_PARTY_TALKER = 0x3654,
CMSG_SOCKET_GEMS = 0x34EC,
- CMSG_SORT_BAGS = 0x3327,
- CMSG_SORT_BANK_BAGS = 0x3328,
- CMSG_SORT_REAGENT_BANK_BAGS = 0x3329,
+ CMSG_SORT_BAGS = 0x3326,
+ CMSG_SORT_BANK_BAGS = 0x3327,
+ CMSG_SORT_REAGENT_BANK_BAGS = 0x3328,
CMSG_SPELL_CLICK = 0x3495,
CMSG_SPIRIT_HEALER_ACTIVATE = 0x34AF,
CMSG_SPLIT_ITEM = 0x399E,
- CMSG_STAND_STATE_CHANGE = 0x3189,
+ CMSG_STAND_STATE_CHANGE = 0x3188,
CMSG_START_CHALLENGE_MODE = 0x354C,
- CMSG_START_SPECTATOR_WAR_GAME = 0x35DF,
- CMSG_START_WAR_GAME = 0x35DE,
- CMSG_SUMMON_RESPONSE = 0x366A,
- CMSG_SUPPORT_TICKET_SUBMIT_BUG = 0x3645,
- CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3644,
- CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION = 0x3646,
+ CMSG_START_SPECTATOR_WAR_GAME = 0x35E0,
+ CMSG_START_WAR_GAME = 0x35DF,
+ CMSG_SUMMON_RESPONSE = 0x366C,
+ CMSG_SUPPORT_TICKET_SUBMIT_BUG = 0x3647,
+ CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3646,
+ CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION = 0x3648,
CMSG_SURRENDER_ARENA = 0x3173,
CMSG_SUSPEND_COMMS_ACK = 0x3764,
CMSG_SUSPEND_TOKEN_RESPONSE = 0x376A,
CMSG_SWAP_INV_ITEM = 0x399D,
CMSG_SWAP_ITEM = 0x399C,
- CMSG_SWAP_SUB_GROUPS = 0x364D,
- CMSG_SWAP_VOID_ITEM = 0x31A3,
- CMSG_TABARD_VENDOR_ACTIVATE = 0x32A8,
+ CMSG_SWAP_SUB_GROUPS = 0x364F,
+ CMSG_SWAP_VOID_ITEM = 0x31A2,
+ CMSG_TABARD_VENDOR_ACTIVATE = 0x32A7,
CMSG_TALK_TO_GOSSIP = 0x3492,
CMSG_TAXI_NODE_STATUS_QUERY = 0x34A8,
CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34AA,
@@ -719,49 +723,50 @@ enum OpcodeClient : uint16
CMSG_TIME_SYNC_RESPONSE = 0x3A38,
CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3A,
CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A39,
- CMSG_TOGGLE_DIFFICULTY = 0x3657,
- CMSG_TOGGLE_PVP = 0x32AA,
+ CMSG_TOGGLE_DIFFICULTY = 0x3659,
+ CMSG_TOGGLE_PVP = 0x32A9,
CMSG_TOTEM_DESTROYED = 0x34FB,
- CMSG_TRADE_SKILL_SET_FAVORITE = 0x3342,
+ CMSG_TOY_CLEAR_FANFARE = 0x312E,
+ CMSG_TRADE_SKILL_SET_FAVORITE = 0x3343,
CMSG_TRAINER_BUY_SPELL = 0x34AE,
CMSG_TRAINER_LIST = 0x34AD,
- CMSG_TRANSMOGRIFY_ITEMS = 0x3196,
+ CMSG_TRANSMOGRIFY_ITEMS = 0x3195,
CMSG_TURN_IN_PETITION = 0x3537,
- CMSG_TUTORIAL = 0x36DD,
+ CMSG_TUTORIAL = 0x36E2,
CMSG_TWITTER_CHECK_STATUS = 0x312A,
CMSG_TWITTER_CONNECT = 0x3127,
CMSG_TWITTER_DISCONNECT = 0x312B,
- CMSG_TWITTER_POST = 0x332B,
- CMSG_UI_TIME_REQUEST = 0x369B,
+ CMSG_TWITTER_POST = 0x332A,
+ CMSG_UI_TIME_REQUEST = 0x369F,
CMSG_UNACCEPT_TRADE = 0x315B,
- CMSG_UNDELETE_CHARACTER = 0x36DF,
+ CMSG_UNDELETE_CHARACTER = 0x36E4,
CMSG_UNLEARN_SKILL = 0x34E6,
- CMSG_UNLEARN_SPECIALIZATION = 0x31A4,
- CMSG_UNLOCK_VOID_STORAGE = 0x31A0,
- CMSG_UPDATE_ACCOUNT_DATA = 0x3697,
- CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x329D,
- CMSG_UPDATE_CLIENT_SETTINGS = 0x3664,
+ CMSG_UNLEARN_SPECIALIZATION = 0x31A3,
+ CMSG_UNLOCK_VOID_STORAGE = 0x319F,
+ CMSG_UPDATE_ACCOUNT_DATA = 0x369B,
+ CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x329C,
+ CMSG_UPDATE_CLIENT_SETTINGS = 0x3666,
CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A3E,
- CMSG_UPDATE_RAID_TARGET = 0x3650,
- CMSG_UPDATE_SPELL_VISUAL = 0x329C,
- CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F5,
- CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36F0,
- CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36E6,
- CMSG_UPGRADE_GARRISON = 0x32BC,
+ CMSG_UPDATE_RAID_TARGET = 0x3652,
+ CMSG_UPDATE_SPELL_VISUAL = 0x329B,
+ CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36FA,
+ CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36F5,
+ CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36EB,
+ CMSG_UPGRADE_GARRISON = 0x32BB,
CMSG_UPGRADE_ITEM = 0x3226,
- CMSG_USED_FOLLOW = 0x3186,
- CMSG_USE_CRITTER_ITEM = 0x323E,
+ CMSG_USED_FOLLOW = 0x3185,
+ CMSG_USE_CRITTER_ITEM = 0x323F,
CMSG_USE_EQUIPMENT_SET = 0x3995,
- CMSG_USE_ITEM = 0x3297,
- CMSG_USE_TOY = 0x3299,
- CMSG_VIOLENCE_LEVEL = 0x3184,
- CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x3712,
- CMSG_VOICE_CHAT_LOGIN = 0x3711,
- CMSG_VOID_STORAGE_TRANSFER = 0x31A2,
- CMSG_WARDEN_DATA = 0x35EC,
- CMSG_WHO = 0x3681,
- CMSG_WHO_IS = 0x3680,
- CMSG_WORLD_PORT_RESPONSE = 0x35F9,
+ CMSG_USE_ITEM = 0x3296,
+ CMSG_USE_TOY = 0x3298,
+ CMSG_VIOLENCE_LEVEL = 0x3183,
+ CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x3717,
+ CMSG_VOICE_CHAT_LOGIN = 0x3716,
+ CMSG_VOID_STORAGE_TRANSFER = 0x31A1,
+ CMSG_WARDEN_DATA = 0x35ED,
+ CMSG_WHO = 0x3683,
+ CMSG_WHO_IS = 0x3682,
+ CMSG_WORLD_PORT_RESPONSE = 0x35FA,
CMSG_WRAP_ITEM = 0x3994,
CMSG_BF_MGR_ENTRY_INVITE_RESPONSE = 0xBADD,
@@ -771,44 +776,46 @@ enum OpcodeClient : uint16
enum OpcodeServer : uint16
{
- SMSG_ABORT_NEW_WORLD = 0x25AD,
- SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2654,
+ SMSG_ABORT_NEW_WORLD = 0x25AE,
+ SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2655,
SMSG_ACCOUNT_DATA_TIMES = 0x2752,
SMSG_ACCOUNT_MOUNT_UPDATE = 0x25C3,
SMSG_ACCOUNT_TOYS_UPDATE = 0x25C4,
SMSG_ACHIEVEMENT_DELETED = 0x2727,
- SMSG_ACHIEVEMENT_EARNED = 0x2662,
- SMSG_ACTIVATE_TAXI_REPLY = 0x26AB,
+ SMSG_ACHIEVEMENT_EARNED = 0x2663,
+ SMSG_ACTIVATE_TAXI_REPLY = 0x26AC,
SMSG_ACTIVE_GLYPHS = 0x2C53,
- SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x265C,
+ SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x265D,
SMSG_ADD_ITEM_PASSIVE = 0x25BF,
- SMSG_ADD_LOSS_OF_CONTROL = 0x269B,
- SMSG_ADD_RUNE_POWER = 0x26EA,
+ SMSG_ADD_LOSS_OF_CONTROL = 0x269C,
+ SMSG_ADD_RUNE_POWER = 0x26EB,
SMSG_ADJUST_SPLINE_DURATION = 0x25E8,
SMSG_ADVENTURE_MAP_POI_QUERY_RESPONSE = 0x2845,
SMSG_AE_LOOT_TARGETS = 0x262E,
SMSG_AE_LOOT_TARGET_ACK = 0x262F,
- SMSG_AI_REACTION = 0x26E7,
+ SMSG_AI_REACTION = 0x26E8,
SMSG_ALL_ACCOUNT_CRITERIA = 0x2570,
SMSG_ALL_ACHIEVEMENT_DATA = 0x256F,
SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8,
- SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2586,
+ SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2587,
SMSG_AREA_POI_UPDATE = 0x2852,
SMSG_AREA_SPIRIT_HEALER_TIME = 0x278A,
- SMSG_AREA_TRIGGER_DENIED = 0x26A2,
+ SMSG_AREA_TRIGGER_DENIED = 0x26A3,
SMSG_AREA_TRIGGER_NO_CORPSE = 0x275E,
+ SMSG_AREA_TRIGGER_PLAY_VISUAL_EVENT = 0x2640,
SMSG_AREA_TRIGGER_RE_PATH = 0x263E,
- SMSG_AREA_TRIGGER_RE_SHAPE = 0x2642,
- SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x2650,
- SMSG_ARENA_ERROR = 0x271A,
- SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2667,
+ SMSG_AREA_TRIGGER_RE_SHAPE = 0x2643,
+ SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x2651,
+ SMSG_ARENA_MATCH_END = 0x28A9,
+ SMSG_ARENA_MATCH_START = 0x28A8,
+ SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2668,
SMSG_ARTIFACT_FORGE_OPENED = 0x27EE,
SMSG_ARTIFACT_RESPEC_CONFIRM = 0x27F1,
SMSG_ARTIFACT_TRAITS_REFUNDED = 0x27F2,
SMSG_ARTIFACT_XP_GAIN = 0x2835,
SMSG_ATTACKER_STATE_UPDATE = 0x27DB,
- SMSG_ATTACK_START = 0x266F,
- SMSG_ATTACK_STOP = 0x2670,
+ SMSG_ATTACK_START = 0x2670,
+ SMSG_ATTACK_STOP = 0x2671,
SMSG_ATTACK_SWING_ERROR = 0x273C,
SMSG_ATTACK_SWING_LANDED_LOG = 0x273D,
SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2731,
@@ -826,24 +833,25 @@ enum OpcodeServer : uint16
SMSG_AURA_UPDATE = 0x2C22,
SMSG_AUTH_CHALLENGE = 0x3048,
SMSG_AUTH_RESPONSE = 0x256C,
- SMSG_AVAILABLE_HOTFIXES = 0x25A1,
+ SMSG_AVAILABLE_HOTFIXES = 0x25A2,
+ SMSG_AZERITE_EMPOWERED_ITEM_EQUIPPED_STATUS_CHANGED = 0x2876,
SMSG_AZERITE_EMPOWERED_ITEM_RESPEC_OPEN = 0x283F,
- SMSG_AZERITE_XP_GAIN = 0x2878,
- SMSG_BAN_REASON = 0x26B7,
- SMSG_BARBER_SHOP_RESULT = 0x26F0,
- SMSG_BATTLEFIELD_LIST = 0x2594,
- SMSG_BATTLEFIELD_PORT_DENIED = 0x259A,
- SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2590,
- SMSG_BATTLEFIELD_STATUS_FAILED = 0x2593,
- SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION = 0x258F,
- SMSG_BATTLEFIELD_STATUS_NONE = 0x2592,
- SMSG_BATTLEFIELD_STATUS_QUEUED = 0x2591,
- SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x25A5,
- SMSG_BATTLEGROUND_INFO_THROTTLED = 0x259B,
+ SMSG_AZERITE_XP_GAIN = 0x2875,
+ SMSG_BAN_REASON = 0x26B8,
+ SMSG_BARBER_SHOP_RESULT = 0x26F1,
+ SMSG_BATTLEFIELD_LIST = 0x2595,
+ SMSG_BATTLEFIELD_PORT_DENIED = 0x259B,
+ SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2591,
+ SMSG_BATTLEFIELD_STATUS_FAILED = 0x2594,
+ SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION = 0x2590,
+ SMSG_BATTLEFIELD_STATUS_NONE = 0x2593,
+ SMSG_BATTLEFIELD_STATUS_QUEUED = 0x2592,
+ SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x25A6,
+ SMSG_BATTLEGROUND_INFO_THROTTLED = 0x259C,
SMSG_BATTLEGROUND_INIT = 0x27A9,
- SMSG_BATTLEGROUND_PLAYER_JOINED = 0x2598,
- SMSG_BATTLEGROUND_PLAYER_LEFT = 0x2599,
- SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2595,
+ SMSG_BATTLEGROUND_PLAYER_JOINED = 0x2599,
+ SMSG_BATTLEGROUND_PLAYER_LEFT = 0x259A,
+ SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2596,
SMSG_BATTLEGROUND_POINTS = 0x27A8,
SMSG_BATTLENET_CHALLENGE_ABORT = 0x27DA,
SMSG_BATTLENET_CHALLENGE_START = 0x27D9,
@@ -851,7 +859,7 @@ enum OpcodeServer : uint16
SMSG_BATTLENET_REALM_LIST_TICKET = 0x284F,
SMSG_BATTLENET_RESPONSE = 0x284C,
SMSG_BATTLENET_SET_SESSION_STATE = 0x284E,
- SMSG_BATTLENET_UPDATE_SESSION_KEY = 0x2872,
+ SMSG_BATTLENET_UPDATE_SESSION_KEY = 0x286F,
SMSG_BATTLE_PAY_ACK_FAILED = 0x27D2,
SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x27C7,
SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27D1,
@@ -862,24 +870,27 @@ enum OpcodeServer : uint16
SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27BF,
SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27C0,
SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x27C6,
- SMSG_BATTLE_PAY_OPEN_CHECKOUT_RESULT = 0x286B,
+ SMSG_BATTLE_PAY_OPEN_CHECKOUT_RESULT = 0x2868,
SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27D0,
SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27CE,
SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27CD,
- SMSG_BATTLE_PAY_SUBSCRIPTION_CHANGED = 0x2874,
- SMSG_BATTLE_PAY_VAS_BNET_TRANSFER_VALIDATION_RESULT = 0x2869,
+ SMSG_BATTLE_PAY_SUBSCRIPTION_CHANGED = 0x2871,
+ SMSG_BATTLE_PAY_TOY_DELIVERED = 0x27C8,
+ SMSG_BATTLE_PAY_VAS_BNET_TRANSFER_VALIDATION_RESULT = 0x2866,
SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27C2,
SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x2838,
SMSG_BATTLE_PAY_VAS_CHARACTER_QUEUE_STATUS = 0x2864,
+ SMSG_BATTLE_PAY_VAS_GUILD_FOLLOW_INFO = 0x29E7,
+ SMSG_BATTLE_PAY_VAS_GUILD_MASTER_LIST = 0x29E6,
SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x283B,
SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x283C,
SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x283A,
SMSG_BATTLE_PAY_VAS_REALM_LIST = 0x2839,
SMSG_BATTLE_PAY_VAS_TRANSFER_QUEUE_STATUS = 0x2863,
SMSG_BATTLE_PETS_HEALED = 0x260A,
- SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x26A5,
+ SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x26A6,
SMSG_BATTLE_PET_DELETED = 0x2607,
- SMSG_BATTLE_PET_ERROR = 0x2657,
+ SMSG_BATTLE_PET_ERROR = 0x2658,
SMSG_BATTLE_PET_JOURNAL = 0x2606,
SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x2604,
SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x2605,
@@ -891,55 +902,55 @@ enum OpcodeServer : uint16
SMSG_BATTLE_PET_UPDATES = 0x2600,
SMSG_BINDER_CONFIRM = 0x2742,
SMSG_BIND_POINT_UPDATE = 0x257C,
- SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2646,
- SMSG_BLACK_MARKET_OPEN_RESULT = 0x2644,
- SMSG_BLACK_MARKET_OUTBID = 0x2647,
- SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2645,
- SMSG_BLACK_MARKET_WON = 0x2648,
- SMSG_BONUS_ROLL_EMPTY = 0x2664,
- SMSG_BONUS_ROLL_FAILED = 0x287B,
+ SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2647,
+ SMSG_BLACK_MARKET_OPEN_RESULT = 0x2645,
+ SMSG_BLACK_MARKET_OUTBID = 0x2648,
+ SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2646,
+ SMSG_BLACK_MARKET_WON = 0x2649,
+ SMSG_BONUS_ROLL_EMPTY = 0x2665,
+ SMSG_BONUS_ROLL_FAILED = 0x2879,
SMSG_BOSS_KILL_CREDIT = 0x27CC,
- SMSG_BREAK_TARGET = 0x266E,
+ SMSG_BREAK_TARGET = 0x266F,
SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC,
- SMSG_BUY_FAILED = 0x26F9,
- SMSG_BUY_SUCCEEDED = 0x26F8,
+ SMSG_BUY_FAILED = 0x26FA,
+ SMSG_BUY_SUCCEEDED = 0x26F9,
SMSG_CACHE_INFO = 0x274C,
SMSG_CACHE_VERSION = 0x274B,
- SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26CB,
- SMSG_CALENDAR_COMMAND_RESULT = 0x26CC,
- SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26BB,
- SMSG_CALENDAR_EVENT_INVITE = 0x26BC,
- SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x26C0,
- SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS = 0x26BF,
- SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x26C5,
- SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x26C6,
- SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x26BD,
- SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x26C2,
- SMSG_CALENDAR_EVENT_INVITE_STATUS = 0x26BE,
- SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x26C1,
- SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x26C3,
- SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x26C4,
- SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x26C7,
- SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x26C8,
- SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x26C9,
- SMSG_CALENDAR_SEND_CALENDAR = 0x26B9,
- SMSG_CALENDAR_SEND_EVENT = 0x26BA,
- SMSG_CALENDAR_SEND_NUM_PENDING = 0x26CA,
+ SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26CC,
+ SMSG_CALENDAR_COMMAND_RESULT = 0x26CD,
+ SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26BC,
+ SMSG_CALENDAR_EVENT_INVITE = 0x26BD,
+ SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x26C1,
+ SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS = 0x26C0,
+ SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x26C6,
+ SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x26C7,
+ SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x26BE,
+ SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x26C3,
+ SMSG_CALENDAR_EVENT_INVITE_STATUS = 0x26BF,
+ SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x26C2,
+ SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x26C4,
+ SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x26C5,
+ SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x26C8,
+ SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x26C9,
+ SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x26CA,
+ SMSG_CALENDAR_SEND_CALENDAR = 0x26BA,
+ SMSG_CALENDAR_SEND_EVENT = 0x26BB,
+ SMSG_CALENDAR_SEND_NUM_PENDING = 0x26CB,
SMSG_CAMERA_EFFECT = 0x276F,
SMSG_CANCEL_AUTO_REPEAT = 0x271B,
SMSG_CANCEL_COMBAT = 0x273A,
SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46,
- SMSG_CANCEL_SCENE = 0x2656,
+ SMSG_CANCEL_SCENE = 0x2657,
SMSG_CANCEL_SPELL_VISUAL = 0x2C44,
SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C48,
- SMSG_CAN_DUEL_RESULT = 0x2679,
+ SMSG_CAN_DUEL_RESULT = 0x267A,
SMSG_CAST_FAILED = 0x2C56,
SMSG_CATEGORY_COOLDOWN = 0x2C16,
SMSG_CHALLENGE_MODE_AFFIXES = 0x2624,
SMSG_CHALLENGE_MODE_ALL_MAP_STATS = 0x2623,
SMSG_CHALLENGE_MODE_COMPLETE = 0x2621,
- SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x2626,
- SMSG_CHALLENGE_MODE_NEW_PLAYER_SEASON_RECORD = 0x2627,
+ SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x2627,
+ SMSG_CHALLENGE_MODE_NEW_PLAYER_SEASON_RECORD = 0x2628,
SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2625,
SMSG_CHALLENGE_MODE_RESET = 0x2620,
SMSG_CHALLENGE_MODE_REWARDS = 0x2622,
@@ -951,7 +962,7 @@ enum OpcodeServer : uint16
SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC1,
SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC2,
SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x280C,
- SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING = 0x2873,
+ SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING = 0x2870,
SMSG_CHARACTER_ITEM_FIXUP = 0x285F,
SMSG_CHARACTER_LOGIN_FAILED = 0x274D,
SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27D8,
@@ -976,77 +987,77 @@ enum OpcodeServer : uint16
SMSG_CHAT_RESTRICTED = 0x2BB3,
SMSG_CHAT_SERVER_MESSAGE = 0x2BC4,
SMSG_CHEAT_IGNORE_DIMISHING_RETURNS = 0x2C12,
- SMSG_CHECK_WARGAME_ENTRY = 0x259E,
+ SMSG_CHECK_WARGAME_ENTRY = 0x259F,
SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C27,
SMSG_CLEAR_BOSS_EMOTES = 0x25CD,
- SMSG_CLEAR_COOLDOWN = 0x26EC,
+ SMSG_CLEAR_COOLDOWN = 0x26ED,
SMSG_CLEAR_COOLDOWNS = 0x2C26,
- SMSG_CLEAR_LOSS_OF_CONTROL = 0x269D,
+ SMSG_CLEAR_LOSS_OF_CONTROL = 0x269E,
SMSG_CLEAR_SPELL_CHARGES = 0x2C28,
- SMSG_CLEAR_TARGET = 0x26E3,
+ SMSG_CLEAR_TARGET = 0x26E4,
SMSG_COIN_REMOVED = 0x262D,
- SMSG_COMBAT_EVENT_FAILED = 0x2671,
+ SMSG_COMBAT_EVENT_FAILED = 0x2672,
SMSG_COMMENTATOR_MAP_INFO = 0x274F,
SMSG_COMMENTATOR_PLAYER_INFO = 0x2750,
SMSG_COMMENTATOR_STATE_CHANGED = 0x274E,
- SMSG_COMPLAINT_RESULT = 0x26DA,
+ SMSG_COMPLAINT_RESULT = 0x26DB,
SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27EA,
SMSG_CONNECT_TO = 0x304D,
SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27D3,
- SMSG_CONSOLE_WRITE = 0x2653,
+ SMSG_CONSOLE_WRITE = 0x2654,
SMSG_CONSUMPTION_CONVERSION_INFO_RESPONSE = 0x2853,
SMSG_CONSUMPTION_CONVERSION_RESULT = 0x2854,
SMSG_CONTACT_LIST = 0x27D6,
- SMSG_CONTRIBUTION_COLLECTOR_STATE = 0x286A,
- SMSG_CONTROL_UPDATE = 0x2666,
+ SMSG_CONTRIBUTION_COLLECTOR_STATE = 0x2867,
+ SMSG_CONTROL_UPDATE = 0x2667,
SMSG_COOLDOWN_CHEAT = 0x2783,
- SMSG_COOLDOWN_EVENT = 0x26EB,
- SMSG_CORPSE_LOCATION = 0x266D,
+ SMSG_COOLDOWN_EVENT = 0x26EC,
+ SMSG_CORPSE_LOCATION = 0x266E,
SMSG_CORPSE_RECLAIM_DELAY = 0x2796,
SMSG_CORPSE_TRANSPORT_QUERY = 0x275A,
SMSG_CREATE_CHAR = 0x2747,
SMSG_CREATE_SHIPMENT_RESPONSE = 0x27E9,
SMSG_CRITERIA_DELETED = 0x2726,
SMSG_CRITERIA_UPDATE = 0x2720,
- SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26F4,
+ SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26F5,
SMSG_CUSTOM_LOAD_SCREEN = 0x25E3,
SMSG_DAILY_QUESTS_RESET = 0x2A80,
SMSG_DAMAGE_CALC_LOG = 0x2814,
- SMSG_DB_REPLY = 0x25A0,
- SMSG_DEATH_RELEASE_LOC = 0x270E,
+ SMSG_DB_REPLY = 0x25A1,
+ SMSG_DEATH_RELEASE_LOC = 0x270F,
SMSG_DEFENSE_MESSAGE = 0x2BB6,
SMSG_DELETE_CHAR = 0x2748,
SMSG_DESTROY_ARENA_UNIT = 0x278C,
SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x273B,
- SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258A,
+ SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258B,
SMSG_DISENCHANT_CREDIT = 0x25BC,
- SMSG_DISMOUNT = 0x26E2,
+ SMSG_DISMOUNT = 0x26E3,
SMSG_DISMOUNT_RESULT = 0x257B,
SMSG_DISPEL_FAILED = 0x2C30,
SMSG_DISPLAY_GAME_ERROR = 0x25B5,
- SMSG_DISPLAY_PLAYER_CHOICE = 0x26A6,
- SMSG_DISPLAY_PROMOTION = 0x266A,
+ SMSG_DISPLAY_PLAYER_CHOICE = 0x26A7,
+ SMSG_DISPLAY_PROMOTION = 0x266B,
SMSG_DISPLAY_QUEST_POPUP = 0x2A9D,
SMSG_DISPLAY_TOAST = 0x263A,
SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25F7,
SMSG_DROP_NEW_CONNECTION = 0x304C,
- SMSG_DUEL_COMPLETE = 0x2677,
- SMSG_DUEL_COUNTDOWN = 0x2676,
- SMSG_DUEL_IN_BOUNDS = 0x2675,
- SMSG_DUEL_OPPONENT_SELECTED = 0x2673,
- SMSG_DUEL_OUT_OF_BOUNDS = 0x2674,
- SMSG_DUEL_REQUESTED = 0x2672,
- SMSG_DUEL_WINNER = 0x2678,
+ SMSG_DUEL_COMPLETE = 0x2678,
+ SMSG_DUEL_COUNTDOWN = 0x2677,
+ SMSG_DUEL_IN_BOUNDS = 0x2676,
+ SMSG_DUEL_OPPONENT_SELECTED = 0x2674,
+ SMSG_DUEL_OUT_OF_BOUNDS = 0x2675,
+ SMSG_DUEL_REQUESTED = 0x2673,
+ SMSG_DUEL_WINNER = 0x2679,
SMSG_DURABILITY_DAMAGE_DEATH = 0x2792,
SMSG_EMOTE = 0x2815,
- SMSG_ENABLE_BARBER_SHOP = 0x26EF,
+ SMSG_ENABLE_BARBER_SHOP = 0x26F0,
SMSG_ENABLE_ENCRYPTION = 0x3049,
SMSG_ENCHANTMENT_LOG = 0x275B,
SMSG_ENCOUNTER_END = 0x27CB,
SMSG_ENCOUNTER_START = 0x27CA,
- SMSG_ENUM_CHARACTERS_RESULT = 0x2582,
+ SMSG_ENUM_CHARACTERS_RESULT = 0x2583,
SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C21,
- SMSG_EQUIPMENT_SET_ID = 0x26E4,
+ SMSG_EQUIPMENT_SET_ID = 0x26E5,
SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1,
SMSG_EXPLORATION_EXPERIENCE = 0x27AE,
SMSG_FACTION_BONUS_INFO = 0x276E,
@@ -1054,24 +1065,24 @@ enum OpcodeServer : uint16
SMSG_FEATURE_SYSTEM_STATUS = 0x25D1,
SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25D2,
SMSG_FEIGN_DEATH_RESISTED = 0x278F,
- SMSG_FISH_ESCAPED = 0x2701,
- SMSG_FISH_NOT_HOOKED = 0x2700,
+ SMSG_FISH_ESCAPED = 0x2702,
+ SMSG_FISH_NOT_HOOKED = 0x2701,
SMSG_FLIGHT_SPLINE_SYNC = 0x2DF7,
- SMSG_FORCED_DEATH_UPDATE = 0x270F,
+ SMSG_FORCED_DEATH_UPDATE = 0x2710,
SMSG_FORCE_ANIM = 0x279D,
- SMSG_FORCE_OBJECT_RELINK = 0x2669,
+ SMSG_FORCE_OBJECT_RELINK = 0x266A,
SMSG_FRIEND_STATUS = 0x27D7,
- SMSG_GAME_EVENT_DEBUG_INITIALIZE = 0x267F,
+ SMSG_GAME_EVENT_DEBUG_INITIALIZE = 0x2680,
SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25D6,
SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25D7,
SMSG_GAME_OBJECT_DESPAWN = 0x25D8,
- SMSG_GAME_OBJECT_MULTI_TRANSITION = 0x2879,
+ SMSG_GAME_OBJECT_MULTI_TRANSITION = 0x2877,
SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B,
SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A,
SMSG_GAME_OBJECT_RESET_STATE = 0x2765,
SMSG_GAME_OBJECT_SET_STATE = 0x284B,
SMSG_GAME_OBJECT_UI_ACTION = 0x2762,
- SMSG_GAME_SPEED_SET = 0x26AF,
+ SMSG_GAME_SPEED_SET = 0x26B0,
SMSG_GAME_TIME_SET = 0x2754,
SMSG_GAME_TIME_UPDATE = 0x2753,
SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2902,
@@ -1099,6 +1110,7 @@ enum OpcodeServer : uint16
SMSG_GARRISON_LIST_MISSIONS_CHEAT_RESULT = 0x292A,
SMSG_GARRISON_MISSION_AREA_BONUS_ADDED = 0x2910,
SMSG_GARRISON_MISSION_BONUS_ROLL_RESULT = 0x290C,
+ SMSG_GARRISON_MISSION_LIST_UPDATE = 0x290E,
SMSG_GARRISON_MISSION_REWARD_RESPONSE = 0x292D,
SMSG_GARRISON_MISSION_UPDATE_CAN_START = 0x2911,
SMSG_GARRISON_NUM_FOLLOWER_ACTIVATIONS_REMAINING = 0x2917,
@@ -1121,7 +1133,7 @@ enum OpcodeServer : uint16
SMSG_GARRISON_START_MISSION_RESULT = 0x2907,
SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x28F8,
SMSG_GARRISON_UPGRADE_RESULT = 0x28FD,
- SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2583,
+ SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2584,
SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27AF,
SMSG_GET_DISPLAYED_TROPHY_LIST_RESPONSE = 0x2928,
SMSG_GET_GARRISON_INFO_RESULT = 0x28F0,
@@ -1130,18 +1142,18 @@ enum OpcodeServer : uint16
SMSG_GET_TROPHY_LIST_RESPONSE = 0x2810,
SMSG_GM_PLAYER_INFO = 0x2782,
SMSG_GM_REQUEST_PLAYER_INFO = 0x25EE,
- SMSG_GM_TICKET_CASE_STATUS = 0x26D1,
- SMSG_GM_TICKET_SYSTEM_STATUS = 0x26D0,
+ SMSG_GM_TICKET_CASE_STATUS = 0x26D2,
+ SMSG_GM_TICKET_SYSTEM_STATUS = 0x26D1,
SMSG_GOD_MODE = 0x2741,
SMSG_GOSSIP_COMPLETE = 0x2A96,
SMSG_GOSSIP_MESSAGE = 0x2A97,
SMSG_GOSSIP_POI = 0x27E4,
SMSG_GOSSIP_TEXT_UPDATE = 0x2A98,
- SMSG_GROUP_ACTION_THROTTLED = 0x259C,
+ SMSG_GROUP_ACTION_THROTTLED = 0x259D,
SMSG_GROUP_DECLINE = 0x27DF,
SMSG_GROUP_DESTROYED = 0x27E1,
SMSG_GROUP_INVITE_CONFIRMATION = 0x2860,
- SMSG_GROUP_NEW_LEADER = 0x264B,
+ SMSG_GROUP_NEW_LEADER = 0x264C,
SMSG_GROUP_UNINVITE = 0x27E0,
SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5,
SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4,
@@ -1156,25 +1168,25 @@ enum OpcodeServer : uint16
SMSG_GUILD_COMMAND_RESULT = 0x29BA,
SMSG_GUILD_CRITERIA_DELETED = 0x29C6,
SMSG_GUILD_CRITERIA_UPDATE = 0x29C3,
- SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED = 0x29F5,
- SMSG_GUILD_EVENT_BANK_MONEY_CHANGED = 0x29F4,
- SMSG_GUILD_EVENT_DISBANDED = 0x29EB,
+ SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED = 0x29F8,
+ SMSG_GUILD_EVENT_BANK_MONEY_CHANGED = 0x29F7,
+ SMSG_GUILD_EVENT_DISBANDED = 0x29ED,
SMSG_GUILD_EVENT_LOG_QUERY_RESULTS = 0x29E2,
- SMSG_GUILD_EVENT_MOTD = 0x29EC,
- SMSG_GUILD_EVENT_NEW_LEADER = 0x29EA,
- SMSG_GUILD_EVENT_PLAYER_JOINED = 0x29E8,
- SMSG_GUILD_EVENT_PLAYER_LEFT = 0x29E9,
- SMSG_GUILD_EVENT_PRESENCE_CHANGE = 0x29ED,
- SMSG_GUILD_EVENT_RANKS_UPDATED = 0x29EE,
- SMSG_GUILD_EVENT_RANK_CHANGED = 0x29EF,
- SMSG_GUILD_EVENT_TAB_ADDED = 0x29F0,
- SMSG_GUILD_EVENT_TAB_DELETED = 0x29F1,
- SMSG_GUILD_EVENT_TAB_MODIFIED = 0x29F2,
- SMSG_GUILD_EVENT_TAB_TEXT_CHANGED = 0x29F3,
+ SMSG_GUILD_EVENT_MOTD = 0x29EE,
+ SMSG_GUILD_EVENT_NEW_LEADER = 0x29EC,
+ SMSG_GUILD_EVENT_PLAYER_JOINED = 0x29EA,
+ SMSG_GUILD_EVENT_PLAYER_LEFT = 0x29EB,
+ SMSG_GUILD_EVENT_PRESENCE_CHANGE = 0x29EF,
+ SMSG_GUILD_EVENT_RANKS_UPDATED = 0x29F1,
+ SMSG_GUILD_EVENT_RANK_CHANGED = 0x29F2,
+ SMSG_GUILD_EVENT_TAB_ADDED = 0x29F3,
+ SMSG_GUILD_EVENT_TAB_DELETED = 0x29F4,
+ SMSG_GUILD_EVENT_TAB_MODIFIED = 0x29F5,
+ SMSG_GUILD_EVENT_TAB_TEXT_CHANGED = 0x29F6,
SMSG_GUILD_FLAGGED_FOR_RENAME = 0x29DC,
SMSG_GUILD_INVITE = 0x29CA,
- SMSG_GUILD_INVITE_DECLINED = 0x29E6,
- SMSG_GUILD_INVITE_EXPIRED = 0x29E7,
+ SMSG_GUILD_INVITE_DECLINED = 0x29E8,
+ SMSG_GUILD_INVITE_EXPIRED = 0x29E9,
SMSG_GUILD_ITEM_LOOTED = 0x29D4,
SMSG_GUILD_KNOWN_RECIPES = 0x29BE,
SMSG_GUILD_MEMBERS_WITH_RECIPE = 0x29BF,
@@ -1195,16 +1207,16 @@ enum OpcodeServer : uint16
SMSG_GUILD_ROSTER = 0x29BB,
SMSG_GUILD_ROSTER_UPDATE = 0x29BC,
SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9,
- SMSG_HEALTH_UPDATE = 0x2704,
- SMSG_HIGHEST_THREAT_UPDATE = 0x2715,
- SMSG_HOTFIX_MESSAGE = 0x25A2,
- SMSG_HOTFIX_RESPONSE = 0x25A3,
+ SMSG_HEALTH_UPDATE = 0x2705,
+ SMSG_HIGHEST_THREAT_UPDATE = 0x2716,
+ SMSG_HOTFIX_MESSAGE = 0x25A3,
+ SMSG_HOTFIX_RESPONSE = 0x25A4,
+ SMSG_INCOMING_SUMMON_COMPLETED = 0x28AB,
+ SMSG_INCOMING_SUMMON_PENDING = 0x28AA,
SMSG_INITIALIZE_FACTIONS = 0x276D,
- SMSG_INITIAL_SETUP = 0x257F,
+ SMSG_INITIAL_SETUP = 0x2580,
SMSG_INIT_WORLD_STATES = 0x2793,
- SMSG_INSPECT_HONOR_STATS = 0x25B2,
- SMSG_INSPECT_PVP = 0x2769,
- SMSG_INSPECT_RESULT = 0x264F,
+ SMSG_INSPECT_RESULT = 0x2650,
SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27FC,
SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27FB,
SMSG_INSTANCE_ENCOUNTER_END = 0x2804,
@@ -1220,12 +1232,12 @@ enum OpcodeServer : uint16
SMSG_INSTANCE_ENCOUNTER_START = 0x2800,
SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27FD,
SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x273F,
- SMSG_INSTANCE_INFO = 0x2652,
- SMSG_INSTANCE_RESET = 0x26B4,
- SMSG_INSTANCE_RESET_FAILED = 0x26B5,
+ SMSG_INSTANCE_INFO = 0x2653,
+ SMSG_INSTANCE_RESET = 0x26B5,
+ SMSG_INSTANCE_RESET_FAILED = 0x26B6,
SMSG_INSTANCE_SAVE_CREATED = 0x27C9,
- SMSG_INVALIDATE_PAGE_TEXT = 0x270A,
- SMSG_INVALIDATE_PLAYER = 0x26D9,
+ SMSG_INVALIDATE_PAGE_TEXT = 0x270B,
+ SMSG_INVALIDATE_PLAYER = 0x26DA,
SMSG_INVALID_PROMOTION_CODE = 0x279E,
SMSG_INVENTORY_CHANGE_FAILURE = 0x276B,
SMSG_ISLAND_AZERITE_XP_GAIN = 0x27AB,
@@ -1235,15 +1247,15 @@ enum OpcodeServer : uint16
SMSG_ITEM_CHANGED = 0x2729,
SMSG_ITEM_COOLDOWN = 0x2813,
SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x27A0,
- SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25B1,
- SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x25AF,
+ SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25B2,
+ SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x25B0,
SMSG_ITEM_PUSH_RESULT = 0x2639,
SMSG_ITEM_TIME_UPDATE = 0x279F,
SMSG_KICK_REASON = 0x2837,
SMSG_LEARNED_SPELLS = 0x2C4D,
SMSG_LEARN_PVP_TALENTS_FAILED = 0x25EA,
SMSG_LEARN_TALENTS_FAILED = 0x25E9,
- SMSG_LEVEL_UPDATE = 0x2587,
+ SMSG_LEVEL_UPDATE = 0x2588,
SMSG_LEVEL_UP_INFO = 0x2728,
SMSG_LFG_BOOT_PLAYER = 0x2A35,
SMSG_LFG_DISABLED = 0x2A33,
@@ -1273,8 +1285,8 @@ enum OpcodeServer : uint16
SMSG_LF_GUILD_COMMAND_RESULT = 0x29D0,
SMSG_LF_GUILD_POST = 0x29CD,
SMSG_LF_GUILD_RECRUITS = 0x29CF,
- SMSG_LIGHTNING_STORM_END = 0x26D6,
- SMSG_LIGHTNING_STORM_START = 0x26D5,
+ SMSG_LIGHTNING_STORM_END = 0x26D7,
+ SMSG_LIGHTNING_STORM_START = 0x26D6,
SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27BD,
SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27BB,
SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27B0,
@@ -1282,31 +1294,33 @@ enum OpcodeServer : uint16
SMSG_LOAD_EQUIPMENT_SET = 0x2756,
SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x2811,
SMSG_LOGIN_SET_TIME_SPEED = 0x2755,
- SMSG_LOGIN_VERIFY_WORLD = 0x25AC,
- SMSG_LOGOUT_CANCEL_ACK = 0x26B3,
- SMSG_LOGOUT_COMPLETE = 0x26B2,
- SMSG_LOGOUT_RESPONSE = 0x26B1,
+ SMSG_LOGIN_VERIFY_WORLD = 0x25AD,
+ SMSG_LOGOUT_CANCEL_ACK = 0x26B4,
+ SMSG_LOGOUT_COMPLETE = 0x26B3,
+ SMSG_LOGOUT_RESPONSE = 0x26B2,
SMSG_LOG_XP_GAIN = 0x2724,
SMSG_LOOT_ALL_PASSED = 0x2637,
- SMSG_LOOT_LEGACY_RULES_IN_EFFECT = 0x287A,
+ SMSG_LOOT_LEGACY_RULES_IN_EFFECT = 0x2878,
SMSG_LOOT_LIST = 0x278B,
SMSG_LOOT_MONEY_NOTIFY = 0x2632,
SMSG_LOOT_RELEASE = 0x2631,
SMSG_LOOT_RELEASE_ALL = 0x2630,
- SMSG_LOOT_REMOVED = 0x262B,
- SMSG_LOOT_RESPONSE = 0x262A,
+ SMSG_LOOT_REMOVED = 0x262C,
+ SMSG_LOOT_RESPONSE = 0x262B,
SMSG_LOOT_ROLL = 0x2634,
SMSG_LOOT_ROLLS_COMPLETE = 0x2636,
SMSG_LOOT_ROLL_WON = 0x2638,
- SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x269A,
- SMSG_MAIL_COMMAND_RESULT = 0x265A,
+ SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x269B,
+ SMSG_MAIL_COMMAND_RESULT = 0x265B,
SMSG_MAIL_LIST_RESULT = 0x27A1,
SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x27A2,
SMSG_MAP_OBJECTIVES_INIT = 0x27AA,
+ SMSG_MAP_OBJECTIVE_ADD = 0x2597,
+ SMSG_MAP_OBJECTIVE_REMOVE = 0x2598,
SMSG_MAP_OBJ_EVENTS = 0x25D9,
SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2635,
SMSG_MESSAGE_BOX = 0x2575,
- SMSG_MINIMAP_PING = 0x26FF,
+ SMSG_MINIMAP_PING = 0x2700,
SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14,
SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13,
SMSG_MISSILE_CANCEL = 0x25DA,
@@ -1401,13 +1415,13 @@ enum OpcodeServer : uint16
SMSG_MOVE_UPDATE_TURN_RATE = 0x2DAB,
SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DA6,
SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25F2,
- SMSG_NEW_TAXI_PATH = 0x26AC,
- SMSG_NEW_WORLD = 0x25AB,
+ SMSG_NEW_TAXI_PATH = 0x26AD,
+ SMSG_NEW_WORLD = 0x25AC,
SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43,
- SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26D8,
- SMSG_NOTIFY_MONEY = 0x25AE,
- SMSG_NOTIFY_RECEIVED_MAIL = 0x265B,
- SMSG_OFFER_PETITION_ERROR = 0x26E8,
+ SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26D9,
+ SMSG_NOTIFY_MONEY = 0x25AF,
+ SMSG_NOTIFY_RECEIVED_MAIL = 0x265C,
+ SMSG_OFFER_PETITION_ERROR = 0x26E9,
SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x2725,
SMSG_ON_MONSTER_MOVE = 0x2DA2,
SMSG_OPEN_ALLIED_RACE_DETAILS_GIVER = 0x2841,
@@ -1416,7 +1430,7 @@ enum OpcodeServer : uint16
SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27E6,
SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27E8,
SMSG_OPEN_TRANSMOGRIFIER = 0x283E,
- SMSG_OVERRIDE_LIGHT = 0x26EE,
+ SMSG_OVERRIDE_LIGHT = 0x26EF,
SMSG_PAGE_TEXT = 0x2761,
SMSG_PARTY_COMMAND_RESULT = 0x27E3,
SMSG_PARTY_INVITE = 0x25CF,
@@ -1427,15 +1441,15 @@ enum OpcodeServer : uint16
SMSG_PAUSE_MIRROR_TIMER = 0x2758,
SMSG_PENDING_RAID_LOCK = 0x2739,
SMSG_PETITION_ALREADY_SIGNED = 0x25B8,
- SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29F7,
- SMSG_PETITION_SHOW_LIST = 0x26F1,
- SMSG_PETITION_SHOW_SIGNATURES = 0x26F2,
+ SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FA,
+ SMSG_PETITION_SHOW_LIST = 0x26F2,
+ SMSG_PETITION_SHOW_SIGNATURES = 0x26F3,
SMSG_PETITION_SIGN_RESULTS = 0x2798,
SMSG_PET_ACTION_FEEDBACK = 0x2795,
- SMSG_PET_ACTION_SOUND = 0x26CE,
- SMSG_PET_ADDED = 0x25A8,
+ SMSG_PET_ACTION_SOUND = 0x26CF,
+ SMSG_PET_ADDED = 0x25A9,
SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2619,
- SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x26A1,
+ SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x26A2,
SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x2612,
SMSG_PET_BATTLE_FINAL_ROUND = 0x2617,
SMSG_PET_BATTLE_FINISHED = 0x2618,
@@ -1443,65 +1457,65 @@ enum OpcodeServer : uint16
SMSG_PET_BATTLE_INITIAL_UPDATE = 0x2613,
SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x261A,
SMSG_PET_BATTLE_PVP_CHALLENGE = 0x2611,
- SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2658,
- SMSG_PET_BATTLE_QUEUE_STATUS = 0x2659,
+ SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2659,
+ SMSG_PET_BATTLE_QUEUE_STATUS = 0x265A,
SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2616,
SMSG_PET_BATTLE_REQUEST_FAILED = 0x2610,
SMSG_PET_BATTLE_ROUND_RESULT = 0x2615,
SMSG_PET_BATTLE_SLOT_UPDATES = 0x2603,
SMSG_PET_CAST_FAILED = 0x2C57,
SMSG_PET_CLEAR_SPELLS = 0x2C24,
- SMSG_PET_DISMISS_SOUND = 0x26CF,
- SMSG_PET_GOD_MODE = 0x26A9,
+ SMSG_PET_DISMISS_SOUND = 0x26D0,
+ SMSG_PET_GOD_MODE = 0x26AA,
SMSG_PET_GUIDS = 0x274A,
SMSG_PET_LEARNED_SPELLS = 0x2C4F,
- SMSG_PET_MODE = 0x2589,
- SMSG_PET_NAME_INVALID = 0x26F6,
- SMSG_PET_SLOT_UPDATED = 0x2588,
+ SMSG_PET_MODE = 0x258A,
+ SMSG_PET_NAME_INVALID = 0x26F7,
+ SMSG_PET_SLOT_UPDATED = 0x2589,
SMSG_PET_SPELLS_MESSAGE = 0x2C25,
- SMSG_PET_STABLE_LIST = 0x25A9,
- SMSG_PET_STABLE_RESULT = 0x25AA,
- SMSG_PET_TAME_FAILURE = 0x26E5,
+ SMSG_PET_STABLE_LIST = 0x25AA,
+ SMSG_PET_STABLE_RESULT = 0x25AB,
+ SMSG_PET_TAME_FAILURE = 0x26E6,
SMSG_PET_UNLEARNED_SPELLS = 0x2C50,
SMSG_PHASE_SHIFT_CHANGE = 0x2577,
- SMSG_PLAYED_TIME = 0x2711,
+ SMSG_PLAYED_TIME = 0x2712,
SMSG_PLAYER_BOUND = 0x257D,
- SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F6,
+ SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F9,
SMSG_PLAYER_SKINNED = 0x2790,
SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x27A5,
SMSG_PLAY_MUSIC = 0x27B7,
SMSG_PLAY_OBJECT_SOUND = 0x27B8,
SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x277A,
SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C47,
- SMSG_PLAY_SCENE = 0x2655,
+ SMSG_PLAY_SCENE = 0x2656,
SMSG_PLAY_SOUND = 0x27B6,
SMSG_PLAY_SPEAKERBOT_SOUND = 0x27B9,
SMSG_PLAY_SPELL_VISUAL = 0x2C45,
SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C49,
SMSG_PLAY_TIME_WARNING = 0x2743,
SMSG_PONG = 0x304E,
- SMSG_POWER_UPDATE = 0x2705,
+ SMSG_POWER_UPDATE = 0x2706,
SMSG_PRE_RESSURECT = 0x27B5,
SMSG_PRINT_NOTIFICATION = 0x25E1,
SMSG_PROC_RESIST = 0x27A7,
- SMSG_PROPOSE_LEVEL_GRANT = 0x2719,
+ SMSG_PROPOSE_LEVEL_GRANT = 0x271A,
SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51,
SMSG_PVP_CREDIT = 0x271F,
SMSG_PVP_LOG_DATA = 0x25B3,
SMSG_PVP_OPTIONS_ENABLED = 0x25B6,
SMSG_PVP_SEASON = 0x25D3,
- SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x270C,
- SMSG_QUERY_COMMUNITY_NAME_RESPONSE = 0x2708,
- SMSG_QUERY_CREATURE_RESPONSE = 0x2702,
- SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2703,
+ SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x270D,
+ SMSG_QUERY_COMMUNITY_NAME_RESPONSE = 0x2709,
+ SMSG_QUERY_CREATURE_RESPONSE = 0x2703,
+ SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2704,
SMSG_QUERY_GARRISON_CREATURE_NAME_RESPONSE = 0x292B,
SMSG_QUERY_GUILD_INFO_RESPONSE = 0x29E5,
SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x2812,
- SMSG_QUERY_NPC_TEXT_RESPONSE = 0x2706,
- SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2709,
- SMSG_QUERY_PETITION_RESPONSE = 0x270D,
- SMSG_QUERY_PET_NAME_RESPONSE = 0x270B,
- SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x2707,
+ SMSG_QUERY_NPC_TEXT_RESPONSE = 0x2707,
+ SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x270A,
+ SMSG_QUERY_PETITION_RESPONSE = 0x270E,
+ SMSG_QUERY_PET_NAME_RESPONSE = 0x270C,
+ SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x2708,
SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A95,
SMSG_QUERY_TIME_RESPONSE = 0x2723,
SMSG_QUERY_TREASURE_PICKER_RESPONSE = 0x2850,
@@ -1535,51 +1549,52 @@ enum OpcodeServer : uint16
SMSG_RAID_GROUP_ONLY = 0x27F9,
SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4,
SMSG_RAID_MARKERS_CHANGED = 0x25B9,
- SMSG_RANDOM_ROLL = 0x264E,
- SMSG_RATED_BATTLEFIELD_INFO = 0x25A6,
+ SMSG_RANDOM_ROLL = 0x264F,
+ SMSG_RATED_BATTLEFIELD_INFO = 0x25A7,
SMSG_READY_CHECK_COMPLETED = 0x260F,
SMSG_READY_CHECK_RESPONSE = 0x260E,
SMSG_READY_CHECK_STARTED = 0x260D,
SMSG_READ_ITEM_RESULT_FAILED = 0x27F3,
SMSG_READ_ITEM_RESULT_OK = 0x27ED,
SMSG_REALM_LOOKUP_INFORMATION = 0x2818,
- SMSG_REALM_QUERY_RESPONSE = 0x26ED,
+ SMSG_REALM_QUERY_RESPONSE = 0x26EE,
SMSG_RECRUIT_A_FRIEND_RESPONSE = 0x27D5,
SMSG_REFER_A_FRIEND_EXPIRED = 0x276A,
- SMSG_REFER_A_FRIEND_FAILURE = 0x26F3,
- SMSG_REFRESH_COMPONENT = 0x267B,
+ SMSG_REFER_A_FRIEND_FAILURE = 0x26F4,
+ SMSG_REFRESH_COMPONENT = 0x267C,
SMSG_REFRESH_SPELL_HISTORY = 0x2C2C,
SMSG_REMOVE_ITEM_PASSIVE = 0x25C0,
- SMSG_REMOVE_LOSS_OF_CONTROL = 0x269C,
+ SMSG_REMOVE_LOSS_OF_CONTROL = 0x269D,
SMSG_REPLACE_TROPHY_RESPONSE = 0x280F,
- SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26E1,
- SMSG_REQUEST_ADDON_LIST = 0x2661,
- SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x259D,
+ SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26E2,
+ SMSG_REQUEST_ADDON_LIST = 0x2662,
+ SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x259E,
SMSG_REQUEST_PVP_BRAWL_INFO_RESPONSE = 0x25D5,
SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x25D4,
- SMSG_RESEARCH_COMPLETE = 0x2585,
+ SMSG_RESEARCH_COMPLETE = 0x2586,
SMSG_RESET_COMPRESSION_CONTEXT = 0x304F,
- SMSG_RESET_FAILED_NOTIFY = 0x26E9,
+ SMSG_RESET_FAILED_NOTIFY = 0x26EA,
SMSG_RESET_RANGED_COMBAT_TIMER = 0x271C,
SMSG_RESET_WEEKLY_CURRENCY = 0x2574,
- SMSG_RESPEC_WIPE_CONFIRM = 0x2628,
+ SMSG_RESPEC_WIPE_CONFIRM = 0x2629,
SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2571,
SMSG_RESUME_CAST_BAR = 0x2C3E,
SMSG_RESUME_COMMS = 0x304B,
SMSG_RESUME_TOKEN = 0x25BE,
+ SMSG_RESURRECT_CLEAR_DATA = 0x257F,
SMSG_RESURRECT_REQUEST = 0x257E,
SMSG_RESYNC_RUNES = 0x2746,
- SMSG_ROLE_CHANGED_INFORM = 0x258C,
+ SMSG_ROLE_CHANGED_INFORM = 0x258D,
SMSG_ROLE_CHOSEN = 0x2A39,
- SMSG_ROLE_POLL_INFORM = 0x258D,
+ SMSG_ROLE_POLL_INFORM = 0x258E,
SMSG_RUNE_REGEN_DEBUG = 0x25C8,
SMSG_SCENARIO_BOOT = 0x27F4,
SMSG_SCENARIO_COMPLETED = 0x2834,
- SMSG_SCENARIO_POIS = 0x2651,
- SMSG_SCENARIO_PROGRESS_UPDATE = 0x264A,
+ SMSG_SCENARIO_POIS = 0x2652,
+ SMSG_SCENARIO_PROGRESS_UPDATE = 0x264B,
SMSG_SCENARIO_SET_SHOULD_SHOW_CRITERIA = 0x2844,
SMSG_SCENARIO_SPELL_UPDATE = 0x2843,
- SMSG_SCENARIO_STATE = 0x2649,
+ SMSG_SCENARIO_STATE = 0x264A,
SMSG_SCENE_OBJECT_EVENT = 0x25F8,
SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25FD,
SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25FE,
@@ -1588,56 +1603,56 @@ enum OpcodeServer : uint16
SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25FC,
SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25FB,
SMSG_SCRIPT_CAST = 0x2C55,
- SMSG_SELL_RESPONSE = 0x26F7,
+ SMSG_SELL_RESPONSE = 0x26F8,
SMSG_SEND_ITEM_PASSIVES = 0x25C1,
SMSG_SEND_KNOWN_SPELLS = 0x2C2A,
- SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x264C,
- SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x264D,
+ SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x264D,
+ SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x264E,
SMSG_SEND_SPELL_CHARGES = 0x2C2D,
SMSG_SEND_SPELL_HISTORY = 0x2C2B,
SMSG_SEND_UNLEARN_SPELLS = 0x2C2E,
- SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x266C,
- SMSG_SERVER_TIME = 0x26B0,
+ SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x266D,
+ SMSG_SERVER_TIME = 0x26B1,
SMSG_SETUP_CURRENCY = 0x2572,
- SMSG_SETUP_RESEARCH_HISTORY = 0x2584,
+ SMSG_SETUP_RESEARCH_HISTORY = 0x2585,
SMSG_SET_AI_ANIM_KIT = 0x2779,
SMSG_SET_ALL_TASK_PROGRESS = 0x27DD,
SMSG_SET_ANIM_TIER = 0x277D,
SMSG_SET_CURRENCY = 0x2573,
SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E,
- SMSG_SET_DUNGEON_DIFFICULTY = 0x26D2,
+ SMSG_SET_DUNGEON_DIFFICULTY = 0x26D3,
SMSG_SET_FACTION_AT_WAR = 0x2745,
SMSG_SET_FACTION_NOT_VISIBLE = 0x2774,
SMSG_SET_FACTION_STANDING = 0x2775,
SMSG_SET_FACTION_VISIBLE = 0x2773,
SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36,
SMSG_SET_FORCED_REACTIONS = 0x2764,
- SMSG_SET_ITEM_PURCHASE_DATA = 0x25B0,
+ SMSG_SET_ITEM_PURCHASE_DATA = 0x25B1,
SMSG_SET_LOOT_METHOD_FAILED = 0x281E,
SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25B7,
SMSG_SET_MELEE_ANIM_KIT = 0x277C,
SMSG_SET_MOVEMENT_ANIM_KIT = 0x277B,
SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37,
- SMSG_SET_PET_SPECIALIZATION = 0x2643,
- SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2710,
+ SMSG_SET_PET_SPECIALIZATION = 0x2644,
+ SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2711,
SMSG_SET_PLAY_HOVER_ANIM = 0x25CC,
SMSG_SET_PROFICIENCY = 0x277E,
SMSG_SET_SPELL_CHARGES = 0x2C29,
SMSG_SET_TASK_COMPLETE = 0x27DE,
- SMSG_SET_TIME_ZONE_INFORMATION = 0x26A4,
+ SMSG_SET_TIME_ZONE_INFORMATION = 0x26A5,
SMSG_SET_VEHICLE_REC_ID = 0x2738,
SMSG_SHOW_ADVENTURE_MAP = 0x283D,
- SMSG_SHOW_BANK = 0x26AD,
+ SMSG_SHOW_BANK = 0x26AE,
SMSG_SHOW_MAILBOX = 0x27F5,
SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25F1,
- SMSG_SHOW_TAXI_NODES = 0x26FE,
+ SMSG_SHOW_TAXI_NODES = 0x26FF,
SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27BE,
SMSG_SOCKET_GEMS = 0x2770,
SMSG_SOCKET_GEMS_FAILURE = 0x2771,
SMSG_SORT_BAGS_RESULT = 0x282C,
SMSG_SOR_START_EXPERIENCE_INCOMPLETE = 0x25F3,
SMSG_SPECIALIZATION_CHANGED = 0x25ED,
- SMSG_SPECIAL_MOUNT_ANIM = 0x26CD,
+ SMSG_SPECIAL_MOUNT_ANIM = 0x26CE,
SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2760,
SMSG_SPELL_ABSORB_LOG = 0x2C1F,
SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C17,
@@ -1674,26 +1689,26 @@ enum OpcodeServer : uint16
SMSG_STOP_MIRROR_TIMER = 0x2759,
SMSG_STOP_SPEAKERBOT_SOUND = 0x27BA,
SMSG_STREAMING_MOVIES = 0x25BA,
- SMSG_SUMMON_CANCEL = 0x26E0,
- SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258E,
+ SMSG_SUMMON_CANCEL = 0x26E1,
+ SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258F,
SMSG_SUMMON_REQUEST = 0x2768,
SMSG_SUPERCEDED_SPELLS = 0x2C4C,
SMSG_SUSPEND_COMMS = 0x304A,
SMSG_SUSPEND_TOKEN = 0x25BD,
SMSG_TALENTS_INVOLUNTARILY_RESET = 0x275F,
- SMSG_TAXI_NODE_STATUS = 0x26AA,
- SMSG_TEXT_EMOTE = 0x26A8,
- SMSG_THREAT_CLEAR = 0x2718,
- SMSG_THREAT_REMOVE = 0x2717,
- SMSG_THREAT_UPDATE = 0x2716,
+ SMSG_TAXI_NODE_STATUS = 0x26AB,
+ SMSG_TEXT_EMOTE = 0x26A9,
+ SMSG_THREAT_CLEAR = 0x2719,
+ SMSG_THREAT_REMOVE = 0x2718,
+ SMSG_THREAT_UPDATE = 0x2717,
SMSG_TIME_ADJUSTMENT = 0x2DA1,
SMSG_TIME_SYNC_REQUEST = 0x2DA0,
- SMSG_TITLE_EARNED = 0x2713,
- SMSG_TITLE_LOST = 0x2714,
- SMSG_TOTEM_CREATED = 0x26FA,
- SMSG_TOTEM_MOVED = 0x26FB,
- SMSG_TRADE_STATUS = 0x2581,
- SMSG_TRADE_UPDATED = 0x2580,
+ SMSG_TITLE_EARNED = 0x2714,
+ SMSG_TITLE_LOST = 0x2715,
+ SMSG_TOTEM_CREATED = 0x26FB,
+ SMSG_TOTEM_MOVED = 0x26FC,
+ SMSG_TRADE_STATUS = 0x2582,
+ SMSG_TRADE_UPDATED = 0x2581,
SMSG_TRAINER_BUY_FAILED = 0x271E,
SMSG_TRAINER_LIST = 0x271D,
SMSG_TRANSFER_ABORTED = 0x2749,
@@ -1701,7 +1716,7 @@ enum OpcodeServer : uint16
SMSG_TRANSMOG_COLLECTION_UPDATE = 0x25C6,
SMSG_TRANSMOG_SET_COLLECTION_UPDATE = 0x25C7,
SMSG_TRIGGER_CINEMATIC = 0x2816,
- SMSG_TRIGGER_MOVIE = 0x26FC,
+ SMSG_TRIGGER_MOVIE = 0x26FD,
SMSG_TURN_IN_PETITION_RESULT = 0x279A,
SMSG_TUTORIAL_FLAGS = 0x2808,
SMSG_TUTORIAL_HIGHLIGHT_SPELL = 0x284A,
@@ -1713,12 +1728,12 @@ enum OpcodeServer : uint16
SMSG_UNLEARNED_SPELLS = 0x2C4E,
SMSG_UPDATE_ACCOUNT_DATA = 0x2751,
SMSG_UPDATE_ACTION_BUTTONS = 0x25F6,
- SMSG_UPDATE_CELESTIAL_BODY = 0x286E,
+ SMSG_UPDATE_CELESTIAL_BODY = 0x286B,
SMSG_UPDATE_CHARACTER_FLAGS = 0x280E,
- SMSG_UPDATE_EXPANSION_LEVEL = 0x2665,
- SMSG_UPDATE_GAME_TIME_STATE = 0x2875,
- SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26D7,
- SMSG_UPDATE_LAST_INSTANCE = 0x26B6,
+ SMSG_UPDATE_EXPANSION_LEVEL = 0x2666,
+ SMSG_UPDATE_GAME_TIME_STATE = 0x2872,
+ SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26D8,
+ SMSG_UPDATE_LAST_INSTANCE = 0x26B7,
SMSG_UPDATE_OBJECT = 0x2817,
SMSG_UPDATE_TALENT_DATA = 0x25EC,
SMSG_UPDATE_TASK_PROGRESS = 0x27DC,
@@ -1740,10 +1755,10 @@ enum OpcodeServer : uint16
SMSG_WARDEN_DATA = 0x2576,
SMSG_WARFRONT_COMPLETED = 0x27AD,
SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x25B4,
- SMSG_WEATHER = 0x26D4,
+ SMSG_WEATHER = 0x26D5,
SMSG_WEEKLY_SPELL_USAGE = 0x2C18,
SMSG_WHO = 0x2BAE,
- SMSG_WHO_IS = 0x26D3,
+ SMSG_WHO_IS = 0x26D4,
SMSG_WORLD_QUEST_UPDATE = 0x2851,
SMSG_WORLD_SERVER_INFO = 0x25C2,
SMSG_WORLD_TEXT = 0x2836,
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 40f3eff4def..b7003370326 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -360,9 +360,7 @@ namespace WorldPackets
namespace Inspect
{
class Inspect;
- class InspectPVPRequest;
class QueryInspectAchievements;
- class RequestHonorStats;
}
namespace Instance
@@ -613,6 +611,7 @@ namespace WorldPackets
class AccountToysUpdate;
class AddToy;
class UseToy;
+ class ToyClearFanfare;
}
namespace Scenario
@@ -1052,7 +1051,6 @@ class TC_GAME_API WorldSession
void SendDiscoverNewTaxiNode(uint32 nodeid);
// Guild/Arena Team
- void SendNotInArenaTeamPacket(uint8 type);
void SendPetitionShowList(ObjectGuid guid);
void DoLootRelease(ObjectGuid lguid);
@@ -1145,8 +1143,6 @@ class TC_GAME_API WorldSession
// Inspect
void HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect);
- void HandleRequestHonorStatsOpcode(WorldPackets::Inspect::RequestHonorStats& request);
- void HandleInspectPVP(WorldPackets::Inspect::InspectPVPRequest& request);
void HandleQueryInspectAchievements(WorldPackets::Inspect::QueryInspectAchievements& inspect);
void HandleMountSpecialAnimOpcode(WorldPackets::Misc::MountSpecial& mountSpecial);
@@ -1655,6 +1651,7 @@ class TC_GAME_API WorldSession
// Toys
void HandleAddToy(WorldPackets::Toy::AddToy& packet);
void HandleUseToy(WorldPackets::Toy::UseToy& packet);
+ void HandleToyClearFanfare(WorldPackets::Toy::ToyClearFanfare& toyClearFanfare);
void HandleMountSetFavorite(WorldPackets::Misc::MountSetFavorite& mountSetFavorite);
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index 01f401b0920..23c7f211616 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -418,7 +418,7 @@ enum AuraType : uint32
SPELL_AURA_BYPASS_ARMOR_FOR_CASTER = 345,
SPELL_AURA_ENABLE_ALT_POWER = 346, // NYI
SPELL_AURA_MOD_SPELL_COOLDOWN_BY_HASTE = 347,
- SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT = 348,
+ SPELL_AURA_MOD_MONEY_GAIN = 348, // Modifies gold gains from source: [Misc = 0, Quests][Misc = 1, Loot]
SPELL_AURA_MOD_CURRENCY_GAIN = 349,
SPELL_AURA_MOD_GATHERING_ITEMS_GAINED_PERCENT = 350, // NYI
SPELL_AURA_351 = 351,
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 101dfbafe70..9e21f697bf4 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -414,7 +414,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNoImmediateEffect, //345 SPELL_AURA_BYPASS_ARMOR_FOR_CASTER
&AuraEffect::HandleEnableAltPower, //346 SPELL_AURA_ENABLE_ALT_POWER
&AuraEffect::HandleNoImmediateEffect, //347 SPELL_AURA_MOD_SPELL_COOLDOWN_BY_HASTE implemented in SpellHistory::StartCooldown
- &AuraEffect::HandleNoImmediateEffect, //348 SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT implemented in WorldSession::HandleLootMoneyOpcode
+ &AuraEffect::HandleNoImmediateEffect, //348 SPELL_AURA_MOD_MONEY_GAIN implemented in WorldSession::HandleLootMoneyOpcode
&AuraEffect::HandleNoImmediateEffect, //349 SPELL_AURA_MOD_CURRENCY_GAIN implemented in Player::ModifyCurrency
&AuraEffect::HandleNULL, //350 SPELL_AURA_MOD_GATHERING_ITEMS_GAINED_PERCENT
&AuraEffect::HandleNULL, //351 SPELL_AURA_351
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 04c2941fdfc..a72de085989 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -4186,19 +4186,14 @@ void Spell::UpdateSpellCastDataTargets(WorldPackets::Spells::SpellCastData& data
if (targetInfo.missCondition == SPELL_MISS_NONE) // hits
{
data.HitTargets.push_back(targetInfo.targetGUID);
+ data.HitStatus.emplace_back(SPELL_MISS_NONE);
m_channelTargetEffectMask |= targetInfo.effectMask;
}
else // misses
{
data.MissTargets.push_back(targetInfo.targetGUID);
-
- WorldPackets::Spells::SpellMissStatus missStatus;
- missStatus.Reason = targetInfo.missCondition;
- if (targetInfo.missCondition == SPELL_MISS_REFLECT)
- missStatus.ReflectStatus = targetInfo.reflectResult;
-
- data.MissStatus.push_back(missStatus);
+ data.MissStatus.emplace_back(targetInfo.missCondition, targetInfo.reflectResult);
}
}
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index e5b0b7b0873..ffee81c073b 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -181,7 +181,7 @@ class spell_warr_charge_drop_fire_periodic : public SpellScriptLoader
{
int32 timeOffset = 6 * i * aurEff->GetPeriod() / 25;
Movement::Location loc = GetTarget()->movespline->ComputePosition(timeOffset);
- GetTarget()->SendPlaySpellVisual(Position(loc.x, loc.y, loc.z, loc.orientation), 0.f, SPELL_VISUAL_BLAZING_CHARGE, 0, 0, 1.f, true);
+ GetTarget()->SendPlaySpellVisual(Position(loc.x, loc.y, loc.z), 0.f, SPELL_VISUAL_BLAZING_CHARGE, 0, 0, 1.f, true);
}
}
}
diff --git a/src/server/shared/Realm/RealmList.cpp b/src/server/shared/Realm/RealmList.cpp
index 49dac39cef5..9babd0eeec1 100644
--- a/src/server/shared/Realm/RealmList.cpp
+++ b/src/server/shared/Realm/RealmList.cpp
@@ -204,38 +204,48 @@ Realm const* RealmList::GetRealm(Battlenet::RealmHandle const& id) const
return NULL;
}
+// List of client builds for verbose version info in realmlist packet
+static RealmBuildInfo const ClientBuilds[] =
+{
+ { 28938, 8, 1, 5, ' ' },
+ { 21355, 6, 2, 4, ' ' },
+ { 20726, 6, 2, 3, ' ' },
+ { 20574, 6, 2, 2, 'a' },
+ { 20490, 6, 2, 2, 'a' },
+ { 15595, 4, 3, 4, ' ' },
+ { 14545, 4, 2, 2, ' ' },
+ { 13623, 4, 0, 6, 'a' },
+ { 13930, 3, 3, 5, 'a' }, // 3.3.5a China Mainland build
+ { 12340, 3, 3, 5, 'a' },
+ { 11723, 3, 3, 3, 'a' },
+ { 11403, 3, 3, 2, ' ' },
+ { 11159, 3, 3, 0, 'a' },
+ { 10505, 3, 2, 2, 'a' },
+ { 9947, 3, 1, 3, ' ' },
+ { 8606, 2, 4, 3, ' ' },
+ { 6141, 1, 12, 3, ' ' },
+ { 6005, 1, 12, 2, ' ' },
+ { 5875, 1, 12, 1, ' ' },
+};
+
RealmBuildInfo const* RealmList::GetBuildInfo(uint32 build) const
{
- // List of client builds for verbose version info in realmlist packet
- static std::vector<RealmBuildInfo> const ClientBuilds =
- {
- { 21355, 6, 2, 4, ' ' },
- { 20726, 6, 2, 3, ' ' },
- { 20574, 6, 2, 2, 'a' },
- { 20490, 6, 2, 2, 'a' },
- { 15595, 4, 3, 4, ' ' },
- { 14545, 4, 2, 2, ' ' },
- { 13623, 4, 0, 6, 'a' },
- { 13930, 3, 3, 5, 'a' }, // 3.3.5a China Mainland build
- { 12340, 3, 3, 5, 'a' },
- { 11723, 3, 3, 3, 'a' },
- { 11403, 3, 3, 2, ' ' },
- { 11159, 3, 3, 0, 'a' },
- { 10505, 3, 2, 2, 'a' },
- { 9947, 3, 1, 3, ' ' },
- { 8606, 2, 4, 3, ' ' },
- { 6141, 1, 12, 3, ' ' },
- { 6005, 1, 12, 2, ' ' },
- { 5875, 1, 12, 1, ' ' },
- };
-
- for (std::size_t i = 0; i < ClientBuilds.size(); ++i)
- if (ClientBuilds[i].Build == build)
- return &ClientBuilds[i];
+ for (RealmBuildInfo const& clientBuild : ClientBuilds)
+ if (clientBuild.Build == build)
+ return &clientBuild;
return nullptr;
}
+uint32 RealmList::GetMinorMajorBugfixVersionForBuild(uint32 build) const
+{
+ RealmBuildInfo const* buildInfo = std::lower_bound(std::begin(ClientBuilds), std::end(ClientBuilds), build, [](RealmBuildInfo const& buildInfo, uint32 value)
+ {
+ return buildInfo.Build < value;
+ });
+ return buildInfo != std::end(ClientBuilds) ? (buildInfo->MajorVersion * 10000 + buildInfo->MinorVersion * 100 + buildInfo->BugfixVersion) : 0;
+}
+
void RealmList::WriteSubRegions(bgs::protocol::game_utilities::v1::GetAllValuesForAttributeResponse* response) const
{
boost::shared_lock<boost::shared_mutex> lock(*_realmsMutex);
diff --git a/src/server/shared/Realm/RealmList.h b/src/server/shared/Realm/RealmList.h
index 2bacdf308ee..da1a6b2c4e8 100644
--- a/src/server/shared/Realm/RealmList.h
+++ b/src/server/shared/Realm/RealmList.h
@@ -92,6 +92,7 @@ public:
Realm const* GetRealm(Battlenet::RealmHandle const& id) const;
RealmBuildInfo const* GetBuildInfo(uint32 build) const;
+ uint32 GetMinorMajorBugfixVersionForBuild(uint32 build) const;
void WriteSubRegions(bgs::protocol::game_utilities::v1::GetAllValuesForAttributeResponse* response) const;
std::vector<uint8> GetRealmEntryJSON(Battlenet::RealmHandle const& id, uint32 build) const;
std::vector<uint8> GetRealmList(uint32 build, std::string const& subRegion) const;