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;
186 criteriaUpdate.
CriteriaID = criteriaProgres.first;
187 criteriaUpdate.
Quantity = criteriaProgres.second.Counter;
189 criteriaUpdate.
Flags = 0;
206 TC_LOG_INFO(
"criteria.quest",
"QuestObjectiveCriteriaMgr::CompletedObjective({}). {}", questObjective->
ID,
GetOwnerInfo());
223 criteriaUpdate.
Flags = 0;
225 criteriaUpdate.
Flags = timedCompleted ? 1 : 0;
250 TC_LOG_TRACE(
"criteria.quest",
"QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree: (Id: {} Type {} Quest Objective {}) Objective already completed",
257 TC_LOG_TRACE(
"criteria.quest",
"QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree: (Id: {} Type {} Quest Objective {}) Not on quest",
265 TC_LOG_TRACE(
"criteria.quest",
"QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree: (Id: {} Type {} Quest Objective {}) Quest cannot be completed in raid group",
273 TC_LOG_TRACE(
"criteria.quest",
"QuestObjectiveCriteriaMgr::CanUpdateCriteriaTree: (Id: {} Type {} Quest Objective {}) Objective not completable",
311 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_TRACE(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
#define MAX_QUEST_LOG_SIZE
@ QUEST_STATUS_INCOMPLETE
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)
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)
Class used to access individual fields of database query result.
Difficulty GetDifficultyID() const
LowType GetCounter() const
std::string ToString() const
static ObjectGuid GetGUID(Object const *o)
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 setInt64(const uint8 index, const int64 value)
void setUInt32(const uint8 index, const uint32 value)
void setUInt64(const uint8 index, const 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(uint32 criteriaTreeId)
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)
Default TC string format function.
::Criteria const * Criteria
::QuestObjective const * QuestObjective
CriteriaEntry const * Entry