using Snxxz.UI; using System.Collections; using UnityEngine; using UnityEngine.Events; public class GA_Hero : GActorPlayerBase, ICtrlGA { public static Vector3 MapOffset; public static bool s_MapSwitching = false; public static bool s_Flying = false; //public static bool s_MapSwitching //{ // get // { // return _s_MapSwitching; // } // set // { // _s_MapSwitching = value; // Debug.Log("---------- MapSwitching: " + value); // } //} public static event UnityAction OnStateEnter; public static event UnityAction OnStateEnd; public static void CallOnStateEnter(float length) { if (OnStateEnter != null) { OnStateEnter(length); } } public static void CallOnStateEnd() { if (OnStateEnd != null) { OnStateEnd(); } } /// /// 当切换锁定目标的时候, 为空的时候id=0 /// public static event UnityAction OnLockTargetChanged; public static void CallLockTargetChanged(uint sid) { if (OnLockTargetChanged != null) { OnLockTargetChanged(sid); #if UNITY_EDITOR Debug.LogFormat("执行了切换锁定目标的逻辑: {0}", sid); #endif } } public static event UnityAction OnKillPlayer; private GameObject m_Light; public static bool forceAutoFight; /// /// 锁定目标对象 /// 用户点击锁定, 被攻击锁定攻击者... /// private GActor m_LockTarget; public GActor LockTarget { get { return m_LockTarget; } set { if (m_LockTarget == value) { return; } #if UNITY_EDITOR // if (m_LockTarget is GA_Player && value != null && !(value is GA_Player)) // { // if (value != null) // { // Debug.LogFormat("更换了锁定目标: {0} ", value.ServerInstID); // } // } #endif m_LockTarget = value; } } public MapArea currentBossArea; private uint _atkBossID; public uint atkBossID { get { return _atkBossID; } set { if (_atkBossID != value) { _atkBossID = value; //if (_atkBossID != 0) //{ // Debug.LogFormat("设置攻击的bossID: {0}", atkBossID); //} //else //{ // Debug.LogFormat("清空bossID"); //} } } } public sealed override int NextAction { get { return base.NextAction; } set { base.NextAction = value; } } public sealed override GActor SelectTarget { get { return base.SelectTarget; } set { if (base.SelectTarget == value) { return; } IOtherSelectable _selectable = base.SelectTarget as IOtherSelectable; if (_selectable != null) { _selectable.OnUnSelect(); } _selectable = value as IOtherSelectable; if (_selectable != null) { _selectable.OnSelect(); } base.SelectTarget = value; } } public HeroBehaviour Behaviour; public HeroAIHandler aiHandler; private Bhv_FindEnemy m_BhvFindEnemy; private float m_LastSyncTickTime = 0; protected sealed override void OnInit(GameNetPackBasic package) { CharacterController _charCtrl = Root.AddMissingComponent(); _charCtrl.height = 1.2f; _charCtrl.center = new Vector3(0, .6f, 0); _charCtrl.radius = .4f; Root.gameObject.layer = LayerUtility.Hero; m_BhvFindEnemy = Root.AddMissingComponent(); JobSetup = JobSetupConfig.Get(PlayerDatas.Instance.baseData.Job); Behaviour = new HeroBehaviour(this); aiHandler = new HeroAIHandler(); base.OnInit(package); ActorInfo.familyID = PlayerDatas.Instance.baseData.FamilyId; OnPathFinding += MapTransferUtility.Instance.OnHeroPathFinding; UserInputHandler.OnCirclePanelTouched += OnCirclePanelTouched; UserInputHandler.OnClickedFloor += OnClickedFloor; HeroBehaviour.OnStopHandupAI += OnStopHandupAI; ModelCenter.Instance.GetModel().appearanceChangeEvent += SwitchSuit; m_CalculAutoFightTime = Time.realtimeSinceStartup; m_LastSyncTickTime = Time.realtimeSinceStartup; } public override void SyncSuitEffect(bool onOrOff = true) { if (m_SuitEffectShow == onOrOff) { return; } var _itemConfig = ItemConfig.Get((int)ClothesItemID); if (_itemConfig != null) { Material _replaceMat = null; if (onOrOff) { _replaceMat = MaterialLoader.LoadClothesMaterial(_itemConfig.ChangeOrd, false, true); } else { _replaceMat = MaterialLoader.LoadClothesMaterial(_itemConfig.ChangeOrd, false, false); } if (_replaceMat) { MaterialLoader.Release(m_SMRenderer.material); m_SMRenderer.material = m_Material = _replaceMat; MaterialUtility.SwitchXrayShader(m_SMRenderer.material, true); } } m_SuitEffectShow = onOrOff; } protected sealed override void OnUnit() { Object.Destroy(m_BhvFindEnemy); m_BhvFindEnemy = null; OnPathFinding -= MapTransferUtility.Instance.OnHeroPathFinding; OnPathFindStop -= MapTransferUtility.Instance.OnHeroStopPathFind; ModelCenter.Instance.GetModel().appearanceChangeEvent -= SwitchSuit; Behaviour = null; m_LockTarget = null; MaterialUtility.SwitchXrayShader(m_Material, false); MaterialUtility.SwitchXrayShader(m_WingMaterial, false); MaterialUtility.SwitchXrayShader(m_HorseMaterial, false); MaterialUtility.SwitchXrayShader(m_WeaponMaterial, false); MaterialUtility.SwitchXrayShader(m_SecondaryMaterial, false); m_WingMaterial = null; m_HorseMaterial = null; m_WeaponMaterial = null; m_SecondaryMaterial = null; ReleaseLight(); base.OnUnit(); } public sealed override void Destroy() { } public float forceAutoFightTime; private float m_ChkOpenAutoEscapeTime; private DungeonModel m_DungeonModel; public DungeonModel dungeonModel { get { return m_DungeonModel ?? (m_DungeonModel = ModelCenter.Instance.GetModel()); } } protected sealed override void OnUpdate() { base.OnUpdate(); if (!forceAutoFight) { if (Time.realtimeSinceStartup - m_ChkOpenAutoEscapeTime > 2f) { int _dgDataID = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); if (DungeonOpenTimeConfig.Has(_dgDataID)) { var dungeonOpen = DungeonOpenTimeConfig.Get(_dgDataID); if (dungeonOpen.DoFight == 1) { forceAutoFight = true; } } m_ChkOpenAutoEscapeTime = Time.realtimeSinceStartup; } } if (forceAutoFight #if UNITY_EDITOR && RuntimeLogUtility.s_forceAutoFight #endif && !CrossServerUtility.IsCrossServerOneVsOne()) { if (!aiHandler.IsAuto() && !BossShowModel.Instance.BossShowing) { if (IsIdle()) { if (Time.realtimeSinceStartup - forceAutoFightTime > 6) { Behaviour.StartHandupAI(); } } else { forceAutoFightTime = Time.realtimeSinceStartup; } } } aiHandler.Update(); bool _isCastSkill = false; if (SkillMgr.CurCastSkill != null) { _isCastSkill = !SkillMgr.CurCastSkill.SkillCompelete; } // 每隔1分钟同步一次tick if (Time.realtimeSinceStartup - m_LastSyncTickTime > 60) { PlayerDatas.Instance.RequestWorldTick(); m_LastSyncTickTime = Time.realtimeSinceStartup; } if ((IsRun() || IsIdle() || UserInputHandler.isTouched) && UserInputHandler.IsMoveValid()) { float _distance = MathUtility.DistanceSqrtXZ(PrevPos, Pos); if (_distance > 0.25f) { PrevPos = Pos; UserInputHandler.Send_CB409_tagCMPyMove(); } } HandleBossAttack(); if (CrossServerUtility.IsCrossServerOneVsOne()) { if (SelectTarget is GActorNpcFight) { GAMgr.Instance.Release(SelectTarget); SelectTarget = null; } if (LockTarget is GActorNpcFight || LockTarget == null) { var _list = GAMgr.Instance.GetTypeList(E_ActorClassType.Player); if (_list != null && _list.Count > 0) { LockTarget = _list[0]; } } } } private void HandleBossAttack() { if (PlayerDatas.Instance.extersion.bossState != 1) { 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) { 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) { continue; } if (_area.IsPosOut(_player.Pos)) { SelectTarget = null; if (atkBossID != 0) { MapTransferUtility.Instance.MoveToNPC((int)atkBossID); } } } } } protected sealed override void OnFixedUpdate() { base.OnFixedUpdate(); if (IsRushing) { m_RushTime += Time.deltaTime; if (m_RushTime > 2) { StopRush(); } } if (PlayerDatas.Instance.baseData.MapID == 31340) { if (State == E_ActorState.AutoRun || State == E_ActorState.CtrlRun) { var _collect = GAMgr.Instance.GetCloserCollectNpc(Pos) as GA_NpcCollect; if (_collect != null) { var _dist = MathUtility.DistanceSqrtXZ(_collect.Pos, Pos); if (_dist < 6) { if ((SelectTarget == null || SelectTarget is GA_NpcCollect) && SelectTarget != _collect) { SelectTarget = _collect; _collect.Arrive(); } } } } else if (State == E_ActorState.Idle) { if (SelectTarget == null) { var _collect = GAMgr.Instance.GetCloserCollectNpc(Pos) as GA_NpcCollect; if (_collect != null) { var _dist = MathUtility.DistanceSqrtXZ(_collect.Pos, Pos); if (_dist < 6) { SelectTarget = _collect; _collect.Arrive(); } } } } } } protected sealed override void OnLateUpdate() { base.OnLateUpdate(); UpdateAutoStartFight(); } protected sealed override void OnPutonClothes(uint clothesItemID, GameObject clothed) { clothed.layer = LayerUtility.Hero; SkinnedMeshRenderer _renderer = clothed.GetComponentInChildren(); _renderer.gameObject.SetLayer(LayerUtility.Hero, false); MaterialUtility.SwitchXrayShader(m_Material, true); GameObjectPoolManager.Instance.AddDontDestroyGoInstID(clothed.GetInstanceID()); StopRush(); Behaviour.StopKillUntilDieAI(); } protected sealed override void OnPutonSecondary(uint secondaryItemID, GameObject secondary) { if (secondary) { Renderer _renderer = secondary.GetComponent(); if (_renderer) { _renderer.gameObject.SetLayer(LayerUtility.Hero, false); m_SecondaryMaterial = _renderer.material; MaterialUtility.SwitchXrayShader(m_SecondaryMaterial, true); } GameObjectPoolManager.Instance.AddDontDestroyGoInstID(secondary.GetInstanceID()); } } protected sealed override void OnPutonWeapon(uint weaponItemID, GameObject weapon) { Renderer _renderer = weapon.GetComponent(); if (_renderer) { _renderer.gameObject.SetLayer(LayerUtility.Hero, false); m_WeaponMaterial = _renderer.material; MaterialUtility.SwitchXrayShader(m_WeaponMaterial, true); } GameObjectPoolManager.Instance.AddDontDestroyGoInstID(weapon.GetInstanceID()); } protected sealed override void OnPutonWing(uint wingItemID, GameObject wing) { wing.gameObject.layer = LayerUtility.Hero; SkinnedMeshRenderer _renderer = wing.GetComponentInChildren(); _renderer.gameObject.SetLayer(LayerUtility.Hero, false); m_WingMaterial = _renderer.material; MaterialUtility.SwitchXrayShader(m_WingMaterial, true); GameObjectPoolManager.Instance.AddDontDestroyGoInstID(wing.GetInstanceID()); } protected sealed override void OnSwitchHorse(uint horseID, GameObject horse) { horse.layer = LayerUtility.Hero; SkinnedMeshRenderer _renderer = horse.GetComponentInChildren(); _renderer.gameObject.SetLayer(LayerUtility.Hero, false); m_HorseMaterial = _renderer.material; MaterialUtility.SwitchXrayShader(m_HorseMaterial, true); GameObjectPoolManager.Instance.AddDontDestroyGoInstID(horse.GetInstanceID()); } public override void OnHorse(byte upOrDown) { if (upOrDown == 1) { var _packModel = ModelCenter.Instance.GetModel(); var _horseItem = _packModel.GetItemByIndex(PackType.Equip, 5); if (_horseItem != null) { SwitchHorse((uint)_horseItem.itemId); } } else { SwitchHorse(0); } } public sealed override void RefreshLifeBar(ulong value) { } public override void RequestName() { ReleaseName(); if (MovingState == E_MovingState.Ride) { m_HeadUpName = HeadUpName.RequireHeadUpName(HeadUpName.Pattern.Hero, MP_Name1, 0, CameraController.Instance.CameraObject); } else { m_HeadUpName = HeadUpName.RequireHeadUpName(HeadUpName.Pattern.Hero, MP_Name, 0, CameraController.Instance.CameraObject); } // 称号 var titleModel = ModelCenter.Instance.GetModel(); var _title = titleModel.GetTitleEquip(); uint _titleID = 0; if (_title != null && titleModel.IsTitleGain(_title.id) && PlayerDatas.Instance.baseData.MapID != 31160)//上古战场不显示称号 { _titleID = (uint)_title.id; } var _familyName = string.Empty; // 仙盟 if (PlayerDatas.Instance.baseData.FamilyId != 0) { _familyName = PlayerDatas.Instance.baseData.FamilyName; } m_HeadUpName.SetPlayerInfo(PlayerDatas.Instance.baseData.realmLevel, _titleID, PlayerDatas.Instance.baseData.PlayerName, _familyName, false); if (StatusMgr.Instance.IsExist(ServerInstID, StatusMgr.Instance.bossBelongBuffID)) { m_HeadUpName.SetBossDropout(true); } base.SetFairyLeagueHeadUp(PlayerDatas.Instance.baseData.MapID == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON); CheckAncientHeadUp(); } public sealed override void SwitchRedName(bool on) { if (PlayerDatas.Instance.baseData.MapID == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON) { return; } base.SwitchRedName(on); } public sealed override void SwitchYellowName(bool on) { if (PlayerDatas.Instance.baseData.MapID == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON) { return; } base.SwitchYellowName(on); } public sealed override void Die() { LockTarget = null; SelectTarget = null; base.Die(); } public sealed override void Collect() { if (ActorInfo.serverDie) { return; } base.Collect(); Behaviour.StopKillUntilDieAI(); Behaviour.StopHandupAI(); } public bool CanMove() { if (IsHurt() || IsRushing || ActorInfo.serverDie || State == E_ActorState.Mocked || IsDaZuo() || BossShowModel.Instance.BossShowing || heavenBattleModel.IsBattlePrepare) { return false; } if (StatusMgr.IsValid() && !StatusMgr.Instance.CanMove(ServerInstID)) { return false; } if (State == E_ActorState.Idle || State == E_ActorState.AutoRun || State == E_ActorState.CtrlRun) { return true; } return false; } public bool CanRotate() { return State != E_ActorState.Mocked && !IsDaZuo(); } private HeavenBattleModel m_HeavenBattleModel = null; public HeavenBattleModel heavenBattleModel { get { return m_HeavenBattleModel ?? (m_HeavenBattleModel = ModelCenter.Instance.GetModel()); } } public bool CanCommonAtk() { return !MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.Safe) && !MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.RebornSafe) && !IsStun() && !IsHurt() && !IsDaZuo() && State != E_ActorState.Roll && !s_MapSwitching && !heavenBattleModel.IsBattlePrepare && !m_Beating; } public bool CanCastSkill() { return !MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.Safe) && !MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.RebornSafe) && !IsStun() && !IsHurt() && !IsDaZuo() && State != E_ActorState.Roll && State != E_ActorState.Mocked && !s_MapSwitching && !heavenBattleModel.IsBattlePrepare && !m_Beating; } public void StopAll() { Behaviour.StopHandupAI(true); Behaviour.StopKillUntilDieAI(); if (State == E_ActorState.AutoRun || PathFindStatus == E_PathFindStatus.Moving) { StopPathFind(); } if (!ActorInfo.serverDie) { IdleImmediate(); } } public void SwitchTarget() { if (m_BhvFindEnemy) { m_BhvFindEnemy.SwitchTarget(); } } public void RequestLight() { ReleaseLight(); if (PlayerDatas.Instance.baseData.MapID == 31160) { m_Light = Object.Instantiate(BuiltInLoader.LoadPrefab("Zhujiao_Pointlight")); m_Light.transform.SetParent(MP_Name); m_Light.transform.localPosition = Vector3.zero; m_Light.transform.localScale = Vector3.one; m_Light.transform.localRotation = Quaternion.identity; } } public void ReleaseLight() { if (m_Light) { Object.Destroy(m_Light); m_Light = null; } } public void KillPlayer(uint sid, string name) { #if UNITY_EDITOR Debug.LogFormat("杀死了玩家: {0}, {1}", sid, name); #endif if (OnKillPlayer != null) { OnKillPlayer(sid, name); } } #region 地图区域相关处理 private int m_CurMapArea = 1 << (int)MapArea.E_Type.Normal; public int CurMapArea { get { return m_CurMapArea; } set { m_CurMapArea = value; } } public static UnityAction OnEnterOrExitArea; public void EnterArea(int type) { if (type < 3000) { CurMapArea |= type; if (OnEnterOrExitArea != null) { OnEnterOrExitArea((MapArea.E_Type)type, true); } if (type == (int)MapArea.E_Type.RebornSafe || type == (int)MapArea.E_Type.Safe) { if (aiHandler.IsAuto()) { Behaviour.StopKillUntilDieAI(); Behaviour.StopHandupAI(); } } } } public void ExitArea(int type) { if (type < 3000) { CurMapArea &= ~type; if (OnEnterOrExitArea != null) { OnEnterOrExitArea((MapArea.E_Type)type, false); } } } #endregion #region 站前冲锋相关逻辑 public bool IsNeedRush(float distanceSqrt) { if (IsRushing) { return false; } if (PreFightMission.Instance.IsFinished()) { if (Time.time - m_LastRushTime <= JobSetup.RushInterval * Constants.F_DELTA) { return false; } } if (JobSetup.RushTargetType == 0 || (JobSetup.RushTargetType == 2 && SelectTarget is GActorNpcFight) || (JobSetup.RushTargetType == 1 && SelectTarget is GA_Player)) { float _minDistSqrt = JobSetup.RushMinDist * Constants.F_DELTA; _minDistSqrt *= _minDistSqrt; float _maxDistSqrt = JobSetup.RushMaxDist * Constants.F_DELTA; _maxDistSqrt *= _maxDistSqrt; if (PreFightMission.Instance.IsFinished() == false) { _minDistSqrt = 1f; _maxDistSqrt = 100f; } if (distanceSqrt > _minDistSqrt && distanceSqrt < _maxDistSqrt) { return true; } } return false; } #endregion #region 攻击相关逻辑 public void ComAtk() { if (MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.Safe) || MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.RebornSafe)) { SysNotifyMgr.Instance.ShowTip("NoFighting"); return; } if (!CanCommonAtk()) { return; } if (!PreFightMission.Instance.IsFinished()) { if (SelectTarget != null) { if (!PathFinder.WalkAble(Pos, SelectTarget.Pos)) { SelectTarget = GAMgr.Instance.FindAtkTarget(Pos, 10, 360); } } } if (UserInputHandler.isTouched) { int _index = nextComAtkIndex == -1 ? 0 : nextComAtkIndex; int _skillID = GetCommonSkillID(_index); Skill _skill = SkillMgr.Get(_skillID); float _skillDist = _skill.skillInfo.config.AtkDist * .5f; GActor _dirTarget = GAMgr.Instance.FindAtkTarget(Pos, _skillDist, 90); if (_dirTarget != null) { LockTarget = _dirTarget; SelectTarget = _dirTarget; } } Behaviour.StartKillUntilDieAI(); } public void CastSkill(int skillID) { if (!PreFightMission.Instance.IsFinished()) { if (SelectTarget != null) { destForward = -SelectTarget.Forward; Forward = destForward; } } if (MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.Safe) || MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.RebornSafe)) { SysNotifyMgr.Instance.ShowTip("NoFighting"); return; } if (!PreFightMission.Instance.IsFinished() && skillID == 190) { } else { if (!CanCastSkill()) { return; } } Skill _skill = SkillMgr.Get(skillID); if (!_skill.IsValid()) { return; } if (SelectTarget != null) { E_SkillCastTarget _targetType = (E_SkillCastTarget)(_skill.skillInfo.config.Tag / 10); E_SkillCastType _castType = (E_SkillCastType)(_skill.skillInfo.config.Tag % 10); if (_castType == E_SkillCastType.NeedTarget) { if (!AttackHandler.CanAttack(_targetType, this, SelectTarget as GActorFight)) { SysNotifyMgr.Instance.ShowTip("SkillSelectedTarget"); return; } } } if (skillID == 190) { if (State != E_ActorState.Roll) { if (SkillMgr.CurCastSkill != null) { int _id = SkillMgr.CurCastSkill.id; foreach (var _skillID in JobSetup.RollBreakSkillList) { if (_id == _skillID) { SkillMgr.CurCastSkill.SkillCompelete = true; Behaviour.StartKillUntilDieAI(skillID); aiHandler.currentType = E_HeroAIType.None; Behaviour.DoAttack(_skill); return; } } } } } if (MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.Safe) || MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.RebornSafe)) { SysNotifyMgr.Instance.ShowTip("NoFighting"); return; } Behaviour.StartKillUntilDieAI(skillID); } #endregion #region 自动开启自动战斗逻辑 private float m_CalculAutoFightTime; public float calculAutoFightTime { get { return m_CalculAutoFightTime; } } TaskModel m_TaskModel; TaskModel taskmodel { get { return m_TaskModel ?? (m_TaskModel = ModelCenter.Instance.GetModel()); } } PlayerMainDate m_MainModel; PlayerMainDate onMainModel { get { return m_MainModel ?? (m_MainModel = ModelCenter.Instance.GetModel()); } } public float Second = 2.5f; private float timeType = 0f; private bool isbool = true; private void UpdateAutoStartFight() { timeType += Time.deltaTime; if (timeType > Second && !isbool) { timeType = 0f; isbool = true; } if (timeType > Second && isbool) { timeType = 0f; } if (DTCB105_tagMCPlayerWallow.forceOffLine) { return; } if (ActorInfo.serverDie) { return; } // if (taskmodel.IsTaskMove()) // { // if (Time.realtimeSinceStartup - m_CalculAutoFightTime > taskmodel.TaskAutoTime // && !NewBieCenter.Instance.inGuiding // && TaskModel.IsOPenAutoResolve()) // { // if (PlayerDatas.Instance.hero != null && PlayerDatas.Instance.hero.State == E_ActorState.AutoRun // && onMainModel.MoveBool) // { // } // else // { // SnxxzGame.Instance.StartCoroutine(Wait()); // } // } // } if (MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.Safe) || MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.RebornSafe)) { return; } // 打坐状态下不自动开始战斗 if (IsDaZuo()) { return; } if (!aiHandler.IsAuto()) { if (HangUpSetModel.Instance.GetBool(HangUpAutoBoolType.isAutoHangUp)) { if (Time.realtimeSinceStartup - m_CalculAutoFightTime > 60 && !NewBieCenter.Instance.inGuiding && TaskModel.IsOPenAutoResolve()) { MapTransferUtility.Instance.Clear(); Behaviour.StartHandupAI(); } } } } private IEnumerator Wait() { if (WindowCenter.Instance.IsOpen("VipExperienceWin") || !WindowCenter.Instance.IsOpen("MainInterfaceWin")) { yield break; } yield return WaitingForSecondConst.WaitMS1500; if (PlayerDatas.Instance.extersion.bossState == 1) { yield break; } var IsAuto = PlayerDatas.Instance.hero.aiHandler.IsAuto(); var inDungeon = IsDungeon();//是否在副本中 if (inDungeon || IsAuto) { yield break; } if (PlayerDatas.Instance.hero != null && PlayerDatas.Instance.hero.State == E_ActorState.AutoRun && onMainModel.MoveBool) { yield break; } if (isbool) { isbool = false; taskmodel.TaskMove(taskmodel.currentMission); } } private bool IsDungeon()//判断是否在副本中 { var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = MapConfig.Get(mapId); return mapConfig != null && mapConfig.MapFBType != 0; } private SFXController m_ArrowEffect; public void ShowArrow(bool showOrHide) { if (showOrHide) { if (!m_ArrowEffect) { m_ArrowEffect = SFXPlayUtility.Instance.PlayBattleEffect(1052, this); if (PlayerDatas.Instance.baseData.MapID == 31230) { FaceTargetXZ _f = m_ArrowEffect.gameObject.AddComponent(); _f.targetPos = new Vector3(5.877f, 7.73f, 20.243f); } } } else { if (m_ArrowEffect) { FaceTargetXZ _f = m_ArrowEffect.GetComponent(); Object.Destroy(_f); SFXPlayUtility.Instance.Release(m_ArrowEffect); m_ArrowEffect = null; } } } private void OnClickedFloor(Vector3 dest) { m_CalculAutoFightTime = Time.realtimeSinceStartup; } private void OnCirclePanelTouched() { m_CalculAutoFightTime = Time.realtimeSinceStartup; } private void OnStopHandupAI() { m_CalculAutoFightTime = Time.realtimeSinceStartup; } #endregion }