diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 77cd49cca..19df653c5 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -3691,19 +3691,6 @@ namespace Game.Entities void SetRespawnCompatibilityMode(bool mode = true) { m_respawnCompatibilityMode = mode; } public bool GetRespawnCompatibilityMode() { return m_respawnCompatibilityMode; } - public override UpdateFieldFlag GetUpdateFieldFlagsFor(Player target) - { - UpdateFieldFlag flags = UpdateFieldFlag.None; - if (GetOwnerGUID() == target.GetGUID()) - flags |= UpdateFieldFlag.Owner; - - if (HasDynamicFlag(UnitDynFlags.SpecialInfo)) - if (HasAuraTypeWithCaster(AuraType.Empathy, target.GetGUID())) - flags |= UpdateFieldFlag.Empath; - - return flags; - } - public override void BuildValuesCreate(WorldPacket data, UpdateFieldFlag flags, Player target) { m_objectData.WriteCreate(data, flags, this, target); diff --git a/Source/Game/Entities/Object/Update/UpdateField.cs b/Source/Game/Entities/Object/Update/UpdateField.cs index 58f3609d3..5cd46b3c3 100644 --- a/Source/Game/Entities/Object/Update/UpdateField.cs +++ b/Source/Game/Entities/Object/Update/UpdateField.cs @@ -9,42 +9,6 @@ using System.Linq; namespace Game.Entities { - public class UpdateFieldHolder - { - UpdateMask _changesMask = new((int)TypeId.Max); - - public HasChangesMask ModifyValue(HasChangesMask updateData) - { - _changesMask.Set(updateData.Bit); - return updateData; - } - - public void ClearChangesMask(HasChangesMask updateData) - { - _changesMask.Reset(updateData.Bit); - updateData.ClearChangesMask(); - } - - public void ClearChangesMask(HasChangesMask updateData, ref UpdateField updateField) where U : new() - { - _changesMask.Reset(updateData.Bit); - - IHasChangesMask hasChangesMask = (IHasChangesMask)updateField._value; - if (hasChangesMask != null) - hasChangesMask.ClearChangesMask(); - } - - public uint GetChangedObjectTypeMask() - { - return _changesMask.GetBlock(0); - } - - public bool HasChanged(TypeId index) - { - return _changesMask[(int)index]; - } - } - public interface IUpdateField { void SetValue(T value); @@ -249,7 +213,7 @@ namespace Game.Entities public bool HasChanged(int index) { - return (_updateMask[index / 32] & (1 << (index % 32))) != 0; + return (_updateMask[UpdateMask.GetBlockIndex(index)] & UpdateMask.GetBlockFlag(index)) != 0; } public void WriteUpdateMask(WorldPacket data, int bitsForSize = 32) diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index 382c04349..5183a0693 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -801,7 +801,6 @@ namespace Game.Entities public virtual void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target) { data.WriteUInt32(0); - data.WriteUInt32(0); } public void AddToObjectUpdateIfNeeded() @@ -4201,4 +4200,40 @@ namespace Game.Entities public ObjectGuid? PrivateObjectOwnerGuid; public GameObjectTypes? GameObjectType; } + + public class UpdateFieldHolder + { + UpdateMask _changesMask = new((int)TypeId.Max); + + public HasChangesMask ModifyValue(HasChangesMask updateData) + { + _changesMask.Set(updateData.Bit); + return updateData; + } + + public void ClearChangesMask(HasChangesMask updateData) + { + _changesMask.Reset(updateData.Bit); + updateData.ClearChangesMask(); + } + + public void ClearChangesMask(HasChangesMask updateData, ref UpdateField updateField) where U : new() + { + _changesMask.Reset(updateData.Bit); + + IHasChangesMask hasChangesMask = (IHasChangesMask)updateField._value; + if (hasChangesMask != null) + hasChangesMask.ClearChangesMask(); + } + + public uint GetChangedObjectTypeMask() + { + return _changesMask.GetBlock(0); + } + + public bool HasChanged(TypeId index) + { + return _changesMask[(int)index]; + } + } } \ No newline at end of file diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index d798b2ff9..ccfcf32b3 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -2460,6 +2460,19 @@ namespace Game.Entities base.ClearUpdateMask(remove); } + public override UpdateFieldFlag GetUpdateFieldFlagsFor(Player target) + { + UpdateFieldFlag flags = UpdateFieldFlag.None; + if (target == this || GetOwnerGUID() == target.GetGUID()) + flags |= UpdateFieldFlag.Owner; + + if (HasDynamicFlag(UnitDynFlags.SpecialInfo)) + if (HasAuraTypeWithCaster(AuraType.Empathy, target.GetGUID())) + flags |= UpdateFieldFlag.Empath; + + return flags; + } + public override void DestroyForPlayer(Player target) { Battleground bg = target.GetBattleground();