aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2018-02-10 01:24:00 +0100
committerShauren <shauren.trinity@gmail.com>2018-02-18 16:33:49 +0100
commit4af15915bc8b780ef854c2e58d7ab5bb38f56758 (patch)
treefbbc2706ca6385e153a3b648b91c5a701d2bc271
parentc9465979c6002ae43bb8e536e3ad0f6d1be36b98 (diff)
Core/PacketIO: Updated opcodes and packet structures to 7.3.5
-rw-r--r--sql/base/characters_database.sql4
-rw-r--r--sql/updates/characters/master/2018_02_08_00_characters.sql1
-rw-r--r--sql/updates/world/master/2018_02_08_00_world.sql14
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp14
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp5
-rw-r--r--src/server/game/Entities/Item/ItemDefines.h1
-rw-r--r--src/server/game/Entities/Player/Player.cpp46
-rw-r--r--src/server/game/Entities/Player/Player.h12
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp82
-rw-r--r--src/server/game/Globals/ObjectMgr.h29
-rw-r--r--src/server/game/Guilds/Guild.h2
-rw-r--r--src/server/game/Guilds/GuildMgr.cpp2
-rw-r--r--src/server/game/Handlers/AuthHandler.cpp3
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp54
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp2
-rw-r--r--src/server/game/Handlers/QueryHandler.cpp1
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h114
-rw-r--r--src/server/game/Quests/QuestDef.cpp129
-rw-r--r--src/server/game/Quests/QuestDef.h6
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.h1
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp140
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h19
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.cpp2
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h2
-rw-r--r--src/server/game/Server/Packets/InstancePackets.cpp2
-rw-r--r--src/server/game/Server/Packets/InstancePackets.h1
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h8
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h1
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h1
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h11
-rw-r--r--src/server/game/Server/Packets/TicketPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/TicketPackets.h2
-rw-r--r--src/server/game/Server/Packets/WhoPackets.h2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp9
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h1523
-rw-r--r--src/server/game/Server/WorldSession.cpp3
-rw-r--r--src/server/game/Server/WorldSession.h2
-rw-r--r--src/server/game/Server/WorldSocket.cpp16
43 files changed, 1239 insertions, 1048 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 964dd61d6d0..f407dd0afef 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -1710,6 +1710,7 @@ CREATE TABLE `characters` (
`prestigeLevel` INT(10) unsigned NOT NULL DEFAULT '0',
`honorRestState` TINYINT unsigned NOT NULL DEFAULT '2',
`honorRestBonus` FLOAT NOT NULL DEFAULT '0',
+ `lastLoginBuild` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`guid`),
KEY `idx_account` (`account`),
KEY `idx_online` (`online`),
@@ -3534,7 +3535,8 @@ INSERT INTO `updates` VALUES
('2017_08_20_00_characters.sql','8C5BBF6AEAA6C7DE2F40A7D3878C8187A4729F13','ARCHIVED','2017-08-20 17:00:00',0),
('2017_08_20_01_characters.sql','2F50D5E6BF3888B8C5270D79228A1D0601FAFF1D','ARCHIVED','2017-08-20 17:52:21',0),
('2017_10_29_00_characters.sql','8CFC473E7E87E58C317A72016BF69E9050D3BC83','ARCHIVED','2017-04-19 00:07:40',25),
-('2018_02_03_00_characters.sql','73E9BFD848D7A22F2A7DD89CF64E30E3A8689512','RELEASED','2018-02-03 23:52:42', 0);
+('2018_02_03_00_characters.sql','73E9BFD848D7A22F2A7DD89CF64E30E3A8689512','RELEASED','2018-02-03 23:52:42',0),
+('2018_02_08_00_characters.sql','75FA162A9B85D678B26F972371265F1EC2C75187','RELEASED','2018-02-08 22:23:28',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/characters/master/2018_02_08_00_characters.sql b/sql/updates/characters/master/2018_02_08_00_characters.sql
new file mode 100644
index 00000000000..5e8f8dbac02
--- /dev/null
+++ b/sql/updates/characters/master/2018_02_08_00_characters.sql
@@ -0,0 +1 @@
+ALTER TABLE `characters` ADD `lastLoginBuild` int(10) unsigned NOT NULL DEFAULT '0' AFTER `honorRestBonus`;
diff --git a/sql/updates/world/master/2018_02_08_00_world.sql b/sql/updates/world/master/2018_02_08_00_world.sql
new file mode 100644
index 00000000000..181eb7991f4
--- /dev/null
+++ b/sql/updates/world/master/2018_02_08_00_world.sql
@@ -0,0 +1,14 @@
+ALTER TABLE `guild_rewards` CHANGE `RaceMask` `RaceMask` bigint(20) unsigned DEFAULT '0';
+
+ALTER TABLE `playerchoice`
+ ADD `UiTextureKitId` int(11) NOT NULL DEFAULT '0' AFTER `ChoiceId`,
+ ADD `HideWarboardHeader` tinyint(1) NOT NULL DEFAULT '0' AFTER `Question`;
+
+ALTER TABLE `quest_poi` ADD `AlwaysAllowMergingBlobs` tinyint(1) unsigned NOT NULL DEFAULT '0' AFTER `WoDUnk1`;
+
+ALTER TABLE `quest_template`
+ ADD `MaxScalingLevel` int(11) NOT NULL DEFAULT '255' AFTER `QuestLevel`,
+ CHANGE `AllowableRaces` `AllowableRaces` bigint(20) unsigned NOT NULL DEFAULT 0xFFFFFFFFFFFFFFFF;
+
+RENAME TABLE `race_expansion_requirement` TO `race_unlock_requirement`;
+ALTER TABLE `race_unlock_requirement` ADD `achievementId` int(10) unsigned NOT NULL DEFAULT '0';
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index ceeed6ac50f..698d3a4c6e9 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -51,21 +51,21 @@ void CharacterDatabaseConnection::DoPrepareStatements()
"subject, deliver_time, expire_time, money, has_items FROM mail WHERE receiver = ? ", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_MAIL_LIST_ITEMS, "SELECT itemEntry,count FROM item_instance WHERE guid = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_ENUM, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, "
- "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup "
+ "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild "
"FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN guild_member AS gm ON c.guid = gm.guid "
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? AND c.deleteInfos_Name IS NULL", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_ENUM_DECLINED_NAME, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, "
"c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, "
- "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? "
+ "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? "
"LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid "
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? AND c.deleteInfos_Name IS NULL", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_UNDELETE_ENUM, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, "
- "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup "
+ "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild "
"FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN guild_member AS gm ON c.guid = gm.guid "
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_UNDELETE_ENUM_DECLINED_NAME, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, "
"c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, "
- "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? "
+ "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? "
"LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid "
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_FREE_NAME, "SELECT name, at_login FROM characters WHERE guid = ? AND NOT EXISTS (SELECT NULL FROM characters WHERE name = ?)", CONNECTION_ASYNC);
@@ -428,14 +428,14 @@ void CharacterDatabaseConnection::DoPrepareStatements()
"extra_flags, stable_slots, at_login, zone, "
"death_expire_time, taxi_path, totalKills, "
"todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, "
- "power4, power5, power6, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, grantableLevels) VALUES "
- "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", CONNECTION_ASYNC);
+ "power4, power5, power6, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, grantableLevels, lastLoginBuild) VALUES "
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,skin=?,face=?,hairStyle=?,hairColor=?,facialStyle=?,customDisplay1=?,customDisplay2=?,customDisplay3=?,inventorySlots=?,bankSlots=?,restState=?,playerFlags=?,playerFlagsEx=?,"
"map=?,instance_id=?,dungeonDifficulty=?,raidDifficulty=?,legacyRaidDifficulty=?,position_x=?,position_y=?,position_z=?,orientation=?,trans_x=?,trans_y=?,trans_z=?,trans_o=?,transguid=?,taximask=?,cinematic=?,totaltime=?,leveltime=?,rest_bonus=?,"
"logout_time=?,is_logout_resting=?,resettalents_cost=?,resettalents_time=?,primarySpecialization=?,extra_flags=?,stable_slots=?,at_login=?,zone=?,death_expire_time=?,taxi_path=?,"
"totalKills=?,todayKills=?,yesterdayKills=?,chosenTitle=?,"
"watchedFaction=?,drunk=?,health=?,power1=?,power2=?,power3=?,power4=?,power5=?,power6=?,latency=?,activeTalentGroup=?,lootSpecId=?,exploredZones=?,"
- "equipmentCache=?,knownTitles=?,actionBars=?,grantableLevels=?,online=?,honor=?,honorLevel=?,prestigeLevel=?,honorRestState=?,honorRestBonus=? WHERE guid=?", CONNECTION_ASYNC);
+ "equipmentCache=?,knownTitles=?,actionBars=?,grantableLevels=?,online=?,honor=?,honorLevel=?,prestigeLevel=?,honorRestState=?,honorRestBonus=?,lastLoginBuild=? WHERE guid=?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG, "UPDATE characters SET at_login = at_login | ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_REM_AT_LOGIN_FLAG, "UPDATE characters set at_login = at_login & ~ ? WHERE guid = ?", CONNECTION_ASYNC);
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index a8fb5710dcd..e30e5d28e95 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -244,6 +244,7 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID)
text.QuestID = questID;
text.QuestType = item.QuestIcon;
text.QuestLevel = quest->GetQuestLevel();
+ text.QuestMaxScalingLevel = quest->GetQuestMaxScalingLevel();
text.QuestFlags[0] = quest->GetFlags();
text.QuestFlags[1] = quest->GetFlagsEx();
text.Repeatable = quest->IsRepeatable();
@@ -380,7 +381,8 @@ void PlayerMenu::SendQuestGiverQuestListMessage(ObjectGuid guid)
bool repeatable = false; // NYI
- questList.QuestDataText.emplace_back(questID, questMenuItem.QuestIcon, quest->GetQuestLevel(), quest->GetFlags(), quest->GetFlagsEx(), repeatable, title);
+ questList.QuestDataText.emplace_back(questID, questMenuItem.QuestIcon, quest->GetQuestLevel(), quest->GetQuestMaxScalingLevel(),
+ quest->GetFlags(), quest->GetFlagsEx(), repeatable, std::move(title));
}
}
@@ -506,6 +508,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
packet.Info.QuestID = quest->GetQuestId();
packet.Info.QuestType = quest->GetQuestType();
packet.Info.QuestLevel = quest->GetQuestLevel();
+ packet.Info.QuestMaxScalingLevel = quest->GetQuestMaxScalingLevel();
packet.Info.QuestPackageID = quest->GetQuestPackageID();
packet.Info.QuestMinLevel = quest->GetMinLevel();
packet.Info.QuestSortID = quest->GetZoneOrSort();
diff --git a/src/server/game/Entities/Item/ItemDefines.h b/src/server/game/Entities/Item/ItemDefines.h
index 9f5c6ce1aa5..107a89c6152 100644
--- a/src/server/game/Entities/Item/ItemDefines.h
+++ b/src/server/game/Entities/Item/ItemDefines.h
@@ -123,6 +123,7 @@ enum InventoryResult : uint8
EQUIP_ERR_CANT_USE_ITEM = 98, // You can't use that item.
EQUIP_ERR_CANT_BE_OBLITERATED = 99, // You can't obliterate that item
EQUIP_ERR_GUILD_BANK_CONJURED_ITEM = 100,// You cannot store conjured items in the guild bank
+ EQUIP_ERR_CANT_DO_THAT_RIGHT_NOW = 101,// You can't do that right now.
};
enum BuyResult
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index fc29e464fbf..47aaec14608 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2354,7 +2354,7 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
packet.Reason = victim ? LOG_XP_REASON_KILL : LOG_XP_REASON_NO_KILL;
packet.Amount = xp;
packet.GroupBonus = group_rate;
- packet.ReferAFriend = recruitAFriend;
+ packet.ReferAFriendBonusType = recruitAFriend ? 1 : 0;
GetSession()->SendPacket(packet.Write());
uint32 curXP = GetUInt32Value(PLAYER_XP);
@@ -9846,6 +9846,42 @@ bool Player::IsValidPos(uint8 bag, uint8 slot, bool explicit_pos) const
void Player::SetInventorySlotCount(uint8 slots)
{
ASSERT(slots <= (INVENTORY_SLOT_ITEM_END - INVENTORY_SLOT_ITEM_START));
+
+ if (slots < GetInventorySlotCount())
+ {
+ std::vector<Item*> unstorableItems;
+
+ for (uint8 slot = INVENTORY_SLOT_ITEM_START + slots; slot < INVENTORY_SLOT_ITEM_END; ++slot)
+ if (Item* unstorableItem = GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
+ unstorableItems.push_back(unstorableItem);
+
+ if (!unstorableItems.empty())
+ {
+ std::size_t fullBatches = unstorableItems.size() / MAX_MAIL_ITEMS;
+ std::size_t remainder = unstorableItems.size() % MAX_MAIL_ITEMS;
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+
+ auto sendItemsBatch = [this, &trans, &unstorableItems](std::size_t batchNumber, std::size_t batchSize)
+ {
+ MailDraft draft(GetSession()->GetTrinityString(LANG_NOT_EQUIPPED_ITEM), "There were problems with equipping item(s).");
+ for (std::size_t j = 0; j < batchSize; ++j)
+ draft.AddItem(unstorableItems[batchNumber * MAX_MAIL_ITEMS + j]);
+
+ draft.SendMailTo(trans, this, MailSender(this, MAIL_STATIONERY_GM), MAIL_CHECK_MASK_COPIED);
+ };
+
+ for (std::size_t batch = 0; batch < fullBatches; ++batch)
+ sendItemsBatch(batch, MAX_MAIL_ITEMS);
+
+ if (remainder)
+ sendItemsBatch(fullBatches, remainder);
+
+ CharacterDatabase.CommitTransaction(trans);
+
+ SendDirectMessage(WorldPackets::Item::CharacterInventoryOverflowWarning().Write());
+ }
+ }
+
SetByteValue(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS, slots);
}
@@ -15620,8 +15656,8 @@ bool Player::SatisfyQuestClass(Quest const* qInfo, bool msg) const
bool Player::SatisfyQuestRace(Quest const* qInfo, bool msg) const
{
- int32 reqraces = qInfo->GetAllowableRaces();
- if (reqraces == -1)
+ uint64 reqraces = qInfo->GetAllowableRaces();
+ if (reqraces == uint64(-1))
return true;
if ((reqraces & getRaceMask()) == 0)
{
@@ -19893,6 +19929,7 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setUInt8(index++, GetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES));
stmt->setUInt32(index++, m_grantableLevels);
+ stmt->setUInt32(index++, realm.Build);
}
else
{
@@ -20043,6 +20080,7 @@ void Player::SaveToDB(bool create /*=false*/)
stmt->setUInt32(index++, GetPrestigeLevel());
stmt->setUInt8(index++, uint8(GetUInt32Value(PLAYER_FIELD_REST_INFO + REST_STATE_HONOR)));
stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_HONOR)));
+ stmt->setUInt32(index++, realm.Build);
// Index
stmt->setUInt64(index, GetGUID().GetCounter());
@@ -27174,12 +27212,14 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId)
WorldPackets::Quest::DisplayPlayerChoice displayPlayerChoice;
displayPlayerChoice.SenderGUID = sender;
displayPlayerChoice.ChoiceID = choiceId;
+ displayPlayerChoice.UiTextureKitID = playerChoice->UiTextureKitId;
displayPlayerChoice.Question = playerChoice->Question;
if (playerChoiceLocale)
ObjectMgr::GetLocaleString(playerChoiceLocale->Question, locale, displayPlayerChoice.Question);
displayPlayerChoice.Responses.resize(playerChoice->Responses.size());
displayPlayerChoice.CloseChoiceFrame = false;
+ displayPlayerChoice.HideWarboardHeader = playerChoice->HideWarboardHeader;
for (std::size_t i = 0; i < playerChoice->Responses.size(); ++i)
{
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 02f97985629..30e96a23232 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -425,14 +425,17 @@ enum PlayerFlagsEx
enum PlayerLocalFlags
{
+ PLAYER_LOCAL_FLAG_CONTROLLING_PET = 0x00000001, // Displays "You have an active summon already" when trying to tame new pet
PLAYER_LOCAL_FLAG_TRACK_STEALTHED = 0x00000002,
PLAYER_LOCAL_FLAG_RELEASE_TIMER = 0x00000008, // Display time till auto release spirit
PLAYER_LOCAL_FLAG_NO_RELEASE_WINDOW = 0x00000010, // Display no "release spirit" window at all
PLAYER_LOCAL_FLAG_NO_PET_BAR = 0x00000020, // CGPetInfo::IsPetBarUsed
PLAYER_LOCAL_FLAG_OVERRIDE_CAMERA_MIN_HEIGHT = 0x00000040,
+ PLAYER_LOCAL_FLAG_NEWLY_BOOSTED_CHARACTER = 0x00000080,
PLAYER_LOCAL_FLAG_USING_PARTY_GARRISON = 0x00000100,
PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED = 0x00000200,
- PLAYER_LOCAL_FLAG_CAN_VISIT_PARTY_GARRISON = 0x00000400
+ PLAYER_LOCAL_FLAG_CAN_VISIT_PARTY_GARRISON = 0x00000400,
+ PLAYER_LOCAL_FLAG_ACCOUNT_SECURED = 0x00001000, // Script_IsAccountSecured
};
enum PlayerBytesOffsets
@@ -1341,7 +1344,12 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
/*** QUEST SYSTEM ***/
/*********************************************************/
- int32 GetQuestLevel(Quest const* quest) const { return quest && (quest->GetQuestLevel() > 0) ? quest->GetQuestLevel() : getLevel(); }
+ int32 GetQuestLevel(Quest const* quest) const
+ {
+ if (!quest)
+ return getLevel();
+ return quest->GetQuestLevel() > 0 ? quest->GetQuestLevel() : std::min<int32>(getLevel(), quest->GetQuestMaxScalingLevel());
+ }
void PrepareQuestMenu(ObjectGuid guid);
void SendPreparedQuest(ObjectGuid guid);
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 8e61eb33baa..9bd7d5c107d 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -3876,35 +3876,35 @@ void ObjectMgr::LoadQuests()
mExclusiveQuestGroups.clear();
QueryResult result = WorldDatabase.Query("SELECT "
- //0 1 2 3 4 5 6 7 8 9 10
- "ID, QuestType, QuestLevel, QuestPackageID, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, "
- //11 12 13 14 15 16 17 18 19 20 21
+ //0 1 2 3 4 5 6 7 8 9 10 11
+ "ID, QuestType, QuestLevel, MaxScalingLevel, QuestPackageID, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, "
+ //12 13 14 15 16 17 18 19 20 21 22
"RewardMoney, RewardMoneyDifficulty, RewardMoneyMultiplier, RewardBonusMoney, RewardDisplaySpell1, RewardDisplaySpell2, RewardDisplaySpell3, RewardSpell, RewardHonor, RewardKillHonor, StartItem, "
- //22 23 24 25 26
+ //23 24 25 26 27
"RewardArtifactXPDifficulty, RewardArtifactXPMultiplier, RewardArtifactCategoryID, Flags, FlagsEx, "
- //27 28 29 30 31 32 33 34
+ //28 29 30 31 32 33 34 35
"RewardItem1, RewardAmount1, ItemDrop1, ItemDropQuantity1, RewardItem2, RewardAmount2, ItemDrop2, ItemDropQuantity2, "
- //35 36 37 38 39 40 41 42
+ //36 37 38 39 40 41 42 43
"RewardItem3, RewardAmount3, ItemDrop3, ItemDropQuantity3, RewardItem4, RewardAmount4, ItemDrop4, ItemDropQuantity4, "
- //43 44 45 46 47 48
+ //44 45 46 47 48 49
"RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemDisplayID1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemDisplayID2, "
- //49 50 51 52 53 54
+ //50 51 52 53 54 55
"RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemDisplayID3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemDisplayID4, "
- //55 56 57 58 59 60
+ //56 57 58 59 60 61
"RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemDisplayID5, RewardChoiceItemID6, RewardChoiceItemQuantity6, RewardChoiceItemDisplayID6, "
- //61 62 63 64 65 66 67 68 69 70
+ //62 63 64 65 66 67 68 69 70 71
"POIContinent, POIx, POIy, POIPriority, RewardTitle, RewardArenaPoints, RewardSkillLineID, RewardNumSkillUps, PortraitGiver, PortraitTurnIn, "
- //71 72 73 74 75 76 77 78
+ //72 73 74 75 76 77 78 79
"RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionCapIn1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionCapIn2, "
- //79 80 81 82 83 84 85 86
+ //80 81 82 83 84 85 86 87
"RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionCapIn3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionCapIn4, "
- //87 88 89 90 91
+ //88 89 90 91 92
"RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, "
- //92 93 94 95 96 97 98 99
+ //93 94 95 96 97 98 99 100
"RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, "
- //100 101 102 103 104 105 106
+ //101 102 103 104 105 106 107
"AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, QuestRewardID, Expansion, "
- //107 108 109 110 111 112 113 114 115
+ //108 109 110 111 112 113 114 115 116
"LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog"
" FROM quest_template");
if (!result)
@@ -4199,12 +4199,12 @@ void ObjectMgr::LoadQuests()
}
}
// AllowableRaces, can be -1/RACEMASK_ALL_PLAYABLE to allow any race
- if (qinfo->AllowableRaces != -1)
+ if (qinfo->AllowableRaces != uint64(-1))
{
- if (qinfo->AllowableRaces > 0 && !(uint32(qinfo->AllowableRaces) & RACEMASK_ALL_PLAYABLE))
+ if (qinfo->AllowableRaces > 0 && !(qinfo->AllowableRaces & RACEMASK_ALL_PLAYABLE))
{
- TC_LOG_ERROR("sql.sql", "Quest %u does not contain any playable races in `AllowableRaces` (%d), value set to 0 (all races).", qinfo->GetQuestId(), qinfo->AllowableRaces);
- qinfo->AllowableRaces = -1;
+ TC_LOG_ERROR("sql.sql", "Quest %u does not contain any playable races in `AllowableRaces` (" UI64FMTD "), value set to 0 (all races).", qinfo->GetQuestId(), qinfo->AllowableRaces);
+ qinfo->AllowableRaces = uint64(-1);
}
}
// RequiredSkillId, can be 0
@@ -7573,8 +7573,8 @@ void ObjectMgr::LoadQuestPOI()
uint32 count = 0;
- // 0 1 2 3 4 5 6 7 8 9 10 11 12 13
- QueryResult result = WorldDatabase.Query("SELECT QuestID, BlobIndex, Idx1, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, WoDUnk1 FROM quest_poi order by QuestID, Idx1");
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ QueryResult result = WorldDatabase.Query("SELECT QuestID, BlobIndex, Idx1, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, WoDUnk1, AlwaysAllowMergingBlobs FROM quest_poi order by QuestID, Idx1");
if (!result)
{
TC_LOG_ERROR("server.loading", ">> Loaded 0 quest POI definitions. DB table `quest_poi` is empty.");
@@ -7628,11 +7628,12 @@ void ObjectMgr::LoadQuestPOI()
int32 WorldEffectID = fields[11].GetInt32();
int32 PlayerConditionID = fields[12].GetInt32();
int32 WoDUnk1 = fields[13].GetInt32();
+ bool AlwaysAllowMergingBlobs = fields[14].GetBool();
if (!sObjectMgr->GetQuestTemplate(QuestID))
TC_LOG_ERROR("sql.sql", "`quest_poi` quest id (%u) Idx1 (%u) does not exist in `quest_template`", QuestID, Idx1);
- QuestPOI POI(BlobIndex, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, WoDUnk1);
+ QuestPOI POI(BlobIndex, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, WoDUnk1, AlwaysAllowMergingBlobs);
if (QuestID < int32(POIs.size()) && Idx1 < int32(POIs[QuestID].size()))
{
POI.points = POIs[QuestID][Idx1];
@@ -9645,10 +9646,10 @@ PlayerInfo const* ObjectMgr::GetPlayerInfo(uint32 race, uint32 class_) const
void ObjectMgr::LoadRaceAndClassExpansionRequirements()
{
uint32 oldMSTime = getMSTime();
- _raceExpansionRequirementStore.clear();
+ _raceUnlockRequirementStore.clear();
- // 0 1
- QueryResult result = WorldDatabase.Query("SELECT raceID, expansion FROM `race_expansion_requirement`");
+ // 0 1 2
+ QueryResult result = WorldDatabase.Query("SELECT raceID, expansion, achievementId FROM `race_unlock_requirement`");
if (result)
{
@@ -9657,28 +9658,37 @@ void ObjectMgr::LoadRaceAndClassExpansionRequirements()
{
Field* fields = result->Fetch();
- uint8 raceID = fields[0].GetInt8();
- uint8 expansion = fields[1].GetInt8();
+ uint8 raceID = fields[0].GetUInt8();
+ uint8 expansion = fields[1].GetUInt8();
+ uint32 achievementId = fields[2].GetUInt32();
ChrRacesEntry const* raceEntry = sChrRacesStore.LookupEntry(raceID);
if (!raceEntry)
{
- TC_LOG_ERROR("sql.sql", "Race %u defined in `race_expansion_requirement` does not exists, skipped.", raceID);
+ TC_LOG_ERROR("sql.sql", "Race %u defined in `race_unlock_requirement` does not exists, skipped.", raceID);
continue;
}
- if (expansion >= MAX_EXPANSIONS)
+ if (expansion >= MAX_ACCOUNT_EXPANSIONS)
+ {
+ TC_LOG_ERROR("sql.sql", "Race %u defined in `race_unlock_requirement` has incorrect expansion %u, skipped.", raceID, expansion);
+ continue;
+ }
+
+ if (achievementId && !sAchievementStore.LookupEntry(achievementId))
{
- TC_LOG_ERROR("sql.sql", "Race %u defined in `race_expansion_requirement` has incorrect expansion %u, skipped.", raceID, expansion);
+ TC_LOG_ERROR("sql.sql", "Race %u defined in `race_unlock_requirement` has incorrect achievement %u, skipped.", raceID, achievementId);
continue;
}
- _raceExpansionRequirementStore[raceID] = expansion;
+ RaceUnlockRequirement& raceUnlockRequirement = _raceUnlockRequirementStore[raceID];
+ raceUnlockRequirement.Expansion = expansion;
+ raceUnlockRequirement.AchievementId = achievementId;
++count;
}
while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %u race expansion requirements in %u ms.", count, GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " race expansion requirements in %u ms.", _raceUnlockRequirementStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
else
TC_LOG_INFO("server.loading", ">> Loaded 0 race expansion requirements. DB table `race_expansion_requirement` is empty.");
@@ -9910,7 +9920,7 @@ void ObjectMgr::LoadPlayerChoices()
uint32 oldMSTime = getMSTime();
_playerChoices.clear();
- QueryResult choices = WorldDatabase.Query("SELECT ChoiceId, Question FROM playerchoice");
+ QueryResult choices = WorldDatabase.Query("SELECT ChoiceId, UiTextureKitId, Question, HideWarboardHeader FROM playerchoice");
if (!choices)
{
@@ -9932,7 +9942,9 @@ void ObjectMgr::LoadPlayerChoices()
PlayerChoice& choice = _playerChoices[choiceId];
choice.ChoiceId = choiceId;
- choice.Question = fields[1].GetString();
+ choice.UiTextureKitId = fields[1].GetInt32();
+ choice.Question = fields[2].GetString();
+ choice.HideWarboardHeader = fields[3].GetBool();
} while (choices->NextRow());
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 7f3dd1b5115..63429371f62 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -718,11 +718,12 @@ struct QuestPOI
int32 PlayerConditionID;
int32 UnkWoD1;
std::vector<QuestPOIPoint> points;
+ bool AlwaysAllowMergingBlobs;
- QuestPOI() : BlobIndex(0), ObjectiveIndex(0), QuestObjectiveID(0), QuestObjectID(0), MapID(0), WorldMapAreaID(0), Floor(0), Priority(0), Flags(0), WorldEffectID(0), PlayerConditionID(0), UnkWoD1(0) { }
- QuestPOI(int32 _BlobIndex, int32 _ObjectiveIndex, int32 _QuestObjectiveID, int32 _QuestObjectID, int32 _MapID, int32 _WorldMapAreaID, int32 _Foor, int32 _Priority, int32 _Flags, int32 _WorldEffectID, int32 _PlayerConditionID, int32 _UnkWoD1) :
+ QuestPOI() : BlobIndex(0), ObjectiveIndex(0), QuestObjectiveID(0), QuestObjectID(0), MapID(0), WorldMapAreaID(0), Floor(0), Priority(0), Flags(0), WorldEffectID(0), PlayerConditionID(0), UnkWoD1(0), AlwaysAllowMergingBlobs(false){ }
+ QuestPOI(int32 _BlobIndex, int32 _ObjectiveIndex, int32 _QuestObjectiveID, int32 _QuestObjectID, int32 _MapID, int32 _WorldMapAreaID, int32 _Foor, int32 _Priority, int32 _Flags, int32 _WorldEffectID, int32 _PlayerConditionID, int32 _UnkWoD1, bool _AlwaysAllowMergingBlobs) :
BlobIndex(_BlobIndex), ObjectiveIndex(_ObjectiveIndex), QuestObjectiveID(_QuestObjectiveID), QuestObjectID(_QuestObjectID), MapID(_MapID), WorldMapAreaID(_WorldMapAreaID),
- Floor(_Foor), Priority(_Priority), Flags(_Flags), WorldEffectID(_WorldEffectID), PlayerConditionID(_PlayerConditionID), UnkWoD1(_UnkWoD1) { }
+ Floor(_Foor), Priority(_Priority), Flags(_Flags), WorldEffectID(_WorldEffectID), PlayerConditionID(_PlayerConditionID), UnkWoD1(_UnkWoD1), AlwaysAllowMergingBlobs(_AlwaysAllowMergingBlobs) { }
};
typedef std::vector<QuestPOI> QuestPOIVector;
@@ -813,8 +814,10 @@ struct PlayerChoiceResponse
struct PlayerChoice
{
int32 ChoiceId;
+ int32 UiTextureKitId;
std::string Question;
std::vector<PlayerChoiceResponse> Responses;
+ bool HideWarboardHeader;
PlayerChoiceResponse const* GetResponse(int32 responseId) const
{
@@ -899,6 +902,12 @@ typedef std::unordered_map<uint32, std::vector<uint32 /*id*/>> TerrainPhaseInfo;
typedef std::unordered_map<uint32, std::vector<uint32>> TerrainUIPhaseInfo; // worldmaparea swap
typedef std::unordered_map<uint32, std::vector<PhaseInfoStruct>> PhaseInfo; // phase
+struct RaceUnlockRequirement
+{
+ uint8 Expansion;
+ uint32 AchievementId;
+};
+
class PlayerDumpReader;
class TC_GAME_API ObjectMgr
@@ -1567,13 +1576,13 @@ class TC_GAME_API ObjectMgr
std::string GetNormalizedRealmName(uint32 realm) const;
bool GetRealmName(uint32 realmId, std::string& name, std::string& normalizedName) const;
- std::unordered_map<uint8, uint8> const& GetRaceExpansionRequirements() const { return _raceExpansionRequirementStore; }
- uint8 GetRaceExpansionRequirement(uint8 race) const
+ std::unordered_map<uint8, RaceUnlockRequirement> const& GetRaceUnlockRequirements() const { return _raceUnlockRequirementStore; }
+ RaceUnlockRequirement const* GetRaceUnlockRequirement(uint8 race) const
{
- auto itr = _raceExpansionRequirementStore.find(race);
- if (itr != _raceExpansionRequirementStore.end())
- return itr->second;
- return EXPANSION_CLASSIC;
+ auto itr = _raceUnlockRequirementStore.find(race);
+ if (itr != _raceUnlockRequirementStore.end())
+ return &itr->second;
+ return nullptr;
}
std::unordered_map<uint8, uint8> const& GetClassExpansionRequirements() const { return _classExpansionRequirementStore; }
@@ -1751,7 +1760,7 @@ class TC_GAME_API ObjectMgr
std::set<uint32> _difficultyEntries[MAX_CREATURE_DIFFICULTIES]; // already loaded difficulty 1 value in creatures, used in CheckCreatureTemplate
std::set<uint32> _hasDifficultyEntries[MAX_CREATURE_DIFFICULTIES]; // already loaded creatures with difficulty 1 values, used in CheckCreatureTemplate
- std::unordered_map<uint8, uint8> _raceExpansionRequirementStore;
+ std::unordered_map<uint8, RaceUnlockRequirement> _raceUnlockRequirementStore;
std::unordered_map<uint8, uint8> _classExpansionRequirementStore;
RealmNameContainer _realmNameStore;
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index 77a23130a97..fc0699a5810 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -251,7 +251,7 @@ struct GuildReward
{
uint32 ItemID;
uint8 MinGuildRep;
- int32 RaceMask;
+ uint64 RaceMask;
uint64 Cost;
std::vector<uint32> AchievementsRequired;
};
diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp
index ded132f9297..09b17086872 100644
--- a/src/server/game/Guilds/GuildMgr.cpp
+++ b/src/server/game/Guilds/GuildMgr.cpp
@@ -515,7 +515,7 @@ void GuildMgr::LoadGuildRewards()
Field* fields = result->Fetch();
reward.ItemID = fields[0].GetUInt32();
reward.MinGuildRep = fields[1].GetUInt8();
- reward.RaceMask = fields[2].GetInt32();
+ reward.RaceMask = fields[2].GetUInt64();
reward.Cost = fields[3].GetUInt64();
if (!sObjectMgr->GetItemTemplate(reward.ItemID))
diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp
index 8e5d6a77732..296bf506edc 100644
--- a/src/server/game/Handlers/AuthHandler.cpp
+++ b/src/server/game/Handlers/AuthHandler.cpp
@@ -35,7 +35,7 @@ void WorldSession::SendAuthResponse(uint32 code, bool queued, uint32 queuePos)
{
response.SuccessInfo = boost::in_place();
- response.SuccessInfo->AccountExpansionLevel = GetExpansion();
+ response.SuccessInfo->AccountExpansionLevel = GetAccountExpansion();
response.SuccessInfo->ActiveExpansionLevel = GetExpansion();
response.SuccessInfo->VirtualRealmAddress = realm.Id.GetAddress();
response.SuccessInfo->Time = int32(time(nullptr));
@@ -48,7 +48,6 @@ void WorldSession::SendAuthResponse(uint32 code, bool queued, uint32 queuePos)
response.SuccessInfo->Templates.push_back(&templ.second);
response.SuccessInfo->AvailableClasses = &sObjectMgr->GetClassExpansionRequirements();
- response.SuccessInfo->AvailableRaces = &sObjectMgr->GetRaceExpansionRequirements();
}
if (queued)
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index d390abe71e5..2edd9d71b9b 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -301,8 +301,9 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
{
do
{
- Field* fields = result->Fetch();
- WorldPackets::Character::EnumCharactersResult::CharacterInfo charInfo(fields);
+ charEnum.Characters.emplace_back(result->Fetch());
+
+ WorldPackets::Character::EnumCharactersResult::CharacterInfo& charInfo = charEnum.Characters.back();
TC_LOG_INFO("network", "Loading char guid %s from account %u.", charInfo.Guid.ToString().c_str(), GetAccountId());
@@ -338,15 +339,21 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
else
charEnum.HasDemonHunterOnRealm = false;
- if (charInfo.Level >= sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_DEMON_HUNTER) || canAlwaysCreateDemonHunter)
- charEnum.HasLevel70OnRealm = true;
-
- charEnum.Characters.emplace_back(charInfo);
+ charEnum.MaxCharacterLevel = std::max<int32>(charEnum.MaxCharacterLevel, charInfo.Level);
}
while (result->NextRow());
}
- charEnum.IsDemonHunterCreationAllowed = (!charEnum.HasDemonHunterOnRealm && charEnum.HasLevel70OnRealm) || canAlwaysCreateDemonHunter;
+ charEnum.IsDemonHunterCreationAllowed = GetAccountExpansion() >= EXPANSION_LEGION || canAlwaysCreateDemonHunter;
+ charEnum.IsAlliedRacesCreationAllowed = GetAccountExpansion() >= EXPANSION_BATTLE_FOR_AZEROTH;
+
+ for (std::pair<uint8 const, RaceUnlockRequirement> const& requirement : sObjectMgr->GetRaceUnlockRequirements())
+ {
+ WorldPackets::Character::EnumCharactersResult::RaceUnlock raceUnlock;
+ raceUnlock.RaceID = requirement.first;
+ raceUnlock.HasExpansion = GetAccountExpansion() >= requirement.second.Expansion;
+ charEnum.RaceUnlockData.push_back(raceUnlock);
+ }
SendPacket(charEnum.Write());
}
@@ -458,19 +465,36 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
}
// prevent character creating Expansion race without Expansion account
- uint8 raceExpansionRequirement = sObjectMgr->GetRaceExpansionRequirement(charCreate.CreateInfo->Race);
- if (raceExpansionRequirement > GetExpansion())
+ RaceUnlockRequirement const* raceExpansionRequirement = sObjectMgr->GetRaceUnlockRequirement(charCreate.CreateInfo->Race);
+ if (!raceExpansionRequirement)
{
- TC_LOG_ERROR("entities.player.cheat", "Expansion %u account:[%d] tried to Create character with expansion %u race (%u)", GetExpansion(), GetAccountId(), raceExpansionRequirement, charCreate.CreateInfo->Race);
+ TC_LOG_ERROR("entities.player.cheat", "Account %u tried to create character with unavailable race %u", GetAccountId(), charCreate.CreateInfo->Race);
+ SendCharCreate(CHAR_CREATE_FAILED);
+ return;
+ }
+
+ if (raceExpansionRequirement->Expansion > GetAccountExpansion())
+ {
+ TC_LOG_ERROR("entities.player.cheat", "Expansion %u account:[%d] tried to Create character with expansion %u race (%u)",
+ GetAccountExpansion(), GetAccountId(), raceExpansionRequirement->Expansion, charCreate.CreateInfo->Race);
SendCharCreate(CHAR_CREATE_EXPANSION);
return;
}
+ //if (raceExpansionRequirement->AchievementId && !)
+ //{
+ // TC_LOG_ERROR("entities.player.cheat", "Expansion %u account:[%d] tried to Create character without achievement %u race (%u)",
+ // GetAccountExpansion(), GetAccountId(), raceExpansionRequirement->AchievementId, charCreate.CreateInfo->Race);
+ // SendCharCreate(CHAR_CREATE_ALLIED_RACE_ACHIEVEMENT);
+ // return;
+ //}
+
// prevent character creating Expansion class without Expansion account
uint8 classExpansionRequirement = sObjectMgr->GetClassExpansionRequirement(charCreate.CreateInfo->Class);
- if (classExpansionRequirement > GetExpansion())
+ if (classExpansionRequirement > GetAccountExpansion())
{
- TC_LOG_ERROR("entities.player.cheat", "Expansion %u account:[%d] tried to Create character with expansion %u class (%u)", GetExpansion(), GetAccountId(), classExpansionRequirement, charCreate.CreateInfo->Class);
+ TC_LOG_ERROR("entities.player.cheat", "Expansion %u account:[%d] tried to Create character with expansion %u class (%u)",
+ GetAccountExpansion(), GetAccountId(), classExpansionRequirement, charCreate.CreateInfo->Class);
SendCharCreate(CHAR_CREATE_EXPANSION_CLASS);
return;
}
@@ -665,7 +689,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
if (checkDemonHunterReqs && !hasDemonHunterReqLevel)
{
- SendCharCreate(CHAR_CREATE_FAILED);
+ SendCharCreate(CHAR_CREATE_LEVEL_REQUIREMENT_DEMON_HUNTER);
return;
}
@@ -2112,8 +2136,8 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa
for (ObjectMgr::QuestMap::const_iterator iter = questTemplates.begin(); iter != questTemplates.end(); ++iter)
{
Quest const* quest = iter->second;
- uint32 newRaceMask = (newTeamId == TEAM_ALLIANCE) ? RACEMASK_ALLIANCE : RACEMASK_HORDE;
- if (quest->GetAllowableRaces() != -1 && !(quest->GetAllowableRaces() & newRaceMask))
+ uint64 newRaceMask = (newTeamId == TEAM_ALLIANCE) ? RACEMASK_ALLIANCE : RACEMASK_HORDE;
+ if (quest->GetAllowableRaces() != uint64(-1) && !(quest->GetAllowableRaces() & newRaceMask))
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_QUESTSTATUS_REWARDED_ACTIVE_BY_QUEST);
stmt->setUInt64(0, lowGuid);
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 7d2115c618d..76f307d6359 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -172,7 +172,7 @@ void WorldSession::HandleWhoOpcode(WorldPackets::Who::WhoRequestPkt& whoRequest)
continue;
// check if race matches racemask
- if (request.RaceFilter >= 0 && !(request.RaceFilter & (1 << target->getRace())))
+ if (request.RaceFilter >= 0 && !(request.RaceFilter & (UI64LIT(1) << target->getRace())))
continue;
if (!whoRequest.Areas.empty())
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp
index 079f2b8fd13..33d18b946f6 100644
--- a/src/server/game/Handlers/QueryHandler.cpp
+++ b/src/server/game/Handlers/QueryHandler.cpp
@@ -375,6 +375,7 @@ void WorldSession::HandleQuestPOIQuery(WorldPackets::Query::QuestPOIQuery& quest
questPOIBlobData.WorldEffectID = data->WorldEffectID;
questPOIBlobData.PlayerConditionID = data->PlayerConditionID;
questPOIBlobData.UnkWoD1 = data->UnkWoD1;
+ questPOIBlobData.AlwaysAllowMergingBlobs = data->AlwaysAllowMergingBlobs;
for (QuestPOIPoint const& point : data->points)
{
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index b5ced4bdb81..1bcd86a4a03 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -85,7 +85,12 @@ enum Expansions
EXPANSION_MISTS_OF_PANDARIA = 4,
EXPANSION_WARLORDS_OF_DRAENOR = 5,
EXPANSION_LEGION = 6,
- MAX_EXPANSIONS
+ MAX_EXPANSIONS,
+
+ // future expansion
+ EXPANSION_BATTLE_FOR_AZEROTH = 7,
+
+ MAX_ACCOUNT_EXPANSIONS
};
#define CURRENT_EXPANSION EXPANSION_LEGION
@@ -1947,6 +1952,19 @@ enum SpellCustomErrors
SPELL_CUSTOM_ERROR_MUST_BE_STANDING_NEAR_INJURED_CHROMIE_IN_MOUNT_HYJAL = 340, // Must be standing near the injured Chromie in Mount Hyjal.
SPELL_CUSTOM_ERROR_REMOVE_CANNONS_HEAVY_IRON_PLATING_FIRST = 342, // You should remove the cannon's Heavy Iron Plating first.
SPELL_CUSTOM_ERROR_REMOVE_CANNONS_ELECTROKINETIC_DEFENSE_GRID_FIRST = 343, // You should remove the cannon's Electrokinetic Defense Grid first.
+ SPELL_CUSTOM_ERROR_REQUIRES_THE_ARMORY_KEY_AND_DENDRITE_CLUSTERS = 344, // You are missing pieces of the Armory Key or do not have enough Dendrite Clusters.
+ SPELL_CUSTOM_ERROR_THIS_ITEM_REQUIRES_BASIC_OBLITERUM_TO_UPGRADE = 345, // This item requires basic Obliterum to upgrade.
+ SPELL_CUSTOM_ERROR_THIS_ITEM_REQUIRES_PRIMAL_OBLITERUM_TO_UPGRADE = 346, // This item requires Primal Obliterum to upgrade.
+ SPELL_CUSTOM_ERROR_THIS_ITEM_REQUIRES_FLIGHT_MASTERS_WHISTLE = 347, // This item requires a Flight Master's Whistle.
+ SPELL_CUSTOM_ERROR_REQUIRES_POWER_THAT_ECHOES_THAT_OF_THE_AUGARI = 349, // Will only open to one wielding the power that echoes that of the Augari.
+ SPELL_CUSTOM_ERROR_THAT_PLAYER_HAS_A_PENDING_TOTEMIC_REVIVAL = 350, // That player has a pending Totemic Revival.
+ SPELL_CUSTOM_ERROR_YOU_HAVE_NO_FIRE_MINES_DEPLOYED = 351, // You have no Fire Mines deployed.
+ SPELL_CUSTOM_ERROR_YOU_ARE_BLOCKED_BY_A_STRUCTURE_ABOVE_YOU = 353, // You are blocked by a structure above you.
+ SPELL_CUSTOM_ERROR_REQUIRES_100_IMP_MEAT = 354, // Requires 100 Imp Meat.
+ SPELL_CUSTOM_ERROR_YOU_HAVE_NOT_OBTAINED_ANY_BACKGROUND_FILTERS = 355, // You have not obtained any background filters.
+ SPELL_CUSTOM_ERROR_NOTHING_INTERESTING_POSTED_HERE_RIGHT_NOW = 356, // There is nothing interesting posted here right now.
+ SPELL_CUSTOM_ERROR_PARAGON_REPUTATION_REQUIRES_HIGHER_LEVEL = 357, // Paragon Reputation is not available until a higher level.
+ SPELL_CUSTOM_ERROR_UUNA_IS_MISSING = 358, // Uuna is missing.
};
enum StealthType
@@ -4724,51 +4742,54 @@ enum ResponseCodes
CHAR_CREATE_TRIAL = 47,
CHAR_CREATE_TIMEOUT = 48,
CHAR_CREATE_THROTTLE = 49,
-
- CHAR_DELETE_IN_PROGRESS = 50,
- CHAR_DELETE_SUCCESS = 51,
- CHAR_DELETE_FAILED = 52,
- CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER = 53,
- CHAR_DELETE_FAILED_GUILD_LEADER = 54,
- CHAR_DELETE_FAILED_ARENA_CAPTAIN = 55,
- CHAR_DELETE_FAILED_HAS_HEIRLOOM_OR_MAIL = 56,
- CHAR_DELETE_FAILED_UPGRADE_IN_PROGRESS = 57,
- CHAR_DELETE_FAILED_HAS_WOW_TOKEN = 58,
- CHAR_DELETE_FAILED_VAS_TRANSACTION_IN_PROGRESS = 59,
-
- CHAR_LOGIN_IN_PROGRESS = 60,
- CHAR_LOGIN_SUCCESS = 61,
- CHAR_LOGIN_NO_WORLD = 62,
- CHAR_LOGIN_DUPLICATE_CHARACTER = 63,
- CHAR_LOGIN_NO_INSTANCES = 64,
- CHAR_LOGIN_FAILED = 65,
- CHAR_LOGIN_DISABLED = 66,
- CHAR_LOGIN_NO_CHARACTER = 67,
- CHAR_LOGIN_LOCKED_FOR_TRANSFER = 68,
- CHAR_LOGIN_LOCKED_BY_BILLING = 69,
- CHAR_LOGIN_LOCKED_BY_MOBILE_AH = 70,
- CHAR_LOGIN_TEMPORARY_GM_LOCK = 71,
- CHAR_LOGIN_LOCKED_BY_CHARACTER_UPGRADE = 72,
- CHAR_LOGIN_LOCKED_BY_REVOKED_CHARACTER_UPGRADE = 73,
- CHAR_LOGIN_LOCKED_BY_REVOKED_VAS_TRANSACTION = 74,
-
- CHAR_NAME_SUCCESS = 75,
- CHAR_NAME_FAILURE = 76,
- CHAR_NAME_NO_NAME = 77,
- CHAR_NAME_TOO_SHORT = 78,
- CHAR_NAME_TOO_LONG = 79,
- CHAR_NAME_INVALID_CHARACTER = 80,
- CHAR_NAME_MIXED_LANGUAGES = 81,
- CHAR_NAME_PROFANE = 82,
- CHAR_NAME_RESERVED = 83,
- CHAR_NAME_INVALID_APOSTROPHE = 84,
- CHAR_NAME_MULTIPLE_APOSTROPHES = 85,
- CHAR_NAME_THREE_CONSECUTIVE = 86,
- CHAR_NAME_INVALID_SPACE = 87,
- CHAR_NAME_CONSECUTIVE_SPACES = 88,
- CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 89,
- CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 90,
- CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 91
+ CHAR_CREATE_ALLIED_RACE_ACHIEVEMENT = 50,
+ CHAR_CREATE_LEVEL_REQUIREMENT_DEMON_HUNTER = 51,
+
+ CHAR_DELETE_IN_PROGRESS = 52,
+ CHAR_DELETE_SUCCESS = 53,
+ CHAR_DELETE_FAILED = 54,
+ CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER = 55,
+ CHAR_DELETE_FAILED_GUILD_LEADER = 56,
+ CHAR_DELETE_FAILED_ARENA_CAPTAIN = 57,
+ CHAR_DELETE_FAILED_HAS_HEIRLOOM_OR_MAIL = 58,
+ CHAR_DELETE_FAILED_UPGRADE_IN_PROGRESS = 59,
+ CHAR_DELETE_FAILED_HAS_WOW_TOKEN = 60,
+ CHAR_DELETE_FAILED_VAS_TRANSACTION_IN_PROGRESS = 61,
+
+ CHAR_LOGIN_IN_PROGRESS = 62,
+ CHAR_LOGIN_SUCCESS = 63,
+ CHAR_LOGIN_NO_WORLD = 64,
+ CHAR_LOGIN_DUPLICATE_CHARACTER = 65,
+ CHAR_LOGIN_NO_INSTANCES = 66,
+ CHAR_LOGIN_FAILED = 67,
+ CHAR_LOGIN_DISABLED = 68,
+ CHAR_LOGIN_NO_CHARACTER = 69,
+ CHAR_LOGIN_LOCKED_FOR_TRANSFER = 70,
+ CHAR_LOGIN_LOCKED_BY_BILLING = 71,
+ CHAR_LOGIN_LOCKED_BY_MOBILE_AH = 72,
+ CHAR_LOGIN_TEMPORARY_GM_LOCK = 73,
+ CHAR_LOGIN_LOCKED_BY_CHARACTER_UPGRADE = 74,
+ CHAR_LOGIN_LOCKED_BY_REVOKED_CHARACTER_UPGRADE = 75,
+ CHAR_LOGIN_LOCKED_BY_REVOKED_VAS_TRANSACTION = 76,
+ CHAR_LOGIN_LOCKED_BY_RESTRICTION = 77,
+
+ CHAR_NAME_SUCCESS = 78,
+ CHAR_NAME_FAILURE = 79,
+ CHAR_NAME_NO_NAME = 80,
+ CHAR_NAME_TOO_SHORT = 81,
+ CHAR_NAME_TOO_LONG = 82,
+ CHAR_NAME_INVALID_CHARACTER = 83,
+ CHAR_NAME_MIXED_LANGUAGES = 84,
+ CHAR_NAME_PROFANE = 85,
+ CHAR_NAME_RESERVED = 86,
+ CHAR_NAME_INVALID_APOSTROPHE = 87,
+ CHAR_NAME_MULTIPLE_APOSTROPHES = 88,
+ CHAR_NAME_THREE_CONSECUTIVE = 89,
+ CHAR_NAME_INVALID_SPACE = 90,
+ CHAR_NAME_CONSECUTIVE_SPACES = 91,
+ CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 92,
+ CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 93,
+ CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 94
};
enum CharacterUndeleteResult
@@ -6195,6 +6216,7 @@ enum class GameError : uint32
ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 984,
ERR_TALENT_GRANTED_BY_AURA = 985,
ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 986,
+ ERR_GLYPH_TARGET_NOT_AVAILABLE = 987,
};
#endif
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index 0b5bb9078bf..7e815ce9a42 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -37,37 +37,38 @@ Quest::Quest(Field* questRecord)
ID = questRecord[0].GetUInt32();
Type = questRecord[1].GetUInt8();
Level = questRecord[2].GetInt32();
- PackageID = questRecord[3].GetUInt32();
- MinLevel = questRecord[4].GetInt32();
- QuestSortID = questRecord[5].GetInt16();
- QuestInfoID = questRecord[6].GetUInt16();
- SuggestedPlayers = questRecord[7].GetUInt8();
- NextQuestInChain = questRecord[8].GetUInt32();
- RewardXPDifficulty = questRecord[9].GetUInt32();
- RewardXPMultiplier = questRecord[10].GetFloat();
- RewardMoney = questRecord[11].GetUInt32();
- RewardMoneyDifficulty = questRecord[12].GetUInt32();
- RewardMoneyMultiplier = questRecord[13].GetFloat();
- RewardBonusMoney = questRecord[14].GetUInt32();
+ MaxScalingLevel = questRecord[3].GetInt32();
+ PackageID = questRecord[4].GetUInt32();
+ MinLevel = questRecord[5].GetInt32();
+ QuestSortID = questRecord[6].GetInt16();
+ QuestInfoID = questRecord[7].GetUInt16();
+ SuggestedPlayers = questRecord[8].GetUInt8();
+ NextQuestInChain = questRecord[9].GetUInt32();
+ RewardXPDifficulty = questRecord[10].GetUInt32();
+ RewardXPMultiplier = questRecord[11].GetFloat();
+ RewardMoney = questRecord[12].GetUInt32();
+ RewardMoneyDifficulty = questRecord[13].GetUInt32();
+ RewardMoneyMultiplier = questRecord[14].GetFloat();
+ RewardBonusMoney = questRecord[15].GetUInt32();
for (uint32 i = 0; i < QUEST_REWARD_DISPLAY_SPELL_COUNT; ++i)
- RewardDisplaySpell[i] = questRecord[15 + i].GetUInt32();
-
- RewardSpell = questRecord[18].GetUInt32();
- RewardHonor = questRecord[19].GetUInt32();
- RewardKillHonor = questRecord[20].GetUInt32();
- SourceItemId = questRecord[21].GetUInt32();
- RewardArtifactXPDifficulty = questRecord[22].GetUInt32();
- RewardArtifactXPMultiplier = questRecord[23].GetFloat();
- RewardArtifactCategoryID = questRecord[24].GetUInt32();
- Flags = questRecord[25].GetUInt32();
- FlagsEx = questRecord[26].GetUInt32();
+ RewardDisplaySpell[i] = questRecord[16 + i].GetUInt32();
+
+ RewardSpell = questRecord[19].GetUInt32();
+ RewardHonor = questRecord[20].GetUInt32();
+ RewardKillHonor = questRecord[21].GetUInt32();
+ SourceItemId = questRecord[22].GetUInt32();
+ RewardArtifactXPDifficulty = questRecord[23].GetUInt32();
+ RewardArtifactXPMultiplier = questRecord[24].GetFloat();
+ RewardArtifactCategoryID = questRecord[25].GetUInt32();
+ Flags = questRecord[26].GetUInt32();
+ FlagsEx = questRecord[27].GetUInt32();
for (uint32 i = 0; i < QUEST_ITEM_DROP_COUNT; ++i)
{
- RewardItemId[i] = questRecord[27 + i * 4].GetUInt32();
- RewardItemCount[i] = questRecord[28 + i * 4].GetUInt32();
- ItemDrop[i] = questRecord[29 + i * 4].GetUInt32();
- ItemDropQuantity[i] = questRecord[30 + i * 4].GetUInt32();
+ RewardItemId[i] = questRecord[28 + i * 4].GetUInt32();
+ RewardItemCount[i] = questRecord[29 + i * 4].GetUInt32();
+ ItemDrop[i] = questRecord[30 + i * 4].GetUInt32();
+ ItemDropQuantity[i] = questRecord[31 + i * 4].GetUInt32();
if (RewardItemId[i])
++_rewItemsCount;
@@ -75,63 +76,63 @@ Quest::Quest(Field* questRecord)
for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
{
- RewardChoiceItemId[i] = questRecord[43 + i * 3].GetUInt32();
- RewardChoiceItemCount[i] = questRecord[44 + i * 3].GetUInt32();
- RewardChoiceItemDisplayId[i] = questRecord[45 + i * 3].GetUInt32();
+ RewardChoiceItemId[i] = questRecord[44 + i * 3].GetUInt32();
+ RewardChoiceItemCount[i] = questRecord[45 + i * 3].GetUInt32();
+ RewardChoiceItemDisplayId[i] = questRecord[46 + i * 3].GetUInt32();
if (RewardChoiceItemId[i])
++_rewChoiceItemsCount;
}
- POIContinent = questRecord[61].GetUInt32();
- POIx = questRecord[62].GetFloat();
- POIy = questRecord[63].GetFloat();
- POIPriority = questRecord[64].GetUInt32();
+ POIContinent = questRecord[62].GetUInt32();
+ POIx = questRecord[63].GetFloat();
+ POIy = questRecord[64].GetFloat();
+ POIPriority = questRecord[65].GetUInt32();
- RewardTitleId = questRecord[65].GetUInt32();
- RewardArenaPoints = questRecord[66].GetUInt32();
- RewardSkillId = questRecord[67].GetUInt32();
- RewardSkillPoints = questRecord[68].GetUInt32();
+ RewardTitleId = questRecord[66].GetUInt32();
+ RewardArenaPoints = questRecord[67].GetUInt32();
+ RewardSkillId = questRecord[68].GetUInt32();
+ RewardSkillPoints = questRecord[69].GetUInt32();
- QuestGiverPortrait = questRecord[69].GetUInt32();
- QuestTurnInPortrait = questRecord[70].GetUInt32();
+ QuestGiverPortrait = questRecord[70].GetUInt32();
+ QuestTurnInPortrait = questRecord[71].GetUInt32();
for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i)
{
- RewardFactionId[i] = questRecord[71 + i * 4].GetUInt32();
- RewardFactionValue[i] = questRecord[72 + i * 4].GetInt32();
- RewardFactionOverride[i] = questRecord[73 + i * 4].GetInt32();
- RewardFactionCapIn[i] = questRecord[74 + i * 4].GetUInt32();
+ RewardFactionId[i] = questRecord[72 + i * 4].GetUInt32();
+ RewardFactionValue[i] = questRecord[73 + i * 4].GetInt32();
+ RewardFactionOverride[i] = questRecord[74 + i * 4].GetInt32();
+ RewardFactionCapIn[i] = questRecord[75 + i * 4].GetUInt32();
}
- RewardReputationMask = questRecord[91].GetUInt32();
+ RewardReputationMask = questRecord[92].GetUInt32();
for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
{
- RewardCurrencyId[i] = questRecord[92 + i * 2].GetUInt32();
- RewardCurrencyCount[i] = questRecord[93 + i * 2].GetUInt32();
+ RewardCurrencyId[i] = questRecord[93 + i * 2].GetUInt32();
+ RewardCurrencyCount[i] = questRecord[94 + i * 2].GetUInt32();
if (RewardCurrencyId[i])
++_rewCurrencyCount;
}
- SoundAccept = questRecord[100].GetUInt32();
- SoundTurnIn = questRecord[101].GetUInt32();
- AreaGroupID = questRecord[102].GetUInt32();
- LimitTime = questRecord[103].GetUInt32();
- AllowableRaces = questRecord[104].GetInt32();
- QuestRewardID = questRecord[105].GetUInt32();
- Expansion = questRecord[106].GetInt32();
-
- LogTitle = questRecord[107].GetString();
- LogDescription = questRecord[108].GetString();
- QuestDescription = questRecord[109].GetString();
- AreaDescription = questRecord[110].GetString();
- PortraitGiverText = questRecord[111].GetString();
- PortraitGiverName = questRecord[112].GetString();
- PortraitTurnInText = questRecord[113].GetString();
- PortraitTurnInName = questRecord[114].GetString();
- QuestCompletionLog = questRecord[115].GetString();
+ SoundAccept = questRecord[101].GetUInt32();
+ SoundTurnIn = questRecord[102].GetUInt32();
+ AreaGroupID = questRecord[103].GetUInt32();
+ LimitTime = questRecord[104].GetUInt32();
+ AllowableRaces = questRecord[105].GetUInt64();
+ QuestRewardID = questRecord[106].GetUInt32();
+ Expansion = questRecord[107].GetInt32();
+
+ LogTitle = questRecord[108].GetString();
+ LogDescription = questRecord[109].GetString();
+ QuestDescription = questRecord[110].GetString();
+ AreaDescription = questRecord[111].GetString();
+ PortraitGiverText = questRecord[112].GetString();
+ PortraitGiverName = questRecord[113].GetString();
+ PortraitTurnInText = questRecord[114].GetString();
+ PortraitTurnInName = questRecord[115].GetString();
+ QuestCompletionLog = questRecord[116].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 943fa06f6b1..88132ce0285 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -351,9 +351,10 @@ class TC_GAME_API Quest
int32 GetMinLevel() const { return MinLevel; }
uint32 GetMaxLevel() const { return MaxLevel; }
int32 GetQuestLevel() const { return Level; }
+ int32 GetQuestMaxScalingLevel() const { return MaxScalingLevel; }
uint32 GetQuestInfoID() const { return QuestInfoID; }
uint32 GetAllowableClasses() const { return AllowableClasses; }
- int32 GetAllowableRaces() const { return AllowableRaces; }
+ uint64 GetAllowableRaces() const { return AllowableRaces; }
uint32 GetRequiredSkill() const { return RequiredSkillId; }
uint32 GetRequiredSkillValue() const { return RequiredSkillPoints; }
uint32 GetRequiredMinRepFaction() const { return RequiredMinRepFaction; }
@@ -452,6 +453,7 @@ class TC_GAME_API Quest
uint32 ID;
uint32 Type;
int32 Level;
+ int32 MaxScalingLevel;
uint32 PackageID;
int32 MinLevel;
int32 QuestSortID;
@@ -502,7 +504,7 @@ class TC_GAME_API Quest
uint32 SoundTurnIn;
uint32 AreaGroupID;
uint32 LimitTime;
- int32 AllowableRaces;
+ uint64 AllowableRaces;
uint32 QuestRewardID;
int32 Expansion;
QuestObjectives Objectives;
diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp
index 3953a856b60..31a3b2d6ee2 100644
--- a/src/server/game/Server/Packets/AuthenticationPackets.cpp
+++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp
@@ -130,18 +130,11 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write()
_worldPacket << uint8(SuccessInfo->ActiveExpansionLevel);
_worldPacket << uint8(SuccessInfo->AccountExpansionLevel);
_worldPacket << uint32(SuccessInfo->TimeSecondsUntilPCKick);
- _worldPacket << uint32(SuccessInfo->AvailableRaces->size());
_worldPacket << uint32(SuccessInfo->AvailableClasses->size());
_worldPacket << uint32(SuccessInfo->Templates.size());
_worldPacket << uint32(SuccessInfo->CurrencyID);
_worldPacket << int32(SuccessInfo->Time);
- for (auto const& race : *SuccessInfo->AvailableRaces)
- {
- _worldPacket << uint8(race.first); /// the current race
- _worldPacket << uint8(race.second); /// the required Expansion
- }
-
for (auto const& klass : *SuccessInfo->AvailableClasses)
{
_worldPacket << uint8(klass.first); /// the current class
diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h
index 7e244df991b..fbc0c6bb256 100644
--- a/src/server/game/Server/Packets/AuthenticationPackets.h
+++ b/src/server/game/Server/Packets/AuthenticationPackets.h
@@ -153,7 +153,6 @@ namespace WorldPackets
std::vector<CharacterTemplate const*> Templates; ///< list of pre-made character templates.
std::unordered_map<uint8, uint8> const* AvailableClasses = nullptr; ///< the minimum AccountExpansion required to select the classes
- std::unordered_map<uint8, uint8> const* AvailableRaces = nullptr; ///< the minimum AccountExpansion required to select the races
bool IsExpansionTrial = false;
bool ForceCharacterTemplate = false; ///< forces the client to always use a character template when creating a new character. @see Templates. @todo implement
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index fd88684bab6..538a2c7e1d5 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -37,8 +37,8 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel
// "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, "
// 19 20 21 22 23 24 25
// "guild_member.guildid, characters.playerFlags, characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, "
- // 26 27 28 29 30
- // "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, character_declinedname.genitive"
+ // 26 27 28 29 30 31
+ // "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, character_declinedname.genitive"
Guid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
Name = fields[1].GetString();
@@ -82,7 +82,7 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel
if (fields[26].GetUInt64())
Flags |= CHARACTER_FLAG_LOCKED_BY_BILLING;
- if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) && !fields[30].GetString().empty())
+ if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) && !fields[31].GetString().empty())
Flags |= CHARACTER_FLAG_DECLINED;
if (atLoginFlags & AT_LOGIN_CUSTOMIZE)
@@ -117,6 +117,8 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel
if (ChrSpecializationEntry const* spec = sDB2Manager.GetChrSpecializationByIndex(Class, fields[29].GetUInt8()))
SpecID = spec->ID;
+ LastLoginBuild = fields[30].GetUInt32();
+
for (uint8 slot = 0; slot < INVENTORY_SLOT_BAG_END; ++slot)
{
uint32 visualBase = slot * 3;
@@ -126,76 +128,96 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel
}
}
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharactersResult::CharacterInfo::VisualItemInfo const& visualItem)
+{
+ data << uint32(visualItem.DisplayId);
+ data << uint32(visualItem.DisplayEnchantId);
+ data << uint8(visualItem.InventoryType);
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharactersResult::CharacterInfo const& charInfo)
+{
+ data << charInfo.Guid;
+ data << uint8(charInfo.ListPosition);
+ data << uint8(charInfo.Race);
+ data << uint8(charInfo.Class);
+ data << uint8(charInfo.Sex);
+ data << uint8(charInfo.Skin);
+ data << uint8(charInfo.Face);
+ data << uint8(charInfo.HairStyle);
+ data << uint8(charInfo.HairColor);
+ data << uint8(charInfo.FacialHair);
+ data.append(charInfo.CustomDisplay.data(), charInfo.CustomDisplay.size());
+ data << uint8(charInfo.Level);
+ data << int32(charInfo.ZoneId);
+ data << int32(charInfo.MapId);
+ data << charInfo.PreLoadPosition;
+ data << charInfo.GuildGuid;
+ data << uint32(charInfo.Flags);
+ data << uint32(charInfo.CustomizationFlag);
+ data << uint32(charInfo.Flags3);
+ data << uint32(charInfo.Pet.CreatureDisplayId);
+ data << uint32(charInfo.Pet.Level);
+ data << uint32(charInfo.Pet.CreatureFamily);
+
+ data << uint32(charInfo.ProfessionIds[0]);
+ data << uint32(charInfo.ProfessionIds[1]);
+
+ for (WorldPackets::Character::EnumCharactersResult::CharacterInfo::VisualItemInfo const& visualItem : charInfo.VisualItems)
+ data << visualItem;
+
+ data << uint32(charInfo.LastPlayedTime);
+ data << uint16(charInfo.SpecID);
+ data << uint32(charInfo.Unknown703);
+ data << uint32(charInfo.LastLoginBuild);
+ data << uint32(charInfo.Flags4);
+ data.WriteBits(charInfo.Name.length(), 6);
+ data.WriteBit(charInfo.FirstLogin);
+ data.WriteBit(charInfo.BoostInProgress);
+ data.WriteBits(charInfo.unkWod61x, 5);
+ data.FlushBits();
+
+ data.WriteString(charInfo.Name);
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharactersResult::RaceUnlock const& raceUnlock)
+{
+ data << int32(raceUnlock.RaceID);
+ data.WriteBit(raceUnlock.HasExpansion);
+ data.WriteBit(raceUnlock.HasAchievement);
+ data.WriteBit(raceUnlock.HasHeritageArmor);
+ data.FlushBits();
+
+ return data;
+}
+
WorldPacket const* WorldPackets::Character::EnumCharactersResult::Write()
{
- _worldPacket.reserve(9 + Characters.size() * sizeof(CharacterInfo) + FactionChangeRestrictions.size() * sizeof(RestrictedFactionChangeRuleInfo));
+ _worldPacket.reserve(9 + Characters.size() * sizeof(CharacterInfo) + RaceUnlockData.size() * sizeof(RaceUnlock));
_worldPacket.WriteBit(Success);
_worldPacket.WriteBit(IsDeletedCharacters);
_worldPacket.WriteBit(IsDemonHunterCreationAllowed);
_worldPacket.WriteBit(HasDemonHunterOnRealm);
- _worldPacket.WriteBit(HasLevel70OnRealm);
_worldPacket.WriteBit(Unknown7x);
_worldPacket.WriteBit(DisabledClassesMask.is_initialized());
+ _worldPacket.WriteBit(IsAlliedRacesCreationAllowed);
_worldPacket << uint32(Characters.size());
- _worldPacket << uint32(FactionChangeRestrictions.size());
+ _worldPacket << int32(MaxCharacterLevel);
+ _worldPacket << uint32(RaceUnlockData.size());
if (DisabledClassesMask)
_worldPacket << uint32(*DisabledClassesMask);
- for (RestrictedFactionChangeRuleInfo const& rule : FactionChangeRestrictions)
- {
- _worldPacket << int32(rule.Mask);
- _worldPacket << uint8(rule.Race);
- }
-
for (CharacterInfo const& charInfo : Characters)
- {
- _worldPacket << charInfo.Guid;
- _worldPacket << uint8(charInfo.ListPosition);
- _worldPacket << uint8(charInfo.Race);
- _worldPacket << uint8(charInfo.Class);
- _worldPacket << uint8(charInfo.Sex);
- _worldPacket << uint8(charInfo.Skin);
- _worldPacket << uint8(charInfo.Face);
- _worldPacket << uint8(charInfo.HairStyle);
- _worldPacket << uint8(charInfo.HairColor);
- _worldPacket << uint8(charInfo.FacialHair);
- _worldPacket.append(charInfo.CustomDisplay.data(), charInfo.CustomDisplay.size());
- _worldPacket << uint8(charInfo.Level);
- _worldPacket << int32(charInfo.ZoneId);
- _worldPacket << int32(charInfo.MapId);
- _worldPacket << charInfo.PreLoadPosition;
- _worldPacket << charInfo.GuildGuid;
- _worldPacket << uint32(charInfo.Flags);
- _worldPacket << uint32(charInfo.CustomizationFlag);
- _worldPacket << uint32(charInfo.Flags3);
- _worldPacket << uint32(charInfo.Pet.CreatureDisplayId);
- _worldPacket << uint32(charInfo.Pet.Level);
- _worldPacket << uint32(charInfo.Pet.CreatureFamily);
-
- _worldPacket << uint32(charInfo.ProfessionIds[0]);
- _worldPacket << uint32(charInfo.ProfessionIds[1]);
-
- for (CharacterInfo::VisualItemInfo const& visualItem : charInfo.VisualItems)
- {
- _worldPacket << uint32(visualItem.DisplayId);
- _worldPacket << uint32(visualItem.DisplayEnchantId);
- _worldPacket << uint8(visualItem.InventoryType);
- }
+ _worldPacket << charInfo;
- _worldPacket << uint32(charInfo.LastPlayedTime);
- _worldPacket << uint16(charInfo.SpecID);
- _worldPacket << uint32(charInfo.Unknown703);
- _worldPacket << uint32(charInfo.Flags4);
- _worldPacket.WriteBits(charInfo.Name.length(), 6);
- _worldPacket.WriteBit(charInfo.FirstLogin);
- _worldPacket.WriteBit(charInfo.BoostInProgress);
- _worldPacket.WriteBits(charInfo.unkWod61x, 5);
- _worldPacket.FlushBits();
-
- _worldPacket.WriteString(charInfo.Name);
- }
+ for (RaceUnlock const& raceUnlock : RaceUnlockData)
+ _worldPacket << raceUnlock;
return &_worldPacket;
}
@@ -469,9 +491,7 @@ WorldPacket const* WorldPackets::Character::LogXPGain::Write()
_worldPacket << uint8(Reason);
_worldPacket << int32(Amount);
_worldPacket << float(GroupBonus);
- _worldPacket.WriteBit(ReferAFriend);
-
- _worldPacket.FlushBits();
+ _worldPacket << uint8(ReferAFriendBonusType);
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h
index ed325e4e896..1f4ce11621a 100644
--- a/src/server/game/Server/Packets/CharacterPackets.h
+++ b/src/server/game/Server/Packets/CharacterPackets.h
@@ -146,6 +146,7 @@ namespace WorldPackets
uint32 LastPlayedTime = 0;
uint16 SpecID = 0;
uint32 Unknown703 = 0;
+ uint32 LastLoginBuild = 0;
struct PetInfo
{
@@ -167,13 +168,12 @@ namespace WorldPackets
std::array<VisualItemInfo, 23> VisualItems = { };
};
- struct RestrictedFactionChangeRuleInfo
+ struct RaceUnlock
{
- RestrictedFactionChangeRuleInfo(int32 mask, uint8 race)
- : Mask(mask), Race(race) { }
-
- int32 Mask = 0;
- uint8 Race = 0;
+ int32 RaceID;
+ bool HasExpansion;
+ bool HasAchievement;
+ bool HasHeritageArmor;
};
EnumCharactersResult() : ServerPacket(SMSG_ENUM_CHARACTERS_RESULT) { }
@@ -184,13 +184,14 @@ namespace WorldPackets
bool IsDeletedCharacters = false; ///< used for character undelete list
bool IsDemonHunterCreationAllowed = false; ///< used for demon hunter early access
bool HasDemonHunterOnRealm = false;
- bool HasLevel70OnRealm = false;
bool Unknown7x = false;
+ bool IsAlliedRacesCreationAllowed = false;
+ int32 MaxCharacterLevel = 1;
Optional<uint32> DisabledClassesMask;
std::vector<CharacterInfo> Characters; ///< all characters on the list
- std::vector<RestrictedFactionChangeRuleInfo> FactionChangeRestrictions; ///< @todo: research
+ std::vector<RaceUnlock> RaceUnlockData; ///<
};
class CreateCharacter final : public ClientPacket
@@ -631,7 +632,7 @@ namespace WorldPackets
uint8 Reason = 0;
int32 Amount = 0;
float GroupBonus = 0;
- bool ReferAFriend = false;
+ uint8 ReferAFriendBonusType = 0; // 1 - 300% of normal XP; 2 - 150% of normal XP
};
class TitleEarned final : public ServerPacket
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
index 6afac0117c9..ff378e680e0 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
@@ -166,7 +166,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastLogData
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SandboxScalingData const& sandboxScalingData)
{
- data.WriteBits(sandboxScalingData.Type, 3);
+ data.WriteBits(sandboxScalingData.Type, 4);
data << int16(sandboxScalingData.PlayerLevelDelta);
data << uint16(sandboxScalingData.PlayerItemLevel);
data << uint8(sandboxScalingData.TargetLevel);
diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp
index 5f5ecdea9fa..367021001c2 100644
--- a/src/server/game/Server/Packets/GuildPackets.cpp
+++ b/src/server/game/Server/Packets/GuildPackets.cpp
@@ -511,7 +511,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRewardItem co
data << rewardItem.ItemID;
data << rewardItem.Unk4;
data << uint32(rewardItem.AchievementsRequired.size());
- data << rewardItem.RaceMask;
+ data << uint64(rewardItem.RaceMask);
data << rewardItem.MinGuildLevel;
data << rewardItem.MinGuildRep;
data << rewardItem.Cost;
diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h
index 06e07665afe..f781e81b868 100644
--- a/src/server/game/Server/Packets/GuildPackets.h
+++ b/src/server/game/Server/Packets/GuildPackets.h
@@ -673,7 +673,7 @@ namespace WorldPackets
uint32 ItemID = 0;
uint32 Unk4 = 0;
std::vector<uint32> AchievementsRequired;
- uint32 RaceMask = 0;
+ uint64 RaceMask = 0;
int32 MinGuildLevel = 0;
int32 MinGuildRep = 0;
uint64 Cost = 0;
diff --git a/src/server/game/Server/Packets/InstancePackets.cpp b/src/server/game/Server/Packets/InstancePackets.cpp
index 6851bcea921..0a6e29e6838 100644
--- a/src/server/game/Server/Packets/InstancePackets.cpp
+++ b/src/server/game/Server/Packets/InstancePackets.cpp
@@ -146,6 +146,8 @@ WorldPacket const* WorldPackets::Instance::InstanceEncounterStart::Write()
_worldPacket << uint32(MaxInCombatResCount);
_worldPacket << uint32(CombatResChargeRecovery);
_worldPacket << uint32(NextCombatResChargeTime);
+ _worldPacket.WriteBit(InProgress);
+ _worldPacket.FlushBits();
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h
index c01262cfa1f..f13e046906e 100644
--- a/src/server/game/Server/Packets/InstancePackets.h
+++ b/src/server/game/Server/Packets/InstancePackets.h
@@ -207,6 +207,7 @@ namespace WorldPackets
uint32 MaxInCombatResCount = 0;
uint32 CombatResChargeRecovery = 0;
uint32 NextCombatResChargeTime = 0;
+ bool InProgress = true;
};
class InstanceEncounterEnd final : public ServerPacket
diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h
index d1558755fc2..e985f1366de 100644
--- a/src/server/game/Server/Packets/ItemPackets.h
+++ b/src/server/game/Server/Packets/ItemPackets.h
@@ -533,6 +533,14 @@ namespace WorldPackets
ObjectGuid ItemGuid;
};
+
+ class CharacterInventoryOverflowWarning final : public ServerPacket
+ {
+ public:
+ CharacterInventoryOverflowWarning() : ServerPacket(SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
}
}
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index 28e72b7e6cd..2b7f9ab7d18 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -50,6 +50,7 @@ WorldPacket const* WorldPackets::NPC::GossipMessage::Write()
_worldPacket << int32(text.QuestID);
_worldPacket << int32(text.QuestType);
_worldPacket << int32(text.QuestLevel);
+ _worldPacket << int32(text.QuestMaxScalingLevel);
_worldPacket << int32(text.QuestFlags[0]);
_worldPacket << int32(text.QuestFlags[1]);
diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h
index a522084ab26..a094f25dc22 100644
--- a/src/server/game/Server/Packets/NPCPackets.h
+++ b/src/server/game/Server/Packets/NPCPackets.h
@@ -60,6 +60,7 @@ namespace WorldPackets
int32 QuestID = 0;
int32 QuestType = 0;
int32 QuestLevel = 0;
+ int32 QuestMaxScalingLevel = 0;
bool Repeatable = false;
std::string QuestTitle;
int32 QuestFlags[2] = { };
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index 0f4b9daf6b5..c640394be93 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -370,6 +370,9 @@ WorldPacket const* WorldPackets::Query::QuestPOIQueryResponse::Write()
_worldPacket << int32(questPOIBlobPoint.X);
_worldPacket << int32(questPOIBlobPoint.Y);
}
+
+ _worldPacket.WriteBit(questPOIBlobData.AlwaysAllowMergingBlobs);
+ _worldPacket.FlushBits();
}
}
diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h
index c98c7809be5..7639f165dae 100644
--- a/src/server/game/Server/Packets/QueryPackets.h
+++ b/src/server/game/Server/Packets/QueryPackets.h
@@ -321,6 +321,7 @@ namespace WorldPackets
int32 PlayerConditionID = 0;
int32 UnkWoD1 = 0;
std::vector<QuestPOIBlobPoint> QuestPOIBlobPointStats;
+ bool AlwaysAllowMergingBlobs = false;
};
struct QuestPOIData
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index 3b07f68943e..20a6539ae1d 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -65,6 +65,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.QuestID);
_worldPacket << int32(Info.QuestType);
_worldPacket << int32(Info.QuestLevel);
+ _worldPacket << int32(Info.QuestMaxScalingLevel);
_worldPacket << int32(Info.QuestPackageID);
_worldPacket << int32(Info.QuestMinLevel);
_worldPacket << int32(Info.QuestSortID);
@@ -139,7 +140,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.TimeAllowed);
_worldPacket << uint32(Info.Objectives.size());
- _worldPacket << int32(Info.AllowableRaces);
+ _worldPacket << uint64(Info.AllowableRaces);
_worldPacket << int32(Info.QuestRewardID);
_worldPacket << int32(Info.Expansion);
@@ -489,6 +490,7 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestListMessage::Write()
_worldPacket << uint32(gossip.QuestID);
_worldPacket << uint32(gossip.QuestType);
_worldPacket << int32(gossip.QuestLevel);
+ _worldPacket << int32(gossip.QuestMaxScalingLevel);
_worldPacket << uint32(gossip.QuestFlags);
_worldPacket << uint32(gossip.QuestFlagsEx);
_worldPacket.WriteBit(gossip.Repeatable);
@@ -664,8 +666,10 @@ WorldPacket const* WorldPackets::Quest::DisplayPlayerChoice::Write()
_worldPacket << int32(ChoiceID);
_worldPacket << uint32(Responses.size());
_worldPacket << SenderGUID;
+ _worldPacket << int32(UiTextureKitID);
_worldPacket.WriteBits(Question.length(), 8);
_worldPacket.WriteBit(CloseChoiceFrame);
+ _worldPacket.WriteBit(HideWarboardHeader);
_worldPacket.FlushBits();
for (PlayerChoiceResponse const& response : Responses)
diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h
index 88f72c99271..1dd40e1ccc2 100644
--- a/src/server/game/Server/Packets/QuestPackets.h
+++ b/src/server/game/Server/Packets/QuestPackets.h
@@ -109,6 +109,7 @@ namespace WorldPackets
int32 QuestID = 0;
int32 QuestType = 0; // Accepted values: 0, 1 or 2. 0 == IsAutoComplete() (skip objectives/details)
int32 QuestLevel = 0; // may be -1, static data, in other cases must be used dynamic level: Player::GetQuestLevel (0 is not known, but assuming this is no longer valid for quest intended for client)
+ int32 QuestMaxScalingLevel = 255;
int32 QuestPackageID = 0;
int32 QuestMinLevel = 0;
int32 QuestSortID = 0; // zone or sort to display in quest log
@@ -135,7 +136,7 @@ namespace WorldPackets
float POIx = 0.0f;
float POIy = 0.0f;
int32 POIPriority = 0;
- int32 AllowableRaces = -1;
+ uint64 AllowableRaces = UI64LIT(0xFFFFFFFFFFFFFFFF);
std::string LogTitle;
std::string LogDescription;
std::string QuestDescription;
@@ -462,11 +463,13 @@ namespace WorldPackets
struct GossipText
{
- GossipText(uint32 questID, uint32 questType, int32 questLevel, uint32 questFlags, uint32 questFlagsEx, bool repeatable, std::string questTitle) :
- QuestID(questID), QuestType(questType), QuestLevel(questLevel), QuestFlags(questFlags), QuestFlagsEx(questFlagsEx), Repeatable(repeatable), QuestTitle(questTitle) { }
+ GossipText(uint32 questID, uint32 questType, int32 questLevel, int32 questMaxScalingLevel, uint32 questFlags, uint32 questFlagsEx, bool repeatable, std::string questTitle) :
+ QuestID(questID), QuestType(questType), QuestLevel(questLevel), QuestMaxScalingLevel(questMaxScalingLevel), QuestFlags(questFlags),
+ QuestFlagsEx(questFlagsEx), Repeatable(repeatable), QuestTitle(std::move(questTitle)) { }
uint32 QuestID;
uint32 QuestType;
int32 QuestLevel;
+ int32 QuestMaxScalingLevel;
uint32 QuestFlags;
uint32 QuestFlagsEx;
bool Repeatable;
@@ -676,9 +679,11 @@ namespace WorldPackets
ObjectGuid SenderGUID;
int32 ChoiceID = 0;
+ int32 UiTextureKitID = 0;
std::string Question;
std::vector<PlayerChoiceResponse> Responses;
bool CloseChoiceFrame = false;
+ bool HideWarboardHeader = false;
};
class ChoiceResponse final : public ClientPacket
diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp
index 931376f48ac..cafb723c062 100644
--- a/src/server/game/Server/Packets/TicketPackets.cpp
+++ b/src/server/game/Server/Packets/TicketPackets.cpp
@@ -163,6 +163,8 @@ ByteBuffer& operator>>(ByteBuffer& data, Optional<WorldPackets::Ticket::SupportT
data >> lfgListSearchResult->LastTitleAuthorGuid;
data >> lfgListSearchResult->LastDescriptionAuthorGuid;
data >> lfgListSearchResult->LastVoiceChatAuthorGuid;
+ data >> lfgListSearchResult->ListingCreatorGuid;
+ data >> lfgListSearchResult->Unknown735;
uint32 titleLength = data.ReadBits(8);
uint32 descriptionLength = data.ReadBits(11);
diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h
index b94386a2ed6..6e25f3da4a9 100644
--- a/src/server/game/Server/Packets/TicketPackets.h
+++ b/src/server/game/Server/Packets/TicketPackets.h
@@ -165,6 +165,8 @@ namespace WorldPackets
ObjectGuid LastTitleAuthorGuid;
ObjectGuid LastDescriptionAuthorGuid;
ObjectGuid LastVoiceChatAuthorGuid;
+ ObjectGuid ListingCreatorGuid;
+ ObjectGuid Unknown735;
std::string Title;
std::string Description;
std::string VoiceChat;
diff --git a/src/server/game/Server/Packets/WhoPackets.h b/src/server/game/Server/Packets/WhoPackets.h
index 7dc9c33dab5..b84cf096345 100644
--- a/src/server/game/Server/Packets/WhoPackets.h
+++ b/src/server/game/Server/Packets/WhoPackets.h
@@ -66,7 +66,7 @@ namespace WorldPackets
std::string VirtualRealmName;
std::string Guild;
std::string GuildVirtualRealmName;
- int32 RaceFilter = -1;
+ uint64 RaceFilter = UI64LIT(0);
int32 ClassFilter = -1;
std::vector<WhoWord> Words;
bool ShowEnemies = false;
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 301be77e6c3..28bd8c80701 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -220,6 +220,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_BATTLE_PET_SET_BATTLE_SLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlePetSetBattleSlot);
DEFINE_HANDLER(CMSG_BATTLE_PET_SET_FLAGS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlePetSetFlags);
DEFINE_HANDLER(CMSG_BATTLE_PET_SUMMON, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBattlePetSummon);
+ DEFINE_HANDLER(CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BATTLE_PET_UPDATE_NOTIFY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BEGIN_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBeginTradeOpcode);
//DEFINE_HANDLER(CMSG_BF_MGR_ENTRY_INVITE_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBfEntryInviteResponse);
@@ -953,6 +954,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_PURCHASE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
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_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);
@@ -1039,6 +1041,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_JOINED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_LEFT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_CLASS_TRIAL_CREATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_ITEM_FIXUP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_LOGIN_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_OBJECT_TEST_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1358,7 +1361,6 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOG_XP_GAIN, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_ALL_PASSED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_ITEM_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_LIST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_MONEY_NOTIFY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_RELEASE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -1478,6 +1480,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OFFER_PETITION_ERROR, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ON_MONSTER_MOVE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_ALLIED_RACE_DETAILS_GIVER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_CONTAINER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_LFG_DUNGEON_FINDER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1609,6 +1612,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_STARTED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_OK, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_LOOKUP_INFORMATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRUIT_A_FRIEND_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFER_A_FRIEND_EXPIRED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1779,9 +1783,10 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNLEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_ACCOUNT_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_ACTION_BUTTONS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CELESTIAL_BODY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CHARACTER_FLAGS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_DUNGEON_ENCOUNTER_FOR_LOOT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_EXPANSION_LEVEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ 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);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 9dac3a3ecac..49ca92b7004 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -51,24 +51,24 @@ enum OpcodeClient : uint16
CMSG_ACCEPT_WARGAME_INVITE = 0x35E0,
CMSG_ACTIVATE_TAXI = 0x34AE,
CMSG_ADDON_LIST = 0x35D8,
- CMSG_ADD_BATTLENET_FRIEND = 0x365C,
- CMSG_ADD_FRIEND = 0x36D1,
- CMSG_ADD_IGNORE = 0x36D5,
- CMSG_ADD_TOY = 0x3287,
- CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x31F7,
- CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x332B,
+ CMSG_ADD_BATTLENET_FRIEND = 0x365A,
+ CMSG_ADD_FRIEND = 0x36CF,
+ CMSG_ADD_IGNORE = 0x36D3,
+ CMSG_ADD_TOY = 0x328B,
+ CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x31F9,
+ CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x332E,
CMSG_ALTER_APPEARANCE = 0x34F9,
CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B3,
CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B4,
- CMSG_AREA_TRIGGER = 0x31CC,
+ CMSG_AREA_TRIGGER = 0x31CD,
CMSG_ARTIFACT_ADD_POWER = 0x31A5,
CMSG_ARTIFACT_ADD_RELIC_TALENT = 0x31A8,
CMSG_ARTIFACT_ATTUNE_PREVIEW_RELIC = 0x31A9,
CMSG_ARTIFACT_ATTUNE_SOCKETED_RELIC = 0x31AA,
CMSG_ARTIFACT_SET_APPEARANCE = 0x31A7,
- CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x31FE,
- CMSG_ATTACK_STOP = 0x3249,
- CMSG_ATTACK_SWING = 0x3248,
+ CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3200,
+ CMSG_ATTACK_STOP = 0x324D,
+ CMSG_ATTACK_SWING = 0x324C,
CMSG_AUCTION_HELLO_REQUEST = 0x34CF,
CMSG_AUCTION_LIST_BIDDER_ITEMS = 0x34D5,
CMSG_AUCTION_LIST_ITEMS = 0x34D2,
@@ -91,90 +91,91 @@ enum OpcodeClient : uint16
CMSG_BATTLEFIELD_LEAVE = 0x3171,
CMSG_BATTLEFIELD_LIST = 0x317D,
CMSG_BATTLEFIELD_PORT = 0x3529,
- CMSG_BATTLEMASTER_HELLO = 0x329D,
+ CMSG_BATTLEMASTER_HELLO = 0x32A1,
CMSG_BATTLEMASTER_JOIN = 0x3524,
CMSG_BATTLEMASTER_JOIN_ARENA = 0x3525,
CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3527,
CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3526,
- CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D4,
- CMSG_BATTLENET_REQUEST = 0x36F8,
- CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x36F9,
- CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CC,
- CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CB,
- CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C2,
- CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BC,
- CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BD,
- CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C5,
- CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE = 0x36C3,
- CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES = 0x370A,
- CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3709,
- CMSG_BATTLE_PAY_REQUEST_VAS_CHARACTER_QUEUE_TIME = 0x370B,
- CMSG_BATTLE_PAY_START_PURCHASE = 0x36F4,
- CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F5,
- CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C4,
- CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER = 0x370C,
+ CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D2,
+ CMSG_BATTLENET_REQUEST = 0x36F6,
+ CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x36F7,
+ CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CA,
+ CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36C9,
+ CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C0,
+ CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BA,
+ CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BB,
+ CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C3,
+ CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE = 0x36C1,
+ CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES = 0x3708,
+ CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3707,
+ CMSG_BATTLE_PAY_REQUEST_VAS_CHARACTER_QUEUE_TIME = 0x3709,
+ CMSG_BATTLE_PAY_START_PURCHASE = 0x36F2,
+ CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F3,
+ CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C2,
+ CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER = 0x370A,
CMSG_BATTLE_PET_CLEAR_FANFARE = 0x312C,
- CMSG_BATTLE_PET_DELETE_PET = 0x3626,
- CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3627,
- CMSG_BATTLE_PET_MODIFY_NAME = 0x3629,
- CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3625,
- CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3624,
- CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362D,
- CMSG_BATTLE_PET_SET_FLAGS = 0x3631,
- CMSG_BATTLE_PET_SUMMON = 0x362A,
- CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31D5,
+ 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_UPDATE_DISPLAY_NOTIFY = 0x31D7,
+ CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31D6,
CMSG_BEGIN_TRADE = 0x3157,
CMSG_BINDER_ACTIVATE = 0x34B5,
CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3531,
CMSG_BLACK_MARKET_OPEN = 0x352F,
CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3530,
- CMSG_BUG_REPORT = 0x3688,
+ CMSG_BUG_REPORT = 0x3686,
CMSG_BUSY_TRADE = 0x3158,
CMSG_BUY_BACK_ITEM = 0x34A7,
CMSG_BUY_BANK_SLOT = 0x34B7,
CMSG_BUY_ITEM = 0x34A6,
CMSG_BUY_REAGENT_BANK = 0x34B8,
- CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36ED,
- CMSG_BUY_WOW_TOKEN_START = 0x36EC,
- CMSG_CAGE_BATTLE_PET = 0x31E6,
- CMSG_CALENDAR_ADD_EVENT = 0x367F,
- 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_GUILD_FILTER = 0x3673,
- CMSG_CALENDAR_REMOVE_EVENT = 0x3679,
- CMSG_CALENDAR_REMOVE_INVITE = 0x3675,
- CMSG_CALENDAR_UPDATE_EVENT = 0x3680,
+ CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36EB,
+ CMSG_BUY_WOW_TOKEN_START = 0x36EA,
+ CMSG_CAGE_BATTLE_PET = 0x31E8,
+ CMSG_CALENDAR_ADD_EVENT = 0x367D,
+ 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_GUILD_FILTER = 0x3671,
+ CMSG_CALENDAR_REMOVE_EVENT = 0x3677,
+ CMSG_CALENDAR_REMOVE_INVITE = 0x3673,
+ CMSG_CALENDAR_UPDATE_EVENT = 0x367E,
CMSG_CANCEL_AURA = 0x31AC,
CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34EB,
- CMSG_CANCEL_CAST = 0x328D,
- CMSG_CANCEL_CHANNELLING = 0x3258,
- CMSG_CANCEL_GROWTH_AURA = 0x325D,
- CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3206,
+ CMSG_CANCEL_CAST = 0x3291,
+ CMSG_CANCEL_CHANNELLING = 0x325C,
+ CMSG_CANCEL_GROWTH_AURA = 0x3261,
+ CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3208,
CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AB,
- CMSG_CANCEL_MOUNT_AURA = 0x326E,
+ CMSG_CANCEL_MOUNT_AURA = 0x3272,
CMSG_CANCEL_QUEUED_SPELL = 0x317E,
CMSG_CANCEL_TEMP_ENCHANTMENT = 0x34F6,
CMSG_CANCEL_TRADE = 0x315C,
- CMSG_CAN_DUEL = 0x3664,
- CMSG_CAN_REDEEM_WOW_TOKEN_FOR_BALANCE = 0x3708,
- CMSG_CAST_SPELL = 0x328A,
+ CMSG_CAN_DUEL = 0x3662,
+ CMSG_CAN_REDEEM_WOW_TOKEN_FOR_BALANCE = 0x3706,
+ CMSG_CAST_SPELL = 0x328E,
CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x308F,
CMSG_CHALLENGE_MODE_REQUEST_MAP_STATS = 0x308E,
- CMSG_CHANGE_BAG_SLOT_FLAG = 0x330E,
- CMSG_CHANGE_MONUMENT_APPEARANCE = 0x32F0,
- CMSG_CHANGE_SUB_GROUP = 0x364E,
- CMSG_CHARACTER_RENAME_REQUEST = 0x36C0,
- CMSG_CHAR_CUSTOMIZE = 0x3690,
- CMSG_CHAR_DELETE = 0x369D,
- CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3696,
+ CMSG_CHANGE_BAG_SLOT_FLAG = 0x3312,
+ CMSG_CHANGE_MONUMENT_APPEARANCE = 0x32F4,
+ CMSG_CHANGE_SUB_GROUP = 0x364C,
+ CMSG_CHARACTER_RENAME_REQUEST = 0x36BE,
+ CMSG_CHAR_CUSTOMIZE = 0x368E,
+ CMSG_CHAR_DELETE = 0x369B,
+ CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3694,
CMSG_CHAT_ADDON_MESSAGE_CHANNEL = 0x37D0,
CMSG_CHAT_ADDON_MESSAGE_GUILD = 0x37D4,
CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT = 0x37F3,
@@ -219,14 +220,14 @@ 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 = 0x36CD,
- CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36EB,
- CMSG_CHOICE_RESPONSE = 0x328F,
+ CMSG_CHECK_RAF_EMAIL_ENABLED = 0x36CB,
+ CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36E9,
+ CMSG_CHOICE_RESPONSE = 0x3293,
CMSG_CLEAR_RAID_MARKER = 0x31A1,
CMSG_CLEAR_TRADE_ITEM = 0x315E,
CMSG_CLIENT_PORT_GRAVEYARD = 0x352B,
CMSG_CLOSE_INTERACTION = 0x3496,
- CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3634,
+ CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3632,
CMSG_COMMENTATOR_ENABLE = 0x35F0,
CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F4,
CMSG_COMMENTATOR_EXIT_INSTANCE = 0x35F5,
@@ -234,87 +235,87 @@ enum OpcodeClient : uint16
CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x35F3,
CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F2,
CMSG_COMMENTATOR_START_WARGAME = 0x35EF,
- CMSG_COMPLAINT = 0x366E,
+ CMSG_COMPLAINT = 0x366C,
CMSG_COMPLETE_CINEMATIC = 0x3549,
CMSG_COMPLETE_MOVIE = 0x34E1,
CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31A6,
- CMSG_CONFIRM_RESPEC_WIPE = 0x3200,
+ CMSG_CONFIRM_RESPEC_WIPE = 0x3202,
CMSG_CONNECT_TO_FAILED = 0x35D4,
CMSG_CONTRIBUTION_CONTRIBUTE = 0x3558,
CMSG_CONTRIBUTION_GET_STATE = 0x3559,
- CMSG_CONVERT_CONSUMPTION_TIME = 0x36FB,
- CMSG_CONVERT_RAID = 0x3650,
- CMSG_CREATE_CHARACTER = 0x3645,
- CMSG_CREATE_SHIPMENT = 0x32DC,
+ CMSG_CONVERT_CONSUMPTION_TIME = 0x36F9,
+ CMSG_CONVERT_RAID = 0x364E,
+ CMSG_CREATE_CHARACTER = 0x3643,
+ CMSG_CREATE_SHIPMENT = 0x32E0,
CMSG_DB_QUERY_BULK = 0x35E4,
CMSG_DECLINE_GUILD_INVITES = 0x3522,
CMSG_DECLINE_PETITION = 0x3538,
CMSG_DELETE_EQUIPMENT_SET = 0x3510,
- CMSG_DEL_FRIEND = 0x36D2,
- CMSG_DEL_IGNORE = 0x36D6,
- CMSG_DEPOSIT_REAGENT_BANK = 0x3317,
- CMSG_DESTROY_ITEM = 0x3281,
- CMSG_DF_BOOT_PLAYER_VOTE = 0x3617,
- CMSG_DF_GET_JOIN_STATUS = 0x3615,
- CMSG_DF_GET_SYSTEM_INFO = 0x3614,
+ CMSG_DEL_FRIEND = 0x36D0,
+ CMSG_DEL_IGNORE = 0x36D4,
+ CMSG_DEPOSIT_REAGENT_BANK = 0x331B,
+ CMSG_DESTROY_ITEM = 0x3285,
+ 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 = 0x3613,
+ CMSG_DF_LEAVE = 0x3611,
CMSG_DF_PROPOSAL_RESPONSE = 0x3607,
- CMSG_DF_READY_CHECK_RESPONSE = 0x361A,
- CMSG_DF_SET_ROLES = 0x3616,
- CMSG_DF_TELEPORT = 0x3618,
+ CMSG_DF_READY_CHECK_RESPONSE = 0x3618,
+ CMSG_DF_SET_ROLES = 0x3614,
+ CMSG_DF_TELEPORT = 0x3616,
CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A3C,
CMSG_DISMISS_CRITTER = 0x34FF,
- CMSG_DO_MASTER_LOOT_ROLL = 0x3205,
- CMSG_DO_READY_CHECK = 0x3635,
+ CMSG_DO_MASTER_LOOT_ROLL = 0x3207,
+ CMSG_DO_READY_CHECK = 0x3633,
CMSG_DUEL_RESPONSE = 0x34E6,
- CMSG_EJECT_PASSENGER = 0x322E,
+ CMSG_EJECT_PASSENGER = 0x3230,
CMSG_EMOTE = 0x3545,
CMSG_ENABLE_ENCRYPTION_ACK = 0x3767,
CMSG_ENABLE_NAGLE = 0x376B,
CMSG_ENABLE_TAXI_NODE = 0x34AC,
- CMSG_ENGINE_SURVEY = 0x36E5,
+ CMSG_ENGINE_SURVEY = 0x36E3,
CMSG_ENUM_CHARACTERS = 0x35E8,
- CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DF,
+ CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DD,
CMSG_FAR_SIGHT = 0x34EC,
CMSG_GAME_OBJ_REPORT_USE = 0x34F3,
CMSG_GAME_OBJ_USE = 0x34F2,
- CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32C7,
- CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32B8,
- CMSG_GARRISON_CHECK_UPGRADEABLE = 0x330A,
- CMSG_GARRISON_COMPLETE_MISSION = 0x32FD,
- CMSG_GARRISON_GENERATE_RECRUITS = 0x32CA,
- CMSG_GARRISON_GET_BUILDING_LANDMARKS = 0x32D8,
- CMSG_GARRISON_GET_MISSION_REWARD = 0x3331,
- CMSG_GARRISON_MISSION_BONUS_ROLL = 0x32FF,
- CMSG_GARRISON_PURCHASE_BUILDING = 0x32B4,
- CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32CC,
- CMSG_GARRISON_REMOVE_FOLLOWER = 0x32F4,
- CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32C8,
- CMSG_GARRISON_RENAME_FOLLOWER = 0x32C9,
- CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32B3,
- CMSG_GARRISON_REQUEST_CLASS_SPEC_CATEGORY_INFO = 0x32D1,
- CMSG_GARRISON_REQUEST_LANDING_PAGE_SHIPMENT_INFO = 0x32DB,
- CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x32DA,
- CMSG_GARRISON_RESEARCH_TALENT = 0x32CD,
- CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32B5,
- CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32C5,
- CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32C1,
- CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32CB,
- CMSG_GARRISON_START_MISSION = 0x32FC,
- CMSG_GARRISON_SWAP_BUILDINGS = 0x32B9,
+ CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32CB,
+ CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32BC,
+ CMSG_GARRISON_CHECK_UPGRADEABLE = 0x330E,
+ CMSG_GARRISON_COMPLETE_MISSION = 0x3301,
+ CMSG_GARRISON_GENERATE_RECRUITS = 0x32CE,
+ CMSG_GARRISON_GET_BUILDING_LANDMARKS = 0x32DC,
+ CMSG_GARRISON_GET_MISSION_REWARD = 0x3334,
+ CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3303,
+ CMSG_GARRISON_PURCHASE_BUILDING = 0x32B8,
+ CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32D0,
+ CMSG_GARRISON_REMOVE_FOLLOWER = 0x32F8,
+ CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32CC,
+ CMSG_GARRISON_RENAME_FOLLOWER = 0x32CD,
+ CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32B7,
+ CMSG_GARRISON_REQUEST_CLASS_SPEC_CATEGORY_INFO = 0x32D5,
+ CMSG_GARRISON_REQUEST_LANDING_PAGE_SHIPMENT_INFO = 0x32DF,
+ CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x32DE,
+ CMSG_GARRISON_RESEARCH_TALENT = 0x32D1,
+ CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32B9,
+ CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32C9,
+ CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32C5,
+ CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32CF,
+ CMSG_GARRISON_START_MISSION = 0x3300,
+ CMSG_GARRISON_SWAP_BUILDINGS = 0x32BD,
CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7,
- CMSG_GET_CHALLENGE_MODE_REWARDS = 0x3685,
- CMSG_GET_GARRISON_INFO = 0x32AE,
+ CMSG_GET_CHALLENGE_MODE_REWARDS = 0x3683,
+ CMSG_GET_GARRISON_INFO = 0x32B2,
CMSG_GET_ITEM_PURCHASE_DATA = 0x3533,
- CMSG_GET_MIRROR_IMAGE_DATA = 0x3285,
+ CMSG_GET_MIRROR_IMAGE_DATA = 0x3289,
CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE,
- CMSG_GET_REMAINING_GAME_TIME = 0x36EE,
- CMSG_GET_TROPHY_LIST = 0x32ED,
- CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36E1,
- CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3694,
- CMSG_GM_TICKET_GET_CASE_STATUS = 0x3693,
- CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3692,
+ CMSG_GET_REMAINING_GAME_TIME = 0x36EC,
+ CMSG_GET_TROPHY_LIST = 0x32F1,
+ CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DF,
+ CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3692,
+ CMSG_GM_TICKET_GET_CASE_STATUS = 0x3691,
+ CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3690,
CMSG_GOSSIP_SELECT_OPTION = 0x3497,
CMSG_GRANT_LEVEL = 0x34FB,
CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308D,
@@ -356,7 +357,7 @@ enum OpcodeClient : uint16
CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3088,
CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x306F,
CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3070,
- CMSG_GUILD_SET_GUILD_MASTER = 0x36C7,
+ CMSG_GUILD_SET_GUILD_MASTER = 0x36C5,
CMSG_GUILD_SET_MEMBER_NOTE = 0x3072,
CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3067,
CMSG_GUILD_SHIFT_RANK = 0x3066,
@@ -368,67 +369,67 @@ enum OpcodeClient : uint16
CMSG_INITIATE_ROLE_POLL = 0x35DA,
CMSG_INITIATE_TRADE = 0x3156,
CMSG_INSPECT = 0x352D,
- CMSG_INSPECT_PVP = 0x36A3,
+ CMSG_INSPECT_PVP = 0x36A1,
CMSG_INSTANCE_LOCK_RESPONSE = 0x3511,
CMSG_ITEM_PURCHASE_REFUND = 0x3534,
- CMSG_ITEM_TEXT_QUERY = 0x330B,
- CMSG_JOIN_PET_BATTLE_QUEUE = 0x31D3,
+ CMSG_ITEM_TEXT_QUERY = 0x330F,
+ CMSG_JOIN_PET_BATTLE_QUEUE = 0x31D4,
CMSG_JOIN_RATED_BATTLEGROUND = 0x3176,
- CMSG_KEEP_ALIVE = 0x3681,
- CMSG_KEYBOUND_OVERRIDE = 0x3217,
+ CMSG_KEEP_ALIVE = 0x367F,
+ CMSG_KEYBOUND_OVERRIDE = 0x3219,
CMSG_LEARN_PVP_TALENTS = 0x3557,
CMSG_LEARN_TALENTS = 0x3556,
- CMSG_LEAVE_GROUP = 0x364B,
- CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31D4,
- CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360E,
- CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360F,
- CMSG_LFG_LIST_DECLINE_APPLICANT = 0x3610,
- CMSG_LFG_LIST_GET_STATUS = 0x360C,
- CMSG_LFG_LIST_INVITE_APPLICANT = 0x3611,
- CMSG_LFG_LIST_INVITE_RESPONSE = 0x3612,
- CMSG_LFG_LIST_JOIN = 0x3609,
- CMSG_LFG_LIST_LEAVE = 0x360B,
- CMSG_LFG_LIST_SEARCH = 0x360D,
- CMSG_LFG_LIST_UPDATE_REQUEST = 0x360A,
- CMSG_LF_GUILD_ADD_RECRUIT = 0x361D,
- CMSG_LF_GUILD_BROWSE = 0x361F,
+ CMSG_LEAVE_GROUP = 0x3649,
+ CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31D5,
+ 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 = 0x3345,
+ CMSG_LFG_LIST_LEAVE = 0x3609,
+ CMSG_LFG_LIST_SEARCH = 0x360B,
+ CMSG_LFG_LIST_UPDATE_REQUEST = 0x3346,
+ 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 = 0x361E,
+ CMSG_LF_GUILD_SET_GUILD_POST = 0x361C,
CMSG_LIST_INVENTORY = 0x34A4,
- CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36BB,
- CMSG_LIVE_REGION_CHARACTER_COPY = 0x36BA,
- CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B9,
+ CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B9,
+ CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B8,
+ CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B7,
CMSG_LOADING_SCREEN_NOTIFY = 0x35F8,
- CMSG_LOAD_SELECTED_TROPHY = 0x32EE,
+ CMSG_LOAD_SELECTED_TROPHY = 0x32F2,
CMSG_LOGOUT_CANCEL = 0x34DC,
CMSG_LOGOUT_INSTANT = 0x34DD,
CMSG_LOGOUT_REQUEST = 0x34DB,
CMSG_LOG_DISCONNECT = 0x3769,
CMSG_LOG_STREAMING_ERROR = 0x376D,
- CMSG_LOOT_ITEM = 0x3203,
- CMSG_LOOT_MONEY = 0x3202,
- CMSG_LOOT_RELEASE = 0x3207,
- CMSG_LOOT_ROLL = 0x3208,
- CMSG_LOOT_UNIT = 0x3201,
- CMSG_LOW_LEVEL_RAID1 = 0x36A1,
+ CMSG_LOOT_ITEM = 0x3205,
+ CMSG_LOOT_MONEY = 0x3204,
+ CMSG_LOOT_RELEASE = 0x3209,
+ CMSG_LOOT_ROLL = 0x320A,
+ CMSG_LOOT_UNIT = 0x3203,
+ CMSG_LOW_LEVEL_RAID1 = 0x369F,
CMSG_LOW_LEVEL_RAID2 = 0x3518,
CMSG_MAIL_CREATE_TEXT_ITEM = 0x353F,
- CMSG_MAIL_DELETE = 0x3219,
+ CMSG_MAIL_DELETE = 0x321B,
CMSG_MAIL_GET_LIST = 0x353A,
CMSG_MAIL_MARK_AS_READ = 0x353E,
- CMSG_MAIL_RETURN_TO_SENDER = 0x3657,
+ CMSG_MAIL_RETURN_TO_SENDER = 0x3655,
CMSG_MAIL_TAKE_ITEM = 0x353C,
CMSG_MAIL_TAKE_MONEY = 0x353B,
- CMSG_MASTER_LOOT_ITEM = 0x3204,
- CMSG_MINIMAP_PING = 0x364D,
+ CMSG_MASTER_LOOT_ITEM = 0x3206,
+ CMSG_MINIMAP_PING = 0x364B,
CMSG_MISSILE_TRAJECTORY_COLLISION = 0x3189,
CMSG_MOUNT_CLEAR_FANFARE = 0x312D,
- CMSG_MOUNT_SET_FAVORITE = 0x3633,
- CMSG_MOUNT_SPECIAL_ANIM = 0x326F,
+ CMSG_MOUNT_SET_FAVORITE = 0x3631,
+ CMSG_MOUNT_SPECIAL_ANIM = 0x3273,
CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A12,
CMSG_MOVE_CHANGE_TRANSPORT = 0x3A2C,
CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A31,
@@ -490,39 +491,39 @@ enum OpcodeClient : uint16
CMSG_MOVE_TIME_SKIPPED = 0x3A18,
CMSG_MOVE_TOGGLE_COLLISION_CHEAT = 0x3A05,
CMSG_MOVE_WATER_WALK_ACK = 0x3A1A,
- CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31C9,
+ CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31CA,
CMSG_NEXT_CINEMATIC_CAMERA = 0x3548,
CMSG_OBJECT_UPDATE_FAILED = 0x317F,
CMSG_OBJECT_UPDATE_RESCUED = 0x3180,
- CMSG_OFFER_PETITION = 0x36B1,
+ CMSG_OFFER_PETITION = 0x36AF,
CMSG_OPENING_CINEMATIC = 0x3547,
- CMSG_OPEN_ITEM = 0x330C,
- CMSG_OPEN_MISSION_NPC = 0x32D3,
- CMSG_OPEN_SHIPMENT_NPC = 0x32D9,
- CMSG_OPEN_TRADESKILL_NPC = 0x32E4,
+ CMSG_OPEN_ITEM = 0x3310,
+ CMSG_OPEN_MISSION_NPC = 0x32D7,
+ CMSG_OPEN_SHIPMENT_NPC = 0x32DD,
+ CMSG_OPEN_TRADESKILL_NPC = 0x32E8,
CMSG_OPT_OUT_OF_LOOT = 0x34FA,
CMSG_PARTY_INVITE = 0x3602,
CMSG_PARTY_INVITE_RESPONSE = 0x3603,
- CMSG_PARTY_UNINVITE = 0x3649,
+ CMSG_PARTY_UNINVITE = 0x3647,
CMSG_PETITION_BUY = 0x34CD,
- CMSG_PETITION_RENAME_GUILD = 0x36C8,
+ CMSG_PETITION_RENAME_GUILD = 0x36C6,
CMSG_PETITION_SHOW_LIST = 0x34CC,
CMSG_PETITION_SHOW_SIGNATURES = 0x34CE,
CMSG_PET_ABANDON = 0x3490,
CMSG_PET_ACTION = 0x348E,
- CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31D7,
- CMSG_PET_BATTLE_INPUT = 0x3642,
- CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3218,
- CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31D6,
- CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3643,
- CMSG_PET_BATTLE_REQUEST_PVP = 0x31D1,
- CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31D2,
- CMSG_PET_BATTLE_REQUEST_WILD = 0x31CF,
- CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31D8,
- CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31D0,
+ CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31D9,
+ CMSG_PET_BATTLE_INPUT = 0x3640,
+ CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x321A,
+ CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31D8,
+ CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3641,
+ CMSG_PET_BATTLE_REQUEST_PVP = 0x31D2,
+ CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31D3,
+ CMSG_PET_BATTLE_REQUEST_WILD = 0x31D0,
+ CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31DA,
+ CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31D1,
CMSG_PET_CANCEL_AURA = 0x3491,
- CMSG_PET_CAST_SPELL = 0x3289,
- CMSG_PET_RENAME = 0x3687,
+ CMSG_PET_CAST_SPELL = 0x328D,
+ CMSG_PET_RENAME = 0x3685,
CMSG_PET_SET_ACTION = 0x348D,
CMSG_PET_SPELL_AUTOCAST = 0x3492,
CMSG_PET_STOP_ATTACK = 0x348F,
@@ -531,27 +532,27 @@ enum OpcodeClient : uint16
CMSG_PROTOCOL_MISMATCH = 0x376E,
CMSG_PUSH_QUEST_TO_PARTY = 0x34A2,
CMSG_PVP_LOG_DATA = 0x317A,
- CMSG_PVP_PRESTIGE_RANK_UP = 0x332F,
- CMSG_QUERY_BATTLE_PET_NAME = 0x3264,
- CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3662,
- CMSG_QUERY_CORPSE_TRANSPORT = 0x3663,
+ CMSG_PVP_PRESTIGE_RANK_UP = 0x3332,
+ CMSG_QUERY_BATTLE_PET_NAME = 0x3268,
+ CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3660,
+ CMSG_QUERY_CORPSE_TRANSPORT = 0x3661,
CMSG_QUERY_COUNTDOWN_TIMER = 0x31A4,
- CMSG_QUERY_CREATURE = 0x325E,
- CMSG_QUERY_GAME_OBJECT = 0x325F,
- CMSG_QUERY_GARRISON_CREATURE_NAME = 0x3265,
- CMSG_QUERY_GUILD_INFO = 0x368F,
+ CMSG_QUERY_CREATURE = 0x3262,
+ CMSG_QUERY_GAME_OBJECT = 0x3263,
+ CMSG_QUERY_GARRISON_CREATURE_NAME = 0x3269,
+ CMSG_QUERY_GUILD_INFO = 0x368D,
CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3506,
CMSG_QUERY_NEXT_MAIL_TIME = 0x353D,
- CMSG_QUERY_NPC_TEXT = 0x3260,
- CMSG_QUERY_PAGE_TEXT = 0x3262,
- CMSG_QUERY_PETITION = 0x3266,
- CMSG_QUERY_PET_NAME = 0x3263,
- CMSG_QUERY_PLAYER_NAME = 0x368D,
+ CMSG_QUERY_NPC_TEXT = 0x3264,
+ CMSG_QUERY_PAGE_TEXT = 0x3266,
+ CMSG_QUERY_PETITION = 0x326A,
+ CMSG_QUERY_PET_NAME = 0x3267,
+ CMSG_QUERY_PLAYER_NAME = 0x368B,
CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3173,
- CMSG_QUERY_QUEST_INFO = 0x3261,
- CMSG_QUERY_QUEST_REWARDS = 0x3333,
- CMSG_QUERY_REALM_NAME = 0x368E,
- CMSG_QUERY_SCENARIO_POI = 0x3658,
+ CMSG_QUERY_QUEST_INFO = 0x3265,
+ CMSG_QUERY_QUEST_REWARDS = 0x3336,
+ CMSG_QUERY_REALM_NAME = 0x368C,
+ CMSG_QUERY_SCENARIO_POI = 0x3656,
CMSG_QUERY_TIME = 0x34DA,
CMSG_QUERY_VOID_STORAGE = 0x319D,
CMSG_QUEST_CONFIRM_ACCEPT = 0x34A1,
@@ -564,126 +565,126 @@ enum OpcodeClient : uint16
CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x34A0,
CMSG_QUEST_GIVER_STATUS_QUERY = 0x349F,
CMSG_QUEST_LOG_REMOVE_QUEST = 0x3532,
- CMSG_QUEST_POI_QUERY = 0x36B2,
+ CMSG_QUEST_POI_QUERY = 0x36B0,
CMSG_QUEST_PUSH_RESULT = 0x34A3,
CMSG_QUEUED_MESSAGES_END = 0x376C,
- CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3707,
- CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3706,
- CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3705,
- CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3704,
- CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E6,
- CMSG_RANDOM_ROLL = 0x3656,
- CMSG_READY_CHECK_RESPONSE = 0x3636,
- CMSG_READ_ITEM = 0x330D,
+ CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3705,
+ CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3704,
+ CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3703,
+ CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3702,
+ CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E4,
+ CMSG_RANDOM_ROLL = 0x3654,
+ CMSG_READY_CHECK_RESPONSE = 0x3634,
+ CMSG_READ_ITEM = 0x3311,
CMSG_RECLAIM_CORPSE = 0x34DF,
- CMSG_RECRUIT_A_FRIEND = 0x36CE,
- CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36F0,
- CMSG_REDEEM_WOW_TOKEN_START = 0x36EF,
- CMSG_REMOVE_NEW_ITEM = 0x3336,
+ CMSG_RECRUIT_A_FRIEND = 0x36CC,
+ CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36EE,
+ CMSG_REDEEM_WOW_TOKEN_START = 0x36ED,
+ CMSG_REMOVE_NEW_ITEM = 0x3339,
CMSG_REORDER_CHARACTERS = 0x35E9,
CMSG_REPAIR_ITEM = 0x34F0,
- CMSG_REPLACE_TROPHY = 0x32EF,
+ CMSG_REPLACE_TROPHY = 0x32F3,
CMSG_REPOP_REQUEST = 0x352A,
- CMSG_REPORT_CLIENT_VARIABLES = 0x3701,
- CMSG_REPORT_ENABLED_ADDONS = 0x3700,
- CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3702,
+ CMSG_REPORT_CLIENT_VARIABLES = 0x36FF,
+ CMSG_REPORT_ENABLED_ADDONS = 0x36FE,
+ CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3700,
CMSG_REPORT_PVP_PLAYER_AFK = 0x34F8,
- CMSG_REQUEST_ACCOUNT_DATA = 0x3697,
- CMSG_REQUEST_AREA_POI_UPDATE = 0x3335,
+ CMSG_REQUEST_ACCOUNT_DATA = 0x3695,
+ CMSG_REQUEST_AREA_POI_UPDATE = 0x3338,
CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC,
CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317C,
CMSG_REQUEST_CEMETERY_LIST = 0x3174,
- CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32A0,
- CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO = 0x36FA,
+ CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32A4,
+ CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO = 0x36F8,
CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x352E,
- CMSG_REQUEST_FORCED_REACTIONS = 0x31FC,
+ CMSG_REQUEST_FORCED_REACTIONS = 0x31FE,
CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A3,
CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A2,
CMSG_REQUEST_HONOR_STATS = 0x3179,
- CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x3291,
+ CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x3295,
CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7,
- CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3655,
+ CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3653,
CMSG_REQUEST_PET_INFO = 0x3493,
- CMSG_REQUEST_PLAYED_TIME = 0x3269,
+ CMSG_REQUEST_PLAYED_TIME = 0x326D,
CMSG_REQUEST_PVP_BRAWL_INFO = 0x3191,
CMSG_REQUEST_PVP_REWARDS = 0x3190,
- CMSG_REQUEST_RAID_INFO = 0x36C9,
+ CMSG_REQUEST_RAID_INFO = 0x36C7,
CMSG_REQUEST_RATED_BATTLEFIELD_INFO = 0x35E3,
CMSG_REQUEST_RESEARCH_HISTORY = 0x3167,
CMSG_REQUEST_STABLED_PETS = 0x3494,
- CMSG_REQUEST_VEHICLE_EXIT = 0x3229,
- CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x322B,
- CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x322A,
- CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x322C,
- CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3334,
- CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36E8,
- CMSG_RESET_CHALLENGE_MODE = 0x31F9,
- CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x31FA,
- CMSG_RESET_INSTANCES = 0x366A,
- CMSG_RESURRECT_RESPONSE = 0x3686,
- CMSG_REVERT_MONUMENT_APPEARANCE = 0x32F1,
- CMSG_RIDE_VEHICLE_INTERACT = 0x322D,
+ CMSG_REQUEST_VEHICLE_EXIT = 0x322B,
+ CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x322D,
+ CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x322C,
+ CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x322E,
+ CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3337,
+ CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36E6,
+ CMSG_RESET_CHALLENGE_MODE = 0x31FB,
+ CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x31FC,
+ CMSG_RESET_INSTANCES = 0x3668,
+ CMSG_RESURRECT_RESPONSE = 0x3684,
+ CMSG_REVERT_MONUMENT_APPEARANCE = 0x32F5,
+ CMSG_RIDE_VEHICLE_INTERACT = 0x322F,
CMSG_SAVE_CUF_PROFILES = 0x318A,
CMSG_SAVE_EQUIPMENT_SET = 0x350F,
- CMSG_SAVE_GUILD_EMBLEM = 0x3295,
- CMSG_SCENE_PLAYBACK_CANCELED = 0x3214,
- CMSG_SCENE_PLAYBACK_COMPLETE = 0x3213,
- CMSG_SCENE_TRIGGER_EVENT = 0x3215,
+ CMSG_SAVE_GUILD_EMBLEM = 0x3299,
+ CMSG_SCENE_PLAYBACK_CANCELED = 0x3216,
+ CMSG_SCENE_PLAYBACK_COMPLETE = 0x3215,
+ CMSG_SCENE_TRIGGER_EVENT = 0x3217,
CMSG_SELF_RES = 0x3535,
CMSG_SELL_ITEM = 0x34A5,
- CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36EA,
- CMSG_SELL_WOW_TOKEN_START = 0x36E9,
- CMSG_SEND_CONTACT_LIST = 0x36D0,
+ CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36E8,
+ CMSG_SELL_WOW_TOKEN_START = 0x36E7,
+ CMSG_SEND_CONTACT_LIST = 0x36CE,
CMSG_SEND_MAIL = 0x35FA,
- CMSG_SEND_SOR_REQUEST_VIA_ADDRESS = 0x3622,
+ CMSG_SEND_SOR_REQUEST_VIA_ADDRESS = 0x3620,
CMSG_SEND_TEXT_EMOTE = 0x348A,
- CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x321A,
+ CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x321C,
CMSG_SET_ACTION_BAR_TOGGLES = 0x3536,
- CMSG_SET_ACTION_BUTTON = 0x3637,
+ CMSG_SET_ACTION_BUTTON = 0x3635,
CMSG_SET_ACTIVE_MOVER = 0x3A37,
- CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32A1,
- CMSG_SET_ASSISTANT_LEADER = 0x3651,
- CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3310,
- CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3311,
- CMSG_SET_BANK_BAG_SLOT_FLAG = 0x330F,
- CMSG_SET_CONTACT_NOTES = 0x36D3,
+ CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32A5,
+ CMSG_SET_ASSISTANT_LEADER = 0x364F,
+ CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3314,
+ CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3315,
+ CMSG_SET_BANK_BAG_SLOT_FLAG = 0x3313,
+ CMSG_SET_CONTACT_NOTES = 0x36D1,
CMSG_SET_CURRENCY_FLAGS = 0x3169,
- CMSG_SET_DIFFICULTY_ID = 0x3216,
- CMSG_SET_DUNGEON_DIFFICULTY = 0x3684,
- CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3619,
+ CMSG_SET_DIFFICULTY_ID = 0x3218,
+ CMSG_SET_DUNGEON_DIFFICULTY = 0x3682,
+ CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3617,
CMSG_SET_FACTION_AT_WAR = 0x34E2,
CMSG_SET_FACTION_INACTIVE = 0x34E4,
CMSG_SET_FACTION_NOT_AT_WAR = 0x34E3,
- CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3313,
- CMSG_SET_LFG_BONUS_FACTION_ID = 0x3290,
- CMSG_SET_LOOT_METHOD = 0x364A,
+ CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3317,
+ CMSG_SET_LFG_BONUS_FACTION_ID = 0x3294,
+ CMSG_SET_LOOT_METHOD = 0x3648,
CMSG_SET_LOOT_SPECIALIZATION = 0x3543,
- CMSG_SET_PARTY_ASSIGNMENT = 0x3653,
- CMSG_SET_PARTY_LEADER = 0x364C,
+ CMSG_SET_PARTY_ASSIGNMENT = 0x3651,
+ CMSG_SET_PARTY_LEADER = 0x364A,
CMSG_SET_PET_SLOT = 0x3168,
- CMSG_SET_PLAYER_DECLINED_NAMES = 0x368C,
+ CMSG_SET_PLAYER_DECLINED_NAMES = 0x368A,
CMSG_SET_PREFERRED_CEMETERY = 0x3175,
- CMSG_SET_PVP = 0x3299,
- CMSG_SET_RAID_DIFFICULTY = 0x36DD,
+ CMSG_SET_PVP = 0x329D,
+ CMSG_SET_RAID_DIFFICULTY = 0x36DB,
CMSG_SET_ROLE = 0x35D9,
- CMSG_SET_SAVED_INSTANCE_EXTEND = 0x368A,
+ CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3688,
CMSG_SET_SELECTION = 0x352C,
CMSG_SET_SHEATHED = 0x348B,
- CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3312,
+ CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3316,
CMSG_SET_TAXI_BENCHMARK_MODE = 0x34F7,
- CMSG_SET_TITLE = 0x326D,
+ CMSG_SET_TITLE = 0x3271,
CMSG_SET_TRADE_CURRENCY = 0x3160,
CMSG_SET_TRADE_GOLD = 0x315F,
CMSG_SET_TRADE_ITEM = 0x315D,
- CMSG_SET_USING_PARTY_GARRISON = 0x32D5,
+ CMSG_SET_USING_PARTY_GARRISON = 0x32D9,
CMSG_SET_WATCHED_FACTION = 0x34E5,
- CMSG_SHOW_TRADE_SKILL = 0x36C1,
+ CMSG_SHOW_TRADE_SKILL = 0x36BF,
CMSG_SIGN_PETITION = 0x3537,
- CMSG_SILENCE_PARTY_TALKER = 0x3654,
+ CMSG_SILENCE_PARTY_TALKER = 0x3652,
CMSG_SOCKET_GEMS = 0x34EF,
- CMSG_SORT_BAGS = 0x3314,
- CMSG_SORT_BANK_BAGS = 0x3315,
- CMSG_SORT_REAGENT_BANK_BAGS = 0x3316,
+ CMSG_SORT_BAGS = 0x3318,
+ CMSG_SORT_BANK_BAGS = 0x3319,
+ CMSG_SORT_REAGENT_BANK_BAGS = 0x331A,
CMSG_SPELL_CLICK = 0x3498,
CMSG_SPIRIT_HEALER_ACTIVATE = 0x34B2,
CMSG_SPLIT_ITEM = 0x399E,
@@ -691,18 +692,18 @@ enum OpcodeClient : uint16
CMSG_START_CHALLENGE_MODE = 0x354E,
CMSG_START_SPECTATOR_WAR_GAME = 0x35DF,
CMSG_START_WAR_GAME = 0x35DE,
- CMSG_SUMMON_RESPONSE = 0x366C,
- CMSG_SUPPORT_TICKET_SUBMIT_BUG = 0x3647,
- CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3646,
- CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION = 0x3648,
+ CMSG_SUMMON_RESPONSE = 0x366A,
+ CMSG_SUPPORT_TICKET_SUBMIT_BUG = 0x3645,
+ CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3644,
+ CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION = 0x3646,
CMSG_SURRENDER_ARENA = 0x3172,
CMSG_SUSPEND_COMMS_ACK = 0x3764,
CMSG_SUSPEND_TOKEN_RESPONSE = 0x376A,
CMSG_SWAP_INV_ITEM = 0x399D,
CMSG_SWAP_ITEM = 0x399C,
- CMSG_SWAP_SUB_GROUPS = 0x364F,
+ CMSG_SWAP_SUB_GROUPS = 0x364D,
CMSG_SWAP_VOID_ITEM = 0x319F,
- CMSG_TABARD_VENDOR_ACTIVATE = 0x3296,
+ CMSG_TABARD_VENDOR_ACTIVATE = 0x329A,
CMSG_TALK_TO_GOSSIP = 0x3495,
CMSG_TAXI_NODE_STATUS_QUERY = 0x34AB,
CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34AD,
@@ -711,46 +712,46 @@ enum OpcodeClient : uint16
CMSG_TIME_SYNC_RESPONSE = 0x3A38,
CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3A,
CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A39,
- CMSG_TOGGLE_DIFFICULTY = 0x3659,
- CMSG_TOGGLE_PVP = 0x3298,
+ CMSG_TOGGLE_DIFFICULTY = 0x3657,
+ CMSG_TOGGLE_PVP = 0x329C,
CMSG_TOTEM_DESTROYED = 0x34FE,
- CMSG_TRADE_SKILL_SET_FAVORITE = 0x3332,
+ CMSG_TRADE_SKILL_SET_FAVORITE = 0x3335,
CMSG_TRAINER_BUY_SPELL = 0x34B1,
CMSG_TRAINER_LIST = 0x34B0,
CMSG_TRANSMOGRIFY_ITEMS = 0x3192,
CMSG_TURN_IN_PETITION = 0x3539,
- CMSG_TUTORIAL = 0x36DE,
+ CMSG_TUTORIAL = 0x36DC,
CMSG_TWITTER_CHECK_STATUS = 0x312A,
CMSG_TWITTER_CONNECT = 0x3127,
CMSG_TWITTER_DISCONNECT = 0x312B,
- CMSG_TWITTER_POST = 0x3318,
- CMSG_UI_TIME_REQUEST = 0x369C,
+ CMSG_TWITTER_POST = 0x331C,
+ CMSG_UI_TIME_REQUEST = 0x369A,
CMSG_UNACCEPT_TRADE = 0x315B,
- CMSG_UNDELETE_CHARACTER = 0x36E0,
+ CMSG_UNDELETE_CHARACTER = 0x36DE,
CMSG_UNLEARN_SKILL = 0x34E9,
CMSG_UNLEARN_SPECIALIZATION = 0x31A0,
CMSG_UNLOCK_VOID_STORAGE = 0x319C,
- CMSG_UPDATE_ACCOUNT_DATA = 0x3698,
- CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x328C,
- CMSG_UPDATE_CLIENT_SETTINGS = 0x3666,
+ CMSG_UPDATE_ACCOUNT_DATA = 0x3696,
+ CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x3290,
+ CMSG_UPDATE_CLIENT_SETTINGS = 0x3664,
CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A3E,
- CMSG_UPDATE_RAID_TARGET = 0x3652,
- CMSG_UPDATE_SPELL_VISUAL = 0x328B,
- CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F6,
- CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36F1,
- CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36E7,
- CMSG_UPGRADE_GARRISON = 0x32A9,
- CMSG_UPGRADE_ITEM = 0x321B,
+ CMSG_UPDATE_RAID_TARGET = 0x3650,
+ CMSG_UPDATE_SPELL_VISUAL = 0x328F,
+ CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F4,
+ CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36EF,
+ CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36E5,
+ CMSG_UPGRADE_GARRISON = 0x32AD,
+ CMSG_UPGRADE_ITEM = 0x321D,
CMSG_USED_FOLLOW = 0x3185,
- CMSG_USE_CRITTER_ITEM = 0x3234,
+ CMSG_USE_CRITTER_ITEM = 0x3235,
CMSG_USE_EQUIPMENT_SET = 0x3995,
- CMSG_USE_ITEM = 0x3286,
- CMSG_USE_TOY = 0x3288,
+ CMSG_USE_ITEM = 0x328A,
+ CMSG_USE_TOY = 0x328C,
CMSG_VIOLENCE_LEVEL = 0x3183,
CMSG_VOID_STORAGE_TRANSFER = 0x319E,
CMSG_WARDEN_DATA = 0x35EC,
- CMSG_WHO = 0x3683,
- CMSG_WHO_IS = 0x3682,
+ CMSG_WHO = 0x3681,
+ CMSG_WHO_IS = 0x3680,
CMSG_WORLD_PORT_RESPONSE = 0x35F9,
CMSG_WRAP_ITEM = 0x3994,
@@ -762,63 +763,63 @@ enum OpcodeClient : uint16
enum OpcodeServer : uint16
{
SMSG_ABORT_NEW_WORLD = 0x25AD,
- SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2653,
- SMSG_ACCOUNT_DATA_TIMES = 0x274A,
+ SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2652,
+ SMSG_ACCOUNT_DATA_TIMES = 0x2749,
SMSG_ACCOUNT_MOUNT_UPDATE = 0x25C3,
SMSG_ACCOUNT_TOYS_UPDATE = 0x25C4,
- SMSG_ACHIEVEMENT_DELETED = 0x271F,
- SMSG_ACHIEVEMENT_EARNED = 0x2661,
- SMSG_ACTIVATE_TAXI_REPLY = 0x26A7,
- SMSG_ACTIVE_GLYPHS = 0x2C52,
- SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x265B,
+ SMSG_ACHIEVEMENT_DELETED = 0x271E,
+ SMSG_ACHIEVEMENT_EARNED = 0x2660,
+ SMSG_ACTIVATE_TAXI_REPLY = 0x26A6,
+ SMSG_ACTIVE_GLYPHS = 0x2C53,
+ SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x265A,
SMSG_ADD_ITEM_PASSIVE = 0x25BF,
- SMSG_ADD_LOSS_OF_CONTROL = 0x2697,
- SMSG_ADD_RUNE_POWER = 0x26E3,
+ SMSG_ADD_LOSS_OF_CONTROL = 0x2696,
+ SMSG_ADD_RUNE_POWER = 0x26E2,
SMSG_ADJUST_SPLINE_DURATION = 0x25E8,
SMSG_AE_LOOT_TARGETS = 0x262C,
SMSG_AE_LOOT_TARGET_ACK = 0x262D,
- SMSG_AI_REACTION = 0x26E0,
+ SMSG_AI_REACTION = 0x26DF,
SMSG_ALL_ACCOUNT_CRITERIA = 0x2570,
SMSG_ALL_ACHIEVEMENT_DATA = 0x256F,
SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8,
SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2586,
SMSG_AREA_POI_UPDATE = 0x2848,
- SMSG_AREA_SPIRIT_HEALER_TIME = 0x2783,
- SMSG_AREA_TRIGGER_DENIED = 0x269E,
- SMSG_AREA_TRIGGER_NO_CORPSE = 0x2756,
- SMSG_AREA_TRIGGER_RE_PATH = 0x2640,
- SMSG_AREA_TRIGGER_RE_SHAPE = 0x263D,
- SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x264F,
- SMSG_ARENA_ERROR = 0x2712,
- SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2666,
- SMSG_ARTIFACT_FORGE_OPENED = 0x27E3,
- SMSG_ARTIFACT_KNOWLEDGE = 0x27EB,
- SMSG_ARTIFACT_RESPEC_CONFIRM = 0x27E6,
- SMSG_ARTIFACT_TRAITS_REFUNDED = 0x27E7,
- SMSG_ARTIFACT_XP_GAIN = 0x282E,
- SMSG_ATTACKER_STATE_UPDATE = 0x27D0,
- SMSG_ATTACK_START = 0x266E,
- SMSG_ATTACK_STOP = 0x266F,
- SMSG_ATTACK_SWING_ERROR = 0x2734,
- SMSG_ATTACK_SWING_LANDED_LOG = 0x2735,
- SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2729,
- SMSG_AUCTION_COMMAND_RESULT = 0x2726,
- SMSG_AUCTION_HELLO_RESPONSE = 0x2724,
- SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x272D,
- SMSG_AUCTION_LIST_ITEMS_RESULT = 0x272B,
- SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x272C,
- SMSG_AUCTION_LIST_PENDING_SALES_RESULT = 0x272E,
- SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2728,
- SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x272A,
- SMSG_AUCTION_REPLICATE_RESPONSE = 0x2725,
- SMSG_AUCTION_WON_NOTIFICATION = 0x2727,
+ SMSG_AREA_SPIRIT_HEALER_TIME = 0x2782,
+ SMSG_AREA_TRIGGER_DENIED = 0x269D,
+ SMSG_AREA_TRIGGER_NO_CORPSE = 0x2755,
+ SMSG_AREA_TRIGGER_RE_PATH = 0x263F,
+ SMSG_AREA_TRIGGER_RE_SHAPE = 0x263C,
+ SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x264E,
+ SMSG_ARENA_ERROR = 0x2711,
+ SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2665,
+ SMSG_ARTIFACT_FORGE_OPENED = 0x27E2,
+ SMSG_ARTIFACT_KNOWLEDGE = 0x27EA,
+ SMSG_ARTIFACT_RESPEC_CONFIRM = 0x27E5,
+ SMSG_ARTIFACT_TRAITS_REFUNDED = 0x27E6,
+ SMSG_ARTIFACT_XP_GAIN = 0x282D,
+ SMSG_ATTACKER_STATE_UPDATE = 0x27CF,
+ SMSG_ATTACK_START = 0x266D,
+ SMSG_ATTACK_STOP = 0x266E,
+ SMSG_ATTACK_SWING_ERROR = 0x2733,
+ SMSG_ATTACK_SWING_LANDED_LOG = 0x2734,
+ SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2728,
+ SMSG_AUCTION_COMMAND_RESULT = 0x2725,
+ SMSG_AUCTION_HELLO_RESPONSE = 0x2723,
+ SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x272C,
+ SMSG_AUCTION_LIST_ITEMS_RESULT = 0x272A,
+ SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x272B,
+ SMSG_AUCTION_LIST_PENDING_SALES_RESULT = 0x272D,
+ SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2727,
+ SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x2729,
+ SMSG_AUCTION_REPLICATE_RESPONSE = 0x2724,
+ SMSG_AUCTION_WON_NOTIFICATION = 0x2726,
SMSG_AURA_POINTS_DEPLETED = 0x2C23,
SMSG_AURA_UPDATE = 0x2C22,
SMSG_AUTH_CHALLENGE = 0x3048,
SMSG_AUTH_RESPONSE = 0x256C,
SMSG_AVAILABLE_HOTFIXES = 0x25A1,
- SMSG_BAN_REASON = 0x26B3,
- SMSG_BARBER_SHOP_RESULT = 0x26E9,
+ SMSG_BAN_REASON = 0x26B2,
+ SMSG_BARBER_SHOP_RESULT = 0x26E8,
SMSG_BATTLEFIELD_LIST = 0x2594,
SMSG_BATTLEFIELD_PORT_DENIED = 0x259A,
SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2590,
@@ -828,43 +829,44 @@ enum OpcodeServer : uint16
SMSG_BATTLEFIELD_STATUS_QUEUED = 0x2591,
SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x25A5,
SMSG_BATTLEGROUND_INFO_THROTTLED = 0x259B,
- SMSG_BATTLEGROUND_INIT = 0x27A1,
+ SMSG_BATTLEGROUND_INIT = 0x27A0,
SMSG_BATTLEGROUND_PLAYER_JOINED = 0x2598,
SMSG_BATTLEGROUND_PLAYER_LEFT = 0x2599,
SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2595,
- SMSG_BATTLEGROUND_POINTS = 0x27A0,
- SMSG_BATTLENET_CHALLENGE_ABORT = 0x27CF,
- SMSG_BATTLENET_CHALLENGE_START = 0x27CE,
+ SMSG_BATTLEGROUND_POINTS = 0x279F,
+ SMSG_BATTLENET_CHALLENGE_ABORT = 0x27CE,
+ SMSG_BATTLENET_CHALLENGE_START = 0x27CD,
SMSG_BATTLENET_NOTIFICATION = 0x2843,
SMSG_BATTLENET_REALM_LIST_TICKET = 0x2845,
SMSG_BATTLENET_RESPONSE = 0x2842,
SMSG_BATTLENET_SET_SESSION_STATE = 0x2844,
- SMSG_BATTLE_PAY_ACK_FAILED = 0x27C7,
- SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x27BC,
- SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27C6,
- SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x27BA,
- SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x27B9,
- SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x27B8,
- SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x27B6,
- SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27B4,
- SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27B5,
- SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x27BB,
- SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27C5,
- SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27C3,
- SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27C2,
+ SMSG_BATTLE_PAY_ACK_FAILED = 0x27C6,
+ SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x27BB,
+ SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27C5,
+ SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x27B9,
+ SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x27B8,
+ SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x27B7,
+ SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x27B5,
+ SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27B3,
+ SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27B4,
+ SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x27BA,
+ SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27C4,
+ SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27C2,
+ SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27C1,
+ SMSG_BATTLE_PAY_SUBSCRIPTION_CHANGED = 0x2864,
SMSG_BATTLE_PAY_VAS_BNET_TRANSFER_VALIDATION_RESULT = 0x285B,
- SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27B7,
- SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x2831,
+ SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27B6,
+ SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x2830,
SMSG_BATTLE_PAY_VAS_CHARACTER_QUEUE_STATUS = 0x2859,
- SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x2834,
- SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x2835,
- SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x2833,
- SMSG_BATTLE_PAY_VAS_REALM_LIST = 0x2832,
+ SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x2833,
+ SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x2834,
+ SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x2832,
+ SMSG_BATTLE_PAY_VAS_REALM_LIST = 0x2831,
SMSG_BATTLE_PAY_VAS_TRANSFER_QUEUE_STATUS = 0x2858,
SMSG_BATTLE_PETS_HEALED = 0x2609,
- SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x26A1,
+ SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x26A0,
SMSG_BATTLE_PET_DELETED = 0x2606,
- SMSG_BATTLE_PET_ERROR = 0x2656,
+ SMSG_BATTLE_PET_ERROR = 0x2655,
SMSG_BATTLE_PET_JOURNAL = 0x2605,
SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x2603,
SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x2604,
@@ -874,49 +876,49 @@ enum OpcodeServer : uint16
SMSG_BATTLE_PET_REVOKED = 0x2607,
SMSG_BATTLE_PET_TRAP_LEVEL = 0x2600,
SMSG_BATTLE_PET_UPDATES = 0x25FF,
- SMSG_BINDER_CONFIRM = 0x273A,
+ SMSG_BINDER_CONFIRM = 0x2739,
SMSG_BIND_POINT_UPDATE = 0x257C,
- SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2645,
- SMSG_BLACK_MARKET_OPEN_RESULT = 0x2643,
- SMSG_BLACK_MARKET_OUTBID = 0x2646,
- SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2644,
- SMSG_BLACK_MARKET_WON = 0x2647,
- SMSG_BONUS_ROLL_EMPTY = 0x2663,
- SMSG_BOSS_KILL_CREDIT = 0x27C1,
- SMSG_BREAK_TARGET = 0x266D,
- SMSG_BUY_FAILED = 0x26F2,
- SMSG_BUY_SUCCEEDED = 0x26F1,
- SMSG_CACHE_INFO = 0x2744,
- SMSG_CACHE_VERSION = 0x2743,
- SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26C7,
- SMSG_CALENDAR_COMMAND_RESULT = 0x26C8,
- SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26B7,
- SMSG_CALENDAR_EVENT_INVITE = 0x26B8,
- SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x26B9,
- SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS = 0x26BC,
- SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x26C1,
- SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x26C2,
- SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x26BD,
- SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x26BE,
- SMSG_CALENDAR_EVENT_INVITE_STATUS = 0x26BA,
- SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x26BB,
- SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x26BF,
- SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x26C0,
- SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x26C3,
- SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x26C4,
- SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x26C5,
- SMSG_CALENDAR_SEND_CALENDAR = 0x26B5,
- SMSG_CALENDAR_SEND_EVENT = 0x26B6,
- SMSG_CALENDAR_SEND_NUM_PENDING = 0x26C6,
- SMSG_CAMERA_EFFECT = 0x2768,
- SMSG_CANCEL_AUTO_REPEAT = 0x2713,
- SMSG_CANCEL_COMBAT = 0x2732,
- SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C45,
- SMSG_CANCEL_SCENE = 0x2655,
- SMSG_CANCEL_SPELL_VISUAL = 0x2C43,
- SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C47,
- SMSG_CAN_DUEL_RESULT = 0x2677,
- SMSG_CAST_FAILED = 0x2C55,
+ SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2644,
+ SMSG_BLACK_MARKET_OPEN_RESULT = 0x2642,
+ SMSG_BLACK_MARKET_OUTBID = 0x2645,
+ SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2643,
+ SMSG_BLACK_MARKET_WON = 0x2646,
+ SMSG_BONUS_ROLL_EMPTY = 0x2662,
+ SMSG_BOSS_KILL_CREDIT = 0x27C0,
+ SMSG_BREAK_TARGET = 0x266C,
+ SMSG_BUY_FAILED = 0x26F1,
+ SMSG_BUY_SUCCEEDED = 0x26F0,
+ SMSG_CACHE_INFO = 0x2743,
+ SMSG_CACHE_VERSION = 0x2742,
+ SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26C6,
+ SMSG_CALENDAR_COMMAND_RESULT = 0x26C7,
+ SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26B6,
+ SMSG_CALENDAR_EVENT_INVITE = 0x26B7,
+ SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x26B8,
+ SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS = 0x26BB,
+ SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x26C0,
+ SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x26C1,
+ SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x26BC,
+ SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x26BD,
+ SMSG_CALENDAR_EVENT_INVITE_STATUS = 0x26B9,
+ SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x26BA,
+ SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x26BE,
+ SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x26BF,
+ SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x26C2,
+ SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x26C3,
+ SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x26C4,
+ SMSG_CALENDAR_SEND_CALENDAR = 0x26B4,
+ SMSG_CALENDAR_SEND_EVENT = 0x26B5,
+ SMSG_CALENDAR_SEND_NUM_PENDING = 0x26C5,
+ SMSG_CAMERA_EFFECT = 0x2767,
+ SMSG_CANCEL_AUTO_REPEAT = 0x2712,
+ SMSG_CANCEL_COMBAT = 0x2731,
+ SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46,
+ SMSG_CANCEL_SCENE = 0x2654,
+ SMSG_CANCEL_SPELL_VISUAL = 0x2C44,
+ SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C48,
+ SMSG_CAN_DUEL_RESULT = 0x2676,
+ SMSG_CAST_FAILED = 0x2C56,
SMSG_CATEGORY_COOLDOWN = 0x2C16,
SMSG_CHALLENGE_MODE_ALL_MAP_STATS = 0x2622,
SMSG_CHALLENGE_MODE_COMPLETE = 0x2620,
@@ -927,24 +929,25 @@ enum OpcodeServer : uint16
SMSG_CHALLENGE_MODE_REWARDS = 0x2621,
SMSG_CHALLENGE_MODE_START = 0x261D,
SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x261E,
- SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x2736,
+ SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x2735,
SMSG_CHANNEL_LIST = 0x2BC3,
SMSG_CHANNEL_NOTIFY = 0x2BC0,
SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC1,
SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC2,
- SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x2805,
+ SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x2804,
+ SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING = 0x2863,
SMSG_CHARACTER_ITEM_FIXUP = 0x2854,
- SMSG_CHARACTER_LOGIN_FAILED = 0x2745,
- SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27CD,
- SMSG_CHARACTER_RENAME_RESULT = 0x27A6,
- SMSG_CHARACTER_UPGRADE_COMPLETE = 0x2804,
- SMSG_CHARACTER_UPGRADE_QUEUED = 0x2803,
+ SMSG_CHARACTER_LOGIN_FAILED = 0x2744,
+ SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27CC,
+ SMSG_CHARACTER_RENAME_RESULT = 0x27A5,
+ SMSG_CHARACTER_UPGRADE_COMPLETE = 0x2803,
+ SMSG_CHARACTER_UPGRADE_QUEUED = 0x2802,
SMSG_CHARACTER_UPGRADE_SPELL_TIER_SET = 0x25F4,
- SMSG_CHARACTER_UPGRADE_STARTED = 0x2802,
- SMSG_CHARACTER_UPGRADE_UNREVOKE_RESULT = 0x2806,
- SMSG_CHAR_CUSTOMIZE = 0x271A,
- SMSG_CHAR_CUSTOMIZE_FAILED = 0x2719,
- SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27EF,
+ SMSG_CHARACTER_UPGRADE_STARTED = 0x2801,
+ SMSG_CHARACTER_UPGRADE_UNREVOKE_RESULT = 0x2805,
+ SMSG_CHAR_CUSTOMIZE = 0x2719,
+ SMSG_CHAR_CUSTOMIZE_FAILED = 0x2718,
+ SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27EE,
SMSG_CHAT = 0x2BAD,
SMSG_CHAT_AUTO_RESPONDED = 0x2BB8,
SMSG_CHAT_DOWN = 0x2BBD,
@@ -960,97 +963,97 @@ enum OpcodeServer : uint16
SMSG_CHECK_WARGAME_ENTRY = 0x259E,
SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C27,
SMSG_CLEAR_BOSS_EMOTES = 0x25CD,
- SMSG_CLEAR_COOLDOWN = 0x26E5,
+ SMSG_CLEAR_COOLDOWN = 0x26E4,
SMSG_CLEAR_COOLDOWNS = 0x2C26,
- SMSG_CLEAR_LOSS_OF_CONTROL = 0x2699,
+ SMSG_CLEAR_LOSS_OF_CONTROL = 0x2698,
SMSG_CLEAR_SPELL_CHARGES = 0x2C28,
- SMSG_CLEAR_TARGET = 0x26DC,
+ SMSG_CLEAR_TARGET = 0x26DB,
SMSG_COIN_REMOVED = 0x262B,
- SMSG_COMBAT_EVENT_FAILED = 0x2670,
- SMSG_COMMENTATOR_MAP_INFO = 0x2747,
- SMSG_COMMENTATOR_PLAYER_INFO = 0x2748,
- SMSG_COMMENTATOR_STATE_CHANGED = 0x2746,
- SMSG_COMPLAINT_RESULT = 0x26D4,
- SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27DF,
+ SMSG_COMBAT_EVENT_FAILED = 0x266F,
+ SMSG_COMMENTATOR_MAP_INFO = 0x2746,
+ SMSG_COMMENTATOR_PLAYER_INFO = 0x2747,
+ SMSG_COMMENTATOR_STATE_CHANGED = 0x2745,
+ SMSG_COMPLAINT_RESULT = 0x26D3,
+ SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27DE,
SMSG_CONNECT_TO = 0x304D,
- SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27C8,
- SMSG_CONSOLE_WRITE = 0x2652,
+ SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27C7,
+ SMSG_CONSOLE_WRITE = 0x2651,
SMSG_CONSUMPTION_CONVERSION_INFO_RESPONSE = 0x2849,
SMSG_CONSUMPTION_CONVERSION_RESULT = 0x284A,
- SMSG_CONTACT_LIST = 0x27CB,
- SMSG_CONTROL_UPDATE = 0x2665,
- SMSG_COOLDOWN_CHEAT = 0x277C,
- SMSG_COOLDOWN_EVENT = 0x26E4,
- SMSG_CORPSE_LOCATION = 0x266C,
- SMSG_CORPSE_RECLAIM_DELAY = 0x278F,
- SMSG_CORPSE_TRANSPORT_QUERY = 0x2752,
- SMSG_CREATE_CHAR = 0x273F,
- SMSG_CREATE_SHIPMENT_RESPONSE = 0x27DE,
- SMSG_CRITERIA_DELETED = 0x271E,
- SMSG_CRITERIA_UPDATE = 0x2718,
- SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26ED,
+ SMSG_CONTACT_LIST = 0x27CA,
+ SMSG_CONTROL_UPDATE = 0x2664,
+ SMSG_COOLDOWN_CHEAT = 0x277B,
+ SMSG_COOLDOWN_EVENT = 0x26E3,
+ SMSG_CORPSE_LOCATION = 0x266B,
+ SMSG_CORPSE_RECLAIM_DELAY = 0x278E,
+ SMSG_CORPSE_TRANSPORT_QUERY = 0x2751,
+ SMSG_CREATE_CHAR = 0x273E,
+ SMSG_CREATE_SHIPMENT_RESPONSE = 0x27DD,
+ SMSG_CRITERIA_DELETED = 0x271D,
+ SMSG_CRITERIA_UPDATE = 0x2717,
+ SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26EC,
SMSG_CUSTOM_LOAD_SCREEN = 0x25E3,
SMSG_DAILY_QUESTS_RESET = 0x2A80,
- SMSG_DAMAGE_CALC_LOG = 0x280D,
+ SMSG_DAMAGE_CALC_LOG = 0x280C,
SMSG_DB_REPLY = 0x25A0,
- SMSG_DEATH_RELEASE_LOC = 0x2706,
+ SMSG_DEATH_RELEASE_LOC = 0x2705,
SMSG_DEFENSE_MESSAGE = 0x2BB6,
- SMSG_DELETE_CHAR = 0x2740,
- SMSG_DESTROY_ARENA_UNIT = 0x2785,
- SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x2733,
+ SMSG_DELETE_CHAR = 0x273F,
+ SMSG_DESTROY_ARENA_UNIT = 0x2784,
+ SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x2732,
SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258A,
SMSG_DISENCHANT_CREDIT = 0x25BC,
- SMSG_DISMOUNT = 0x26DB,
+ SMSG_DISMOUNT = 0x26DA,
SMSG_DISMOUNT_RESULT = 0x257B,
SMSG_DISPEL_FAILED = 0x2C30,
SMSG_DISPLAY_GAME_ERROR = 0x25B5,
- SMSG_DISPLAY_PLAYER_CHOICE = 0x26A2,
- SMSG_DISPLAY_PROMOTION = 0x2669,
+ SMSG_DISPLAY_PLAYER_CHOICE = 0x26A1,
+ SMSG_DISPLAY_PROMOTION = 0x2668,
SMSG_DISPLAY_QUEST_POPUP = 0x2A9D,
- SMSG_DISPLAY_TOAST = 0x2639,
+ SMSG_DISPLAY_TOAST = 0x2638,
SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25F6,
SMSG_DROP_NEW_CONNECTION = 0x304C,
- SMSG_DUEL_COMPLETE = 0x2675,
- SMSG_DUEL_COUNTDOWN = 0x2674,
- SMSG_DUEL_IN_BOUNDS = 0x2673,
- SMSG_DUEL_OUT_OF_BOUNDS = 0x2672,
- SMSG_DUEL_REQUESTED = 0x2671,
- SMSG_DUEL_WINNER = 0x2676,
- SMSG_DURABILITY_DAMAGE_DEATH = 0x278B,
- SMSG_EMOTE = 0x280E,
- SMSG_ENABLE_BARBER_SHOP = 0x26E8,
+ SMSG_DUEL_COMPLETE = 0x2674,
+ SMSG_DUEL_COUNTDOWN = 0x2673,
+ SMSG_DUEL_IN_BOUNDS = 0x2672,
+ SMSG_DUEL_OUT_OF_BOUNDS = 0x2671,
+ SMSG_DUEL_REQUESTED = 0x2670,
+ SMSG_DUEL_WINNER = 0x2675,
+ SMSG_DURABILITY_DAMAGE_DEATH = 0x278A,
+ SMSG_EMOTE = 0x280D,
+ SMSG_ENABLE_BARBER_SHOP = 0x26E7,
SMSG_ENABLE_ENCRYPTION = 0x3049,
- SMSG_ENCHANTMENT_LOG = 0x2753,
- SMSG_ENCOUNTER_END = 0x27C0,
- SMSG_ENCOUNTER_START = 0x27BF,
+ SMSG_ENCHANTMENT_LOG = 0x2752,
+ SMSG_ENCOUNTER_END = 0x27BF,
+ SMSG_ENCOUNTER_START = 0x27BE,
SMSG_ENUM_CHARACTERS_RESULT = 0x2582,
SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C21,
- SMSG_EQUIPMENT_SET_ID = 0x26DD,
+ SMSG_EQUIPMENT_SET_ID = 0x26DC,
SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1,
- SMSG_EXPLORATION_EXPERIENCE = 0x27A3,
- SMSG_FACTION_BONUS_INFO = 0x2767,
+ SMSG_EXPLORATION_EXPERIENCE = 0x27A2,
+ SMSG_FACTION_BONUS_INFO = 0x2766,
SMSG_FAILED_PLAYER_CONDITION = 0x25E2,
SMSG_FEATURE_SYSTEM_STATUS = 0x25D1,
SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25D2,
- SMSG_FEIGN_DEATH_RESISTED = 0x2788,
- SMSG_FISH_ESCAPED = 0x26FA,
- SMSG_FISH_NOT_HOOKED = 0x26F9,
+ SMSG_FEIGN_DEATH_RESISTED = 0x2787,
+ SMSG_FISH_ESCAPED = 0x26F9,
+ SMSG_FISH_NOT_HOOKED = 0x26F8,
SMSG_FLIGHT_SPLINE_SYNC = 0x2DF7,
- SMSG_FORCED_DEATH_UPDATE = 0x2707,
- SMSG_FORCE_ANIM = 0x2795,
- SMSG_FORCE_OBJECT_RELINK = 0x2668,
- SMSG_FRIEND_STATUS = 0x27CC,
+ SMSG_FORCED_DEATH_UPDATE = 0x2706,
+ SMSG_FORCE_ANIM = 0x2794,
+ SMSG_FORCE_OBJECT_RELINK = 0x2667,
+ SMSG_FRIEND_STATUS = 0x27CB,
SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25D6,
SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25D7,
SMSG_GAME_OBJECT_DESPAWN = 0x25D8,
- SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4A,
- SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C49,
- SMSG_GAME_OBJECT_RESET_STATE = 0x275E,
+ SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B,
+ SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A,
+ SMSG_GAME_OBJECT_RESET_STATE = 0x275D,
SMSG_GAME_OBJECT_SET_STATE = 0x2841,
- SMSG_GAME_OBJECT_UI_ACTION = 0x275B,
- SMSG_GAME_SPEED_SET = 0x26AB,
- SMSG_GAME_TIME_SET = 0x274C,
- SMSG_GAME_TIME_UPDATE = 0x274B,
+ SMSG_GAME_OBJECT_UI_ACTION = 0x275A,
+ SMSG_GAME_SPEED_SET = 0x26AA,
+ SMSG_GAME_TIME_SET = 0x274B,
+ SMSG_GAME_TIME_UPDATE = 0x274A,
SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2902,
SMSG_GARRISON_ADD_MISSION_RESULT = 0x2906,
SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x2918,
@@ -1068,7 +1071,7 @@ enum OpcodeServer : uint16
SMSG_GARRISON_FOLLOWER_CHANGED_STATUS = 0x2915,
SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x2912,
SMSG_GARRISON_IS_UPGRADEABLE_RESULT = 0x2929,
- SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO = 0x27E1,
+ SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO = 0x27E0,
SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x28F7,
SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x28F5,
SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x2905,
@@ -1098,26 +1101,26 @@ enum OpcodeServer : uint16
SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x28F8,
SMSG_GARRISON_UPGRADE_RESULT = 0x28FD,
SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2583,
- SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A4,
+ SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A3,
SMSG_GET_DISPLAYED_TROPHY_LIST_RESPONSE = 0x2928,
SMSG_GET_GARRISON_INFO_RESULT = 0x28F0,
- SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x27E0,
- SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x27DC,
- SMSG_GET_TROPHY_LIST_RESPONSE = 0x2809,
- SMSG_GM_PLAYER_INFO = 0x277B,
+ SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x27DF,
+ SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x27DB,
+ SMSG_GET_TROPHY_LIST_RESPONSE = 0x2808,
+ SMSG_GM_PLAYER_INFO = 0x277A,
SMSG_GM_REQUEST_PLAYER_INFO = 0x25ED,
- SMSG_GM_TICKET_CASE_STATUS = 0x26CD,
- SMSG_GM_TICKET_SYSTEM_STATUS = 0x26CC,
- SMSG_GOD_MODE = 0x2739,
+ SMSG_GM_TICKET_CASE_STATUS = 0x26CC,
+ SMSG_GM_TICKET_SYSTEM_STATUS = 0x26CB,
+ SMSG_GOD_MODE = 0x2738,
SMSG_GOSSIP_COMPLETE = 0x2A96,
SMSG_GOSSIP_MESSAGE = 0x2A97,
- SMSG_GOSSIP_POI = 0x27D9,
+ SMSG_GOSSIP_POI = 0x27D8,
SMSG_GROUP_ACTION_THROTTLED = 0x259C,
- SMSG_GROUP_DECLINE = 0x27D4,
- SMSG_GROUP_DESTROYED = 0x27D6,
+ SMSG_GROUP_DECLINE = 0x27D3,
+ SMSG_GROUP_DESTROYED = 0x27D5,
SMSG_GROUP_INVITE_CONFIRMATION = 0x2855,
- SMSG_GROUP_NEW_LEADER = 0x264A,
- SMSG_GROUP_UNINVITE = 0x27D5,
+ SMSG_GROUP_NEW_LEADER = 0x2649,
+ SMSG_GROUP_UNINVITE = 0x27D4,
SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5,
SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4,
SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7,
@@ -1170,55 +1173,55 @@ enum OpcodeServer : uint16
SMSG_GUILD_ROSTER = 0x29BB,
SMSG_GUILD_ROSTER_UPDATE = 0x29BC,
SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9,
- SMSG_HEALTH_UPDATE = 0x26FD,
- SMSG_HIGHEST_THREAT_UPDATE = 0x270D,
+ SMSG_HEALTH_UPDATE = 0x26FC,
+ SMSG_HIGHEST_THREAT_UPDATE = 0x270C,
SMSG_HOTFIX_MESSAGE = 0x25A2,
SMSG_HOTFIX_RESPONSE = 0x25A3,
- SMSG_INITIALIZE_FACTIONS = 0x2766,
+ SMSG_INITIALIZE_FACTIONS = 0x2765,
SMSG_INITIAL_SETUP = 0x257F,
- SMSG_INIT_WORLD_STATES = 0x278C,
+ SMSG_INIT_WORLD_STATES = 0x278B,
SMSG_INSPECT_HONOR_STATS = 0x25B2,
- SMSG_INSPECT_PVP = 0x2762,
- SMSG_INSPECT_RESULT = 0x264E,
- SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27F5,
- SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27F4,
- SMSG_INSTANCE_ENCOUNTER_END = 0x27FD,
- SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27F3,
- SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27FF,
- SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27FE,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27F8,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27F7,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27FC,
- SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x2800,
- SMSG_INSTANCE_ENCOUNTER_SET_ALLOWING_RELEASE = 0x27FB,
- SMSG_INSTANCE_ENCOUNTER_SET_SUPPRESSING_RELEASE = 0x27FA,
- SMSG_INSTANCE_ENCOUNTER_START = 0x27F9,
- SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27F6,
- SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x2737,
- SMSG_INSTANCE_INFO = 0x2651,
- SMSG_INSTANCE_RESET = 0x26B0,
- SMSG_INSTANCE_RESET_FAILED = 0x26B1,
- SMSG_INSTANCE_SAVE_CREATED = 0x27BE,
- SMSG_INVALIDATE_PAGE_TEXT = 0x2702,
- SMSG_INVALIDATE_PLAYER = 0x26D3,
- SMSG_INVALID_PROMOTION_CODE = 0x2796,
- SMSG_INVENTORY_CHANGE_FAILURE = 0x2764,
+ SMSG_INSPECT_PVP = 0x2761,
+ SMSG_INSPECT_RESULT = 0x264D,
+ SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27F4,
+ SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27F3,
+ SMSG_INSTANCE_ENCOUNTER_END = 0x27FC,
+ SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27F2,
+ SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27FE,
+ SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27FD,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27F7,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27F6,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27FB,
+ SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27FF,
+ SMSG_INSTANCE_ENCOUNTER_SET_ALLOWING_RELEASE = 0x27FA,
+ SMSG_INSTANCE_ENCOUNTER_SET_SUPPRESSING_RELEASE = 0x27F9,
+ SMSG_INSTANCE_ENCOUNTER_START = 0x27F8,
+ SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27F5,
+ SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x2736,
+ SMSG_INSTANCE_INFO = 0x2650,
+ SMSG_INSTANCE_RESET = 0x26AF,
+ SMSG_INSTANCE_RESET_FAILED = 0x26B0,
+ SMSG_INSTANCE_SAVE_CREATED = 0x27BD,
+ SMSG_INVALIDATE_PAGE_TEXT = 0x2701,
+ SMSG_INVALIDATE_PLAYER = 0x26D2,
+ SMSG_INVALID_PROMOTION_CODE = 0x2795,
+ SMSG_INVENTORY_CHANGE_FAILURE = 0x2763,
SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A83,
- SMSG_ITEM_CHANGED = 0x2721,
- SMSG_ITEM_COOLDOWN = 0x280C,
- SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2798,
+ SMSG_ITEM_CHANGED = 0x2720,
+ SMSG_ITEM_COOLDOWN = 0x280B,
+ SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2797,
SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25B1,
SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x25AF,
- SMSG_ITEM_PUSH_RESULT = 0x2638,
- SMSG_ITEM_TIME_UPDATE = 0x2797,
- SMSG_KICK_REASON = 0x2830,
- SMSG_LEARNED_SPELLS = 0x2C4C,
+ SMSG_ITEM_PUSH_RESULT = 0x2637,
+ SMSG_ITEM_TIME_UPDATE = 0x2796,
+ SMSG_KICK_REASON = 0x282F,
+ SMSG_LEARNED_SPELLS = 0x2C4D,
SMSG_LEARN_PVP_TALENTS_FAILED = 0x25EA,
SMSG_LEARN_TALENTS_FAILED = 0x25E9,
SMSG_LEVEL_UPDATE = 0x2587,
- SMSG_LEVEL_UP_INFO = 0x2720,
- SMSG_LFG_BOOT_PLAYER = 0x2A36,
- SMSG_LFG_DISABLED = 0x2A34,
+ SMSG_LEVEL_UP_INFO = 0x271F,
+ SMSG_LFG_BOOT_PLAYER = 0x2A35,
+ SMSG_LFG_DISABLED = 0x2A33,
SMSG_LFG_INSTANCE_SHUTDOWN_COUNTDOWN = 0x2A25,
SMSG_LFG_JOIN_RESULT = 0x2A1C,
SMSG_LFG_LIST_JOIN_RESULT = 0x2A1D,
@@ -1226,17 +1229,17 @@ enum OpcodeServer : uint16
SMSG_LFG_LIST_SEARCH_STATUS = 0x2A1F,
SMSG_LFG_LIST_UPDATE_BLACKLIST = 0x2A2A,
SMSG_LFG_LIST_UPDATE_STATUS = 0x2A26,
- SMSG_LFG_OFFER_CONTINUE = 0x2A35,
- SMSG_LFG_PARTY_INFO = 0x2A37,
- SMSG_LFG_PLAYER_INFO = 0x2A38,
- SMSG_LFG_PLAYER_REWARD = 0x2A39,
+ SMSG_LFG_OFFER_CONTINUE = 0x2A34,
+ SMSG_LFG_PARTY_INFO = 0x2A36,
+ SMSG_LFG_PLAYER_INFO = 0x2A37,
+ SMSG_LFG_PLAYER_REWARD = 0x2A38,
SMSG_LFG_PROPOSAL_UPDATE = 0x2A2D,
SMSG_LFG_QUEUE_STATUS = 0x2A20,
- SMSG_LFG_READY_CHECK_RESULT = 0x2A3B,
+ SMSG_LFG_READY_CHECK_RESULT = 0x2A3A,
SMSG_LFG_READY_CHECK_UPDATE = 0x2A22,
SMSG_LFG_ROLE_CHECK_UPDATE = 0x2A21,
SMSG_LFG_SLOT_INVALID = 0x2A30,
- SMSG_LFG_TELEPORT_DENIED = 0x2A33,
+ SMSG_LFG_TELEPORT_DENIED = 0x2A32,
SMSG_LFG_UPDATE_STATUS = 0x2A24,
SMSG_LF_GUILD_APPLICANT_LIST_CHANGED = 0x29D5,
SMSG_LF_GUILD_APPLICATIONS = 0x29D1,
@@ -1245,45 +1248,44 @@ enum OpcodeServer : uint16
SMSG_LF_GUILD_COMMAND_RESULT = 0x29D0,
SMSG_LF_GUILD_POST = 0x29CD,
SMSG_LF_GUILD_RECRUITS = 0x29CF,
- SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27B2,
- SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27B0,
- SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A5,
+ SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27B1,
+ SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27AF,
+ SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A4,
SMSG_LOAD_CUF_PROFILES = 0x25CE,
- SMSG_LOAD_EQUIPMENT_SET = 0x274E,
- SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x280A,
- SMSG_LOGIN_SET_TIME_SPEED = 0x274D,
+ SMSG_LOAD_EQUIPMENT_SET = 0x274D,
+ SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x2809,
+ SMSG_LOGIN_SET_TIME_SPEED = 0x274C,
SMSG_LOGIN_VERIFY_WORLD = 0x25AC,
- SMSG_LOGOUT_CANCEL_ACK = 0x26AF,
- SMSG_LOGOUT_COMPLETE = 0x26AE,
- SMSG_LOGOUT_RESPONSE = 0x26AD,
- SMSG_LOG_XP_GAIN = 0x271C,
- SMSG_LOOT_ALL_PASSED = 0x2636,
- SMSG_LOOT_ITEM_LIST = 0x2634,
- SMSG_LOOT_LIST = 0x2784,
+ SMSG_LOGOUT_CANCEL_ACK = 0x26AE,
+ SMSG_LOGOUT_COMPLETE = 0x26AD,
+ SMSG_LOGOUT_RESPONSE = 0x26AC,
+ SMSG_LOG_XP_GAIN = 0x271B,
+ SMSG_LOOT_ALL_PASSED = 0x2635,
+ SMSG_LOOT_LIST = 0x2783,
SMSG_LOOT_MONEY_NOTIFY = 0x2630,
SMSG_LOOT_RELEASE = 0x262F,
SMSG_LOOT_RELEASE_ALL = 0x262E,
SMSG_LOOT_REMOVED = 0x2629,
SMSG_LOOT_RESPONSE = 0x2628,
SMSG_LOOT_ROLL = 0x2632,
- SMSG_LOOT_ROLLS_COMPLETE = 0x2635,
- SMSG_LOOT_ROLL_WON = 0x2637,
- SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2696,
- SMSG_MAIL_COMMAND_RESULT = 0x2659,
- SMSG_MAIL_LIST_RESULT = 0x2799,
- SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x279A,
- SMSG_MAP_OBJECTIVES_INIT = 0x27A2,
+ SMSG_LOOT_ROLLS_COMPLETE = 0x2634,
+ SMSG_LOOT_ROLL_WON = 0x2636,
+ SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2695,
+ SMSG_MAIL_COMMAND_RESULT = 0x2658,
+ SMSG_MAIL_LIST_RESULT = 0x2798,
+ SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2799,
+ SMSG_MAP_OBJECTIVES_INIT = 0x27A1,
SMSG_MAP_OBJ_EVENTS = 0x25D9,
SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2633,
SMSG_MESSAGE_BOX = 0x2575,
- SMSG_MINIMAP_PING = 0x26F8,
+ SMSG_MINIMAP_PING = 0x26F7,
SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14,
SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13,
SMSG_MISSILE_CANCEL = 0x25DA,
- SMSG_MODIFY_CHARGE_RECOVERY_SPEED = 0x27A9,
- SMSG_MODIFY_COOLDOWN = 0x27A7,
- SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED = 0x27A8,
- SMSG_MODIFY_PARTY_RANGE = 0x2787,
+ SMSG_MODIFY_CHARGE_RECOVERY_SPEED = 0x27A8,
+ SMSG_MODIFY_COOLDOWN = 0x27A6,
+ SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED = 0x27A7,
+ SMSG_MODIFY_PARTY_RANGE = 0x2786,
SMSG_MOTD = 0x2BAF,
SMSG_MOUNT_RESULT = 0x257A,
SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2DE1,
@@ -1369,40 +1371,41 @@ enum OpcodeServer : uint16
SMSG_MOVE_UPDATE_TURN_RATE = 0x2DAB,
SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DA6,
SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25F1,
- SMSG_NEW_TAXI_PATH = 0x26A8,
+ SMSG_NEW_TAXI_PATH = 0x26A7,
SMSG_NEW_WORLD = 0x25AB,
- SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C42,
- SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26D2,
+ SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43,
+ SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26D1,
SMSG_NOTIFY_MONEY = 0x25AE,
- SMSG_NOTIFY_RECEIVED_MAIL = 0x265A,
- SMSG_OFFER_PETITION_ERROR = 0x26E1,
- SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x271D,
+ SMSG_NOTIFY_RECEIVED_MAIL = 0x2659,
+ SMSG_OFFER_PETITION_ERROR = 0x26E0,
+ SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x271C,
SMSG_ON_MONSTER_MOVE = 0x2DA2,
- SMSG_OPEN_CONTAINER = 0x2765,
- SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A32,
- SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27DB,
- SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27DD,
- SMSG_OPEN_TRANSMOGRIFIER = 0x2837,
- SMSG_OVERRIDE_LIGHT = 0x26E7,
- SMSG_PAGE_TEXT = 0x275A,
- SMSG_PARTY_COMMAND_RESULT = 0x27D8,
+ SMSG_OPEN_ALLIED_RACE_DETAILS_GIVER = 0x2837,
+ SMSG_OPEN_CONTAINER = 0x2764,
+ SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31,
+ SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27DA,
+ SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27DC,
+ SMSG_OPEN_TRANSMOGRIFIER = 0x2836,
+ SMSG_OVERRIDE_LIGHT = 0x26E6,
+ SMSG_PAGE_TEXT = 0x2759,
+ SMSG_PARTY_COMMAND_RESULT = 0x27D7,
SMSG_PARTY_INVITE = 0x25CF,
- SMSG_PARTY_KILL_LOG = 0x279E,
- SMSG_PARTY_MEMBER_STATE = 0x279C,
- SMSG_PARTY_MEMBER_STATE_UPDATE = 0x279B,
+ SMSG_PARTY_KILL_LOG = 0x279D,
+ SMSG_PARTY_MEMBER_STATE = 0x279B,
+ SMSG_PARTY_MEMBER_STATE_UPDATE = 0x279A,
SMSG_PARTY_UPDATE = 0x260B,
- SMSG_PAUSE_MIRROR_TIMER = 0x2750,
- SMSG_PENDING_RAID_LOCK = 0x2731,
+ SMSG_PAUSE_MIRROR_TIMER = 0x274F,
+ SMSG_PENDING_RAID_LOCK = 0x2730,
SMSG_PETITION_ALREADY_SIGNED = 0x25B8,
SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29F7,
- SMSG_PETITION_SHOW_LIST = 0x26EA,
- SMSG_PETITION_SHOW_SIGNATURES = 0x26EB,
- SMSG_PETITION_SIGN_RESULTS = 0x2790,
- SMSG_PET_ACTION_FEEDBACK = 0x278E,
- SMSG_PET_ACTION_SOUND = 0x26CA,
+ SMSG_PETITION_SHOW_LIST = 0x26E9,
+ SMSG_PETITION_SHOW_SIGNATURES = 0x26EA,
+ SMSG_PETITION_SIGN_RESULTS = 0x278F,
+ SMSG_PET_ACTION_FEEDBACK = 0x278D,
+ SMSG_PET_ACTION_SOUND = 0x26C9,
SMSG_PET_ADDED = 0x25A8,
SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2618,
- SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x269D,
+ SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x269C,
SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x2611,
SMSG_PET_BATTLE_FINAL_ROUND = 0x2616,
SMSG_PET_BATTLE_FINISHED = 0x2617,
@@ -1410,68 +1413,68 @@ enum OpcodeServer : uint16
SMSG_PET_BATTLE_INITIAL_UPDATE = 0x2612,
SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2619,
SMSG_PET_BATTLE_PVP_CHALLENGE = 0x2610,
- SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2657,
- SMSG_PET_BATTLE_QUEUE_STATUS = 0x2658,
+ SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2656,
+ SMSG_PET_BATTLE_QUEUE_STATUS = 0x2657,
SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2615,
SMSG_PET_BATTLE_REQUEST_FAILED = 0x260F,
SMSG_PET_BATTLE_ROUND_RESULT = 0x2614,
SMSG_PET_BATTLE_SLOT_UPDATES = 0x2602,
- SMSG_PET_CAST_FAILED = 0x2C56,
+ SMSG_PET_CAST_FAILED = 0x2C57,
SMSG_PET_CLEAR_SPELLS = 0x2C24,
- SMSG_PET_DISMISS_SOUND = 0x26CB,
- SMSG_PET_GOD_MODE = 0x26A5,
- SMSG_PET_GUIDS = 0x2742,
- SMSG_PET_LEARNED_SPELLS = 0x2C4E,
+ SMSG_PET_DISMISS_SOUND = 0x26CA,
+ SMSG_PET_GOD_MODE = 0x26A4,
+ SMSG_PET_GUIDS = 0x2741,
+ SMSG_PET_LEARNED_SPELLS = 0x2C4F,
SMSG_PET_MODE = 0x2589,
- SMSG_PET_NAME_INVALID = 0x26EF,
+ SMSG_PET_NAME_INVALID = 0x26EE,
SMSG_PET_SLOT_UPDATED = 0x2588,
SMSG_PET_SPELLS_MESSAGE = 0x2C25,
SMSG_PET_STABLE_LIST = 0x25A9,
SMSG_PET_STABLE_RESULT = 0x25AA,
- SMSG_PET_TAME_FAILURE = 0x26DE,
- SMSG_PET_UNLEARNED_SPELLS = 0x2C4F,
+ SMSG_PET_TAME_FAILURE = 0x26DD,
+ SMSG_PET_UNLEARNED_SPELLS = 0x2C50,
SMSG_PHASE_SHIFT_CHANGE = 0x2577,
- SMSG_PLAYED_TIME = 0x2709,
+ SMSG_PLAYED_TIME = 0x2708,
SMSG_PLAYER_BOUND = 0x257D,
SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F6,
- SMSG_PLAYER_SKINNED = 0x2789,
- SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x279D,
- SMSG_PLAY_MUSIC = 0x27AC,
- SMSG_PLAY_OBJECT_SOUND = 0x27AD,
- SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2773,
- SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C46,
- SMSG_PLAY_SCENE = 0x2654,
- SMSG_PLAY_SOUND = 0x27AB,
- SMSG_PLAY_SPEAKERBOT_SOUND = 0x27AE,
- SMSG_PLAY_SPELL_VISUAL = 0x2C44,
- SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C48,
- SMSG_PLAY_TIME_WARNING = 0x273B,
+ SMSG_PLAYER_SKINNED = 0x2788,
+ SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x279C,
+ SMSG_PLAY_MUSIC = 0x27AB,
+ SMSG_PLAY_OBJECT_SOUND = 0x27AC,
+ SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2772,
+ SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C47,
+ SMSG_PLAY_SCENE = 0x2653,
+ SMSG_PLAY_SOUND = 0x27AA,
+ SMSG_PLAY_SPEAKERBOT_SOUND = 0x27AD,
+ SMSG_PLAY_SPELL_VISUAL = 0x2C45,
+ SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C49,
+ SMSG_PLAY_TIME_WARNING = 0x273A,
SMSG_PONG = 0x304E,
- SMSG_POWER_UPDATE = 0x26FE,
- SMSG_PRESTIGE_AND_HONOR_INVOLUNTARILY_CHANGED = 0x2759,
- SMSG_PRE_RESSURECT = 0x27AA,
+ SMSG_POWER_UPDATE = 0x26FD,
+ SMSG_PRESTIGE_AND_HONOR_INVOLUNTARILY_CHANGED = 0x2758,
+ SMSG_PRE_RESSURECT = 0x27A9,
SMSG_PRINT_NOTIFICATION = 0x25E1,
- SMSG_PROC_RESIST = 0x279F,
- SMSG_PROPOSE_LEVEL_GRANT = 0x2711,
- SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C50,
- SMSG_PVP_CREDIT = 0x2717,
+ SMSG_PROC_RESIST = 0x279E,
+ SMSG_PROPOSE_LEVEL_GRANT = 0x2710,
+ SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51,
+ SMSG_PVP_CREDIT = 0x2716,
SMSG_PVP_LOG_DATA = 0x25B3,
SMSG_PVP_OPTIONS_ENABLED = 0x25B6,
SMSG_PVP_SEASON = 0x25D3,
- SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x2704,
- SMSG_QUERY_CREATURE_RESPONSE = 0x26FB,
- SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x26FC,
+ SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x2703,
+ SMSG_QUERY_CREATURE_RESPONSE = 0x26FA,
+ SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x26FB,
SMSG_QUERY_GARRISON_CREATURE_NAME_RESPONSE = 0x292B,
SMSG_QUERY_GUILD_INFO_RESPONSE = 0x29E5,
- SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x280B,
- SMSG_QUERY_NPC_TEXT_RESPONSE = 0x26FF,
- SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2701,
- SMSG_QUERY_PETITION_RESPONSE = 0x2705,
- SMSG_QUERY_PET_NAME_RESPONSE = 0x2703,
- SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x2700,
+ SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x280A,
+ SMSG_QUERY_NPC_TEXT_RESPONSE = 0x26FE,
+ SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2700,
+ SMSG_QUERY_PETITION_RESPONSE = 0x2704,
+ SMSG_QUERY_PET_NAME_RESPONSE = 0x2702,
+ SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x26FF,
SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A95,
SMSG_QUERY_QUEST_REWARD_RESPONSE = 0x2846,
- SMSG_QUERY_TIME_RESPONSE = 0x271B,
+ SMSG_QUERY_TIME_RESPONSE = 0x271A,
SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81,
SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8E,
SMSG_QUEST_FORCE_REMOVED = 0x2A9B,
@@ -1497,56 +1500,57 @@ enum OpcodeServer : uint16
SMSG_QUEST_UPDATE_COMPLETE_BY_SPELL = 0x2A87,
SMSG_QUEST_UPDATE_FAILED = 0x2A89,
SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8A,
- SMSG_RAF_EMAIL_ENABLED_RESPONSE = 0x27C9,
- SMSG_RAID_DIFFICULTY_SET = 0x27F0,
- SMSG_RAID_GROUP_ONLY = 0x27F2,
+ SMSG_RAF_EMAIL_ENABLED_RESPONSE = 0x27C8,
+ SMSG_RAID_DIFFICULTY_SET = 0x27EF,
+ SMSG_RAID_GROUP_ONLY = 0x27F1,
SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4,
SMSG_RAID_MARKERS_CHANGED = 0x25B9,
- SMSG_RANDOM_ROLL = 0x264D,
+ SMSG_RANDOM_ROLL = 0x264C,
SMSG_RATED_BATTLEFIELD_INFO = 0x25A6,
SMSG_READY_CHECK_COMPLETED = 0x260E,
SMSG_READY_CHECK_RESPONSE = 0x260D,
SMSG_READY_CHECK_STARTED = 0x260C,
- SMSG_READ_ITEM_RESULT_FAILED = 0x27EC,
- SMSG_READ_ITEM_RESULT_OK = 0x27E2,
- SMSG_REALM_QUERY_RESPONSE = 0x26E6,
- SMSG_RECRUIT_A_FRIEND_RESPONSE = 0x27CA,
- SMSG_REFER_A_FRIEND_EXPIRED = 0x2763,
- SMSG_REFER_A_FRIEND_FAILURE = 0x26EC,
- SMSG_REFRESH_COMPONENT = 0x2679,
+ SMSG_READ_ITEM_RESULT_FAILED = 0x27EB,
+ SMSG_READ_ITEM_RESULT_OK = 0x27E1,
+ SMSG_REALM_LOOKUP_INFORMATION = 0x2810,
+ SMSG_REALM_QUERY_RESPONSE = 0x26E5,
+ SMSG_RECRUIT_A_FRIEND_RESPONSE = 0x27C9,
+ SMSG_REFER_A_FRIEND_EXPIRED = 0x2762,
+ SMSG_REFER_A_FRIEND_FAILURE = 0x26EB,
+ SMSG_REFRESH_COMPONENT = 0x2678,
SMSG_REFRESH_SPELL_HISTORY = 0x2C2C,
SMSG_REMOVE_ITEM_PASSIVE = 0x25C0,
- SMSG_REMOVE_LOSS_OF_CONTROL = 0x2698,
- SMSG_REPLACE_TROPHY_RESPONSE = 0x2808,
- SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26DA,
- SMSG_REQUEST_ADDON_LIST = 0x2660,
+ SMSG_REMOVE_LOSS_OF_CONTROL = 0x2697,
+ SMSG_REPLACE_TROPHY_RESPONSE = 0x2807,
+ SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26D9,
+ SMSG_REQUEST_ADDON_LIST = 0x265F,
SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x259D,
SMSG_REQUEST_PVP_BRAWL_INFO_RESPONSE = 0x25D5,
SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x25D4,
SMSG_RESEARCH_COMPLETE = 0x2585,
- SMSG_RESET_AREA_TRIGGER = 0x2641,
+ SMSG_RESET_AREA_TRIGGER = 0x2640,
SMSG_RESET_COMPRESSION_CONTEXT = 0x304F,
- SMSG_RESET_FAILED_NOTIFY = 0x26E2,
- SMSG_RESET_RANGED_COMBAT_TIMER = 0x2714,
+ SMSG_RESET_FAILED_NOTIFY = 0x26E1,
+ SMSG_RESET_RANGED_COMBAT_TIMER = 0x2713,
SMSG_RESET_WEEKLY_CURRENCY = 0x2574,
SMSG_RESPEC_WIPE_CONFIRM = 0x2626,
SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2571,
- SMSG_RESUME_CAST_BAR = 0x2C3D,
+ SMSG_RESUME_CAST_BAR = 0x2C3E,
SMSG_RESUME_COMMS = 0x304B,
SMSG_RESUME_TOKEN = 0x25BE,
SMSG_RESURRECT_REQUEST = 0x257E,
- SMSG_RESYNC_RUNES = 0x273E,
+ SMSG_RESYNC_RUNES = 0x273D,
SMSG_ROLE_CHANGED_INFORM = 0x258C,
- SMSG_ROLE_CHOSEN = 0x2A3A,
+ SMSG_ROLE_CHOSEN = 0x2A39,
SMSG_ROLE_POLL_INFORM = 0x258D,
SMSG_RUNE_REGEN_DEBUG = 0x25C8,
- SMSG_SCENARIO_BOOT = 0x27ED,
- SMSG_SCENARIO_COMPLETED = 0x282D,
- SMSG_SCENARIO_POIS = 0x2650,
- SMSG_SCENARIO_PROGRESS_UPDATE = 0x2649,
+ SMSG_SCENARIO_BOOT = 0x27EC,
+ SMSG_SCENARIO_COMPLETED = 0x282C,
+ SMSG_SCENARIO_POIS = 0x264F,
+ SMSG_SCENARIO_PROGRESS_UPDATE = 0x2648,
SMSG_SCENARIO_SET_SHOULD_SHOW_CRITERIA = 0x283A,
SMSG_SCENARIO_SPELL_UPDATE = 0x2839,
- SMSG_SCENARIO_STATE = 0x2648,
+ SMSG_SCENARIO_STATE = 0x2647,
SMSG_SCENE_OBJECT_EVENT = 0x25F7,
SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25FC,
SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25FD,
@@ -1554,149 +1558,150 @@ enum OpcodeServer : uint16
SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25F8,
SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25FB,
SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25FA,
- SMSG_SCRIPT_CAST = 0x2C54,
- SMSG_SELL_RESPONSE = 0x26F0,
+ SMSG_SCRIPT_CAST = 0x2C55,
+ SMSG_SELL_RESPONSE = 0x26EF,
SMSG_SEND_ITEM_PASSIVES = 0x25C1,
SMSG_SEND_KNOWN_SPELLS = 0x2C2A,
- SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x264B,
- SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x264C,
+ SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x264A,
+ SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x264B,
SMSG_SEND_SPELL_CHARGES = 0x2C2D,
SMSG_SEND_SPELL_HISTORY = 0x2C2B,
SMSG_SEND_UNLEARN_SPELLS = 0x2C2E,
SMSG_SERVER_FIRST_ACHIEVEMENT = 0x2BBC,
- SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x266B,
- SMSG_SERVER_TIME = 0x26AC,
+ SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x266A,
+ SMSG_SERVER_TIME = 0x26AB,
SMSG_SETUP_CURRENCY = 0x2572,
SMSG_SETUP_RESEARCH_HISTORY = 0x2584,
- SMSG_SET_AI_ANIM_KIT = 0x2772,
- SMSG_SET_ALL_TASK_PROGRESS = 0x27D2,
- SMSG_SET_ANIM_TIER = 0x2776,
+ SMSG_SET_AI_ANIM_KIT = 0x2771,
+ SMSG_SET_ALL_TASK_PROGRESS = 0x27D1,
+ SMSG_SET_ANIM_TIER = 0x2775,
SMSG_SET_CURRENCY = 0x2573,
SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E,
- SMSG_SET_DUNGEON_DIFFICULTY = 0x26CE,
- SMSG_SET_FACTION_AT_WAR = 0x273D,
- SMSG_SET_FACTION_NOT_VISIBLE = 0x276D,
- SMSG_SET_FACTION_STANDING = 0x276E,
- SMSG_SET_FACTION_VISIBLE = 0x276C,
+ SMSG_SET_DUNGEON_DIFFICULTY = 0x26CD,
+ SMSG_SET_FACTION_AT_WAR = 0x273C,
+ SMSG_SET_FACTION_NOT_VISIBLE = 0x276C,
+ SMSG_SET_FACTION_STANDING = 0x276D,
+ SMSG_SET_FACTION_VISIBLE = 0x276B,
SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36,
- SMSG_SET_FORCED_REACTIONS = 0x275D,
+ SMSG_SET_FORCED_REACTIONS = 0x275C,
SMSG_SET_ITEM_PURCHASE_DATA = 0x25B0,
- SMSG_SET_LOOT_METHOD_FAILED = 0x2817,
+ SMSG_SET_LOOT_METHOD_FAILED = 0x2816,
SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25B7,
- SMSG_SET_MELEE_ANIM_KIT = 0x2775,
- SMSG_SET_MOVEMENT_ANIM_KIT = 0x2774,
+ SMSG_SET_MELEE_ANIM_KIT = 0x2774,
+ SMSG_SET_MOVEMENT_ANIM_KIT = 0x2773,
SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37,
- SMSG_SET_PET_SPECIALIZATION = 0x2642,
- SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2708,
+ SMSG_SET_PET_SPECIALIZATION = 0x2641,
+ SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2707,
SMSG_SET_PLAY_HOVER_ANIM = 0x25CC,
- SMSG_SET_PROFICIENCY = 0x2777,
+ SMSG_SET_PROFICIENCY = 0x2776,
SMSG_SET_SPELL_CHARGES = 0x2C29,
- SMSG_SET_TASK_COMPLETE = 0x27D3,
- SMSG_SET_TIME_ZONE_INFORMATION = 0x26A0,
- SMSG_SET_VEHICLE_REC_ID = 0x2730,
- SMSG_SHOW_ADVENTURE_MAP = 0x2836,
- SMSG_SHOW_BANK = 0x26A9,
- SMSG_SHOW_MAILBOX = 0x27EE,
+ SMSG_SET_TASK_COMPLETE = 0x27D2,
+ SMSG_SET_TIME_ZONE_INFORMATION = 0x269F,
+ SMSG_SET_VEHICLE_REC_ID = 0x272F,
+ SMSG_SHOW_ADVENTURE_MAP = 0x2835,
+ SMSG_SHOW_BANK = 0x26A8,
+ SMSG_SHOW_MAILBOX = 0x27ED,
SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25F0,
- SMSG_SHOW_TAXI_NODES = 0x26F7,
- SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27B3,
- SMSG_SOCKET_GEMS = 0x2769,
- SMSG_SOCKET_GEMS_FAILURE = 0x276A,
- SMSG_SORT_BAGS_RESULT = 0x2825,
+ SMSG_SHOW_TAXI_NODES = 0x26F6,
+ SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27B2,
+ SMSG_SOCKET_GEMS = 0x2768,
+ SMSG_SOCKET_GEMS_FAILURE = 0x2769,
+ SMSG_SORT_BAGS_RESULT = 0x2824,
SMSG_SOR_START_EXPERIENCE_INCOMPLETE = 0x25F2,
SMSG_SPECIALIZATION_CHANGED = 0x25EC,
- SMSG_SPECIAL_MOUNT_ANIM = 0x26C9,
- SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2758,
+ SMSG_SPECIAL_MOUNT_ANIM = 0x26C8,
+ SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2757,
SMSG_SPELL_ABSORB_LOG = 0x2C1F,
SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C17,
SMSG_SPELL_CHANNEL_START = 0x2C34,
SMSG_SPELL_CHANNEL_UPDATE = 0x2C35,
SMSG_SPELL_COOLDOWN = 0x2C15,
SMSG_SPELL_DAMAGE_SHIELD = 0x2C31,
- SMSG_SPELL_DELAYED = 0x2C3E,
+ SMSG_SPELL_DELAYED = 0x2C3F,
SMSG_SPELL_DISPELL_LOG = 0x2C1A,
SMSG_SPELL_ENERGIZE_LOG = 0x2C1C,
- SMSG_SPELL_EXECUTE_LOG = 0x2C3F,
- SMSG_SPELL_FAILED_OTHER = 0x2C53,
- SMSG_SPELL_FAILURE = 0x2C51,
- SMSG_SPELL_FAILURE_MESSAGE = 0x2C58,
+ SMSG_SPELL_EXECUTE_LOG = 0x2C40,
+ SMSG_SPELL_FAILED_OTHER = 0x2C54,
+ SMSG_SPELL_FAILURE = 0x2C52,
+ SMSG_SPELL_FAILURE_MESSAGE = 0x2C59,
SMSG_SPELL_GO = 0x2C39,
SMSG_SPELL_HEAL_ABSORB_LOG = 0x2C1E,
SMSG_SPELL_HEAL_LOG = 0x2C1D,
SMSG_SPELL_INSTAKILL_LOG = 0x2C33,
SMSG_SPELL_INTERRUPT_LOG = 0x2C20,
- SMSG_SPELL_MISS_LOG = 0x2C40,
+ SMSG_SPELL_MISS_LOG = 0x2C41,
SMSG_SPELL_NON_MELEE_DAMAGE_LOG = 0x2C32,
SMSG_SPELL_OR_DAMAGE_IMMUNE = 0x2C2F,
SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C1B,
SMSG_SPELL_PREPARE = 0x2C38,
SMSG_SPELL_START = 0x2C3A,
- SMSG_SPIRIT_HEALER_CONFIRM = 0x2755,
- SMSG_STAND_STATE_UPDATE = 0x275C,
+ SMSG_SPIRIT_HEALER_CONFIRM = 0x2754,
+ SMSG_STAND_STATE_UPDATE = 0x275B,
SMSG_START_ELAPSED_TIMER = 0x261A,
SMSG_START_ELAPSED_TIMERS = 0x261C,
SMSG_START_LOOT_ROLL = 0x2631,
- SMSG_START_MIRROR_TIMER = 0x274F,
+ SMSG_START_MIRROR_TIMER = 0x274E,
SMSG_START_TIMER = 0x25BB,
SMSG_STOP_ELAPSED_TIMER = 0x261B,
- SMSG_STOP_MIRROR_TIMER = 0x2751,
- SMSG_STOP_SPEAKERBOT_SOUND = 0x27AF,
+ SMSG_STOP_MIRROR_TIMER = 0x2750,
+ SMSG_STOP_SPEAKERBOT_SOUND = 0x27AE,
SMSG_STREAMING_MOVIES = 0x25BA,
- SMSG_SUMMON_CANCEL = 0x26D9,
+ SMSG_SUMMON_CANCEL = 0x26D8,
SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258E,
- SMSG_SUMMON_REQUEST = 0x2761,
- SMSG_SUPERCEDED_SPELLS = 0x2C4B,
+ SMSG_SUMMON_REQUEST = 0x2760,
+ SMSG_SUPERCEDED_SPELLS = 0x2C4C,
SMSG_SUSPEND_COMMS = 0x304A,
SMSG_SUSPEND_TOKEN = 0x25BD,
- SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2757,
- SMSG_TAXI_NODE_STATUS = 0x26A6,
- SMSG_TEXT_EMOTE = 0x26A4,
- SMSG_THREAT_CLEAR = 0x2710,
- SMSG_THREAT_REMOVE = 0x270F,
- SMSG_THREAT_UPDATE = 0x270E,
+ SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2756,
+ SMSG_TAXI_NODE_STATUS = 0x26A5,
+ SMSG_TEXT_EMOTE = 0x26A3,
+ SMSG_THREAT_CLEAR = 0x270F,
+ SMSG_THREAT_REMOVE = 0x270E,
+ SMSG_THREAT_UPDATE = 0x270D,
SMSG_TIME_ADJUSTMENT = 0x2DA1,
SMSG_TIME_SYNC_REQUEST = 0x2DA0,
- SMSG_TITLE_EARNED = 0x270B,
- SMSG_TITLE_LOST = 0x270C,
- SMSG_TOTEM_CREATED = 0x26F3,
- SMSG_TOTEM_MOVED = 0x26F4,
+ SMSG_TITLE_EARNED = 0x270A,
+ SMSG_TITLE_LOST = 0x270B,
+ SMSG_TOTEM_CREATED = 0x26F2,
+ SMSG_TOTEM_MOVED = 0x26F3,
SMSG_TRADE_STATUS = 0x2581,
SMSG_TRADE_UPDATED = 0x2580,
- SMSG_TRAINER_BUY_FAILED = 0x2716,
- SMSG_TRAINER_LIST = 0x2715,
- SMSG_TRANSFER_ABORTED = 0x2741,
+ SMSG_TRAINER_BUY_FAILED = 0x2715,
+ SMSG_TRAINER_LIST = 0x2714,
+ SMSG_TRANSFER_ABORTED = 0x2740,
SMSG_TRANSFER_PENDING = 0x25E5,
SMSG_TRANSMOG_COLLECTION_UPDATE = 0x25C6,
SMSG_TRANSMOG_SET_COLLECTION_UPDATE = 0x25C7,
- SMSG_TRIGGER_CINEMATIC = 0x280F,
- SMSG_TRIGGER_MOVIE = 0x26F5,
- SMSG_TURN_IN_PETITION_RESULT = 0x2792,
- SMSG_TUTORIAL_FLAGS = 0x2801,
+ SMSG_TRIGGER_CINEMATIC = 0x280E,
+ SMSG_TRIGGER_MOVIE = 0x26F4,
+ SMSG_TURN_IN_PETITION_RESULT = 0x2791,
+ SMSG_TUTORIAL_FLAGS = 0x2800,
SMSG_TUTORIAL_HIGHLIGHT_SPELL = 0x2840,
SMSG_TUTORIAL_UNHIGHLIGHT_SPELL = 0x283F,
SMSG_TWITTER_STATUS = 0x2FFD,
- SMSG_UI_TIME = 0x2754,
- SMSG_UNDELETE_CHARACTER_RESPONSE = 0x2812,
- SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x2813,
- SMSG_UNLEARNED_SPELLS = 0x2C4D,
- SMSG_UPDATE_ACCOUNT_DATA = 0x2749,
+ SMSG_UI_TIME = 0x2753,
+ SMSG_UNDELETE_CHARACTER_RESPONSE = 0x2811,
+ SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x2812,
+ SMSG_UNLEARNED_SPELLS = 0x2C4E,
+ SMSG_UPDATE_ACCOUNT_DATA = 0x2748,
SMSG_UPDATE_ACTION_BUTTONS = 0x25F5,
- SMSG_UPDATE_CHARACTER_FLAGS = 0x2807,
- SMSG_UPDATE_DUNGEON_ENCOUNTER_FOR_LOOT = 0x2A31,
- SMSG_UPDATE_EXPANSION_LEVEL = 0x2664,
- SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26D1,
- SMSG_UPDATE_LAST_INSTANCE = 0x26B2,
- SMSG_UPDATE_OBJECT = 0x2810,
+ SMSG_UPDATE_CELESTIAL_BODY = 0x285E,
+ SMSG_UPDATE_CHARACTER_FLAGS = 0x2806,
+ SMSG_UPDATE_EXPANSION_LEVEL = 0x2663,
+ SMSG_UPDATE_GAME_TIME_STATE = 0x2865,
+ SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26D0,
+ SMSG_UPDATE_LAST_INSTANCE = 0x26B1,
+ SMSG_UPDATE_OBJECT = 0x280F,
SMSG_UPDATE_TALENT_DATA = 0x25EB,
- SMSG_UPDATE_TASK_PROGRESS = 0x27D1,
+ SMSG_UPDATE_TASK_PROGRESS = 0x27D0,
SMSG_UPDATE_WEEKLY_SPELL_USAGE = 0x2C19,
- SMSG_UPDATE_WORLD_STATE = 0x278D,
+ SMSG_UPDATE_WORLD_STATE = 0x278C,
SMSG_USERLIST_ADD = 0x2BB9,
SMSG_USERLIST_REMOVE = 0x2BBA,
SMSG_USERLIST_UPDATE = 0x2BBB,
- SMSG_USE_EQUIPMENT_SET_RESULT = 0x2793,
+ SMSG_USE_EQUIPMENT_SET_RESULT = 0x2792,
SMSG_VENDOR_INVENTORY = 0x25CA,
- SMSG_VIGNETTE_UPDATE = 0x27B1,
+ SMSG_VIGNETTE_UPDATE = 0x27B0,
SMSG_VOID_ITEM_SWAP_RESPONSE = 0x25DF,
SMSG_VOID_STORAGE_CONTENTS = 0x25DC,
SMSG_VOID_STORAGE_FAILED = 0x25DB,
@@ -1706,29 +1711,29 @@ enum OpcodeServer : uint16
SMSG_WAIT_QUEUE_UPDATE = 0x256D,
SMSG_WARDEN_DATA = 0x2576,
SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x25B4,
- SMSG_WEATHER = 0x26D0,
+ SMSG_WEATHER = 0x26CF,
SMSG_WEEKLY_SPELL_USAGE = 0x2C18,
SMSG_WHO = 0x2BAE,
- SMSG_WHO_IS = 0x26CF,
+ SMSG_WHO_IS = 0x26CE,
SMSG_WORLD_QUEST_UPDATE = 0x2847,
SMSG_WORLD_SERVER_INFO = 0x25C2,
- SMSG_WORLD_TEXT = 0x282F,
- SMSG_WOW_TOKEN_AUCTION_SOLD = 0x281D,
- SMSG_WOW_TOKEN_BUY_REQUEST_CONFIRMATION = 0x281F,
- SMSG_WOW_TOKEN_BUY_RESULT_CONFIRMATION = 0x2820,
+ SMSG_WORLD_TEXT = 0x282E,
+ SMSG_WOW_TOKEN_AUCTION_SOLD = 0x281C,
+ SMSG_WOW_TOKEN_BUY_REQUEST_CONFIRMATION = 0x281E,
+ SMSG_WOW_TOKEN_BUY_RESULT_CONFIRMATION = 0x281F,
SMSG_WOW_TOKEN_CAN_REDEEM_FOR_BALANCE_RESULT = 0x2856,
- SMSG_WOW_TOKEN_CAN_VETERAN_BUY_RESULT = 0x281E,
- SMSG_WOW_TOKEN_DISTRIBUTION_GLUE_UPDATE = 0x2818,
- SMSG_WOW_TOKEN_DISTRIBUTION_UPDATE = 0x2819,
- SMSG_WOW_TOKEN_MARKET_PRICE_RESPONSE = 0x281A,
- SMSG_WOW_TOKEN_REDEEM_GAME_TIME_UPDATED = 0x2821,
- SMSG_WOW_TOKEN_REDEEM_REQUEST_CONFIRMATION = 0x2822,
- SMSG_WOW_TOKEN_REDEEM_RESULT = 0x2823,
- SMSG_WOW_TOKEN_SELL_REQUEST_CONFIRMATION = 0x281B,
- SMSG_WOW_TOKEN_SELL_RESULT_CONFIRMATION = 0x281C,
- SMSG_WOW_TOKEN_UPDATE_AUCTIONABLE_LIST_RESPONSE = 0x2824,
+ SMSG_WOW_TOKEN_CAN_VETERAN_BUY_RESULT = 0x281D,
+ SMSG_WOW_TOKEN_DISTRIBUTION_GLUE_UPDATE = 0x2817,
+ SMSG_WOW_TOKEN_DISTRIBUTION_UPDATE = 0x2818,
+ SMSG_WOW_TOKEN_MARKET_PRICE_RESPONSE = 0x2819,
+ SMSG_WOW_TOKEN_REDEEM_GAME_TIME_UPDATED = 0x2820,
+ SMSG_WOW_TOKEN_REDEEM_REQUEST_CONFIRMATION = 0x2821,
+ SMSG_WOW_TOKEN_REDEEM_RESULT = 0x2822,
+ SMSG_WOW_TOKEN_SELL_REQUEST_CONFIRMATION = 0x281A,
+ SMSG_WOW_TOKEN_SELL_RESULT_CONFIRMATION = 0x281B,
+ SMSG_WOW_TOKEN_UPDATE_AUCTIONABLE_LIST_RESPONSE = 0x2823,
SMSG_XP_GAIN_ABORTED = 0x25E0,
- SMSG_XP_GAIN_ENABLED = 0x27F1,
+ SMSG_XP_GAIN_ENABLED = 0x27F0,
SMSG_ZONE_UNDER_ATTACK = 0x2BB5,
// Opcodes that are not generated automatically
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 08357f8bc4d..acadaf0d64a 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -112,7 +112,8 @@ WorldSession::WorldSession(uint32 id, std::string&& name, uint32 battlenetAccoun
_accountId(id),
_accountName(std::move(name)),
_battlenetAccountId(battlenetAccountId),
- m_expansion(expansion),
+ m_accountExpansion(expansion),
+ m_expansion(std::min<uint8>(expansion, sWorld->getIntConfig(CONFIG_EXPANSION))),
_os(os),
_battlenetRequestToken(0),
_warden(NULL),
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 8e9ecabfded..8d8f00483c7 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -936,6 +936,7 @@ class TC_GAME_API WorldSession
void SetSecurity(AccountTypes security) { _security = security; }
std::string const& GetRemoteAddress() const { return m_Address; }
void SetPlayer(Player* player);
+ uint8 GetAccountExpansion() const { return m_accountExpansion; }
uint8 GetExpansion() const { return m_expansion; }
std::string const& GetOS() const { return _os; }
@@ -1797,6 +1798,7 @@ class TC_GAME_API WorldSession
uint32 _accountId;
std::string _accountName;
uint32 _battlenetAccountId;
+ uint8 m_accountExpansion;
uint8 m_expansion;
std::string _os;
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index b83742a3346..ff5a587a5be 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -70,9 +70,9 @@ uint8 const WorldSocket::AuthCheckSeed[16] = { 0xC5, 0xC6, 0x98, 0x95, 0x76, 0x3
uint8 const WorldSocket::SessionKeySeed[16] = { 0x58, 0xCB, 0xCF, 0x40, 0xFE, 0x2E, 0xCE, 0xA6, 0x5A, 0x90, 0xB8, 0x01, 0x68, 0x6C, 0x28, 0x0B };
uint8 const WorldSocket::ContinuedSessionSeed[16] = { 0x16, 0xAD, 0x0C, 0xD4, 0x46, 0xF9, 0x4F, 0xB2, 0xEF, 0x7D, 0xEA, 0x2A, 0x17, 0x66, 0x4D, 0x2F };
-uint32 const ClientTypeSeed_Win[4] = { 0xC34F59FE, 0xFF9A7F5E, 0x8A9DD986, 0x97B24A36 };
-uint32 const ClientTypeSeed_Wn64[4] = { 0x4E625212, 0xFAD6CBD8, 0x5D3FD3C7, 0xF335A567 };
-uint32 const ClientTypeSeed_Mc64[4] = { 0x95EFC66, 0x266170B8, 0x3145F79, 0xD8C1C808 };
+uint8 const ClientTypeSeed_Win[16] = { 0x23, 0xC5, 0x9C, 0x59, 0x63, 0xCB, 0xEF, 0x5B, 0x72, 0x8D, 0x13, 0xA5, 0x08, 0x78, 0xDF, 0xCB };
+uint8 const ClientTypeSeed_Wn64[16] = { 0xC7, 0xFF, 0x93, 0x2D, 0x6A, 0x21, 0x74, 0xA3, 0xD5, 0x38, 0xCA, 0x72, 0x12, 0x13, 0x6D, 0x2B };
+uint8 const ClientTypeSeed_Mc64[16] = { 0x21, 0x0B, 0x97, 0x01, 0x49, 0xD6, 0xF5, 0x6C, 0xAC, 0x9B, 0xAD, 0xF2, 0xAA, 0xC9, 0x1E, 0x8E };
WorldSocket::WorldSocket(tcp::socket&& socket) : Socket(std::move(socket)),
_type(CONNECTION_TYPE_REALM), _key(0), _OverSpeedPings(0),
@@ -637,10 +637,6 @@ struct AccountInfo
Game.IsBanned = fields[13].GetUInt64() != 0;
Game.IsRectuiter = fields[14].GetUInt32() != 0;
- uint32 world_expansion = sWorld->getIntConfig(CONFIG_EXPANSION);
- if (Game.Expansion > world_expansion)
- Game.Expansion = world_expansion;
-
if (BattleNet.Locale >= TOTAL_LOCALES)
BattleNet.Locale = LOCALE_enUS;
}
@@ -675,11 +671,11 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<WorldPackets::Auth::
SHA256Hash digestKeyHash;
digestKeyHash.UpdateData(account.Game.KeyData.data(), account.Game.KeyData.size());
if (account.Game.OS == "Win")
- digestKeyHash.UpdateData(reinterpret_cast<uint8 const*>(ClientTypeSeed_Win), 16);
+ digestKeyHash.UpdateData(ClientTypeSeed_Win, 16);
else if (account.Game.OS == "Wn64")
- digestKeyHash.UpdateData(reinterpret_cast<uint8 const*>(ClientTypeSeed_Wn64), 16);
+ digestKeyHash.UpdateData(ClientTypeSeed_Wn64, 16);
else if (account.Game.OS == "Mc64")
- digestKeyHash.UpdateData(reinterpret_cast<uint8 const*>(ClientTypeSeed_Mc64), 16);
+ digestKeyHash.UpdateData(ClientTypeSeed_Mc64, 16);
digestKeyHash.Finalize();