protected UpdatePacket GetFieldUpdatePacket(UpdateFieldId field, EntityId value) { //UpdatePacket packet = new UpdatePacket(BufferManager.Small.CheckOut()); var packet = new UpdatePacket(128) { Position = 4 }; packet.Write(1); // Update Count packet.Write((byte)UpdateType.Values); EntityId.WritePacked(packet); var blocks = (byte)((field.RawId + 1) / 32 + 2); packet.Write(blocks); if (blocks > 1) { packet.Zero((blocks - 2) * 4); var updateBlocks = new int[blocks]; updateBlocks[field.RawId << 5] = (1 << (field.RawId & 31)); updateBlocks[field.RawId + 1 << 5] = (1 << (field.RawId + 1 & 31)); packet.Write(updateBlocks[0]); packet.Write(updateBlocks[1]); } else { packet.Zero((blocks - 1) * 4); packet.Write((1 << (field.RawId & 31) | 1 << (field.RawId + 1 & 31))); } packet.Write(value); return packet; }
protected UpdatePacket GetFieldUpdatePacket(UpdateFieldId field, byte[] value) { var blocks = (field.RawId >> 5) + 1; var emptyBlockSize = (blocks - 1) * 4; //UpdatePacket packet = new UpdatePacket(BufferManager.Small.CheckOut()); var packet = new UpdatePacket { Position = 4 }; packet.Write(1); // Update Count packet.Write((byte)UpdateType.Values); EntityId.WritePacked(packet); packet.Write((byte)blocks); //packet.TotalLength += emptyBlockSize; packet.Zero(emptyBlockSize); packet.Write(1 << (field.RawId & 31)); packet.Write(value); return packet; }