Example #1
0
 public ItemsMgr(WO_Player parent)
     : base(parent)
 {
     _wPlayer    = parent;
     _mPlayer    = _wPlayer.Player;
     _player     = _mPlayer.Player;
     m_data      = _mPlayer.Data;
     m_items     = m_data.Items;
     m_wears     = m_data.Wears;
     m_itemsHash = new HashSet <int>();
     foreach (var item in m_items)
     {
         var value = item.Value;
         if (!m_itemsHash.Contains(value.Item.Id))
         {
             m_itemsHash.Add(value.Item.Id);
         }
     }
     m_wearSlotsUsed = WearablePosition.None;
     foreach (var item in m_wears)
     {
         var     value = item.Value;
         DB_Item dbitem;
         if (DataMgr.Select(value.Id, out dbitem))
         {
             m_wearSlotsUsed |= dbitem.Slot;
         }
     }
     parent.OnSpawn   += ItemsMgr_OnSpawn;
     parent.OnDestroy += ItemsMgr_OnDestroy;
 }
 public static byte ToWearableIndex(this WearablePosition slot)
 {
     if (slot == WearablePosition.None)
     {
         return(0);
     }
     else
     {
         return((byte)(Math.Log((uint)slot, 2.0) + 1.0));
     }
 }
Example #3
0
        private void UnwearItem(WornSlot wslot, byte islot)
        {
            DB_Item item; InventoryItem witem;
            var     index = wslot.Index;

            if (m_wears.TryGetValue(index, out witem))
            {
                if (DataMgr.Select(witem.Id, out item))
                {
                    int itemSlot = islot;
                    if (!GetInventorySlot(islot).IsEmpty)
                    {
                        itemSlot = GetFreeSlot();
                    }
                    if (itemSlot != -1)
                    {
                        if (SetSlot(itemSlot, item, witem, 1) == 0)
                        {
                            m_wears.Remove(index);
                            m_wearSlotsUsed &= ~wslot.Position;
                            m_view.UnwearItem(wslot.Value, m_wearSlotsUsed);
                            if ((item.Flags & ItemFlags.Stats) > 0)
                            {
                                _mPlayer.Stats.UpdateStats();
                            }
                        }
                        else
                        {
                            _player.SystemMsg($"Couldn't unwear item {item.Name}");
                            m_view.WearItem(witem, wslot.Value, m_wearSlotsUsed);
                        }
                    }
                    else
                    {
                        _player.SystemMsg($"You inventory is full");
                        m_view.WearItem(witem, wslot.Value, m_wearSlotsUsed);
                    }
                }
                else
                {
                    _player.SystemMsg($"Item {witem.Id} not found");
                    m_view.WearItem(witem, wslot.Value, m_wearSlotsUsed);
                }
            }
            else
            {
                _player.SystemMsg($"Wear slot {wslot.Position} is empty");
            }
        }
Example #4
0
        private void WearItem(WornSlot wslot, byte islot)
        {
            DB_Item item; InventoryItem witem;
            var     itemSlot = GetSlot(islot);

            if (itemSlot?.IsEmpty ?? true)
            {
                _player.SystemMsg($"Inventory slot {islot} is empty");
            }
            else
            {
                if (DataMgr.Select(itemSlot.Item.Id, out item))
                {
                    var wPosition = wslot.Position;
                    if ((item.Slot & wPosition) == wPosition)
                    {
                        var flags = item.Flags;
                        var index = wslot.Index;
                        m_items.Remove(islot);
                        m_view.UpdateSlot(itemSlot.Delete(), islot);
                        if (m_wears.TryGetValue(index, out witem))
                        {
                            item = DataMgr.SelectItem(witem.Id);
                            SetSlot(islot, item, witem, 1);
                            flags |= item.Flags;
                        }
                        m_wearSlotsUsed |= wPosition;
                        m_wears[index]   = itemSlot.Item;
                        m_view.WearItem(itemSlot.Item, wslot.Value, m_wearSlotsUsed);
                        if ((flags & ItemFlags.Stats) > 0)
                        {
                            _mPlayer.Stats.UpdateStats();
                        }
                    }
                    else
                    {
                        _player.SystemMsg($"You can't wear {item.Name} in {wPosition}");
                    }
                }
                else
                {
                    _player.SystemMsg($"Item {itemSlot.Item.Id} not found");
                }
            }
        }
 public DB_Item(int id, string name, byte flags, byte level, ushort stack, int price, int slot)
 {
     ID    = id;
     Name  = name;
     Level = level;
     Stack = stack;
     Price = price;
     Flags = (ItemFlags)flags;
     Slot  = (WearablePosition)slot;
     if ((Flags & ItemFlags.Stats) > 0)
     {
         Stats = new List <Tuple <Stats, int> >();
     }
     else
     {
         Stats = null;
     }
 }
Example #6
0
        private void UnwearItem(WornSlot wslot, byte islot)
        {
            var index = wslot.Index;

            if (m_wears.TryGetValue(index, out var witem))
            {
                if (DataMgr.Select(witem.Id, out DB_Item item))
                {
                    if (m_items.TryGetValue(islot, out var slot))
                    {
                        var itemSlot = GetFreeSlot();
                        if (itemSlot != -1)
                        {
                            SetSlot(itemSlot, witem, 1);
                            m_wears.Remove(index);
                            m_wearSlotsUsed &= ~wslot.Position;
                            m_view.UnwearItem(wslot.Value, m_wearSlotsUsed);
                            if ((item.Flags & ItemFlags.Stats) > 0)
                            {
                                _mPlayer.Stats.UpdateStats();
                            }
                        }
                        else
                        {
                            _player.SystemMsg($"You inventory is full");
                            m_view.WearItem(witem, wslot.Value, m_wearSlotsUsed);
                        }
                    }
                    else
                    {
                        SetSlot(islot, witem, 1);
                    }
                }
                else
                {
                    _player.SystemMsg($"Item {witem.Id} not found");
                    m_view.WearItem(witem, wslot.Value, m_wearSlotsUsed);
                }
            }
            else
            {
                _player.SystemMsg($"Wear slot {wslot.Position} is empty");
            }
        }
Example #7
0
 public void OnSerialize(NetMessage message)
 {
     InventoryItem item; WearablePosition wSlots = WearablePosition.None; DB_Item dbItem;
     message.Write(Constants.MaxWornItems);
     for (int index = 0, count = m_data.Count; index < Constants.MaxWornItems; index++)
     {
         if (count > 0)
         {
             if (m_data.TryGetValue(index, out item) && DataMgr.Select(item.Id, out dbItem))
             {
                 count--;
                 item.OnSerialize(message);
                 wSlots |= dbItem.Slot;
                 continue;
             }
         }
         message.Write(InventoryItem.EmptyID);
     }
     message.Write((int)wSlots);
 }
 public static void WearItem(this PNetR.NetworkView view, InventoryItem item, byte slot, WearablePosition usedSlots)
 {
     view.Rpc(7, 8, RpcMode.AllOrdered, item, slot, (int)usedSlots);
 }
 public static void UnwearItem(this PNetR.NetworkView view, byte slot, WearablePosition usedSlots)
 {
     view.Rpc(7, 9, RpcMode.AllOrdered, slot, (int)usedSlots);
 }