diff options
| author | Shauren <shauren.trinity@gmail.com> | 2019-11-22 11:02:04 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2019-11-22 11:02:04 +0100 |
| commit | ec9d624aec9e0a39b1bcee7d4077f46be358faad (patch) | |
| tree | e5aceec6e06d537fb1966f0ccab913f8558b3b8e /src/server/game/Server/Packets | |
| parent | 2a46798362c7e39544886e406a619360096298a1 (diff) | |
Core/Items: Implement azerite essences
* Implement inspecting heart of azeroth data
* Fixed heart of azeroth item level - bonuses now apply
Diffstat (limited to 'src/server/game/Server/Packets')
| -rw-r--r-- | src/server/game/Server/Packets/AzeritePackets.cpp | 31 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/AzeritePackets.h | 54 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/InspectPackets.cpp | 23 |
3 files changed, 108 insertions, 0 deletions
diff --git a/src/server/game/Server/Packets/AzeritePackets.cpp b/src/server/game/Server/Packets/AzeritePackets.cpp index 97e8bcc81ff..9f300d2d72d 100644 --- a/src/server/game/Server/Packets/AzeritePackets.cpp +++ b/src/server/game/Server/Packets/AzeritePackets.cpp @@ -16,6 +16,7 @@ */ #include "AzeritePackets.h" +#include "Util.h" WorldPacket const* WorldPackets::Azerite::AzeriteXpGain::Write() { @@ -24,3 +25,33 @@ WorldPacket const* WorldPackets::Azerite::AzeriteXpGain::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::Azerite::AzeriteEssenceForgeOpened::Write() +{ + _worldPacket << ForgeGUID; + + return &_worldPacket; +} + +void WorldPackets::Azerite::AzeriteEssenceUnlockMilestone::Read() +{ + _worldPacket >> AzeriteItemMilestonePowerID; +} + +void WorldPackets::Azerite::AzeriteEssenceActivateEssence::Read() +{ + _worldPacket >> AzeriteEssenceID; + _worldPacket >> Slot; +} + +WorldPacket const* WorldPackets::Azerite::AzeriteEssenceSelectionResult::Write() +{ + _worldPacket.WriteBits(AsUnderlyingType(Reason), 4); + _worldPacket.WriteBit(Slot.is_initialized()); + _worldPacket << int32(Arg); + _worldPacket << int32(AzeriteEssenceID); + if (Slot) + _worldPacket << uint8(*Slot); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/AzeritePackets.h b/src/server/game/Server/Packets/AzeritePackets.h index 31ca4cdb13a..fea3a799db6 100644 --- a/src/server/game/Server/Packets/AzeritePackets.h +++ b/src/server/game/Server/Packets/AzeritePackets.h @@ -19,7 +19,9 @@ #define AzeriteItemPackets_h__ #include "Packet.h" +#include "ItemDefines.h" #include "ObjectGuid.h" +#include "Optional.h" namespace WorldPackets { @@ -35,6 +37,58 @@ namespace WorldPackets ObjectGuid ItemGUID; uint64 XP = 0; }; + + class AzeriteEssenceForgeOpened final : public ServerPacket + { + public: + AzeriteEssenceForgeOpened() : ServerPacket(SMSG_AZERITE_ESSENCE_FORGE_OPENED, 16) { } + + WorldPacket const* Write() override; + + ObjectGuid ForgeGUID; + }; + + class AzeriteEssenceForgeClose final : public ServerPacket + { + public: + AzeriteEssenceForgeClose() : ServerPacket(SMSG_AZERITE_ESSENCE_FORGE_CLOSE, 0) { } + + WorldPacket const* Write() override { return &_worldPacket; } + }; + + class AzeriteEssenceUnlockMilestone final : public ClientPacket + { + public: + AzeriteEssenceUnlockMilestone(WorldPacket&& packet) : ClientPacket(CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE, std::move(packet)) { } + + void Read() override; + + int32 AzeriteItemMilestonePowerID = 0; + }; + + class AzeriteEssenceActivateEssence final : public ClientPacket + { + public: + AzeriteEssenceActivateEssence(WorldPacket&& packet) : ClientPacket(CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE, std::move(packet)) { } + + void Read() override; + + int32 AzeriteEssenceID = 0; + uint8 Slot = 0; + }; + + class AzeriteEssenceSelectionResult final : public ServerPacket + { + public: + AzeriteEssenceSelectionResult() : ServerPacket(SMSG_AZERITE_ESSENCE_SELECTION_RESULT, 0) { } + + WorldPacket const* Write() override; + + AzeriteEssenceActivateResult Reason = AzeriteEssenceActivateResult::None; + int32 Arg = 0; + int32 AzeriteEssenceID = 0; + Optional<uint8> Slot; + }; } } diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp index 9442a6e0b73..cd5cc89db01 100644 --- a/src/server/game/Server/Packets/InspectPackets.cpp +++ b/src/server/game/Server/Packets/InspectPackets.cpp @@ -16,6 +16,7 @@ */ #include "InspectPackets.h" +#include "AzeriteItem.h" #include "Item.h" #include "Player.h" @@ -166,6 +167,28 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint } ++i; } + + if (AzeriteItem const* azeriteItem = item->ToAzeriteItem()) + { + if (UF::SelectedAzeriteEssences const* essences = azeriteItem->GetSelectedAzeriteEssences()) + { + for (uint8 slot = 0; slot < essences->AzeriteEssenceID.size(); ++slot) + { + AzeriteEssences.emplace_back(); + + WorldPackets::Inspect::AzeriteEssenceData& essence = AzeriteEssences.back(); + essence.Index = slot; + essence.AzeriteEssenceID = essences->AzeriteEssenceID[slot]; + if (essence.AzeriteEssenceID) + { + essence.Rank = azeriteItem->GetEssenceRank(essence.AzeriteEssenceID); + essence.SlotUnlocked = true; + } + else + essence.SlotUnlocked = azeriteItem->HasUnlockedEssenceSlot(slot); + } + } + } } WorldPacket const* WorldPackets::Inspect::InspectResult::Write() |
