/*
* 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_INSPECT_PACKETS_H
#define TRINITYCORE_INSPECT_PACKETS_H
#include "Packet.h"
#include "CharacterPackets.h"
#include "DBCEnums.h"
#include "ItemPacketsCommon.h"
#include "ObjectGuid.h"
#include "RaceMask.h"
#include "SharedDefines.h"
#include "TalentPackets.h"
#include "TraitPacketsCommon.h"
class Item;
class Player;
namespace WorldPackets
{
namespace Inspect
{
class Inspect final : public ClientPacket
{
public:
explicit Inspect(WorldPacket&& packet) : ClientPacket(CMSG_INSPECT, std::move(packet)) { }
void Read() override;
ObjectGuid Target;
};
struct InspectEnchantData
{
InspectEnchantData(uint32 id, uint8 index) : Id(id), Index(index) { }
uint32 Id = 0;
uint8 Index = 0;
};
struct AzeriteEssenceData
{
uint32 Index = 0;
uint32 AzeriteEssenceID = 0;
uint32 Rank = 0;
bool SlotUnlocked = false;
};
struct InspectItemData
{
InspectItemData(::Item const* item, uint8 index);
ObjectGuid CreatorGUID;
Item::ItemInstance Item;
uint8 Index = 0;
bool Usable = false;
std::vector Enchants;
std::vector Gems;
std::vector AzeritePowers;
std::vector AzeriteEssences;
};
struct PlayerModelDisplayInfo
{
ObjectGuid GUID;
std::vector Items;
std::string Name;
int32 SpecializationID = 0;
uint8 GenderID = GENDER_NONE;
uint8 Race = RACE_NONE;
uint8 ClassID = CLASS_NONE;
std::vector Customizations;
void Initialize(Player const* player);
};
struct InspectGuildData
{
ObjectGuid GuildGUID;
int32 NumGuildMembers = 0;
int32 AchievementPoints = 0;
};
struct PVPBracketData
{
int32 Rating = 0;
int32 RatingID = 0;
int32 Rank = 0;
int32 WeeklyPlayed = 0;
int32 WeeklyWon = 0;
int32 SeasonPlayed = 0;
int32 SeasonWon = 0;
int32 WeeklyBestRating = 0;
int32 LastWeeksBestRating = 0;
int32 Tier = 0;
int32 WeeklyBestTier = 0;
int32 SeasonBestRating = 0;
uint8 SeasonBestTierEnum = 0;
int32 RoundsSeasonPlayed = 0;
int32 RoundsSeasonWon = 0;
int32 RoundsWeeklyPlayed = 0;
int32 RoundsWeeklyWon = 0;
uint8 Bracket = 0;
bool Disqualified = false;
};
struct TraitInspectInfo
{
int32 PlayerLevel = 0;
int32 SpecID = 0;
Traits::TraitConfig ActiveCombatTraits;
};
class InspectResult final : public ServerPacket
{
public:
explicit InspectResult() : ServerPacket(SMSG_INSPECT_RESULT, 4096) { }
WorldPacket const* Write() override;
PlayerModelDisplayInfo DisplayInfo;
std::vector Glyphs;
std::vector Talents;
std::array PvpTalents = { };
Optional GuildData;
std::array Bracket;
Optional AzeriteLevel;
int32 ItemLevel = 0;
uint32 LifetimeHK = 0;
uint32 HonorLevel = 0;
uint16 TodayHK = 0;
uint16 YesterdayHK = 0;
uint8 LifetimeMaxRank = 0;
Talent::ClassicTalentInfoUpdate TalentInfo;
TraitInspectInfo TraitsInfo;
};
class QueryInspectAchievements final : public ClientPacket
{
public:
explicit QueryInspectAchievements(WorldPacket&& packet) : ClientPacket(CMSG_QUERY_INSPECT_ACHIEVEMENTS, std::move(packet)) { }
void Read() override;
ObjectGuid Guid;
};
/// RespondInspectAchievements in AchievementPackets
}
}
#endif // TRINITYCORE_INSPECT_PACKETS_H