| | |
| | | m_LastUseSkillTime = 0;
|
| | | m_PauseStartTime = 0;
|
| | | m_LockTargetSID = 0;
|
| | | m_UserClickSkillID = 0;
|
| | | m_UserClickSkillID = -1;
|
| | | m_NeedMoveToPos = false;
|
| | | m_HandUpSkill = null;
|
| | | m_State = 0;
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | // 决策此次要使用的技能
|
| | | _skill = DecideUserSkill(m_HandUpSkill);
|
| | |
|
| | | break;
|
| | | case 1:// 暂停状态
|
| | |
|
| | | if (m_NeedMoveToPos)
|
| | | {
|
| | | if (StatusMgr.Instance.CanMove(PlayerDatas.Instance.PlayerId))
|
| | |
| | | m_NeedMoveToPos = false;
|
| | | }
|
| | |
|
| | | if (m_UserClickSkillID == 0)
|
| | | if (Time.realtimeSinceStartup - m_PauseStartTime > m_PauseResumeTime)
|
| | | {
|
| | | int _index = _hero.nextComAtkIndex;
|
| | | if (_index == -1)
|
| | | {
|
| | | _index = 0;
|
| | | }
|
| | | m_UserClickSkillID = _hero.GetCommonSkillID(_index);
|
| | | }
|
| | |
|
| | | if (m_UserClickSkillID != -1 && CanCastActiveUse(m_UserClickSkillID))
|
| | | {
|
| | | // 决策此次要使用的技能
|
| | | m_DecideSkill = _hero.SkillMgr.Get(m_UserClickSkillID);
|
| | | m_UserClickSkillID = -1;
|
| | | }
|
| | | else
|
| | | {
|
| | | if (Time.realtimeSinceStartup - m_PauseStartTime > m_PauseResumeTime)
|
| | | {
|
| | | m_State = 0;
|
| | | }
|
| | | m_State = 0;
|
| | | }
|
| | |
|
| | | break;
|
| | |
| | | return;
|
| | | }
|
| | |
|
| | | if (m_DecideSkill != null)
|
| | | if (m_UserClickSkillID == 0)
|
| | | {
|
| | | _skill = m_DecideSkill;
|
| | | int _index = _hero.nextComAtkIndex;
|
| | | if (_index == -1)
|
| | | {
|
| | | _index = 0;
|
| | | }
|
| | | m_UserClickSkillID = _hero.GetCommonSkillID(_index);
|
| | | }
|
| | |
|
| | | if (m_State == 0 || m_UserClickSkillID != -1)
|
| | | {
|
| | | // 决策此次要使用的技能
|
| | | _skill = DecideUserSkill(m_HandUpSkill, m_UserClickSkillID);
|
| | | }
|
| | |
|
| | | if (_skill == null)
|
| | |
| | | return;
|
| | | }
|
| | |
|
| | | bool _forceMove = _skill.skillInfo.soFile != null && _skill.skillInfo.soFile.forceMove;
|
| | | // 判断周围是否有可攻击目标
|
| | | GActorFight _atkTarget = null;
|
| | |
|
| | | if (!_forceMove && !IsSkillNeedMove(_skill.skillInfo.config.Tag, (E_SkillType)_skill.skillInfo.config.SkillType))
|
| | | // 处理玩家主动切换攻击目标行为
|
| | | if (m_LockTargetSID != 0)
|
| | | {
|
| | | _hero.Behaviour.DoAttack(_skill);
|
| | | m_DecideSkill = null;
|
| | | _atkTarget = GAMgr.Instance.GetBySID(m_LockTargetSID) as GActorFight;
|
| | |
|
| | | if (_atkTarget == null
|
| | | || !_atkTarget.CanAtked())
|
| | | {
|
| | | m_LockTargetSID = 0;
|
| | | _atkTarget = null;
|
| | | }
|
| | | }
|
| | | else if (_hero.aiHandler.PriorityNpcID > 0)
|
| | | {
|
| | | _atkTarget = DecideAttackTarget(_hero.Pos, m_HandupRange, _hero.aiHandler.PriorityNpcID);
|
| | | }
|
| | | else if (m_LockTargetNpcID > 0)
|
| | | {
|
| | | _atkTarget = DecideAttackTarget(_hero.Pos, m_HandupRange, m_LockTargetNpcID);
|
| | | }
|
| | | else
|
| | | {
|
| | | // 判断周围是否有可攻击目标
|
| | | GActorFight _atkTarget = null;
|
| | | _atkTarget = SelectTarget();
|
| | | }
|
| | |
|
| | | // 处理玩家主动切换攻击目标行为
|
| | | if (m_LockTargetSID != 0)
|
| | | {
|
| | | _atkTarget = GAMgr.Instance.GetBySID(m_LockTargetSID) as GActorFight;
|
| | | bool _forceMove = _skill.skillInfo.soFile != null && _skill.skillInfo.soFile.forceMove;
|
| | | if (_atkTarget == null
|
| | | || _atkTarget.ActorInfo.serverDie
|
| | | || (!_forceMove && !IsSkillNeedMove(_skill.skillInfo.config.Tag, (E_SkillType)_skill.skillInfo.config.SkillType)))
|
| | | {
|
| | | _hero.Behaviour.DoAttack(_skill);
|
| | | m_DecideSkill = null;
|
| | | return;
|
| | | }
|
| | |
|
| | | if (_atkTarget == null
|
| | | || !_atkTarget.CanAtked())
|
| | | {
|
| | | m_LockTargetSID = 0;
|
| | | _atkTarget = null;
|
| | | }
|
| | | }
|
| | | else if (_hero.aiHandler.PriorityNpcID > 0)
|
| | | {
|
| | | _atkTarget = DecideAttackTarget(_hero.Pos, m_HandupRange, _hero.aiHandler.PriorityNpcID);
|
| | | }
|
| | | else if (m_LockTargetNpcID > 0)
|
| | | {
|
| | | _atkTarget = DecideAttackTarget(_hero.Pos, m_HandupRange, m_LockTargetNpcID);
|
| | | }
|
| | | else
|
| | | {
|
| | | _atkTarget = SelectTarget();
|
| | | }
|
| | |
|
| | | if (_atkTarget == null)
|
| | | {
|
| | | _hero.StopRush();
|
| | | return;
|
| | | }
|
| | |
|
| | | _hero.LockTarget = _hero.SelectTarget = _atkTarget;
|
| | |
|
| | | // 判断技能范围, 不在可释放范围需要移动至目标
|
| | | float _compareDist = _skill.skillInfo.config.AtkDist * .5f;
|
| | | float _compareDistSqrt = _compareDist * _compareDist;
|
| | |
|
| | | // 计算当前和目标的距离
|
| | | float _currentDistSqrt = MathUtility.DistanceSqrtXZ(_hero.Pos, _atkTarget.Pos);
|
| | | // 比较距离
|
| | | if (_currentDistSqrt > _compareDistSqrt)
|
| | | {
|
| | | if ((StatusMgr.IsValid()
|
| | | && !StatusMgr.Instance.CanMove(_hero.ServerInstID)))
|
| | | {
|
| | | return;
|
| | | }
|
| | |
|
| | | // 移动至目标
|
| | | _hero.MoveToTarget(_atkTarget, _compareDist);
|
| | |
|
| | | // 判断是否需要冲锋
|
| | | if (_hero.IsNeedRush(_currentDistSqrt))
|
| | | {
|
| | | _hero.StartRush();
|
| | | }
|
| | |
|
| | | return;
|
| | | }
|
| | |
|
| | | // 停止冲锋逻辑
|
| | | if (_atkTarget == null)
|
| | | {
|
| | | _hero.StopRush();
|
| | | return;
|
| | | }
|
| | |
|
| | | _hero.LockTarget = _hero.SelectTarget = _atkTarget;
|
| | |
|
| | | // 判断技能范围, 不在可释放范围需要移动至目标
|
| | | float _compareDist = _skill.skillInfo.config.AtkDist * .5f;
|
| | | float _compareDistSqrt = _compareDist * _compareDist;
|
| | |
|
| | | // 计算当前和目标的距离
|
| | | float _currentDistSqrt = MathUtility.DistanceSqrtXZ(_hero.Pos, _atkTarget.Pos);
|
| | | // 比较距离
|
| | | if (_currentDistSqrt > _compareDistSqrt)
|
| | | {
|
| | | if ((StatusMgr.IsValid()
|
| | | && !StatusMgr.Instance.CanMove(_hero.ServerInstID)))
|
| | | {
|
| | | return;
|
| | | }
|
| | |
|
| | | // 移动至目标
|
| | | _hero.MoveToTarget(_atkTarget, _compareDist);
|
| | |
|
| | | // 判断是否需要冲锋
|
| | | if (_hero.IsNeedRush(_currentDistSqrt))
|
| | | {
|
| | | _hero.StartRush();
|
| | | }
|
| | |
|
| | | return;
|
| | | }
|
| | |
|
| | | // 停止冲锋逻辑
|
| | | _hero.StopRush();
|
| | |
|
| | | if (IsSkillNeedMove(_skill.skillInfo.config.Tag, (E_SkillType)_skill.skillInfo.config.SkillType))
|
| | | {
|
| | | Vector3 _forward = MathUtility.ForwardXZ(_atkTarget.Pos, _hero.Pos);
|
| | | _hero.destForward = _hero.Forward = _forward;
|
| | | }
|
| | |
|
| | | // 判断是否普通, 调用不同的接口
|
| | | if (_hero.Behaviour.IsComAtk(_skill.id))
|
| | | // 判断是否普通, 调用不同的接口
|
| | | if (_hero.Behaviour.IsComAtk(_skill.id))
|
| | | {
|
| | | _hero.Behaviour.DoCommonAttack();
|
| | | if (m_DecideSkill != null && m_DecideSkill.id == _skill.id)
|
| | | {
|
| | | _hero.Behaviour.DoCommonAttack();
|
| | | if (m_DecideSkill != null && m_DecideSkill.id == _skill.id)
|
| | | {
|
| | | m_DecideSkill = null;
|
| | | }
|
| | | if (_skill.id == m_UserClickSkillID)
|
| | | {
|
| | | m_UserClickSkillID = -1;
|
| | | }
|
| | | m_DecideSkill = null;
|
| | | }
|
| | | else
|
| | | if (_skill.id == m_UserClickSkillID)
|
| | | {
|
| | | _hero.Behaviour.DoAttack(_skill);
|
| | | if (m_DecideSkill != null && m_DecideSkill.id == _skill.id)
|
| | | {
|
| | | m_DecideSkill = null;
|
| | | }
|
| | | if (_skill.id == m_UserClickSkillID)
|
| | | {
|
| | | m_UserClickSkillID = -1;
|
| | | }
|
| | | m_UserClickSkillID = -1;
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | _hero.Behaviour.DoAttack(_skill);
|
| | | if (m_DecideSkill != null && m_DecideSkill.id == _skill.id)
|
| | | {
|
| | | m_DecideSkill = null;
|
| | | }
|
| | | if (_skill.id == m_UserClickSkillID)
|
| | | {
|
| | | m_UserClickSkillID = -1;
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | m_LastUseSkillTime = Time.realtimeSinceStartup;
|
| | | }
|
| | |
| | | {
|
| | | _hero.StopRush();
|
| | | }
|
| | |
|
| | | Skill _skill = _hero.SkillMgr.CurCastSkill;
|
| | | if (_skill != null)
|
| | | {
|
| | | if (!_skill.SkillCompelete)
|
| | | {
|
| | | m_UserClickSkillID = -1;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | private Vector3 m_TargetPos;
|
| | |
| | | // SysNotifyMgr.Instance.ShowTip("HookPrompt_Manual");
|
| | | //}
|
| | | m_NeedMoveToPos = false;
|
| | | m_PauseStartTime = Time.realtimeSinceStartup;
|
| | | m_State = 1;
|
| | | }
|
| | |
|
| | | private void OnLockTargetChanged(uint sid)
|