コード例 #1
0
        static ManagerInput GetTransferNpc(MatchManagerInfo managerInfo)
        {
            var data = CacheFactory.NpcdicCache.GetTransferData(managerInfo.ManagerId);

            managerInfo.Name = data.Name;
            return(data);
        }
コード例 #2
0
        /// <summary>
        /// Runs the arena match.
        /// </summary>
        void RunMatch()
        {
            if (_fightDic == null)
            {
                return;
            }
            foreach (var item in _fightDic.Values)
            {
                var matchHome = new MatchManagerInfo(item.HomeId, item.HomeSiteId, false, item.HomeIsBot);
                var matchAway = new MatchManagerInfo(item.AwayId, item.AwaySiteId, false, item.AwayIsBot);
                var matchData = new BaseMatchData((int)EnumMatchType.CrossLadder, item.Idx, matchHome, matchAway);
                matchData.ErrorCode = (int)MessageCode.MatchWait;

                MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData);

                //使用多线程
                _nbThreadPool.Add(() => Fight(matchData, item));
            }

            _nbThreadPool.WaitAll();
            _ladderInfo.Groups  = _fightDic.Count;
            _ladderInfo.RowTime = DateTime.Now;

            _ladderInfo.Season     = CacheFactory.CrossLadderCache.GetCurrentSeasonIndex();
            _ladderInfo.Status     = 2;
            _ladderInfo.UpdateTime = DateTime.Now;

            _ladderInfo.FightList = null;
            _fightDic             = null;

            CrossladderInfoMgr.Insert(_ladderInfo);
            _ladderInfo = null;
        }
コード例 #3
0
 public static ManagerInput BuildTransferManager(MatchManagerInfo managerInfo, bool isGuide = false, DTOBuffMemberView buffView = null, string siteId = "")
 {
     try
     {
         if (managerInfo.IsNpc)
         {
             return(GetTransferNpc(managerInfo));
         }
         if (null == buffView)
         {
             buffView = BuffDataCore.Instance().GetMembers(managerInfo.ManagerId, true, siteId);
         }
         return(CreateTransferManager(managerInfo, buffView, isGuide, siteId));
     }
     catch (Exception ex)
     {
         SystemlogMgr.Error("BuildTransferManager", ex);
         throw;
     }
 }
コード例 #4
0
        static ManagerInput CreateTransferManagerArena(MatchManagerInfo managerInfo, DTOBuffMemberView buffView, bool isGuide, ArenaTeammemberFrame arenaFrame, string siteId = "")
        {
            if (null == buffView)
            {
                return(null);
            }
            var    manager  = MatchDataHelper.GetManager(managerInfo.ManagerId, false, false, siteId);
            var    solution = MatchDataHelper.GetArenaSolution(arenaFrame);
            string name     = managerInfo.IsBot ? _botName : manager.Name;

            managerInfo.Name = name;
            var dstData = new ManagerInput();

            dstData.Mid       = managerInfo.ManagerId;
            dstData.Name      = name;
            dstData.Logo      = manager.Logo.ToString();
            dstData.FormId    = solution.FormationId;
            dstData.FormLv    = solution.FormationLevel;
            dstData.ClothId   = buffView.ClothId;
            dstData.Skills    = buffView.LiveSkillList;
            dstData.SubSkills = buffView.SubSkills;
            if (null != buffView.MatchPropList)
            {
                dstData.PropList = new List <PropInput>();
                foreach (var item in buffView.MatchPropList)
                {
                    dstData.PropList.Add(new PropInput(item.Point, item.Percent, item.BuffId));
                }
            }
            if (null != buffView.MatchBoostList)
            {
                dstData.BoostList = new List <BoostInput>();
                foreach (var item in buffView.MatchBoostList)
                {
                    dstData.BoostList.Add(new BoostInput(item.BoostType, item.Point, item.Percent, item.BuffId));
                }
            }

            BuildManagerData(dstData, buffView, manager.VipLevel, managerInfo.BuffScale, isGuide);
            return(dstData);
        }
