diff options
| author | Dekadence <dekadence.net@gmail.com> | 2014-09-27 14:28:10 +0200 |
|---|---|---|
| committer | Dekadence <dekadence.net@gmail.com> | 2014-09-27 14:28:10 +0200 |
| commit | 5ac63a43fb33e55a1be7bbc9fb60ac26b3d1b032 (patch) | |
| tree | 78352f1f01e120afa7160b6a75065e726a560d9b /src/server/game/Guilds | |
| parent | b48ba56efd53e0430ec5d69a70fb1d141d7029c1 (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.cpp | 23 | ||||
| -rw-r--r-- | src/server/game/Guilds/Guild.h | 3 |
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); |
