public int onChallengeEnd(JingJiChallengeResultData result) { PlayerJingJiData challenger = null; PlayerJingJiData beChallenger = null; int ranking; lock (this.changeRankingLock) { this.playerJingJiDatas.TryGetValue(result.playerId, out challenger); this.playerJingJiDatas.TryGetValue(result.robotId, out beChallenger); BeChallengerCount beChallengerCount = null; this.lockPlayerJingJiDatas.TryGetValue(result.robotId, out beChallengerCount); if (null != beChallengerCount) { beChallengerCount.nBeChallengerCount--; } if (result.isWin) { int playerRanking = challenger.ranking; int robotRanking = beChallenger.ranking; if (robotRanking < 1 || playerRanking == robotRanking) { return(challenger.ranking); } if (playerRanking == -1) { challenger.ranking = robotRanking; beChallenger.ranking = playerRanking; this.rankingDatas.Remove(beChallenger.getPlayerJingJiRankingData()); this.rankingDatas.Add(challenger.getPlayerJingJiRankingData()); this.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(); this.rankingDatas.Sort(); JingJiChangDBController.getInstance().updateJingJiRanking(challenger.roleId, challenger.ranking); JingJiChangDBController.getInstance().updateJingJiRanking(beChallenger.roleId, beChallenger.ranking); } } ranking = challenger.ranking; } return(ranking); }
public void saveData(JingJiSaveData data, out int winCount) { winCount = 0; PlayerJingJiData playerData = null; PlayerJingJiData robotData = null; lock (this.changeRankingLock) { this.playerJingJiDatas.TryGetValue(data.roleId, out playerData); this.playerJingJiDatas.TryGetValue(data.robotId, out robotData); if (data.isWin) { playerData.level = data.level; playerData.changeLiveCount = data.changeLiveCount; playerData.nextChallengeTime = data.nextChallengeTime; playerData.baseProps = data.baseProps; playerData.extProps = data.extProps; playerData.equipDatas = data.equipDatas; playerData.skillDatas = data.skillDatas; playerData.combatForce = data.combatForce; playerData.wingData = data.wingData; playerData.settingFlags = data.settingFlags; playerData.occupationId = data.Occupation; playerData.SubOccupation = data.SubOccupation; playerData.winCount++; playerData.shenShiEquipData = data.ShenShiEuipSkill; if (playerData.winCount > playerData.MaxWinCnt) { playerData.MaxWinCnt = playerData.winCount; JingJiChangDBController.getInstance().updateJingJiMaxWinCount(playerData.roleId, playerData.MaxWinCnt); } playerData.PassiveEffectList = data.PassiveEffectList; playerData.convertString(); JingJiChangDBController.getInstance().updateJingJiDataForWin(playerData); JingJiChallengeInfoData playerZhanBaoData; JingJiChallengeInfoData robotZhanBaoData; this.createChallengeWinChallengeInfoData(playerData, robotData, out playerZhanBaoData, out robotZhanBaoData); JingJiChangZhaoBaoDBController.getInstnace().insertZhanBao(playerZhanBaoData); JingJiChangZhaoBaoDBController.getInstnace().insertZhanBao(robotZhanBaoData); JingJiChallengeInfoData lianShengZhanBaoData = null; if (playerData.winCount >= 10 && playerData.winCount % 10 == 0) { winCount = playerData.winCount; this.createLianShengChallengeInfo(playerData, out lianShengZhanBaoData); JingJiChangZhaoBaoDBController.getInstnace().insertZhanBao(lianShengZhanBaoData); } List <JingJiChallengeInfoData> playerZhanbaoList = null; this.challengeInfos.TryGetValue(playerData.roleId, out playerZhanbaoList); if (null != lianShengZhanBaoData) { playerZhanbaoList.Insert(0, lianShengZhanBaoData); if (playerZhanbaoList.Count > JingJiChangConstants.ChallengeInfo_Max_Num) { playerZhanbaoList.RemoveAt(playerZhanbaoList.Count - 1); } } playerZhanbaoList.Insert(0, playerZhanBaoData); if (playerZhanbaoList.Count > JingJiChangConstants.ChallengeInfo_Max_Num) { playerZhanbaoList.RemoveAt(playerZhanbaoList.Count - 1); } if (robotData.isOnline) { List <JingJiChallengeInfoData> robotZhanbaoList = null; this.challengeInfos.TryGetValue(robotData.roleId, out robotZhanbaoList); robotZhanbaoList.Insert(0, robotZhanBaoData); if (robotZhanbaoList.Count > JingJiChangConstants.ChallengeInfo_Max_Num) { robotZhanbaoList.RemoveAt(robotZhanbaoList.Count - 1); } } if (robotData.winCount > 0) { robotData.winCount = 0; JingJiChangDBController.getInstance().updateJingJiWinCount(robotData.roleId, robotData.winCount); } } else { if (playerData.winCount >= 10) { winCount = playerData.winCount; } playerData.winCount = 0; playerData.nextChallengeTime = data.nextChallengeTime; JingJiChangDBController.getInstance().updateJingJiDataForFailed(playerData.roleId, playerData.nextChallengeTime); robotData.winCount++; if (robotData.winCount > robotData.MaxWinCnt) { robotData.MaxWinCnt = robotData.winCount; JingJiChangDBController.getInstance().updateJingJiMaxWinCount(robotData.roleId, robotData.MaxWinCnt); } JingJiChangDBController.getInstance().updateJingJiWinCount(robotData.roleId, robotData.winCount); JingJiChallengeInfoData playerZhanBaoData; JingJiChallengeInfoData robotZhanBaoData; this.createChallengeFailedChallengeInfoData(playerData, robotData, out playerZhanBaoData, out robotZhanBaoData); JingJiChangZhaoBaoDBController.getInstnace().insertZhanBao(playerZhanBaoData); JingJiChangZhaoBaoDBController.getInstnace().insertZhanBao(robotZhanBaoData); List <JingJiChallengeInfoData> playerZhanbaoList = null; this.challengeInfos.TryGetValue(playerData.roleId, out playerZhanbaoList); playerZhanbaoList.Insert(0, playerZhanBaoData); if (playerZhanbaoList.Count > JingJiChangConstants.ChallengeInfo_Max_Num) { playerZhanbaoList.RemoveAt(playerZhanbaoList.Count - 1); } if (robotData.isOnline) { List <JingJiChallengeInfoData> robotZhanbaoList = null; this.challengeInfos.TryGetValue(robotData.roleId, out robotZhanbaoList); robotZhanbaoList.Insert(0, robotZhanBaoData); if (robotZhanbaoList.Count > JingJiChangConstants.ChallengeInfo_Max_Num) { robotZhanbaoList.RemoveAt(robotZhanbaoList.Count - 1); } } } BeChallengerCount beChallengerCount = null; int nBeChallengerCount = 0; this.lockPlayerJingJiDatas.TryGetValue(robotData.roleId, out beChallengerCount); if (null != beChallengerCount) { nBeChallengerCount = beChallengerCount.nBeChallengerCount; if (nBeChallengerCount <= 0) { this.lockPlayerJingJiDatas.Remove(robotData.roleId); } } if (robotData.ranking == -1 && nBeChallengerCount <= 0 && !robotData.isOnline) { this.playerJingJiDatas.Remove(robotData.roleId); } } }
public JingJiBeChallengeData requestChallenge(int challengerId, int beChallengerId, int beChallengerRanking) { JingJiBeChallengeData data = new JingJiBeChallengeData(); PlayerJingJiData challengerData = null; JingJiBeChallengeData result; lock (this.changeRankingLock) { if (!this.playerJingJiDatas.TryGetValue(challengerId, out challengerData)) { data.state = 0; result = data; } else if (TimeUtil.NOW() < challengerData.nextChallengeTime) { data.state = -1; result = data; } else if ((challengerData.ranking > 100 || challengerData.ranking < 0) && beChallengerRanking <= 3) { data.state = -5; result = data; } else if (beChallengerRanking > this.rankingDatas.Count || beChallengerRanking < 1) { data.state = -2; result = data; } else { PlayerJingJiRankingData rankingData = this.rankingDatas[beChallengerRanking - 1]; PlayerJingJiData beChallengerData = null; if (!this.playerJingJiDatas.TryGetValue(rankingData.roleId, out beChallengerData)) { data.state = 0; result = data; } else if (challengerId == rankingData.roleId) { data.state = -3; result = data; } else { BeChallengerCount beChallengerCount = null; this.lockPlayerJingJiDatas.TryGetValue(beChallengerData.roleId, out beChallengerCount); if (null == beChallengerCount) { beChallengerCount = new BeChallengerCount(); beChallengerCount.nBeChallengerCount = 1; this.lockPlayerJingJiDatas.Add(beChallengerData.roleId, beChallengerCount); } else { beChallengerCount.nBeChallengerCount++; } data.state = 1; data.beChallengerData = beChallengerData; result = data; } } } return(result); }
/// <summary> /// GS处理完成后保存数据 /// </summary> public void saveData(JingJiSaveData data, out int winCount) { winCount = 0; PlayerJingJiData playerData = null; PlayerJingJiData robotData = null; lock (changeRankingLock) { playerJingJiDatas.TryGetValue(data.roleId, out playerData); playerJingJiDatas.TryGetValue(data.robotId, out robotData); if (data.isWin) { //更新挑战者竞技场数据 begin playerData.level = data.level; playerData.changeLiveCount = data.changeLiveCount; playerData.nextChallengeTime = data.nextChallengeTime; playerData.baseProps = data.baseProps; playerData.extProps = data.extProps; playerData.equipDatas = data.equipDatas; playerData.skillDatas = data.skillDatas; playerData.combatForce = data.combatForce; playerData.winCount += 1; playerData.convertString(); JingJiChangDBController.getInstance().updateJingJiDataForWin(playerData); // //更新被挑战者竞技场数据 // JingJiChangDBController.getInstance().updateJingJiRanking(robotData.roleId, robotData.ranking); //创建竞技场战报 JingJiChallengeInfoData playerZhanBaoData; JingJiChallengeInfoData robotZhanBaoData; this.createChallengeWinChallengeInfoData(playerData, robotData, out playerZhanBaoData, out robotZhanBaoData); //插入数据库 JingJiChangZhaoBaoDBController.getInstnace().insertZhanBao(playerZhanBaoData); JingJiChangZhaoBaoDBController.getInstnace().insertZhanBao(robotZhanBaoData); JingJiChallengeInfoData lianShengZhanBaoData = null; //创建连胜战报 if (playerData.winCount >= 10 && playerData.winCount % 10 == 0) { winCount = playerData.winCount; this.createLianShengChallengeInfo(playerData, out lianShengZhanBaoData); JingJiChangZhaoBaoDBController.getInstnace().insertZhanBao(lianShengZhanBaoData); } //更新内存数据 List <JingJiChallengeInfoData> playerZhanbaoList = null; challengeInfos.TryGetValue(playerData.roleId, out playerZhanbaoList); if (null != lianShengZhanBaoData) { playerZhanbaoList.Insert(0, lianShengZhanBaoData); //只缓存50条 if (playerZhanbaoList.Count > ChallengeInfo_Max_Num) { playerZhanbaoList.RemoveAt(playerZhanbaoList.Count - 1); } } playerZhanbaoList.Insert(0, playerZhanBaoData); //只缓存50条 if (playerZhanbaoList.Count > ChallengeInfo_Max_Num) { playerZhanbaoList.RemoveAt(playerZhanbaoList.Count - 1); } if (robotData.isOnline) { List <JingJiChallengeInfoData> robotZhanbaoList = null; challengeInfos.TryGetValue(robotData.roleId, out robotZhanbaoList); robotZhanbaoList.Insert(0, robotZhanBaoData); //只缓存50条 if (robotZhanbaoList.Count > ChallengeInfo_Max_Num) { robotZhanbaoList.RemoveAt(robotZhanbaoList.Count - 1); } } } else { //连胜清零,重置上次挑战时间,更新声望值 if (playerData.winCount >= 10) { winCount = playerData.winCount; } playerData.winCount = 0; playerData.nextChallengeTime = data.nextChallengeTime; JingJiChangDBController.getInstance().updateJingJiDataForFailed(playerData.roleId, playerData.nextChallengeTime); //创建竞技场战报 JingJiChallengeInfoData playerZhanBaoData; JingJiChallengeInfoData robotZhanBaoData; this.createChallengeFailedChallengeInfoData(playerData, robotData, out playerZhanBaoData, out robotZhanBaoData); JingJiChangZhaoBaoDBController.getInstnace().insertZhanBao(playerZhanBaoData); JingJiChangZhaoBaoDBController.getInstnace().insertZhanBao(robotZhanBaoData); //更新内存数据 List <JingJiChallengeInfoData> playerZhanbaoList = null; challengeInfos.TryGetValue(playerData.roleId, out playerZhanbaoList); playerZhanbaoList.Insert(0, playerZhanBaoData); //只缓存50条 if (playerZhanbaoList.Count > ChallengeInfo_Max_Num) { playerZhanbaoList.RemoveAt(playerZhanbaoList.Count - 1); } if (robotData.isOnline) { List <JingJiChallengeInfoData> robotZhanbaoList = null; challengeInfos.TryGetValue(robotData.roleId, out robotZhanbaoList); robotZhanbaoList.Insert(0, robotZhanBaoData); //只缓存50条 if (robotZhanbaoList.Count > ChallengeInfo_Max_Num) { robotZhanbaoList.RemoveAt(robotZhanbaoList.Count - 1); } } } //解除被挑战者锁定状态 //lock (lockPlayerJingJiDatas) //{ // lockPlayerJingJiDatas.Remove(robotData.roleId); //} BeChallengerCount beChallengerCount = null; int nBeChallengerCount = 0; lockPlayerJingJiDatas.TryGetValue(robotData.roleId, out beChallengerCount); if (null != beChallengerCount) { nBeChallengerCount = beChallengerCount.nBeChallengerCount; if (nBeChallengerCount <= 0) { lockPlayerJingJiDatas.Remove(robotData.roleId); } } //已经不再500名以内了、不在线、没人挑战,就没有必要缓存了 if (robotData.ranking == -1 && nBeChallengerCount <= 0 && !robotData.isOnline) { // lock (playerJingJiDatas) { playerJingJiDatas.Remove(robotData.roleId); } } } }
/// <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="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); } }