diff options
Diffstat (limited to 'Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SE_Poison.cs')
-rw-r--r-- | Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SE_Poison.cs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SE_Poison.cs b/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SE_Poison.cs new file mode 100644 index 0000000..7da4506 --- /dev/null +++ b/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SE_Poison.cs @@ -0,0 +1,50 @@ +using UnityEngine; + +public class SE_Poison : StatusEffect +{ + [Header("SE_Poison")] + public float m_damageInterval = 1f; + + public float m_baseTTL = 2f; + + public float m_TTLPerDamagePlayer = 2f; + + public float m_TTLPerDamage = 2f; + + public float m_TTLPower = 0.5f; + + private float m_timer; + + private float m_damageLeft; + + private float m_damagePerHit; + + public override void UpdateStatusEffect(float dt) + { + base.UpdateStatusEffect(dt); + m_timer -= dt; + if (m_timer <= 0f) + { + m_timer = m_damageInterval; + HitData hitData = new HitData(); + hitData.m_point = m_character.GetCenterPoint(); + hitData.m_damage.m_poison = m_damagePerHit; + m_damageLeft -= m_damagePerHit; + m_character.ApplyDamage(hitData, showDamageText: true, triggerEffects: false); + } + } + + public void AddDamage(float damage) + { + if (damage >= m_damageLeft) + { + m_damageLeft = damage; + float num = (m_character.IsPlayer() ? m_TTLPerDamagePlayer : m_TTLPerDamage); + m_ttl = m_baseTTL + Mathf.Pow(m_damageLeft * num, m_TTLPower); + int num2 = (int)(m_ttl / m_damageInterval); + m_damagePerHit = m_damageLeft / (float)num2; + ZLog.Log("Poison damage: " + m_damageLeft + " ttl:" + m_ttl + " hits:" + num2 + " dmg perhit:" + m_damagePerHit); + ResetTime(); + } + } +} |