Пример #1
0
        public void Apply(NGoodsInfo goodsInfo, GoodsDefine goodsDefine)
        {
            GoodsLimit goodsLimit = null;

            if (GoodsLimits.TryGetValue(goodsInfo.Id, out goodsLimit))
            {
                if (goodsLimit.Count + goodsInfo.Count <= goodsDefine.Limit)
                {
                    goodsLimit.Add(goodsInfo.Count);
                }
            }
            else if (goodsInfo.Count <= goodsDefine.Limit)
            {
                TGoodsLimit limit = new TGoodsLimit()
                {
                    GoodsID    = goodsInfo.Id,
                    Purchased  = (short)goodsInfo.Count,
                    TCharacter = Owner.Data
                };
                Owner.Data.GoodsLimits.Add(limit);
                GoodsLimits.Add(goodsInfo.Id, new GoodsLimit(limit));
            }

            Owner.statusManager.AddStatus(StatusType.Goodslimit, StatusAction.Add, goodsInfo.Id, goodsInfo.Count);
        }
Пример #2
0
        public bool CanBuy(NGoodsInfo goodsInfo, GoodsDefine goodsDefine)
        {
            if (goodsDefine.LimitType == GoodsLimitType.None)
            {
                return(true);
            }
            GoodsLimit goodsLimit = null;

            if (GoodsLimits.TryGetValue(goodsInfo.Id, out goodsLimit))
            {
                if (goodsLimit.Count + goodsInfo.Count <= goodsDefine.Limit)
                {
                    return(true);
                }
            }
            if (goodsInfo.Count <= goodsDefine.Limit)
            {
                return(true);
            }
            return(false);
        }
Пример #3
0
        public Result BuyItem(NetConnection <NetSession> sender, NGoodsInfo nGoods)
        {
            GoodsDefine goodsDefine;

            if (!DataManager.Instance.Goods.TryGetValue(nGoods.Id, out goodsDefine))
            {
                return(Result.Failed);
            }
            if (!goodsDefine.isActive)
            {
                return(Result.Failed);
            }
            if (!sender.Session.Character.goodsLimitManager.CanBuy(nGoods, goodsDefine))
            {
                return(Result.Failed);
            }
            if (!HasCurrency(sender.Session.Character, goodsDefine, nGoods.Count))
            {
                return(Result.Failed);
            }
            ApplyCurrency(sender.Session.Character, goodsDefine, nGoods.Count);

            switch (goodsDefine.Type)
            {
            case GoodsDefine.GoodsType.Item:
                sender.Session.Character.itemManager.AddItem(goodsDefine.ItemID, goodsDefine.Count * nGoods.Count);
                break;

            case GoodsDefine.GoodsType.Equip:
                sender.Session.Character.equipManager.AddEquip(goodsDefine.ItemID, goodsDefine.Count * nGoods.Count);
                break;

            default: break;
            }
            sender.Session.Character.goodsLimitManager.Apply(nGoods, goodsDefine);
            return(Result.Success);
        }