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