화염 소용돌이
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 atkData = Get_CCData(eCC.ATK_Up);
|
||||||
var addAtk = atkData.CCTime > 0 ? atkData.CCDmg : 0f;
|
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();
|
var dinfo = new DamageInfo();
|
||||||
dinfo.Beater = this;
|
dinfo.Beater = this;
|
||||||
dinfo.Beater_pd = _pd;
|
dinfo.Beater_pd = _pd;
|
||||||
dinfo.Damage = (addAtk + baseDmg) * _attackrate;
|
dinfo.BaseDmg = _pd.BaseDmg > 0 ? _pd.BaseDmg : m_Stat.Get_Stat(eStat.BaseDmg);
|
||||||
dinfo.PiercingDmg = baseDmg * (m_Stat.Get_Stat(eStat.PIERCING_Multiplier) + dinfo.Get_AddValue(eAddExtraType.Add_Piercing_Multiplier_bySpiriBless));
|
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);
|
dinfo.TextColor = HUDBase.Get_TextColor(m_AttackType);
|
||||||
|
|
||||||
if (dic_ccData[eCC.PiercingBuff].CCTime > 0)
|
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.Cal_Cri(m_AttackType, m_Stat, forceCri); // 크리티컬 판정
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return dinfo;
|
return dinfo;
|
||||||
}
|
}
|
||||||
|
|
@ -439,7 +414,6 @@ public class Actor : MyCoroutine
|
||||||
if (IsDead() || m_bImmortal) return;
|
if (IsDead() || m_bImmortal) return;
|
||||||
|
|
||||||
if (_dinfo.Damage < 1) _dinfo.Damage = 1d;
|
if (_dinfo.Damage < 1) _dinfo.Damage = 1d;
|
||||||
_dinfo.Damage.RandomizeCryptoKey();
|
|
||||||
|
|
||||||
if (Get_HP() >= Get_MaxHP() && Get_HP() <= _dinfo.Damage) // 한 방에 사망
|
if (Get_HP() >= Get_MaxHP() && Get_HP() <= _dinfo.Damage) // 한 방에 사망
|
||||||
Kill_OnePunch(_dinfo);
|
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);
|
_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;
|
if (_dinfo.Damage < 1d) _dinfo.Damage = 1d;
|
||||||
_dinfo.Damage.RandomizeCryptoKey();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_dinfo.PiercingDmg -= _dinfo.PiercingDmg * m_Stat.Get_Stat(eStat.PIERCING_Block);
|
_dinfo.PiercingDmg -= _dinfo.PiercingDmg * m_Stat.Get_Stat(eStat.PIERCING_Block);
|
||||||
|
|
@ -570,7 +543,6 @@ public class Actor : MyCoroutine
|
||||||
{
|
{
|
||||||
if (IsDead()) return;
|
if (IsDead()) return;
|
||||||
|
|
||||||
_dinfo.Damage.RandomizeCryptoKey();
|
|
||||||
m_Stat.Set_Stat(false, eStat.HP, _dinfo.Damage);
|
m_Stat.Set_Stat(false, eStat.HP, _dinfo.Damage);
|
||||||
_dinfo.act_returnLastDmg?.Invoke(_dinfo.Damage);
|
_dinfo.act_returnLastDmg?.Invoke(_dinfo.Damage);
|
||||||
_dinfo.act_CriAfterHit?.Invoke(_dinfo.Critical);
|
_dinfo.act_CriAfterHit?.Invoke(_dinfo.Critical);
|
||||||
|
|
|
||||||
|
|
@ -193,11 +193,6 @@ public class ProjectileBase : MonoBehaviour
|
||||||
Get_AwakenData(step, 1));
|
Get_AwakenData(step, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Set_HitChecker()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// active 스킬 실행 여부
|
/// active 스킬 실행 여부
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -326,6 +321,7 @@ public class ProjectileBase : MonoBehaviour
|
||||||
var hitter = other.GetComponent<Actor>();
|
var hitter = other.GetComponent<Actor>();
|
||||||
if (m_ProjectTileData.shooter.IsEnemy() != hitter.IsEnemy())
|
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);
|
hitter.Get_Damage(m_DamageInfo);
|
||||||
m_ProjectTileData.Action_OnHit?.Invoke(hitter);
|
m_ProjectTileData.Action_OnHit?.Invoke(hitter);
|
||||||
Show_HitEffect(true, hitter);
|
Show_HitEffect(true, hitter);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ public class Skill_Hurricane : ProjectileBase
|
||||||
[Header("소용돌이 유지 시간")]
|
[Header("소용돌이 유지 시간")]
|
||||||
public float lifeTime = 15f;
|
public float lifeTime = 15f;
|
||||||
[Header("소용돌이 데미지 범위")]
|
[Header("소용돌이 데미지 범위")]
|
||||||
public float damageArea = 5f;
|
public BoxCollider m_Collider;
|
||||||
[Header("데미지 간격")]
|
[Header("데미지 간격")]
|
||||||
public float damageGap = 0.33f;
|
public float damageGap = 0.33f;
|
||||||
[Header("소용돌이 이동속도")]
|
[Header("소용돌이 이동속도")]
|
||||||
|
|
@ -15,8 +15,9 @@ public class Skill_Hurricane : ProjectileBase
|
||||||
|
|
||||||
public override void Set(ProjectileData _data)
|
public override void Set(ProjectileData _data)
|
||||||
{
|
{
|
||||||
_data.eStartPos = eProjectileStartPos.Target;
|
|
||||||
base.Set(_data);
|
base.Set(_data);
|
||||||
|
transform.position = _data.target.Get_position();
|
||||||
|
transform.eulerAngles = Vector3.zero;
|
||||||
movespeed += IsStep(1) ? Get_AwakenData(1, 1) : 0f;
|
movespeed += IsStep(1) ? Get_AwakenData(1, 1) : 0f;
|
||||||
_data.LifeTime = lifeTime + (IsStep(2) ? Get_AwakenData(2, 1) : 0f);
|
_data.LifeTime = lifeTime + (IsStep(2) ? Get_AwakenData(2, 1) : 0f);
|
||||||
|
|
||||||
|
|
@ -25,18 +26,20 @@ public class Skill_Hurricane : ProjectileBase
|
||||||
|
|
||||||
IEnumerator Co_Update()
|
IEnumerator Co_Update()
|
||||||
{
|
{
|
||||||
var step3 = IsStep(3);
|
if (IsStep(3)) m_Collider.size = new Vector3(1.70440888f, 3.86459613f, 1.84529209f);
|
||||||
if (step3) damageArea += Get_AwakenData(3, 1);
|
else m_Collider.size = new Vector3(1.37568462f, 3.86459613f, 1.46960735f);
|
||||||
|
|
||||||
while (m_ProjectTileData.LifeTime > 0f)
|
while (m_ProjectTileData.LifeTime > 0f)
|
||||||
{
|
{
|
||||||
|
m_Collider.enabled = true;
|
||||||
|
yield return null;
|
||||||
|
yield return null;
|
||||||
|
m_Collider.enabled = false;
|
||||||
yield return new WaitForSeconds(damageGap);
|
yield return new WaitForSeconds(damageGap);
|
||||||
m_ProjectTileData.LifeTime -= damageGap;
|
m_ProjectTileData.LifeTime -= damageGap;
|
||||||
var enemies = Get_Enemies(transform, damageArea);
|
|
||||||
Attack_Enemies(enemies, step3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Off();
|
Off(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
|
|
@ -60,16 +63,4 @@ public class Skill_Hurricane : ProjectileBase
|
||||||
|
|
||||||
if (m_ProjectTileData.shooter.IsDead()) Off();
|
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 class DamageInfo
|
||||||
{
|
{
|
||||||
public Actor Beater;
|
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 eCC CC;
|
||||||
public eStat Critical = eStat.None;
|
public eStat Critical = eStat.None;
|
||||||
public string TextColor;
|
public string TextColor;
|
||||||
|
|
@ -155,6 +158,35 @@ public class DamageInfo
|
||||||
return 0f;
|
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)
|
public void Set_Extra(eSkillExtraType extraType)
|
||||||
{
|
{
|
||||||
Beater_pd.e_SkillExtraType = extraType;
|
Beater_pd.e_SkillExtraType = extraType;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue