화염 소용돌이
This commit is contained in:
parent
e559dba7eb
commit
a956122732
File diff suppressed because it is too large
Load Diff
|
|
@ -393,44 +393,19 @@ public class Actor : MyCoroutine
|
|||
{
|
||||
var atkData = Get_CCData(eCC.ATK_Up);
|
||||
var addAtk = atkData.CCTime > 0 ? atkData.CCDmg : 0f;
|
||||
double baseDmg = _pd.BaseDmg > 0 ? _pd.BaseDmg : m_Stat.Get_Stat(eStat.BaseDmg);
|
||||
|
||||
var dinfo = new DamageInfo();
|
||||
dinfo.Beater = this;
|
||||
dinfo.Beater_pd = _pd;
|
||||
dinfo.Damage = (addAtk + baseDmg) * _attackrate;
|
||||
dinfo.PiercingDmg = baseDmg * (m_Stat.Get_Stat(eStat.PIERCING_Multiplier) + dinfo.Get_AddValue(eAddExtraType.Add_Piercing_Multiplier_bySpiriBless));
|
||||
dinfo.BaseDmg = _pd.BaseDmg > 0 ? _pd.BaseDmg : m_Stat.Get_Stat(eStat.BaseDmg);
|
||||
dinfo.Damage = (addAtk + dinfo.BaseDmg) * _attackrate;
|
||||
dinfo.PiercingDmg = dinfo.BaseDmg * (m_Stat.Get_Stat(eStat.PIERCING_Multiplier) + dinfo.Get_AddValue(eAddExtraType.Add_Piercing_Multiplier_bySpiriBless));
|
||||
dinfo.TextColor = HUDBase.Get_TextColor(m_AttackType);
|
||||
|
||||
if (dic_ccData[eCC.PiercingBuff].CCTime > 0)
|
||||
dinfo.PiercingDmg += baseDmg * m_Stat.Get_Stat(eStat.PiercingBuff_byAttack);
|
||||
dinfo.PiercingDmg += dinfo.BaseDmg * m_Stat.Get_Stat(eStat.PiercingBuff_byAttack);
|
||||
|
||||
// 크리티컬 판정
|
||||
dinfo.Critical = eStat.None;
|
||||
if (m_AttackType == eAttackType.Magic)
|
||||
{
|
||||
var addcri = dinfo.Get_AddValue(eAddExtraType.AddCri_byFireBall);
|
||||
dinfo.Critical = forceCri || DSUtil.RandomTrue((float)m_Stat.Get_Stat(eStat.M_CRI) + addcri) ? eStat.M_CRI : eStat.None;
|
||||
if (dinfo.Critical == eStat.M_CRI)
|
||||
{
|
||||
dinfo.Damage += dinfo.Damage * m_Stat.Get_Stat(eStat.M_CRI_DMG_Multiplier);
|
||||
dinfo.TextColor = DSUtil.Format("{0}<color=#ff00ff> ", dinfo.Critical);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var addcri = dinfo.Get_AddValue(eAddExtraType.AddCri_byTonado) + dinfo.Get_AddValue(eAddExtraType.AddCri_byFireBall);
|
||||
dinfo.Critical = forceCri || DSUtil.RandomTrue((float)m_Stat.Get_Stat(eStat.CRI) + addcri) ? eStat.CRI : eStat.None;
|
||||
if (dinfo.Critical == eStat.CRI)
|
||||
{
|
||||
var addcridmg = dinfo.Get_AddValue(eAddExtraType.AddCriDmg_byTonado);
|
||||
var addcripiercingdmg = dinfo.Get_AddValue(eAddExtraType.AddCRI_Piercing_Multiplier_byTonado);
|
||||
|
||||
dinfo.Damage += dinfo.Damage * (m_Stat.Get_Stat(eStat.CRI_DMG_Multiplier) + addcridmg);
|
||||
dinfo.TextColor = DSUtil.Format("{0}<color=#ffff00> ", dinfo.Critical);
|
||||
dinfo.PiercingDmg += baseDmg * (m_Stat.Get_Stat(eStat.CRI_Piercing_Multiplier) + addcripiercingdmg);
|
||||
}
|
||||
}
|
||||
dinfo.Cal_Cri(m_AttackType, m_Stat, forceCri); // 크리티컬 판정
|
||||
|
||||
return dinfo;
|
||||
}
|
||||
|
|
@ -439,7 +414,6 @@ public class Actor : MyCoroutine
|
|||
if (IsDead() || m_bImmortal) return;
|
||||
|
||||
if (_dinfo.Damage < 1) _dinfo.Damage = 1d;
|
||||
_dinfo.Damage.RandomizeCryptoKey();
|
||||
|
||||
if (Get_HP() >= Get_MaxHP() && Get_HP() <= _dinfo.Damage) // 한 방에 사망
|
||||
Kill_OnePunch(_dinfo);
|
||||
|
|
@ -533,7 +507,6 @@ public class Actor : MyCoroutine
|
|||
// 고정 피해 계산
|
||||
_dinfo.Damage += (int)_dinfo.Beater.m_Stat.Get_Stat(eStat.ATK_FIXED) + (int)atk_fixed - (int)m_Stat.Get_Stat(eStat.ATK_FIXED_DECREASE);
|
||||
if (_dinfo.Damage < 1d) _dinfo.Damage = 1d;
|
||||
_dinfo.Damage.RandomizeCryptoKey();
|
||||
}
|
||||
|
||||
_dinfo.PiercingDmg -= _dinfo.PiercingDmg * m_Stat.Get_Stat(eStat.PIERCING_Block);
|
||||
|
|
@ -570,7 +543,6 @@ public class Actor : MyCoroutine
|
|||
{
|
||||
if (IsDead()) return;
|
||||
|
||||
_dinfo.Damage.RandomizeCryptoKey();
|
||||
m_Stat.Set_Stat(false, eStat.HP, _dinfo.Damage);
|
||||
_dinfo.act_returnLastDmg?.Invoke(_dinfo.Damage);
|
||||
_dinfo.act_CriAfterHit?.Invoke(_dinfo.Critical);
|
||||
|
|
|
|||
|
|
@ -193,11 +193,6 @@ public class ProjectileBase : MonoBehaviour
|
|||
Get_AwakenData(step, 1));
|
||||
}
|
||||
|
||||
public void Set_HitChecker()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// active 스킬 실행 여부
|
||||
/// </summary>
|
||||
|
|
@ -326,6 +321,7 @@ public class ProjectileBase : MonoBehaviour
|
|||
var hitter = other.GetComponent<Actor>();
|
||||
if (m_ProjectTileData.shooter.IsEnemy() != hitter.IsEnemy())
|
||||
{
|
||||
m_DamageInfo.Cal_Cri(m_ProjectTileData.shooter.m_AttackType, m_ProjectTileData.shooter.Get_StatInfo());
|
||||
hitter.Get_Damage(m_DamageInfo);
|
||||
m_ProjectTileData.Action_OnHit?.Invoke(hitter);
|
||||
Show_HitEffect(true, hitter);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ public class Skill_Hurricane : ProjectileBase
|
|||
[Header("소용돌이 유지 시간")]
|
||||
public float lifeTime = 15f;
|
||||
[Header("소용돌이 데미지 범위")]
|
||||
public float damageArea = 5f;
|
||||
public BoxCollider m_Collider;
|
||||
[Header("데미지 간격")]
|
||||
public float damageGap = 0.33f;
|
||||
[Header("소용돌이 이동속도")]
|
||||
|
|
@ -15,8 +15,9 @@ public class Skill_Hurricane : ProjectileBase
|
|||
|
||||
public override void Set(ProjectileData _data)
|
||||
{
|
||||
_data.eStartPos = eProjectileStartPos.Target;
|
||||
base.Set(_data);
|
||||
transform.position = _data.target.Get_position();
|
||||
transform.eulerAngles = Vector3.zero;
|
||||
movespeed += IsStep(1) ? Get_AwakenData(1, 1) : 0f;
|
||||
_data.LifeTime = lifeTime + (IsStep(2) ? Get_AwakenData(2, 1) : 0f);
|
||||
|
||||
|
|
@ -25,18 +26,20 @@ public class Skill_Hurricane : ProjectileBase
|
|||
|
||||
IEnumerator Co_Update()
|
||||
{
|
||||
var step3 = IsStep(3);
|
||||
if (step3) damageArea += Get_AwakenData(3, 1);
|
||||
if (IsStep(3)) m_Collider.size = new Vector3(1.70440888f, 3.86459613f, 1.84529209f);
|
||||
else m_Collider.size = new Vector3(1.37568462f, 3.86459613f, 1.46960735f);
|
||||
|
||||
while (m_ProjectTileData.LifeTime > 0f)
|
||||
{
|
||||
m_Collider.enabled = true;
|
||||
yield return null;
|
||||
yield return null;
|
||||
m_Collider.enabled = false;
|
||||
yield return new WaitForSeconds(damageGap);
|
||||
m_ProjectTileData.LifeTime -= damageGap;
|
||||
var enemies = Get_Enemies(transform, damageArea);
|
||||
Attack_Enemies(enemies, step3);
|
||||
}
|
||||
|
||||
Off();
|
||||
Off(true);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
|
|
@ -60,16 +63,4 @@ public class Skill_Hurricane : ProjectileBase
|
|||
|
||||
if (m_ProjectTileData.shooter.IsDead()) Off();
|
||||
}
|
||||
|
||||
void Attack_Enemies(List<Actor> enemies, bool airborne)
|
||||
{
|
||||
for (int j = 0; j < enemies.Count; j++)
|
||||
{
|
||||
if (DSUtil.CheckNull(enemies[j])) continue;
|
||||
if (j >= enemies.Count) break;
|
||||
|
||||
if (airborne) enemies[j].KnockedAirborne();
|
||||
enemies[j].Get_Damage(Get_DamageInfo());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -114,7 +114,10 @@ public class RandomStatTableDataBase : TableDataBase
|
|||
public class DamageInfo
|
||||
{
|
||||
public Actor Beater;
|
||||
public ObscuredDouble Damage, PiercingDmg;
|
||||
ObscuredDouble _BaseDmg, _Damage, _PiercingDmg;
|
||||
public double BaseDmg { get { return _BaseDmg; } set { _BaseDmg = value; _BaseDmg.RandomizeCryptoKey(); } }
|
||||
public double Damage { get { return _Damage; } set { _Damage = value; _Damage.RandomizeCryptoKey(); } }
|
||||
public double PiercingDmg { get { return _PiercingDmg; } set { _PiercingDmg = value; _PiercingDmg.RandomizeCryptoKey(); } }
|
||||
public eCC CC;
|
||||
public eStat Critical = eStat.None;
|
||||
public string TextColor;
|
||||
|
|
@ -155,6 +158,35 @@ public class DamageInfo
|
|||
return 0f;
|
||||
}
|
||||
|
||||
public void Cal_Cri(eAttackType attackType, ActorStatInfo statinfo, bool forceCri = false)
|
||||
{
|
||||
Critical = eStat.None;
|
||||
if (attackType == eAttackType.Magic)
|
||||
{
|
||||
var addcri = Get_AddValue(eAddExtraType.AddCri_byFireBall);
|
||||
Critical = forceCri || DSUtil.RandomTrue((float)statinfo.Get_Stat(eStat.M_CRI) + addcri) ? eStat.M_CRI : eStat.None;
|
||||
if (Critical == eStat.M_CRI)
|
||||
{
|
||||
Damage += Damage * statinfo.Get_Stat(eStat.M_CRI_DMG_Multiplier);
|
||||
TextColor = DSUtil.Format("{0}<color=#ff00ff> ", Critical);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var addcri = Get_AddValue(eAddExtraType.AddCri_byTonado) + Get_AddValue(eAddExtraType.AddCri_byFireBall);
|
||||
Critical = forceCri || DSUtil.RandomTrue((float)statinfo.Get_Stat(eStat.CRI) + addcri) ? eStat.CRI : eStat.None;
|
||||
if (Critical == eStat.CRI)
|
||||
{
|
||||
var addcridmg = Get_AddValue(eAddExtraType.AddCriDmg_byTonado);
|
||||
var addcripiercingdmg = Get_AddValue(eAddExtraType.AddCRI_Piercing_Multiplier_byTonado);
|
||||
|
||||
Damage += Damage * (statinfo.Get_Stat(eStat.CRI_DMG_Multiplier) + addcridmg);
|
||||
TextColor = DSUtil.Format("{0}<color=#ffff00> ", Critical);
|
||||
PiercingDmg += BaseDmg * (statinfo.Get_Stat(eStat.CRI_Piercing_Multiplier) + addcripiercingdmg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Set_Extra(eSkillExtraType extraType)
|
||||
{
|
||||
Beater_pd.e_SkillExtraType = extraType;
|
||||
|
|
|
|||
Loading…
Reference in New Issue