Пример #1
0
    private bool LoseItem(ItemInfo info, int amount)
    {
        if (MWarehouse == null || info == null || !info.item || amount < 1)
        {
            return(false);
        }
        if (!BackpackManager.Instance.TryGetItem_Boolean(info, amount))
        {
            return(false);
        }
        BackpackManager.Instance.GetItem(info, amount);
        MWarehouse.LoseItemSimple(info, amount);
        ItemAgent ia = GetItemAgentByInfo(info);

        if (ia)
        {
            ia.UpdateInfo();
        }
        UpdateUI();
        if (!BackpackManager.Instance.IsUIOpen)
        {
            BackpackManager.Instance.OpenWindow();
        }
        return(true);
    }
Пример #2
0
    private void OnTake(ItemInfo item, int amount)
    {
        if (!LootAgent)
        {
            return;
        }
        if (!LootAgent.lootItems.Contains(item))
        {
            return;
        }
        int takeAmount = BackpackManager.Instance.TryGetItem_Integer(item, amount);

        if (BackpackManager.Instance.GetItem(item.item, takeAmount))
        {
            item.Amount -= takeAmount;
        }
        if (item.Amount < 1)
        {
            LootAgent.lootItems.Remove(item);
        }
        ItemAgent ia = GetItemAgentByInfo(item);

        if (ia)
        {
            ia.UpdateInfo();
        }
        if (LootAgent.lootItems.Count < 1)
        {
            LootAgent.Recycle();
            CloseWindow();
        }
    }
Пример #3
0
 public void TakeAll()
 {
     if (!LootAgent)
     {
         return;
     }
     foreach (ItemInfo item in LootAgent.lootItems)
     {
         int takeAmount = BackpackManager.Instance.TryGetItem_Integer(item);
         if (BackpackManager.Instance.GetItem(item.item, takeAmount))
         {
             item.Amount -= takeAmount;
         }
         ItemAgent ia = GetItemAgentByInfo(item);
         if (ia)
         {
             ia.UpdateInfo();
         }
     }
     LootAgent.lootItems.RemoveAll(x => x.Amount < 1);
     if (LootAgent.lootItems.Count < 1)
     {
         LootAgent.Recycle();
         CloseWindow();
     }
 }
Пример #4
0
 /// <summary>
 /// 仓库、装备专用获取道具
 /// </summary>
 /// <param name="info">道具信息</param>
 /// <param name="amount">获取数量</param>
 /// <param name="simulLoseItems">会同时失去的道具</param>
 /// <returns>是否成功</returns>
 public bool GetItem(ItemInfo info, int amount, params ItemInfo[] simulLoseItems)//仓库、装备专用
 {
     if (Backpack == null || info == null || !info.item || amount < 1)
     {
         return(false);
     }
     if (!TryGetItem_Boolean(info, amount, simulLoseItems))
     {
         return(false);
     }
     if (simulLoseItems != null)
     {
         foreach (var si in simulLoseItems)
         {
             LoseItem(si.item, si.Amount);
         }
     }
     if (info.item.StackAble)
     {
         Backpack.GetItemSimple(info, amount);
         ItemAgent ia = itemAgents.Find(x => !x.IsEmpty && (x.MItemInfo.item == info.item || x.MItemInfo.ItemID == info.ItemID));
         if (ia)
         {
             ia.UpdateInfo();
         }
         else//如果找不到,说明该物品是新的,原来背包里没有的
         {
             ia = itemAgents.Find(x => x.IsEmpty);
             if (ia)
             {
                 ia.SetItem(Backpack.LatestInfo);
             }
             else
             {
                 MessageManager.Instance.New("发生内部错误!");
                 Debug.Log("[Get Item Error: Can't find ItemAgent] ID: " + info.item.ID + "[" + System.DateTime.Now.ToString() + "]");
             }
         }
     }
     else
     {
         for (int i = 0; i < amount; i++)
         {
             Backpack.GetItemSimple(info);
             foreach (ItemAgent ia in itemAgents)
             {
                 if (ia.IsEmpty)
                 {
                     ia.SetItem(Backpack.LatestInfo);
                     break;
                 }
             }
         }
     }
     OnGetItemEvent?.Invoke(info.ItemID, amount);
     UpdateUI();
     return(true);
 }
