aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-04-25 22:50:11 +0200
committerShauren <shauren.trinity@gmail.com>2025-04-25 22:50:11 +0200
commitf9bf082be962d45de79f936d625f644253e9b810 (patch)
treea7c40c0b5baf522d04896721df5c5d91e25c834e /src/server/game/Entities
parent05709a24976cc4cd378ee62bdfec52510892aa5b (diff)
Core: Updated to 11.1.5
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp5
-rw-r--r--src/server/game/Entities/Creature/GossipDef.h6
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h6
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp93
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h11
-rw-r--r--src/server/game/Entities/Player/Player.cpp32
-rw-r--r--src/server/game/Entities/Player/Player.h5
7 files changed, 72 insertions, 86 deletions
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index d5785084f88..85d6ecb7e3d 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -287,6 +287,7 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID)
text.QuestFlags[0] = quest->GetFlags();
text.QuestFlags[1] = quest->GetFlagsEx();
text.QuestFlags[2] = quest->GetFlagsEx2();
+ text.QuestFlags[3] = quest->GetFlagsEx3();
text.Repeatable = quest->IsTurnIn() && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly();
text.ResetByScheduler = quest->IsResetByScheduler();
text.Important = quest->IsImportant();
@@ -418,6 +419,7 @@ void PlayerMenu::SendQuestGiverQuestListMessage(Object* questgiver)
text.QuestFlags[0] = quest->GetFlags();
text.QuestFlags[1] = quest->GetFlagsEx();
text.QuestFlags[2] = quest->GetFlagsEx2();
+ text.QuestFlags[3] = quest->GetFlagsEx3();
text.Repeatable = quest->IsTurnIn() && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly();
text.ResetByScheduler = quest->IsResetByScheduler();
text.Important = quest->IsImportant();
@@ -495,6 +497,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
packet.QuestFlags[0] = quest->GetFlags() & (sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_ACCEPT) ? ~QUEST_FLAGS_AUTO_ACCEPT : ~0);
packet.QuestFlags[1] = quest->GetFlagsEx();
packet.QuestFlags[2] = quest->GetFlagsEx2();
+ packet.QuestFlags[3] = quest->GetFlagsEx3();
packet.SuggestedPartyMembers = quest->GetSuggestedPlayers();
// Is there a better way? what about game objects?
@@ -602,6 +605,7 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUI
offer.QuestFlags[0] = quest->GetFlags();
offer.QuestFlags[1] = quest->GetFlagsEx();
offer.QuestFlags[2] = quest->GetFlagsEx2();
+ offer.QuestFlags[3] = quest->GetFlagsEx3();
packet.PortraitTurnIn = quest->GetQuestTurnInPortrait();
packet.PortraitGiver = quest->GetQuestGiverPortrait();
@@ -668,6 +672,7 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU
packet.QuestFlags[0] = quest->GetFlags();
packet.QuestFlags[1] = quest->GetFlagsEx();
packet.QuestFlags[2] = quest->GetFlagsEx2();
+ packet.QuestFlags[3] = quest->GetFlagsEx3();
packet.SuggestPartyMembers = quest->GetSuggestedPlayers();
packet.QuestInfoID = quest->GetQuestInfoID();
diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h
index 524a98a687e..03ac95cb8f7 100644
--- a/src/server/game/Entities/Creature/GossipDef.h
+++ b/src/server/game/Entities/Creature/GossipDef.h
@@ -92,6 +92,12 @@ enum class GossipOptionNpc : uint8
CharacterBanker = 56,
AccountBanker = 57,
ProfessionRespec = 58,
+ Placeholder1 = 59,
+ Placeholder2 = 60,
+ Placeholder3 = 61,
+ GuildRename = 62,
+ Placeholder4 = 63,
+ ItemUpgrade = 64,
Count
};
diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h
index 6dcdf08e85c..c7853ca5214 100644
--- a/src/server/game/Entities/Item/ItemTemplate.h
+++ b/src/server/game/Entities/Item/ItemTemplate.h
@@ -472,10 +472,12 @@ enum ItemSubclassConsumable
ITEM_SUBCLASS_ITEM_ENHANCEMENT = 6,
ITEM_SUBCLASS_BANDAGE = 7,
ITEM_SUBCLASS_CONSUMABLE_OTHER = 8,
- ITEM_SUBCLASS_VANTUS_RUNE = 9
+ ITEM_SUBCLASS_VANTUS_RUNE = 9,
+ ITEM_SUBCLASS_UTILITY_CURIO = 10,
+ ITEM_SUBCLASS_COMBAT_CURIO = 11,
};
-#define MAX_ITEM_SUBCLASS_CONSUMABLE 10
+#define MAX_ITEM_SUBCLASS_CONSUMABLE 12
enum ItemSubclassContainer
{
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index cc073ad6592..c575c61f10b 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -3061,7 +3061,7 @@ void BitVectors::ClearChangesMask()
void PlayerDataElement::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
- data.WriteBits(Type, 1);
+ data << uint32(Type);
if (Type == 1)
{
data << float(FloatValue);
@@ -3070,12 +3070,11 @@ void PlayerDataElement::WriteCreate(ByteBuffer& data, Player const* owner, Playe
{
data << int64(Int64Value);
}
- data.FlushBits();
}
void PlayerDataElement::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
{
- data.WriteBits(Type, 1);
+ data << uint32(Type);
if (Type == 1)
{
data << float(FloatValue);
@@ -3084,7 +3083,6 @@ void PlayerDataElement::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl
{
data << int64(Int64Value);
}
- data.FlushBits();
}
bool PlayerDataElement::operator==(PlayerDataElement const& right) const
@@ -4760,7 +4758,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << uint8(MultiActionBars);
data << uint8(LifetimeMaxRank);
data << uint8(NumRespecs);
- data << uint8(PvpMedals);
+ data << uint32(PvpMedals);
for (uint32 i = 0; i < 12; ++i)
{
data << uint32(BuybackPrice[i]);
@@ -4807,10 +4805,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
data << uint32(BankBagSlotFlags[i]);
}
- for (uint32 i = 0; i < 1000; ++i)
- {
- data << uint64(QuestCompleted[i]);
- }
data << int32(Honor);
data << int32(HonorNextLevel);
data << int32(PerksProgramCurrency);
@@ -4883,6 +4877,14 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
data << uint64(KnownTitles[i]);
}
+ for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
+ {
+ CharacterDataElements[i].WriteCreate(data, owner, receiver);
+ }
+ for (uint32 i = 0; i < AccountDataElements.size(); ++i)
+ {
+ AccountDataElements[i].WriteCreate(data, owner, receiver);
+ }
for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
{
data << int32(DailyQuestsCompleted[i]);
@@ -5004,14 +5006,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << FrozenPerksVendorItem;
Field_1410->WriteCreate(data, owner, receiver);
data << DungeonScore;
- for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
- {
- CharacterDataElements[i].WriteCreate(data, owner, receiver);
- }
- for (uint32 i = 0; i < AccountDataElements.size(); ++i)
- {
- AccountDataElements[i].WriteCreate(data, owner, receiver);
- }
for (uint32 i = 0; i < PvpInfo.size(); ++i)
{
PvpInfo[i].WriteCreate(data, owner, receiver);
@@ -5054,10 +5048,8 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const
{
- for (uint32 i = 0; i < 1; ++i)
- data << uint32(changesMask.GetBlocksMask(i));
- data.WriteBits(changesMask.GetBlocksMask(1), 16);
- for (uint32 i = 0; i < 48; ++i)
+ data.WriteBits(changesMask.GetBlocksMask(0), 17);
+ for (uint32 i = 0; i < 17; ++i)
if (changesMask.GetBlock(i))
data.WriteBits(changesMask.GetBlock(i), 32);
@@ -5419,6 +5411,26 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
+ if (changesMask[8])
+ {
+ for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
+ {
+ if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask)
+ {
+ CharacterDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[9])
+ {
+ for (uint32 i = 0; i < AccountDataElements.size(); ++i)
+ {
+ if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask)
+ {
+ AccountDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
if (changesMask[11])
{
for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
@@ -5682,26 +5694,6 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
if (changesMask[0])
{
- if (changesMask[8])
- {
- for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
- {
- if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask)
- {
- CharacterDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
- }
- if (changesMask[9])
- {
- for (uint32 i = 0; i < AccountDataElements.size(); ++i)
- {
- if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask)
- {
- AccountDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
- }
if (changesMask[10])
{
for (uint32 i = 0; i < PvpInfo.size(); ++i)
@@ -5956,7 +5948,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
if (changesMask[97])
{
- data << uint8(PvpMedals);
+ data << uint32(PvpMedals);
}
if (changesMask[98])
{
@@ -6300,19 +6292,9 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
if (changesMask[498])
{
- for (uint32 i = 0; i < 1000; ++i)
- {
- if (changesMask[499 + i])
- {
- data << uint64(QuestCompleted[i]);
- }
- }
- }
- if (changesMask[1499])
- {
for (uint32 i = 0; i < 17; ++i)
{
- if (changesMask[1500 + i])
+ if (changesMask[499 + i])
{
data << float(ItemUpgradeHighWatermark[i]);
}
@@ -6333,6 +6315,8 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(ResearchSiteProgress);
Base::ClearChangesMask(Research);
Base::ClearChangesMask(KnownTitles);
+ Base::ClearChangesMask(CharacterDataElements);
+ Base::ClearChangesMask(AccountDataElements);
Base::ClearChangesMask(DailyQuestsCompleted);
Base::ClearChangesMask(AvailableQuestLineXQuestIDs);
Base::ClearChangesMask(Heirlooms);
@@ -6358,8 +6342,6 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(CategoryCooldownMods);
Base::ClearChangesMask(WeeklySpellUses);
Base::ClearChangesMask(TrackedCollectableSources);
- Base::ClearChangesMask(CharacterDataElements);
- Base::ClearChangesMask(AccountDataElements);
Base::ClearChangesMask(PvpInfo);
Base::ClearChangesMask(CharacterRestrictions);
Base::ClearChangesMask(TraitConfigs);
@@ -6476,7 +6458,6 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(ProfessionSkillLine);
Base::ClearChangesMask(BagSlotFlags);
Base::ClearChangesMask(BankBagSlotFlags);
- Base::ClearChangesMask(QuestCompleted);
Base::ClearChangesMask(ItemUpgradeHighWatermark);
_changesMask.ResetAll();
}
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index bc02576f7f6..d394afda2d9 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -1034,7 +1034,7 @@ struct Research : public IsUpdateFieldStructureTag
bool operator!=(Research const& right) const { return !(*this == right); }
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1517>
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<516>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
UpdateField<bool, 0, 2> BackpackSellJunkDisabled;
@@ -1046,6 +1046,8 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 43, 44> ResearchSiteProgress;
UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 45, 46> Research;
DynamicUpdateField<uint64, 0, 7> KnownTitles;
+ DynamicUpdateField<UF::PlayerDataElement, 0, 8> CharacterDataElements;
+ DynamicUpdateField<UF::PlayerDataElement, 0, 9> AccountDataElements;
DynamicUpdateField<int32, 0, 11> DailyQuestsCompleted;
DynamicUpdateField<int32, 0, 12> AvailableQuestLineXQuestIDs;
DynamicUpdateField<int32, 0, 13> Heirlooms;
@@ -1071,8 +1073,6 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
DynamicUpdateField<UF::CategoryCooldownMod, 32, 37> CategoryCooldownMods;
DynamicUpdateField<UF::WeeklySpellUse, 32, 38> WeeklySpellUses;
DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 39> TrackedCollectableSources;
- DynamicUpdateField<UF::PlayerDataElement, 0, 8> CharacterDataElements;
- DynamicUpdateField<UF::PlayerDataElement, 0, 9> AccountDataElements;
DynamicUpdateField<UF::PVPInfo, 0, 10> PvpInfo;
DynamicUpdateField<UF::CharacterRestriction, 0, 23> CharacterRestrictions;
DynamicUpdateField<UF::TraitConfig, 32, 33> TraitConfigs;
@@ -1127,7 +1127,7 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateField<uint8, 70, 94> MultiActionBars;
UpdateField<uint8, 70, 95> LifetimeMaxRank;
UpdateField<uint8, 70, 96> NumRespecs;
- UpdateField<uint8, 70, 97> PvpMedals;
+ UpdateField<uint32, 70, 97> PvpMedals;
UpdateField<uint16, 70, 98> TodayHonorableKills;
UpdateField<uint16, 70, 99> YesterdayHonorableKills;
UpdateField<uint32, 70, 100> LifetimeHonorableKills;
@@ -1189,8 +1189,7 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateFieldArray<int32, 2, 481, 482> ProfessionSkillLine;
UpdateFieldArray<uint32, 5, 484, 485> BagSlotFlags;
UpdateFieldArray<uint32, 7, 490, 491> BankBagSlotFlags;
- UpdateFieldArray<uint64, 1000, 498, 499> QuestCompleted;
- UpdateFieldArray<float, 17, 1499, 1500> ItemUpgradeHighWatermark;
+ UpdateFieldArray<float, 17, 498, 499> ItemUpgradeHighWatermark;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 48a0156ffce..c1e09611a53 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -14277,7 +14277,9 @@ void Player::OnGossipSelect(WorldObject* source, int32 gossipOptionId, uint32 me
PlayerInteractionType::ProfessionsCraftingOrder, PlayerInteractionType::Professions, PlayerInteractionType::ProfessionsCustomerOrder,
PlayerInteractionType::TraitSystem, PlayerInteractionType::BarbersChoice, PlayerInteractionType::MajorFactionRenown,
PlayerInteractionType::PersonalTabardVendor, PlayerInteractionType::ForgeMaster, PlayerInteractionType::CharacterBanker,
- PlayerInteractionType::AccountBanker, PlayerInteractionType::ProfessionRespec
+ PlayerInteractionType::AccountBanker, PlayerInteractionType::ProfessionRespec, PlayerInteractionType::PlaceholderType72,
+ PlayerInteractionType::PlaceholderType75, PlayerInteractionType::PlaceholderType76, PlayerInteractionType::GuildRename,
+ PlayerInteractionType::PlaceholderType77, PlayerInteractionType::ItemUpgrade
};
PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[AsUnderlyingType(gossipOptionNpc)];
@@ -16569,26 +16571,17 @@ void Player::SetQuestCompletedBit(uint32 questId, bool completed)
uint32 fieldOffset = (questBit - 1) / QUESTS_COMPLETED_BITS_PER_BLOCK;
uint64 flag = UI64LIT(1) << ((questBit - 1) % QUESTS_COMPLETED_BITS_PER_BLOCK);
- if (fieldOffset < QUESTS_COMPLETED_BITS_SIZE)
- {
- if (completed)
- SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::QuestCompleted, fieldOffset), flag);
- else
- RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::QuestCompleted, fieldOffset), flag);
- }
+
+ auto field = m_values
+ .ModifyValue(&Player::m_activePlayerData)
+ .ModifyValue(&UF::ActivePlayerData::BitVectors)
+ .ModifyValue(&UF::BitVectors::Values, PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX)
+ .ModifyValue(&UF::BitVector::Values, fieldOffset);
if (completed)
- SetUpdateFieldFlagValue(m_values
- .ModifyValue(&Player::m_activePlayerData)
- .ModifyValue(&UF::ActivePlayerData::BitVectors)
- .ModifyValue(&UF::BitVectors::Values, PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX)
- .ModifyValue(&UF::BitVector::Values, fieldOffset), flag);
+ SetUpdateFieldFlagValue(field, flag);
else
- RemoveUpdateFieldFlagValue(m_values
- .ModifyValue(&Player::m_activePlayerData)
- .ModifyValue(&UF::ActivePlayerData::BitVectors)
- .ModifyValue(&UF::BitVectors::Values, PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX)
- .ModifyValue(&UF::BitVector::Values, fieldOffset), flag);
+ RemoveUpdateFieldFlagValue(field, flag);
}
void Player::AreaExploredOrEventHappens(uint32 questId)
@@ -29851,7 +29844,7 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId)
ObjectMgr::GetLocaleString(playerChoiceLocale->Question, locale, displayPlayerChoice.Question);
displayPlayerChoice.Responses.resize(playerChoice->Responses.size());
- displayPlayerChoice.CloseChoiceFrame = false;
+ displayPlayerChoice.InfiniteRange = false;
displayPlayerChoice.HideWarboardHeader = playerChoice->HideWarboardHeader;
displayPlayerChoice.KeepOpenAfterChoice = playerChoice->KeepOpenAfterChoice;
@@ -29945,7 +29938,6 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId)
WorldPackets::Quest::PlayerChoiceResponseMawPower& mawPower = playerChoiceResponse.MawPower.emplace();
mawPower.TypeArtFileID = playerChoiceResponseTemplate.MawPower->TypeArtFileID;
mawPower.Rarity = playerChoiceResponseTemplate.MawPower->Rarity;
- mawPower.RarityColor = playerChoiceResponseTemplate.MawPower->RarityColor;
mawPower.SpellID = playerChoiceResponseTemplate.MawPower->SpellID;
mawPower.MaxStacks = playerChoiceResponseTemplate.MawPower->MaxStacks;
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index ae955a9b683..69329a69358 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -158,6 +158,8 @@ enum PlayerDataFlagConstants
PLAYER_DATA_FLAG_ACCOUNT_COMBINED_QUEST_REWARDS_INDEX = 7,
PLAYER_DATA_FLAG_CHARACTER_CONTENTPUSH_INDEX = 8,
PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX = 9,
+
+ // = 12 stores quests completed under ctrOptions & 0x2000
};
enum SpellModType : uint8
@@ -594,8 +596,7 @@ typedef std::map<uint32, QuestSaveType> QuestStatusSaveMap;
// Size of client completed quests bit map
enum PlayerQuestCompletedConstants
{
- QUESTS_COMPLETED_BITS_SIZE = UF::size<decltype(UF::ActivePlayerData::QuestCompleted)>(),
- QUESTS_COMPLETED_BITS_PER_BLOCK = UF::size_of_value_type<decltype(UF::ActivePlayerData::QuestCompleted)>() * 8
+ QUESTS_COMPLETED_BITS_PER_BLOCK = UF::size_of_value_type<decltype(UF::BitVector::Values)>() * 8
};
enum PlayerQuestLogConstants