aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrudor <erikstrandberg93@hotmail.com>2016-11-07 19:09:49 +0100
committerShauren <shauren.trinity@gmail.com>2016-11-07 19:09:49 +0100
commit0abb9873ec3798b6476400c8d283a6410d9418fe (patch)
tree5422ad47edc03dbfc8fb94c8a3a86534b99931f3
parentf9b4f686c83bcc97fad84f1d8775963c4a108541 (diff)
Core/Achievements: Add missing part of #18034
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp42
1 files changed, 27 insertions, 15 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 1d0d061a6db..1a6d058345b 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -63,25 +63,29 @@ uint32 AchievementMgr::GetAchievementPoints() const
bool AchievementMgr::CanUpdateCriteriaTree(Criteria const* criteria, CriteriaTree const* tree, Player* referencePlayer) const
{
- if (HasAchieved(tree->Achievement->ID))
+ AchievementEntry const* achievement = tree->Achievement;
+ if (!achievement)
+ return false;
+
+ if (HasAchieved(achievement->ID))
{
TC_LOG_TRACE("criteria.achievement", "AchievementMgr::CanUpdateCriteriaTree: (Id: %u Type %s Achievement %u) Achievement already earned",
- criteria->ID, CriteriaMgr::GetCriteriaTypeString(criteria->Entry->Type), tree->Achievement->ID);
+ criteria->ID, CriteriaMgr::GetCriteriaTypeString(criteria->Entry->Type), achievement->ID);
return false;
}
- if (tree->Achievement->MapID != -1 && referencePlayer->GetMapId() != uint32(tree->Achievement->MapID))
+ if (achievement->MapID != -1 && referencePlayer->GetMapId() != uint32(achievement->MapID))
{
TC_LOG_TRACE("criteria.achievement", "AchievementMgr::CanUpdateCriteriaTree: (Id: %u Type %s Achievement %u) Wrong map",
- criteria->ID, CriteriaMgr::GetCriteriaTypeString(criteria->Entry->Type), tree->Achievement->ID);
+ criteria->ID, CriteriaMgr::GetCriteriaTypeString(criteria->Entry->Type), achievement->ID);
return false;
}
- if ((tree->Achievement->Faction == ACHIEVEMENT_FACTION_HORDE && referencePlayer->GetTeam() != HORDE) ||
- (tree->Achievement->Faction == ACHIEVEMENT_FACTION_ALLIANCE && referencePlayer->GetTeam() != ALLIANCE))
+ if ((achievement->Faction == ACHIEVEMENT_FACTION_HORDE && referencePlayer->GetTeam() != HORDE) ||
+ (achievement->Faction == ACHIEVEMENT_FACTION_ALLIANCE && referencePlayer->GetTeam() != ALLIANCE))
{
TC_LOG_TRACE("criteria.achievement", "AchievementMgr::CanUpdateCriteriaTree: (Id: %u Type %s Achievement %u) Wrong faction",
- criteria->ID, CriteriaMgr::GetCriteriaTypeString(criteria->Entry->Type), tree->Achievement->ID);
+ criteria->ID, CriteriaMgr::GetCriteriaTypeString(criteria->Entry->Type), achievement->ID);
return false;
}
@@ -110,27 +114,35 @@ bool AchievementMgr::CanCompleteCriteriaTree(CriteriaTree const* tree)
void AchievementMgr::CompletedCriteriaTree(CriteriaTree const* tree, Player* referencePlayer)
{
+ AchievementEntry const* achievement = tree->Achievement;
+ if (!achievement)
+ return;
+
// counter can never complete
- if (tree->Achievement->Flags & ACHIEVEMENT_FLAG_COUNTER)
+ if (achievement->Flags & ACHIEVEMENT_FLAG_COUNTER)
return;
// already completed and stored
- if (HasAchieved(tree->Achievement->ID))
+ if (HasAchieved(achievement->ID))
return;
- if (IsCompletedAchievement(tree->Achievement))
- CompletedAchievement(tree->Achievement, referencePlayer);
+ if (IsCompletedAchievement(achievement))
+ CompletedAchievement(achievement, referencePlayer);
}
void AchievementMgr::AfterCriteriaTreeUpdate(CriteriaTree const* tree, Player* referencePlayer)
{
+ AchievementEntry const* achievement = tree->Achievement;
+ if (!achievement)
+ return;
+
// 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 (achievement->Flags & ACHIEVEMENT_FLAG_SUMM)
+ if (IsCompletedAchievement(achievement))
+ CompletedAchievement(achievement, referencePlayer);
- if (std::vector<AchievementEntry const*> const* achRefList = sAchievementMgr->GetAchievementByReferencedId(tree->Achievement->ID))
+ if (std::vector<AchievementEntry const*> const* achRefList = sAchievementMgr->GetAchievementByReferencedId(achievement->ID))
for (AchievementEntry const* refAchievement : *achRefList)
if (IsCompletedAchievement(refAchievement))
CompletedAchievement(refAchievement, referencePlayer);