Core/Players: Fix environmental damage from lava

Port From (https://github.com/TrinityCore/TrinityCore/commit/911e9da2bb6c8e244828dc52c89f935ecc7c2526)
This commit is contained in:
hondacrx
2024-01-29 14:57:56 -05:00
parent 4c390b363b
commit 341291870e
+17 -5
View File
@@ -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,