mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/PacketIO: Implemented CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS/SMSG_GUILD_ACHIEVEMENT_MEMBERS
This commit is contained in:
@@ -852,6 +852,20 @@ void GuildAchievementMgr::SendAllTrackedCriterias(Player* receiver, std::set<uin
|
||||
receiver->GetSession()->SendPacket(guildCriteriaUpdate.Write());
|
||||
}
|
||||
|
||||
void GuildAchievementMgr::SendAchievementMembers(Player* receiver, uint32 achievementId) const
|
||||
{
|
||||
auto itr = _completedAchievements.find(achievementId);
|
||||
if (itr != _completedAchievements.end())
|
||||
{
|
||||
WorldPackets::Achievement::GuildAchievementMembers guildAchievementMembers;
|
||||
guildAchievementMembers.GuildGUID = _owner->GetGUID();
|
||||
guildAchievementMembers.AchievementID = achievementId;
|
||||
guildAchievementMembers.Member.reserve(itr->second.CompletingPlayers.size());
|
||||
for (ObjectGuid const& member : itr->second.CompletingPlayers)
|
||||
guildAchievementMembers.Member.emplace_back(member);
|
||||
}
|
||||
}
|
||||
|
||||
void GuildAchievementMgr::CompletedAchievement(AchievementEntry const* achievement, Player* referencePlayer)
|
||||
{
|
||||
TC_LOG_DEBUG("criteria.achievement", "GuildAchievementMgr::CompletedAchievement(%u)", achievement->ID);
|
||||
|
||||
@@ -122,6 +122,7 @@ public:
|
||||
void SendAllData(Player const* receiver) const override;
|
||||
void SendAchievementInfo(Player* receiver, uint32 achievementId = 0) const;
|
||||
void SendAllTrackedCriterias(Player* receiver, std::set<uint32> const& trackedCriterias) const;
|
||||
void SendAchievementMembers(Player* receiver, uint32 achievementId) const;
|
||||
|
||||
void CompletedAchievement(AchievementEntry const* entry, Player* referencePlayer) override;
|
||||
|
||||
|
||||
@@ -1409,6 +1409,11 @@ void Guild::HandleSetAchievementTracking(WorldSession* session, std::set<uint32>
|
||||
}
|
||||
}
|
||||
|
||||
void Guild::HandleGetAchievementMembers(WorldSession* session, uint32 achievementId)
|
||||
{
|
||||
m_achievementMgr.SendAchievementMembers(session->GetPlayer(), achievementId);
|
||||
}
|
||||
|
||||
void Guild::HandleSetMOTD(WorldSession* session, std::string const& motd)
|
||||
{
|
||||
if (m_motd == motd)
|
||||
|
||||
@@ -774,6 +774,7 @@ public:
|
||||
void HandleRoster(WorldSession* session);
|
||||
void SendQueryResponse(WorldSession* session);
|
||||
void HandleSetAchievementTracking(WorldSession* session, std::set<uint32> const& achievementIds);
|
||||
void HandleGetAchievementMembers(WorldSession* session, uint32 achievementId);
|
||||
void HandleSetMOTD(WorldSession* session, std::string const& motd);
|
||||
void HandleSetInfo(WorldSession* session, std::string const& info);
|
||||
void HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo);
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "Log.h"
|
||||
#include "Opcodes.h"
|
||||
#include "Guild.h"
|
||||
#include "AchievementPackets.h"
|
||||
#include "GuildPackets.h"
|
||||
|
||||
void WorldSession::HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& query)
|
||||
@@ -426,3 +427,8 @@ void WorldSession::HandleGuildSetAchievementTracking(WorldPackets::Guild::GuildS
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleSetAchievementTracking(this, packet.AchievementIDs);
|
||||
}
|
||||
void WorldSession::HandleGuildGetAchievementMembers(WorldPackets::Achievement::GuildGetAchievementMembers& getAchievementMembers)
|
||||
{
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleGetAchievementMembers(this, uint32(getAchievementMembers.AchievementID));
|
||||
}
|
||||
|
||||
@@ -180,3 +180,27 @@ WorldPacket const* WorldPackets::Achievement::AllGuildAchievements::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Achievement::GuildGetAchievementMembers::Read()
|
||||
{
|
||||
_worldPacket >> PlayerGUID;
|
||||
_worldPacket >> GuildGUID;
|
||||
_worldPacket >> AchievementID;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Achievement::GuildAchievementMember const& guildAchievementMember)
|
||||
{
|
||||
data << guildAchievementMember.MemberGUID;
|
||||
return data;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Achievement::GuildAchievementMembers::Write()
|
||||
{
|
||||
_worldPacket << GuildGUID;
|
||||
_worldPacket << int32(AchievementID);
|
||||
_worldPacket << uint32(Member.size());
|
||||
for (GuildAchievementMember const& member : Member)
|
||||
_worldPacket << member;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -213,6 +213,38 @@ namespace WorldPackets
|
||||
|
||||
std::vector<EarnedAchievement> Earned;
|
||||
};
|
||||
|
||||
class GuildGetAchievementMembers final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildGetAchievementMembers(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid PlayerGUID;
|
||||
ObjectGuid GuildGUID;
|
||||
int32 AchievementID = 0;
|
||||
};
|
||||
|
||||
struct GuildAchievementMember
|
||||
{
|
||||
GuildAchievementMember() = default;
|
||||
GuildAchievementMember(ObjectGuid guid) : MemberGUID(guid) { }
|
||||
|
||||
ObjectGuid MemberGUID;
|
||||
};
|
||||
|
||||
class GuildAchievementMembers final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildAchievementMembers() : ServerPacket(SMSG_GUILD_ACHIEVEMENT_MEMBERS) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid GuildGUID;
|
||||
int32 AchievementID = 0;
|
||||
std::vector<GuildAchievementMember> Member;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -802,7 +802,6 @@ WorldPacket const* WorldPackets::Guild::PlayerSaveGuildEmblem::Write()
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
|
||||
void WorldPackets::Guild::GuildSetAchievementTracking::Read()
|
||||
{
|
||||
uint32 count;
|
||||
|
||||
@@ -413,7 +413,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_GUILD_DELETE_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDeleteRank);
|
||||
DEFINE_HANDLER(CMSG_GUILD_DEMOTE_MEMBER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDemoteMember);
|
||||
DEFINE_HANDLER(CMSG_GUILD_EVENT_LOG_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildEventLogQuery);
|
||||
DEFINE_HANDLER(CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildGetAchievementMembers);
|
||||
DEFINE_HANDLER(CMSG_GUILD_GET_RANKS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildGetRanks);
|
||||
DEFINE_HANDLER(CMSG_GUILD_GET_ROSTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildGetRoster);
|
||||
DEFINE_HANDLER(CMSG_GUILD_INVITE_BY_NAME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildInviteByName);
|
||||
@@ -1184,7 +1184,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_UNINVITE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_EARNED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_MEMBERS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_MEMBERS, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_LOG_QUERY_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_QUERY_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
|
||||
@@ -78,6 +78,7 @@ namespace WorldPackets
|
||||
namespace Achievement
|
||||
{
|
||||
class GuildSetFocusedAchievement;
|
||||
class GuildGetAchievementMembers;
|
||||
}
|
||||
|
||||
namespace Artifact
|
||||
@@ -1320,6 +1321,7 @@ class TC_GAME_API WorldSession
|
||||
void HandleGuildLeave(WorldPackets::Guild::GuildLeave& leave);
|
||||
void HandleGuildDelete(WorldPackets::Guild::GuildDelete& packet);
|
||||
void HandleGuildSetAchievementTracking(WorldPackets::Guild::GuildSetAchievementTracking& packet);
|
||||
void HandleGuildGetAchievementMembers(WorldPackets::Achievement::GuildGetAchievementMembers& getAchievementMembers);
|
||||
void HandleGuildSetGuildMaster(WorldPackets::Guild::GuildSetGuildMaster& packet);
|
||||
void HandleGuildUpdateMotdText(WorldPackets::Guild::GuildUpdateMotdText& packet);
|
||||
void HandleGuildNewsUpdateSticky(WorldPackets::Guild::GuildNewsUpdateSticky& packet);
|
||||
|
||||
Reference in New Issue
Block a user