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);
                    }
                }
            }
    }
Exemple #2
0
 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);
     }
 }
Exemple #4
0
    /// <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));
        }
    }
Exemple #5
0
    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);
    }
Exemple #6
0
    /// <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);
        }
    }
Exemple #7
0
    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();
 }
Exemple #9
0
    /// <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);
        }
    }