//使用技能 protected virtual CommandReplyType CheckUseSkill(UseSkillCommand cmd) { if (CacheTransform == null) { return(CommandReplyType.NO); } if (CannotControlSelf()) { ShowWarning("100012"); return(CommandReplyType.NO); } if (CurFsmStateType == ActorFsmStateType.FSM_SKILL) { return(CommandReplyType.NO); } if (GetActorState(ActorStateType.IsRide)) { ShowWarning("100011"); return(CommandReplyType.NO); } SkillTree skill = m_ActorSkill.GetSkill(cmd.SkillPos); if (skill == null) { return(CommandReplyType.NO); } if (skill.IsInCD()) { return(CommandReplyType.NO); } switch (skill.CostType) { case SkillCostType.Hp: { bool success = UseHp(skill.CostNum); if (!success) { return(CommandReplyType.NO); } } break; case SkillCostType.Mp: { bool success = UseMp(skill.CostNum); if (!success) { return(CommandReplyType.NO); } } break; } cmd.LastTime = skill.StateTime; ChangeState <ActorSkillFsm>(cmd); return(CommandReplyType.YES); }
protected override void OnEnter(IFsm <ActorBase> fsm) { base.OnEnter(fsm); UseSkillCommand useSkillCommand = m_Command as UseSkillCommand; if (useSkillCommand == null) { Log.Error("UseSkillCommand convert failure."); return; } if (useSkillCommand.LastTime > 0) { GameEntry.Timer.Register(useSkillCommand.LastTime, Break); } m_Owner.ApplyRootMotion(false); m_Owner.OnUseSkill(useSkillCommand); }
/// <summary> /// 使用技能 /// </summary> public virtual void OnUseSkill(UseSkillCommand ev) { StopPathFinding(); LookAtEnemy(); m_ActorSkill.UseSkill(ev.SkillPos); }