Fixes a crash trying to convert objectguid to ihaschangesmask, not all values are structs/classes.

This commit is contained in:
hondacrx
2021-06-24 00:17:43 -04:00
parent 9d1ef84690
commit e2211da378
@@ -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();