using UnityEngine;
|
using System.Collections.Generic;
|
using vnxbqy.UI;
|
|
public class HeroAI_D2_LockMissionTarget : HeroAI_Auto
|
{
|
private List<int> randomNpcID = new List<int>();
|
|
public sealed override bool Condition()
|
{
|
GA_Hero _hero = PlayerDatas.Instance.hero;
|
if (_hero == null)
|
{
|
return false;
|
}
|
|
if (_hero.aiHandler.currentType == E_HeroAIType.D2_LockMissionTarget)
|
{
|
return true;
|
}
|
|
return base.Condition();
|
}
|
|
protected override void OnEnter()
|
{
|
m_LockTargetNpcID = 0;
|
|
var _dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
|
_dungeonModel.updateMissionEvent += UpdateMissionEvent;
|
|
m_HandupRange = 50;
|
}
|
|
private void UpdateMissionEvent()
|
{
|
DungeonModel _dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
|
int _dataMapID = _dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
|
|
if (_dataMapID == 0)
|
{
|
return;
|
}
|
|
List<DungeonTarget> _targets = _dungeonModel.GetTargets(_dataMapID, _dungeonModel.mission.lineID, _dungeonModel.mission.step);
|
|
if (_targets == null)
|
{
|
return;
|
}
|
|
DungeonTarget _target;
|
DungeonNPCInfo _killNpc;
|
|
// Debug.LogFormat("========= 更新副本信息: DataMapID: {0}, LineID: {1} Step: {2}, =========", _dataMapID, _dungeonModel.mission.lineID, _dungeonModel.mission.step);
|
|
randomNpcID.Clear();
|
|
for (int i = 0; i < _targets.Count; ++i)
|
{
|
_target = _targets[i];
|
|
// Debug.LogFormat("|-- 副本目标类型: {0}", _target.targetType);
|
|
if (_target.targetType == DungeonTargetType.NPC)
|
{
|
if (_dungeonModel.mission.npc == null)
|
{
|
continue;
|
}
|
|
for (int j = 0; j < _dungeonModel.mission.npc.Length; ++j)
|
{
|
_killNpc = _dungeonModel.mission.npc[j];
|
if (_killNpc.NPCID == _target.targetCondition)
|
{
|
if (_killNpc.killCnt < _target.targetValue)
|
{
|
randomNpcID.Add(_killNpc.NPCID);
|
break;
|
}
|
}
|
}
|
}
|
}
|
|
if (randomNpcID.Count > 0)
|
{
|
var _result = randomNpcID[Random.Range(0, randomNpcID.Count - 1)];
|
if (m_LockTargetNpcID != _result)
|
{
|
m_LockTargetNpcID = _result;
|
Debug.LogFormat("替换锁定的任务NPC: {0}", m_LockTargetNpcID);
|
}
|
}
|
}
|
|
protected sealed override void OnExit()
|
{
|
var _dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
|
_dungeonModel.updateMissionEvent -= UpdateMissionEvent;
|
}
|
|
public sealed override bool IsOver()
|
{
|
if (base.IsOver())
|
{
|
return true;
|
}
|
|
return PlayerDatas.Instance.hero.aiHandler.currentType
|
!= E_HeroAIType.D2_LockMissionTarget;
|
}
|
|
protected sealed override GActorFight SelectTarget()
|
{
|
return DecideAttackTarget(PlayerDatas.Instance.hero.Pos,
|
m_HandupRange,
|
m_LockTargetNpcID);
|
}
|
|
protected sealed override bool OnUpdate()
|
{
|
return false;
|
}
|
}
|