aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/FULL/world_spell_full.sql1
-rw-r--r--sql/updates/4615_world.sql5
-rw-r--r--src/game/SpellEffects.cpp13
-rw-r--r--src/game/Unit.cpp16
-rw-r--r--src/game/Unit.h1
5 files changed, 36 insertions, 0 deletions
diff --git a/sql/FULL/world_spell_full.sql b/sql/FULL/world_spell_full.sql
index 85d602ca07f..08ae9073047 100644
--- a/sql/FULL/world_spell_full.sql
+++ b/sql/FULL/world_spell_full.sql
@@ -71,6 +71,7 @@ INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comm
(48396, 50172, 2, 'Improved Moonkin Form'),
( 20594, 65116, 0, 'Stoneform'),
( 49039, 50397, 2, 'Lichborne - shapeshift'),
+( 64382, 64380, 0, 'Shattering Throw'),
-- Creature
( 36574, 36650, 0, 'Apply Phase Slip Vulnerability'),
diff --git a/sql/updates/4615_world.sql b/sql/updates/4615_world.sql
new file mode 100644
index 00000000000..8b5ad1ac379
--- /dev/null
+++ b/sql/updates/4615_world.sql
@@ -0,0 +1,5 @@
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN(47585, 64382);
+INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
+( 47585, 60069, 2, 'Dispersion (transform/regen)'),
+( 64382, 64380, 0, 'Shattering Throw'),
+( 47585, 63230, 2, 'Dispersion (immunity)');
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index f36d7048efe..25ea3015f41 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -5480,6 +5480,19 @@ void Spell::EffectScriptEffect(uint32 effIndex)
}
break;
}
+ case SPELLFAMILY_WARRIOR:
+ {
+ // Shattering Throw
+ if ( m_spellInfo->SpellFamilyFlags[1] & 0x1 )
+ {
+ if(!unitTarget)
+ return;
+ // remove shields, will still display immune to damage part
+ unitTarget->RemoveAurasWithMechanic(1<<MECHANIC_IMMUNE_SHIELD);
+ return;
+ }
+ break;
+ }
}
// normal DB scripted effect
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 69f42896dbd..2b4c320fbeb 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -553,6 +553,22 @@ void Unit::RemoveAurasWithFamily(uint32 family, uint32 familyFlag1, uint32 famil
}
}
+void Unit::RemoveAurasWithMechanic(uint32 mechanic_mask, uint32 except)
+{
+ for (AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end();)
+ {
+ if (!except || iter->second->GetId() != except)
+ {
+ if(GetAllSpellMechanicMask(iter->second->GetSpellProto()) & mechanic_mask)
+ {
+ RemoveAura(iter, AURA_REMOVE_BY_ENEMY_SPELL);
+ continue;
+ }
+ }
+ ++iter;
+ }
+}
+
void Unit::UpdateInterruptMask()
{
m_interruptMask = 0;
diff --git a/src/game/Unit.h b/src/game/Unit.h
index 6d8f8838cf3..22fe4ccc687 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -1450,6 +1450,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
void RemoveAurasWithInterruptFlags(uint32 flag, uint32 except = NULL);
void RemoveAurasWithFamily(uint32 family, uint32 familyFlag1, uint32 familyFlag2, uint32 familyFlag3, uint64 casterGUID);
void RemoveMovementImpairingAuras();
+ void RemoveAurasWithMechanic(uint32 mechanic_mask, uint32 except=0);
void RemoveAllAuras();
void RemoveArenaAuras(bool onleave = false);
void RemoveAllAurasOnDeath();