Skip to content

Commit

Permalink
Improve temp enchant handling (WowLegacyCore#27)
Browse files Browse the repository at this point in the history
Co-authored-by: MaxtorCoder <warsongkiller.s8@gmail.com>
  • Loading branch information
insunaa and MaxtorCoder authored May 28, 2022
1 parent 986dcf6 commit 8e66880
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 0 deletions.
13 changes: 13 additions & 0 deletions HermesProxy/GlobalSessionData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,19 @@ public byte GetItemSpellSlot(WowGuid128 guid, uint spellId)
uint itemId = updates[OBJECT_FIELD_ENTRY].UInt32Value;
return GameData.GetItemEffectSlot(itemId, spellId);
}
public uint GetItemId(WowGuid128 guid)
{
int OBJECT_FIELD_ENTRY = LegacyVersion.GetUpdateField(ObjectField.OBJECT_FIELD_ENTRY);
if (OBJECT_FIELD_ENTRY < 0)
return 0;

var updates = GetCachedObjectFieldsLegacy(guid);
if (updates == null)
return 0;

uint itemId = updates[OBJECT_FIELD_ENTRY].UInt32Value;
return itemId;
}
public void SetFlatSpellMod(byte spellMod, byte spellMask, int amount)
{
if (FlatSpellMods.ContainsKey(spellMod))
Expand Down
32 changes: 32 additions & 0 deletions HermesProxy/World/Client/PacketHandlers/ItemHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -214,5 +214,37 @@ void HandleItemEnchantTimeUpdate(WorldPacket packet)
enchant.OwnerGuid = packet.ReadGuid().To128(GetSession().GameState);
SendPacketToClient(enchant);
}

[PacketHandler(Opcode.SMSG_ENCHANTMENT_LOG)]
void HandleEnchantmentLog(WorldPacket packet)
{
EnchantmentLog enchantment = new EnchantmentLog();
if (LegacyVersion.AddedInVersion(ClientVersionBuild.V2_0_1_6180))
{
enchantment.Caster = packet.ReadPackedGuid().To128(GetSession().GameState);
enchantment.Owner = packet.ReadPackedGuid().To128(GetSession().GameState);
}
else
{
enchantment.Owner = packet.ReadGuid().To128(GetSession().GameState);
enchantment.Caster = packet.ReadGuid().To128(GetSession().GameState);
}
enchantment.ItemID = (int)packet.ReadUInt32();
var session = GetSession().GameState;

for (int i = 0; i < 23; i++)
{
if (session.GetItemId(session.GetInventorySlotItem(i).To128(session)).Equals((uint)enchantment.ItemID))
{
enchantment.ItemGUID = session.GetInventorySlotItem(i).To128(session);
break;
}
}
if (enchantment.ItemGUID == null)
return;

enchantment.Enchantment = (int)packet.ReadUInt32();
SendPacketToClient(enchantment);
}
}
}
10 changes: 10 additions & 0 deletions HermesProxy/World/Server/PacketHandlers/ItemHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -186,5 +186,15 @@ void HandleSetAmmo(SetAmmo ammo)
packet.WriteUInt32(ammo.ItemId);
SendPacketToServer(packet);
}

[PacketHandler(Opcode.CMSG_CANCEL_TEMP_ENCHANTMENT)]
void HandleCancelTempEnchantment(CancelTempEnchantment cancel)
{
if (LegacyVersion.RemovedInVersion(ClientVersionBuild.V2_0_1_6180))
return;
WorldPacket packet = new WorldPacket(Opcode.CMSG_CANCEL_TEMP_ENCHANTMENT);
packet.WriteUInt32(cancel.EnchantmentSlot);
SendPacketToServer(packet);
}
}
}
33 changes: 33 additions & 0 deletions HermesProxy/World/Server/Packets/ItemPackets.cs
Original file line number Diff line number Diff line change
Expand Up @@ -654,4 +654,37 @@ public override void Write()
public uint Slot;
public WowGuid128 OwnerGuid;
}

class EnchantmentLog : ServerPacket
{
public EnchantmentLog() : base(Opcode.SMSG_ENCHANTMENT_LOG) { }

public override void Write()
{
_worldPacket.WritePackedGuid128(Caster);
_worldPacket.WritePackedGuid128(Owner);
_worldPacket.WritePackedGuid128(ItemGUID);
_worldPacket.WriteInt32(ItemID);
_worldPacket.WriteInt32(Enchantment);
_worldPacket.WriteInt32(EnchantSlot);
}
public WowGuid128 Caster;
public WowGuid128 Owner;
public WowGuid128 ItemGUID;
public int ItemID;
public int Enchantment;
public int EnchantSlot = 1;
}

public class CancelTempEnchantment : ClientPacket
{
public CancelTempEnchantment(WorldPacket packet) : base(packet) { }

public override void Read()
{
EnchantmentSlot = _worldPacket.ReadUInt32();
}

public uint EnchantmentSlot;
}
}

0 comments on commit 8e66880

Please sign in to comment.