Fixed disconnect when clearing dynamic fields
This commit is contained in:
@@ -1237,7 +1237,7 @@ namespace Game.Entities
|
|||||||
arrayValuesMask.EncodeDynamicFieldChangeType(_dynamicChangesMask[index], updateType);
|
arrayValuesMask.EncodeDynamicFieldChangeType(_dynamicChangesMask[index], updateType);
|
||||||
|
|
||||||
if (updateType == UpdateType.Values && _dynamicChangesMask[index] == DynamicFieldChangeType.ValueAndSizeChanged)
|
if (updateType == UpdateType.Values && _dynamicChangesMask[index] == DynamicFieldChangeType.ValueAndSizeChanged)
|
||||||
arrayValuesMask.ValueCount = values.Length;
|
arrayValuesMask.SetCount(values.Length);
|
||||||
|
|
||||||
if (index != (int)ItemDynamicFields.Modifiers)
|
if (index != (int)ItemDynamicFields.Modifiers)
|
||||||
{
|
{
|
||||||
@@ -1257,7 +1257,7 @@ namespace Game.Entities
|
|||||||
if (updateType == UpdateType.Values && _dynamicChangesMask[index] != DynamicFieldChangeType.ValueAndSizeChanged && _changesMask.Get((int)ItemFields.ModifiersMask))
|
if (updateType == UpdateType.Values && _dynamicChangesMask[index] != DynamicFieldChangeType.ValueAndSizeChanged && _changesMask.Get((int)ItemFields.ModifiersMask))
|
||||||
{
|
{
|
||||||
arrayValuesMask.DynamicFieldChangeType |= (int)DynamicFieldChangeType.ValueAndSizeChanged;
|
arrayValuesMask.DynamicFieldChangeType |= (int)DynamicFieldChangeType.ValueAndSizeChanged;
|
||||||
arrayValuesMask.ValueCount = m;
|
arrayValuesMask.SetCount(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
// in case of ITEM_DYNAMIC_FIELD_MODIFIERS it is ITEM_FIELD_MODIFIERS_MASK that controls index of each value, not updatemask
|
// in case of ITEM_DYNAMIC_FIELD_MODIFIERS it is ITEM_FIELD_MODIFIERS_MASK that controls index of each value, not updatemask
|
||||||
@@ -1272,7 +1272,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (updateType == UpdateType.Values && _changesMask.Get((int)ItemFields.ModifiersMask))
|
if (updateType == UpdateType.Values && _changesMask.Get((int)ItemFields.ModifiersMask))
|
||||||
arrayValuesMask.ValueCount = m;
|
arrayValuesMask.SetCount(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
arrayValuesMask.AppendToPacket(fieldBuffer);
|
arrayValuesMask.AppendToPacket(fieldBuffer);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
using Framework.Constants;
|
using Framework.Constants;
|
||||||
using Framework.IO;
|
using Framework.IO;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace Game.Entities
|
namespace Game.Entities
|
||||||
{
|
{
|
||||||
@@ -31,6 +32,14 @@ namespace Game.Entities
|
|||||||
_mask = new BitArray((int)valuesCount, false);
|
_mask = new BitArray((int)valuesCount, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetCount(int valuesCount)
|
||||||
|
{
|
||||||
|
_fieldCount = (uint)valuesCount;
|
||||||
|
_blockCount = (uint)(valuesCount + 32 - 1) / 32;
|
||||||
|
|
||||||
|
_mask = new BitArray((int)valuesCount, false);
|
||||||
|
}
|
||||||
|
|
||||||
public uint GetCount() { return _fieldCount; }
|
public uint GetCount() { return _fieldCount; }
|
||||||
|
|
||||||
public virtual void AppendToPacket(ByteBuffer data)
|
public virtual void AppendToPacket(ByteBuffer data)
|
||||||
@@ -62,7 +71,7 @@ namespace Game.Entities
|
|||||||
_mask.SetAll(false);
|
_mask.SetAll(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint _fieldCount;
|
protected uint _fieldCount;
|
||||||
protected uint _blockCount;
|
protected uint _blockCount;
|
||||||
protected BitArray _mask;
|
protected BitArray _mask;
|
||||||
}
|
}
|
||||||
@@ -79,8 +88,8 @@ namespace Game.Entities
|
|||||||
public override void AppendToPacket(ByteBuffer data)
|
public override void AppendToPacket(ByteBuffer data)
|
||||||
{
|
{
|
||||||
data.WriteUInt16(DynamicFieldChangeType);
|
data.WriteUInt16(DynamicFieldChangeType);
|
||||||
if (ValueCount != 0)
|
if (DynamicFieldChangeType.HasAnyFlag((uint)Entities.DynamicFieldChangeType.ValueAndSizeChanged))
|
||||||
data.WriteUInt32(ValueCount);
|
data.WriteUInt32(_fieldCount);
|
||||||
|
|
||||||
var maskArray = new byte[_blockCount << 2];
|
var maskArray = new byte[_blockCount << 2];
|
||||||
|
|
||||||
@@ -89,7 +98,6 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
|
|
||||||
public uint DynamicFieldChangeType;
|
public uint DynamicFieldChangeType;
|
||||||
public int ValueCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum DynamicFieldChangeType
|
public enum DynamicFieldChangeType
|
||||||
|
|||||||
@@ -848,10 +848,9 @@ namespace Game.Entities
|
|||||||
fieldMask.SetBit(index);
|
fieldMask.SetBit(index);
|
||||||
|
|
||||||
DynamicUpdateMask arrayMask = new DynamicUpdateMask((uint)values.Length);
|
DynamicUpdateMask arrayMask = new DynamicUpdateMask((uint)values.Length);
|
||||||
|
|
||||||
arrayMask.EncodeDynamicFieldChangeType(_dynamicChangesMask[index], updateType);
|
arrayMask.EncodeDynamicFieldChangeType(_dynamicChangesMask[index], updateType);
|
||||||
if (updateType == UpdateType.Values && _dynamicChangesMask[index] == DynamicFieldChangeType.ValueAndSizeChanged)
|
if (updateType == UpdateType.Values && _dynamicChangesMask[index] == DynamicFieldChangeType.ValueAndSizeChanged)
|
||||||
arrayMask.ValueCount = values.Length;
|
arrayMask.SetCount(values.Length);
|
||||||
|
|
||||||
for (var v = 0; v < values.Length; ++v)
|
for (var v = 0; v < values.Length; ++v)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user