Пример #5
0
    /// <summary>
    /// 失去道具(精确到个例)
    /// </summary>
    /// <param name="info">道具信息</param>
    /// <param name="amount">失去数量</param>
    /// <param name="simulGetItems">会同时获得的道具</param>
    /// <returns>是否成功</returns>
    public bool LoseItem(ItemInfo info, int amount, params ItemInfo[] simulGetItems)
    {
        if (Backpack == null || info == null || !info.item || amount < 1)
        {
            return(false);
        }
        if (!TryLoseItem_Boolean(info, amount))
        {
            return(false);
        }
        if (simulGetItems != null)
        {
            foreach (var si in simulGetItems)
            {
                if (!TryGetItem_Boolean(si, new ItemInfo(info.item, amount)))
                {
                    return(false);
                }
            }
        }
        Backpack.LoseItemSimple(info, amount);
        ItemAgent ia = itemAgents.Find(x => x.MItemInfo == info);

        if (ia)
        {
            ia.UpdateInfo();
        }
        OnLoseItemEvent?.Invoke(info.ItemID, GetItemAmount(info.item));
        if (ItemWindowManager.Instance.MItemInfo == info && info.Amount < 1)
        {
            ItemWindowManager.Instance.CloseWindow();
        }
        if (simulGetItems != null)
        {
            foreach (var si in simulGetItems)
            {
                GetItem(si);
            }
        }
        UpdateUI();
        return(true);
    }
Пример #6
0
 public void UpdateInfo()
 {
     if (merchandiseInfo == null || !merchandiseInfo.Item)
     {
         return;
     }
     nameText.text = merchandiseInfo.Item.name;
     if (merchandiseType == MerchandiseType.SellToPlayer)
     {
         priceText.text = (merchandiseInfo.Item.BuyPrice * merchandiseInfo.PriceMultiple).ToString("F0") + "文";
     }
     else
     {
         priceText.text = (merchandiseInfo.Item.SellPrice * merchandiseInfo.PriceMultiple).ToString("F0") + "文";
     }
     if (merchandiseInfo.EmptyAble)
     {
         if (merchandiseType == MerchandiseType.BuyFromPlayer)
         {
             amountText.text = merchandiseInfo.IsEmpty ? "暂无需求" : merchandiseInfo.LeftAmount + "/" + merchandiseInfo.MaxAmount;
         }
         else
         {
             amountText.text = merchandiseInfo.IsEmpty ? "售罄" : merchandiseInfo.LeftAmount + "/" + merchandiseInfo.MaxAmount;
         }
     }
     else
     {
         if (merchandiseType == MerchandiseType.BuyFromPlayer)
         {
             amountText.text = "无限收购";
         }
         else
         {
             amountText.text = "现货充足";
         }
     }
     itemAgentSon.MItemInfo.Amount = merchandiseInfo.LeftAmount;
     itemAgentSon.UpdateInfo();
 }
Пример #7
0
 private bool GetItem(ItemInfo info, int amount)
 {
     if (MWarehouse == null || info == null || !info.item || amount < 1)
     {
         return(false);
     }
     if (!BackpackManager.Instance.TryLoseItem_Boolean(info, amount))
     {
         return(false);
     }
     if (!info.item.StackAble && MWarehouse.IsFull)
     {
         MessageManager.Instance.New("仓库已满");
         return(false);
     }
     if (!info.item.StackAble && amount > MWarehouse.size.Rest)
     {
         MessageManager.Instance.New(string.Format("请至少多留出{0}个仓库空间", amount - MWarehouse.size.Rest));
         return(false);
     }
     if (info.item.StackAble)
     {
         MWarehouse.GetItemSimple(info, amount);
         ItemAgent ia = itemAgents.Find(x => !x.IsEmpty && x.MItemInfo.item == info.item);
         if (ia)
         {
             ia.UpdateInfo();
         }
         else
         {
             ia = itemAgents.Find(x => x.IsEmpty);
             if (ia)
             {
                 ia.SetItem(MWarehouse.Latest);
             }
             else
             {
                 MessageManager.Instance.New("发生内部错误!");
                 Debug.Log("[Store Item Error: Can't find ItemAgent] ID: " + info.ItemID + "[" + DateTime.Now.ToString() + "]");
             }
         }
     }
     else
     {
         for (int i = 0; i < amount; i++)
         {
             MWarehouse.GetItemSimple(info);
             foreach (ItemAgent ia in itemAgents)
             {
                 if (ia.IsEmpty)
                 {
                     ia.SetItem(MWarehouse.Latest);
                     break;
                 }
             }
         }
     }
     BackpackManager.Instance.LoseItem(info, amount);
     UpdateUI();
     return(true);
 }