diff options
-rw-r--r-- | src/game/AchievementMgr.cpp | 9 | ||||
-rw-r--r-- | src/game/AchievementMgr.h | 1 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 3 | ||||
-rw-r--r-- | src/game/Player.h | 3 |
4 files changed, 12 insertions, 4 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 278166f68e0..b45c4ad681e 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -1596,7 +1596,7 @@ void AchievementMgr::CompletedCriteriaFor(AchievementEntry const* achievement) return; // already completed and stored - if (m_completedAchievements.find(achievement->ID)!=m_completedAchievements.end()) + if (HasAchieved(achievement)) return; if (IsCompletedAchievement(achievement)) @@ -1735,7 +1735,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) if(!sWorld.getConfig(CONFIG_GM_ALLOW_ACHIEVEMENT_GAINS) && m_player->GetSession()->GetSecurity() > SEC_PLAYER) return; - if(achievement->flags & ACHIEVEMENT_FLAG_COUNTER || m_completedAchievements.find(achievement->ID)!=m_completedAchievements.end()) + if(achievement->flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement)) return; SendAchievementEarned(achievement); @@ -1894,6 +1894,11 @@ void AchievementMgr::BuildAllDataPacket(WorldPacket *data) *data << int32(-1); } +bool AchievementMgr::HasAchieved(AchievementEntry const* achievement) const +{ + return m_completedAchievements.find(achievement->ID) != m_completedAchievements.end(); +} + //========================================================== AchievementCriteriaEntryList const& AchievementGlobalMgr::GetAchievementCriteriaByType(AchievementCriteriaTypes type) { diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index fca2ec01c89..4c06a6fc8e2 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -240,6 +240,7 @@ class AchievementMgr void CheckAllAchievementCriteria(); void SendAllAchievementData(); void SendRespondInspectAchievements(Player* player); + bool HasAchieved(AchievementEntry const* achievement) const; Player* GetPlayer() { return m_player;} private: diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index e8967ef2f3e..d7970980cb9 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -47,6 +47,7 @@ #include "InstanceData.h" //for condition_instance_data #include "GossipDef.h" #include "Vehicle.h" +#include "AchievementMgr.h" INSTANTIATE_SINGLETON_1(ObjectMgr); @@ -7728,7 +7729,7 @@ bool PlayerCondition::Meets(Player const * player) const case CONDITION_ACHIEVEMENT: { AchievementEntry const* achievement = GetAchievementStore()->LookupEntry(value1); - return (achievement,1); + return player->GetAchievementMgr().HasAchieved(achievement); } case CONDITION_TEAM: return player->GetTeam() == value1; diff --git a/src/game/Player.h b/src/game/Player.h index bc89f800931..10e566c6664 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -2297,6 +2297,7 @@ class Player : public Unit, public GridObject<Player> void InitRunes(); AchievementMgr& GetAchievementMgr() { return m_achievementMgr; } + AchievementMgr const& GetAchievementMgr() const { return m_achievementMgr; } void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1 = 0, uint32 miscvalue2 = 0, Unit *unit = NULL, uint32 time = 0); void CompletedAchievement(AchievementEntry const* entry); @@ -2314,7 +2315,7 @@ class Player : public Unit, public GridObject<Player> uint32 GetChampioningFaction() const { return m_ChampioningFaction; } void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; } -Spell * m_spellModTakingSpell; + Spell * m_spellModTakingSpell; protected: uint32 m_AreaID; |