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;
|
_duration = newDuration;
|
||||||
|
|
||||||
// should be sent in object create packets only
|
// should be sent in object create packets only
|
||||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.Duration), (uint)_duration);
|
DoWithSuppressingObjectUpdates(() =>
|
||||||
m_areaTriggerData.ClearChanged(m_areaTriggerData.Duration);
|
{
|
||||||
|
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.Duration), (uint)_duration);
|
||||||
|
m_areaTriggerData.ClearChanged(m_areaTriggerData.Duration);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
float GetProgress()
|
float GetProgress()
|
||||||
@@ -702,8 +705,11 @@ namespace Game.Entities
|
|||||||
_spline.InitLengths();
|
_spline.InitLengths();
|
||||||
|
|
||||||
// should be sent in object create packets only
|
// should be sent in object create packets only
|
||||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget);
|
DoWithSuppressingObjectUpdates(() =>
|
||||||
m_areaTriggerData.ClearChanged(m_areaTriggerData.TimeToTarget);
|
{
|
||||||
|
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget);
|
||||||
|
m_areaTriggerData.ClearChanged(m_areaTriggerData.TimeToTarget);
|
||||||
|
});
|
||||||
|
|
||||||
if (IsInWorld)
|
if (IsInWorld)
|
||||||
{
|
{
|
||||||
@@ -732,8 +738,11 @@ namespace Game.Entities
|
|||||||
Cypher.Assert(cmi.Center.HasValue || cmi.PathTarget.HasValue);
|
Cypher.Assert(cmi.Center.HasValue || cmi.PathTarget.HasValue);
|
||||||
|
|
||||||
// should be sent in object create packets only
|
// should be sent in object create packets only
|
||||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget);
|
DoWithSuppressingObjectUpdates(() =>
|
||||||
m_areaTriggerData.ClearChanged(m_areaTriggerData.TimeToTarget);
|
{
|
||||||
|
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTarget), timeToTarget);
|
||||||
|
m_areaTriggerData.ClearChanged(m_areaTriggerData.TimeToTarget);
|
||||||
|
});
|
||||||
|
|
||||||
_orbitInfo.Set(cmi);
|
_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)
|
public virtual UpdateFieldFlag GetUpdateFieldFlagsFor(Player target)
|
||||||
{
|
{
|
||||||
return UpdateFieldFlag.None;
|
return UpdateFieldFlag.None;
|
||||||
|
|||||||
@@ -3815,8 +3815,11 @@ namespace Game.Entities
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// throttle packet sending
|
// throttle packet sending
|
||||||
SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.Power, (int)powerIndex), curValue);
|
DoWithSuppressingObjectUpdates(() =>
|
||||||
m_unitData.ClearChanged(m_unitData.Power, (int)powerIndex);
|
{
|
||||||
|
SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.Power, (int)powerIndex), curValue);
|
||||||
|
m_unitData.ClearChanged(m_unitData.Power, (int)powerIndex);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void RegenerateHealth()
|
void RegenerateHealth()
|
||||||
|
|||||||
Reference in New Issue
Block a user