コード例 #5
0
ファイル: LadderProcess.cs プロジェクト: cool8868/H5Nball
        /// <summary>
        /// Runs the arena match.
        /// </summary>
        void RunMatch()
        {
            if (_fightDic == null)
            {
                return;
            }
            foreach (var item in _fightDic.Values)
            {
                var matchHome = new MatchManagerInfo(item.HomeId, false, item.HomeIsBot);
                var matchAway = new MatchManagerInfo(item.AwayId, false, item.AwayIsBot);
                if (isGuide)//引导。 必胜
                {
                    matchHome.BuffScale = 200;
                    matchAway.BuffScale = 50;
                }
                var matchData = new BaseMatchData((int)EnumMatchType.Ladder, item.Idx, matchHome, matchAway);
                matchData.ErrorCode = (int)MessageCode.MatchWait;

                MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData);

                //使用多线程
                _nbThreadPool.Add(() => Fight(matchData, item));
            }

            _nbThreadPool.WaitAll();
            _ladderInfo.Groups  = _fightDic.Count;
            _ladderInfo.RowTime = DateTime.Now;

            _ladderInfo.Season     = 1;
            _ladderInfo.Status     = 2;
            _ladderInfo.UpdateTime = DateTime.Now;

            _ladderInfo.FightList = null;
            _fightDic             = null;

            LadderInfoMgr.Insert(_ladderInfo);
            _ladderInfo = null;
        }
コード例 #6
0
        /// <summary>
        /// Runs the arena match.
        /// </summary>
        void RunMatch()
        {
            if (_matchDic == null)
            {
                return;
            }
            try
            {
                Status = EnumLadderStatus.Running;
                foreach (var item in _matchDic.Values)
                {
                    var matchHome = new MatchManagerInfo(item.HomeId, item.HomeSiteId);
                    var matchAway = new MatchManagerInfo(item.AwayId, item.AwaySiteId);
                    var matchData = new BaseMatchData((int)EnumMatchType.CrossCrowd, item.Idx, matchHome, matchAway);
                    matchData.ErrorCode = (int)MessageCode.MatchWait;
                    MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData);
                    Fight(matchData, item);
                }

                _matchDic           = null;
                _pairRecord.RowTime = DateTime.Now;
                CrosscrowdPairrecordMgr.Insert(_pairRecord);
                _pairRecord = null;
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("CrossCrowdProcess-RunMatch", ex);
            }
            finally
            {
                Status = EnumLadderStatus.End;
                if (_clearFightDicDelegate != null)
                {
                    _clearFightDicDelegate();
                }
            }
        }
コード例 #7
0
        private void PostInit()
        {
            List <ComboData> data = new List <ComboData>();

            foreach (MatchManagerType t in Enum.GetValues(typeof(MatchManagerType)))
            {
                MatchManagerInfo i = MatchManagerInfoAccessor.GetInfo(t);
//#if DEBUG   // v debugu pridat vsechny managery
                data.Add(new ComboData {
                    Id = t, Name = i.Text
                });

/*#else
 *              if (!i.IsDebug)
 *                  data.Add(new ComboData { Id = t, Name = i.Text });
 #endif*/
            }

            cbType.ItemsSource       = data;
            cbType.DisplayMemberPath = "Name";
            cbType.SelectedValuePath = "Id";
            cbType.SelectedValue     = MatchManagerType.ONLY_SCORE;

            data = new List <ComboData>();
            foreach (GameLevel l in Enum.GetValues(typeof(GameLevel)))
            {
                LevelInfo i = LevelInfoAccessor.GetInfo(l);
//#if DEBUG   // v debugu pridat vsechny mapy
                data.Add(new ComboData {
                    Id = l, Name = i.Text
                });

/*#else
 *              if (!i.IsDebug)
 *                  data.Add(new ComboData { Id = l, Name = i.Text });
 #endif*/
            }

            cbMap.ItemsSource       = data;
            cbMap.DisplayMemberPath = "Name";
            cbMap.SelectedValuePath = "Id";
            cbMap.SelectedValue     = GameLevel.BASIC_MAP;

#if DEBUG
            tbName.Text = "Test";
#endif

//#if DEBUG
            // pridani dostupnych botu pro testovani
            data = new List <ComboData>();
            data.Add(new ComboData {
                Id = BotType.LEVEL1, Name = BotNameAccessor.GetBotName(BotType.LEVEL1)
            });
            data.Add(new ComboData {
                Id = BotType.LEVEL2, Name = BotNameAccessor.GetBotName(BotType.LEVEL2)
            });
            data.Add(new ComboData {
                Id = BotType.LEVEL3, Name = BotNameAccessor.GetBotName(BotType.LEVEL3)
            });

            cbBot.ItemsSource       = data;
            cbBot.DisplayMemberPath = "Name";
            cbBot.SelectedValuePath = "Id";
            cbBot.SelectedValue     = BotType.LEVEL1;

/*#else
 *          tbBotCount.Visibility = Visibility.Hidden;
 *          cbBot.Visibility = Visibility.Hidden;
 *          lblBot.Visibility = Visibility.Hidden;
 *          lblBotCount.Visibility = Visibility.Hidden;
 #endif*/
        }
