Core/Players: Fix environmental damage from lava
Port From (https://github.com/TrinityCore/TrinityCore/commit/911e9da2bb6c8e244828dc52c89f935ecc7c2526)
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user