using System; using System.Collections; using UnityEngine; using Random = UnityEngine.Random; public class Boss_FlowerDryad : BossMobActor { [Header("스킬1 쿨타임")] public float Skill1CoolTime = 20f; [Header("스킬1 차징 시간")] public float Skill1ChargingTime = 3f; [Header("스킬1 즉시 회복량")] public float Skill1Heal = 0.1f; [Header("스킬1 주변 몬스터 찾는 거리")] public float Skill1FindDist = 3f; [Header("스킬1 회복 지속 시간")] public float Skill1LifeTime = 6f; [Header("스킬1 회복 딜레이")] public float Skill1DelayTime = 1f; [Header("스킬1 회복 딜레이 당 회복량")] public float Skill1PerHeal = 0.01f; [Header("---------------------------------------")] public bool Perforation_Line; [Header("스킬2 쿨타임")] public float Skill2CoolTime = 18f; [Header("스킬2 차징시간")] public float Skill2ChargingTime = 3f; [Header("스킬2 데미지")] public float Skill2Dmg = 5.2f; [Header("스킬2 독 지속 시간")] public float Skill2PoisonTime = 5f; [Header("스킬2 독 데미지 딜레이")] public float Skill2PoisonGapTime = 1f; [Header("스킬2 독 데미지")] public float Skill2PoisonDmg = .3f; [Header("스킬2 에어본 지속 시간")] public float Skill2AirborneTime = 1.5f; SkillListTableData m_Poison = new SkillListTableData { e_SkillExtraType = eSkillExtraType.Poison, f_ExtraValue4 = 1f }; public override void Set(MonsterTableData mobtable, Vector3 pos, Action actDie, int order, float noDmgTime = 0f) { base.Set(mobtable, pos, actDie, order, noDmgTime); Load_Indicator("BossFlowerDryad_Skill2_Indicator", 0); m_Poison.f_ExtraValue1 = Skill2PoisonTime; m_Poison.f_ExtraValue2 = Skill2PoisonGapTime; m_Poison.f_ExtraValue3 = Skill2PoisonDmg; CoolTime_Skill1 = 1f; CoolTime_Skill2 = 2f; } protected override void Init(bool initSkill1CoolTime, bool initSkill2CoolTime) { base.Init(initSkill1CoolTime, initSkill2CoolTime); if (initSkill1CoolTime) CoolTime_Skill1 = Skill1CoolTime; if (initSkill2CoolTime) CoolTime_Skill2 = Skill2CoolTime; } protected override void Update() { base.Update(); if (IsDead() || IsStop) return; if (UseSkillIndex == 1 && MobStatus != eMobStatus.Skill) StartCoroutine(Co_Skill1()); else if (UseSkillIndex == 2 && MobStatus != eMobStatus.Skill) StartCoroutine(Co_Skill2()); } IEnumerator Co_Skill1() { Change_MobStatus(eMobStatus.Skill); AnimationPlay("boss_skill1charging"); InGameInfo.Ins.Show_Effect("Effect_FlowerDryad_Skill1Charging", this, eEffectLocation.Mid, Skill1ChargingTime); yield return new WaitForSeconds(Skill1ChargingTime); AnimationPlay("boss_skill1end"); yield return new WaitForSeconds(0.5f); InGameInfo.Ins.Show_Effect("Effect_FlowerDryad_Skill1", Get_position()); var actors = ActorInfo.Ins.Get_AlliesActors(m_Enemy, Get_position(), Skill1FindDist); for (int i = 0; i < actors.Count; i++) { actors[i].Heal(Skill1Heal); InGameInfo.Ins.Show_Effect("Effect_Heal", actors[i], eEffectLocation.Bottom, 2f); } yield return new WaitForSeconds(0.5f); for (int i = 0; i < actors.Count; i++) actors[i].DotHeal(Skill1LifeTime, Skill1DelayTime, actors[i].Get_MaxHP() * Skill1PerHeal, 0, "Effect_FlowerDryad_Heal"); Check_Battle(); Init(true, false); } IEnumerator Co_Skill2() { Change_MobStatus(eMobStatus.Skill); AnimationPlay("boss_skill2"); dic_indicator[0].SetActive(true); dic_indicator[0].transform.position = Get_position(); InGameInfo.Ins.Show_Effect("Effect_FlowerDryad_Skill2Charging", Get_position()); yield return new WaitForSeconds(Skill2ChargingTime); dic_indicator[0].SetActive(false); AnimationPlay("boss_skill2attack"); yield return new WaitForSeconds(0.1f); InGameInfo.Ins.Show_Effect("Effect_FlowerDryad_Skill2", this, eEffectLocation.Bottom, m_MonsterTableData.f_ProjectileLifeTime3); yield return new WaitForSeconds(3f); Check_Battle(); Init(false, true); } protected override float Get_Skill2Dmg() { return Skill2Dmg; } protected override void Set_Skill2Projectile(ProjectileBase pb) { var pd = pb.Get_ProjectTileData(); pd.e_SkillExtraType = m_Poison.e_SkillExtraType; pd.m_skillTypeConfigTable = table_skilltypeconfig.Ins.Get_Data_orNull(pd.e_SkillExtraType); pd.m_SkillListTableData = m_Poison; pd.Action_OnHit = hitter => { hitter.KnockedAirborne(Skill2AirborneTime); }; } }