Exemple #1
0
        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);
                    }
                }
            }
        }
Exemple #2
0
        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);
                        }
                    }
                }
            }
        }