using UnityEngine; using System.Collections.Generic; using Snxxz.UI; public class HeroAI_D2_LockMissionTarget : HeroAI_Auto { private List randomNpcID = new List(); 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.updateMissionEvent += UpdateMissionEvent; m_HandupRange = 50; } private void UpdateMissionEvent() { DungeonModel _dungeonModel = ModelCenter.Instance.GetModel(); int _dataMapID = _dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); if (_dataMapID == 0) { return; } List _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.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; } }