/*
* This file is part of the AzerothCore 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 Affero General Public License as published by the
* Free Software Foundation; either version 3 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 Affero 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"
void WorldPackets::Guild::QueryGuildInfo::Read()
{
_worldPacket >> GuildId;
}
WorldPackets::Guild::QueryGuildInfoResponse::QueryGuildInfoResponse()
: ServerPacket(SMSG_GUILD_QUERY_RESPONSE) { }
WorldPacket const* WorldPackets::Guild::QueryGuildInfoResponse::Write()
{
_worldPacket << GuildId;
_worldPacket << Info.GuildName;
for (std::string const& rankName : Info.Ranks)
_worldPacket << rankName;
_worldPacket << uint32(Info.EmblemStyle);
_worldPacket << uint32(Info.EmblemColor);
_worldPacket << uint32(Info.BorderStyle);
_worldPacket << uint32(Info.BorderColor);
_worldPacket << uint32(Info.BackgroundColor);
_worldPacket << uint32(Info.RankCount);
return &_worldPacket;
}
void WorldPackets::Guild::GuildCreate::Read()
{
_worldPacket >> GuildName;
}
WorldPacket const* WorldPackets::Guild::GuildInfoResponse::Write()
{
_worldPacket << GuildName;
_worldPacket.AppendPackedTime(CreateDate);
_worldPacket << int32(NumMembers);
_worldPacket << int32(NumAccounts);
return &_worldPacket;
}
WorldPacket const* WorldPackets::Guild::GuildRoster::Write()
{
_worldPacket << uint32(MemberData.size());
_worldPacket << WelcomeText;
_worldPacket << InfoText;
_worldPacket << uint32(RankData.size());
for (GuildRankData const& rank : RankData)
_worldPacket << rank;
for (GuildRosterMemberData const& member : MemberData)
_worldPacket << member;
return &_worldPacket;
}
void WorldPackets::Guild::GuildUpdateMotdText::Read()
{
_worldPacket >> MotdText;
}
WorldPacket const* WorldPackets::Guild::GuildCommandResult::Write()
{
_worldPacket << int32(Command);
_worldPacket << Name;
_worldPacket << int32(Result);
return &_worldPacket;
}
void WorldPackets::Guild::GuildInviteByName::Read()
{
_worldPacket >> Name;
}
WorldPacket const* WorldPackets::Guild::GuildInvite::Write()
{
_worldPacket << InviterName;
_worldPacket << GuildName;
return &_worldPacket;
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberData const& rosterMemberData)
{
data << rosterMemberData.Guid;
data << uint8(rosterMemberData.Status);
data << rosterMemberData.Name;
data << int32(rosterMemberData.RankID);
data << uint8(rosterMemberData.Level);
data << uint8(rosterMemberData.ClassID);
data << uint8(rosterMemberData.Gender);
data << int32(rosterMemberData.AreaID);
if (!rosterMemberData.Status)
data << float(rosterMemberData.LastSave);
data << rosterMemberData.Note;
data << rosterMemberData.OfficerNote;
return data;
}
WorldPacket const* WorldPackets::Guild::GuildEvent::Write()
{
_worldPacket << uint8(Type);
_worldPacket << uint8(Params.size());
for (std::string_view param : Params)
_worldPacket << param;
switch (Type)
{
case GE_JOINED:
case GE_LEFT:
case GE_SIGNED_ON:
case GE_SIGNED_OFF:
_worldPacket << Guid;
break;
default:
break;
}
return &_worldPacket;
}
WorldPacket const* WorldPackets::Guild::GuildEventLogQueryResults::Write()
{
_worldPacket.reserve(1 + Entry.size() * sizeof(GuildEventEntry));
_worldPacket << uint8(Entry.size());
for (GuildEventEntry const& entry : Entry)
{
_worldPacket << uint8(entry.TransactionType);
_worldPacket << entry.PlayerGUID;
if (entry.TransactionType != GUILD_EVENT_LOG_JOIN_GUILD && entry.TransactionType != GUILD_EVENT_LOG_LEAVE_GUILD)
_worldPacket << entry.OtherGUID;
if (entry.TransactionType == GUILD_EVENT_LOG_PROMOTE_PLAYER || entry.TransactionType == GUILD_EVENT_LOG_DEMOTE_PLAYER)
_worldPacket << uint8(entry.RankID);
_worldPacket << uint32(entry.TransactionDate);
}
return &_worldPacket;
}
WorldPacket const* WorldPackets::Guild::GuildPermissionsQueryResults::Write()
{
_worldPacket << uint32(RankID);
_worldPacket << int32(Flags);
_worldPacket << int32(WithdrawGoldLimit);
_worldPacket << int8(NumTabs);
for (GuildRankTabPermissions const& tab : Tab)
{
_worldPacket << int32(tab.Flags);
_worldPacket << int32(tab.WithdrawItemLimit);
}
return &_worldPacket;
}
void WorldPackets::Guild::GuildSetRankPermissions::Read()
{
_worldPacket >> RankID;
_worldPacket >> Flags;
_worldPacket >> RankName;
_worldPacket >> WithdrawGoldLimit;
for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++)
{
_worldPacket >> TabFlags[i];
_worldPacket >> TabWithdrawItemLimit[i];
}
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRankData const& rankData)
{
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]);
}
return data;
}
void WorldPackets::Guild::GuildAddRank::Read()
{
_worldPacket >> Name;
}
void WorldPackets::Guild::GuildUpdateInfoText::Read()
{
_worldPacket >> InfoText;
}
void WorldPackets::Guild::GuildSetMemberNote::Read()
{
_worldPacket >> NoteeName;
_worldPacket >> Note;
}
void WorldPackets::Guild::GuildDemoteMember::Read()
{
_worldPacket >> Demotee;
}
void WorldPackets::Guild::GuildPromoteMember::Read()
{
_worldPacket >> Promotee;
}
void WorldPackets::Guild::GuildOfficerRemoveMember::Read()
{
_worldPacket >> Removee;
}
void WorldPackets::Guild::GuildBankActivate::Read()
{
_worldPacket >> Banker;
_worldPacket >> FullUpdate;
}
void WorldPackets::Guild::GuildBankBuyTab::Read()
{
_worldPacket >> Banker;
_worldPacket >> BankTab;
}
void WorldPackets::Guild::GuildBankUpdateTab::Read()
{
_worldPacket >> Banker;
_worldPacket >> BankTab;
_worldPacket >> Name;
_worldPacket >> Icon;
}
void WorldPackets::Guild::GuildBankDepositMoney::Read()
{
_worldPacket >> Banker;
_worldPacket >> Money;
}
void WorldPackets::Guild::GuildBankQueryTab::Read()
{
_worldPacket >> Banker;
_worldPacket >> Tab;
_worldPacket >> FullUpdate;
}
WorldPacket const* WorldPackets::Guild::GuildBankRemainingWithdrawMoney::Write()
{
_worldPacket << RemainingWithdrawMoney;
return &_worldPacket;
}
void WorldPackets::Guild::GuildBankWithdrawMoney::Read()
{
_worldPacket >> Banker;
_worldPacket >> Money;
}
WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write()
{
_worldPacket << uint64(Money);
_worldPacket << uint8(Tab);
_withdrawalsRemainingPos = _worldPacket.wpos();
_worldPacket << int32(WithdrawalsRemaining);
_worldPacket << uint8(FullUpdate);
if (!Tab && FullUpdate)
{
_worldPacket << uint8(TabInfo.size());
for (GuildBankTabInfo const& tab : TabInfo)
{
_worldPacket << tab.Name;
_worldPacket << tab.Icon;
}
}
_worldPacket << uint8(ItemInfo.size());
for (GuildBankItemInfo const& item : ItemInfo)
{
_worldPacket << uint8(item.Slot);
_worldPacket << uint32(item.ItemID);
if (item.ItemID)
{
_worldPacket << int32(item.Flags);
_worldPacket << int32(item.RandomPropertiesID);
if (item.RandomPropertiesID)
_worldPacket << int32(item.RandomPropertiesSeed);
_worldPacket << int32(item.Count);
_worldPacket << int32(item.EnchantmentID);
_worldPacket << uint8(item.Charges);
_worldPacket << uint8(item.SocketEnchant.size());
for (GuildBankSocketEnchant const& socketEnchant : item.SocketEnchant)
{
_worldPacket << uint8(socketEnchant.SocketIndex);
_worldPacket << int32(socketEnchant.SocketEnchantID);
}
}
}
return &_worldPacket;
}
void WorldPackets::Guild::GuildBankQueryResults::SetWithdrawalsRemaining(int32 withdrawalsRemaining)
{
WithdrawalsRemaining = withdrawalsRemaining;
_worldPacket.put(_withdrawalsRemainingPos, withdrawalsRemaining);
}
void WorldPackets::Guild::GuildBankSwapItems::Read()
{
_worldPacket >> Banker;
_worldPacket >> BankOnly;
if (BankOnly)
{
// dest
_worldPacket >> BankTab;
_worldPacket >> BankSlot;
_worldPacket >> ItemID;
// src
_worldPacket >> BankTab1;
_worldPacket >> BankSlot1;
_worldPacket >> ItemID1;
_worldPacket >> AutoStore;
_worldPacket >> BankItemCount;
}
else
{
_worldPacket >> BankTab;
_worldPacket >> BankSlot;
_worldPacket >> ItemID;
_worldPacket >> AutoStore;
if (AutoStore)
{
_worldPacket >> BankItemCount;
_worldPacket >> ToSlot;
_worldPacket >> StackCount;
}
else
{
_worldPacket >> ContainerSlot;
_worldPacket >> ContainerItemSlot;
_worldPacket >> ToSlot;
_worldPacket >> StackCount;
}
}
}
void WorldPackets::Guild::GuildBankLogQuery::Read()
{
_worldPacket >> Tab;
}
WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write()
{
_worldPacket << uint8(Tab);
_worldPacket << uint8(Entry.size());
for (GuildBankLogEntry const& logEntry : Entry)
{
_worldPacket << int8(logEntry.EntryType);
_worldPacket << logEntry.PlayerGUID;
switch (logEntry.EntryType)
{
case GUILD_BANK_LOG_DEPOSIT_ITEM:
case GUILD_BANK_LOG_WITHDRAW_ITEM:
_worldPacket << uint32(logEntry.ItemID);
_worldPacket << uint32(logEntry.Count);
break;
case GUILD_BANK_LOG_MOVE_ITEM:
case GUILD_BANK_LOG_MOVE_ITEM2:
_worldPacket << uint32(logEntry.ItemID);
_worldPacket << uint32(logEntry.Count);
_worldPacket << uint8(logEntry.OtherTab);
break;
default:
_worldPacket << uint32(logEntry.Money);
break;
}
_worldPacket << uint32(logEntry.TimeOffset);
}
return &_worldPacket;
}
void WorldPackets::Guild::GuildBankTextQuery::Read()
{
_worldPacket >> Tab;
}
WorldPacket const* WorldPackets::Guild::GuildBankTextQueryResult::Write()
{
_worldPacket << uint8(Tab);
_worldPacket << Text;
return &_worldPacket;
}
void WorldPackets::Guild::GuildBankSetTabText::Read()
{
_worldPacket >> Tab;
_worldPacket >> TabText;
}
void WorldPackets::Guild::GuildSetGuildMaster::Read()
{
_worldPacket >> NewMasterName;
}
void WorldPackets::Guild::SaveGuildEmblem::Read()
{
_worldPacket >> Vendor;
_worldPacket >> EStyle;
_worldPacket >> EColor;
_worldPacket >> BStyle;
_worldPacket >> BColor;
_worldPacket >> Bg;
}
WorldPacket const* WorldPackets::Guild::PlayerSaveGuildEmblem::Write()
{
_worldPacket << int32(Error);
return &_worldPacket;
}