Core/Guild: Only send achievement criteria updates to players that requested them

Implements CMSG_GUILD_SET_ACHIEVEMENT_TRACKING
This commit is contained in:
DDuarte
2014-09-02 14:33:31 +01:00
parent e0f7cd1514
commit 7ec22c534e
6 changed files with 40 additions and 2 deletions

View File

@@ -1562,6 +1562,12 @@ 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)
{
if (Member* member = GetMember(session->GetPlayer()->GetGUID()))
member->SetTrackedCriteriaIds(criteriaIds);
}
void Guild::HandleSetMOTD(WorldSession* session, std::string const& motd)
{
if (m_motd == motd)
@@ -2603,6 +2609,14 @@ void Guild::BroadcastPacket(WorldPacket* packet) const
player->GetSession()->SendPacket(packet);
}
void Guild::BroadcastPacketIfTrackingAchievement(WorldPacket* packet, uint32 criteriaId) const
{
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
if (itr->second->IsTrackingCriteriaId(criteriaId))
if (Player* player = itr->second->FindPlayer())
player->GetSession()->SendPacket(packet);
}
void Guild::MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 maxLevel, uint32 minRank)
{
uint32 count = 0;