aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-11-22 11:02:04 +0100
committerShauren <shauren.trinity@gmail.com>2019-11-22 11:02:04 +0100
commitec9d624aec9e0a39b1bcee7d4077f46be358faad (patch)
treee5aceec6e06d537fb1966f0ccab913f8558b3b8e /src/server/game/Server
parent2a46798362c7e39544886e406a619360096298a1 (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')
-rw-r--r--src/server/game/Server/Packets/AzeritePackets.cpp31
-rw-r--r--src/server/game/Server/Packets/AzeritePackets.h54
-rw-r--r--src/server/game/Server/Packets/InspectPackets.cpp23
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp10
-rw-r--r--src/server/game/Server/WorldSession.h10
5 files changed, 123 insertions, 5 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()
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index b26656010ca..d7a6c6f7f94 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -184,8 +184,8 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_AUTO_STORE_BAG_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBagItemOpcode);
DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_VIEWED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAzeriteEssenceActivateEssence);
+ DEFINE_HANDLER(CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAzeriteEssenceUnlockMilestone);
DEFINE_HANDLER(CMSG_BANKER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBankerActivateOpcode);
DEFINE_HANDLER(CMSG_BATTLEFIELD_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldLeaveOpcode);
DEFINE_HANDLER(CMSG_BATTLEFIELD_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldListOpcode);
@@ -949,9 +949,9 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AVAILABLE_HOTFIXES, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_EMPOWERED_ITEM_EQUIPPED_STATUS_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_EMPOWERED_ITEM_RESPEC_OPEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_ESSENCE_FORGE_CLOSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_ESSENCE_FORGE_OPENED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_ESSENCE_SELECTION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_ESSENCE_FORGE_CLOSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_ESSENCE_FORGE_OPENED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_ESSENCE_SELECTION_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_XP_GAIN, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BAN_REASON, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BARBER_SHOP_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 51160bddb3f..808359495b6 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -109,6 +109,12 @@ namespace WorldPackets
enum class ConnectToSerial : uint32;
}
+ namespace Azerite
+ {
+ class AzeriteEssenceUnlockMilestone;
+ class AzeriteEssenceActivateEssence;
+ }
+
namespace Bank
{
class AutoBankItem;
@@ -1718,6 +1724,10 @@ class TC_GAME_API WorldSession
// Scenario
void HandleQueryScenarioPOI(WorldPackets::Scenario::QueryScenarioPOI& queryScenarioPOI);
+ // Azerite
+ void HandleAzeriteEssenceUnlockMilestone(WorldPackets::Azerite::AzeriteEssenceUnlockMilestone& azeriteEssenceUnlockMilestone);
+ void HandleAzeriteEssenceActivateEssence(WorldPackets::Azerite::AzeriteEssenceActivateEssence& azeriteEssenceActivateEssence);
+
union ConnectToKey
{
struct