mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 10:26:28 +01:00
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;
|
||||
|
||||
// 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)
|
||||
{
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user