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); }
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(); } }
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(); } }
/// <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); }
/// <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); }
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(); }
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); }