diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 2214de536..d59deec8d 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -4034,6 +4034,20 @@ namespace Game.Entities int fatigueTimer = (int)MirrorTimerType.Fatigue; int fireTimer = (int)MirrorTimerType.Fire; + uint getEnvironmentalDamage(EnviromentalDamage damageType) + { + byte damagePercent = 10; + if (damageType == EnviromentalDamage.Drowning || damageType == EnviromentalDamage.Exhausted) + damagePercent *= 2; + + uint damage = (uint)(GetMaxHealth() * damagePercent / 100); + + // Randomize damage + damage += RandomHelper.URand(0, Math.Pow(10, Math.Max(0, (int)Math.Log10(damage) - 1))); + + return damage; + } + // In water if (m_MirrorTimerFlags.HasAnyFlag(PlayerUnderwaterState.InWater)) { @@ -4051,8 +4065,7 @@ namespace Game.Entities { m_MirrorTimer[breathTimer] += 1 * Time.InMilliseconds; // Calculate and deal damage - // @todo Check this formula - uint damage = (uint)(GetMaxHealth() / 5 + RandomHelper.URand(0, GetLevel() - 1)); + uint damage = getEnvironmentalDamage(EnviromentalDamage.Drowning); EnvironmentalDamage(EnviromentalDamage.Drowning, damage); } else if (!m_MirrorTimerFlagsLast.HasAnyFlag(PlayerUnderwaterState.InWater)) // Update time in client if need @@ -4088,7 +4101,7 @@ namespace Game.Entities m_MirrorTimer[fatigueTimer] += 1 * Time.InMilliseconds; if (IsAlive()) // Calculate and deal damage { - uint damage = (uint)(GetMaxHealth() / 5 + RandomHelper.URand(0, GetLevel() - 1)); + uint damage = getEnvironmentalDamage(EnviromentalDamage.Exhausted); EnvironmentalDamage(EnviromentalDamage.Exhausted, damage); } else if (HasPlayerFlag(PlayerFlags.Ghost)) // Teleport ghost to graveyard @@ -4120,8 +4133,7 @@ namespace Game.Entities { m_MirrorTimer[fireTimer] += 1 * Time.InMilliseconds; // Calculate and deal damage - // @todo Check this formula - uint damage = RandomHelper.URand(600, 700); + uint damage = getEnvironmentalDamage(EnviromentalDamage.Lava); if (m_MirrorTimerFlags.HasAnyFlag(PlayerUnderwaterState.InLava)) EnvironmentalDamage(EnviromentalDamage.Lava, damage); // need to skip Slime damage in Undercity,