All pastes #955829 Raw Edit

Etwas

public diff v1 · immutable
#955829 ·published 2008-03-24 21:35 UTC
rendered paste body
Index: src/game/MiscHandler.cpp===================================================================--- src/game/MiscHandler.cpp	(revision 5485)+++ src/game/MiscHandler.cpp	(working copy)@@ -516,17 +516,7 @@         _player->SetUInt32Value(UNIT_FIELD_BYTES_1 , bytes1);          if (_player->IsStandState())-        {-            // cancel drinking / eating-            Unit::AuraMap& p_auras = _player->GetAuras();-            for (Unit::AuraMap::iterator itr = p_auras.begin(); itr != p_auras.end();)-            {-                if (itr->second && (itr->second->GetSpellProto()->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED) != 0)-                    _player->RemoveAura(itr);-                else-                    ++itr;-            }-        }+            _player->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_NOT_SEATED);     } } Index: src/game/Player.cpp===================================================================--- src/game/Player.cpp	(revision 5485)+++ src/game/Player.cpp	(working copy)@@ -1878,24 +1878,9 @@     //TODO: exist also swimming mobs, and function must be symmetric to enter/leave water     m_isInWater = apply; -    // form update-    if(apply)-    {-        // remove travel forms-        if(m_form == FORM_TRAVEL || m_form == FORM_GHOSTWOLF)-            RemoveAurasDueToSpell(m_ShapeShiftForm);+    // remove auras that need water/land+    RemoveAurasWithInterruptFlags(apply ? AURA_INTERRUPT_FLAG_NOT_ABOVEWATER : AURA_INTERRUPT_FLAG_NOT_UNDERWATER); -        // remove mounts, check flight mounts also (flying=swimming in air :D)-        if(IsMounted() && !IsFlying())-            RemoveSpellsCausingAura(SPELL_AURA_MOUNTED);-    }-    else-    {-        // remove aqua form-        if(m_form == FORM_AQUA)-            RemoveAurasDueToSpell(m_ShapeShiftForm);-    }-     getHostilRefManager().updateThreatTables(); } @@ -4915,14 +4900,11 @@      if( teleport || old_x != x || old_y != y || old_r != orientation )     {-        // remove at movement non-move stealth aura-        if(GetVisibility()==VISIBILITY_GROUP_STEALTH)-            RemoveAurasDueToSpell(20580);+        if (teleport || old_x != x || old_y != y)+            RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOVE | AURA_INTERRUPT_FLAG_TURNING);+        else+            RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING); -        // remove death simulation at move-        if(hasUnitState(UNIT_STAT_DIED))-            RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);-         // move and update visible state if need         m->PlayerRelocation(this, x, y, z, orientation); Index: src/game/Unit.cpp===================================================================--- src/game/Unit.cpp	(revision 5485)+++ src/game/Unit.cpp	(working copy)@@ -3925,6 +3925,17 @@             ++iter;     } }+ +void Unit::RemoveAurasWithInterruptFlags(uint32 flags)+{+    for (AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end(); )+    {+        if (iter->second->GetSpellProto()->AuraInterruptFlags & flags)+            RemoveAura(iter);+        else+            ++iter;+    }+}  void Unit::RemoveAura(AuraMap::iterator &i, bool onDeath) {Index: src/game/Unit.h===================================================================--- src/game/Unit.h	(revision 5485)+++ src/game/Unit.h	(working copy)@@ -843,6 +843,7 @@         void RemoveRankAurasDueToSpell(uint32 spellId);         bool RemoveNoStackAurasDueToAura(Aura *Aur);         void RemoveAreaAurasByOthers(uint64 guid = 0);+        void RemoveAurasWithInterruptFlags(uint32 flags);          void RemoveAllAuras();         void RemoveAllAurasOnDeath();