81 lines
2.5 KiB
C#
81 lines
2.5 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Linq;
|
|
using CodeStage.AntiCheat.ObscuredTypes;
|
|
using UnityEngine;
|
|
using Random = UnityEngine.Random;
|
|
|
|
public class SelectFairyBase : ProjectileBase
|
|
{
|
|
public eCC m_Status;
|
|
public GameObject[] gos; // 0 요정, 1 cc 이펙트
|
|
public float CCTime = 3f;
|
|
|
|
bool MobLoad;
|
|
|
|
public override void Set(ProjectileData _data)
|
|
{
|
|
base.Set(_data);
|
|
StartCoroutine(Co_Update());
|
|
}
|
|
|
|
IEnumerator Co_Update()
|
|
{
|
|
float delay = CCTime;
|
|
ObscuredInt FairyCount = 1;
|
|
FairyCount.RandomizeCryptoKey();
|
|
while (true)
|
|
{
|
|
gos[1].SetActive(false);
|
|
gos[0].transform.position = gos[1].transform.position = MyValue.MyPC.Get_Center_position() + Random.insideUnitSphere * 1f + Vector3.up;
|
|
yield return new WaitForSeconds(delay);
|
|
if (MobLoad)
|
|
{
|
|
MobLoad = false;
|
|
yield return new WaitForSeconds(0.1f);
|
|
}
|
|
|
|
if (FairyCount == 1)
|
|
{
|
|
switch (m_Status)
|
|
{
|
|
case eCC.Freeze: FairyCount = Get_FairyCount(eEffect.Select_FrostFairy2); break;
|
|
case eCC.KnockedAirborne: FairyCount = Get_FairyCount(eEffect.Select_WindFairy2); break;
|
|
case eCC.KnockBack: FairyCount = Get_FairyCount(eEffect.Select_HikikomoriFairy2); break;
|
|
}
|
|
if (FairyCount > 1)
|
|
FairyCount.RandomizeCryptoKey();
|
|
}
|
|
|
|
gos[1].SetActive(true);
|
|
if (FairyCount == 1)
|
|
{
|
|
var mob = ActorInfo.Ins.Get_Nearest_EnemyActor_orNull(m_ProjectTileData.shooter.IsEnemy(), transform.position);
|
|
if (mob != null && !mob.IsDead())
|
|
Set_CC(mob);
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < FairyCount; i++)
|
|
{
|
|
var mobs = Get_Enemies();
|
|
mobs = mobs.OrderBy(o => Guid.NewGuid()).ToList();
|
|
if (mobs.Count > i)
|
|
Set_CC(mobs[i]);
|
|
}
|
|
}
|
|
yield return new WaitForSeconds(1f);
|
|
delay = CCTime - 1f;
|
|
}
|
|
}
|
|
|
|
void Set_CC(Actor _actor)
|
|
{
|
|
switch (m_Status)
|
|
{
|
|
case eCC.Freeze: _actor.Freeze(2f); break;
|
|
case eCC.KnockedAirborne: _actor.KnockedAirborne(1f); break;
|
|
case eCC.KnockBack: _actor.KnockBack(0.75f); break;
|
|
}
|
|
}
|
|
} |