From b9885c49f34e6b697dca9cc2b268640d112df8da Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期一, 08 七月 2019 22:03:33 +0800
Subject: [PATCH] 4445 【BUG】【主干】跨服pk打机器人,技能用了没特效没伤害

---
 System/CrossServerOneVsOneClient/ClientCrossServerOneVsOneStage.cs |   84 +++++++++++++++++++++++++++++++++---------
 1 files changed, 66 insertions(+), 18 deletions(-)

diff --git a/System/CrossServerOneVsOneClient/ClientCrossServerOneVsOneStage.cs b/System/CrossServerOneVsOneClient/ClientCrossServerOneVsOneStage.cs
index 6866a42..6c3ac8e 100644
--- a/System/CrossServerOneVsOneClient/ClientCrossServerOneVsOneStage.cs
+++ b/System/CrossServerOneVsOneClient/ClientCrossServerOneVsOneStage.cs
@@ -66,12 +66,28 @@
         var maxHp = CrossServerLogin.Instance.oneVsOnePlayerData.opponentMaxHp;
         var scoreClass = CrossServerOneVsOnePlayerInfo.Instance.DanLV;
         playerInfo = ClientCrossServerOneVsOne.GetRandomOpponentPlayerInfo(scoreClass, job, playerName, level, maxHp);
-        opponentPlayer = GAMgr.Instance.ReqClntPlayer<GA_PVPClientPlayer>(playerInfo, E_ActorGroup.Enemy);
+        // opponentPlayer = GAMgr.Instance.ReqClntPlayer<GA_PVPClientPlayer>(playerInfo, E_ActorGroup.Enemy);
+        PersonalEnemy.Create(30000, ClientCrossServerOneVsOne.myPlace == 1 ? rightBornPoint : leftBornPoint, playerInfo);
+        PersonalEnemy.OnPlayerAppear += OnPlayerAppear;
+        SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
 
-        opponentPlayer.Pos = ClientCrossServerOneVsOne.myPlace == 1 ? rightBornPoint : leftBornPoint;
         PlayerDatas.Instance.hero.Pos = ClientCrossServerOneVsOne.myPlace == 1 ? leftBornPoint : rightBornPoint;
         CameraController.Instance.Apply();
+    }
 
+    private void OnPlayerAppear(GA_PVPClientPlayer player)
+    {
+        opponentPlayer = player;
+    }
+
+    private IEnumerator WaitForPlayerCreate()
+    {
+        while (opponentPlayer == null)
+        {
+            yield return null;
+        }
+
+        opponentPlayer.Pos = ClientCrossServerOneVsOne.myPlace == 1 ? rightBornPoint : leftBornPoint;
         currentStage = new WaitStartStage();
         currentStage.Begin();
     }
@@ -148,10 +164,10 @@
             pkStageType = PKStageType.WaitStart;
             duration = 3f;
             Debug.LogFormat("杩涘叆闃舵锛歿0}", pkStageType);
-            opponentPlayer.ActorInfo.ResetHp((int)playerInfo.maxHp, -1, (int)playerInfo.maxHp, -1);
+            // opponentPlayer.ActorInfo.ResetHp((int)playerInfo.maxHp, -1, (int)playerInfo.maxHp, -1);
             opponentPlayer.ActorInfo.serverDie = false;
             opponentPlayer.IdleImmediate();
-            opponentPlayer.SkillMgr.ResetAllCD();
+            // opponentPlayer.SkillMgr.ResetAllCD();
             GA_PVPClientPlayer.AutoAI(false);
 
             PlayerDatas.Instance.baseData.HP = (uint)PlayerDatas.Instance.extersion.MaxHP;
@@ -178,7 +194,7 @@
         public override void Update()
         {
             timer += Time.deltaTime;
-            completed = timer >= duration;
+            completed = timer >= duration && opponentPlayer != null;
         }
     }
 
@@ -196,13 +212,13 @@
             figthCompleted = false;
             restTimeTimer = 0f;
 
+            opponentPlayer.Pos = ClientCrossServerOneVsOne.myPlace == 1 ? rightBornPoint : leftBornPoint;
             PlayerDatas.Instance.hero.Behaviour.StartHandupAI();
             GA_PVPClientPlayer.AutoAI(true);
             opponentPlayer.SelectTarget = PlayerDatas.Instance.hero;
             PlayerDatas.Instance.hero.SelectTarget = opponentPlayer;
-#if UNITY_EDITOR
+
             Debug.LogFormat("杩涘叆闃舵锛歿0}", pkStageType);
-#endif
         }
 
         public override void End()
@@ -225,6 +241,7 @@
 
             if (fightInfo.isOver)
             {
+                PersonalEnemy.ReleasePlayer(opponentPlayer);
                 opponentPlayer.Destroy();
             }
             else
