static void SendRankPrize(CrosscrowdInfoEntity crowdInfo) { if (crowdInfo.IsSendRankPrize) { return; } try { var maxKiller = CrosscrowdInfoMgr.GetMaxKiller(crowdInfo.Idx); var list = CrosscrowdInfoMgr.GetForSendRankPrize(crowdInfo.Idx); bool isSend = true; if (list != null) { bool isMaxKiller = false; foreach (var entity in list) { isMaxKiller = false; if (doSendRankPrize(crowdInfo, entity, -1, -1) != MessageCode.Success) { SystemlogMgr.Error("跨服群雄发奖", "发奖失败,idx=" + entity.Idx); isSend = false; } } } crowdInfo.IsSendRankPrize = isSend; } catch (Exception ex) { SystemlogMgr.Error("CrossCrowd-SendRankPrize", ex); } }
/// <summary> /// 带事务的Update /// </summary> /// <param name="entity"></param> /// <param name="trans">The trans.</param> /// <returns></returns> /// <remarks>2016-08-15 11:12:28</remarks> public bool Update(CrosscrowdInfoEntity entity, DbTransaction trans) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_CrosscrowdInfo_Update"); database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, entity.Idx); database.AddInParameter(commandWrapper, "@StartTime", DbType.DateTime, entity.StartTime); database.AddInParameter(commandWrapper, "@EndTime", DbType.DateTime, entity.EndTime); database.AddInParameter(commandWrapper, "@DomainId", DbType.Int32, entity.DomainId); database.AddInParameter(commandWrapper, "@PlayerCount", DbType.Int32, entity.PlayerCount); database.AddInParameter(commandWrapper, "@PairCount", DbType.Int32, entity.PairCount); database.AddInParameter(commandWrapper, "@PrizePoint", DbType.Int32, entity.PrizePoint); database.AddInParameter(commandWrapper, "@IsSendKillPrize", DbType.Boolean, entity.IsSendKillPrize); database.AddInParameter(commandWrapper, "@IsSendRankPrize", DbType.Boolean, entity.IsSendRankPrize); database.AddInParameter(commandWrapper, "@Status", DbType.Int32, entity.Status); database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, entity.RowTime); database.AddInParameter(commandWrapper, "@PrizeLegendCount", DbType.Int32, entity.PrizeLegendCount); int results = 0; if (trans != null) { results = database.ExecuteNonQuery(commandWrapper, trans); } else { results = database.ExecuteNonQuery(commandWrapper); } entity.Idx = (System.Int32)database.GetParameterValue(commandWrapper, "@Idx"); return(Convert.ToBoolean(results)); }
static MessageCode doSendRankPrize(CrosscrowdInfoEntity crowd, CrosscrowdSendRankPrizeEntity entity, int maxPoint, int maxLegendCount) { try { if (entity.Status != 0) { return(MessageCode.Success); } if (entity.Score <= 0) { return(MessageCode.Success); } string prizeItemString = ""; var mail = new MailBuilder(entity.ManagerId, EnumMailType.CrossCrowdRank, entity.Rank); MessageCode mess = BuildPrizeMail(crowd, mail, EnumCrowdPrizeCategory.CrossRank, entity.Rank, maxPoint, maxLegendCount, ref prizeItemString); if (mess != MessageCode.Success) { return(mess); } entity.Status = 1; CrosscrowdInfoMgr.SaveRankPrizeStatus(entity.Idx, entity.Status); if (!mail.Save(entity.SiteId)) { return(MessageCode.NbParameterError); } SavePrizeRecord(entity.ManagerId, EnumCrowdPrizeCategory.CrossRank, "history:" + entity.Idx, prizeItemString, entity.SiteId); } catch (Exception ex) { SystemlogMgr.Error("CrossCrowd-doSendRankPrize", ex); return(MessageCode.NbParameterError); } return(MessageCode.Success); }
private MessageCode Start(DateTime startTime, DateTime endTime) { var crowd = CrosscrowdInfoMgr.GetCurrent(_domainId); DateTime curTime = DateTime.Now; if (crowd != null && crowd.EndTime > curTime) { return(MessageCode.CrowdNotEnding); } if (startTime >= endTime || endTime < curTime) { return(MessageCode.NbParameterError); } crowd = new CrosscrowdInfoEntity(); crowd.DomainId = _domainId; crowd.StartTime = startTime; crowd.EndTime = endTime; crowd.RowTime = DateTime.Now; if (CrosscrowdInfoMgr.Insert(crowd)) { CrowdManagerDic = new ConcurrentDictionary <Guid, int>(); _crowdInfo = crowd; _status = EnumLadderStatus.Running; //CrossChatHelper.SendBannerCrowdOpen(_domainId); RobotCore.Instance.RunHook(EnumMatchType.CrossCrowd, endTime); return(MessageCode.Success); } else { return(MessageCode.NbUpdateFail); } }
static void doSendKillPrize(CrosscrowdInfoEntity crowd, Guid matchId, Guid managerId, string awayName, string siteId, int maxPoint, int maxLegendCount) { var mail = new MailBuilder(managerId, EnumMailType.CrossCrowdKill, awayName); string prizeItemString = ""; BuildPrizeMail(crowd, mail, EnumCrowdPrizeCategory.CrossKill, 1, maxPoint, maxLegendCount, ref prizeItemString); if (string.IsNullOrEmpty(prizeItemString)) { return; } mail.Save(siteId); SavePrizeRecord(managerId, EnumCrowdPrizeCategory.CrossKill, matchId.ToString(), prizeItemString, siteId); }
private void Initialize() { CrowdManagerDic = new ConcurrentDictionary <Guid, int>(); CompetitorDic = new ConcurrentDictionary <Guid, CrosscrowdManagerEntity>(); ManagerFightDic = new Dictionary <Guid, CrowdHeartEntity>(); _crowdResurrectionCd = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.CrowdResurrectionCd); _crowdCd = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.CrowdCd); _crowdMaxPoint = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.CrowdMaxPoint); _crowdMaxLegendCount = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.CrowdMaxLegendCount); _startTime = DateTime.Now; //初始化分组模板 InitGroupTemplate(); #region Init Condition dic string condition = CacheFactory.AppsettingCache.GetAppSetting(EnumAppsetting.CrowdCondition); _conditions = new List <ArenaCondition>(); if (!string.IsNullOrEmpty(condition)) { string[] tempConditions = condition.Split('|'); foreach (var s in tempConditions) { string[] temp = s.Split(','); _conditions.Add(new ArenaCondition(Convert.ToInt32(temp[0]), Convert.ToInt32(temp[1]))); } } #endregion _nbThreadPool = new NBThreadPool(5); _clearTimer = new Timer { Interval = ClearFightdicTime }; _clearTimer.Elapsed += new ElapsedEventHandler(ClearFightDic); _timer = new Timer { Interval = 5000 }; _timer.Elapsed += new ElapsedEventHandler(CheckStatusJob); var crowd = CrosscrowdInfoMgr.GetCurrent(_domainId); DateTime curTime = DateTime.Now; if (crowd != null && crowd.EndTime > curTime) { _crowdInfo = crowd; _status = EnumLadderStatus.Running; RobotCore.Instance.RunHook(EnumMatchType.CrossCrowd, _crowdInfo.EndTime); } else { _status = EnumLadderStatus.End; } }
/// <summary> /// 将IDataReader的当前记录读取到CrosscrowdInfoEntity 对象 /// </summary> /// <param name="reader"></param> /// <returns></returns> public CrosscrowdInfoEntity LoadSingleRow(IDataReader reader) { var obj = new CrosscrowdInfoEntity(); obj.Idx = (System.Int32)reader["Idx"]; obj.StartTime = (System.DateTime)reader["StartTime"]; obj.EndTime = (System.DateTime)reader["EndTime"]; obj.DomainId = (System.Int32)reader["DomainId"]; obj.PlayerCount = (System.Int32)reader["PlayerCount"]; obj.PairCount = (System.Int32)reader["PairCount"]; obj.PrizePoint = (System.Int32)reader["PrizePoint"]; obj.IsSendKillPrize = (System.Boolean)reader["IsSendKillPrize"]; obj.IsSendRankPrize = (System.Boolean)reader["IsSendRankPrize"]; obj.Status = (System.Int32)reader["Status"]; obj.RowTime = (System.DateTime)reader["RowTime"]; obj.PrizeLegendCount = (System.Int32)reader["PrizeLegendCount"]; return(obj); }
void CrowdEnd() { try { _crowdInfo.Status = (int)EnumLadderStatus.End; CrosscrowdInfoMgr.Update(_crowdInfo); _crowdInfo = null; CompetitorDic = new ConcurrentDictionary <Guid, CrosscrowdManagerEntity>(); //CrossChatHelper.SendBannerCrowdEnd(_domainId); } catch (Exception ex) { SystemlogMgr.Error("CrossCrowd-CrowdEnd", ex); } finally { _status = EnumLadderStatus.End; } }
/// <summary> /// GetById /// </summary> /// <param name="idx">idx</param> /// <returns>CrosscrowdInfoEntity</returns> /// <remarks>2016-08-15 11:12:27</remarks> public CrosscrowdInfoEntity GetById(System.Int32 idx) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("P_CrosscrowdInfo_GetById"); database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, idx); CrosscrowdInfoEntity obj = null; using (IDataReader reader = database.ExecuteReader(commandWrapper)) { if (reader.Read()) { obj = LoadSingleRow(reader); } } return(obj); }
static void SendMaxKillerPrize(CrosscrowdInfoEntity crowdInfo) { var entity = CrosscrowdMaxkillerrecordMgr.GetMaxKiller(crowdInfo.Idx); if (entity != null && entity.Status == 0) { try { var mail = new MailBuilder(entity.ManagerId, EnumMailType.CrowdMaxKiller); mail.AddAttachment(1, _maxKillerPrizeItem, false, 0); mail.Save(entity.SiteId); entity.Status = 1; entity.PrizeItems = _maxKillerPrizeItem.ToString(); CrosscrowdMaxkillerrecordMgr.Update(entity); } catch (Exception ex) { SystemlogMgr.Error("CrossCrowd-SendMaxKillerPrize", ex); } } }
static void SendKillPrize(CrosscrowdInfoEntity crowdInfo, int maxPoint, int maxLegendCount) { if (crowdInfo.IsSendKillPrize) { return; } try { var list = CrosscrowdInfoMgr.GetForSendKillPrize(crowdInfo.Idx); if (list != null) { foreach (var entity in list) { doSendKillPrize(crowdInfo, entity, maxPoint, maxLegendCount); } } crowdInfo.IsSendKillPrize = true; } catch (Exception ex) { SystemlogMgr.Error("CrossCrowd-SendKillPrize", ex); } }
static void doSendKillPrize(CrosscrowdInfoEntity crowd, CrosscrowdSendKillPrizeEntity entity, int maxPoint, int maxLegendCount) { try { if (entity.Status != 0) { return; } if (entity.HomeMorale <= 0) { doSendKillPrize(crowd, entity.Idx, entity.AwayId, entity.HomeName, entity.AwaySiteId, maxPoint, maxLegendCount); } if (entity.AwayMorale <= 0) { doSendKillPrize(crowd, entity.Idx, entity.HomeId, entity.AwayName, entity.HomeSiteId, maxPoint, maxLegendCount); } entity.Status = 1; CrosscrowdMatchMgr.SaveKillPrizeStatus(entity.Idx, entity.Status); } catch (Exception ex) { SystemlogMgr.Error("CrossCrowd-doSendKillPrize", ex); } }
/// <summary> /// Update /// </summary> /// <param name="entity"></param> /// <returns></returns> /// <remarks>2016-08-15 11:12:28</remarks> public bool Update(CrosscrowdInfoEntity entity) { return(Update(entity, null)); }
/// <summary> /// Insert /// </summary> /// <param name="entity"></param> /// <param name="trans">The trans.</param> /// <returns></returns> /// <remarks>2016-08-15 11:12:28</remarks> public bool Insert(CrosscrowdInfoEntity entity) { return(Insert(entity, null)); }
static MessageCode BuildPrizeMail(CrosscrowdInfoEntity crowd, MailBuilder mail, EnumCrowdPrizeCategory category, int categorySub, int maxPoint, int maxLegendCount, ref string prizeItemString) { try {//11 天梯奖励 12击杀奖励 var prizes = CacheFactory.CrowdCache.GetRankPrizes(category, categorySub); if (prizes != null) { //1 金币 //2 卡库 卡库id //3 物品 物品code //4 非彩色球魂 //5 点券 //7 绑定点卷 var itemCode = 0; foreach (var entity in prizes) { if (!RandomHelper.CheckPercentage(entity.Rate)) { continue; } switch (entity.Type) { case 1: mail.AddAttachment(EnumCurrencyType.Coin, entity.Count); prizeItemString += string.Format("1Coin:{0}|", entity.Count); break; case 2: itemCode = CacheFactory.LotteryCache.LotteryByLib(entity.SubType); if (itemCode > 0) { mail.AddAttachment(entity.Count, itemCode, entity.IsBinding, entity.Strength); prizeItemString += string.Format("2Item-C:{0},I:{1},B:{2},S:{3}|", entity.Count, itemCode, entity.IsBinding, entity.Strength); } break; case 3: if (maxLegendCount != -1 && entity.SubType == 310165) { if (crowd.PrizeLegendCount < maxLegendCount) { BuildPrizeMailItem(mail, entity, "3Item", ref prizeItemString); crowd.PrizeLegendCount++; } } else { BuildPrizeMailItem(mail, entity, "3Item", ref prizeItemString); } break; case 4: itemCode = CacheFactory.ItemsdicCache.RandomBallsoulOthercolorForWCH(); if (itemCode > 0) { mail.AddAttachment(entity.Count, itemCode, entity.IsBinding, entity.Strength); prizeItemString += string.Format("4Item-C:{0},I:{1},B:{2},S:{3}|", entity.Count, itemCode, entity.IsBinding, entity.Strength); } break; case 5: var totalPrizePoint = crowd.PrizePoint; if (category == EnumCrowdPrizeCategory.CrossRank) { int point = RandomHelper.GetInt32(entity.Min, entity.Max); if (point > 0) { mail.AddAttachment(EnumCurrencyType.Point, point); prizeItemString += string.Format("5Point:{0}|", point); } } else if (maxPoint == -1 || totalPrizePoint < maxPoint) { int point = RandomHelper.GetInt32(entity.Min, entity.Max); totalPrizePoint += point; if (totalPrizePoint > maxPoint) { point = maxPoint - crowd.PrizePoint; totalPrizePoint = maxPoint; } if (maxPoint != -1) { crowd.PrizePoint = totalPrizePoint; } if (point > 0) { mail.AddAttachment(EnumCurrencyType.Point, point); prizeItemString += string.Format("5Point:{0}|", point); } } break; case 6: int prizeCount = 0; if (RandomHelper.CheckPercentage(entity.Min)) { prizeCount = RandomHelper.GetInt32(21, 30); } else if (RandomHelper.CheckPercentage(entity.Max)) { prizeCount = RandomHelper.GetInt32(16, 20); } else { prizeCount = RandomHelper.GetInt32(6, 15); } //var prizeCount = RandomHelper.GetInt32(entity.Min, entity.Max); mail.AddAttachment(prizeCount, entity.SubType, entity.IsBinding, entity.Strength); prizeItemString += string.Format("3Item-C:{0},I:{1},B:{2},S:{3}|", prizeCount, entity.SubType, entity.IsBinding, entity.Strength); break; case 7: var totalBindPoint = crowd.PrizePoint; if (category == EnumCrowdPrizeCategory.CrossRank) { int point = RandomHelper.GetInt32(entity.Min, entity.Max); if (point > 0) { mail.AddAttachment(EnumCurrencyType.BindPoint, point); prizeItemString += string.Format("8Point:{0}|", point); } } else if (maxPoint == -1 || totalBindPoint < maxPoint) { int point = RandomHelper.GetInt32(entity.Min, entity.Max); totalBindPoint += point; if (totalBindPoint > maxPoint) { point = maxPoint - crowd.PrizePoint; totalBindPoint = maxPoint; } if (maxPoint != -1) { crowd.PrizePoint = totalBindPoint; } if (point > 0) { mail.AddAttachment(EnumCurrencyType.BindPoint, point); prizeItemString += string.Format("8Point:{0}|", point); } } break; } } if (category == EnumCrowdPrizeCategory.CrossKill) { if (isKillDouble) { mail.AddAttachment(1, 310154, false, 1); prizeItemString += string.Format("3Item-C:{0},I:{1},B:{2},S:{3}|", 1, 310154, false, 1); } } prizeItemString = prizeItemString.TrimEnd('|'); } } catch (Exception ex) { return(MessageCode.NbParameterError); } return(MessageCode.Success); }
public static bool Update(CrosscrowdInfoEntity crosscrowdInfoEntity, DbTransaction trans = null, string zoneId = "") { var provider = new CrosscrowdInfoProvider(zoneId); return(provider.Update(crosscrowdInfoEntity, trans)); }