Core/PacketIO: Fix suppressing building SMSG_UPDATE_OBJECT packets
Port From (https://github.com/TrinityCore/TrinityCore/commit/36496c717203fab56eadff8c55f3b1e136fbe363)
This commit is contained in:
@@ -313,8 +313,11 @@ namespace Game.Entities
|
||||
_duration = newDuration;
|
||||
|
||||
// should be sent in object create packets only
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.Duration), (uint)_duration);
|
||||
m_areaTriggerData.ClearChanged(m_areaTriggerData.Duration);
|
||||
DoWithSuppressingObjectUpdates(() =>
|
||||
{
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.Duration), (uint)_duration);
|
||||
m_areaTriggerData.ClearChanged(m_areaTriggerData.Duration);
|
||||
});
|
||||
}
|
||||
|
||||
float GetProgress()
|
||||
@@ -702,8 +705,11 @@ namespace Game.Entities
|
||||
_spline.InitLengths();
|
||||
|
||||
// should be sent in object create packets only
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget);
|
||||
m_areaTriggerData.ClearChanged(m_areaTriggerData.TimeToTarget);
|
||||
DoWithSuppressingObjectUpdates(() =>
|
||||
{
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget);
|
||||
m_areaTriggerData.ClearChanged(m_areaTriggerData.TimeToTarget);
|
||||
});
|
||||
|
||||
if (IsInWorld)
|
||||
{
|
||||
@@ -732,8 +738,11 @@ namespace Game.Entities
|
||||
Cypher.Assert(cmi.Center.HasValue || cmi.PathTarget.HasValue);
|
||||
|
||||
// should be sent in object create packets only
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget);
|
||||
m_areaTriggerData.ClearChanged(m_areaTriggerData.TimeToTarget);
|
||||
DoWithSuppressingObjectUpdates(() =>
|
||||
{
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget);
|
||||
m_areaTriggerData.ClearChanged(m_areaTriggerData.TimeToTarget);
|
||||
});
|
||||
|
||||
_orbitInfo.Set(cmi);
|
||||
|
||||
|
||||
@@ -751,6 +751,17 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
public void DoWithSuppressingObjectUpdates(Action action)
|
||||
{
|
||||
bool wasUpdatedBeforeAction = m_objectUpdated;
|
||||
action();
|
||||
if (m_objectUpdated && !wasUpdatedBeforeAction)
|
||||
{
|
||||
RemoveFromObjectUpdate();
|
||||
m_objectUpdated = false;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual UpdateFieldFlag GetUpdateFieldFlagsFor(Player target)
|
||||
{
|
||||
return UpdateFieldFlag.None;
|
||||
|
||||
@@ -3815,8 +3815,11 @@ namespace Game.Entities
|
||||
else
|
||||
{
|
||||
// throttle packet sending
|
||||
SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.Power, (int)powerIndex), curValue);
|
||||
m_unitData.ClearChanged(m_unitData.Power, (int)powerIndex);
|
||||
DoWithSuppressingObjectUpdates(() =>
|
||||
{
|
||||
SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.Power, (int)powerIndex), curValue);
|
||||
m_unitData.ClearChanged(m_unitData.Power, (int)powerIndex);
|
||||
});
|
||||
}
|
||||
}
|
||||
void RegenerateHealth()
|
||||
|
||||
Reference in New Issue
Block a user