/*
* 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 "AchievementPackets.h"
#include "PacketOperators.h"
namespace WorldPackets::Achievement
{
ByteBuffer& operator<<(ByteBuffer& data, EarnedAchievement const& earned)
{
data << uint32(earned.Id);
data << earned.Date;
data << earned.Owner;
data << uint32(earned.VirtualRealmAddress);
data << uint32(earned.NativeRealmAddress);
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, CriteriaProgress const& criteria)
{
data << uint32(criteria.Id);
data << uint64(criteria.Quantity);
data << criteria.Player;
data << uint32(criteria.Flags);
data << uint32(criteria.StateFlags);
data << criteria.Date;
data << criteria.TimeFromStart;
data << criteria.TimeFromCreate;
data << OptionalInit(criteria.DynamicID);
data.FlushBits();
if (criteria.DynamicID)
data << uint64(*criteria.DynamicID);
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, AllAchievements const& allAchievements)
{
data << Size(allAchievements.Earned);
data << Size(allAchievements.Progress);
for (EarnedAchievement const& earned : allAchievements.Earned)
data << earned;
for (CriteriaProgress const& progress : allAchievements.Progress)
data << progress;
return data;
}
WorldPacket const* AllAchievementData::Write()
{
_worldPacket << Data;
return &_worldPacket;
}
WorldPacket const* AllAccountCriteria::Write()
{
_worldPacket << Size(Progress);
for (CriteriaProgress const& progress : Progress)
_worldPacket << progress;
return &_worldPacket;
}
WorldPacket const* RespondInspectAchievements::Write()
{
_worldPacket << Player;
_worldPacket << Data;
return &_worldPacket;
}
WorldPacket const* CriteriaUpdate::Write()
{
_worldPacket << uint32(CriteriaID);
_worldPacket << uint64(Quantity);
_worldPacket << PlayerGUID;
_worldPacket << uint32(Flags);
_worldPacket << uint32(StateFlags);
_worldPacket << CurrentTime;
_worldPacket << ElapsedTime;
_worldPacket << CreationTime;
_worldPacket << OptionalInit(DynamicID);
_worldPacket.FlushBits();
if (DynamicID)
_worldPacket << uint64(*DynamicID);
return &_worldPacket;
}
WorldPacket const* AccountCriteriaUpdate::Write()
{
_worldPacket << Progress;
return &_worldPacket;
}
WorldPacket const* CriteriaDeleted::Write()
{
_worldPacket << uint32(CriteriaID);
return &_worldPacket;
}
WorldPacket const* AchievementDeleted::Write()
{
_worldPacket << uint32(AchievementID);
_worldPacket << uint32(Immunities);
return &_worldPacket;
}
WorldPacket const* AchievementEarned::Write()
{
_worldPacket << Sender;
_worldPacket << Earner;
_worldPacket << uint32(AchievementID);
_worldPacket << Time;
_worldPacket << uint32(EarnerNativeRealm);
_worldPacket << uint32(EarnerVirtualRealm);
_worldPacket << Bits<1>(Initial);
_worldPacket.FlushBits();
return &_worldPacket;
}
WorldPacket const* BroadcastAchievement::Write()
{
_worldPacket << SizedString::BitsSize<7>(Name);
_worldPacket << Bits<1>(GuildAchievement);
_worldPacket << PlayerGUID;
_worldPacket << AchievementID;
_worldPacket << SizedString::Data(Name);
return &_worldPacket;
}
WorldPacket const* GuildCriteriaUpdate::Write()
{
_worldPacket << Size(Progress);
for (GuildCriteriaProgress const& progress : Progress)
{
_worldPacket << int32(progress.CriteriaID);
_worldPacket << progress.DateCreated;
_worldPacket << progress.DateStarted;
_worldPacket << int64(progress.DateUpdated.GetPackedTime());
_worldPacket << uint64(progress.Quantity);
_worldPacket << progress.PlayerGUID;
_worldPacket << int32(progress.Flags);
_worldPacket << int32(progress.StateFlags);
}
return &_worldPacket;
}
WorldPacket const* GuildCriteriaDeleted::Write()
{
_worldPacket << GuildGUID;
_worldPacket << int32(CriteriaID);
return &_worldPacket;
}
void GuildSetFocusedAchievement::Read()
{
_worldPacket >> AchievementID;
}
WorldPacket const* GuildAchievementDeleted::Write()
{
_worldPacket << GuildGUID;
_worldPacket << uint32(AchievementID);
_worldPacket << TimeDeleted;
return &_worldPacket;
}
WorldPacket const* GuildAchievementEarned::Write()
{
_worldPacket << GuildGUID;
_worldPacket << uint32(AchievementID);
_worldPacket << TimeEarned;
return &_worldPacket;
}
WorldPacket const* AllGuildAchievements::Write()
{
_worldPacket << Size(Earned);
for (EarnedAchievement const& earned : Earned)
_worldPacket << earned;
return &_worldPacket;
}
void GuildGetAchievementMembers::Read()
{
_worldPacket >> PlayerGUID;
_worldPacket >> GuildGUID;
_worldPacket >> AchievementID;
}
ByteBuffer& operator<<(ByteBuffer& data, GuildAchievementMember const& guildAchievementMember)
{
data << guildAchievementMember.MemberGUID;
return data;
}
WorldPacket const* GuildAchievementMembers::Write()
{
_worldPacket << GuildGUID;
_worldPacket << int32(AchievementID);
_worldPacket << Size(Member);
for (GuildAchievementMember const& member : Member)
_worldPacket << member;
return &_worldPacket;
}
}