@@ -282,22 +299,33 @@
         public override void Begin()
         {
             pkStageType = PKStageType.RoundPrepare;
+            GA_PVPClientPlayer.AutoAI(false);
             duration = 3f;
             Debug.LogFormat("杩涘叆闃舵锛歿0}", pkStageType);
 
             if (fightInfo.roundWinnerIds[fightInfo.roundWinnerIds.Count - 1] == PlayerDatas.Instance.baseData.PlayerID)
             {
-                PlayerDatas.Instance.hero.SelectTarget = opponentPlayer;
-                opponentPlayer.ActorInfo.ResetHp((int)playerInfo.maxHp, -1, (int)playerInfo.maxHp, -1);
-                opponentPlayer.ActorInfo.serverDie = false;
-                opponentPlayer.IdleImmediate();
-                opponentPlayer.SkillMgr.ResetAllCD();
+                opponentPlayer = null;
+                var job = CrossServerLogin.Instance.oneVsOnePlayerData.opponentJob;
+                var playerName = CrossServerLogin.Instance.oneVsOnePlayerData.opponentName;
+                var level = CrossServerLogin.Instance.oneVsOnePlayerData.opponentLevel;
+                var maxHp = CrossServerLogin.Instance.oneVsOnePlayerData.opponentMaxHp;
+                var scoreClass = CrossServerOneVsOnePlayerInfo.Instance.DanLV;
+                playerInfo = ClientCrossServerOneVsOne.GetRandomOpponentPlayerInfo(scoreClass, job, playerName, level, maxHp);
+                PersonalEnemy.Create(30000, ClientCrossServerOneVsOne.myPlace == 1 ? rightBornPoint : leftBornPoint, playerInfo);
+                PersonalEnemy.OnPlayerAppear += OnPlayerAppear;
+                SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
+
+                // PlayerDatas.Instance.hero.SelectTarget = opponentPlayer;
+                // opponentPlayer.ActorInfo.ResetHp((int)playerInfo.maxHp, -1, (int)playerInfo.maxHp, -1);
+                // opponentPlayer.ActorInfo.serverDie = false;
+                // opponentPlayer.IdleImmediate();
+                // opponentPlayer.SkillMgr.ResetAllCD();
 
                 if (PlayerDatas.Instance.hero.ActorInfo.RealHp <= 0)
                 {
                     PlayerDatas.Instance.baseData.HP = 1;
-                    var maxHp = PlayerDatas.Instance.extersion.MaxHP;
-                    PlayerDatas.Instance.hero.ActorInfo.ResetHp(1, -1, maxHp, -1);
+                    PlayerDatas.Instance.hero.ActorInfo.ResetHp(1, -1, PlayerDatas.Instance.extersion.MaxHP, -1);
                     PlayerDatas.Instance.FightRefreshPlayerHp(1);
                     PlayerDatas.Instance.hero.IdleImmediate();
                 }
@@ -313,14 +341,34 @@
 
                 if (opponentPlayer.ActorInfo.RealHp <= 0)
                 {
-                    opponentPlayer.ActorInfo.ResetHp(1, -1, (int)playerInfo.maxHp, -1);
-                    opponentPlayer.ActorInfo.serverDie = false;
-                    opponentPlayer.IdleImmediate();
+                    opponentPlayer = null;
+                    // opponentPlayer.ActorInfo.ResetHp(1, -1, (int)playerInfo.maxHp, -1);
+                    // opponentPlayer.ActorInfo.serverDie = false;
+                    // opponentPlayer.IdleImmediate();
+                    playerInfo.hp = 1;
+                    PersonalEnemy.Create(30000, ClientCrossServerOneVsOne.myPlace == 1 ? rightBornPoint : leftBornPoint, playerInfo);
+                    PersonalEnemy.OnPlayerAppear += OnPlayerAppear;
+                    SnxxzGame.Instance.StartCoroutine(WaitForPlayerCreate());
                 }
             }
 
             PlayerDatas.Instance.hero.Pos = ClientCrossServerOneVsOne.myPlace == 1 ? leftBornPoint : rightBornPoint;
+        }
+
+        private void OnPlayerAppear(GA_PVPClientPlayer player)
+        {
+            opponentPlayer = player;
+        }
+
+        private IEnumerator WaitForPlayerCreate()
+        {
+            while (opponentPlayer == null)
+            {
+                yield return null;
+            }
+
             opponentPlayer.Pos = ClientCrossServerOneVsOne.myPlace == 1 ? rightBornPoint : leftBornPoint;
+            opponentPlayer.ActorInfo.ResetHp((int)playerInfo.maxHp, -1, (int)playerInfo.maxHp, -1);
         }
 
         public override void End()
@@ -332,7 +380,7 @@
         public override void Update()
         {
             timer += Time.deltaTime;
-            completed = timer >= duration;
+            completed = timer >= duration && opponentPlayer != null;
         }
     }
 

--
Gitblit v1.8.0