コード例 #8
0
        /// <summary>
        /// 打比赛
        /// </summary>
        /// <param name="managerId"></param>
        /// <param name="opponentId"></param>
        /// <returns></returns>
        public ArenaFightResponse Fight(Guid managerId, Guid opponentId)
        {
            ArenaFightResponse response = new ArenaFightResponse();

            response.Data = new ArenaFight();
            try
            {
                //还未开始
                if (!IsStart)
                {
                    return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.SeasonNotStart));
                }
                if (IsEnd)
                {
                    return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.SeasonNotStart));
                }
                DateTime date = DateTime.Now;
                var      info = GetArenaInfo(managerId);
                //阵型未组建完成
                if (info == null)
                {
                    return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.TeammemberNotNumber));
                }
                RestoreStamina(info);
                //体力不足
                if (info.Stamina <= 0)
                {
                    return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.StaminaInsufficient));
                }
                var arenaInfo = new ArenaTeammemberFrame(managerId, (EnumArenaType)this.ArenaType, info.SiteId);
                //阵型人数<7
                if (arenaInfo.TeammebmerDic.Count < 7)
                {
                    return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.TeammemberNotNumber));
                }
                info.OpponentList = AnalyseOpponent(info.Opponent);
                //对手列表里找对手
                var opponent = info.OpponentList.OpponentList.Find(r => r.OpponentManagerId == opponentId);
                if (opponent == null)
                {
                    return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.NbParameterError));
                }
                if (!opponent.IsNpc)
                {
                    //对手信息
                    var opponentInfo = new ArenaTeammemberFrame(opponentId, (EnumArenaType)this.ArenaType,
                                                                opponent.OpponentZoneName);
                    //对手信息不完整  刷新
                    if (info.OpponentList == null || info.OpponentList.OpponentList.Count == 0 ||
                        opponentInfo.TeammebmerDic.Count < 7)
                    {
                        List <Guid> matcOpponet = null;
                        if (info.OpponentList != null)
                        {
                            matcOpponet = info.OpponentList.MatchOpponent;
                        }
                        var opponentList = RefreshOpponent(managerId, info.DanGrading, matcOpponet);
                        info.OpponentList = opponentList;
                        info.Opponent     = GenerateString(info.OpponentList);
                        ArenaManagerinfoMgr.Update(info);
                        return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.NbParameterError));
                    }
                }

                var matchHome = new MatchManagerInfo(managerId, info.SiteId, info.ArenaType);
                MatchManagerInfo matchAway = null;
                if (!opponent.IsNpc)
                {
                    matchAway = new MatchManagerInfo(opponent.OpponentManagerId, opponent.OpponentZoneName, info.ArenaType);
                }
                else
                {
                    matchAway = new MatchManagerInfo(opponent.OpponentManagerId, true, info.ArenaType);
                }
                var matchId   = ShareUtil.GenerateComb();
                var matchData = new BaseMatchData((int)EnumMatchType.Arena, matchId, matchHome, matchAway);
                matchData.ErrorCode = (int)MessageCode.MatchWait;
                MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData);

                MatchCore.CreateMatch(matchData);
                if (matchData.ErrorCode != (int)MessageCode.Success)
                {
                    return(ResponseHelper.Create <ArenaFightResponse>(matchData.ErrorCode));
                }

                //打比赛   自己为主队
                int homeGoals = matchData.Home.Score;
                int awayGoals = matchData.Away.Score;

                if (info.Stamina == info.MaxStamina)
                {
                    info.StaminaRestoreTime = date;
                }
                info.Stamina--;

                if (info.OpponentList.MatchOpponent == null)
                {
                    info.OpponentList.MatchOpponent = new List <Guid>();
                }
                info.OpponentList.MatchOpponent.Add(opponentId);
                //打完比赛重新刷新对手
                info.OpponentList = RefreshOpponent(managerId, info.DanGrading, info.OpponentList.MatchOpponent);
                info.Opponent     = GenerateString(info.OpponentList);

                if (homeGoals > awayGoals) //胜利了获得对手的积分
                {
                    info.Integral         += opponent.GetIntegral;
                    response.Data.Integral = opponent.GetIntegral;
                    info.UpdateTime        = DateTime.Now;
                }
                //计算段位
                CalculateDanGrading(ref info);
                info.Status = 1;
                response.Data.StaminEntity = RestoreStamina(info, false);
                if (!ArenaManagerinfoMgr.Update(info))
                {
                    return(ResponseHelper.Create <ArenaFightResponse>(MessageCode.NbUpdateFail));
                }
                response.Data.OpponentList = info.OpponentList.OpponentList;
                response.Data.MyIntegral   = info.Integral;
                response.Data.DanGrading   = info.DanGrading;
                //更新排名
                SetRank(managerId, info.Integral);
                response.Data.MyRank  = GetRank(managerId);
                response.Data.MatchId = matchId;
                if (info.DanGrading == 1)
                {
                    response.Data.IsMaxDanGrading = true;
                }
                else
                {
                    var dangradingConfig = CacheFactory.ArenaCache.GetDangrading(info.DanGrading);
                    if (dangradingConfig != null)
                    {
                        response.Data.UpIntegral = dangradingConfig.Integral - info.Integral;
                    }
                }

                MemcachedFactory.ArenaMatchClient.Set <BaseMatchData>(matchId, matchData);
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("打比赛", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }
コード例 #9
0
        private MatchCreateResponse doFight(Guid managerId, Guid awayId, long revengeRecordId, bool hasTask)
        {
            var info = InnerGetInfo(managerId);

            if (info == null)
            {
                return(ResponseHelper.InvalidParameter <MatchCreateResponse>("info"));
            }
            info.Opponents = SerializationHelper.FromByte <List <PlayerKillOpponentEntity> >(info.OpponentInfo);
            if (info.Opponents == null)
            {
                return(ResponseHelper.InvalidParameter <MatchCreateResponse>("opponents"));
            }
            var awayOpp = info.Opponents.Find(d => d.ManagerId == awayId);

            if (awayOpp == null)
            {
                return(ResponseHelper.Create <MatchCreateResponse>(MessageCode.PlayerKillNoAway));
            }
            if (awayOpp.HasWin)
            {
                return(ResponseHelper.Create <MatchCreateResponse>(MessageCode.PlayerKillWinOver));
            }
            var managerex = ManagerCore.Instance.GetManagerExtra(managerId);
            var manager   = ManagerCore.Instance.GetManager(managerId);

            if (manager == null || managerex == null)
            {
                return(ResponseHelper.Create <MatchCreateResponse>((int)MessageCode.MissManager));
            }
            if (managerex.Stamina < _pkStamina)
            {
                return(ResponseHelper.Create <MatchCreateResponse>(MessageCode.LeagueStaminaNotEnough));
            }
            var matchHome = new MatchManagerInfo(manager.Idx, "", false, 20);
            //构建客队
            var matchAway = new MatchManagerInfo(awayId, false, false);
            //创建一场比赛
            Guid matchId   = ShareUtil.GenerateComb();
            var  matchData = new BaseMatchData((int)EnumMatchType.PlayerKill, matchId, matchHome, matchAway);

            matchData.ErrorCode = (int)MessageCode.MatchWait;
            matchData.HasTask   = hasTask;

            var taskListShow = TaskCore.Instance.GetTaskListShow(managerId);

            if (taskListShow.Tasks.Find(t => t.TaskId == 1001) != null)
            {
                matchData.IsGuide = true;
            }

            MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData);
            MatchCore.CreateMatch(matchData);

            if (matchData.ErrorCode == (int)MessageCode.Success)
            {
                MatchCallback(matchData, revengeRecordId, awayOpp, info);
            }
            else
            {
                return(ResponseHelper.Create <MatchCreateResponse>(matchData.ErrorCode));
            }

            var response     = ResponseHelper.MatchCreateResponse(matchId);
            var managerExtra = ManagerCore.Instance.GetManagerExtra(managerId);

            response.Data.Stamina = managerExtra.Stamina;
            return(response);
        }
