Example #1
0
        /// <summary>
        /// 当商城在线购买
        /// 出售者在线
        /// </summary>
        /// <param name="whoBuy"></param>
        /// <param name="item"></param>
        public void OnMarketBuy(int whoBuy, int whoSale, GoodsData saleGoods)
        {
            if (saleGoods == null)
            {
                return;
            }

            int pay = Math.Max(saleGoods.SaleYuanBao, 0);
            Dictionary <int, int> tmpPriceDict = GoodsPriceDict;
            int price = (tmpPriceDict != null && tmpPriceDict.ContainsKey(saleGoods.GoodsID))
                ? (tmpPriceDict[saleGoods.GoodsID] * saleGoods.GCount) : 0;

            DateTime         now   = TimeUtil.NowDateTime();
            TradeBlackObject buyer = LoadTradeBlackObject(whoBuy);

            if (buyer != null)
            {
                lock (buyer)
                {
                    TradeBlackHourItem item = GetBlackHourItem(buyer, now);
                    item.MarketTimes++;
                    item.MarketInPrice  += price;
                    item.MarketOutPrice += pay;
                    if (!item.TradeRoles.Contains(whoSale))
                    {
                        item.TradeRoles.Add(whoSale);
                        item.TradeDistinctRoleCount++;
                    }
                    TradeBlackHourItem itemCopy = item.SimpleClone();
                    SaveTradeBlackObject(itemCopy);
                }
            }

            TradeBlackObject saler = LoadTradeBlackObject(whoSale);

            if (saler != null)
            {
                lock (saler)
                {
                    TradeBlackHourItem item = GetBlackHourItem(saler, now);
                    item.MarketTimes++;
                    item.MarketOutPrice += price;
                    item.MarketInPrice  += pay;
                    if (!item.TradeRoles.Contains(whoBuy))
                    {
                        item.TradeRoles.Add(whoBuy);
                        item.TradeDistinctRoleCount++;
                    }
                    TradeBlackHourItem itemCopy = item.SimpleClone();
                    SaveTradeBlackObject(itemCopy);
                }
            }

            CheckBanTrade(whoBuy);
            CheckBanTrade(whoSale);
        }
 private void SaveTradeBlackObject(TradeBlackHourItem obj)
 {
     if (obj != null)
     {
         if (!Global.sendToDB <bool, TradeBlackHourItem>(14008, obj, 0))
         {
             LogManager.WriteLog(LogTypes.Error, string.Format("TradeBlackManager.SaveTradeBlackObject failed!, roleid={0}", obj.RoleId), null, true);
         }
     }
 }
Example #3
0
        private void SaveTradeBlackObject(TradeBlackHourItem obj)
        {
            if (obj == null)
            {
                return;
            }

            if (!Global.sendToDB <bool, TradeBlackHourItem>((int)TCPGameServerCmds.CMD_DB_SAVE_TRADE_BLACK_HOUR_ITEM, obj, GameManager.LocalServerId))
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("TradeBlackManager.SaveTradeBlackObject failed!, roleid={0}", obj.RoleId));
            }
        }
        private TradeBlackHourItem GetBlackHourItem(TradeBlackObject obj, DateTime date)
        {
            TradeBlackHourItem item = obj.HourItems[date.Hour];

            if (item == null || item.Day != date.ToString("yyyy-MM-dd"))
            {
                item                     = new TradeBlackHourItem();
                item.RoleId              = obj.RoleId;
                item.Day                 = date.ToString("yyyy-MM-dd");
                item.Hour                = date.Hour;
                item.TradeRoles          = new HashSet <int>();
                obj.HourItems[date.Hour] = item;
            }
            return(item);
        }
Example #5
0
        public int TradeDistinctRoleCount;                          // 交易的不同玩家的数量(包括交易行)

        /// <summary>
        /// 拷贝一份供通知存db使用
        /// </summary>
        /// <returns></returns>
        public TradeBlackHourItem SimpleClone()
        {
            TradeBlackHourItem item = new TradeBlackHourItem();

            item.RoleId                 = this.RoleId;
            item.Day                    = this.Day;
            item.Hour                   = this.Hour;
            item.MarketTimes            = this.MarketTimes;
            item.MarketInPrice          = this.MarketInPrice;
            item.MarketOutPrice         = this.MarketOutPrice;
            item.TradeTimes             = this.TradeTimes;
            item.TradeInPrice           = this.TradeInPrice;
            item.TradeOutPrice          = this.TradeOutPrice;
            item.TradeDistinctRoleCount = this.TradeRoles != null?this.TradeRoles.Count() : 0;

            return(item);
        }
