Core/Items: Implement azerite essences

Port From (https://github.com/TrinityCore/TrinityCore/commit/ec9d624aec9e0a39b1bcee7d4077f46be358faad)
This commit is contained in:
hondacrx
2019-11-22 21:39:35 -05:00
parent c05d592f4c
commit 796c11795f
30 changed files with 1231 additions and 74 deletions
@@ -17,6 +17,7 @@
using Framework.Constants;
using Game.Entities;
using Framework.Dynamic;
namespace Game.Network.Packets
{
@@ -33,4 +34,69 @@ namespace Game.Network.Packets
public ObjectGuid ItemGUID;
public ulong XP;
}
class AzeriteEssenceForgeOpened : ServerPacket
{
public AzeriteEssenceForgeOpened() : base(ServerOpcodes.AzeriteEssenceForgeOpened) { }
public override void Write()
{
_worldPacket.WritePackedGuid(ForgeGUID);
}
public ObjectGuid ForgeGUID;
}
class AzeriteEssenceForgeClose : ServerPacket
{
public AzeriteEssenceForgeClose() : base(ServerOpcodes.AzeriteEssenceForgeClose) { }
public override void Write() { }
}
class AzeriteEssenceUnlockMilestone : ClientPacket
{
public AzeriteEssenceUnlockMilestone(WorldPacket packet) : base(packet) { }
public override void Read()
{
AzeriteItemMilestonePowerID = _worldPacket.ReadInt32();
}
public int AzeriteItemMilestonePowerID;
}
class AzeriteEssenceActivateEssence : ClientPacket
{
public AzeriteEssenceActivateEssence(WorldPacket packet) : base(packet) { }
public override void Read()
{
AzeriteEssenceID = _worldPacket.ReadUInt32();
Slot = _worldPacket.ReadUInt8();
}
public uint AzeriteEssenceID;
public byte Slot;
}
class AzeriteEssenceSelectionResult : ServerPacket
{
public AzeriteEssenceSelectionResult() : base(ServerOpcodes.AzeriteEssenceSelectionResult) { }
public override void Write()
{
_worldPacket.WriteBits((int)Reason, 4);
_worldPacket.WriteBit(Slot.HasValue);
_worldPacket.WriteUInt32(Arg);
_worldPacket.WriteUInt32(AzeriteEssenceID);
if (Slot.HasValue)
_worldPacket.WriteUInt8(Slot.Value);
}
public AzeriteEssenceActivateResult Reason;
public uint Arg;
public uint AzeriteEssenceID;
public byte? Slot;
}
}
+26 -2
View File
@@ -75,7 +75,7 @@ namespace Game.Network.Packets
GuildData.Value.Write(_worldPacket);
if (AzeriteLevel.HasValue)
_worldPacket.WriteInt32(AzeriteLevel.Value);
_worldPacket.WriteUInt32((uint)AzeriteLevel);
}
public PlayerModelDisplayInfo DisplayInfo;
@@ -84,7 +84,7 @@ namespace Game.Network.Packets
public List<ushort> PvpTalents = new List<ushort>();
public Optional<InspectGuildData> GuildData = new Optional<InspectGuildData>();
public Array<PVPBracketData> Bracket = new Array<PVPBracketData>(6);
public Optional<int> AzeriteLevel;
public uint? AzeriteLevel;
public int ItemLevel;
public uint LifetimeHK;
public uint HonorLevel;
@@ -156,6 +156,30 @@ namespace Game.Network.Packets
}
++i;
}
AzeriteItem azeriteItem = item.ToAzeriteItem();
if (azeriteItem != null)
{
SelectedAzeriteEssences essences = azeriteItem.GetSelectedAzeriteEssences();
if (essences != null)
{
for (byte slot = 0; slot < essences.AzeriteEssenceID.GetSize(); ++slot)
{
AzeriteEssenceData essence = new AzeriteEssenceData();
essence.Index = slot;
essence.AzeriteEssenceID = essences.AzeriteEssenceID[slot];
if (essence.AzeriteEssenceID != 0)
{
essence.Rank = azeriteItem.GetEssenceRank(essence.AzeriteEssenceID);
essence.SlotUnlocked = true;
}
else
essence.SlotUnlocked = azeriteItem.HasUnlockedEssenceSlot(slot);
AzeriteEssences.Add(essence);
}
}
}
}
public void Write(WorldPacket data)