aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packets
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 /src/server/game/Server/Packets
parentc9465979c6002ae43bb8e536e3ad0f6d1be36b98 (diff)
Core/PacketIO: Updated opcodes and packet structures to 7.3.5
Diffstat (limited to 'src/server/game/Server/Packets')
-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
19 files changed, 128 insertions, 85 deletions
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;