Example #6
0
        /// <summary>
        /// 当完成交易
        /// </summary>
        /// <param name="ed"></param>
        public void OnExchange(int roleid1, int roleid2, List <GoodsData> gdList1, List <GoodsData> gdList2, int zuanshi1, int zuanshi2)
        {
            long price1 = zuanshi1 > 0 ? zuanshi1 : 0; // roleid1 的支出
            long price2 = zuanshi2 > 0 ? zuanshi2 : 0; // roleid2 的支出

            Func <List <GoodsData>, Dictionary <int, int>, long> _GetGoodsPrice = (gdList, priceDict) =>
            {
                long totalPrice = 0;
                if (gdList != null && priceDict != null)
                {
                    gdList.ForEach(_g => totalPrice += priceDict.ContainsKey(_g.GoodsID) ? priceDict[_g.GoodsID] * _g.GCount : 0);
                }
                return(totalPrice);
            };

            price1 += _GetGoodsPrice(gdList1, this.GoodsPriceDict);
            price2 += _GetGoodsPrice(gdList2, this.GoodsPriceDict);

            DateTime         now  = TimeUtil.NowDateTime();
            TradeBlackObject obj1 = LoadTradeBlackObject(roleid1);

            if (obj1 != null)
            {
                lock (obj1)
                {
                    TradeBlackHourItem item = GetBlackHourItem(obj1, now);
                    item.TradeTimes++;
                    item.TradeOutPrice += price1;
                    item.TradeInPrice  += price2;
                    if (!item.TradeRoles.Contains(roleid2))
                    {
                        item.TradeRoles.Add(roleid2);
                        item.TradeDistinctRoleCount++;
                    }

                    TradeBlackHourItem itemCopy = item.SimpleClone();
                    SaveTradeBlackObject(itemCopy);
                }
            }

            TradeBlackObject obj2 = LoadTradeBlackObject(roleid2);

            if (obj2 != null)
            {
                lock (obj2)
                {
                    TradeBlackHourItem item = GetBlackHourItem(obj2, now);
                    item.TradeTimes++;
                    item.TradeInPrice  += price1;
                    item.TradeOutPrice += price2;
                    if (!item.TradeRoles.Contains(roleid1))
                    {
                        item.TradeRoles.Add(roleid1);
                        item.TradeDistinctRoleCount++;
                    }
                    TradeBlackHourItem itemCopy = item.SimpleClone();
                    SaveTradeBlackObject(itemCopy);
                }
            }

            CheckBanTrade(roleid1);
            CheckBanTrade(roleid2);
        }
        public void OnExchange(int roleid1, int roleid2, List <GoodsData> gdList1, List <GoodsData> gdList2, int zuanshi1, int zuanshi2)
        {
            long price  = (long)((zuanshi1 > 0) ? zuanshi1 : 0);
            long price2 = (long)((zuanshi2 > 0) ? zuanshi2 : 0);
            Func <List <GoodsData>, Dictionary <int, int>, long> _GetGoodsPrice = delegate(List <GoodsData> gdList, Dictionary <int, int> priceDict)
            {
                long totalPrice = 0L;
                if (gdList != null && priceDict != null)
                {
                    gdList.ForEach(delegate(GoodsData _g)
                    {
                        totalPrice += (long)(priceDict.ContainsKey(_g.GoodsID) ? (priceDict[_g.GoodsID] * _g.GCount) : 0);
                    });
                }
                return(totalPrice);
            };

            price  += _GetGoodsPrice(gdList1, this.GoodsPriceDict);
            price2 += _GetGoodsPrice(gdList2, this.GoodsPriceDict);
            DateTime         now = TimeUtil.NowDateTime();
            TradeBlackObject obj = this.LoadTradeBlackObject(roleid1, true);

            if (obj != null)
            {
                lock (obj)
                {
                    TradeBlackHourItem item = this.GetBlackHourItem(obj, now);
                    item.TradeTimes++;
                    item.TradeOutPrice += price;
                    item.TradeInPrice  += price2;
                    if (!item.TradeRoles.Contains(roleid2))
                    {
                        item.TradeRoles.Add(roleid2);
                        item.TradeDistinctRoleCount++;
                    }
                    TradeBlackHourItem itemCopy = item.SimpleClone();
                    this.SaveTradeBlackObject(itemCopy);
                }
            }
            TradeBlackObject obj2 = this.LoadTradeBlackObject(roleid2, true);

            if (obj2 != null)
            {
                lock (obj2)
                {
                    TradeBlackHourItem item = this.GetBlackHourItem(obj2, now);
                    item.TradeTimes++;
                    item.TradeInPrice  += price;
                    item.TradeOutPrice += price2;
                    if (!item.TradeRoles.Contains(roleid1))
                    {
                        item.TradeRoles.Add(roleid1);
                        item.TradeDistinctRoleCount++;
                    }
                    TradeBlackHourItem itemCopy = item.SimpleClone();
                    this.SaveTradeBlackObject(itemCopy);
                }
            }
            this.CheckBanTrade(roleid1);
            this.CheckBanTrade(roleid2);
        }