Core/Packets: converted guild reward packets to packet class

This commit is contained in:
Ovahlord
2019-09-05 02:51:59 +02:00
parent 75fd37afb0
commit 42e682c3b7
6 changed files with 81 additions and 19 deletions

View File

@@ -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<uint32>(); // Unk
if (sGuildMgr->GetGuildById(_player->GetGuildId()))
{
std::vector<GuildReward> 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());
}
}

View File

@@ -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;
}

View File

@@ -403,10 +403,42 @@ namespace WorldPackets
int32 SkillStep = 0;
std::array<uint8, GUILD_RECIPES_COUNT> 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<GuildRewardItem> 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__

View File

@@ -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);

View File

@@ -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,

View File

@@ -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);