Core/Objects: Fixup SMSG_UPDATE_OBJECT related refactors

Port From (https://github.com/TrinityCore/TrinityCore/commit/963eb6b80c1231ebaadd29806666c9ae5b79a985)
This commit is contained in:
Hondacrx
2024-11-11 14:14:43 -05:00
parent 6fcce1a6e4
commit 5909e7ba98
4 changed files with 50 additions and 51 deletions
-13
View File
@@ -3691,19 +3691,6 @@ namespace Game.Entities
void SetRespawnCompatibilityMode(bool mode = true) { m_respawnCompatibilityMode = mode; } void SetRespawnCompatibilityMode(bool mode = true) { m_respawnCompatibilityMode = mode; }
public bool GetRespawnCompatibilityMode() { return m_respawnCompatibilityMode; } 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) public override void BuildValuesCreate(WorldPacket data, UpdateFieldFlag flags, Player target)
{ {
m_objectData.WriteCreate(data, flags, this, target); m_objectData.WriteCreate(data, flags, this, target);
@@ -9,42 +9,6 @@ using System.Linq;
namespace Game.Entities 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<U>(HasChangesMask updateData, ref UpdateField<U> 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<T> public interface IUpdateField<T>
{ {
void SetValue(T value); void SetValue(T value);
@@ -249,7 +213,7 @@ namespace Game.Entities
public bool HasChanged(int index) 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) public void WriteUpdateMask(WorldPacket data, int bitsForSize = 32)
+36 -1
View File
@@ -801,7 +801,6 @@ namespace Game.Entities
public virtual void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target) public virtual void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target)
{ {
data.WriteUInt32(0); data.WriteUInt32(0);
data.WriteUInt32(0);
} }
public void AddToObjectUpdateIfNeeded() public void AddToObjectUpdateIfNeeded()
@@ -4201,4 +4200,40 @@ namespace Game.Entities
public ObjectGuid? PrivateObjectOwnerGuid; public ObjectGuid? PrivateObjectOwnerGuid;
public GameObjectTypes? GameObjectType; 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<U>(HasChangesMask updateData, ref UpdateField<U> 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];
}
}
} }
+13
View File
@@ -2460,6 +2460,19 @@ namespace Game.Entities
base.ClearUpdateMask(remove); 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) public override void DestroyForPlayer(Player target)
{ {
Battleground bg = target.GetBattleground(); Battleground bg = target.GetBattleground();