Fixes a crash trying to convert objectguid to ihaschangesmask, not all values are structs/classes.
This commit is contained in:
@@ -199,13 +199,7 @@ namespace Game.Entities
|
|||||||
public void AddValue(T value)
|
public void AddValue(T value)
|
||||||
{
|
{
|
||||||
MarkChanged(_values.Count);
|
MarkChanged(_values.Count);
|
||||||
|
MarkAllUpdateMaskFields(_values[i]);
|
||||||
if (value is IHasChangesMask)
|
|
||||||
{
|
|
||||||
IHasChangesMask hasChanges = (IHasChangesMask)value;
|
|
||||||
if (hasChanges != null)
|
|
||||||
hasChanges.GetUpdateMask().SetAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
_values.Add(value);
|
_values.Add(value);
|
||||||
}
|
}
|
||||||
@@ -217,9 +211,7 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
MarkChanged(i);
|
MarkChanged(i);
|
||||||
// also mark all fields of value as changed
|
// also mark all fields of value as changed
|
||||||
IHasChangesMask hasChangesMask = (IHasChangesMask)_values[i];
|
MarkAllUpdateMaskFields(_values[i]);
|
||||||
if (hasChangesMask != null)
|
|
||||||
hasChangesMask.GetUpdateMask().SetAll();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,9 +223,7 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
MarkChanged(i);
|
MarkChanged(i);
|
||||||
// also mark all fields of value as changed
|
// also mark all fields of value as changed
|
||||||
IHasChangesMask hasChanges = (IHasChangesMask)_values[i];
|
MarkAllUpdateMaskFields(_values[i]);
|
||||||
if (hasChanges != null)
|
|
||||||
hasChanges.GetUpdateMask().SetAll();
|
|
||||||
}
|
}
|
||||||
if ((_values.Count % 32) != 0)
|
if ((_values.Count % 32) != 0)
|
||||||
_updateMask[UpdateMask.GetBlockIndex(_values.Count)] &= (uint)~UpdateMask.GetBlockFlag(_values.Count);
|
_updateMask[UpdateMask.GetBlockIndex(_values.Count)] &= (uint)~UpdateMask.GetBlockFlag(_values.Count);
|
||||||
@@ -241,6 +231,12 @@ namespace Game.Entities
|
|||||||
_updateMask.RemoveAt(_updateMask.Count - 1);
|
_updateMask.RemoveAt(_updateMask.Count - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MarkAllUpdateMaskFields(T value)
|
||||||
|
{
|
||||||
|
if (value is IHasChangesMask)
|
||||||
|
((IHasChangesMask)value).GetUpdateMask().SetAll();
|
||||||
|
}
|
||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
_values.Clear();
|
_values.Clear();
|
||||||
|
|||||||
Reference in New Issue
Block a user