summaryrefslogtreecommitdiff
path: root/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SE_Poison.cs
diff options
context:
space:
mode:
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.cs50
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();
+ }
+ }
+}