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