/// <summary> /// Inventory for shared item-array /// </summary> protected BaseInventory(IContainer owner, UpdateFieldId baseField, Item[] items) { m_container = owner; m_baseField = baseField.RawId; m_Items = items; m_count = 0; }
public void PushFieldUpdateToPlayer(Character character, UpdateFieldId field, byte[] value) { using (var packet = GetFieldUpdatePacket(field, value)) { SendUpdatePacket(character, 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); }
public ulong GetUInt64(UpdateFieldId field) { uint low = m_updateValues[field.RawId].UInt32; uint high = m_updateValues[field.RawId + 1].UInt32; return(low | ((ulong)high << 32)); }
/// <summary> /// Sends a manual update field change to all nearby characters. /// </summary> /// <param name="field">the field to update</param> /// <param name="value">the value to update it to</param> public void SendFieldUpdateToArea(UpdateFieldId field, uint value) { if (IsAreaActive) { using (var packet = GetFieldUpdatePacket(field, value)) { SendPacketToArea(packet); } } }
public byte GetByte(UpdateFieldId id) { var i = (uint)id.RawId * 4; if (Values.Length < i + 1) { return(0); } return(Values[i]); }
public bool IsSet(UpdateFieldId id) { var i = (uint)id.RawId * 4; if (Values.Length < i + 1) { return(false); } return(SetIndices.Contains((uint)id.RawId)); }
/// <summary> /// Sends a manual update field refresh to all nearby characters. /// </summary> /// <param name="field">the field to refresh</param> public void SendFieldUpdateTo(IPacketReceiver rcv, UpdateFieldId field) { if (IsAreaActive) { var value = GetUInt32(field.RawId); using (var packet = GetFieldUpdatePacket(field, value)) { rcv.Send(packet); } } }
/// <summary> /// Sends a manual update field refresh to all nearby characters. /// </summary> /// <param name="field">the field to refresh</param> public void SendFieldUpdateToArea(UpdateFieldId field) { if (IsAreaActive) { var value = GetUInt32(field.RawId); using (var packet = GetFieldUpdatePacket(field, value)) { SendPacketToArea(packet); } } }
public void PushFieldUpdate(UpdateFieldId field, uint value) { if (!IsInWorld) { // set the value and don't push, we aren't in game so we'll get it on the next self full update SetUInt32(field, value); return; } using (var packet = GetFieldUpdatePacket(field, value)) { SendUpdatePacket(this, packet); } }
protected UpdatePacket GetFieldUpdatePacket(UpdateFieldId field, byte[] value) { int num = (field.RawId >> 5) + 1; int len = (num - 1) * 4; UpdatePacket updatePacket1 = new UpdatePacket(); updatePacket1.Position = 4L; UpdatePacket updatePacket2 = updatePacket1; updatePacket2.Write(1); updatePacket2.Write((byte)0); this.EntityId.WritePacked((BinaryWriter)updatePacket2); updatePacket2.Write((byte)num); updatePacket2.Zero(len); updatePacket2.Write(1 << field.RawId); updatePacket2.Write(value); return(updatePacket2); }
/// <summary> /// /// </summary> /// <param name="field"></param> /// <param name="value"></param> /// <returns></returns> protected Packet GetFieldUpdatePacket(UpdateFieldId updateFieldId, EntityId value) { UpdatePacket packet = new UpdatePacket(); packet.WriterStream.Write((byte)UpdateTypes.Values); EntityId entityId = new EntityId(this.Serial); entityId.WritePacked(packet); int iBlocks = ((updateFieldId.RawId + 1) >> 5) + 1; packet.WriterStream.Write((int)iBlocks); int iBlocksCheck = (updateFieldId.RawId >> 5) + 1; if (iBlocks > 1 && iBlocksCheck != iBlocks) { packet.WriterStream.Fill(0x00, (iBlocks - 2) * 4); packet.WriterStream.Write((uint)0x80000000); packet.WriterStream.Write((uint)0x00000001); } else { packet.WriterStream.Fill(0x00, (iBlocks - 1) * 4); uint uiValue = (uint)(1 << (updateFieldId.RawId & 31)); uiValue |= (uint)(uiValue << 1); packet.WriterStream.Write((uint)uiValue); } packet.WriterStream.Write(value); packet.EndWrite(1); // Update Count return(packet); }
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); }
/// <summary> /// /// </summary> /// <param name="field"></param> /// <param name="value"></param> /// <returns></returns> protected Packet GetFieldUpdatePacket(UpdateFieldId updateFieldId, uint value) { UpdatePacket packet = new UpdatePacket(); packet.WriterStream.Write((byte)UpdateTypes.Values); EntityId entityId = new EntityId(this.Serial); entityId.WritePacked(packet); int iBlocks = (updateFieldId.RawId >> 5) + 1; packet.WriterStream.Write((int)iBlocks); packet.WriterStream.Fill(0x00, (iBlocks - 1) * 4); packet.WriterStream.Write((uint)(1 << (updateFieldId.RawId & 31))); packet.WriterStream.Write((uint)value); packet.EndWrite(1); // Update Count return(packet); }
/// <summary> /// Sets a specified byte of an updatefield to the specified value /// </summary> /// <param name="field">The field to set</param> /// <param name="index">The index of the byte in the 4-byte field. (Ranges from 0-3)</param> /// <param name="value">The value to set</param> public void SetByte(UpdateFieldId field, int index, byte value) { this.SetByte(field.RawId, index, value); }
public float GetFloat(UpdateFieldId field) { return(this.m_updateValues[field.RawId].Float); }
public void SetByteArray(UpdateFieldId field, byte[] value) { this.SetByteArray(field.RawId, value); }
public void SetEntityId(UpdateFieldId field, EntityId id) { this.SetEntityId(field.RawId, id); }
public void SetUInt64(UpdateFieldId field, ulong value) { this.SetUInt64(field.RawId, value); }
public void SetUInt32(UpdateFieldId field, uint value) { this.SetUInt32(field.RawId, value); }
public ushort GetUInt16High(UpdateFieldId field) { return(this.m_updateValues[field.RawId].UInt16High); }
public short GetInt16Low(UpdateFieldId field) { return(this.m_updateValues[field.RawId].Int16Low); }
/// <summary> /// Marks the given UpdateField for an Update. /// Marked UpdateFields will be re-sent to all surrounding Characters. /// </summary> protected internal void MarkUpdate(UpdateFieldId index) { this.MarkUpdate(index.RawId); }
public byte GetByte(UpdateFieldId field, int index) { return(this.m_updateValues[field.RawId].GetByte(index)); }
public void PushFieldUpdateToPlayer(Character character, UpdateFieldId field, byte[] value) { using (UpdatePacket fieldUpdatePacket = this.GetFieldUpdatePacket(field, value)) ObjectBase.SendUpdatePacket(character, fieldUpdatePacket); }
public void SetFloat(UpdateFieldId field, float value) { this.SetFloat(field.RawId, value); }
protected BaseInventory(IContainer owner, UpdateFieldId baseField, int invSize) : this(owner, baseField, new Item[invSize]) { }
public void SetInt16Low(UpdateFieldId field, short value) { this.SetInt16Low(field.RawId, value); }
/// <summary>16 Initial item slots</summary> public ContainerInventory(Container owner, UpdateFieldId baseField, int slots) : base((IContainer)owner, baseField, slots) { }
public void SetUInt16High(UpdateFieldId field, ushort value) { this.SetUInt16High(field.RawId, value); }