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