/* * 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_ACHIEVEMENT_PACKETS_H #define TRINITYCORE_ACHIEVEMENT_PACKETS_H #include "ObjectGuid.h" #include "Optional.h" #include "Packet.h" #include "PacketUtilities.h" #include "WowTime.h" namespace WorldPackets { namespace Achievement { struct EarnedAchievement { uint32 Id = 0; WowTime Date; ObjectGuid Owner; uint32 VirtualRealmAddress = 0; uint32 NativeRealmAddress = 0; }; struct CriteriaProgress { uint32 Id = 0; uint64 Quantity = 0; ObjectGuid Player; uint32 StateFlags = 0; uint32 Flags = 0; WowTime Date; Duration TimeFromStart; Duration TimeFromCreate; Optional DynamicID; }; struct AllAchievements { std::vector Earned; std::vector Progress; }; class AllAchievementData final : public ServerPacket { public: explicit AllAchievementData() : ServerPacket(SMSG_ALL_ACHIEVEMENT_DATA) { } WorldPacket const* Write() override; AllAchievements Data; }; class AllAccountCriteria final : public ServerPacket { public: explicit AllAccountCriteria() : ServerPacket(SMSG_ALL_ACCOUNT_CRITERIA) { } WorldPacket const* Write() override; std::vector Progress; }; class RespondInspectAchievements final : public ServerPacket { public: explicit RespondInspectAchievements() : ServerPacket(SMSG_RESPOND_INSPECT_ACHIEVEMENTS) { } WorldPacket const* Write() override; ObjectGuid Player; AllAchievements Data; }; class CriteriaUpdate final : public ServerPacket { public: explicit CriteriaUpdate() : ServerPacket(SMSG_CRITERIA_UPDATE, 4 + 8 + 16 + 4 + 4 + 4 + 4) { } WorldPacket const* Write() override; uint32 CriteriaID = 0; uint64 Quantity = 0; ObjectGuid PlayerGUID; uint32 StateFlags = 0; uint32 Flags = 0; WowTime CurrentTime; Duration ElapsedTime; Timestamp<> CreationTime; Optional DynamicID; }; class AccountCriteriaUpdate final : public ServerPacket { public: explicit AccountCriteriaUpdate() : ServerPacket(SMSG_ACCOUNT_CRITERIA_UPDATE) { } WorldPacket const* Write() override; CriteriaProgress Progress; }; class CriteriaDeleted final : public ServerPacket { public: explicit CriteriaDeleted() : ServerPacket(SMSG_CRITERIA_DELETED, 4) { } WorldPacket const* Write() override; uint32 CriteriaID = 0; }; class AchievementDeleted final : public ServerPacket { public: explicit AchievementDeleted() : ServerPacket(SMSG_ACHIEVEMENT_DELETED, 8) { } WorldPacket const* Write() override; uint32 AchievementID = 0; uint32 Immunities = 0; // this is just garbage, not used by client }; class AchievementEarned final : public ServerPacket { public: explicit AchievementEarned() : ServerPacket(SMSG_ACHIEVEMENT_EARNED, 16 + 4 + 4 + 4 + 4 + 1 + 16) { } WorldPacket const* Write() override; ObjectGuid Earner; uint32 EarnerNativeRealm = 0; uint32 EarnerVirtualRealm = 0; uint32 AchievementID = 0; WowTime Time; bool Initial = false; ObjectGuid Sender; }; class BroadcastAchievement final : public ServerPacket { public: explicit BroadcastAchievement() : ServerPacket(SMSG_BROADCAST_ACHIEVEMENT) { } WorldPacket const* Write() override; ObjectGuid PlayerGUID; std::string Name; uint32 AchievementID = 0; bool GuildAchievement = false; }; struct GuildCriteriaProgress { int32 CriteriaID = 0; Timestamp<> DateCreated; Timestamp<> DateStarted; WowTime DateUpdated; uint64 Quantity = 0; ObjectGuid PlayerGUID; int32 Flags = 0; int32 StateFlags = 0; }; class GuildCriteriaUpdate final : public ServerPacket { public: explicit GuildCriteriaUpdate() : ServerPacket(SMSG_GUILD_CRITERIA_UPDATE) { } WorldPacket const* Write() override; std::vector Progress; }; class GuildCriteriaDeleted final : public ServerPacket { public: explicit GuildCriteriaDeleted() : ServerPacket(SMSG_GUILD_CRITERIA_DELETED, 16 + 4) { } WorldPacket const* Write() override; ObjectGuid GuildGUID; int32 CriteriaID = 0; }; class GuildSetFocusedAchievement final : public ClientPacket { public: explicit GuildSetFocusedAchievement(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT, std::move(packet)) { } void Read() override; uint32 AchievementID = 0; }; class GuildAchievementDeleted final : public ServerPacket { public: explicit GuildAchievementDeleted() : ServerPacket(SMSG_GUILD_ACHIEVEMENT_DELETED, 16 + 4 + 4) { } WorldPacket const* Write() override; ObjectGuid GuildGUID; uint32 AchievementID = 0; WowTime TimeDeleted; }; class GuildAchievementEarned final : public ServerPacket { public: explicit GuildAchievementEarned() : ServerPacket(SMSG_GUILD_ACHIEVEMENT_EARNED, 16 + 4 + 4) { } WorldPacket const* Write() override; uint32 AchievementID = 0; ObjectGuid GuildGUID; WowTime TimeEarned; }; class AllGuildAchievements final : public ServerPacket { public: explicit AllGuildAchievements() : ServerPacket(SMSG_ALL_GUILD_ACHIEVEMENTS) { } WorldPacket const* Write() override; std::vector Earned; }; class GuildGetAchievementMembers final : public ClientPacket { public: explicit GuildGetAchievementMembers(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS, std::move(packet)) { } void Read() override; ObjectGuid PlayerGUID; ObjectGuid GuildGUID; int32 AchievementID = 0; }; struct GuildAchievementMember { GuildAchievementMember() = default; GuildAchievementMember(ObjectGuid guid) : MemberGUID(guid) { } ObjectGuid MemberGUID; }; class GuildAchievementMembers final : public ServerPacket { public: explicit GuildAchievementMembers() : ServerPacket(SMSG_GUILD_ACHIEVEMENT_MEMBERS) { } WorldPacket const* Write() override; ObjectGuid GuildGUID; int32 AchievementID = 0; std::vector Member; }; ByteBuffer& operator<<(ByteBuffer& data, CriteriaProgress const& criteria); } } #endif // TRINITYCORE_ACHIEVEMENT_PACKETS_H