/// <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); } }
/// <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"); }
/// <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); } }