From 42e682c3b7e34d833596cea585d93673dc1dc910 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Thu, 5 Sep 2019 02:51:59 +0200 Subject: [PATCH] Core/Packets: converted guild reward packets to packet class --- src/server/game/Handlers/GuildHandler.cpp | 27 ++++++++-------- .../game/Server/Packets/GuildPackets.cpp | 30 +++++++++++++++++ src/server/game/Server/Packets/GuildPackets.h | 32 +++++++++++++++++++ src/server/game/Server/Protocol/Opcodes.cpp | 4 +-- src/server/game/Server/Protocol/Opcodes.h | 4 +-- src/server/game/Server/WorldSession.h | 3 +- 6 files changed, 81 insertions(+), 19 deletions(-) diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp index 4bd8e44c8a0..903a47c3c19 100644 --- a/src/server/game/Handlers/GuildHandler.cpp +++ b/src/server/game/Handlers/GuildHandler.cpp @@ -637,29 +637,28 @@ void WorldSession::HandleAutoDeclineGuildInvites(WorldPacket& recvPacket) GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_AUTO_DECLINE_GUILD, enable != 0); } -void WorldSession::HandleGuildRewardsQueryOpcode(WorldPacket& recvPacket) +void WorldSession::HandleRequestGuildRewardsList(WorldPackets::Guild::RequestGuildRewardsList& /*packet*/) { - recvPacket.read_skip(); // Unk - if (sGuildMgr->GetGuildById(_player->GetGuildId())) { std::vector const& rewards = sGuildMgr->GetGuildRewards(); - WorldPacket data(SMSG_GUILD_REWARDS_LIST, 3 + rewards.size() * (4 + 4 + 4 + 8 + 4 + 4)); - data.WriteBits(rewards.size(), 21); - data.FlushBits(); + WorldPackets::Guild::GuildRewardList rewardList; + rewardList.Version = uint32(time(nullptr)); + rewardList.RewardItems.reserve(rewards.size()); for (uint32 i = 0; i < rewards.size(); i++) { - data << uint32(rewards[i].Standing); - data << int32(rewards[i].Racemask); - data << uint32(rewards[i].Entry); - data << uint64(rewards[i].Price); - data << uint32(0); // Unused - data << uint32(rewards[i].AchievementId); + WorldPackets::Guild::GuildRewardItem rewardItem; + rewardItem.ItemID = rewards[i].Entry; + rewardItem.RaceMask = rewards[i].Racemask; + rewardItem.MinGuildRep = rewards[i].Standing; + rewardItem.AchievementRequired = rewards[i].AchievementId; + rewardItem.Cost = rewards[i].Price; + rewardList.RewardItems.push_back(rewardItem); } - data << uint32(time(nullptr)); - SendPacket(&data); + + SendPacket(rewardList.Write()); } } diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index 74fbdbea3a8..e806c70cea7 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -494,3 +494,33 @@ WorldPacket const* WorldPackets::Guild::GuildMemberRecipes::Write() return &_worldPacket; } + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRewardItem const& rewardItem) +{ + data << uint32(rewardItem.MinGuildRep); + data << uint32(rewardItem.RaceMask); + data << uint32(rewardItem.ItemID); + data << uint64(rewardItem.Cost); + data << uint32(rewardItem.Unk4); + data << uint32(rewardItem.AchievementRequired); + + return data; +} + +void WorldPackets::Guild::RequestGuildRewardsList::Read() +{ + _worldPacket >> CurrentVersion; +} + +WorldPacket const* WorldPackets::Guild::GuildRewardList::Write() +{ + _worldPacket.WriteBits(RewardItems.size(), 21); + _worldPacket.FlushBits(); + + for (GuildRewardItem const& item : RewardItems) + _worldPacket << item; + + _worldPacket << int32(Version); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h index 9ba49ad1180..769df3e5746 100644 --- a/src/server/game/Server/Packets/GuildPackets.h +++ b/src/server/game/Server/Packets/GuildPackets.h @@ -403,10 +403,42 @@ namespace WorldPackets int32 SkillStep = 0; std::array SkillLineBitArray; }; + + class RequestGuildRewardsList final : public ClientPacket + { + public: + RequestGuildRewardsList(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_GUILD_REWARDS_LIST, std::move(packet)) { } + + void Read() override; + + uint32 CurrentVersion = 0; + }; + + struct GuildRewardItem + { + uint32 ItemID = 0; + uint32 Unk4 = 0; + uint32 AchievementRequired; + uint32 RaceMask = 0; + int32 MinGuildRep = 0; + uint64 Cost = 0; + }; + + class GuildRewardList final : public ServerPacket + { + public: + GuildRewardList() : ServerPacket(SMSG_GUILD_REWARD_LIST, 8) { } + + WorldPacket const* Write() override; + + std::vector RewardItems; + int32 Version = 0; + }; } } ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterProfessionData const& rosterProfessionData); ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberData const& rosterMemberData); +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRewardItem const& rewardItem); #endif // GuildPackets_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 5906e0765a1..433f830afa5 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -494,7 +494,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_PUSHQUESTTOPARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePushQuestToParty ); DEFINE_HANDLER(CMSG_PVP_LOG_DATA, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandlePVPLogDataOpcode ); DEFINE_HANDLER(CMSG_QUERY_BATTLEFIELD_STATE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBattlegroundStateQuery ); - DEFINE_HANDLER(CMSG_QUERY_GUILD_REWARDS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGuildRewardsQueryOpcode ); DEFINE_HANDLER(CMSG_QUERY_INSPECT_ACHIEVEMENTS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryInspectAchievements ); DEFINE_HANDLER(CMSG_QUERY_QUESTS_COMPLETED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryQuestsCompleted ); DEFINE_HANDLER(CMSG_QUERY_TIME, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryTimeOpcode ); @@ -525,6 +524,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_REQUEST_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestAccountData ); DEFINE_HANDLER(CMSG_REQUEST_CATEGORY_COOLDOWNS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCategoryCooldowns ); DEFINE_HANDLER(CMSG_REQUEST_CEMETERY_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCemeteryList ); + DEFINE_HANDLER(CMSG_REQUEST_GUILD_REWARDS_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestGuildRewardsList ); DEFINE_HANDLER(CMSG_REQUEST_HOTFIX, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleRequestHotfix ); DEFINE_HANDLER(CMSG_REQUEST_INSPECT_RATED_BG_STATS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_HANDLER(CMSG_REQUEST_PARTY_MEMBER_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPartyMemberStatsOpcode); @@ -958,7 +958,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REPUTATION_REACTION_CHANGED, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REPUTATION_WEEKLY_CAP, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RESET, STATUS_NEVER); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REWARDS_LIST, STATUS_NEVER); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REWARD_LIST, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER_UPDATE, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_XP, STATUS_NEVER); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index f46f5449829..0d990d1d8de 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -421,7 +421,6 @@ enum Opcodes : uint16 CMSG_PUSHQUESTTOPARTY = 0x4B14, CMSG_PVP_LOG_DATA = 0x7308, CMSG_QUERY_BATTLEFIELD_STATE = 0x7202, - CMSG_QUERY_GUILD_REWARDS = 0x3012, CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x4D27, CMSG_QUERY_QUESTS_COMPLETED = 0x2317, CMSG_QUERY_TIME = 0x0A36, @@ -456,6 +455,7 @@ enum Opcodes : uint16 CMSG_REQUEST_ACCOUNT_DATA = 0x6505, CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x7102, CMSG_REQUEST_CEMETERY_LIST = 0x720A, + CMSG_REQUEST_GUILD_REWARDS_LIST = 0x3012, CMSG_REQUEST_HOTFIX = 0x2401, CMSG_REQUEST_INSPECT_RATED_BG_STATS = 0x3010, CMSG_REQUEST_PARTY_MEMBER_STATS = 0x0C04, @@ -930,7 +930,7 @@ enum Opcodes : uint16 SMSG_GUILD_REPUTATION_REACTION_CHANGED = 0x74B0, SMSG_GUILD_REPUTATION_WEEKLY_CAP = 0x30B7, SMSG_GUILD_RESET = 0x1CB5, - SMSG_GUILD_REWARDS_LIST = 0x1DB0, + SMSG_GUILD_REWARD_LIST = 0x1DB0, SMSG_GUILD_ROSTER = 0x3DA3, SMSG_GUILD_SET_NOTE = 0x0000, SMSG_GUILD_TRADESKILL_UPDATE = 0x0000, diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 7eb81b4b6f0..bf0d5c27cbc 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -117,6 +117,7 @@ namespace WorldPackets class GuildQueryRecipes; class GuildQueryMembersForRecipe; class GuildQueryMemberRecipes; + class RequestGuildRewardsList; } } @@ -709,7 +710,7 @@ class TC_GAME_API WorldSession void HandleGuildDeclineOpcode(WorldPacket& recvPacket); void HandleGuildEventLogQueryOpcode(WorldPacket& recvPacket); void HandleGuildGetRosterOpcode(WorldPackets::Guild::GuildGetRoster& /*packet*/); - void HandleGuildRewardsQueryOpcode(WorldPacket& recvPacket); + void HandleRequestGuildRewardsList(WorldPackets::Guild::RequestGuildRewardsList& /*packet*/); void HandleGuildPromoteOpcode(WorldPacket& recvPacket); void HandleGuildDemoteOpcode(WorldPacket& recvPacket); void HandleGuildAssignRankOpcode(WorldPacket& recvPacket);