Пример #1
0
        /// <summary>
        /// 挑战结束处理
        /// </summary>
        public int onChallengeEnd(JingJiChallengeResultData result)
        {
            PlayerJingJiData challenger   = null;
            PlayerJingJiData beChallenger = null;

            //获取数据
            lock (changeRankingLock)
            {
                playerJingJiDatas.TryGetValue(result.playerId, out challenger);
                playerJingJiDatas.TryGetValue(result.robotId, out beChallenger);

                BeChallengerCount beChallengerCount = null;
                lockPlayerJingJiDatas.TryGetValue(result.robotId, out beChallengerCount);
                if (null != beChallengerCount)
                {
                    beChallengerCount.nBeChallengerCount -= 1;
                }

                //胜利
                if (result.isWin)
                {
                    // lock (rankingDatas)
                    {
                        //记录挑战前排行
                        int playerRanking = challenger.ranking;
                        int robotRanking  = beChallenger.ranking;

                        // 被挑战者500名以后或排名相等,直接返回
                        if (robotRanking < 1 || playerRanking == robotRanking)
                        {
                            return(challenger.ranking);
                        }
                        //挑战者500名以后
                        else if (playerRanking == -1)
                        {
                            //排行互换
                            challenger.ranking   = robotRanking;
                            beChallenger.ranking = playerRanking;

                            //被挑战者排名500名以后,被踢出排行榜
                            rankingDatas.Remove(beChallenger.getPlayerJingJiRankingData());

                            //将挑战者加入排行榜
                            rankingDatas.Add(challenger.getPlayerJingJiRankingData());

                            rankingDatas.Sort();

                            JingJiChangDBController.getInstance().updateJingJiRanking(challenger.roleId, challenger.ranking);
                            JingJiChangDBController.getInstance().updateJingJiRanking(beChallenger.roleId, beChallenger.ranking);
                        }
                        //双方都在榜上
                        else if (playerRanking > robotRanking)
                        {
                            //排行互换
                            challenger.ranking   = robotRanking;
                            beChallenger.ranking = playerRanking;

                            beChallenger.getPlayerJingJiRankingData();
                            challenger.getPlayerJingJiRankingData();

                            rankingDatas.Sort();

                            JingJiChangDBController.getInstance().updateJingJiRanking(challenger.roleId, challenger.ranking);
                            JingJiChangDBController.getInstance().updateJingJiRanking(beChallenger.roleId, beChallenger.ranking);
                        }
                    }
                }

                return(challenger.ranking);
            }
        }
Пример #2
0
        /// <summary>
        /// 创建挑战者胜利竞技场战报
        /// </summary>
        /// <param name="challengePlayer"></param>
        /// <param name="beChallengePlayer"></param>
        /// <param name="playerZhanBaoData"></param>
        /// <param name="robotZhanBaoData"></param>
        private void createChallengeWinChallengeInfoData(PlayerJingJiData challengePlayer, PlayerJingJiData beChallengePlayer, out JingJiChallengeInfoData playerZhanBaoData, out JingJiChallengeInfoData robotZhanBaoData)
        {
            //创建挑战者竞技场战报
            playerZhanBaoData = new JingJiChallengeInfoData();

            playerZhanBaoData.roleId        = challengePlayer.roleId;
            playerZhanBaoData.challengeName = beChallengePlayer.roleName;
            playerZhanBaoData.zhanbaoType   = ChallengeInfoType_Challenge_Win;
            playerZhanBaoData.value         = challengePlayer.ranking;
            playerZhanBaoData.createTime    = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            //创建被挑战者竞技场战报
            robotZhanBaoData               = new JingJiChallengeInfoData();
            robotZhanBaoData.roleId        = beChallengePlayer.roleId;
            robotZhanBaoData.challengeName = challengePlayer.roleName;
            robotZhanBaoData.zhanbaoType   = ChallengeInfoType_Be_Challenge_Failed;
            robotZhanBaoData.value         = beChallengePlayer.ranking;
            robotZhanBaoData.createTime    = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }
Пример #3
0
        /// <summary>
        /// 请求挑战
        /// </summary>
        /// <param name="beChallengeId">被挑战者ID</param>
        /// <param name="beChallengeRanking">被挑战者排名</param>
        /// <returns>1:请求成功,0:非法参数,-1:冷却时间未到,-2:被挑战机器人不存在,-3:被挑战机器人排名已更改,-4:正在被其他玩家挑战</returns>
        public JingJiBeChallengeData requestChallenge(int challengerId, int beChallengerId, int beChallengerRanking)
        {
            JingJiBeChallengeData data = new JingJiBeChallengeData();

            PlayerJingJiData challengerData = null;

            lock (changeRankingLock)
            {
                if (!playerJingJiDatas.TryGetValue(challengerId, out challengerData))
                {
                    data.state = 0;
                    return(data);
                }

                //冷却时间未到
                if (TimeUtil.NOW() < challengerData.nextChallengeTime)
                {
                    data.state = -1;
                    return(data);
                }

                PlayerJingJiRankingData rankingData = null;
                int bakBeChallengerRanking          = beChallengerRanking;
                // int bakBeChallengerRanking = beChallengerData.ranking;
                if (bakBeChallengerRanking > rankingDatas.Count || bakBeChallengerRanking < 1)
                {
                    //被挑战机器人不存在
                    data.state = -2;
                    return(data);
                }

                //lock (rankingDatas)
                {
                    rankingData = rankingDatas[bakBeChallengerRanking - 1];
                }

                PlayerJingJiData beChallengerData = null;
                if (!playerJingJiDatas.TryGetValue(rankingData.roleId, out beChallengerData))
                {
                    data.state = 0;
                    return(data);
                }

                if (challengerId == rankingData.roleId)
                {
                    //不能挑战自己
                    data.state = -3;
                    return(data);
                }

                //if (beChallengerId != rankingData.roleId)
                //{
                //    //被挑战机器人排名已更改
                //    data.state = -3;
                //    return data;
                //}


                //lock (lockPlayerJingJiDatas)
                //{
                //    if (lockPlayerJingJiDatas.TryGetValue(beChallengerId, out beChallengerData))
                //    {
                //        //正在被其他玩家挑战
                //        data.state = -4;
                //        return data;
                //    }

                //    //获取被挑战者数据
                //    playerJingJiDatas.TryGetValue(beChallengerId, out beChallengerData);

                //    //锁定
                //    lockPlayerJingJiDatas.Add(beChallengerData.roleId, beChallengerData);
                //}

                BeChallengerCount beChallengerCount = null;
                lockPlayerJingJiDatas.TryGetValue(beChallengerData.roleId, out beChallengerCount);
                if (null == beChallengerCount)
                {
                    beChallengerCount = new BeChallengerCount();
                    beChallengerCount.nBeChallengerCount = 1;
                    lockPlayerJingJiDatas.Add(beChallengerData.roleId, beChallengerCount);
                }
                else
                {
                    beChallengerCount.nBeChallengerCount += 1;
                }

                data.state            = 1;
                data.beChallengerData = beChallengerData;

                return(data);
            }
        }