protected override void AppendMovementUpdate(ByteBuffer buffer, ObjectUpdateType updateType, ObjectUpdateFlags updateFlags) { if ((updateFlags & ObjectUpdateFlags.Living) != 0) { log.DebugFormat("appending movement update with movementflags = {0}", MovementFlags); buffer.Append((int)MovementFlags); buffer.Append(MovementTime); // time buffer.Append(Position); buffer.Append(0); // fallingTime buffer.Append(MovementSpeed.Walking); buffer.Append(MovementSpeed.Running); buffer.Append(MovementSpeed.RunningBack); buffer.Append(MovementSpeed.Swimming); buffer.Append(MovementSpeed.SwimmingBack); buffer.Append(MovementSpeed.Turning); // remove HasPosition from the updateFlags when passing to GameObject, since we already wrote the position base.AppendMovementUpdate(buffer, updateType, updateFlags & ~ObjectUpdateFlags.HasPosition); } else { base.AppendMovementUpdate(buffer, updateType, updateFlags); } }
protected virtual void AppendCreationUpdate(ByteBuffer buffer, ObjectUpdateType updateType, ObjectUpdateFlags updateFlags) { buffer.Append((byte)updateType); buffer.Append(ID.GetPacked()); buffer.Append((byte)TypeID); buffer.Append((byte)updateFlags); }
public void BuildTargetedCreationUpdate(UpdateData data, Character character) { ObjectUpdateType updateType = ObjectUpdateType.CreateObject; ObjectUpdateFlags updateFlags = UpdateFlags; if (ID.ObjectType == ObjectID.Type.Corpse || ID.ObjectType == ObjectID.Type.DynamicObject || ID.ObjectType == ObjectID.Type.GameObject || ID.ObjectType == ObjectID.Type.Player || ID.ObjectType == ObjectID.Type.Unit) { updateType = ObjectUpdateType.CreateObject2; } if (character == this) { updateFlags |= ObjectUpdateFlags.Self; } using (ByteBuffer buffer = new ByteBuffer()) { // creation update AppendCreationUpdate(buffer, updateType, updateFlags); // movement update AppendMovementUpdate(buffer, updateType, updateFlags); // values update UpdateMask updateMask = GetCreationUpdateMask(); AppendValuesUpdate(buffer, updateType, updateFlags, updateMask); // append the update data.AddUpdateBlock(buffer); } }
public Task <PacketOut> BuildCreateUpdateFor(IPlayer plr) { ObjectUpdateType updateType = ObjectUpdateType.UPDATETYPE_CREATE_OBJECT; ObjectUpdateFlags updateFlags = State.UpdateFlags; if (plr.GetPrimaryKeyLong() == this.GetPrimaryKeyLong()) { updateFlags |= ObjectUpdateFlags.UPDATEFLAG_SELF; } if ((updateFlags & ObjectUpdateFlags.UPDATEFLAG_STATIONARY_POSITION) != 0) { if (_IsPlayer()) { updateType = ObjectUpdateType.UPDATETYPE_CREATE_OBJECT2; } } PacketOut p = new PacketOut(); p.Write((byte)updateType); p.Write(pGUID); p.Write((byte)State.MyType); _BuildMovementUpdate(updateType, updateFlags, ref p); _BuildValuesUpdate(updateType, updateFlags, ref p, plr); return(Task.FromResult(p)); }
private void _BuildValuesUpdate(ObjectUpdateType type, ObjectUpdateFlags flags, ref PacketOut pkt, IPlayer plr) { UpdateMask mask = new UpdateMask(State.UpdateFields.Length); PacketOut tmp = new PacketOut(); UpdatefieldFlags visibilityFlags = UpdatefieldFlags.UF_FLAG_PUBLIC; if (plr.GetPrimaryKeyLong() == this.GetPrimaryKeyLong()) { visibilityFlags |= UpdatefieldFlags.UF_FLAG_PRIVATE; } var fieldFlags = GetFlagVisibility(); for (var i = 0; i < State.UpdateFields.Length; ++i) { //if ((fieldFlags[i] & visibilityFlags) == 0) // continue; tmp.Write(State.UpdateFields[i].data); mask.SetBit(i); } pkt.Write((byte)mask.GetMaxBlockCount()); for (var i = 0; i < mask.GetMaxBlockCount(); ++i) { pkt.Write(mask.m_blocks[i]); } pkt.Write(tmp); }
public void AddToPacket(ref PacketClass packet, ObjectUpdateType updateType, ref ItemObject updateObject) { checked { packet.AddInt8((byte)updateType); packet.AddPackGUID(updateObject.GUID); if (updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT) { if (WorldServiceLocator._WorldServer.ITEMDatabase[updateObject.ItemEntry].ContainerSlots > 0) { packet.AddInt8(2); } else { packet.AddInt8(1); } packet.AddInt8(24); packet.AddUInt64(updateObject.GUID); } if (updateType is ObjectUpdateType.UPDATETYPE_CREATE_OBJECT or ObjectUpdateType.UPDATETYPE_VALUES) { var updateCount = 0; var num = UpdateMask.Count - 1; for (var j = 0; j <= num; j++) { if (UpdateMask.Get(j)) { updateCount = j; } } packet.AddInt8((byte)(checked (updateCount + 32) / 32)); packet.AddBitArray(UpdateMask, checked ((byte)(checked (updateCount + 32) / 32)) * 4); var num2 = UpdateMask.Count - 1; for (var i = 0; i <= num2; i++) { if (UpdateMask.Get(i)) { if (UpdateData[i] is uint) { packet.AddUInt32(Conversions.ToUInteger(UpdateData[i])); } else if (UpdateData[i] is float) { packet.AddSingle(Conversions.ToSingle(UpdateData[i])); } else { packet.AddInt32(Conversions.ToInteger(UpdateData[i])); } } } UpdateMask.SetAll(value: false); } if (packet is UpdatePacketClass @class) { @class.UpdatesCount++; } } }
public void HandleMovementPacket(InPacket packet) { ResetData(); updateType = ObjectUpdateType.UPDATETYPE_MOVEMENT; guid = packet.ReadPackedGuid(); ReadMovementInfo(packet); HandleUpdateData(); }
public void AddToPacket(ref PacketClass packet, ObjectUpdateType updateType, ref WS_Corpses.CorpseObject updateObject) { checked { packet.AddInt8((byte)updateType); packet.AddPackGUID(updateObject.GUID); if (updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT) { packet.AddInt8(7); packet.AddInt8(88); packet.AddSingle(updateObject.positionX); packet.AddSingle(updateObject.positionY); packet.AddSingle(updateObject.positionZ); packet.AddSingle(updateObject.orientation); packet.AddUInt64(updateObject.GUID); } if (updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT || updateType == ObjectUpdateType.UPDATETYPE_VALUES) { int updateCount = 0; int num = UpdateMask.Count - 1; for (int j = 0; j <= num; j++) { if (UpdateMask.Get(j)) { updateCount = j; } } packet.AddInt8((byte)(checked (updateCount + 32) / 32)); packet.AddBitArray(UpdateMask, checked ((byte)(checked (updateCount + 32) / 32)) * 4); int num2 = UpdateMask.Count - 1; for (int i = 0; i <= num2; i++) { if (UpdateMask.Get(i)) { if (UpdateData[i] is uint) { packet.AddUInt32(Conversions.ToUInteger(UpdateData[i])); } else if (UpdateData[i] is float) { packet.AddSingle(Conversions.ToSingle(UpdateData[i])); } else { packet.AddInt32(Conversions.ToInteger(UpdateData[i])); } } } UpdateMask.SetAll(value: false); } if (packet is UpdatePacketClass @class) { @class.UpdatesCount++; } } }
public void HandleMonsterMovementPacket(InPacket packet) { ResetData(); updateType = ObjectUpdateType.UPDATETYPE_MOVEMENT; guid = packet.ReadPackedGuid(); byte unk = packet.ReadByte(); WorldObject worldObject = game.Objects[guid]; worldObject.Set(packet.ReadVector3()); }
void ResetData() { updateType = ObjectUpdateType.UPDATETYPE_VALUES; guid = 0; lowGuid = 0; movementSpeeds.Clear(); splinePoints.Clear(); updateFields.Clear(); outOfRangeGuids.Clear(); movementInfo = null; }
protected virtual void AppendValuesUpdate(ByteBuffer buffer, ObjectUpdateType updateType, ObjectUpdateFlags updateFlags, UpdateMask updateMask) { buffer.Append(updateMask.BlockCount); buffer.Append(updateMask.Data); // write the value set for (ushort i = 0; i < FieldCount; ++i) { if (updateMask.GetBit(i)) { buffer.Append(GetFieldUnsigned(i)); } } }
protected virtual void AppendMovementUpdate(ByteBuffer buffer, ObjectUpdateType updateType, ObjectUpdateFlags updateFlags) { if ((updateFlags & ObjectUpdateFlags.HasPosition) != 0) { buffer.Append(Position); } if ((updateFlags & ObjectUpdateFlags.MaskID) != 0) { buffer.Append(ID.MaskID); } if ((updateFlags & ObjectUpdateFlags.All) != 0) { buffer.Append(1); // ? } }
public void HandleUpdatePacket(InPacket packet) { blockCount = packet.ReadUInt32(); for (int blockIndex = 0; blockIndex < blockCount; blockIndex++) { ResetData(); updateType = (ObjectUpdateType)packet.ReadByte(); switch (updateType) { case ObjectUpdateType.UPDATETYPE_VALUES: guid = packet.ReadPackedGuid(); ReadValuesUpdateData(packet); break; case ObjectUpdateType.UPDATETYPE_MOVEMENT: guid = packet.ReadPackedGuid(); ReadMovementUpdateData(packet); break; case ObjectUpdateType.UPDATETYPE_CREATE_OBJECT: case ObjectUpdateType.UPDATETYPE_CREATE_OBJECT2: guid = packet.ReadPackedGuid(); objectType = (TypeID)packet.ReadByte(); ReadMovementUpdateData(packet); ReadValuesUpdateData(packet); break; case ObjectUpdateType.UPDATETYPE_OUT_OF_RANGE_OBJECTS: var guidCount = packet.ReadUInt32(); for (var guidIndex = 0; guidIndex < guidCount; guidIndex++) { outOfRangeGuids.Add(packet.ReadPackedGuid()); } break; case ObjectUpdateType.UPDATETYPE_NEAR_OBJECTS: break; } HandleUpdateData(); } }
public void AddToPacket(ref PacketClass packet, ObjectUpdateType updateType, ref WS_GameObjects.GameObject updateObject) { checked { packet.AddInt8((byte)updateType); packet.AddPackGUID(updateObject.GUID); switch (updateObject.Type) { case GameObjectType.GAMEOBJECT_TYPE_TRAP: case GameObjectType.GAMEOBJECT_TYPE_DUEL_ARBITER: case GameObjectType.GAMEOBJECT_TYPE_FLAGSTAND: case GameObjectType.GAMEOBJECT_TYPE_FLAGDROP: updateType = ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF; break; } if (updateType is ObjectUpdateType.UPDATETYPE_CREATE_OBJECT or ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF) { packet.AddInt8(5); if (updateObject.Type is GameObjectType.GAMEOBJECT_TYPE_TRANSPORT or GameObjectType.GAMEOBJECT_TYPE_MO_TRANSPORT) { packet.AddInt8(82); }
public void HandleUpdatePacket(InPacket packet) { blockCount = packet.ReadUInt32(); for (int blockIndex = 0; blockIndex < blockCount; blockIndex++) { ResetData(); updateType = (ObjectUpdateType)packet.ReadByte(); switch (updateType) { case ObjectUpdateType.UPDATETYPE_VALUES: guid = packet.ReadPackedGuid(); ReadValuesUpdateData(packet); break; case ObjectUpdateType.UPDATETYPE_MOVEMENT: guid = packet.ReadPackedGuid(); ReadMovementUpdateData(packet); break; case ObjectUpdateType.UPDATETYPE_CREATE_OBJECT: case ObjectUpdateType.UPDATETYPE_CREATE_OBJECT2: guid = packet.ReadPackedGuid(); objectType = (TypeID)packet.ReadByte(); ReadMovementUpdateData(packet); ReadValuesUpdateData(packet); break; case ObjectUpdateType.UPDATETYPE_OUT_OF_RANGE_OBJECTS: var guidCount = packet.ReadUInt32(); for (var guidIndex = 0; guidIndex < guidCount; guidIndex++) outOfRangeGuids.Add(packet.ReadPackedGuid()); break; case ObjectUpdateType.UPDATETYPE_NEAR_OBJECTS: break; } HandleUpdateData(); } }
public void AddToPacket(ref PacketClass packet, ObjectUpdateType updateType, ref WS_Creatures.CreatureObject updateObject) { checked { packet.AddInt8((byte)updateType); packet.AddPackGUID(updateObject.GUID); if (updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT) { packet.AddInt8(3); } if (updateType is ObjectUpdateType.UPDATETYPE_CREATE_OBJECT or ObjectUpdateType.UPDATETYPE_MOVEMENT) { packet.AddInt8(112); packet.AddInt32(8388608); packet.AddInt32(WorldServiceLocator._WS_Network.MsTime()); packet.AddSingle(updateObject.positionX); packet.AddSingle(updateObject.positionY); packet.AddSingle(updateObject.positionZ); packet.AddSingle(updateObject.orientation); packet.AddSingle(0f); packet.AddSingle(WorldServiceLocator._WorldServer.CREATURESDatabase[updateObject.ID].WalkSpeed); packet.AddSingle(WorldServiceLocator._WorldServer.CREATURESDatabase[updateObject.ID].RunSpeed); packet.AddSingle(WorldServiceLocator._Global_Constants.UNIT_NORMAL_SWIM_BACK_SPEED); packet.AddSingle(WorldServiceLocator._Global_Constants.UNIT_NORMAL_SWIM_SPEED); packet.AddSingle(WorldServiceLocator._Global_Constants.UNIT_NORMAL_WALK_BACK_SPEED); packet.AddSingle(WorldServiceLocator._Global_Constants.UNIT_NORMAL_TURN_RATE); packet.AddUInt32(1u); } if (updateType is ObjectUpdateType.UPDATETYPE_CREATE_OBJECT or ObjectUpdateType.UPDATETYPE_VALUES) { var updateCount = 0; var num = UpdateMask.Count - 1; for (var i = 0; i <= num; i++) { if (UpdateMask.Get(i)) { updateCount = i; } } packet.AddInt8((byte)(checked (updateCount + 32) / 32)); packet.AddBitArray(UpdateMask, checked ((byte)(checked (updateCount + 32) / 32)) * 4); var num2 = UpdateMask.Count - 1; for (var j = 0; j <= num2; j++) { if (UpdateMask.Get(j)) { if (UpdateData[j] is uint) { packet.AddUInt32(Conversions.ToUInteger(UpdateData[j])); } else if (UpdateData[j] is float) { packet.AddSingle(Conversions.ToSingle(UpdateData[j])); } else { packet.AddInt32(Conversions.ToInteger(UpdateData[j])); } } } UpdateMask.SetAll(value: false); } if (packet is UpdatePacketClass @class) { @class.UpdatesCount++; } } }
private void _BuildMovementUpdate(ObjectUpdateType type, ObjectUpdateFlags flags, ref PacketOut pkt) { var asUnit = ToRef() as IUnitImpl; pkt.Write((UInt16)flags); if ((flags & ObjectUpdateFlags.UPDATEFLAG_LIVING) != 0) { UInt32 moveflags = 0; UInt16 moveflagsex = 0; pkt.Write(moveflags); pkt.Write(moveflagsex); pkt.Write(Time.GetMSTime()); pkt.Write(State.PositionX); pkt.Write(State.PositionY); pkt.Write(State.PositionZ); pkt.Write(State.Orientation); pkt.Write((UInt32)0); //fall time pkt.Write((float)14.0); //walk speed pkt.Write((float)14.0); //run speed pkt.Write((float)14.0); //runback speed pkt.Write((float)14.0); //swim speed pkt.Write((float)14.0); //swimback speed pkt.Write((float)14.0); //flight speed pkt.Write((float)14.0); //flightback speed pkt.Write((float)14.0); //turn rate pkt.Write((float)14.0); //pitch rate } else { if ((flags & ObjectUpdateFlags.UPDATEFLAG_POSITION) != 0) { pkt.Write((byte)0); //packed guid of transport pkt.Write(State.PositionX); pkt.Write(State.PositionY); pkt.Write(State.PositionZ); pkt.Write((float)0); //transport offset x pkt.Write((float)0); //transport offset y pkt.Write((float)0); //transport offset z pkt.Write(State.Orientation); } else { if ((flags & ObjectUpdateFlags.UPDATEFLAG_STATIONARY_POSITION) != 0) { pkt.Write(State.PositionX); pkt.Write(State.PositionY); pkt.Write(State.PositionZ); pkt.Write(State.Orientation); } } } if ((flags & ObjectUpdateFlags.UPDATEFLAG_UNKNOWN) != 0) { pkt.Write((UInt32)0); } if ((flags & ObjectUpdateFlags.UPDATEFLAG_LOWGUID) != 0) { //lowguid of some items 2F or 8 for players TypeID myType = State.MyType; switch (myType) { case TypeID.TYPEID_OBJECT: case TypeID.TYPEID_ITEM: case TypeID.TYPEID_CONTAINER: case TypeID.TYPEID_GAMEOBJECT: case TypeID.TYPEID_DYNAMICOBJECT: case TypeID.TYPEID_CORPSE: { pkt.Write((UInt32)_GetUInt64(EObjectFields.OBJECT_FIELD_GUID)); } break; case TypeID.TYPEID_UNIT: pkt.Write((UInt32)0xB); break; case TypeID.TYPEID_PLAYER: { if ((flags & ObjectUpdateFlags.UPDATEFLAG_SELF) != 0) { pkt.Write((UInt32)0x2F); } else { pkt.Write((UInt32)0x8); } } break; default: pkt.Write((UInt32)0); break; } } if ((flags & ObjectUpdateFlags.UPDATEFLAG_HAS_TARGET) != 0) { pkt.Write((byte)0); //packed guid of target } if ((flags & ObjectUpdateFlags.UPDATEFLAG_TRANSPORT) != 0) { pkt.Write(Time.GetMSTime()); //fk knows } if ((flags & ObjectUpdateFlags.UPDATEFLAG_VEHICLE) != 0) { pkt.Write((UInt32)0); //vehicle id pkt.Write((float)0); //orientation } if ((flags & ObjectUpdateFlags.UPDATEFLAG_ROTATION) != 0) { //this is the packed quart :( pkt.Write((UInt64)0); } }
public void AddToPacket(ref PacketClass packet, ObjectUpdateType updateType, ref WS_PlayerData.CharacterObject updateObject) { packet.AddInt8(checked ((byte)updateType)); packet.AddPackGUID(updateObject.GUID); if (updateType is ObjectUpdateType.UPDATETYPE_CREATE_OBJECT or ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF) { packet.AddInt8(4); } if (updateType is ObjectUpdateType.UPDATETYPE_CREATE_OBJECT or ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF or ObjectUpdateType.UPDATETYPE_MOVEMENT) { var flags2 = updateObject.charMovementFlags & 0xFF; if (updateObject.OnTransport != null) { flags2 |= 0x2000000; } packet.AddInt8(112); packet.AddInt32(flags2); packet.AddInt32(WorldServiceLocator._WS_Network.MsTime()); packet.AddSingle(updateObject.positionX); packet.AddSingle(updateObject.positionY); packet.AddSingle(updateObject.positionZ); packet.AddSingle(updateObject.orientation); if (((uint)flags2 & 0x2000000u) != 0) { packet.AddUInt64(updateObject.OnTransport.GUID); packet.AddSingle(updateObject.transportX); packet.AddSingle(updateObject.transportY); packet.AddSingle(updateObject.transportZ); packet.AddSingle(updateObject.orientation); } packet.AddInt32(0); packet.AddSingle(updateObject.WalkSpeed); packet.AddSingle(updateObject.RunSpeed); packet.AddSingle(updateObject.RunBackSpeed); packet.AddSingle(updateObject.SwimSpeed); packet.AddSingle(updateObject.SwimBackSpeed); packet.AddSingle(updateObject.TurnRate); packet.AddUInt32(WorldServiceLocator._CommonGlobalFunctions.GuidLow(updateObject.GUID)); } checked { if (updateType is ObjectUpdateType.UPDATETYPE_CREATE_OBJECT or ObjectUpdateType.UPDATETYPE_VALUES or ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF) { var updateCount = 0; var num = UpdateMask.Count - 1; for (var i = 0; i <= num; i++) { if (UpdateMask.Get(i)) { updateCount = i; } } packet.AddInt8((byte)(checked (updateCount + 32) / 32)); packet.AddBitArray(UpdateMask, checked ((byte)(checked (updateCount + 32) / 32)) * 4); var num2 = UpdateMask.Count - 1; for (var j = 0; j <= num2; j++) { if (UpdateMask.Get(j)) { if (UpdateData[j] is uint) { packet.AddUInt32(Conversions.ToUInteger(UpdateData[j])); } else if (UpdateData[j] is float) { packet.AddSingle(Conversions.ToSingle(UpdateData[j])); } else { packet.AddInt32(Conversions.ToInteger(UpdateData[j])); } } } UpdateMask.SetAll(value: false); } if (packet is UpdatePacketClass @class) { @class.UpdatesCount++; } } }
public void AddToPacket(ref PacketClass packet, ObjectUpdateType updateType, ref WS_GameObjects.GameObjectObject updateObject) { checked { packet.AddInt8((byte)updateType); packet.AddPackGUID(updateObject.GUID); switch (updateObject.Type) { case GameObjectType.GAMEOBJECT_TYPE_TRAP: case GameObjectType.GAMEOBJECT_TYPE_DUEL_ARBITER: case GameObjectType.GAMEOBJECT_TYPE_FLAGSTAND: case GameObjectType.GAMEOBJECT_TYPE_FLAGDROP: updateType = ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF; break; } if (updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT || updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF) { packet.AddInt8(5); if (updateObject.Type == GameObjectType.GAMEOBJECT_TYPE_TRANSPORT || updateObject.Type == GameObjectType.GAMEOBJECT_TYPE_MO_TRANSPORT) { packet.AddInt8(82); } else { packet.AddInt8(80); } if (updateObject.Type == GameObjectType.GAMEOBJECT_TYPE_MO_TRANSPORT) { packet.AddSingle(0f); packet.AddSingle(0f); packet.AddSingle(0f); packet.AddSingle(updateObject.orientation); } else { packet.AddSingle(updateObject.positionX); packet.AddSingle(updateObject.positionY); packet.AddSingle(updateObject.positionZ); packet.AddSingle(updateObject.orientation); } packet.AddUInt32(WorldServiceLocator._CommonGlobalFunctions.GuidHigh(updateObject.GUID)); if (updateObject.Type == GameObjectType.GAMEOBJECT_TYPE_TRANSPORT || updateObject.Type == GameObjectType.GAMEOBJECT_TYPE_MO_TRANSPORT) { packet.AddInt32(WorldServiceLocator._WS_Network.MsTime()); } } if (updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT || updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF || updateType == ObjectUpdateType.UPDATETYPE_VALUES) { int updateCount = 0; int num = UpdateMask.Count - 1; for (int i = 0; i <= num; i++) { if (UpdateMask.Get(i)) { updateCount = i; } } packet.AddInt8((byte)(checked (updateCount + 32) / 32)); packet.AddBitArray(UpdateMask, checked ((byte)(checked (updateCount + 32) / 32)) * 4); int num2 = UpdateMask.Count - 1; for (int j = 0; j <= num2; j++) { if (UpdateMask.Get(j)) { if (UpdateData[j] is uint) { packet.AddUInt32(Conversions.ToUInteger(UpdateData[j])); } else if (UpdateData[j] is float) { packet.AddSingle(Conversions.ToSingle(UpdateData[j])); } else { packet.AddInt32(Conversions.ToInteger(UpdateData[j])); } } } UpdateMask.SetAll(value: false); } if (packet is UpdatePacketClass @class) { @class.UpdatesCount++; } } }