コード例 #10
0
        /// <summary>
        /// 单场比赛
        /// </summary>
        /// <param name="round"></param>
        /// <param name="homeGuid"></param>
        /// <param name="awayGuid"></param>
        /// <param name="homeId"></param>
        /// <param name="awayId"></param>
        /// <param name="leagueId"></param>
        /// <param name="matchId"></param>
        /// <param name="npcStatus"></param>
        /// <param name="fightMap"></param>
        /// <param name="managerMatch"></param>
        public MessageCode SingleMatch(int round, Guid homeGuid, Guid awayGuid, int homeId, int awayId, int leagueId, Guid matchId, int npcStatus, LeagueFightMapFrame fightMap, ref BaseMatchData managerMatch)
        {
            try
            {
                bool homeIsBot = true;
                bool awayIsBot = true;
                switch (npcStatus)
                {
                case 1:
                    homeIsBot = false;
                    break;

                case 2:
                    awayIsBot = false;
                    break;

                default:
                    matchId = ShareUtil.GenerateComb();
                    break;
                }
                //构建主队
                var matchHome = new MatchManagerInfo(homeGuid, homeIsBot, false);
                ////构建客队
                var matchAway = new MatchManagerInfo(awayGuid, awayIsBot, false);

                ////创建一场比赛
                var matchData = new BaseMatchData((int)EnumMatchType.League, matchId, matchHome, matchAway);
                //比赛数据
                matchData.ErrorCode = (int)MessageCode.MatchWait;
                matchData.RowTime   = DateTime.Now;
                MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData);
                if (npcStatus == 0)
                {
                    matchData.ErrorCode  = (int)MessageCode.Success;
                    matchData.Home.Score = CacheFactory.LeagueCache.GetGoalsMap(leagueId, homeId);
                    matchData.Away.Score = CacheFactory.LeagueCache.GetGoalsMap(leagueId, awayId);
                }
                else
                {
                    MatchCore.CreateMatch(matchData);
                    if (matchData.ErrorCode != (int)MessageCode.Success)
                    {
                        return((MessageCode)matchData.ErrorCode);
                    }
                    //测试用 ------------
                    //matchData.ErrorCode = (int)MessageCode.Success;
                    //matchData.Home.Score = 5;
                    //matchData.Away.Score = 2;
                    //-------------------
                    managerMatch = matchData;
                }
                int homeGoals = matchData.Home.Score;
                int awayGoals = matchData.Away.Score;
                SaveMatchScore(leagueId, round, homeId, awayId, homeGoals, awayGoals, fightMap, npcStatus);
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("League.Match", ex);
                return(MessageCode.NbParameterError);
            }
            return(MessageCode.Success);
        }
