public void processCmd(GameServerClient client, int nID, byte[] cmdParams, int count) { JingJiSaveData data = DataHelper.BytesToObject <JingJiSaveData>(cmdParams, 0, count); int winCount; JingJiChangManager.getInstance().saveData(data, out winCount); client.sendCmd <int>(10145, winCount); }
public void processCmd(GameServerClient client, byte[] cmdParams, int count) { JingJiSaveData data = DataHelper.BytesToObject <JingJiSaveData>(cmdParams, 0, count); int winCount; JingJiChangManager.getInstance().saveData(data, out winCount); client.sendCmd <int>((int)TCPGameServerCmds.CMD_DB_JINGJICHANG_SAVE_DATA, winCount); }
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); } } }
/// <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); } } } }