Properly implemented CONDITION_ACHIEVEMENT for the DB gossip system.

--HG--
branch : trunk
This commit is contained in:
Xanadu
2010-03-15 04:37:28 +01:00
parent 8cc3d2ad7f
commit f9566e08ac
4 changed files with 12 additions and 4 deletions

View File

@@ -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)
{

View File

@@ -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:

View File

@@ -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;

View File

@@ -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;