From c694eddfa8fc34edb59257552416ad6e1996444b Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期一, 21 一月 2019 15:49:21 +0800
Subject: [PATCH] 【1.5.100】与跨服boss 战斗中选中boss区域外玩家出现异常

---
 Fight/GameActor/Bhv_FindEnemy.cs   |    6 ++
 Fight/Actor/Skill/AttackHandler.cs |    5 +-
 Fight/Actor/HeroBehaviour.cs       |    8 +---
 Fight/GameActor/GA_Hero.cs         |   71 +++++++++++++++++++++++------------
 Fight/Actor/AI/HeroAI_Auto.cs      |    2 
 Fight/Actor/AI/HeroAI_D5_Hlyy.cs   |    1 
 6 files changed, 56 insertions(+), 37 deletions(-)

diff --git a/Fight/Actor/AI/HeroAI_Auto.cs b/Fight/Actor/AI/HeroAI_Auto.cs
index 4557640..80a6314 100644
--- a/Fight/Actor/AI/HeroAI_Auto.cs
+++ b/Fight/Actor/AI/HeroAI_Auto.cs
@@ -327,7 +327,7 @@
             return;
         }
 
-        _hero.LockTarget = _hero.SelectTarget = _atkTarget;
+        _hero.SelectTarget = _atkTarget;
 
         // 鍒ゆ柇鎶�鑳借寖鍥�, 涓嶅湪鍙噴鏀捐寖鍥撮渶瑕佺Щ鍔ㄨ嚦鐩爣
         float _compareDist = _skill.skillInfo.config.AtkDist * .5f;
diff --git a/Fight/Actor/AI/HeroAI_D5_Hlyy.cs b/Fight/Actor/AI/HeroAI_D5_Hlyy.cs
index 29b7965..6383c07 100644
--- a/Fight/Actor/AI/HeroAI_D5_Hlyy.cs
+++ b/Fight/Actor/AI/HeroAI_D5_Hlyy.cs
@@ -125,7 +125,6 @@
             else
             {
                 _hero.SelectTarget = _actor;
-                _hero.LockTarget = _actor;
             }
         }
 
diff --git a/Fight/Actor/HeroBehaviour.cs b/Fight/Actor/HeroBehaviour.cs
index 0262455..f6be85a 100644
--- a/Fight/Actor/HeroBehaviour.cs
+++ b/Fight/Actor/HeroBehaviour.cs
@@ -131,14 +131,10 @@
         {
             _fightTarget = m_Hero.SelectTarget as GActorFight;
 
-            if (_fightTarget != null && _fightTarget.CanAtked())
-            {
-                m_Hero.LockTarget = m_Hero.SelectTarget;
-            }
-            else
+            if (_fightTarget == null || !_fightTarget.CanAtked())
             {
                 float _range = m_Hero.JobSetup.SearchEnemyDist * Constants.F_DELTA;
-                m_Hero.LockTarget = m_Hero.SelectTarget = GAMgr.Instance.FindAtkTarget(m_Hero.Pos, _range, 360);
+                m_Hero.SelectTarget = GAMgr.Instance.FindAtkTarget(m_Hero.Pos, _range, 360);
                 _fightTarget = m_Hero.SelectTarget as GActorFight;
             }
         }
diff --git a/Fight/Actor/Skill/AttackHandler.cs b/Fight/Actor/Skill/AttackHandler.cs
index 4ba08b7..6e9fd2f 100644
--- a/Fight/Actor/Skill/AttackHandler.cs
+++ b/Fight/Actor/Skill/AttackHandler.cs
@@ -191,11 +191,10 @@
                 if (target.ServerInstID == PlayerDatas.Instance.PlayerId)
                 {
                     GA_Hero _hero = target as GA_Hero;
-                    if (_hero.LockTarget == null)
+                    if (_hero.SelectTarget == null)
                     {
-                        _hero.LockTarget = attacker;
+                        _hero.SelectTarget = attacker;
                     }
-
                 }
             }
         }
diff --git a/Fight/GameActor/Bhv_FindEnemy.cs b/Fight/GameActor/Bhv_FindEnemy.cs
index 0559b4a..579c0bf 100644
--- a/Fight/GameActor/Bhv_FindEnemy.cs
+++ b/Fight/GameActor/Bhv_FindEnemy.cs
@@ -113,7 +113,7 @@
                 _chkDis += 1;
             }
 
-            if (_distSqrt > Mathf.Pow(reFindSelectTargetDist, _chkDis))
+            if (_distSqrt > Mathf.Pow(_chkDis, 2))
             {
                 var _actor = GAMgr.Instance.FindAtkTarget(_hero.Pos, reSetLockTargetDist);
                 if (!(_actor is GActorFight))
@@ -125,6 +125,10 @@
                     if (_actor.CanAtked())
                     {
                         _hero.SelectTarget = _actor;
+                        if (_actor is GA_NpcFightBoss && _hero.LockTarget == null)
+                        {
+                            _hero.LockTarget = _actor;
+                        }
                     }
                 }
             }
diff --git a/Fight/GameActor/GA_Hero.cs b/Fight/GameActor/GA_Hero.cs
index 9c1162a..5eefc6d 100644
--- a/Fight/GameActor/GA_Hero.cs
+++ b/Fight/GameActor/GA_Hero.cs
@@ -372,35 +372,56 @@
             }
         }
 
-        if (PlayerDatas.Instance.extersion.bossState == 1)
+        HandleBossAttack();
+    }
+
+    private void HandleBossAttack()
+    {
+        if (PlayerDatas.Instance.extersion.bossState != 1)
         {
-            GA_Player _player = SelectTarget as GA_Player;
-            if (_player != null)
+            return;
+        }
+
+        if (LockTarget != null)
+        {
+            return;
+        }
+
+        GA_Player _player = SelectTarget as GA_Player;
+
+        if (_player == null)
+        {
+            return;
+        }
+
+        foreach (var _key in DungeonStage.s_MapAreaDict.Keys)
+        {
+            if ((int)_key < 3000)
             {
-                foreach (var _key in DungeonStage.s_MapAreaDict.Keys)
+                continue;
+            }
+
+            var _areaList = DungeonStage.s_MapAreaDict[_key];
+            if (_areaList == null)
+            {
+                continue;
+            }
+
+            MapArea _area = null;
+            for (int i = 0; i < _areaList.Count; ++i)
+            {
+                _area = _areaList[i];
+                if (_area != currentBossArea)
                 {
-                    if ((int)_key >= 3000)
+                    continue;
+                }
+
+                if (_area.IsPosOut(_player.Pos))
+                {
+                    SelectTarget = null;
+                    if (atkBossID != 0)
                     {
-                        var _areaList = DungeonStage.s_MapAreaDict[_key];
-                        if (_areaList != null)
-                        {
-                            MapArea _area = null;
-                            for (int i = 0; i < _areaList.Count; ++i)
-                            {
-                                _area = _areaList[i];
-                                if (_area == currentBossArea)
-                                {
-                                    if (_area.IsPosOut(_player.Pos))
-                                    {
-                                        LockTarget = SelectTarget = null;
-                                        if (atkBossID != 0)
-                                        {
-                                            MapTransferUtility.Instance.MoveToNPC((int)atkBossID);
-                                        }
-                                    }
-                                }
-                            }
-                        }
+                        MapTransferUtility.Instance.MoveToNPC((int)atkBossID);
                     }
                 }
             }

--
Gitblit v1.8.0