/// <summary> /// 魔法、物理攻撃10%カット /// </summary> /// <param name="target">Target.</param> /// <param name="time">効果時間.</param> override public void Skill4(GameObject target = null, float effectTime = 0) { if (target != null) { JobBase jb = target.GetComponent <JobBase>(); jb.Set_c_Status(ConditionStatus.ALL_DAMAGE_DOWN); } }
/// <summary> /// ハーガル /// スロウ状態にする /// </summary> /// <param name="target">Target.</param> /// <param name="time">効果時間.</param> override public void Skill3(GameObject target = null, float effectTime = 0) { JobBase jb = _target.GetComponent <JobBase> (); this.GetComponentInChildren <Animator>().SetTrigger("isAttack"); StartCoroutine(Damage(target, skillList [2], 1)); jb.Set_c_Status(ConditionStatus.SLOW); jb.StartCoroutine(jb.StatusCounter(ConditionStatus.SLOW, effectTime)); }
/// <summary> /// 異常状態を与える /// </summary> /// <param name="target">Target</param> /// <param name="sc">Skill Script</param> /// <param name="a_time">エフェクトを出す時間</param> /// <param name="effect">エフェクトのpath</param> /// <param name="e_time"> 異常状態を与える時間</param> /// <param name="status_array"> 異常状態の配列</param> /// <returns></returns> public IEnumerator StatusMagic(GameObject target, SkillScript sc, float a_time, string effect, float e_time, ConditionStatus[] status_array) { if (sc.s_targetNum == TargetNum.MUTIPLE) { CreateRange(); GameObject.FindGameObjectWithTag("Range").GetComponent <SphereCollider>().radius = sc.s_range; } float timer = 0; bool useMagic = false; while (true) { timer += Time.deltaTime; if (timer >= a_time && !useMagic) { GameObject effectObj = Instantiate(Resources.Load(effect), target.transform.position, Quaternion.identity) as GameObject; effectObj.transform.parent = this.transform; useMagic = true; } if (timer >= e_time) { try { if (sc.s_targetNum == TargetNum.MUTIPLE) { foreach (var r_target in GameObject.FindGameObjectWithTag("Range").GetComponent <RangeDetect>().targets) { // TODO: Player / Enemy を判断できるように if (r_target.layer != LayerMask.NameToLayer("Player")) { continue; } JobBase jb = r_target.GetComponent <JobBase>(); foreach (var status in status_array) { jb.Set_c_Status(status); jb.StartCoroutine(jb.StatusCounter(status, sc.s_effectTime)); } } } else { if (target.layer == LayerMask.NameToLayer("Player")) { JobBase jb = target.GetComponent <JobBase>(); foreach (var status in status_array) { jb.Set_c_Status(status); jb.StartCoroutine(jb.StatusCounter(status, sc.s_effectTime)); } } } if (GameObject.FindGameObjectWithTag("Range")) { DeleteRange(); } StartCoroutine(SkillRecast(sc.gameObject, sc.s_recast)); yield break; } catch (MissingReferenceException) { yield break; } } yield return(new WaitForEndOfFrame()); } }