aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/AchievementMgr.cpp9
-rw-r--r--src/game/AchievementMgr.h1
-rw-r--r--src/game/ObjectMgr.cpp3
-rw-r--r--src/game/Player.h3
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;