/* * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef TRINITYCORE_GUILDPACKETS_H #define TRINITYCORE_GUILDPACKETS_H #include "Packet.h" #include "ItemPacketsCommon.h" #include "Guild.h" #include "MythicPlusPacketsCommon.h" #include "ObjectGuid.h" #include "PacketUtilities.h" #include "WowTime.h" namespace WorldPackets { namespace Guild { class QueryGuildInfo final : public ClientPacket { public: explicit QueryGuildInfo(WorldPacket&& packet) : ClientPacket(CMSG_QUERY_GUILD_INFO, std::move(packet)) { } void Read() override; ObjectGuid PlayerGuid; ObjectGuid GuildGuid; }; struct GuildInfo { ObjectGuid GuildGUID; uint32 VirtualRealmAddress = 0; ///< a special identifier made from the Index, BattleGroup and Region. std::string GuildName; struct GuildInfoRank { GuildInfoRank(uint32 id, uint32 order, std::string const& name) : RankID(id), RankOrder(order), RankName(name) { } uint32 RankID; uint32 RankOrder; std::string RankName; }; std::vector Ranks; uint32 EmblemStyle = 0; uint32 EmblemColor = 0; uint32 BorderStyle = 0; uint32 BorderColor = 0; uint32 BackgroundColor = 0; }; class QueryGuildInfoResponse final : public ServerPacket { public: explicit QueryGuildInfoResponse() : ServerPacket(SMSG_QUERY_GUILD_INFO_RESPONSE) { } WorldPacket const* Write() override; ObjectGuid GuildGuid; Optional Info; }; class GuildGetRoster final : public ClientPacket { public: explicit GuildGetRoster(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_GET_ROSTER, std::move(packet)) { } void Read() override { } }; struct GuildRosterProfessionData { int32 DbID = 0; int32 Rank = 0; int32 Step = 0; }; struct GuildRosterMemberData { ObjectGuid Guid; int64 WeeklyXP = 0; int64 TotalXP = 0; int32 RankID = 0; int32 AreaID = 0; int32 PersonalAchievementPoints = 0; int32 GuildReputation = 0; int32 GuildRepToCap = 0; float LastSave = 0.0f; std::string_view Name; uint32 VirtualRealmAddress = 0; std::string_view Note; std::string_view OfficerNote; uint8 Status = 0; uint8 Level = 0; uint8 ClassID = 0; uint8 Gender = 0; uint64 GuildClubMemberID = 0; uint8 RaceID = 0; int32 TimerunningSeasonID = 0; bool Authenticated = false; GuildRosterProfessionData Profession[2]; MythicPlus::DungeonScoreSummary DungeonScore; }; class GuildRoster final : public ServerPacket { public: explicit GuildRoster() : ServerPacket(SMSG_GUILD_ROSTER, 4 + 4 + 4 + 4) { } WorldPacket const* Write() override; std::vector MemberData; std::string WelcomeText; std::string InfoText; WowTime CreateDate; int32 NumAccounts = 0; int32 GuildFlags = 0; }; class GuildUpdateMotdText final : public ClientPacket { public: explicit GuildUpdateMotdText(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_UPDATE_MOTD_TEXT, std::move(packet)) { } void Read() override; String<255, Strings::NoHyperlinks> MotdText; }; class GuildCommandResult final : public ServerPacket { public: explicit GuildCommandResult() : ServerPacket(SMSG_GUILD_COMMAND_RESULT, 9) { } WorldPacket const* Write() override; std::string Name; uint8 Result = 0; uint8 Command = 0; }; class AcceptGuildInvite final : public ClientPacket { public: explicit AcceptGuildInvite(WorldPacket&& packet) : ClientPacket(CMSG_ACCEPT_GUILD_INVITE, std::move(packet)) { } void Read() override; ObjectGuid GuildGuid; }; class GuildDeclineInvitation final : public ClientPacket { public: explicit GuildDeclineInvitation(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DECLINE_INVITATION, std::move(packet)) { } void Read() override; ObjectGuid GuildGuid; bool IsAuto = false; }; class DeclineGuildInvites final : public ClientPacket { public: explicit DeclineGuildInvites(WorldPacket&& packet) : ClientPacket(CMSG_DECLINE_GUILD_INVITES, std::move(packet)) { } void Read() override; bool Allow = false; }; class GuildInviteByName final : public ClientPacket { public: explicit GuildInviteByName(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_INVITE_BY_NAME, std::move(packet)) { } void Read() override; std::string Name; Optional ArenaTeam; }; class GuildInvite final : public ServerPacket { public: explicit GuildInvite() : ServerPacket(SMSG_GUILD_INVITE, 68) { } WorldPacket const* Write() override; ObjectGuid GuildGUID; ObjectGuid OldGuildGUID; int32 AchievementPoints = 0; uint32 EmblemColor = 0; uint32 EmblemStyle = 0; uint32 BorderStyle = 0; uint32 BorderColor = 0; uint32 Background = 0; uint32 GuildVirtualRealmAddress = 0; uint32 OldGuildVirtualRealmAddress = 0; uint32 InviterVirtualRealmAddress = 0; std::string InviterName; std::string GuildName; std::string OldGuildName; }; class GuildEventStatusChange final : public ServerPacket { public: explicit GuildEventStatusChange() : ServerPacket(SMSG_GUILD_EVENT_STATUS_CHANGE, 16 + 1) { } WorldPacket const* Write() override; ObjectGuid Guid; bool AFK = false; bool DND = false; }; class GuildEventPresenceChange final : public ServerPacket { public: explicit GuildEventPresenceChange() : ServerPacket(SMSG_GUILD_EVENT_PRESENCE_CHANGE, 16 + 4 + 1 + 1) { } WorldPacket const* Write() override; ObjectGuid Guid; uint32 VirtualRealmAddress = 0; std::string Name; bool LoggedOn = false; }; class GuildEventMotd final : public ServerPacket { public: explicit GuildEventMotd() : ServerPacket(SMSG_GUILD_EVENT_MOTD, 1) { } WorldPacket const* Write() override; std::string MotdText; }; class GuildEventPlayerJoined final : public ServerPacket { public: explicit GuildEventPlayerJoined() : ServerPacket(SMSG_GUILD_EVENT_PLAYER_JOINED, 21) { } WorldPacket const* Write() override; ObjectGuid Guid; std::string Name; uint32 VirtualRealmAddress = 0; }; class GuildEventRankChanged final : public ServerPacket { public: explicit GuildEventRankChanged() : ServerPacket(SMSG_GUILD_EVENT_RANK_CHANGED, 4) { } WorldPacket const* Write() override; int32 RankID = 0; }; class GuildEventRanksUpdated final : public ServerPacket { public: explicit GuildEventRanksUpdated() : ServerPacket(SMSG_GUILD_EVENT_RANKS_UPDATED, 0) { } WorldPacket const* Write() override { return &_worldPacket; } }; class GuildEventBankMoneyChanged final : public ServerPacket { public: explicit GuildEventBankMoneyChanged() : ServerPacket(SMSG_GUILD_EVENT_BANK_MONEY_CHANGED, 8) { } WorldPacket const* Write() override; uint64 Money = 0; }; class GuildEventDisbanded final : public ServerPacket { public: explicit GuildEventDisbanded() : ServerPacket(SMSG_GUILD_EVENT_DISBANDED, 0) { } WorldPacket const* Write() override { return &_worldPacket; } }; struct GuildEventEntry { ObjectGuid PlayerGUID; ObjectGuid OtherGUID; uint8 TransactionType = 0; uint8 RankID = 0; uint32 TransactionDate = 0; }; class GuildEventLogQuery final : public ClientPacket { public: explicit GuildEventLogQuery(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_EVENT_LOG_QUERY, std::move(packet)) { } void Read() override { } }; class GuildEventLogQueryResults final : public ServerPacket { public: explicit GuildEventLogQueryResults() : ServerPacket(SMSG_GUILD_EVENT_LOG_QUERY_RESULTS, 4) { } WorldPacket const* Write() override; std::vector Entry; }; class GuildEventPlayerLeft final : public ServerPacket { public: explicit GuildEventPlayerLeft() : ServerPacket(SMSG_GUILD_EVENT_PLAYER_LEFT, 43) { } WorldPacket const* Write() override; ObjectGuid LeaverGUID; std::string LeaverName; uint32 LeaverVirtualRealmAddress = 0; ObjectGuid RemoverGUID; std::string RemoverName; uint32 RemoverVirtualRealmAddress = 0; bool Removed = false; }; class GuildEventNewLeader final : public ServerPacket { public: explicit GuildEventNewLeader() : ServerPacket(SMSG_GUILD_EVENT_NEW_LEADER, 43) { } WorldPacket const* Write() override; ObjectGuid NewLeaderGUID; std::string NewLeaderName; uint32 NewLeaderVirtualRealmAddress = 0; ObjectGuid OldLeaderGUID; std::string OldLeaderName; uint32 OldLeaderVirtualRealmAddress = 0; bool SelfPromoted = false; }; class GuildEventTabAdded final : public ServerPacket { public: explicit GuildEventTabAdded() : ServerPacket(SMSG_GUILD_EVENT_TAB_ADDED, 0) { } WorldPacket const* Write() override { return &_worldPacket; } }; class GuildEventTabModified final : public ServerPacket { public: explicit GuildEventTabModified() : ServerPacket(SMSG_GUILD_EVENT_TAB_MODIFIED, 6) { } WorldPacket const* Write() override; std::string Icon; std::string Name; int32 Tab = 0; }; class GuildEventTabTextChanged final : public ServerPacket { public: explicit GuildEventTabTextChanged() : ServerPacket(SMSG_GUILD_EVENT_TAB_TEXT_CHANGED, 4) { } WorldPacket const* Write() override; int32 Tab = 0; }; class GuildEventBankContentsChanged final : public ServerPacket { public: explicit GuildEventBankContentsChanged() : ServerPacket(SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED, 0) { } WorldPacket const* Write() override { return &_worldPacket; } }; class GuildPermissionsQuery final : public ClientPacket { public: explicit GuildPermissionsQuery(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_PERMISSIONS_QUERY, std::move(packet)) { } void Read() override { } }; class GuildPermissionsQueryResults final : public ServerPacket { public: struct GuildRankTabPermissions { int32 Flags = 0; int32 WithdrawItemLimit = 0; }; explicit GuildPermissionsQueryResults() : ServerPacket(SMSG_GUILD_PERMISSIONS_QUERY_RESULTS, 20) { } WorldPacket const* Write() override; int32 NumTabs = 0; int32 WithdrawGoldLimit = 0; int32 Flags = 0; uint32 RankID = 0; std::vector Tab; }; class GuildSetRankPermissions final : public ClientPacket { public: explicit GuildSetRankPermissions(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_SET_RANK_PERMISSIONS, std::move(packet)) { } void Read() override; uint8 RankID = 0; int32 RankOrder = 0; uint32 WithdrawGoldLimit = 0; uint32 Flags = 0; uint32 OldFlags = 0; uint32 TabFlags[GUILD_BANK_MAX_TABS] = { }; uint32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS] = { }; String<15, Strings::NoHyperlinks> RankName; }; class GuildAddRank final : public ClientPacket { public: explicit GuildAddRank(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_ADD_RANK, std::move(packet)) { } void Read() override; String<15, Strings::NoHyperlinks> Name; int32 RankOrder = 0; }; class GuildAssignMemberRank final : public ClientPacket { public: explicit GuildAssignMemberRank(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_ASSIGN_MEMBER_RANK, std::move(packet)) { } void Read() override; ObjectGuid Member; int32 RankOrder = 0; }; class GuildDeleteRank final : public ClientPacket { public: explicit GuildDeleteRank(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DELETE_RANK, std::move(packet)) { } void Read() override; int32 RankOrder = 0; }; class GuildGetRanks final : public ClientPacket { public: explicit GuildGetRanks(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_GET_RANKS, std::move(packet)) { } void Read() override; ObjectGuid GuildGUID; }; struct GuildRankData { uint8 RankID = 0; int32 RankOrder = 0; uint32 Flags = 0; uint32 WithdrawGoldLimit = 0; std::string RankName; uint32 TabFlags[GUILD_BANK_MAX_TABS]; uint32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS]; }; class GuildRanks final : public ServerPacket { public: explicit GuildRanks() : ServerPacket(SMSG_GUILD_RANKS, 4) { } WorldPacket const* Write() override; std::vector Ranks; }; class GuildSendRankChange final : public ServerPacket { public: explicit GuildSendRankChange() : ServerPacket(SMSG_GUILD_SEND_RANK_CHANGE, 43) { } WorldPacket const* Write() override; ObjectGuid Other; ObjectGuid Officer; bool Promote = false; uint32 RankID = 0; }; class GuildShiftRank final : public ClientPacket { public: explicit GuildShiftRank(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_SHIFT_RANK, std::move(packet)) { } void Read() override; bool ShiftUp = false; int32 RankOrder = 0; }; class GuildUpdateInfoText final : public ClientPacket { public: explicit GuildUpdateInfoText(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_UPDATE_INFO_TEXT, std::move(packet)) { } void Read() override; String<500, Strings::NoHyperlinks> InfoText; }; class GuildSetMemberNote final : public ClientPacket { public: explicit GuildSetMemberNote(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_SET_MEMBER_NOTE, std::move(packet)) { } void Read() override; ObjectGuid NoteeGUID; bool IsPublic = false; ///< 0 == Officer, 1 == Public String<31, Strings::NoHyperlinks> Note; }; class GuildMemberUpdateNote final : public ServerPacket { public: explicit GuildMemberUpdateNote() : ServerPacket(SMSG_GUILD_MEMBER_UPDATE_NOTE, 21) { } WorldPacket const* Write() override; ObjectGuid Member; bool IsPublic = false; ///< 0 == Officer, 1 == Public std::string Note; }; class GuildMemberDailyReset final : public ServerPacket { public: explicit GuildMemberDailyReset() : ServerPacket(SMSG_GUILD_MEMBER_DAILY_RESET, 0) { } WorldPacket const* Write() override { return &_worldPacket; } }; class GuildDelete final : public ClientPacket { public: explicit GuildDelete(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DELETE, std::move(packet)) { } void Read() override { } }; class GuildDemoteMember final : public ClientPacket { public: explicit GuildDemoteMember(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DEMOTE_MEMBER, std::move(packet)) { } void Read() override; ObjectGuid Demotee; }; class GuildPromoteMember final : public ClientPacket { public: explicit GuildPromoteMember(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_PROMOTE_MEMBER, std::move(packet)) { } void Read() override; ObjectGuid Promotee; }; class GuildOfficerRemoveMember final : public ClientPacket { public: explicit GuildOfficerRemoveMember(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_OFFICER_REMOVE_MEMBER, std::move(packet)) { } void Read() override; ObjectGuid Removee; }; class GuildLeave final : public ClientPacket { public: explicit GuildLeave(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_LEAVE, std::move(packet)) { } void Read() override { } }; class GuildChangeNameRequest final : public ClientPacket { public: explicit GuildChangeNameRequest(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_CHANGE_NAME_REQUEST, std::move(packet)) { } void Read() override; std::string NewName; }; class GuildFlaggedForRename final : public ServerPacket { public: explicit GuildFlaggedForRename() : ServerPacket(SMSG_GUILD_FLAGGED_FOR_RENAME, 1) { } WorldPacket const* Write() override; bool FlagSet = false; }; class RequestGuildPartyState final : public ClientPacket { public: explicit RequestGuildPartyState(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_GUILD_PARTY_STATE, std::move(packet)) { } void Read() override; ObjectGuid GuildGUID; }; class GuildPartyState final : public ServerPacket { public: explicit GuildPartyState() : ServerPacket(SMSG_GUILD_PARTY_STATE, 15) { } WorldPacket const* Write() override; float GuildXPEarnedMult = 0.0f; int32 NumMembers = 0; int32 NumRequired = 0; bool InGuildParty = false; }; class RequestGuildRewardsList final : public ClientPacket { public: explicit RequestGuildRewardsList(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_GUILD_REWARDS_LIST, std::move(packet)) { } void Read() override; Timestamp<> CurrentVersion; }; struct GuildRewardItem { uint32 ItemID = 0; uint32 AchievementLogic = 0; std::vector AchievementsRequired; Trinity::RaceMask RaceMask = { }; int32 MinGuildLevel = 0; int32 MinGuildRep = 0; uint64 Cost = 0; }; class GuildRewardList final : public ServerPacket { public: explicit GuildRewardList() : ServerPacket(SMSG_GUILD_REWARD_LIST, 8) { } WorldPacket const* Write() override; std::vector RewardItems; Timestamp<> Version; }; class GuildBankActivate final : public ClientPacket { public: explicit GuildBankActivate(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_ACTIVATE, std::move(packet)) { } void Read() override; ObjectGuid Banker; bool FullUpdate = false; }; class GuildBankBuyTab final : public ClientPacket { public: explicit GuildBankBuyTab(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_BUY_TAB, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; }; class GuildBankUpdateTab final : public ClientPacket { public: explicit GuildBankUpdateTab(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_UPDATE_TAB, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; String<15, Strings::NoHyperlinks> Name; String<127> Icon; }; class GuildBankDepositMoney final : public ClientPacket { public: explicit GuildBankDepositMoney(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_DEPOSIT_MONEY, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint64 Money = 0; }; class GuildBankQueryTab final : public ClientPacket { public: explicit GuildBankQueryTab(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_QUERY_TAB, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 Tab = 0; bool FullUpdate = false; }; class GuildBankRemainingWithdrawMoneyQuery final : public ClientPacket { public: explicit GuildBankRemainingWithdrawMoneyQuery(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY, std::move(packet)) { } void Read() override { } }; class GuildBankRemainingWithdrawMoney final : public ServerPacket { public: explicit GuildBankRemainingWithdrawMoney() : ServerPacket(SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY, 8) { } WorldPacket const* Write() override; int64 RemainingWithdrawMoney = 0; }; class GuildBankWithdrawMoney final : public ClientPacket { public: explicit GuildBankWithdrawMoney(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_WITHDRAW_MONEY, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint64 Money = 0; }; struct GuildBankItemInfo { WorldPackets::Item::ItemInstance Item; int32 Slot = 0; int32 Count = 0; int32 EnchantmentID = 0; int32 Charges = 0; int32 OnUseEnchantmentID = 0; int32 Flags = 0; bool Locked = false; std::vector SocketEnchant; }; struct GuildBankTabInfo { int32 TabIndex = 0; std::string Name; std::string Icon; }; class GuildBankQueryResults final : public ServerPacket { public: explicit GuildBankQueryResults() : ServerPacket(SMSG_GUILD_BANK_QUERY_RESULTS, 25) { } WorldPacket const* Write() override; std::vector ItemInfo; std::vector TabInfo; int32 WithdrawalsRemaining = 0; int32 Tab = 0; uint64 Money = 0; bool FullUpdate = false; }; class AutoGuildBankItem final : public ClientPacket { public: explicit AutoGuildBankItem(WorldPacket&& packet) : ClientPacket(CMSG_AUTO_GUILD_BANK_ITEM, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; Optional ContainerSlot; uint8 ContainerItemSlot = 0; }; class StoreGuildBankItem final : public ClientPacket { public: explicit StoreGuildBankItem(WorldPacket&& packet) : ClientPacket(CMSG_STORE_GUILD_BANK_ITEM, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; Optional ContainerSlot; uint8 ContainerItemSlot = 0; }; class SwapItemWithGuildBankItem final : public ClientPacket { public: explicit SwapItemWithGuildBankItem(WorldPacket&& packet) : ClientPacket(CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; Optional ContainerSlot; uint8 ContainerItemSlot = 0; }; class SwapGuildBankItemWithGuildBankItem final : public ClientPacket { public: explicit SwapGuildBankItemWithGuildBankItem(WorldPacket&& packet) : ClientPacket(CMSG_SWAP_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM, std::move(packet)) { } void Read() override; ObjectGuid Banker; std::array BankTab = { }; std::array BankSlot = { }; }; class MoveGuildBankItem final : public ClientPacket { public: explicit MoveGuildBankItem(WorldPacket&& packet) : ClientPacket(CMSG_MOVE_GUILD_BANK_ITEM, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; uint8 BankTab1 = 0; uint8 BankSlot1 = 0; }; class MergeItemWithGuildBankItem final : public ClientPacket { public: explicit MergeItemWithGuildBankItem(WorldPacket&& packet) : ClientPacket(CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; Optional ContainerSlot; uint8 ContainerItemSlot = 0; uint32 StackCount = 0; }; class SplitItemToGuildBank final : public ClientPacket { public: explicit SplitItemToGuildBank(WorldPacket&& packet) : ClientPacket(CMSG_SPLIT_ITEM_TO_GUILD_BANK, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; Optional ContainerSlot; uint8 ContainerItemSlot = 0; uint32 StackCount = 0; }; class MergeGuildBankItemWithItem final : public ClientPacket { public: explicit MergeGuildBankItemWithItem(WorldPacket&& packet) : ClientPacket(CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; Optional ContainerSlot; uint8 ContainerItemSlot = 0; uint32 StackCount = 0; }; class SplitGuildBankItemToInventory final : public ClientPacket { public: explicit SplitGuildBankItemToInventory(WorldPacket&& packet) : ClientPacket(CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; Optional ContainerSlot; uint8 ContainerItemSlot = 0; uint32 StackCount = 0; }; class AutoStoreGuildBankItem final : public ClientPacket { public: explicit AutoStoreGuildBankItem(WorldPacket&& packet) : ClientPacket(CMSG_AUTO_STORE_GUILD_BANK_ITEM, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; }; class MergeGuildBankItemWithGuildBankItem final : public ClientPacket { public: explicit MergeGuildBankItemWithGuildBankItem(WorldPacket&& packet) : ClientPacket(CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; uint8 BankTab1 = 0; uint8 BankSlot1 = 0; uint32 StackCount = 0; }; class SplitGuildBankItem final : public ClientPacket { public: explicit SplitGuildBankItem(WorldPacket&& packet) : ClientPacket(CMSG_SPLIT_GUILD_BANK_ITEM, std::move(packet)) { } void Read() override; ObjectGuid Banker; uint8 BankTab = 0; uint8 BankSlot = 0; uint8 BankTab1 = 0; uint8 BankSlot1 = 0; uint32 StackCount = 0; }; class GuildBankLogQuery final : public ClientPacket { public: explicit GuildBankLogQuery(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_LOG_QUERY, std::move(packet)) { } void Read() override; int32 Tab = 0; }; struct GuildBankLogEntry { ObjectGuid PlayerGUID; uint32 TimeOffset = 0; int8 EntryType = 0; Optional Money; Optional ItemID; Optional Count; Optional OtherTab; }; class GuildBankLogQueryResults final : public ServerPacket { public: explicit GuildBankLogQueryResults() : ServerPacket(SMSG_GUILD_BANK_LOG_QUERY_RESULTS, 25) { } WorldPacket const* Write() override; int32 Tab = 0; std::vector Entry; Optional WeeklyBonusMoney; }; class GuildBankTextQuery final : public ClientPacket { public: explicit GuildBankTextQuery(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_TEXT_QUERY, std::move(packet)) { } void Read() override; int32 Tab = 0; }; class GuildBankTextQueryResult : public ServerPacket { public: explicit GuildBankTextQueryResult() : ServerPacket(SMSG_GUILD_BANK_TEXT_QUERY_RESULT, 4 + 2) { } WorldPacket const* Write() override; int32 Tab = 0; std::string Text; }; class GuildBankSetTabText final : public ClientPacket { public: explicit GuildBankSetTabText(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_SET_TAB_TEXT, std::move(packet)) { } void Read() override; int32 Tab = 0; String<500, Strings::NoHyperlinks> TabText; }; class GuildQueryNews final : public ClientPacket { public: explicit GuildQueryNews(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_QUERY_NEWS, std::move(packet)) { } void Read() override; ObjectGuid GuildGUID; }; struct GuildNewsEvent { int32 Id = 0; WowTime CompletedDate; int8 Type = 0; int32 Flags = 0; std::array Data = { }; ObjectGuid MemberGuid; std::vector MemberList; Optional Item; }; class GuildNews final : public ServerPacket { public: explicit GuildNews() : ServerPacket(SMSG_GUILD_NEWS, 25) { } WorldPacket const* Write() override; std::vector NewsEvents; }; class GuildNewsUpdateSticky final : public ClientPacket { public: explicit GuildNewsUpdateSticky(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_NEWS_UPDATE_STICKY, std::move(packet)) { } void Read() override; int32 NewsID = 0; ObjectGuid GuildGUID; bool Sticky = false; }; class GuildReplaceGuildMaster final : public ClientPacket { public: explicit GuildReplaceGuildMaster(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_REPLACE_GUILD_MASTER, std::move(packet)) { } void Read() override { } }; class GuildSetGuildMaster final : public ClientPacket { public: explicit GuildSetGuildMaster(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_SET_GUILD_MASTER, std::move(packet)) { } void Read() override; std::string NewMasterName; }; class GuildChallengeUpdateRequest final : public ClientPacket { public: explicit GuildChallengeUpdateRequest(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_CHALLENGE_UPDATE_REQUEST, std::move(packet)) { } void Read() override { } }; class GuildChallengeUpdate final : public ServerPacket { public: explicit GuildChallengeUpdate() : ServerPacket(SMSG_GUILD_CHALLENGE_UPDATE, 96) { } WorldPacket const* Write() override; int32 CurrentCount[GUILD_CHALLENGES_TYPES] = { }; int32 MaxCount[GUILD_CHALLENGES_TYPES] = { }; int32 Gold[GUILD_CHALLENGES_TYPES] = { }; int32 MaxLevelGold[GUILD_CHALLENGES_TYPES] = { }; }; class SaveGuildEmblem final : public ClientPacket { public: explicit SaveGuildEmblem(WorldPacket&& packet) : ClientPacket(CMSG_SAVE_GUILD_EMBLEM, std::move(packet)) { } void Read() override; ObjectGuid Vendor; int32 BStyle = 0; int32 EStyle = 0; int32 BColor = 0; int32 EColor = 0; int32 Bg = 0; }; class PlayerSaveGuildEmblem final : public ServerPacket { public: explicit PlayerSaveGuildEmblem() : ServerPacket(SMSG_PLAYER_SAVE_GUILD_EMBLEM, 4) { } WorldPacket const* Write() override; int32 Error = 0; }; class GuildSetAchievementTracking final : public ClientPacket { public: explicit GuildSetAchievementTracking(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_SET_ACHIEVEMENT_TRACKING, std::move(packet)) { } void Read() override; Array AchievementIDs; }; class GuildNameChanged final : ServerPacket { public: explicit GuildNameChanged() : ServerPacket(SMSG_GUILD_NAME_CHANGED, 40) { } WorldPacket const* Write() override; ObjectGuid GuildGUID; std::string GuildName; }; } } #endif // TRINITYCORE_GUILDPACKETS_H