public void OnKillRole(GameClient client, GameClient other) { lock (RuntimeData.Mutex) { YongZheZhanChangScene scene; if (SceneDict.TryGetValue(client.ClientData.FuBenSeqID, out scene)) { if (scene.m_eStatus == GameSceneStatuses.STATUS_BEGIN) { int addScore = 0; int addScoreDie = RuntimeData.WarriorBattleDie; YongZheZhanChangClientContextData clientLianShaContextData = client.SceneContextData2 as YongZheZhanChangClientContextData; YongZheZhanChangClientContextData otherLianShaContextData = other.SceneContextData2 as YongZheZhanChangClientContextData; HuanYingSiYuanLianSha huanYingSiYuanLianSha = null; HuanYingSiYuanLianshaOver huanYingSiYuanLianshaOver = null; HuanYingSiYuanAddScore huanYingSiYuanAddScore = new HuanYingSiYuanAddScore(); huanYingSiYuanAddScore.Name = Global.FormatRoleName4(client); huanYingSiYuanAddScore.ZoneID = client.ClientData.ZoneID; huanYingSiYuanAddScore.Side = client.ClientData.BattleWhichSide; huanYingSiYuanAddScore.ByLianShaNum = 1; huanYingSiYuanAddScore.RoleId = client.ClientData.RoleID; huanYingSiYuanAddScore.Occupation = client.ClientData.Occupation; //addScore += RuntimeData.WarriorBattlePk; // scene.GameStatisticalData.KillScore += RuntimeData.WarriorBattleUltraKillParam1; if (null != clientLianShaContextData) { clientLianShaContextData.KillNum++; int lianShaScore = RuntimeData.WarriorBattleUltraKillParam1 + clientLianShaContextData.KillNum * RuntimeData.WarriorBattleUltraKillParam2; lianShaScore = Math.Min(RuntimeData.WarriorBattleUltraKillParam4, Math.Max(RuntimeData.WarriorBattleUltraKillParam3, lianShaScore)); huanYingSiYuanAddScore.ByLianShaNum = 1; huanYingSiYuanLianSha = new HuanYingSiYuanLianSha(); huanYingSiYuanLianSha.Name = huanYingSiYuanAddScore.Name; huanYingSiYuanLianSha.ZoneID = huanYingSiYuanAddScore.ZoneID; huanYingSiYuanLianSha.Occupation = huanYingSiYuanAddScore.Occupation; // 每杀5人,连杀公告就更暴力,所以除以5,计算属于哪个连杀类型,最大为30 / 5 huanYingSiYuanLianSha.LianShaType = Math.Min(clientLianShaContextData.KillNum, 30) / 5; huanYingSiYuanLianSha.ExtScore = lianShaScore; huanYingSiYuanLianSha.Side = huanYingSiYuanAddScore.Side; addScore += lianShaScore; scene.GameStatisticalData.LianShaScore += lianShaScore; //只在连杀数为5的倍数时推送消息 if ((clientLianShaContextData.KillNum % 5) != 0) { huanYingSiYuanLianSha = null; } } if (null != otherLianShaContextData) { int overScore = RuntimeData.WarriorBattleShutDownParam1 + otherLianShaContextData.KillNum * RuntimeData.WarriorBattleShutDownParam2; overScore = Math.Min(RuntimeData.WarriorBattleShutDownParam4, Math.Max(RuntimeData.WarriorBattleShutDownParam3, overScore)); addScore += overScore; scene.GameStatisticalData.ZhongJieScore += overScore; if (otherLianShaContextData.KillNum >= 10) { huanYingSiYuanLianshaOver = new HuanYingSiYuanLianshaOver(); huanYingSiYuanLianshaOver.KillerName = huanYingSiYuanAddScore.Name; huanYingSiYuanLianshaOver.KillerZoneID = huanYingSiYuanAddScore.ZoneID; huanYingSiYuanLianshaOver.KillerOccupation = client.ClientData.Occupation; huanYingSiYuanLianshaOver.KillerSide = huanYingSiYuanAddScore.Side; huanYingSiYuanLianshaOver.KilledName = Global.FormatRoleName4(other); huanYingSiYuanLianshaOver.KilledZoneID = other.ClientData.ZoneID; huanYingSiYuanLianshaOver.KilledOccupation = other.ClientData.Occupation; huanYingSiYuanLianshaOver.KilledSide = other.ClientData.BattleWhichSide; huanYingSiYuanLianshaOver.ExtScore = overScore; } otherLianShaContextData.KillNum = 0; otherLianShaContextData.TotalScore += addScoreDie; scene.GameStatisticalData.KillScore += addScoreDie; } huanYingSiYuanAddScore.Score = addScore; if (client.ClientData.BattleWhichSide == 1) { scene.ScoreData.Score1 += addScore; scene.ScoreData.Score2 += addScoreDie; } else { scene.ScoreData.Score2 += addScore; scene.ScoreData.Score1 += addScoreDie; } if (null != clientLianShaContextData) { clientLianShaContextData.TotalScore += addScore; } //GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_HYSY_ADD_SCORE, huanYingSiYuanAddScore, huanYingSiYuanScene.CopyMap); GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_YONGZHEZHANCHANG_SIDE_SCORE, scene.ScoreData, scene.CopyMap); if (null != huanYingSiYuanLianSha) { GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_YONGZHEZHANCHANG_LIANSHA, huanYingSiYuanLianSha, scene.CopyMap); } if (null != huanYingSiYuanLianshaOver) { GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_YONGZHEZHANCHANG_STOP_LIANSHA, huanYingSiYuanLianshaOver, scene.CopyMap); } NotifyTimeStateInfoAndScoreInfo(client, false, false, true); NotifyTimeStateInfoAndScoreInfo(other, false, false, true); } } } }
public void OnKillRole(GameClient client, GameClient other) { TryLostShengBei(other); lock (Mutex) { HuanYingSiYuanScene huanYingSiYuanScene; if (HuanYingSiYuanSceneDict.TryGetValue(client.ClientData.FuBenSeqID, out huanYingSiYuanScene)) { if (huanYingSiYuanScene.m_eStatus == GameSceneStatuses.STATUS_BEGIN) { int addScore = 0; HuanYingSiYuanLianShaContextData clientLianShaContextData = client.SceneContextData2 as HuanYingSiYuanLianShaContextData; HuanYingSiYuanLianShaContextData otherLianShaContextData = other.SceneContextData2 as HuanYingSiYuanLianShaContextData; ContinuityKillAward continuityKillAward; HuanYingSiYuanLianSha huanYingSiYuanLianSha = null; HuanYingSiYuanLianshaOver huanYingSiYuanLianshaOver = null; HuanYingSiYuanAddScore huanYingSiYuanAddScore = new HuanYingSiYuanAddScore(); huanYingSiYuanAddScore.Name = Global.FormatRoleName4(client); huanYingSiYuanAddScore.ZoneID = client.ClientData.ZoneID; huanYingSiYuanAddScore.Side = client.ClientData.BattleWhichSide; huanYingSiYuanAddScore.ByLianShaNum = 1; huanYingSiYuanAddScore.RoleId = client.ClientData.RoleID; huanYingSiYuanAddScore.Occupation = client.ClientData.Occupation; if (null != clientLianShaContextData) { clientLianShaContextData.KillNum++; if (RuntimeData.ContinuityKillAwardDict.TryGetValue(clientLianShaContextData.KillNum, out continuityKillAward)) { huanYingSiYuanAddScore.ByLianShaNum = 1; huanYingSiYuanLianSha = new HuanYingSiYuanLianSha(); huanYingSiYuanLianSha.Name = huanYingSiYuanAddScore.Name; huanYingSiYuanLianSha.ZoneID = huanYingSiYuanAddScore.ZoneID; huanYingSiYuanLianSha.Occupation = huanYingSiYuanAddScore.Occupation; huanYingSiYuanLianSha.LianShaType = continuityKillAward.ID; huanYingSiYuanLianSha.ExtScore = continuityKillAward.Score; huanYingSiYuanLianSha.Side = huanYingSiYuanAddScore.Side; addScore += huanYingSiYuanLianSha.ExtScore; } } if (null != otherLianShaContextData) { if (otherLianShaContextData.KillNum >= 2) { huanYingSiYuanLianshaOver = new HuanYingSiYuanLianshaOver(); huanYingSiYuanLianshaOver.KillerName = huanYingSiYuanAddScore.Name; huanYingSiYuanLianshaOver.KillerZoneID = huanYingSiYuanAddScore.ZoneID; huanYingSiYuanLianshaOver.KillerOccupation = client.ClientData.Occupation; huanYingSiYuanLianshaOver.KillerSide = huanYingSiYuanAddScore.Side; huanYingSiYuanLianshaOver.KilledName = Global.FormatRoleName4(other); huanYingSiYuanLianshaOver.KilledZoneID = other.ClientData.ZoneID; huanYingSiYuanLianshaOver.KilledOccupation = other.ClientData.Occupation; huanYingSiYuanLianshaOver.KilledSide = other.ClientData.BattleWhichSide; huanYingSiYuanLianshaOver.ExtScore = otherLianShaContextData.KillNum * 5; addScore += huanYingSiYuanLianshaOver.ExtScore; } otherLianShaContextData.KillNum = 0; } addScore += RuntimeData.TempleMiragePK; huanYingSiYuanAddScore.Score = addScore; if (client.ClientData.BattleWhichSide == 1) { huanYingSiYuanScene.ScoreInfoData.Score1 += addScore; if (huanYingSiYuanScene.ScoreInfoData.Score1 >= RuntimeData.TempleMirageWin) { CompleteHuanYingSiYuanScene(huanYingSiYuanScene, 1); } } else { huanYingSiYuanScene.ScoreInfoData.Score2 += addScore; if (huanYingSiYuanScene.ScoreInfoData.Score2 >= RuntimeData.TempleMirageWin) { CompleteHuanYingSiYuanScene(huanYingSiYuanScene, 2); } } if (null != clientLianShaContextData) { clientLianShaContextData.TotalScore += addScore; } //GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_HYSY_ADD_SCORE, huanYingSiYuanAddScore, huanYingSiYuanScene.CopyMap); GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_HYSY_SCORE_INFO, huanYingSiYuanScene.ScoreInfoData, huanYingSiYuanScene.CopyMap); if (null != huanYingSiYuanLianSha) { GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_HYSY_LIANSHA, huanYingSiYuanLianSha, huanYingSiYuanScene.CopyMap); } if (null != huanYingSiYuanLianshaOver) { GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_HYSY_STOP_LIANSHA, huanYingSiYuanLianshaOver, huanYingSiYuanScene.CopyMap); } } } } }