aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Quests
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-08-02 13:25:41 +0200
committerShauren <shauren.trinity@gmail.com>2024-08-02 13:25:41 +0200
commite59eef5432c7b70679d33f4911c88d0f7d75fd39 (patch)
treefe9bce9c82496589facec3719b3f2943d8295e76 /src/server/game/Quests
parent7fb9168d57f378075b0f6692ea7ad822c1d8e43d (diff)
Core/PacketIO: Updated to 11.0.0
Diffstat (limited to 'src/server/game/Quests')
-rw-r--r--src/server/game/Quests/QuestDef.cpp24
-rw-r--r--src/server/game/Quests/QuestDef.h97
2 files changed, 81 insertions, 40 deletions
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index cfe33834173..8faef90d6dc 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -115,7 +115,7 @@ Quest::Quest(Field* questRecord)
_areaGroupID = questRecord[100].GetUInt32();
_limitTime = questRecord[101].GetInt64();
_allowableRaces.RawValue = questRecord[102].GetUInt64();
- _treasurePickerID = questRecord[103].GetInt32();
+ _resetByScheduler = questRecord[103].GetBool();
_expansion = questRecord[104].GetInt32();
_managedWorldStateID = questRecord[105].GetInt32();
_questSessionBonus = questRecord[106].GetInt32();
@@ -398,6 +398,11 @@ void Quest::LoadConditionalConditionalQuestCompletionLog(Field* fields)
ObjectMgr::AddLocaleString(fields[3].GetStringView(), locale, text.Text);
}
+void Quest::LoadTreasurePickers(Field* fields)
+{
+ _treasurePickerID.push_back(fields[1].GetInt32());
+}
+
uint32 Quest::XPValue(Player const* player) const
{
return XPValue(player, GetContentTuningId(), _rewardXPDifficulty, _rewardXPMultiplier, _expansion);
@@ -487,6 +492,14 @@ bool Quest::IsImportant() const
return false;
}
+bool Quest::IsMeta() const
+{
+ if (QuestInfoEntry const* questInfo = sQuestInfoStore.LookupEntry(GetQuestInfoID()))
+ return (questInfo->Modifiers & 0x800) != 0;
+
+ return false;
+}
+
void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player* player) const
{
rewards.ChoiceItemCount = GetRewChoiceItemsCount();
@@ -521,8 +534,8 @@ void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player
for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i)
{
- rewards.ItemID[i] = RewardItemId[i];
- rewards.ItemQty[i] = RewardItemCount[i];
+ rewards.Items[i].ItemID = RewardItemId[i];
+ rewards.Items[i].ItemQty = RewardItemCount[i];
}
for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i)
@@ -535,8 +548,8 @@ void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player
for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
{
- rewards.CurrencyID[i] = RewardCurrencyId[i];
- rewards.CurrencyQty[i] = RewardCurrencyCount[i];
+ rewards.Currencies[i].CurrencyID = RewardCurrencyId[i];
+ rewards.Currencies[i].CurrencyQty = RewardCurrencyCount[i];
}
}
@@ -779,6 +792,7 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const
response.Info.CompleteSoundKitID = GetSoundTurnIn();
response.Info.AreaGroupID = GetAreaGroupID();
response.Info.TimeAllowed = GetLimitTime();
+ response.Info.ResetByScheduler = IsResetByScheduler();
response.Write();
response.ShrinkToFit();
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index 39fc4862638..3d34b4d2565 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -154,39 +154,53 @@ enum QuestStatus : uint8
enum class QuestGiverStatus : uint64
{
- None = 0x000000000,
- Future = 0x000000002,
- Trivial = 0x000000004,
- TrivialRepeatableTurnin = 0x000000008,
- TrivialDailyQuest = 0x000000010,
- Reward = 0x000000020,
- JourneyReward = 0x000000040,
- CovenantCallingReward = 0x000000080,
- RepeatableTurnin = 0x000000100,
- DailyQuest = 0x000000200,
- Quest = 0x000000400,
- RewardCompleteNoPOI = 0x000000800,
- RewardCompletePOI = 0x000001000,
- LegendaryQuest = 0x000002000,
- LegendaryRewardCompleteNoPOI = 0x000004000,
- LegendaryRewardCompletePOI = 0x000008000,
- JourneyQuest = 0x000010000,
- JourneyRewardCompleteNoPOI = 0x000020000,
- JourneyRewardCompletePOI = 0x000040000,
- CovenantCallingQuest = 0x000080000,
- CovenantCallingRewardCompleteNoPOI = 0x000100000,
- CovenantCallingRewardCompletePOI = 0x000200000,
- TrivialLegendaryQuest = 0x000400000,
- FutureLegendaryQuest = 0x000800000,
- LegendaryReward = 0x001000000,
- ImportantReward = 0x002000000,
- ImportantQuest = 0x004000000,
- TrivialImportantQuest = 0x008000000,
- FutureImportantQuest = 0x010000000,
- ImportantQuestRewardCompleteNoPOI = 0x020000000,
- ImportantQuestRewardCompletePOI = 0x040000000,
- TrivialJourneyQuest = 0x080000000,
- FutureJourneyQuest = 0x100000000,
+ None = 0x000000000000,
+ Future = 0x000000000002,
+ FutureJourneyQuest = 0x000000000004,
+ FutureLegendaryQuest = 0x000000000008,
+ FutureImportantQuest = 0x000000000010,
+ TrivialRepeatableTurnin = 0x000000000020,
+ Trivial = 0x000000000040,
+ TrivialDailyQuest = 0x000000000080,
+ TrivialRepeatableQuest = 0x000000000100,
+ TrivialMetaQuest = 0x000000000200,
+ TrivialJourneyQuest = 0x000000000400,
+ TrivialLegendaryQuest = 0x000000000800,
+ TrivialImportantQuest = 0x000000001000,
+ Reward = 0x000000002000,
+ RepeatableReward = 0x000000004000,
+ MetaReward = 0x000000008000,
+ JourneyReward = 0x000000010000,
+ CovenantCallingReward = 0x000000020000,
+ LegendaryReward = 0x000000040000,
+ ImportantReward = 0x000000080000,
+ RepeatableTurnin = 0x000000100000,
+ QuestAccountCompleted = 0x000000200000,
+ Quest = 0x000000400000,
+ DailyQuest = 0x000000800000,
+ RepeatableQuest = 0x000001000000,
+ MetaQuest = 0x000002000000,
+ CovenantCallingQuest = 0x000004000000,
+ JourneyQuestAccountCompleted = 0x000008000000,
+ JourneyQuest = 0x000010000000,
+ LegendaryQuestAccountCompleted = 0x000020000000,
+ LegendaryQuest = 0x000040000000,
+ ImportantQuestAccountCompleted = 0x000080000000,
+ ImportantQuest = 0x000100000000,
+ RewardCompleteNoPOI = 0x000200000000,
+ RewardCompletePOI = 0x000400000000,
+ RepeatableRewardCompleteNoPOI = 0x000800000000,
+ RepeatableRewardCompletePOI = 0x001000000000,
+ MetaQuestRewardCompleteNoPOI = 0x002000000000,
+ MetaQuestRewardCompletePOI = 0x004000000000,
+ CovenantCallingRewardCompleteNoPOI = 0x008000000000,
+ CovenantCallingRewardCompletePOI = 0x010000000000,
+ JourneyRewardCompleteNoPOI = 0x020000000000,
+ JourneyRewardCompletePOI = 0x040000000000,
+ LegendaryRewardCompleteNoPOI = 0x080000000000,
+ LegendaryRewardCompletePOI = 0x100000000000,
+ ImportantQuestRewardCompleteNoPOI = 0x200000000000,
+ ImportantQuestRewardCompletePOI = 0x400000000000,
};
DEFINE_ENUM_FLAG(QuestGiverStatus);
@@ -292,6 +306,8 @@ enum QuestFlagsEx2 : uint32
QUEST_FLAGS_EX2_IGNORE_SOULBOUND_ITEMS = 0x00200000,
QUEST_FLAGS_EX2_DONT_DEFER_START_EFFECTS = 0x00400000,
QUEST_FLAGS_EX2_HIDE_REQUIRED_ITEMS_PRE_TURN_IN = 0x00800000,
+
+ QUEST_FLAGS_EX2_ABANDON_ON_DISABLE = 0x04000000,
};
enum QuestSpecialFlags
@@ -390,6 +406,13 @@ enum class QuestCompleteSpellType : uint32
Max
};
+enum class QuestRewardContextFlags : int32
+{
+ None = 0x0,
+ FirstCompletionBonus = 0x1,
+ RepeatCompletionBonus = 0x2
+};
+
struct QuestGreeting
{
uint16 EmoteType;
@@ -560,6 +583,7 @@ class TC_GAME_API Quest
void LoadConditionalConditionalRequestItemsText(Field* fields);
void LoadConditionalConditionalOfferRewardText(Field* fields);
void LoadConditionalConditionalQuestCompletionLog(Field* fields);
+ void LoadTreasurePickers(Field* fields);
uint32 XPValue(Player const* player) const;
static uint32 XPValue(Player const* player, uint32 contentTuningId, uint32 xpDifficulty, float xpMultiplier = 1.0f, int32 expansion = -1);
@@ -568,6 +592,7 @@ class TC_GAME_API Quest
uint32 GetMaxMoneyReward() const;
Optional<QuestTagType> GetQuestTag() const;
bool IsImportant() const;
+ bool IsMeta() const;
bool HasFlag(QuestFlags flag) const { return (_flags & uint32(flag)) != 0; }
bool HasFlagEx(QuestFlagsEx flag) const { return (_flagsEx & uint32(flag)) != 0; }
@@ -666,7 +691,7 @@ class TC_GAME_API Quest
uint32 GetRewardSkillId() const { return _rewardSkillId; }
uint32 GetRewardSkillPoints() const { return _rewardSkillPoints; }
uint32 GetRewardReputationMask() const { return _rewardReputationMask; }
- int32 GetTreasurePickerId() const { return _treasurePickerID; }
+ std::vector<int32> const& GetTreasurePickerId() const { return _treasurePickerID; }
int32 GetExpansion() const { return _expansion; }
int32 GetManagedWorldStateId() const { return _managedWorldStateID; }
int32 GetQuestSessionBonus() const { return _questSessionBonus; }
@@ -685,6 +710,7 @@ class TC_GAME_API Quest
bool IsPushedToPartyOnAccept() const { return HasSpecialFlag(QUEST_SPECIAL_FLAGS_AUTO_PUSH_TO_PARTY); }
uint32 CalculateHonorGain(uint8 level) const;
bool CanIncreaseRewardedQuestCounters() const;
+ bool IsResetByScheduler() const { return _resetByScheduler; }
// multiple values
std::vector<QuestRewardDisplaySpell> RewardDisplaySpell;
@@ -777,7 +803,7 @@ class TC_GAME_API Quest
uint32 _areaGroupID = 0;
int64 _limitTime = 0;
Trinity::RaceMask<uint64> _allowableRaces;
- int32 _treasurePickerID = 0;
+ std::vector<int32> _treasurePickerID;
int32 _expansion = 0;
int32 _managedWorldStateID = 0;
int32 _questSessionBonus = 0;
@@ -790,6 +816,7 @@ class TC_GAME_API Quest
std::string _portraitTurnInText;
std::string _portraitTurnInName;
std::string _questCompletionLog;
+ bool _resetByScheduler;
// quest_description_conditional
std::vector<QuestConditionalText> _conditionalQuestDescription;