Properly implemented CONDITION_ACHIEVEMENT for the DB gossip system.
--HG-- branch : trunk
This commit is contained in:
@@ -1596,7 +1596,7 @@ void AchievementMgr::CompletedCriteriaFor(AchievementEntry const* achievement)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// already completed and stored
|
// already completed and stored
|
||||||
if (m_completedAchievements.find(achievement->ID)!=m_completedAchievements.end())
|
if (HasAchieved(achievement))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (IsCompletedAchievement(achievement))
|
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)
|
if(!sWorld.getConfig(CONFIG_GM_ALLOW_ACHIEVEMENT_GAINS) && m_player->GetSession()->GetSecurity() > SEC_PLAYER)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(achievement->flags & ACHIEVEMENT_FLAG_COUNTER || m_completedAchievements.find(achievement->ID)!=m_completedAchievements.end())
|
if(achievement->flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SendAchievementEarned(achievement);
|
SendAchievementEarned(achievement);
|
||||||
@@ -1894,6 +1894,11 @@ void AchievementMgr::BuildAllDataPacket(WorldPacket *data)
|
|||||||
*data << int32(-1);
|
*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)
|
AchievementCriteriaEntryList const& AchievementGlobalMgr::GetAchievementCriteriaByType(AchievementCriteriaTypes type)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -240,6 +240,7 @@ class AchievementMgr
|
|||||||
void CheckAllAchievementCriteria();
|
void CheckAllAchievementCriteria();
|
||||||
void SendAllAchievementData();
|
void SendAllAchievementData();
|
||||||
void SendRespondInspectAchievements(Player* player);
|
void SendRespondInspectAchievements(Player* player);
|
||||||
|
bool HasAchieved(AchievementEntry const* achievement) const;
|
||||||
Player* GetPlayer() { return m_player;}
|
Player* GetPlayer() { return m_player;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
#include "InstanceData.h" //for condition_instance_data
|
#include "InstanceData.h" //for condition_instance_data
|
||||||
#include "GossipDef.h"
|
#include "GossipDef.h"
|
||||||
#include "Vehicle.h"
|
#include "Vehicle.h"
|
||||||
|
#include "AchievementMgr.h"
|
||||||
|
|
||||||
INSTANTIATE_SINGLETON_1(ObjectMgr);
|
INSTANTIATE_SINGLETON_1(ObjectMgr);
|
||||||
|
|
||||||
@@ -7728,7 +7729,7 @@ bool PlayerCondition::Meets(Player const * player) const
|
|||||||
case CONDITION_ACHIEVEMENT:
|
case CONDITION_ACHIEVEMENT:
|
||||||
{
|
{
|
||||||
AchievementEntry const* achievement = GetAchievementStore()->LookupEntry(value1);
|
AchievementEntry const* achievement = GetAchievementStore()->LookupEntry(value1);
|
||||||
return (achievement,1);
|
return player->GetAchievementMgr().HasAchieved(achievement);
|
||||||
}
|
}
|
||||||
case CONDITION_TEAM:
|
case CONDITION_TEAM:
|
||||||
return player->GetTeam() == value1;
|
return player->GetTeam() == value1;
|
||||||
|
|||||||
+2
-1
@@ -2297,6 +2297,7 @@ class Player : public Unit, public GridObject<Player>
|
|||||||
void InitRunes();
|
void InitRunes();
|
||||||
|
|
||||||
AchievementMgr& GetAchievementMgr() { return m_achievementMgr; }
|
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 UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1 = 0, uint32 miscvalue2 = 0, Unit *unit = NULL, uint32 time = 0);
|
||||||
void CompletedAchievement(AchievementEntry const* entry);
|
void CompletedAchievement(AchievementEntry const* entry);
|
||||||
|
|
||||||
@@ -2314,7 +2315,7 @@ class Player : public Unit, public GridObject<Player>
|
|||||||
|
|
||||||
uint32 GetChampioningFaction() const { return m_ChampioningFaction; }
|
uint32 GetChampioningFaction() const { return m_ChampioningFaction; }
|
||||||
void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; }
|
void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; }
|
||||||
Spell * m_spellModTakingSpell;
|
Spell * m_spellModTakingSpell;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
uint32 m_AreaID;
|
uint32 m_AreaID;
|
||||||
|
|||||||
Reference in New Issue
Block a user