18#ifndef TRINITYCORE_QUEST_H
19#define TRINITYCORE_QUEST_H
31#include <unordered_set>
46#define MAX_QUEST_LOG_SIZE 35
48#define QUEST_ITEM_DROP_COUNT 4
49#define QUEST_REWARD_CHOICES_COUNT 6
50#define QUEST_REWARD_ITEM_COUNT 4
51#define QUEST_DEPLINK_COUNT 10
52#define QUEST_REWARD_REPUTATIONS_COUNT 5
53#define QUEST_EMOTE_COUNT 4
54#define QUEST_REWARD_CURRENCY_COUNT 4
55#define QUEST_REWARD_DISPLAY_SPELL_COUNT 3
159 None = 0x000000000000,
181 Quest = 0x000000400000,
583 struct QuestTemplateQueryResult;
587 explicit Quest(QuestTemplateQueryResult
const& questRecord);
593 void LoadRewardDisplaySpell(
Field* fields);
594 void LoadRewardChoiceItems(
Field* fields);
595 void LoadQuestDetails(
Field* fields);
596 void LoadQuestRequestItems(
Field* fields);
597 void LoadQuestOfferReward(
Field* fields);
598 void LoadQuestTemplateAddon(
Field* fields);
599 void LoadQuestMailSender(
Field* fields);
600 void LoadQuestObjective(
Field* fields);
601 void LoadQuestObjectiveVisualEffect(
Field* fields);
602 void LoadConditionalConditionalQuestDescription(
Field* fields);
603 void LoadConditionalConditionalRequestItemsText(
Field* fields);
604 void LoadConditionalConditionalOfferRewardText(
Field* fields);
605 void LoadConditionalConditionalQuestCompletionLog(
Field* fields);
606 void LoadTreasurePickers(
Field* fields);
607 void LoadRewardHouseRoom(
Field* fields);
608 void LoadRewardHouseDecor(
Field* fields);
613 uint32 MaxMoneyValue()
const;
614 uint32 GetMaxMoneyReward()
const;
616 bool IsImportant()
const;
634 static bool IsTakingQuestEnabled(
uint32 questId);
689 uint32 GetRewMoneyMaxLevel()
const;
706 bool IsAutoAccept()
const;
707 bool IsTurnIn()
const;
733 bool IsRaidQuest(
Difficulty difficulty)
const;
734 bool IsAllowedInRaid(
Difficulty difficulty)
const;
738 bool CanIncreaseRewardedQuestCounters()
const;
743 std::array<uint32, QUEST_REWARD_ITEM_COUNT> RewardItemId = { };
744 std::array<uint32, QUEST_REWARD_ITEM_COUNT> RewardItemCount = { };
745 std::array<uint32, QUEST_ITEM_DROP_COUNT> ItemDrop = { };
746 std::array<uint32, QUEST_ITEM_DROP_COUNT> ItemDropQuantity = { };
747 std::array<LootItemType, QUEST_REWARD_CHOICES_COUNT> RewardChoiceItemType = { };
748 std::array<uint32, QUEST_REWARD_CHOICES_COUNT> RewardChoiceItemId = { };
749 std::array<uint32, QUEST_REWARD_CHOICES_COUNT> RewardChoiceItemCount = { };
750 std::array<uint32, QUEST_REWARD_CHOICES_COUNT> RewardChoiceItemDisplayId = { };
751 std::array<uint32, QUEST_REWARD_REPUTATIONS_COUNT> RewardFactionId = { };
752 std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> RewardFactionValue = { };
753 std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> RewardFactionOverride = { };
754 std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> RewardFactionCapIn = { };
755 std::array<uint32, QUEST_REWARD_CURRENCY_COUNT> RewardCurrencyId = { };
756 std::array<uint32, QUEST_REWARD_CURRENCY_COUNT> RewardCurrencyCount = { };
758 std::array<uint32, QUEST_EMOTE_COUNT> DetailsEmote = { };
759 std::array<uint32, QUEST_EMOTE_COUNT> DetailsEmoteDelay = { };
760 std::array<int32, QUEST_EMOTE_COUNT> OfferRewardEmote = { };
761 std::array<uint32, QUEST_EMOTE_COUNT> OfferRewardEmoteDelay = { };
769 void InitializeQueryData();
798 float _rewardXPMultiplier = 0.f;
800 float _rewardMoneyMultiplier = 0.f;
807 float _rewardArtifactXPMultiplier = 0.f;
824 int32 _questGiverPortraitModelSceneId = 0;
std::shared_ptr< ResultSet > QueryResult
#define DEFINE_ENUM_FLAG(enumType)
std::optional< T > Optional
Optional helper class to wrap optional values within.
@ QUEST_ERR_FAILED_EXPANSION
@ QUEST_ERR_FAILED_WRONG_RACE
@ QUEST_ERR_ONLY_ONE_TIMED
@ QUEST_ERR_ALREADY_DONE_DAILY
@ QUEST_ERR_FAILED_LOW_LEVEL
@ QUEST_ERR_FAILED_NOT_ENOUGH_MONEY
@ QUEST_ERR_FAILED_MISSING_ITEMS
@ QUEST_ERR_HAS_IN_PROGRESS
@ PrerequisiteToRecipient
@ NotGarrisonOwnerToRecipient
@ NewPlayerExperienceToRecipient
@ DifferentServerDailyToRecipient
@ WrongCovenantToRecipient
@ WrongFactionToRecipient
std::vector< QuestObjective > QuestObjectives
@ QUEST_TRSKILL_BLACKSMITHING
@ QUEST_TRSKILL_TAILORING
@ QUEST_TRSKILL_HERBALISM
@ QUEST_TRSKILL_JEWELCRAFTING
@ QUEST_TRSKILL_ENGINEERING
@ QUEST_TRSKILL_ENCHANTING
@ QUEST_TRSKILL_LEATHERWORKING
@ QUEST_OBJECTIVE_DEFEATBATTLEPET
@ QUEST_OBJECTIVE_WINPVPPETBATTLES
@ QUEST_OBJECTIVE_INCREASE_REPUTATION
@ MAX_QUEST_OBJECTIVE_TYPE
@ QUEST_OBJECTIVE_HAVE_CURRENCY
@ QUEST_OBJECTIVE_WINPETBATTLEAGAINSTNPC
@ QUEST_OBJECTIVE_MONSTER
@ QUEST_OBJECTIVE_KILL_WITH_LABEL
@ QUEST_OBJECTIVE_CRITERIA_TREE
@ QUEST_OBJECTIVE_OBTAIN_CURRENCY
@ QUEST_OBJECTIVE_PROGRESS_BAR
@ QUEST_OBJECTIVE_UNK_1127
@ QUEST_OBJECTIVE_PLAYERKILLS
@ QUEST_OBJECTIVE_MAX_REPUTATION
@ QUEST_OBJECTIVE_AREA_TRIGGER_EXIT
@ QUEST_OBJECTIVE_AREATRIGGER
@ QUEST_OBJECTIVE_CURRENCY
@ QUEST_OBJECTIVE_LEARNSPELL
@ QUEST_OBJECTIVE_AREA_TRIGGER_ENTER
@ QUEST_OBJECTIVE_GAMEOBJECT
@ QUEST_OBJECTIVE_MIN_REPUTATION
@ MetaQuestRewardCompletePOI
@ RepeatableRewardCompleteNoPOI
@ MetaQuestRewardCompleteNoPOI
@ JourneyRewardCompletePOI
@ ImportantQuestRewardCompletePOI
@ CovenantCallingRewardCompletePOI
@ LegendaryRewardCompleteNoPOI
@ LegendaryRewardCompletePOI
@ LegendaryQuestAccountCompleted
@ ImportantQuestRewardCompleteNoPOI
@ TrivialRepeatableTurnin
@ ImportantQuestAccountCompleted
@ JourneyRewardCompleteNoPOI
@ CovenantCallingRewardCompleteNoPOI
@ RepeatableRewardCompletePOI
@ JourneyQuestAccountCompleted
@ QUEST_OBJECTIVE_FLAG_2_QUEST_BOUND_ITEM
#define MAX_QUEST_LOG_SIZE
@ QUEST_OBJECTIVE_FLAG_SEQUENCED
@ QUEST_OBJECTIVE_FLAG_KILL_PLAYERS_SAME_FACTION
@ QUEST_OBJECTIVE_FLAG_IGNORE_SOULBOUND_ITEMS
@ QUEST_OBJECTIVE_FLAG_PRESERVE_QUEST_ITEMS
@ QUEST_OBJECTIVE_FLAG_HIDDEN
@ QUEST_OBJECTIVE_FLAG_PART_OF_PROGRESS_BAR
@ QUEST_OBJECTIVE_FLAG_TRACKED_ON_MINIMAP
@ QUEST_OBJECTIVE_FLAG_NO_SHARE_PROGRESS
@ QUEST_OBJECTIVE_FLAG_OPTIONAL
@ QUEST_OBJECTIVE_FLAG_HIDE_CREDIT_MSG
@ QUEST_FLAGS_EX_NO_ITEM_REMOVAL
@ QUEST_FLAGS_EX_LEGENDARY
@ QUEST_FLAGS_EX_DISPLAY_AS_OBJECTIVE
@ QUEST_FLAGS_EX_NO_SPELL_COMPLETE_EFFECTS
@ QUEST_FLAGS_EX_KEEP_PROGRESS_ON_FACTION_CHANGE
@ QUEST_FLAGS_EX_DISPLAY_QUEST_LINE
@ QUEST_FLAGS_EX_REWARDS_IGNORE_CAPS
@ QUEST_FLAGS_EX_DENY_PLAYER_QUESTGIVER
@ QUEST_FLAGS_EX_SUPPRESS_SPELL_LEARN_TEXT
@ QUEST_FLAGS_EX_AUTO_PUSH
@ QUEST_FLAGS_EX_DO_NOT_TOAST_HONOR_REWARD
@ QUEST_FLAGS_EX_SUPPRESS_GOSSIP_ACCEPT
@ QUEST_FLAGS_EX_DISPLAY_AS_DAILY
@ QUEST_FLAGS_EX_INTERNAL_BUILDS_ONLY
@ QUEST_FLAGS_EX_SUPPRESS_GREETINGS_ON_ACCEPT
@ QUEST_FLAGS_EX_REMOVE_ON_PERIODIC_RESET
@ QUEST_FLAGS_EX_PUSH_TEAM_QUEST_USING_MAP_CONTROLLER
@ QUEST_FLAGS_EX_NO_CREDIT_FOR_PROXY
@ QUEST_FLAGS_EX_UPDATE_ZONE_AURAS
@ QUEST_FLAGS_EX_IS_WORLD_QUEST
@ QUEST_FLAGS_EX_DISPLAY_CLASS_CHOICE_REWARDS
@ QUEST_FLAGS_EX_DISPLAY_SPEC_CHOICE_REWARDS
@ QUEST_FLAGS_EX_NO_ABANDON_ONCE_BEGUN
@ QUEST_FLAGS_EX_SUPPRESS_GOSSIP_COMPLETE
@ QUEST_FLAGS_EX_REMOVE_ON_WEEKLY_RESET
@ QUEST_FLAGS_EX_NO_GUILD_XP
@ QUEST_FLAGS_EX_RECAST_ACCEPT_SPELL_ON_LOGIN
@ QUEST_FLAGS_EX_NOT_IGNORABLE
@ QUEST_FLAGS_EX_RESET_CACHE_ON_ACCEPT
@ QUEST_FLAGS_EX_KEEP_REPEATABLE_QUEST_ON_FACTION_CHANGE
@ QUEST_FLAGS_EX_ALLOW_ALL_IN_GARRISON
constexpr QuestGiverStatus QuestGiverStatusFutureMask
@ QUEST_STATUS_INCOMPLETE
@ QUEST_FLAGS_EX2_HIDE_REQUIRED_ITEMS_PRE_TURN_IN
@ QUEST_FLAGS_EX2_DISPLAY_TIME_REMAINING
@ QUEST_FLAGS_EX2_RESET_ON_GAME_MILESTONE
@ QUEST_FLAGS_EX2_NOT_REPLAYABLE
@ QUEST_FLAGS_EX2_AWARD_HIGHEST_PROFESSION
@ QUEST_FLAGS_EX2_HIDE_REQUIRED_ITEMS_ON_TURN_IN
@ QUEST_FLAGS_EX2_ABANDON_ON_DISABLE
@ QUEST_FLAGS_EX2_SUPPRESS_GREETINGS_ON_COMPLETE
@ QUEST_FLAGS_EX2_SKIP_DISABLED_CHECK
@ QUEST_FLAGS_EX2_ENFORCE_MAXIMUM_QUEST_LEVEL
@ QUEST_FLAGS_EX2_HIDE_TASK_ON_MAIN_MAP
@ QUEST_FLAGS_EX2_NO_REPLAY_REWARDS
@ QUEST_FLAGS_EX2_DISABLE_WAYPOINT_PATHING
@ QUEST_FLAGS_EX2_IGNORE_SOULBOUND_ITEMS
@ QUEST_FLAGS_EX2_BONUS_LOOT_ALWAYS
@ QUEST_FLAGS_EX2_RESET_ON_MYTHIC_PLUS_SEASON
@ QUEST_FLAGS_EX2_FORCE_STARTING_LOC_ON_ZONE_MAP
@ QUEST_FLAGS_EX2_WAR_MODE_REWARDS_OPT_OUT
@ QUEST_FLAGS_EX2_CONTENT_ALERT
@ QUEST_FLAGS_EX2_RESET_ON_PVP_SEASON
@ QUEST_FLAGS_EX2_DONT_DEFER_START_EFFECTS
@ QUEST_FLAGS_EX2_HIDE_TASK_IN_TRACKER
@ QUEST_FLAGS_EX2_CLEAR_TASK_PROGRESS_WHEN_ABANDONED
@ QUEST_FLAGS_EX2_ENABLE_OVERRIDE_SORT_ORDER
@ QUEST_FLAGS_EX2_BONUS_LOOT_NEVER
@ QUEST_FLAGS_DISABLE_COMPLETION_TEXT
@ QUEST_FLAGS_HIDE_REWARD_POI
@ QUEST_FLAGS_AUTO_COMPLETE
@ QUEST_FLAGS_REMOVE_SURPLUS_ITEMS
@ QUEST_FLAGS_LAUNCH_GOSSIP_ACCEPT
@ QUEST_FLAGS_DISPLAY_ITEM_IN_TRACKER
@ QUEST_FLAGS_HAS_CONDITION
@ QUEST_FLAGS_COMPLETION_AREA_TRIGGER
@ QUEST_FLAGS_RAID_GROUP_OK
@ QUEST_FLAGS_AUTO_ACCEPT
@ QUEST_FLAGS_UPDATE_PHASESHIFT
@ QUEST_FLAGS_COMPLETION_NO_DEATH
@ QUEST_FLAGS_SOR_WHITELIST
@ QUEST_FLAGS_HIDE_REWARD
@ QUEST_FLAGS_WAR_MODE_REWARDS_OPT_IN
@ QUEST_FLAGS_SHOW_ITEM_WHEN_COMPLETED
@ QUEST_FLAGS_PORTRAIT_IN_QUEST_LOG
@ QUEST_FLAGS_PLAYER_CAST_COMPLETE
@ QUEST_FLAGS_DEPRECATE_REPUTATION
@ QUEST_FLAGS_COMPLETION_EVENT
@ QUEST_FLAGS_ITEMS_GLOW_WHEN_COMPLETE
@ QUEST_FLAGS_LAUNCH_GOSSIP_COMPLETE
@ QUEST_FLAGS_FAIL_ON_LOGOUT
@ QUEST_FLAGS_PLAYER_CAST_ACCEPT
@ QUEST_FLAGS_NO_MONEY_FOR_XP
@ QUEST_FLAGS_TRACKING_EVENT
@ QUEST_SPECIAL_FLAGS_SEQUENCED_OBJECTIVES
@ QUEST_SPECIAL_FLAGS_AUTO_ACCEPT
@ QUEST_SPECIAL_FLAGS_REPEATABLE
@ QUEST_SPECIAL_FLAGS_DB_ALLOWED
@ QUEST_SPECIAL_FLAGS_AUTO_PUSH_TO_PARTY
@ QUEST_SPECIAL_FLAGS_DF_QUEST
@ QUEST_SPECIAL_FLAGS_NONE
@ QUEST_SPECIAL_FLAGS_MONTHLY
@ QUEST_SORT_LOVE_IS_IN_THE_AIR
@ QUEST_SORT_LUNAR_FESTIVAL
Class used to access individual fields of database query result.
bool IsResetByScheduler() const
int32 GetRewArenaPoints() const
std::string _areaDescription
std::vector< QuestConditionalText > _conditionalRequestItemsText
std::string _portraitTurnInName
float GetXPMultiplier() const
uint32 GetRewSpell() const
uint16 GetEventIdForQuest() const
uint32 GetSpecialFlags() const
Trinity::unique_weak_ptr< Quest > _weakRef
uint32 GetFlagsEx2() const
uint32 GetRewMailSenderEntry() const
uint32 GetRewTitle() const
std::string const & GetQuestCompletionLog() const
std::vector< uint32 > DependentBreadcrumbQuests
uint32 GetRewardSkillId() const
uint32 GetSoundAccept() const
uint32 GetArtifactXPDifficulty() const
std::string const & GetPortraitGiverName() const
int32 GetQuestSessionBonus() const
uint32 GetRewMailTemplateId() const
bool HasQuestObjectiveType(QuestObjectiveType type) const
std::string const & GetPortraitTurnInName() const
bool HasSpecialFlag(QuestSpecialFlags flag) const
float GetArtifactXPMultiplier() const
uint32 GetMaxLevel() const
std::string const & GetRequestItemsText() const
int32 GetRequiredMaxRepValue() const
int32 GetRequiredMinRepValue() const
bool IsUnavailable() const
int32 GetRewardFavor() const
std::string _questDescription
int32 GetExpansion() const
std::vector< QuestConditionalText > const & GetConditionalQuestCompletionLog() const
uint32 GetContentTuningId() const
uint32 GetQuestPackageID() const
std::vector< int32 > _rewardHouseDecorIDs
std::string _portraitGiverText
uint32 GetRewardReputationMask() const
uint32 GetQuestGiverPortrait() const
uint32 GetPOIContinent() const
uint32 GetSrcItemCount() const
uint32 GetQuestTurnInPortrait() const
QuestObjectives Objectives
uint32 GetXPDifficulty() const
bool IsPushedToPartyOnAccept() const
std::string _requestItemsText
uint32 GetSrcSpell() const
bool IsRepeatable() const
int32 GetZoneOrSort() const
int64 GetLimitTime() const
std::vector< int32 > const & GetTreasurePickerId() const
std::vector< int32 > const & GetRewardHouseRoomIds() const
int32 GetManagedWorldStateId() const
Quest & operator=(Quest &&)=delete
uint32 _rewardReputationMask
uint32 GetRewKillHonor() const
Trinity::RaceMask< std::array< int32, 2 > > _allowableRaces
std::bitset< MAX_QUEST_OBJECTIVE_TYPE > _usedQuestObjectiveTypes
std::vector< QuestConditionalText > _conditionalQuestDescription
uint32 GetArtifactCategoryId() const
Quest & operator=(Quest const &)=delete
uint32 GetRequiredMinRepFaction() const
std::string _portraitTurnInText
int32 GetPrevQuestId() const
std::string const & GetLogTitle() const
uint32 GetQuestType() const
std::vector< uint32 > DependentPreviousQuests
uint32 GetQuestId() const
std::string _logDescription
uint32 GetRequiredSkillValue() const
Trinity::RaceMask< std::array< int32, 2 > > GetAllowableRaces() const
std::string _portraitGiverName
uint32 GetIncompleteEmoteDelay() const
std::string const & GetPortraitGiverText() const
bool HasFlagEx2(QuestFlagsEx2 flag) const
uint32 GetRewMailDelaySecs() const
uint32 GetQuestInfoID() const
int32 GetExclusiveGroup() const
std::vector< QuestConditionalText > const & GetConditionalOfferRewardText() const
uint32 GetCompleteEmoteDelay() const
std::vector< QuestConditionalText > _conditionalQuestCompletionLog
int32 GetBreadcrumbForQuestId() const
uint32 GetFlagsEx3() const
int32 GetQuestGiverPortraitMount() const
bool IsWorldQuest() const
std::string const & GetPortraitTurnInText() const
uint32 GetFlagsEx() const
uint32 GetAreaGroupID() const
std::string const & GetOfferRewardText() const
void SetEventIdForQuest(uint16 eventId)
int32 GetQuestGiverPortraitModelSceneId() const
std::vector< QuestConditionalText > const & GetConditionalRequestItemsText() const
uint32 GetSoundTurnIn() const
Trinity::unique_weak_ptr< Quest > GetWeakPtr() const
std::vector< int32 > _treasurePickerID
std::string const & GetLogDescription() const
void SetSpecialFlag(QuestSpecialFlags flag)
std::vector< int32 > _rewardHouseRoomIDs
uint32 GetScriptId() const
uint32 GetRewItemsCount() const
std::string const & GetAreaDescription() const
float GetMoneyMultiplier() const
uint32 GetRequiredSkill() const
uint32 GetRewChoiceItemsCount() const
uint32 GetIncompleteEmote() const
uint32 GetRewHonor() const
uint32 GetSrcItemId() const
uint32 GetNextQuestId() const
std::vector< QuestConditionalText > _conditionalOfferRewardText
bool IsDailyOrWeekly() const
std::unique_ptr< WorldPacket[]> QueryData
std::string _questCompletionLog
uint32 GetRewMoneyDifficulty() const
uint32 GetCompleteEmote() const
QuestObjectives const & GetObjectives() const
bool HasFlagEx(QuestFlagsEx flag) const
std::string const & GetQuestDescription() const
uint32 GetAllowableClasses() const
bool HasFlag(QuestFlags flag) const
std::string _offerRewardText
uint32 GetRewardSkillPoints() const
std::vector< QuestRewardDisplaySpell > RewardDisplaySpell
uint32 GetPOIPriority() const
Quest(Quest const &)=delete
std::vector< QuestConditionalText > const & GetConditionalQuestDescription() const
std::vector< int32 > const & GetRewardRewardHouseDecorIds() const
uint32 GetRequiredMaxRepFaction() const
uint32 GetNextQuestInChain() const
uint32 GetSuggestedPlayers() const
Trinity::unique_trackable_ptr companion class, replicating what std::weak_ptr is to std::shared_ptr.
int32 QuestgiverCreatureId
std::vector< std::string > Text
std::vector< std::string > Greeting
QuestGreeting(uint16 emoteType, uint32 emoteDelay, std::string text)
Optional< uint32 > SpellId
Optional< uint32 > ConversationId
Optional< uint32 > GameEventId
bool IsStoringFlag() const
static constexpr bool CanAlwaysBeProgressedInRaid(QuestObjectiveType type)
QuestObjectiveAction * CompletionEffect
bool IsStoringValue() const
std::vector< int32 > VisualEffects
std::vector< std::string > Description
std::vector< std::string > RewardText
std::vector< std::string > CompletionText
QuestCompleteSpellType Type
QuestRewardDisplaySpell(uint32 spellId, uint32 playerConditionId, QuestCompleteSpellType type)
QuestRewardDisplaySpell()
std::unordered_set< std::pair< int8, uint32 > > SpawnTrackingList
std::vector< std::string > PortraitTurnInText
std::vector< std::string > QuestCompletionLog
std::vector< std::string > LogTitle
std::vector< std::string > PortraitGiverName
std::vector< std::string > PortraitTurnInName
std::vector< std::string > QuestDescription
std::vector< std::string > LogDescription
std::vector< std::string > PortraitGiverText
std::vector< std::string > AreaDescription