Example #1
0
 /// <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;
 }
Example #2
0
 public void PushFieldUpdateToPlayer(Character character, UpdateFieldId field, byte[] value)
 {
     using (var packet = GetFieldUpdatePacket(field, value))
     {
         SendUpdatePacket(character, packet);
     }
 }
Example #3
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);
        }
Example #4
0
        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));
        }
Example #5
0
 /// <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);
         }
     }
 }
Example #6
0
        public byte GetByte(UpdateFieldId id)
        {
            var i = (uint)id.RawId * 4;

            if (Values.Length < i + 1)
            {
                return(0);
            }
            return(Values[i]);
        }
Example #7
0
        public bool IsSet(UpdateFieldId id)
        {
            var i = (uint)id.RawId * 4;

            if (Values.Length < i + 1)
            {
                return(false);
            }
            return(SetIndices.Contains((uint)id.RawId));
        }
Example #8
0
 /// <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);
         }
     }
 }
Example #9
0
 /// <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);
         }
     }
 }
Example #10
0
        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);
            }
        }
Example #11
0
        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);
        }
Example #13
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);
        }
        /// <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);
        }
Example #15
0
 /// <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);
 }
Example #16
0
 public float GetFloat(UpdateFieldId field)
 {
     return(this.m_updateValues[field.RawId].Float);
 }
Example #17
0
 public void SetByteArray(UpdateFieldId field, byte[] value)
 {
     this.SetByteArray(field.RawId, value);
 }
Example #18
0
 public void SetEntityId(UpdateFieldId field, EntityId id)
 {
     this.SetEntityId(field.RawId, id);
 }
Example #19
0
 public void SetUInt64(UpdateFieldId field, ulong value)
 {
     this.SetUInt64(field.RawId, value);
 }
Example #20
0
 public void SetUInt32(UpdateFieldId field, uint value)
 {
     this.SetUInt32(field.RawId, value);
 }
Example #21
0
 public ushort GetUInt16High(UpdateFieldId field)
 {
     return(this.m_updateValues[field.RawId].UInt16High);
 }
Example #22
0
 public short GetInt16Low(UpdateFieldId field)
 {
     return(this.m_updateValues[field.RawId].Int16Low);
 }
Example #23
0
 /// <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);
 }
Example #24
0
 public byte GetByte(UpdateFieldId field, int index)
 {
     return(this.m_updateValues[field.RawId].GetByte(index));
 }
Example #25
0
 public void PushFieldUpdateToPlayer(Character character, UpdateFieldId field, byte[] value)
 {
     using (UpdatePacket fieldUpdatePacket = this.GetFieldUpdatePacket(field, value))
         ObjectBase.SendUpdatePacket(character, fieldUpdatePacket);
 }
Example #26
0
 public void SetFloat(UpdateFieldId field, float value)
 {
     this.SetFloat(field.RawId, value);
 }
Example #27
0
 protected BaseInventory(IContainer owner, UpdateFieldId baseField, int invSize) :
     this(owner, baseField, new Item[invSize])
 {
 }
Example #28
0
 public void SetInt16Low(UpdateFieldId field, short value)
 {
     this.SetInt16Low(field.RawId, value);
 }
Example #29
0
 /// <summary>16 Initial item slots</summary>
 public ContainerInventory(Container owner, UpdateFieldId baseField, int slots)
     : base((IContainer)owner, baseField, slots)
 {
 }
Example #30
0
 public void SetUInt16High(UpdateFieldId field, ushort value)
 {
     this.SetUInt16High(field.RawId, value);
 }