Core/PacketIO: Move writing data sizes in SMSG_UPDATE_OBJECT to shared functions instead of spreading it in all overrides
Port From (https://github.com/TrinityCore/TrinityCore/commit/067fa31d152ecb10e5bea0419f84f7b79b96abf5)
This commit is contained in:
@@ -1333,30 +1333,22 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
m_areaTriggerData.WriteCreate(buffer, flags, this, target);
|
m_areaTriggerData.WriteCreate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.AreaTrigger))
|
if (m_values.HasChanged(TypeId.AreaTrigger))
|
||||||
m_areaTriggerData.WriteUpdate(buffer, flags, this, target);
|
m_areaTriggerData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedAreaTriggerMask, Player target)
|
public void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedAreaTriggerMask, Player target)
|
||||||
|
|||||||
@@ -290,30 +290,22 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
|
||||||
m_conversationData.WriteCreate(buffer, flags, this, target);
|
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
data.WriteBytes(buffer);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
|
m_conversationData.WriteCreate(data, flags, this, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.Conversation))
|
if (m_values.HasChanged(TypeId.Conversation))
|
||||||
m_conversationData.WriteUpdate(buffer, flags, this, target);
|
m_conversationData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedConversationMask, Player target)
|
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedConversationMask, Player target)
|
||||||
|
|||||||
@@ -220,30 +220,22 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
|
||||||
m_corpseData.WriteCreate(buffer, flags, this, target);
|
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize() + 1);
|
|
||||||
data.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
data.WriteBytes(buffer);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
|
m_corpseData.WriteCreate(data, flags, this, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.Corpse))
|
if (m_values.HasChanged(TypeId.Corpse))
|
||||||
m_corpseData.WriteUpdate(buffer, flags, this, target);
|
m_corpseData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedCorpseMask, Player target)
|
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedCorpseMask, Player target)
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using Game.DataStorage;
|
|||||||
using Game.Groups;
|
using Game.Groups;
|
||||||
using Game.Loots;
|
using Game.Loots;
|
||||||
using Game.Maps;
|
using Game.Maps;
|
||||||
|
using Game.Networking;
|
||||||
using Game.Networking.Packets;
|
using Game.Networking.Packets;
|
||||||
using Game.Spells;
|
using Game.Spells;
|
||||||
using System;
|
using System;
|
||||||
@@ -3689,6 +3690,103 @@ namespace Game.Entities
|
|||||||
// There's many places not ready for dynamic spawns. This allows them to live on for now.
|
// There's many places not ready for dynamic spawns. This allows them to live on for now.
|
||||||
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, Player target)
|
||||||
|
{
|
||||||
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
|
data.WriteUInt8((byte)flags);
|
||||||
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
|
m_unitData.WriteCreate(data, flags, this, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
|
{
|
||||||
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
|
|
||||||
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
|
if (m_values.HasChanged(TypeId.Unit))
|
||||||
|
m_unitData.WriteUpdate(data, flags, this, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target)
|
||||||
|
{
|
||||||
|
UpdateMask valuesMask = new((int)TypeId.Max);
|
||||||
|
valuesMask.Set((int)TypeId.Unit);
|
||||||
|
|
||||||
|
data.WriteUInt32(valuesMask.GetBlock(0));
|
||||||
|
|
||||||
|
UpdateMask mask = m_unitData.GetStaticUpdateMask();
|
||||||
|
m_unitData.AppendAllowedFieldsMaskForFlag(mask, flags);
|
||||||
|
m_unitData.WriteUpdate(data, mask, true, this, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedUnitMask, Player target)
|
||||||
|
{
|
||||||
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
|
UpdateMask valuesMask = new((int)TypeId.Max);
|
||||||
|
if (requestedObjectMask.IsAnySet())
|
||||||
|
valuesMask.Set((int)TypeId.Object);
|
||||||
|
|
||||||
|
UpdateMask unitMask = requestedUnitMask;
|
||||||
|
m_unitData.FilterDisallowedFieldsMaskForFlag(unitMask, flags);
|
||||||
|
if (unitMask.IsAnySet())
|
||||||
|
valuesMask.Set((int)TypeId.Unit);
|
||||||
|
|
||||||
|
WorldPacket buffer = new();
|
||||||
|
buffer.WriteUInt32(valuesMask.GetBlock(0));
|
||||||
|
|
||||||
|
if (valuesMask[(int)TypeId.Object])
|
||||||
|
m_objectData.WriteUpdate(buffer, requestedObjectMask, true, this, target);
|
||||||
|
|
||||||
|
if (valuesMask[(int)TypeId.Unit])
|
||||||
|
m_unitData.WriteUpdate(buffer, requestedUnitMask, true, this, target);
|
||||||
|
|
||||||
|
WorldPacket buffer1 = new();
|
||||||
|
buffer1.WriteUInt8((byte)UpdateType.Values);
|
||||||
|
buffer1.WritePackedGuid(GetGUID());
|
||||||
|
buffer1.WriteUInt32(buffer.GetSize());
|
||||||
|
buffer1.WriteBytes(buffer.GetData());
|
||||||
|
|
||||||
|
data.AddUpdateBlock(buffer1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
||||||
|
{
|
||||||
|
Creature Owner;
|
||||||
|
ObjectFieldData ObjectMask = new();
|
||||||
|
UnitData UnitMask = new();
|
||||||
|
|
||||||
|
public ValuesUpdateForPlayerWithMaskSender(Creature owner)
|
||||||
|
{
|
||||||
|
Owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Invoke(Player player)
|
||||||
|
{
|
||||||
|
UpdateData udata = new(Owner.GetMapId());
|
||||||
|
|
||||||
|
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), UnitMask.GetUpdateMask(), player);
|
||||||
|
|
||||||
|
udata.BuildPacket(out UpdateObject packet);
|
||||||
|
player.SendPacket(packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class VendorItemCount
|
public class VendorItemCount
|
||||||
|
|||||||
@@ -243,30 +243,22 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
m_dynamicObjectData.WriteCreate(buffer, flags, this, target);
|
m_dynamicObjectData.WriteCreate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.DynamicObject))
|
if (m_values.HasChanged(TypeId.DynamicObject))
|
||||||
m_dynamicObjectData.WriteUpdate(buffer, flags, this, target);
|
m_dynamicObjectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedDynamicObjectMask, Player target)
|
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedDynamicObjectMask, Player target)
|
||||||
|
|||||||
@@ -3274,30 +3274,22 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
m_gameObjectData.WriteCreate(buffer, flags, this, target);
|
m_gameObjectData.WriteCreate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.GameObject))
|
if (m_values.HasChanged(TypeId.GameObject))
|
||||||
m_gameObjectData.WriteUpdate(buffer, flags, this, target);
|
m_gameObjectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedGameObjectMask, Player target)
|
public void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedGameObjectMask, Player target)
|
||||||
|
|||||||
@@ -149,34 +149,26 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
m_itemData.WriteCreate(buffer, flags, this, target);
|
m_itemData.WriteCreate(data, flags, this, target);
|
||||||
m_azeriteEmpoweredItemData.WriteCreate(buffer, flags, this, target);
|
m_azeriteEmpoweredItemData.WriteCreate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.Item))
|
if (m_values.HasChanged(TypeId.Item))
|
||||||
m_itemData.WriteUpdate(buffer, flags, this, target);
|
m_itemData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.AzeriteEmpoweredItem))
|
if (m_values.HasChanged(TypeId.AzeriteEmpoweredItem))
|
||||||
m_azeriteEmpoweredItemData.WriteUpdate(buffer, flags, this, target);
|
m_azeriteEmpoweredItemData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedItemMask, UpdateMask requestedAzeriteEmpoweredItemMask, Player target)
|
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedItemMask, UpdateMask requestedAzeriteEmpoweredItemMask, Player target)
|
||||||
|
|||||||
@@ -407,34 +407,26 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
m_itemData.WriteCreate(buffer, flags, this, target);
|
m_itemData.WriteCreate(data, flags, this, target);
|
||||||
m_azeriteItemData.WriteCreate(buffer, flags, this, target);
|
m_azeriteItemData.WriteCreate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.Item))
|
if (m_values.HasChanged(TypeId.Item))
|
||||||
m_itemData.WriteUpdate(buffer, flags, this, target);
|
m_itemData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.AzeriteItem))
|
if (m_values.HasChanged(TypeId.AzeriteItem))
|
||||||
m_azeriteItemData.WriteUpdate(buffer, flags, this, target);
|
m_azeriteItemData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target)
|
public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target)
|
||||||
@@ -443,19 +435,15 @@ namespace Game.Entities
|
|||||||
valuesMask.Set((int)TypeId.Item);
|
valuesMask.Set((int)TypeId.Item);
|
||||||
valuesMask.Set((int)TypeId.AzeriteItem);
|
valuesMask.Set((int)TypeId.AzeriteItem);
|
||||||
|
|
||||||
WorldPacket buffer = new();
|
data.WriteUInt32(valuesMask.GetBlock(0));
|
||||||
buffer.WriteUInt32(valuesMask.GetBlock(0));
|
|
||||||
|
|
||||||
UpdateMask mask = m_itemData.GetStaticUpdateMask();
|
UpdateMask mask = m_itemData.GetStaticUpdateMask();
|
||||||
m_itemData.AppendAllowedFieldsMaskForFlag(mask, flags);
|
m_itemData.AppendAllowedFieldsMaskForFlag(mask, flags);
|
||||||
m_itemData.WriteUpdate(buffer, mask, true, this, target);
|
m_itemData.WriteUpdate(data, mask, true, this, target);
|
||||||
|
|
||||||
UpdateMask mask2 = m_azeriteItemData.GetStaticUpdateMask();
|
UpdateMask mask2 = m_azeriteItemData.GetStaticUpdateMask();
|
||||||
m_azeriteItemData.AppendAllowedFieldsMaskForFlag(mask2, flags);
|
m_azeriteItemData.AppendAllowedFieldsMaskForFlag(mask2, flags);
|
||||||
m_azeriteItemData.WriteUpdate(buffer, mask2, true, this, target);
|
m_azeriteItemData.WriteUpdate(data, mask2, true, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedItemMask, UpdateMask requestedAzeriteItemMask, Player target)
|
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedItemMask, UpdateMask requestedAzeriteItemMask, Player target)
|
||||||
|
|||||||
@@ -163,34 +163,26 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
m_itemData.WriteCreate(buffer, flags, this, target);
|
m_itemData.WriteCreate(data, flags, this, target);
|
||||||
m_containerData.WriteCreate(buffer, flags, this, target);
|
m_containerData.WriteCreate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.Item))
|
if (m_values.HasChanged(TypeId.Item))
|
||||||
m_itemData.WriteUpdate(buffer, flags, this, target);
|
m_itemData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.Container))
|
if (m_values.HasChanged(TypeId.Container))
|
||||||
m_containerData.WriteUpdate(buffer, flags, this, target);
|
m_containerData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedItemMask, UpdateMask requestedContainerMask, Player target)
|
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedItemMask, UpdateMask requestedContainerMask, Player target)
|
||||||
|
|||||||
@@ -1273,31 +1273,22 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
|
||||||
m_itemData.WriteCreate(buffer, flags, this, target);
|
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize() + 1);
|
|
||||||
data.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
data.WriteBytes(buffer);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
|
m_itemData.WriteCreate(data, flags, this, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.Item))
|
if (m_values.HasChanged(TypeId.Item))
|
||||||
m_itemData.WriteUpdate(buffer, flags, this, target);
|
m_itemData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target)
|
public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target)
|
||||||
@@ -1305,15 +1296,11 @@ namespace Game.Entities
|
|||||||
UpdateMask valuesMask = new((int)TypeId.Max);
|
UpdateMask valuesMask = new((int)TypeId.Max);
|
||||||
valuesMask.Set((int)TypeId.Item);
|
valuesMask.Set((int)TypeId.Item);
|
||||||
|
|
||||||
WorldPacket buffer = new();
|
|
||||||
UpdateMask mask = m_itemData.GetStaticUpdateMask();
|
UpdateMask mask = m_itemData.GetStaticUpdateMask();
|
||||||
|
|
||||||
buffer.WriteUInt32(valuesMask.GetBlock(0));
|
data.WriteUInt32(valuesMask.GetBlock(0));
|
||||||
m_itemData.AppendAllowedFieldsMaskForFlag(mask, flags);
|
m_itemData.AppendAllowedFieldsMaskForFlag(mask, flags);
|
||||||
m_itemData.WriteUpdate(buffer, mask, true, this, target);
|
m_itemData.WriteUpdate(data, mask, true, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedItemMask, Player target)
|
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedItemMask, Player target)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
using Framework.Constants;
|
using Framework.Constants;
|
||||||
using Framework.Dynamic;
|
using Framework.Dynamic;
|
||||||
|
using Framework.IO;
|
||||||
using Game.AI;
|
using Game.AI;
|
||||||
using Game.BattleFields;
|
using Game.BattleFields;
|
||||||
using Game.DataStorage;
|
using Game.DataStorage;
|
||||||
@@ -165,7 +166,12 @@ namespace Game.Entities
|
|||||||
buffer.WriteUInt8((byte)tempObjectType);
|
buffer.WriteUInt8((byte)tempObjectType);
|
||||||
|
|
||||||
BuildMovementUpdate(buffer, flags, target);
|
BuildMovementUpdate(buffer, flags, target);
|
||||||
BuildValuesCreate(buffer, target);
|
|
||||||
|
WorldPacket tempBuffer = new();
|
||||||
|
BuildValuesCreate(tempBuffer, target);
|
||||||
|
buffer.WriteUInt32(tempBuffer.GetSize());
|
||||||
|
buffer.WriteBytes(tempBuffer);
|
||||||
|
|
||||||
data.AddUpdateBlock(buffer);
|
data.AddUpdateBlock(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +196,10 @@ namespace Game.Entities
|
|||||||
buffer.WriteUInt8((byte)UpdateType.Values);
|
buffer.WriteUInt8((byte)UpdateType.Values);
|
||||||
buffer.WritePackedGuid(GetGUID());
|
buffer.WritePackedGuid(GetGUID());
|
||||||
|
|
||||||
BuildValuesUpdate(buffer, target);
|
WorldPacket tempBuffer = new();
|
||||||
|
BuildValuesUpdate(tempBuffer, target);
|
||||||
|
buffer.WriteUInt32(tempBuffer.GetSize());
|
||||||
|
buffer.WriteBytes(tempBuffer);
|
||||||
|
|
||||||
data.AddUpdateBlock(buffer);
|
data.AddUpdateBlock(buffer);
|
||||||
}
|
}
|
||||||
@@ -201,7 +210,10 @@ namespace Game.Entities
|
|||||||
buffer.WriteUInt8((byte)UpdateType.Values);
|
buffer.WriteUInt8((byte)UpdateType.Values);
|
||||||
buffer.WritePackedGuid(GetGUID());
|
buffer.WritePackedGuid(GetGUID());
|
||||||
|
|
||||||
BuildValuesUpdateWithFlag(buffer, flags, target);
|
WorldPacket tempBuffer = new();
|
||||||
|
BuildValuesUpdateWithFlag(tempBuffer, flags, target);
|
||||||
|
buffer.WriteUInt32(tempBuffer.GetSize());
|
||||||
|
buffer.WriteBytes(tempBuffer);
|
||||||
|
|
||||||
data.AddUpdateBlock(buffer);
|
data.AddUpdateBlock(buffer);
|
||||||
}
|
}
|
||||||
@@ -821,8 +833,8 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public virtual Loot GetLootForPlayer(Player player) { return null; }
|
public virtual Loot GetLootForPlayer(Player player) { return null; }
|
||||||
|
|
||||||
public abstract void BuildValuesCreate(WorldPacket data, Player target);
|
public virtual void BuildValuesCreate(WorldPacket data, Player target) { }
|
||||||
public abstract void BuildValuesUpdate(WorldPacket data, Player target);
|
public virtual void BuildValuesUpdate(WorldPacket data, Player target) { }
|
||||||
|
|
||||||
public void SetUpdateFieldValue<T>(IUpdateField<T> updateField, T newValue)
|
public void SetUpdateFieldValue<T>(IUpdateField<T> updateField, T newValue)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7918,39 +7918,31 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
m_unitData.WriteCreate(buffer, flags, this, target);
|
m_unitData.WriteCreate(data, flags, this, target);
|
||||||
m_playerData.WriteCreate(buffer, flags, this, target);
|
m_playerData.WriteCreate(data, flags, this, target);
|
||||||
if (target == this)
|
if (target == this)
|
||||||
m_activePlayerData.WriteCreate(buffer, flags, this, target);
|
m_activePlayerData.WriteCreate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt32((uint)(m_values.GetChangedObjectTypeMask() & ~((target != this ? 1 : 0) << (int)TypeId.ActivePlayer)));
|
data.WriteUInt32((uint)(m_values.GetChangedObjectTypeMask() & ~((target != this ? 1 : 0) << (int)TypeId.ActivePlayer)));
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.Unit))
|
if (m_values.HasChanged(TypeId.Unit))
|
||||||
m_unitData.WriteUpdate(buffer, flags, this, target);
|
m_unitData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.Player))
|
if (m_values.HasChanged(TypeId.Player))
|
||||||
m_playerData.WriteUpdate(buffer, flags, this, target);
|
m_playerData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (target == this && m_values.HasChanged(TypeId.ActivePlayer))
|
if (target == this && m_values.HasChanged(TypeId.ActivePlayer))
|
||||||
m_activePlayerData.WriteUpdate(buffer, flags, this, target);
|
m_activePlayerData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target)
|
public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target)
|
||||||
@@ -7959,19 +7951,15 @@ namespace Game.Entities
|
|||||||
valuesMask.Set((int)TypeId.Unit);
|
valuesMask.Set((int)TypeId.Unit);
|
||||||
valuesMask.Set((int)TypeId.Player);
|
valuesMask.Set((int)TypeId.Player);
|
||||||
|
|
||||||
WorldPacket buffer = new();
|
data.WriteUInt32(valuesMask.GetBlock(0));
|
||||||
|
|
||||||
UpdateMask mask = m_unitData.GetStaticUpdateMask();
|
UpdateMask mask = m_unitData.GetStaticUpdateMask();
|
||||||
m_unitData.AppendAllowedFieldsMaskForFlag(mask, flags);
|
m_unitData.AppendAllowedFieldsMaskForFlag(mask, flags);
|
||||||
m_unitData.WriteUpdate(buffer, mask, true, this, target);
|
m_unitData.WriteUpdate(data, mask, true, this, target);
|
||||||
|
|
||||||
UpdateMask mask2 = m_playerData.GetStaticUpdateMask();
|
UpdateMask mask2 = m_playerData.GetStaticUpdateMask();
|
||||||
m_playerData.AppendAllowedFieldsMaskForFlag(mask2, flags);
|
m_playerData.AppendAllowedFieldsMaskForFlag(mask2, flags);
|
||||||
m_playerData.WriteUpdate(buffer, mask2, true, this, target);
|
m_playerData.WriteUpdate(data, mask2, true, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteUInt32(valuesMask.GetBlock(0));
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedUnitMask, UpdateMask requestedPlayerMask, UpdateMask requestedActivePlayerMask, Player target)
|
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedUnitMask, UpdateMask requestedPlayerMask, UpdateMask requestedActivePlayerMask, Player target)
|
||||||
|
|||||||
@@ -124,32 +124,22 @@ namespace Game.Entities
|
|||||||
public override void BuildValuesCreate(WorldPacket data, Player target)
|
public override void BuildValuesCreate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
|
||||||
m_sceneObjectData.WriteCreate(buffer, flags, this, target);
|
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteUInt8((byte)flags);
|
data.WriteUInt8((byte)flags);
|
||||||
data.WriteBytes(buffer);
|
m_objectData.WriteCreate(data, flags, this, target);
|
||||||
|
m_sceneObjectData.WriteCreate(data, flags, this, target);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
||||||
{
|
{
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
if (m_values.HasChanged(TypeId.Object))
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
m_objectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.SceneObject))
|
if (m_values.HasChanged(TypeId.SceneObject))
|
||||||
m_sceneObjectData.WriteUpdate(buffer, flags, this, target);
|
m_sceneObjectData.WriteUpdate(data, flags, this, target);
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedSceneObjectMask, Player target)
|
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedSceneObjectMask, Player target)
|
||||||
|
|||||||
@@ -126,28 +126,6 @@ namespace Game.Entities
|
|||||||
ushort _aiAnimKitId;
|
ushort _aiAnimKitId;
|
||||||
ushort _movementAnimKitId;
|
ushort _movementAnimKitId;
|
||||||
ushort _meleeAnimKitId;
|
ushort _meleeAnimKitId;
|
||||||
|
|
||||||
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
|
|
||||||
{
|
|
||||||
Unit Owner;
|
|
||||||
ObjectFieldData ObjectMask = new();
|
|
||||||
UnitData UnitMask = new();
|
|
||||||
|
|
||||||
public ValuesUpdateForPlayerWithMaskSender(Unit owner)
|
|
||||||
{
|
|
||||||
Owner = owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Invoke(Player player)
|
|
||||||
{
|
|
||||||
UpdateData udata = new(Owner.GetMapId());
|
|
||||||
|
|
||||||
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), UnitMask.GetUpdateMask(), player);
|
|
||||||
|
|
||||||
udata.BuildPacket(out UpdateObject packet);
|
|
||||||
player.SendPacket(packet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct DiminishingReturn
|
public struct DiminishingReturn
|
||||||
|
|||||||
@@ -2454,93 +2454,6 @@ namespace Game.Entities
|
|||||||
return spellInfo == null || !spellInfo.HasAttribute(SpellCustomAttributes.IgnoreArmor);
|
return spellInfo == null || !spellInfo.HasAttribute(SpellCustomAttributes.IgnoreArmor);
|
||||||
}
|
}
|
||||||
|
|
||||||
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 BuildValuesCreate(WorldPacket data, Player target)
|
|
||||||
{
|
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt8((byte)flags);
|
|
||||||
m_objectData.WriteCreate(buffer, flags, this, target);
|
|
||||||
m_unitData.WriteCreate(buffer, flags, this, target);
|
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void BuildValuesUpdate(WorldPacket data, Player target)
|
|
||||||
{
|
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
buffer.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
|
||||||
if (m_values.HasChanged(TypeId.Object))
|
|
||||||
m_objectData.WriteUpdate(buffer, flags, this, target);
|
|
||||||
|
|
||||||
if (m_values.HasChanged(TypeId.Unit))
|
|
||||||
m_unitData.WriteUpdate(buffer, flags, this, target);
|
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target)
|
|
||||||
{
|
|
||||||
UpdateMask valuesMask = new((int)TypeId.Max);
|
|
||||||
valuesMask.Set((int)TypeId.Unit);
|
|
||||||
|
|
||||||
WorldPacket buffer = new();
|
|
||||||
|
|
||||||
UpdateMask mask = m_unitData.GetStaticUpdateMask();
|
|
||||||
m_unitData.AppendAllowedFieldsMaskForFlag(mask, flags);
|
|
||||||
m_unitData.WriteUpdate(buffer, mask, true, this, target);
|
|
||||||
|
|
||||||
data.WriteUInt32(buffer.GetSize());
|
|
||||||
data.WriteUInt32(valuesMask.GetBlock(0));
|
|
||||||
data.WriteBytes(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedUnitMask, Player target)
|
|
||||||
{
|
|
||||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
|
||||||
UpdateMask valuesMask = new((int)TypeId.Max);
|
|
||||||
if (requestedObjectMask.IsAnySet())
|
|
||||||
valuesMask.Set((int)TypeId.Object);
|
|
||||||
|
|
||||||
m_unitData.FilterDisallowedFieldsMaskForFlag(requestedUnitMask, flags);
|
|
||||||
if (requestedUnitMask.IsAnySet())
|
|
||||||
valuesMask.Set((int)TypeId.Unit);
|
|
||||||
|
|
||||||
WorldPacket buffer = new();
|
|
||||||
buffer.WriteUInt32(valuesMask.GetBlock(0));
|
|
||||||
|
|
||||||
if (valuesMask[(int)TypeId.Object])
|
|
||||||
m_objectData.WriteUpdate(buffer, requestedObjectMask, true, this, target);
|
|
||||||
|
|
||||||
if (valuesMask[(int)TypeId.Unit])
|
|
||||||
m_unitData.WriteUpdate(buffer, requestedUnitMask, true, this, target);
|
|
||||||
|
|
||||||
WorldPacket buffer1 = new();
|
|
||||||
buffer1.WriteUInt8((byte)UpdateType.Values);
|
|
||||||
buffer1.WritePackedGuid(GetGUID());
|
|
||||||
buffer1.WriteUInt32(buffer.GetSize());
|
|
||||||
buffer1.WriteBytes(buffer.GetData());
|
|
||||||
|
|
||||||
data.AddUpdateBlock(buffer1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void ClearUpdateMask(bool remove)
|
public override void ClearUpdateMask(bool remove)
|
||||||
{
|
{
|
||||||
m_values.ClearChangesMask(m_unitData);
|
m_values.ClearChangesMask(m_unitData);
|
||||||
|
|||||||
Reference in New Issue
Block a user