rendered paste bodyIndex: src/game/Player.cpp===================================================================--- src/game/Player.cpp (revision 5467)+++ src/game/Player.cpp (working copy)@@ -1878,23 +1878,15 @@ //TODO: exist also swimming mobs, and function must be symmetric to enter/leave water m_isInWater = apply; - // form update- if(apply)+ // remove auras that need water/land+ uint32 auraInterruptFlag = (apply ? AURA_INTERRUPT_FLAG_NOT_ABOVEWATER : AURA_INTERRUPT_FLAG_NOT_UNDERWATER); + for (AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end(); ) {- // remove travel forms- if(m_form == FORM_TRAVEL || m_form == FORM_GHOSTWOLF)- RemoveAurasDueToSpell(m_ShapeShiftForm);-- // remove mounts, check flight mounts also (flying=swimming in air :D)- if(IsMounted() && !IsFlying())- RemoveSpellsCausingAura(SPELL_AURA_MOUNTED);+ if (iter->second->GetSpellProto()->AuraInterruptFlags & auraInterruptFlag)+ RemoveAura(iter);+ else+ ++iter; }- else- {- // remove aqua form- if(m_form == FORM_AQUA)- RemoveAurasDueToSpell(m_ShapeShiftForm);- } getHostilRefManager().updateThreatTables(); }Index: src/game/Unit.h===================================================================--- src/game/Unit.h (revision 5467)+++ src/game/Unit.h (working copy)@@ -58,8 +58,12 @@ enum SpellAuraInterruptFlags {- AURA_INTERRUPT_FLAG_DAMAGE = 0x00000002,- AURA_INTERRUPT_FLAG_NOT_SEATED = 0x00040000+ AURA_INTERRUPT_FLAG_DAMAGE = 0x00000002,+ AURA_INTERRUPT_FLAG_NOT_MOUNTED = 0x00000040,+ AURA_INTERRUPT_FLAG_NOT_ABOVEWATER = 0x00000080,+ AURA_INTERRUPT_FLAG_NOT_UNDERWATER = 0x00000100,+ AURA_INTERRUPT_FLAG_NOT_SHEATHED = 0x00000200,+ AURA_INTERRUPT_FLAG_NOT_SEATED = 0x00040000 }; enum SpellModOp