void AchievementMgr::AfterCriteriaTreeUpdate(CriteriaTree const* tree, Player* referencePlayer) { // check again the completeness for SUMM and REQ COUNT achievements, // as they don't depend on the completed criteria but on the sum of the progress of each individual criteria if (tree->Achievement->Flags & ACHIEVEMENT_FLAG_SUMM) if (IsCompletedAchievement(tree->Achievement)) CompletedAchievement(tree->Achievement, referencePlayer); if (std::vector<AchievementEntry const*> const* achRefList = sAchievementMgr->GetAchievementByReferencedId(tree->Achievement->ID)) for (AchievementEntry const* refAchievement : *achRefList) if (IsCompletedAchievement(refAchievement)) CompletedAchievement(refAchievement, referencePlayer); }
void AchievementMgr::CompletedCriteriaTree(CriteriaTree const* tree, Player* referencePlayer) { // counter can never complete if (tree->Achievement->Flags & ACHIEVEMENT_FLAG_COUNTER) return; // already completed and stored if (HasAchieved(tree->Achievement->ID)) return; if (IsCompletedAchievement(tree->Achievement)) CompletedAchievement(tree->Achievement, referencePlayer); }
void AchievementMgr::CompletedCriteria(AchievementCriteriaEntry const* criteria) { AchievementEntry const* achievement = sAchievementStore.LookupEntry(criteria->referredAchievement); if(!achievement) return; // counter can never complete if(achievement->flags & ACHIEVEMENT_FLAG_COUNTER) return; if(criteria->completionFlag & ACHIEVEMENT_CRITERIA_COMPLETE_FLAG_ALL || GetAchievementCompletionState(achievement)==ACHIEVEMENT_COMPLETED_COMPLETED_NOT_STORED) { CompletedAchievement(achievement); } }