/* * 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 . */ #include "GuildPackets.h" #include "PacketOperators.h" namespace WorldPackets::Guild { void QueryGuildInfo::Read() { _worldPacket >> GuildGuid; _worldPacket >> PlayerGuid; } WorldPacket const* QueryGuildInfoResponse::Write() { _worldPacket << GuildGuid; _worldPacket << OptionalInit(Info); _worldPacket.FlushBits(); if (Info) { _worldPacket << Info->GuildGUID; _worldPacket << uint32(Info->VirtualRealmAddress); _worldPacket << Size(Info->Ranks); _worldPacket << uint32(Info->EmblemStyle); _worldPacket << uint32(Info->EmblemColor); _worldPacket << uint32(Info->BorderStyle); _worldPacket << uint32(Info->BorderColor); _worldPacket << uint32(Info->BackgroundColor); _worldPacket << SizedString::BitsSize<7>(Info->GuildName); _worldPacket.FlushBits(); for (GuildInfo::GuildInfoRank const& rank : Info->Ranks) { _worldPacket << uint32(rank.RankID); _worldPacket << uint32(rank.RankOrder); _worldPacket << SizedString::BitsSize<7>(rank.RankName); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(rank.RankName); } _worldPacket << SizedString::Data(Info->GuildName); } return &_worldPacket; } ByteBuffer& operator<<(ByteBuffer& data, GuildRosterProfessionData const& rosterProfessionData) { data << int32(rosterProfessionData.DbID); data << int32(rosterProfessionData.Rank); data << int32(rosterProfessionData.Step); return data; } ByteBuffer& operator<<(ByteBuffer& data, GuildRosterMemberData const& rosterMemberData) { data << rosterMemberData.Guid; data << int32(rosterMemberData.RankID); data << int32(rosterMemberData.AreaID); data << int32(rosterMemberData.PersonalAchievementPoints); data << int32(rosterMemberData.GuildReputation); data << float(rosterMemberData.LastSave); for (uint8 i = 0; i < 2; i++) data << rosterMemberData.Profession[i]; data << uint32(rosterMemberData.VirtualRealmAddress); data << uint8(rosterMemberData.Status); data << uint8(rosterMemberData.Level); data << uint8(rosterMemberData.ClassID); data << uint8(rosterMemberData.Gender); data << uint64(rosterMemberData.GuildClubMemberID); data << uint8(rosterMemberData.RaceID); data << int32(rosterMemberData.TimerunningSeasonID); data << SizedString::BitsSize<6>(rosterMemberData.Name); data << SizedString::BitsSize<8>(rosterMemberData.Note); data << SizedString::BitsSize<8>(rosterMemberData.OfficerNote); data << Bits<1>(rosterMemberData.Authenticated); data.FlushBits(); data << rosterMemberData.DungeonScore; data << SizedString::Data(rosterMemberData.Name); data << SizedString::Data(rosterMemberData.Note); data << SizedString::Data(rosterMemberData.OfficerNote); return data; } WorldPacket const* GuildRoster::Write() { _worldPacket << int32(NumAccounts); _worldPacket << CreateDate; _worldPacket << int32(GuildFlags); _worldPacket << Size(MemberData); _worldPacket << SizedString::BitsSize<11>(WelcomeText); _worldPacket << SizedString::BitsSize<11>(InfoText); _worldPacket.FlushBits(); for (GuildRosterMemberData const& member : MemberData) _worldPacket << member; _worldPacket << SizedString::Data(WelcomeText); _worldPacket << SizedString::Data(InfoText); return &_worldPacket; } void GuildUpdateMotdText::Read() { _worldPacket >> SizedString::BitsSize<11>(MotdText); _worldPacket >> SizedString::Data(MotdText); } WorldPacket const* GuildCommandResult::Write() { _worldPacket << uint8(Result); _worldPacket << uint8(Command); _worldPacket << SizedString::BitsSize<8>(Name); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(Name); return &_worldPacket; } void AcceptGuildInvite::Read() { _worldPacket >> GuildGuid; } void GuildDeclineInvitation::Read() { _worldPacket >> GuildGuid; _worldPacket >> Bits<1>(IsAuto); } void DeclineGuildInvites::Read() { _worldPacket >> Bits<1>(Allow); } void GuildInviteByName::Read() { _worldPacket >> SizedString::BitsSize<9>(Name); _worldPacket >> OptionalInit(ArenaTeam); _worldPacket >> SizedString::Data(Name); if (ArenaTeam) _worldPacket >> *ArenaTeam; } WorldPacket const* GuildInvite::Write() { _worldPacket << SizedString::BitsSize<6>(InviterName); _worldPacket << SizedString::BitsSize<7>(GuildName); _worldPacket << SizedString::BitsSize<7>(OldGuildName); _worldPacket.FlushBits(); _worldPacket << uint32(InviterVirtualRealmAddress); _worldPacket << uint32(GuildVirtualRealmAddress); _worldPacket << GuildGUID; _worldPacket << uint32(OldGuildVirtualRealmAddress); _worldPacket << OldGuildGUID; _worldPacket << uint32(EmblemStyle); _worldPacket << uint32(EmblemColor); _worldPacket << uint32(BorderStyle); _worldPacket << uint32(BorderColor); _worldPacket << uint32(Background); _worldPacket << int32(AchievementPoints); _worldPacket << SizedString::Data(InviterName); _worldPacket << SizedString::Data(GuildName); _worldPacket << SizedString::Data(OldGuildName); return &_worldPacket; } WorldPacket const* GuildEventStatusChange::Write() { _worldPacket << Guid; _worldPacket << Bits<1>(AFK); _worldPacket << Bits<1>(DND); _worldPacket.FlushBits(); return &_worldPacket; } WorldPacket const* GuildEventPresenceChange::Write() { _worldPacket << Guid; _worldPacket << uint32(VirtualRealmAddress); _worldPacket << SizedString::BitsSize<6>(Name); _worldPacket << Bits<1>(LoggedOn); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(Name); return &_worldPacket; } WorldPacket const* GuildEventMotd::Write() { _worldPacket << SizedString::BitsSize<11>(MotdText); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(MotdText); return &_worldPacket; } WorldPacket const* GuildEventPlayerJoined::Write() { _worldPacket << Guid; _worldPacket << uint32(VirtualRealmAddress); _worldPacket << SizedString::BitsSize<6>(Name); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(Name); return &_worldPacket; } WorldPacket const* GuildEventRankChanged::Write() { _worldPacket << RankID; return &_worldPacket; } WorldPacket const* GuildEventBankMoneyChanged::Write() { _worldPacket << Money; return &_worldPacket; } WorldPacket const* GuildEventLogQueryResults::Write() { _worldPacket.reserve(4 + Entry.size() * 38); _worldPacket << Size(Entry); for (GuildEventEntry const& entry : Entry) { _worldPacket << entry.PlayerGUID; _worldPacket << entry.OtherGUID; _worldPacket << uint8(entry.TransactionType); _worldPacket << uint8(entry.RankID); _worldPacket << uint32(entry.TransactionDate); } return &_worldPacket; } WorldPacket const* GuildEventPlayerLeft::Write() { _worldPacket << Bits<1>(Removed); _worldPacket << SizedString::BitsSize<6>(LeaverName); if (Removed) { _worldPacket << SizedString::BitsSize<6>(RemoverName); _worldPacket << RemoverGUID; _worldPacket << uint32(RemoverVirtualRealmAddress); _worldPacket << SizedString::Data(RemoverName); } _worldPacket << LeaverGUID; _worldPacket << uint32(LeaverVirtualRealmAddress); _worldPacket << SizedString::Data(LeaverName); return &_worldPacket; } WorldPacket const* GuildPermissionsQueryResults::Write() { _worldPacket << uint32(RankID); _worldPacket << int32(Flags); _worldPacket << int32(WithdrawGoldLimit); _worldPacket << int32(NumTabs); _worldPacket << Size(Tab); for (GuildRankTabPermissions const& tab : Tab) { _worldPacket << int32(tab.Flags); _worldPacket << int32(tab.WithdrawItemLimit); } return &_worldPacket; } void GuildSetRankPermissions::Read() { _worldPacket >> RankID; _worldPacket >> RankOrder; _worldPacket >> Flags; _worldPacket >> WithdrawGoldLimit; for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++) { _worldPacket >> TabFlags[i]; _worldPacket >> TabWithdrawItemLimit[i]; } _worldPacket.ResetBitPos(); _worldPacket >> SizedString::BitsSize<7>(RankName); _worldPacket >> SizedString::Data(RankName); _worldPacket >> OldFlags; } WorldPacket const* GuildEventNewLeader::Write() { _worldPacket << Bits<1>(SelfPromoted); _worldPacket << SizedString::BitsSize<6>(OldLeaderName); _worldPacket << SizedString::BitsSize<6>(NewLeaderName); _worldPacket.FlushBits(); _worldPacket << OldLeaderGUID; _worldPacket << uint32(OldLeaderVirtualRealmAddress); _worldPacket << NewLeaderGUID; _worldPacket << uint32(NewLeaderVirtualRealmAddress); _worldPacket << SizedString::Data(OldLeaderName); _worldPacket << SizedString::Data(NewLeaderName); return &_worldPacket; } WorldPacket const* GuildEventTabModified::Write() { _worldPacket << int32(Tab); _worldPacket << SizedString::BitsSize<7>(Name); _worldPacket << SizedString::BitsSize<9>(Icon); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(Name); _worldPacket << SizedString::Data(Icon); return &_worldPacket; } WorldPacket const* GuildEventTabTextChanged::Write() { _worldPacket << Tab; return &_worldPacket; } ByteBuffer& operator<<(ByteBuffer& data, GuildRankData const& rankData) { data << uint8(rankData.RankID); data << int32(rankData.RankOrder); data << uint32(rankData.Flags); data << uint32(rankData.WithdrawGoldLimit); for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++) { data << uint32(rankData.TabFlags[i]); data << uint32(rankData.TabWithdrawItemLimit[i]); } data << SizedString::BitsSize<7>(rankData.RankName); data.FlushBits(); data << SizedString::Data(rankData.RankName); return data; } void GuildAddRank::Read() { _worldPacket >> SizedString::BitsSize<7>(Name); _worldPacket >> RankOrder; _worldPacket >> SizedString::Data(Name); } void GuildAssignMemberRank::Read() { _worldPacket >> Member; _worldPacket >> RankOrder; } void GuildDeleteRank::Read() { _worldPacket >> RankOrder; } void GuildGetRanks::Read() { _worldPacket >> GuildGUID; } WorldPacket const* GuildRanks::Write() { _worldPacket << Size(Ranks); for (GuildRankData const& rank : Ranks) _worldPacket << rank; return &_worldPacket; } WorldPacket const* GuildSendRankChange::Write() { _worldPacket << Officer; _worldPacket << Other; _worldPacket << uint32(RankID); _worldPacket << Bits<1>(Promote); _worldPacket.FlushBits(); return &_worldPacket; } void GuildShiftRank::Read() { _worldPacket >> RankOrder; _worldPacket >> Bits<1>(ShiftUp); } void GuildUpdateInfoText::Read() { _worldPacket >> SizedString::BitsSize<11>(InfoText); _worldPacket >> SizedString::Data(InfoText); } void GuildSetMemberNote::Read() { _worldPacket >> NoteeGUID; _worldPacket >> SizedString::BitsSize<8>(Note); _worldPacket >> Bits<1>(IsPublic); _worldPacket >> SizedString::Data(Note); } WorldPacket const* GuildMemberUpdateNote::Write() { _worldPacket.reserve(16 + 2 + Note.size()); _worldPacket << Member; _worldPacket << SizedString::BitsSize<8>(Note); _worldPacket << Bits<1>(IsPublic); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(Note); return &_worldPacket; } void GuildDemoteMember::Read() { _worldPacket >> Demotee; } void GuildPromoteMember::Read() { _worldPacket >> Promotee; } void GuildOfficerRemoveMember::Read() { _worldPacket >> Removee; } void GuildChangeNameRequest::Read() { _worldPacket >> SizedString::BitsSize<7>(NewName); _worldPacket >> SizedString::Data(NewName); } WorldPacket const* GuildFlaggedForRename::Write() { _worldPacket << Bits<1>(FlagSet); _worldPacket.FlushBits(); return &_worldPacket; } void RequestGuildPartyState::Read() { _worldPacket >> GuildGUID; } WorldPacket const* GuildPartyState::Write() { _worldPacket << int32(NumMembers); _worldPacket << int32(NumRequired); _worldPacket << float(GuildXPEarnedMult); _worldPacket << Bits<1>(InGuildParty); _worldPacket.FlushBits(); return &_worldPacket; } ByteBuffer& operator<<(ByteBuffer& data, GuildRewardItem const& rewardItem) { data << uint32(rewardItem.ItemID); data << uint32(rewardItem.AchievementLogic); data << Size(rewardItem.AchievementsRequired); data << uint64(rewardItem.RaceMask.RawValue); data << int32(rewardItem.MinGuildLevel); data << int32(rewardItem.MinGuildRep); data << uint64(rewardItem.Cost); for (std::size_t i = 0; i < rewardItem.AchievementsRequired.size(); i++) data << uint32(rewardItem.AchievementsRequired[i]); return data; } void RequestGuildRewardsList::Read() { _worldPacket >> CurrentVersion; } WorldPacket const* GuildRewardList::Write() { _worldPacket << Version; _worldPacket << Size(RewardItems); for (GuildRewardItem const& item : RewardItems) _worldPacket << item; return &_worldPacket; } void GuildBankActivate::Read() { _worldPacket >> Banker; _worldPacket >> Bits<1>(FullUpdate); } void GuildBankBuyTab::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; } void GuildBankUpdateTab::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket.ResetBitPos(); _worldPacket >> SizedString::BitsSize<7>(Name); _worldPacket >> SizedString::BitsSize<9>(Icon); _worldPacket >> SizedString::Data(Name); _worldPacket >> SizedString::Data(Icon); } void GuildBankDepositMoney::Read() { _worldPacket >> Banker; _worldPacket >> Money; } void GuildBankQueryTab::Read() { _worldPacket >> Banker; _worldPacket >> Tab; _worldPacket >> Bits<1>(FullUpdate); } WorldPacket const* GuildBankRemainingWithdrawMoney::Write() { _worldPacket << RemainingWithdrawMoney; return &_worldPacket; } void GuildBankWithdrawMoney::Read() { _worldPacket >> Banker; _worldPacket >> Money; } WorldPacket const* GuildBankQueryResults::Write() { _worldPacket << uint64(Money); _worldPacket << int32(Tab); _worldPacket << int32(WithdrawalsRemaining); _worldPacket << Size(TabInfo); _worldPacket << Size(ItemInfo); _worldPacket << Bits<1>(FullUpdate); _worldPacket.FlushBits(); for (GuildBankTabInfo const& tab : TabInfo) { _worldPacket << int32(tab.TabIndex); _worldPacket << SizedString::BitsSize<7>(tab.Name); _worldPacket << SizedString::BitsSize<9>(tab.Icon); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(tab.Name); _worldPacket << SizedString::Data(tab.Icon); } for (GuildBankItemInfo const& item : ItemInfo) { _worldPacket << int32(item.Slot); _worldPacket << int32(item.Count); _worldPacket << int32(item.EnchantmentID); _worldPacket << int32(item.Charges); _worldPacket << int32(item.OnUseEnchantmentID); _worldPacket << int32(item.Flags); _worldPacket << item.Item; _worldPacket << BitsSize<2>(item.SocketEnchant); _worldPacket << Bits<1>(item.Locked); _worldPacket.FlushBits(); for (Item::ItemGemData const& socketEnchant : item.SocketEnchant) _worldPacket << socketEnchant; } return &_worldPacket; } void AutoGuildBankItem::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; _worldPacket >> ContainerItemSlot; _worldPacket >> OptionalInit(ContainerSlot); if (ContainerSlot) _worldPacket >> *ContainerSlot; } void StoreGuildBankItem::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; _worldPacket >> ContainerItemSlot; _worldPacket >> OptionalInit(ContainerSlot); if (ContainerSlot) _worldPacket >> *ContainerSlot; } void SwapItemWithGuildBankItem::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; _worldPacket >> ContainerItemSlot; _worldPacket >> OptionalInit(ContainerSlot); if (ContainerSlot) _worldPacket >> *ContainerSlot; } void SwapGuildBankItemWithGuildBankItem::Read() { _worldPacket >> Banker; _worldPacket >> BankTab[0]; _worldPacket >> BankSlot[0]; _worldPacket >> BankTab[1]; _worldPacket >> BankSlot[1]; } void MoveGuildBankItem::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; _worldPacket >> BankTab1; _worldPacket >> BankSlot1; } void MergeItemWithGuildBankItem::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; _worldPacket >> ContainerItemSlot; _worldPacket >> StackCount; _worldPacket >> OptionalInit(ContainerSlot); if (ContainerSlot) _worldPacket >> *ContainerSlot; } void SplitItemToGuildBank::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; _worldPacket >> ContainerItemSlot; _worldPacket >> StackCount; _worldPacket >> OptionalInit(ContainerSlot); if (ContainerSlot) _worldPacket >> *ContainerSlot; } void MergeGuildBankItemWithItem::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; _worldPacket >> ContainerItemSlot; _worldPacket >> StackCount; _worldPacket >> OptionalInit(ContainerSlot); if (ContainerSlot) _worldPacket >> *ContainerSlot; } void SplitGuildBankItemToInventory::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; _worldPacket >> ContainerItemSlot; _worldPacket >> StackCount; _worldPacket >> OptionalInit(ContainerSlot); if (ContainerSlot) _worldPacket >> *ContainerSlot; } void AutoStoreGuildBankItem::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; } void MergeGuildBankItemWithGuildBankItem::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; _worldPacket >> BankTab1; _worldPacket >> BankSlot1; _worldPacket >> StackCount; } void SplitGuildBankItem::Read() { _worldPacket >> Banker; _worldPacket >> BankTab; _worldPacket >> BankSlot; _worldPacket >> BankTab1; _worldPacket >> BankSlot1; _worldPacket >> StackCount; } void GuildBankLogQuery::Read() { _worldPacket >> Tab; } WorldPacket const* GuildBankLogQueryResults::Write() { _worldPacket << int32(Tab); _worldPacket << Size(Entry); _worldPacket << OptionalInit(WeeklyBonusMoney); _worldPacket.FlushBits(); for (GuildBankLogEntry const& logEntry : Entry) { _worldPacket << logEntry.PlayerGUID; _worldPacket << uint32(logEntry.TimeOffset); _worldPacket << int8(logEntry.EntryType); _worldPacket << OptionalInit(logEntry.Money); _worldPacket << OptionalInit(logEntry.ItemID); _worldPacket << OptionalInit(logEntry.Count); _worldPacket << OptionalInit(logEntry.OtherTab); _worldPacket.FlushBits(); if (logEntry.Money) _worldPacket << uint64(*logEntry.Money); if (logEntry.ItemID) _worldPacket << int32(*logEntry.ItemID); if (logEntry.Count) _worldPacket << int32(*logEntry.Count); if (logEntry.OtherTab) _worldPacket << int8(*logEntry.OtherTab); } if (WeeklyBonusMoney) _worldPacket << uint64(*WeeklyBonusMoney); return &_worldPacket; } void GuildBankTextQuery::Read() { _worldPacket >> Tab; } WorldPacket const* GuildBankTextQueryResult::Write() { _worldPacket << int32(Tab); _worldPacket << SizedString::BitsSize<14>(Text); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(Text); return &_worldPacket; } void GuildBankSetTabText::Read() { _worldPacket >> Tab; _worldPacket >> SizedString::BitsSize<14>(TabText); _worldPacket >> SizedString::Data(TabText); } void GuildQueryNews::Read() { _worldPacket >> GuildGUID; } ByteBuffer& operator<<(ByteBuffer& data, GuildNewsEvent const& newsEvent) { data << int32(newsEvent.Id); data << newsEvent.CompletedDate; data << int8(newsEvent.Type); data << int32(newsEvent.Flags); for (std::size_t i = 0; i < newsEvent.Data.size(); ++i) data << int32(newsEvent.Data[i]); data << newsEvent.MemberGuid; data << Size(newsEvent.MemberList); for (ObjectGuid const& memberGuid : newsEvent.MemberList) data << memberGuid; data << OptionalInit(newsEvent.Item); data.FlushBits(); if (newsEvent.Item) data << *newsEvent.Item; // WorldPackets::Item::ItemInstance return data; } WorldPacket const* GuildNews::Write() { _worldPacket << Size(NewsEvents); for (GuildNewsEvent const& newsEvent : NewsEvents) _worldPacket << newsEvent; return &_worldPacket; } void GuildNewsUpdateSticky::Read() { _worldPacket >> GuildGUID; _worldPacket >> NewsID; _worldPacket >> Bits<1>(Sticky); } void GuildSetGuildMaster::Read() { _worldPacket >> SizedString::BitsSize<9>(NewMasterName); _worldPacket >> SizedString::Data(NewMasterName); } WorldPacket const* GuildChallengeUpdate::Write() { for (int32 i = 0; i < GUILD_CHALLENGES_TYPES; ++i) _worldPacket << int32(CurrentCount[i]); for (int32 i = 0; i < GUILD_CHALLENGES_TYPES; ++i) _worldPacket << int32(MaxCount[i]); for (int32 i = 0; i < GUILD_CHALLENGES_TYPES; ++i) _worldPacket << int32(MaxLevelGold[i]); for (int32 i = 0; i < GUILD_CHALLENGES_TYPES; ++i) _worldPacket << int32(Gold[i]); return &_worldPacket; } void SaveGuildEmblem::Read() { _worldPacket >> Vendor; _worldPacket >> EStyle; _worldPacket >> EColor; _worldPacket >> BStyle; _worldPacket >> BColor; _worldPacket >> Bg; } WorldPacket const* PlayerSaveGuildEmblem::Write() { _worldPacket << int32(Error); return &_worldPacket; } void GuildSetAchievementTracking::Read() { _worldPacket >> Size(AchievementIDs); for (uint32& achievementID : AchievementIDs) _worldPacket >> achievementID; } WorldPacket const* GuildNameChanged::Write() { _worldPacket << GuildGUID; _worldPacket << SizedString::BitsSize<7>(GuildName); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(GuildName); return &_worldPacket; } }