/// <summary> /// 将IDataReader的当前记录读取到CrossladderMatchEntity 对象 /// </summary> /// <param name="reader"></param> /// <returns></returns> public CrossladderMatchEntity LoadSingleRow(IDataReader reader) { var obj = new CrossladderMatchEntity(); obj.Idx = (System.Guid)reader["Idx"]; obj.DomainId = (System.Int32)reader["DomainId"]; obj.LadderId = (System.Guid)reader["LadderId"]; obj.HomeId = (System.Guid)reader["HomeId"]; obj.AwayId = (System.Guid)reader["AwayId"]; obj.HomeName = (System.String)reader["HomeName"]; obj.AwayName = (System.String)reader["AwayName"]; obj.HomeLogo = (System.String)reader["HomeLogo"]; obj.AwayLogo = (System.String)reader["AwayLogo"]; obj.HomeSiteId = (System.String)reader["HomeSiteId"]; obj.AwaySiteId = (System.String)reader["AwaySiteId"]; obj.HomeLadderScore = (System.Int32)reader["HomeLadderScore"]; obj.AwayLadderScore = (System.Int32)reader["AwayLadderScore"]; obj.HomeScore = (System.Int32)reader["HomeScore"]; obj.AwayScore = (System.Int32)reader["AwayScore"]; obj.HomeIsBot = (System.Boolean)reader["HomeIsBot"]; obj.AwayIsBot = (System.Boolean)reader["AwayIsBot"]; obj.GroupIndex = (System.Int32)reader["GroupIndex"]; obj.PrizeHomeScore = (System.Int32)reader["PrizeHomeScore"]; obj.PrizeAwayScore = (System.Int32)reader["PrizeAwayScore"]; obj.Status = (System.Int32)reader["Status"]; obj.RowTime = (System.DateTime)reader["RowTime"]; obj.HomeCoin = (System.Int32)reader["HomeCoin"]; obj.HomeExp = (System.Int32)reader["HomeExp"]; obj.AwayCoin = (System.Int32)reader["AwayCoin"]; obj.AwayExp = (System.Int32)reader["AwayExp"]; return(obj); }
/// <summary> /// 带事务的Update /// </summary> /// <param name="entity"></param> /// <param name="trans">The trans.</param> /// <returns></returns> /// <remarks>2016-08-15 11:23:04</remarks> public bool Update(CrossladderMatchEntity entity, DbTransaction trans) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_CrossladderMatch_Update"); database.AddInParameter(commandWrapper, "@Idx", DbType.Guid, entity.Idx); database.AddInParameter(commandWrapper, "@DomainId", DbType.Int32, entity.DomainId); database.AddInParameter(commandWrapper, "@LadderId", DbType.Guid, entity.LadderId); database.AddInParameter(commandWrapper, "@HomeId", DbType.Guid, entity.HomeId); database.AddInParameter(commandWrapper, "@AwayId", DbType.Guid, entity.AwayId); database.AddInParameter(commandWrapper, "@HomeName", DbType.String, entity.HomeName); database.AddInParameter(commandWrapper, "@AwayName", DbType.String, entity.AwayName); database.AddInParameter(commandWrapper, "@HomeLogo", DbType.AnsiString, entity.HomeLogo); database.AddInParameter(commandWrapper, "@AwayLogo", DbType.AnsiString, entity.AwayLogo); database.AddInParameter(commandWrapper, "@HomeSiteId", DbType.AnsiString, entity.HomeSiteId); database.AddInParameter(commandWrapper, "@AwaySiteId", DbType.AnsiString, entity.AwaySiteId); database.AddInParameter(commandWrapper, "@HomeLadderScore", DbType.Int32, entity.HomeLadderScore); database.AddInParameter(commandWrapper, "@AwayLadderScore", DbType.Int32, entity.AwayLadderScore); database.AddInParameter(commandWrapper, "@HomeScore", DbType.Int32, entity.HomeScore); database.AddInParameter(commandWrapper, "@AwayScore", DbType.Int32, entity.AwayScore); database.AddInParameter(commandWrapper, "@HomeIsBot", DbType.Boolean, entity.HomeIsBot); database.AddInParameter(commandWrapper, "@AwayIsBot", DbType.Boolean, entity.AwayIsBot); database.AddInParameter(commandWrapper, "@GroupIndex", DbType.Int32, entity.GroupIndex); database.AddInParameter(commandWrapper, "@PrizeHomeScore", DbType.Int32, entity.PrizeHomeScore); database.AddInParameter(commandWrapper, "@PrizeAwayScore", DbType.Int32, entity.PrizeAwayScore); database.AddInParameter(commandWrapper, "@Status", DbType.Int32, entity.Status); database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, entity.RowTime); database.AddInParameter(commandWrapper, "@HomeCoin", DbType.Int32, entity.HomeCoin); database.AddInParameter(commandWrapper, "@HomeExp", DbType.Int32, entity.HomeExp); database.AddInParameter(commandWrapper, "@AwayCoin", DbType.Int32, entity.AwayCoin); database.AddInParameter(commandWrapper, "@AwayExp", DbType.Int32, entity.AwayExp); int results = 0; if (trans != null) { results = database.ExecuteNonQuery(commandWrapper, trans); } else { results = database.ExecuteNonQuery(commandWrapper); } entity.Idx = (System.Guid)database.GetParameterValue(commandWrapper, "@Idx"); return(Convert.ToBoolean(results)); }
/// <summary> /// Builds the match info. /// </summary> /// <param name="ladderId">The ladder id.</param> /// <param name="group">The group.</param> /// <param name="home">The home.</param> /// <param name="away">The away.</param> /// <param name="fightDic">The fight dic.</param> private void BuildMatchInfo(Guid ladderId, int group, CrossladderManagerEntity home, CrossladderManagerEntity away, Dictionary <Guid, CrossladderMatchEntity> fightDic) { try { //筛选条件,当两个玩家分差超过阀值,将他们扔到排队池里继续等待 //int tmpScore = home.Score - away.Score; //if (tmpScore <= _arenaLowScore || tmpScore >= _arenaHighScore) //{ // if (!home.IsBot) // CrossLadderCore.Instance.PushFightToCompetitor(home.Clone()); // if (!away.IsBot) // CrossLadderCore.Instance.PushFightToCompetitor(away.Clone()); // return; //} var matchId = ShareUtil.GenerateComb(); var ladderMatch = new CrossladderMatchEntity(home, away, matchId, ladderId, group + 1); ladderMatch.HomeName = ShareUtil.GetCrossManagerNameByZoneId(home.SiteId, home.Name); ladderMatch.AwayName = ShareUtil.GetCrossManagerNameByZoneId(away.SiteId, away.Name); ladderMatch.DomainId = _domainId; fightDic.Add(ladderMatch.Idx, ladderMatch); MemcachedFactory.LadderMatchClient.Set(ladderMatch.Idx, ladderMatch); //更新经理-比赛关联字典 if (!home.IsBot) { var homeHeart = new CrossLadderHeartEntity(matchId, away.ManagerId, away.SiteId, away.IsBot, away.Kpi); ManagerFightDic[home.ManagerId] = homeHeart; MemcachedFactory.LadderHeartClient.Set(home.ManagerId, homeHeart); } if (!away.IsBot) { var awayHeart = new CrossLadderHeartEntity(matchId, home.ManagerId, home.SiteId, home.IsBot, away.Kpi); ManagerFightDic[away.ManagerId] = awayHeart; MemcachedFactory.LadderHeartClient.Set(away.ManagerId, awayHeart); } } catch (Exception ex) { SystemlogMgr.Error("CrossLadderThread-BuildMatchInfo", ex.Message, ex.StackTrace); } }
/// <summary> /// GetById /// </summary> /// <param name="idx">idx</param> /// <returns>CrossladderMatchEntity</returns> /// <remarks>2016-08-15 11:23:04</remarks> public CrossladderMatchEntity GetById(System.Guid idx) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("P_CrossladderMatch_GetById"); database.AddInParameter(commandWrapper, "@Idx", DbType.Guid, idx); CrossladderMatchEntity obj = null; using (IDataReader reader = database.ExecuteReader(commandWrapper)) { if (reader.Read()) { obj = LoadSingleRow(reader); } } return(obj); }
/// <summary> /// /// </summary> /// <param name="matchData"></param> /// <param name="laddermatch"></param> void Fight(BaseMatchData matchData, CrossladderMatchEntity laddermatch) { if (laddermatch.HomeIsBot && laddermatch.AwayIsBot) { laddermatch.HomeScore = 0; laddermatch.AwayScore = 0; laddermatch.Status = (int)EnumLadderStatus.End; //保存比赛 CrossladderMatchMgr.Insert(laddermatch); return; } else { try { MatchCore.CreateMatch(matchData); if (matchData.ErrorCode == (int)MessageCode.Success) { laddermatch.HomeScore = matchData.Home.Score; laddermatch.AwayScore = matchData.Away.Score; laddermatch.Status = (int)EnumLadderStatus.End; CalPrizePoint(laddermatch); int returnCode = -1; //保存比赛 CrossladderMatchMgr.SaveMatch(laddermatch.DomainId, laddermatch.LadderId, laddermatch.HomeId, laddermatch.AwayId, laddermatch.HomeName, laddermatch.AwayName, laddermatch.HomeLogo, laddermatch.AwayLogo, laddermatch.HomeSiteId, laddermatch.AwaySiteId, laddermatch.HomeLadderScore, laddermatch.AwayLadderScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeCoin, laddermatch.AwayCoin, laddermatch.HomeExp, laddermatch.AwayExp, laddermatch.HomeIsBot, laddermatch.AwayIsBot, laddermatch.GroupIndex, laddermatch.PrizeHomeScore, laddermatch.PrizeAwayScore, laddermatch.RowTime, laddermatch.Idx, ref returnCode); if (!laddermatch.HomeIsBot) { WebServerHandler.AddManagerData(laddermatch.HomeId, laddermatch.HomeExp, laddermatch.HomeCoin, 0, laddermatch.HomeSiteId); MatchCore.SaveMatchStat(laddermatch.HomeId, EnumMatchType.CrossLadder, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeScore, laddermatch.HomeSiteId); if (laddermatch.HomeIsHook) { CrossLadderManager.Instance.UpdateHookScore(laddermatch.HomeSiteId, laddermatch.HomeId, laddermatch.PrizeHomeScore, laddermatch.HomeScore > laddermatch.AwayScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeName, laddermatch.AwayName, laddermatch.HomeCoin); } } if (!laddermatch.AwayIsBot) { WebServerHandler.AddManagerData(laddermatch.AwayId, laddermatch.AwayExp, laddermatch.AwayCoin, 0, laddermatch.AwaySiteId); MatchCore.SaveMatchStat(laddermatch.AwayId, EnumMatchType.CrossLadder, laddermatch.AwayScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.AwaySiteId); if (laddermatch.AwayIsHook) { CrossLadderManager.Instance.UpdateHookScore(laddermatch.AwaySiteId, laddermatch.AwayId, laddermatch.PrizeAwayScore, laddermatch.AwayScore < laddermatch.HomeScore, laddermatch.HomeScore, laddermatch.AwayScore, laddermatch.HomeName, laddermatch.AwayName, laddermatch.AwayCoin); } } } MemcachedFactory.LadderMatchClient.Set(laddermatch.Idx, laddermatch); } catch (Exception ex) { SystemlogMgr.Error("CrossLadderProcess-Fight", ex); } } matchData = null; laddermatch = null; }
/// <summary> /// 计算主队奖励积分,客队为主队奖励积分*-1. /// 获胜得分计算公式为x=min(21,max(1,11-int((A-B)/10))) /// 如果为平局,则计算公式为:x=min(21,max(1,11-int((A-B)/10)))-11; /// </summary> /// <param name="laddermatch">The laddermatch.</param> /// <returns></returns> int CalPrizePoint(CrossladderMatchEntity laddermatch) { var homeValid = CalValidPoint(laddermatch.HomeWinPercent, laddermatch.HomeLadderScore); var awayValid = CalValidPoint(laddermatch.AwayWinPercent, laddermatch.AwayLadderScore); var prizePoint = 0; //以主队为参照的奖励积分,客队*-1 var validDiff = 0; if (laddermatch.HomeScore > laddermatch.AwayScore) { validDiff = homeValid - awayValid; prizePoint = Math.Min(20, Math.Max(2, 11 - validDiff / 20)); laddermatch.HomeCoin = winCoin; laddermatch.HomeExp = winExp; laddermatch.AwayCoin = loseCoin; laddermatch.AwayExp = loseExp; } else if (laddermatch.HomeScore == laddermatch.AwayScore) { validDiff = homeValid - awayValid; prizePoint = Math.Min(20, Math.Max(2, 11 - validDiff / 20)) - 11; laddermatch.HomeCoin = drawCoin; laddermatch.HomeExp = drawExp; laddermatch.AwayCoin = drawCoin; laddermatch.AwayExp = drawExp; } else { validDiff = awayValid - homeValid; prizePoint = -1 * (Math.Min(20, Math.Max(2, 11 - validDiff / 20))); laddermatch.HomeCoin = loseCoin; laddermatch.HomeExp = loseExp; laddermatch.AwayCoin = winCoin; laddermatch.AwayExp = winExp; } if (prizePoint > 0) { //var buff = BuffRules.GetSummedBuff(laddermatch.HomeId, BuffCodeEnum.ArenaLadderScore); laddermatch.PrizeHomeScore = (int)(prizePoint * (1 + 0));// buff.PerBuffValue)); if (laddermatch.AwayLadderScore > _ladderProctiveScore) { laddermatch.PrizeAwayScore = -1 * prizePoint; } } else if (prizePoint < 0) { //var buff = BuffRules.GetSummedBuff(laddermatch.AwayId, BuffCodeEnum.ArenaLadderScore); laddermatch.PrizeAwayScore = -1 * (int)(prizePoint * (1 + 0));// buff.PerBuffValue)); if (laddermatch.HomeLadderScore > _ladderProctiveScore) { laddermatch.PrizeHomeScore = prizePoint; } } laddermatch.PrizeHomeScore = OnlineCore.Instance.CalIndulgeLadderScore(laddermatch.HomeId, laddermatch.PrizeHomeScore, laddermatch.HomeSiteId); laddermatch.PrizeAwayScore = OnlineCore.Instance.CalIndulgeLadderScore(laddermatch.AwayId, laddermatch.PrizeAwayScore, laddermatch.AwaySiteId); //SysteminfologMgr.Insert("CrossladderProcess-CalPrizePoint" // , string.Format("homeScore[{0}]-awayScore[{1}]==homeValid[{2}]-awayValid[{3}]:prizePoint[{4}]", laddermatch.HomeScore, laddermatch.AwayScore, homeValid, awayValid, prizePoint)); return(prizePoint); }
public static bool Update(CrossladderMatchEntity crossladderMatchEntity, DbTransaction trans = null, string zoneId = "") { var provider = new CrossladderMatchProvider(zoneId); return(provider.Update(crossladderMatchEntity, trans)); }
/// <summary> /// Update /// </summary> /// <param name="entity"></param> /// <returns></returns> /// <remarks>2016-08-15 11:23:04</remarks> public bool Update(CrossladderMatchEntity 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:23:04</remarks> public bool Insert(CrossladderMatchEntity entity) { return(Insert(entity, null)); }