using System; using System.Collections; using UnityEngine; using WebSocketSharp; public class Boss_Shaga : BossMobActor { [Header("스킬1 쿨타임")] public float Skill1CoolTime = 18f; [Header("스킬1 데미지")] public float Skill1Dmg = 1.6f; [Header("스킬1 디버프 시간")] public float Skill1FrostTime = 6f; [Header("스킬1 공속 감소")] public float Skill1AtkSpd = 0.5f; [Header("스킬1 이속 감소")] public float Skill1MovSpd = 0.5f; [Header("---------------------------------------")] public bool Perforation_Line; [Header("스킬2 쿨타임")] public float Skill2CoolTime = 20f; [Header("스킬2 쿨타임")] public float Skill2ChargingTime = 3f; [Header("스킬2 소환물 유지 시간")] public float Skill2SummonLifeTime = 12f; [Header("스킬2 소환 몬스터 ID")] public int Skill2SummonMobID = 176; [Header("스킬2 소환 갯수")] public int Skill2SummonCount = 2; [Header("스킬2 스탯 계승")] public float Skill2StatRate = 0.5f; SkillListTableData m_Frost = new SkillListTableData { e_SkillExtraType = eSkillExtraType.Frost, 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("BossShaga_Skill1_Indicator", 0); m_Frost.f_ExtraValue1 = Skill1FrostTime; m_Frost.f_ExtraValue2 = Skill1AtkSpd; m_Frost.f_ExtraValue3 = Skill1MovSpd; 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_skill1"); dic_indicator[0].SetActive(true); dic_indicator[0].transform.position = DSUtil.Get_RandomPos_onNavMesh(Get_position(), 2f, 3f); yield return new WaitForSeconds(0.5f); dic_indicator[0].SetActive(false); Check_Battle(); Init(true, false); } protected override float Get_Skill1Dmg() { return Skill1Dmg; } protected override Vector3 Get_Skill1Pos() { return dic_indicator[0].transform.position; } protected override void Set_Skill1Projectile(ProjectileBase pb) { var pc = pb as Projectile_Curved; pc.Launch_Curved(Get_position(), Get_Skill1Pos(), 1.5f, 4f, true, () => { ProjectileInfo.Ins.Shoot_Projectile("FieldBoss/Shaga_Skill1Ground", this, null, 1f, pc.transform.position, Skill1FrostTime, pb => { var pd = pb.Get_ProjectTileData(); pd.e_SkillExtraType = m_Frost.e_SkillExtraType; pd.m_skillTypeConfigTable = table_skilltypeconfig.Ins.Get_Data_orNull(pd.e_SkillExtraType); pd.m_SkillListTableData = m_Frost; }); }); } IEnumerator Co_Skill2() { Change_MobStatus(eMobStatus.Skill); AnimationPlay("boss_skill2charging"); InGameInfo.Ins.Show_Effect("Effect_Shaga_Charging", this, eEffectLocation.Mid, Skill2ChargingTime); yield return new WaitForSeconds(Skill2ChargingTime); AnimationPlay("boss_skill2attack"); // 무적 상태의 소환물 2기 소환 var mobData = table_monsterlist.Ins.Get_Data_orNull(Skill2SummonMobID); for (int i = 0; i < Skill2SummonCount; i++) { AddrResourceMgr.Ins.LoadObject(mobData.s_MonsterPrefab, handle => { var mob = DSUtil.Get_Clone(handle.Result, transform.parent); AddrResourceMgr.Ins.Set_AddressableReleaseSelf(mob.gameObject); ActorInfo.Ins.Add_Actor(mob, eRole.Mob, m_MonsterAppearData.n_SpawnerID, mobData.s_MonsterPrefab); mob.Set(true, null, null, m_MonsterAppearData.n_SpawnerID, false); var summonpos = DSUtil.Get_RandomPos_onNavMesh(Get_position(), 2f); mob.Set(mobData, summonpos, null, 0, Skill2SummonLifeTime); InGameInfo.Ins.Show_Effect("Effect_Shaga_Summon", summonpos); mob.m_SubRole = eSubRol.Summon; mob.On_Regen(); mob.Get_StatInfo().Reset_byStatInfo(Get_StatInfo(), Skill2StatRate); list_summon.Add(mob); }); } yield return new WaitForSeconds(0.5f); Check_Battle(); Init(false, true); yield return new WaitForSeconds(Skill2SummonLifeTime - 0.5f); list_summon.ForEach(f => f.Off()); } }