Index: game/Player.cpp =================================================================== --- game/Player.cpp (revision 105) +++ game/Player.cpp (working copy) @@ -182,7 +182,6 @@ m_bUnlimitedBreath = false; m_UnderwaterState = 0; - m_UnderwaterTimeMod = 0; m_UnderwaterTime = 60000; m_UnderwaterMaxTime = 60000; m_UnderwaterLastDmg = getMSTime(); @@ -677,12 +676,7 @@ if(p_time >= m_UnderwaterTime) m_UnderwaterTime = 0; else - { - if(m_UnderwaterTimeMod != 0) - m_UnderwaterTime -= p_time/m_UnderwaterTimeMod; - else - m_UnderwaterTime -= p_time; - } + m_UnderwaterTime -= p_time; } if(!m_UnderwaterTime) Index: game/Player.h =================================================================== --- game/Player.h (revision 105) +++ game/Player.h (working copy) @@ -773,7 +773,6 @@ bool m_bUnlimitedBreath; uint32 m_UnderwaterTime; uint32 m_UnderwaterState; - int32 m_UnderwaterTimeMod; uint32 m_SwimmingTime; uint32 m_BreathDamageTimer; // Visible objects Index: game/SpellAuras.cpp =================================================================== --- game/SpellAuras.cpp (revision 105) +++ game/SpellAuras.cpp (working copy) @@ -5000,10 +5000,12 @@ { if(m_target->GetTypeId() == TYPEID_PLAYER) { + uint32 m_UnderwaterMaxTimeSaved = static_cast(m_target)->m_UnderwaterMaxTime; if(apply) - static_cast(m_target)->m_UnderwaterTimeMod += mod->m_amount/100; + static_cast(m_target)->m_UnderwaterMaxTime *= (1 + mod->m_amount/100); else - static_cast(m_target)->m_UnderwaterTimeMod -= mod->m_amount/100; + static_cast(m_target)->m_UnderwaterMaxTime /= (1 + mod->m_amount/100); + static_cast(m_target)->m_UnderwaterTime *= static_cast(m_target)->m_UnderwaterMaxTime / m_UnderwaterMaxTimeSaved; } }