79 uint32 objectiveId = (*objectiveResult)[0].GetUInt32();
87 }
while (objectiveResult->NextRow());
95 Field* fields = criteriaResult->Fetch();
104 TC_LOG_ERROR(
"criteria.quest",
"Non-existing quest objective criteria {} data has been removed from the table `character_queststatus_objectives_criteria_progress`.", criteriaId);
118 progress.
Date = date;
120 }
while (criteriaResult->NextRow());
136 stmt->
setUInt32(1, completedObjectiveId);
145 if (!criteriaProgres.second.Changed)
150 stmt->
setUInt32(1, criteriaProgres.first);
153 if (criteriaProgres.second.Counter)
157 stmt->
setUInt32(1, criteriaProgres.first);
158 stmt->
setUInt64(2, criteriaProgres.second.Counter);
159 stmt->
setInt64(3, criteriaProgres.second.Date);
163 criteriaProgres.second.Changed =
false;
194 criteriaUpdate.
CriteriaID = criteriaProgres.first;
195 criteriaUpdate.
Quantity = criteriaProgres.second.Counter;
197 criteriaUpdate.
Flags = 0;
214 TC_LOG_INFO(
"criteria.quest",
"QuestObjectiveCriteriaMgr::CompletedObjective({}). {}", questObjective->
ID,
GetOwnerInfo());
231 criteriaUpdate.
Flags = 0;
233 criteriaUpdate.
Flags = timedCompleted ? 1 : 0;
258 TC_LOG_TRACE(
"criteria.quest",
"QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree: (Id: {} Type {} Quest Objective {}) Objective already completed",
265 TC_LOG_TRACE(
"criteria.quest",
"QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree: (Id: {} Type {} Quest Objective {}) Not on quest",
273 TC_LOG_TRACE(
"criteria.quest",
"QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree: (Id: {} Type {} Quest Objective {}) Quest cannot be completed in raid group",
281 TC_LOG_TRACE(
"criteria.quest",
"QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree: (Id: {} Type {} Quest Objective {}) Objective not completable",
321 return sCriteriaMgr->GetQuestObjectiveCriteriaByType(type);
@ CHAR_DEL_INVALID_QUEST_PROGRESS_CRITERIA
@ CHAR_DEL_CHAR_QUESTSTATUS_OBJECTIVES_CRITERIA_PROGRESS
@ CHAR_INS_CHAR_QUESTSTATUS_OBJECTIVES_CRITERIA
@ CHAR_DEL_CHAR_QUESTSTATUS_OBJECTIVES_CRITERIA
@ CHAR_DEL_CHAR_QUESTSTATUS_OBJECTIVES_CRITERIA_PROGRESS_BY_CRITERIA
@ CHAR_INS_CHAR_QUESTSTATUS_OBJECTIVES_CRITERIA_PROGRESS
std::vector< Criteria const * > CriteriaList
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
std::chrono::seconds Seconds
Seconds shorthand typedef.
#define ASSERT_NOTNULL(pointer)
#define TC_LOG_ERROR(filterType__, message__,...)
#define TC_LOG_INFO(filterType__, message__,...)
#define TC_LOG_TRACE(filterType__, message__,...)
#define MAX_QUEST_LOG_SIZE
@ QUEST_STATUS_INCOMPLETE
ObjectGuid const & GetGUID() const
virtual bool CanUpdateCriteriaTree(Criteria const *criteria, CriteriaTree const *tree, Player *referencePlayer) const
CriteriaProgressMap _criteriaProgress
void RemoveCriteriaProgress(Criteria const *criteria)
virtual bool CanCompleteCriteriaTree(CriteriaTree const *tree)
bool IsCompletedCriteriaTree(CriteriaTree const *tree)
void UpdateCriteria(CriteriaType type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, WorldObject const *ref=nullptr, Player *referencePlayer=nullptr)
static char const * GetCriteriaTypeString(CriteriaType type)
static void WalkCriteriaTree(CriteriaTree const *tree, Func const &func)
static std::span< CriteriaType const > GetRetroactivelyUpdateableCriteriaTypes()
Class used to access individual fields of database query result.
uint64 GetUInt64() const noexcept
uint32 GetUInt32() const noexcept
int64 GetInt64() const noexcept
Difficulty GetDifficultyID() const
LowType GetCounter() const
std::string ToString() const
void SendDirectMessage(WorldPacket const *data) const
uint16 FindQuestSlot(uint32 quest_id) const
bool HasAchieved(uint32 achievementId) const
WorldSession * GetSession() const
bool IsQuestObjectiveCompletable(uint16 slot, Quest const *quest, QuestObjective const &objective) const
QuestStatus GetQuestStatus(uint32 quest_id) const
Group * GetGroup(Optional< uint8 > partyIndex)
void KillCreditCriteriaTreeObjective(QuestObjective const &questObjective)
void setUInt32(uint8 index, uint32 value)
void setInt64(uint8 index, int64 value)
void setUInt64(uint8 index, uint64 value)
void SendCriteriaProgressRemoved(uint32 criteriaId) override
void SaveToDB(CharacterDatabaseTransaction trans)
void SendCriteriaUpdate(Criteria const *entry, CriteriaProgress const *progress, Seconds timeElapsed, bool timedCompleted) const override
bool RequiredAchievementSatisfied(uint32 achievementId) const override
void CheckAllQuestObjectiveCriteria(Player *referencePlayer)
void CompletedCriteriaTree(CriteriaTree const *tree, Player *referencePlayer) override
std::unordered_set< uint32 > _completedObjectives
static void DeleteFromDB(ObjectGuid const &guid)
std::string GetOwnerInfo() const override
void SendAllData(Player const *receiver) const override
void CompletedObjective(QuestObjective const *questObjective, Player *referencePlayer)
void SendPacket(WorldPacket const *data) const override
CriteriaList const & GetCriteriaByType(CriteriaType type, uint32 asset) const override
bool CanUpdateCriteriaTree(Criteria const *criteria, CriteriaTree const *tree, Player *referencePlayer) const override
~QuestObjectiveCriteriaMgr()
bool CanCompleteCriteriaTree(CriteriaTree const *tree) override
bool HasCompletedObjective(QuestObjective const *questObjective) const
QuestObjectiveCriteriaMgr(Player *owner)
void ResetCriteriaTree(QuestObjective const *questObjective)
void LoadFromDB(PreparedQueryResult objectiveResult, PreparedQueryResult criteriaResult)
bool IsAllowedInRaid(Difficulty difficulty) const
std::string const & GetName() const
WorldPacket const * Write() override
WorldPacket const * Write() override
Duration< Seconds > ElapsedTime
Minutes GetTimezoneOffset() const
void SetUtcTimeFromUnixTime(std::time_t unixTime)
std::string StringFormat(FormatString< Args... > fmt, Args &&... args) noexcept
Default TC string format function.
struct advstd::ranges::Contains contains
::Criteria const * Criteria
::QuestObjective const * QuestObjective
CriteriaEntry const * Entry