Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
            }
        }
Exemple #4
0
        /// <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);
        }
Exemple #7
0
        public static bool Update(CrossladderMatchEntity crossladderMatchEntity, DbTransaction trans = null, string zoneId = "")
        {
            var provider = new CrossladderMatchProvider(zoneId);

            return(provider.Update(crossladderMatchEntity, trans));
        }
Exemple #8
0
 /// <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));
 }
Exemple #9
0
 /// <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));
 }