aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Guilds
diff options
context:
space:
mode:
authorDekadence <dekadence.net@gmail.com>2014-09-27 14:28:10 +0200
committerDekadence <dekadence.net@gmail.com>2014-09-27 14:28:10 +0200
commit5ac63a43fb33e55a1be7bbc9fb60ac26b3d1b032 (patch)
tree78352f1f01e120afa7160b6a75065e726a560d9b /src/server/game/Guilds
parentb48ba56efd53e0430ec5d69a70fb1d141d7029c1 (diff)
Achievements/Guilds: Fix guild achievement tracking
- This fix a typo on commit TrinityCore@7ec22c5 - This fix update of criteria progress on login Thanks to @DDuarte for initial commit and help with pull request Thanks to @Kiritoo for send me sniffs
Diffstat (limited to 'src/server/game/Guilds')
-rw-r--r--src/server/game/Guilds/Guild.cpp23
-rw-r--r--src/server/game/Guilds/Guild.h3
2 files changed, 23 insertions, 3 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 411b986bc1f..3f346a0b8c7 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -1562,10 +1562,29 @@ void Guild::SendGuildRankInfo(WorldSession* session) const
TC_LOG_DEBUG("guild", "SMSG_GUILD_RANK [%s]", session->GetPlayerInfo().c_str());
}
-void Guild::HandleSetAchievementTracking(WorldSession* session, std::set<uint32> const& criteriaIds)
+void Guild::HandleSetAchievementTracking(WorldSession* session, std::set<uint32> const& achievementIds)
{
- if (Member* member = GetMember(session->GetPlayer()->GetGUID()))
+ Player* player = session->GetPlayer();
+
+ if (Member* member = GetMember(player->GetGUID()))
+ {
+ std::set<uint32> criteriaIds;
+
+ for (std::set<uint32>::iterator achievementId = achievementIds.begin(); achievementId != achievementIds.end(); ++achievementId)
+ {
+ if (AchievementCriteriaEntryList const* cList = sAchievementMgr->GetAchievementCriteriaByAchievement(*achievementId))
+ {
+ for (AchievementCriteriaEntryList::const_iterator itr = cList->begin(); itr != cList->end(); ++itr)
+ {
+ AchievementCriteriaEntry const* criteria = *itr;
+ criteriaIds.insert(criteria->ID);
+ }
+ }
+ }
+
member->SetTrackedCriteriaIds(criteriaIds);
+ m_achievementMgr.SendAllTrackedCriterias(player, member->GetTrackedCriteriaIds());
+ }
}
void Guild::HandleSetMOTD(WorldSession* session, std::string const& motd)
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index a4e2f9bc5ad..5448180e0ae 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -395,6 +395,7 @@ private:
uint32 GetTotalReputation() const { return m_totalReputation; }
uint32 GetWeekReputation() const { return m_weekReputation; }
+ std::set<uint32> GetTrackedCriteriaIds() const { return m_trackedCriteriaIds; }
void SetTrackedCriteriaIds(std::set<uint32> criteriaIds) { m_trackedCriteriaIds.swap(criteriaIds); }
bool IsTrackingCriteriaId(uint32 criteriaId) const { return m_trackedCriteriaIds.find(criteriaId) != m_trackedCriteriaIds.end(); }
@@ -789,7 +790,7 @@ public:
// Handle client commands
void HandleRoster(WorldSession* session);
void HandleQuery(WorldSession* session);
- void HandleSetAchievementTracking(WorldSession* session, std::set<uint32> const& criteriaIds);
+ void HandleSetAchievementTracking(WorldSession* session, std::set<uint32> const& achievementIds);
void HandleSetMOTD(WorldSession* session, std::string const& motd);
void HandleSetInfo(WorldSession* session, std::string const& info);
void HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo);