Core/Objects: Fixup SMSG_UPDATE_OBJECT related refactors
Port From (https://github.com/TrinityCore/TrinityCore/commit/963eb6b80c1231ebaadd29806666c9ae5b79a985)
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user