コード例 #11
0
        DailycupMatchEntity Fight(DailycupCompetitorsEntity home, DailycupCompetitorsEntity away, int round)
        {
            DailycupMatchEntity dailycupMatch = new DailycupMatchEntity();

            dailycupMatch.DailyCupId  = _dailycup.Idx;
            dailycupMatch.HomeManager = home.ManagerId;
            dailycupMatch.HomeName    = home.ManagerName;
            dailycupMatch.HomeLogo    = home.Logo;

            dailycupMatch.Idx            = ShareUtil.GenerateComb();
            dailycupMatch.Round          = round;
            dailycupMatch.ChipInCount    = 0;
            dailycupMatch.RowTime        = DateTime.Now;
            dailycupMatch.Status         = 0;
            dailycupMatch.HomeLevel      = home.Level;
            dailycupMatch.HomePower      = home.kpi;
            dailycupMatch.HomeWorldScore = home.WorldScore;
            if (away == null) //轮空
            {
                dailycupMatch.AwayManager = Guid.Empty;
                dailycupMatch.AwayName    = "";
                dailycupMatch.AwayScore   = 0;
                dailycupMatch.HomeScore   = 0;
                dailycupMatch.AwayLogo    = "";
            }
            else
            {
                try
                {
                    home.MaxRound = round;
                    away.MaxRound = round;
                    home.Rank     = _dailycup.Round - round + 1;
                    away.Rank     = _dailycup.Round - round + 1;
                    var matchHome = new MatchManagerInfo(home.ManagerId, false, false);
                    var matchAway = new MatchManagerInfo(away.ManagerId, false, false);
                    var matchData = new BaseMatchData((int)EnumMatchType.Dailycup, dailycupMatch.Idx, matchHome, matchAway);
                    matchData.ErrorCode = (int)MessageCode.MatchWait;
                    matchData.NoDraw    = true;
                    MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData);

                    MatchCore.CreateMatch(matchData);
                    ////测试用 ------------
                    //matchData.ErrorCode = (int)MessageCode.Success;
                    //matchData.Home.Score = 5;
                    //matchData.Away.Score = 2;

                    if (matchData.ErrorCode == (int)MessageCode.Success)
                    {
                        dailycupMatch.AwayManager    = away.ManagerId;
                        dailycupMatch.AwayName       = away.ManagerName;
                        dailycupMatch.AwayLevel      = away.Level;
                        dailycupMatch.AwayLogo       = away.Logo;
                        dailycupMatch.AwayPower      = away.kpi;
                        dailycupMatch.AwayWorldScore = away.WorldScore;
                        dailycupMatch.HomeScore      = matchData.Home.Score;
                        dailycupMatch.AwayScore      = matchData.Away.Score;

                        if (matchData.Away.Score > matchData.Home.Score)
                        {
                            away.WinCount++;
                            if (round == _dailycup.Round)
                            {
                                away.Rank = -1;
                            }
                        }
                        else
                        {
                            home.WinCount++;
                            if (round == _dailycup.Round)
                            {
                                home.Rank = -1;
                            }
                        }
                        AddMatchStat(dailycupMatch);
                    }
                    else
                    {
                        dailycupMatch.AwayManager = Guid.Empty;
                        dailycupMatch.AwayName    = "";
                        dailycupMatch.AwayScore   = 0;
                        dailycupMatch.HomeScore   = 0;
                        dailycupMatch.AwayLogo    = "";
                        SystemlogMgr.Error("Create Dailycup", string.Format("round:{0},homeId:{1},awayId:{2},code:{3}", round, home.Idx, away.Idx, matchData.ErrorCode));
                        return(dailycupMatch);
                    }
                }
                catch (Exception ex)
                {
                    SystemlogMgr.Error("Create Dailycup", string.Format("round:{0},homeId:{1},awayId:{2}", round, home.Idx, away.Idx));
                    throw ex;
                }
            }
            return(dailycupMatch);
        }