public void Refresh(float time) { using (var commodityEnum = Commodities.GetEnumerator()) while (commodityEnum.MoveNext()) { MerchandiseInfo commodity = commodityEnum.Current; if (commodity.EmptyAble && commodity.RefreshTime > 0) { commodity.leftRefreshTime -= time; if (commodity.leftRefreshTime <= 0) { commodity.leftRefreshTime = commodity.RefreshTime; commodity.LeftAmount += Random.Range(commodity.MinRefreshAmount, commodity.MaxRefreshAmount); } } } using (var acquisitionEnum = Acquisitions.GetEnumerator()) while (acquisitionEnum.MoveNext()) { MerchandiseInfo acquisiton = acquisitionEnum.Current; if (acquisiton.EmptyAble && acquisiton.RefreshTime > 0) { acquisiton.leftRefreshTime -= time; if (acquisiton.leftRefreshTime <= 0) { acquisiton.leftRefreshTime = acquisiton.RefreshTime; acquisiton.LeftAmount += Random.Range(acquisiton.MinRefreshAmount, acquisiton.MaxRefreshAmount); } } } }
public GoodsData(ShopData shop, MerchandiseInfo info, GoodsType type) { Shop = shop; Info = info; Type = type; leftRefreshTime = info.RefreshTime; leftAmount = info.MaxAmount; }
public void Clear(bool recycle = false) { nameText.text = string.Empty; priceText.text = string.Empty; amountText.text = string.Empty; merchandiseInfo = null; if (recycle) { itemAgentSon.Empty(); ObjectPool.Put(gameObject); } }
/// <summary> /// 从玩家那里购入道具 /// </summary> /// <param name="info">道具信息</param> /// <param name="force">强制购入</param> public void PurchaseItem(ItemInfo info, bool force = false) { if (MShop == null || info == null || !info.item) { Debug.Log(info); return; } if (!info.item.SellAble) { MessageManager.Instance.New("这种物品不可出售"); return; } if (info.gemstone1 != null || info.gemstone2 != null) { MessageManager.Instance.New("镶嵌宝石的物品不可出售"); return; } MerchandiseInfo find = MShop.Acquisitions.Find(x => x.Item == info.item); if (find != null && !force)//采购品列表里有该道具,说明对该道具有特殊购价 { PurchaseItem(find); return; } if (info.Amount == 1) { ConfirmManager.Instance.New(string.Format("确定出售1个 [{0}] 吗?", info.item.name), delegate { if (OnPurchase(info)) { MessageManager.Instance.New(string.Format("出售了1个 [{1}]", (int)AmountManager.Instance.Amount, info.item.name)); } }); } else { AmountManager.Instance.SetPosition(ZetanUtility.ScreenCenter, Vector2.zero); AmountManager.Instance.New(delegate { ConfirmManager.Instance.New(string.Format("确定出售{0}个 [{1}] 吗?", (int)AmountManager.Instance.Amount, info.item.name), delegate { if (OnPurchase(info, (int)AmountManager.Instance.Amount)) { MessageManager.Instance.New(string.Format("出售了{0}个 [{1}]", (int)AmountManager.Instance.Amount, info.item.name)); } }); }, BackpackManager.Instance.GetItemAmount(info.item)); } }
bool OnPurchase(MerchandiseInfo info, int amount = 1) { if (MShop == null || info == null || !info.IsValid || amount < 1) { return(false); } if (!MShop.Acquisitions.Contains(info)) { return(false); } var itemAgents = BackpackManager.Instance.GetItemAgentsByItem(info.Item).ToArray(); if (itemAgents.Length < 1) { MessageManager.Instance.New(GameManager.BackpackName + "中没有这种物品"); return(false); } if (info.EmptyAble && amount > info.LeftAmount) { if (!info.IsEmpty) { MessageManager.Instance.New("不收够这么多的这种物品"); } else { MessageManager.Instance.New("这种物品暂无收购需求"); } return(false); } ItemBase item = itemAgents[0].MItemInfo.item; if (!BackpackManager.Instance.TryLoseItem_Boolean(item, amount)) { return(false); } BackpackManager.Instance.GetMoney(amount * info.PurchasePrice); BackpackManager.Instance.LoseItem(item, amount); if (info.EmptyAble) { info.LeftAmount -= amount; } MerchandiseAgent ma = merchandiseAgents.Find(x => x.merchandiseInfo == info); if (ma) { ma.UpdateInfo(); } return(true); }
/// <summary> /// 从玩家那里购入道具 /// </summary> /// <param name="info">商品信息</param> public void PurchaseItem(MerchandiseInfo info) { if (MShop == null || info == null || !info.IsValid) { return; } if (!MShop.Acquisitions.Contains(info)) { return; } int backpackAmount = BackpackManager.Instance.GetItemAmount(info.Item); int maxAmount = info.EmptyAble ? (info.LeftAmount > backpackAmount ? backpackAmount : info.LeftAmount) : backpackAmount; if (info.LeftAmount == 1 && info.EmptyAble) { ConfirmManager.Instance.New(string.Format("确定出售1个 [{0}] 吗?", info.Item.name), delegate { if (OnPurchase(info, 1)) { MessageManager.Instance.New(string.Format("出售了1个 [{1}]", 1, info.Item.name)); } }); } else if (info.IsEmpty) { ConfirmManager.Instance.New("这种物品暂无特价收购需求,确定按原价出售吗?", delegate { PurchaseItem(BackpackManager.Instance.GetItemInfo(info.Item), true); }); } else { AmountManager.Instance.SetPosition(ZetanUtility.ScreenCenter, Vector2.zero); AmountManager.Instance.New(delegate { ConfirmManager.Instance.New(string.Format("确定出售{0}个 [{1}] 吗?", (int)AmountManager.Instance.Amount, info.Item.name), delegate { if (OnPurchase(info, (int)AmountManager.Instance.Amount)) { MessageManager.Instance.New(string.Format("出售了{0}个 [{1}]", (int)AmountManager.Instance.Amount, info.Item.name)); } }); }, maxAmount); } }
bool OnSell(MerchandiseInfo info, int amount = 1) { if (MShop == null || info == null || !info.IsValid || amount < 1) { return(false); } if (!MShop.Commodities.Contains(info)) { return(false); } if (!BackpackManager.Instance.TryGetItem_Boolean(info.Item, amount)) { return(false); } if (info.EmptyAble && amount > info.LeftAmount) { if (!info.IsEmpty) { MessageManager.Instance.New("该商品数量不足"); } else { MessageManager.Instance.New("该商品暂时缺货"); } return(false); } if (!BackpackManager.Instance.TryLoseMoney(amount * info.SellPrice)) { return(false); } BackpackManager.Instance.LoseMoney(amount * info.SellPrice); BackpackManager.Instance.GetItem(info.Item, amount); if (info.EmptyAble) { info.LeftAmount -= amount; } MerchandiseAgent ma = merchandiseAgents.Find(x => x.merchandiseInfo == info); if (ma) { ma.UpdateInfo(); } return(true); }
public void Init(MerchandiseInfo info, MerchandiseType type) { if (info == null || !info.Item) { return; } merchandiseInfo = info; merchandiseType = type; if (type == MerchandiseType.SellToPlayer) { itemAgentSon.Init(ItemAgentType.Selling); } else { itemAgentSon.Init(ItemAgentType.Purchasing); } itemAgentSon.SetItem(new ItemInfo(info.Item)); UpdateInfo(); }
/// <summary> /// 向玩家卖出道具 /// </summary> /// <param name="info">商品信息</param> public void SellItem(MerchandiseInfo info) { if (MShop == null || info == null || !info.IsValid) { return; } if (!MShop.Commodities.Contains(info)) { return; } long maxAmount = info.EmptyAble ? info.LeftAmount : info.SellPrice > 0 ? BackpackManager.Instance.Money / info.SellPrice : 999; if (info.LeftAmount == 1 && info.EmptyAble) { ConfirmManager.Instance.New(string.Format("确定购买1个 [{0}] 吗?", info.Item.name), delegate { if (OnSell(info)) { MessageManager.Instance.New(string.Format("购买了1个 [{0}]", info.Item.name)); } }); } else if (info.IsEmpty) { ConfirmManager.Instance.New("该商品暂时缺货"); } else { AmountManager.Instance.SetPosition(ZetanUtility.ScreenCenter, Vector2.zero); AmountManager.Instance.New(delegate { ConfirmManager.Instance.New(string.Format("确定购买{0}个 [{1}] 吗?", (int)AmountManager.Instance.Amount, info.Item.name), delegate { if (OnSell(info, (int)AmountManager.Instance.Amount)) { MessageManager.Instance.New(string.Format("购买了{0}个 [{1}]", (int)AmountManager.Instance.Amount, info.Item.name)); } }); }, maxAmount); } }