示例#1
0
		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;
		}
示例#2
0
		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;
		}