aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-02-01 22:20:25 +0100
committerShauren <shauren.trinity@gmail.com>2024-02-01 22:20:25 +0100
commite6785094fce1bc0d8537cddef73088d30521883a (patch)
tree56c85a77518622537579663838354d4d8181a0e0
parenta32af01495017c5dc6a2b6a6e7aec8698c56683a (diff)
Core/Spells: Moved hardcoded immunity data for SPELL_AURA_MECHANIC_IMMUNITY_MASK to database
-rw-r--r--sql/updates/world/master/2024_02_01_01_world.sql21
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h14
-rw-r--r--src/server/game/Spells/SpellInfo.cpp141
3 files changed, 28 insertions, 148 deletions
diff --git a/sql/updates/world/master/2024_02_01_01_world.sql b/sql/updates/world/master/2024_02_01_01_world.sql
new file mode 100644
index 00000000000..da61130ab66
--- /dev/null
+++ b/sql/updates/world/master/2024_02_01_01_world.sql
@@ -0,0 +1,21 @@
+DELETE FROM `creature_immunities` WHERE `ID` IN (95,96,315,477,679,878,1537,1557,1614,1615,1630,1632,1664,1676,1682,1693,1694,1695,1733);
+INSERT INTO `creature_immunities` (`ID`, `SchoolMask`, `DispelTypeMask`, `MechanicsMask`, `Effects`, `Auras`, `ImmuneAoE`, `ImmuneChain`, `Comment`) VALUES
+(95, 0, 0, 32, '', '', 0, 0, 'Immune to Fear'),
+(96, 0, 0, 1234599598, '', '5,7,12,26,33,455', 0, 0, 'Immune to CC (Free Friend, Uncontrollable Frenzy, Warlord\'s Presence)'),
+(315, 127, 0, 0, '', '', 0, 0, 'Immune to damage'),
+(477, 0, 0, 68719476736, '114', '11', 0, 0, 'Immune to Taunt'),
+(679, 0, 0, 1234599078, '', '5,7,12,26,33,455', 0, 0, 'Immune to CC'),
+(878, 0, 0, 4096, '', '12', 0, 0, 'Immune to Stun'),
+(1537, 0, 0, 32, '', '7', 0, 0, 'Immune to Fear'),
+(1557, 0, 0, 1234599078, '98,124,144,145', '', 0, 0, 'Immune CC+Stun+Move'),
+(1614, 0, 0, 68719476736, '114', '11', 0, 0, 'Immune to Taunt'),
+(1615, 0, 0, 1301707942, '68', '5,7,12,26,27,33,60,455', 0, 0, 'Immune to CC+Interrupt'),
+(1630, 0, 0, 69954075814, '114', '5,7,11,12,26,33,455', 0, 0, 'Immune to CC+Taunt'),
+(1632, 0, 0, 584472182, '', '', 0, 0, 'Immune to hard CC'),
+(1664, 0, 0, 2176, '', '', 0, 0, 'Immune to slow'),
+(1676, 0, 0, 570425344, '', '', 0, 0, 'Immune to immunities'),
+(1682, 0, 0, 4096, '', '', 0, 0, 'Immune to Stun'),
+(1693, 0, 0, 584472182, '68', '', 0, 0, 'Immune to hard CC+Interrupt'),
+(1694, 0, 0, 68719476736, '114', '11', 0, 0, 'Immune to Taunt'),
+(1695, 0, 0, 4096, '', '12', 0, 0, 'Immune to Stun'),
+(1733, 0, 0, 1234599078, '98,124,144,145', '', 0, 0, 'Immune CC+Stun+Move');
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index c42f5d8714c..7b34e1a08a1 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -2576,13 +2576,13 @@ enum Mechanics : uint32
};
// Used for spell 42292 Immune Movement Impairment and Loss of Control (0x49967ca6)
-#define IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK (\
- (1<<MECHANIC_CHARM)|(1<<MECHANIC_DISORIENTED)|(1<<MECHANIC_FEAR)| \
- (1<<MECHANIC_ROOT)|(1<<MECHANIC_SLEEP)|(1<<MECHANIC_SNARE)| \
- (1<<MECHANIC_STUN)|(1<<MECHANIC_FREEZE)|(1<<MECHANIC_SILENCE)|(1<<MECHANIC_DISARM)|(1<<MECHANIC_KNOCKOUT)| \
- (1<<MECHANIC_POLYMORPH)|(1<<MECHANIC_BANISH)|(1<<MECHANIC_SHACKLE)| \
- (1<<MECHANIC_TURN)|(1<<MECHANIC_HORROR)|(1<<MECHANIC_DAZE)| \
- (1<<MECHANIC_SAPPED))
+inline constexpr uint64 IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK(\
+ (1 << MECHANIC_CHARM) | (1 << MECHANIC_DISORIENTED) | (1 << MECHANIC_FEAR) | \
+ (1 << MECHANIC_ROOT) | (1 << MECHANIC_SLEEP) | (1 << MECHANIC_SNARE) | \
+ (1 << MECHANIC_STUN) | (1 << MECHANIC_FREEZE) | (1 << MECHANIC_SILENCE) | (1 << MECHANIC_DISARM) | (1 << MECHANIC_KNOCKOUT) | \
+ (1 << MECHANIC_POLYMORPH) | (1 << MECHANIC_BANISH) | (1 << MECHANIC_SHACKLE) | \
+ (1 << MECHANIC_TURN) | (1 << MECHANIC_HORROR) | (1 << MECHANIC_DAZE) | \
+ (1 << MECHANIC_SAPPED));
// Spell dispel type
enum DispelType
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index cb2875edd8e..7a365207d4b 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -3318,7 +3318,6 @@ void SpellInfo::_LoadImmunityInfo()
uint32 damageImmunityMask = 0;
int32 miscVal = effect.MiscValue;
- int32 amount = effect.CalcValue();
SpellEffectInfo::ImmunityInfo& immuneInfo = *workBuffer;
@@ -3336,146 +3335,6 @@ void SpellInfo::_LoadImmunityInfo()
for (AuraType aura : creatureImmunities->Aura)
immuneInfo.AuraTypeImmune.insert(aura);
}
-
- switch (miscVal)
- {
- case 96: // Free Friend, Uncontrollable Frenzy, Warlord's Presence
- {
- mechanicImmunityMask |= IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK;
-
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_STUN);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_DECREASE_SPEED);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_CONFUSE);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_FEAR);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT_2);
- break;
- }
- case 1615: // Incite Rage, Wolf Spirit, Overload, Lightning Tendrils
- {
- switch (Id)
- {
- case 43292: // Incite Rage
- case 49172: // Wolf Spirit
- mechanicImmunityMask |= IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK;
-
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_STUN);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_DECREASE_SPEED);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_CONFUSE);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_FEAR);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT_2);
- [[fallthrough]];
- case 61869: // Overload
- case 63481:
- case 61887: // Lightning Tendrils
- case 63486:
- mechanicImmunityMask |= (1 << MECHANIC_INTERRUPT) | (1 << MECHANIC_SILENCE);
-
- immuneInfo.SpellEffectImmune.insert(SPELL_EFFECT_KNOCK_BACK);
- immuneInfo.SpellEffectImmune.insert(SPELL_EFFECT_KNOCK_BACK_DEST);
- break;
- default:
- break;
- }
- break;
- }
- case 679: // Mind Control, Avenging Fury
- {
- if (Id == 57742) // Avenging Fury
- {
- mechanicImmunityMask |= IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK;
-
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_STUN);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_DECREASE_SPEED);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_CONFUSE);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_FEAR);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT_2);
- }
- break;
- }
- case 1557: // Startling Roar, Warlord Roar, Break Bonds, Stormshield
- {
- if (Id == 64187) // Stormshield
- {
- mechanicImmunityMask |= (1 << MECHANIC_STUN);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_STUN);
- }
- else
- {
- mechanicImmunityMask |= IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK;
-
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_STUN);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_DECREASE_SPEED);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_CONFUSE);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_FEAR);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT_2);
- }
- break;
- }
- case 1614: // Fixate
- case 1694: // Fixated, Lightning Tendrils
- {
- immuneInfo.SpellEffectImmune.insert(SPELL_EFFECT_ATTACK_ME);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_TAUNT);
- break;
- }
- case 1630: // Fervor, Berserk
- {
- if (Id == 64112) // Berserk
- {
- immuneInfo.SpellEffectImmune.insert(SPELL_EFFECT_ATTACK_ME);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_TAUNT);
- }
- else
- {
- mechanicImmunityMask |= IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK;
-
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_STUN);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_DECREASE_SPEED);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_CONFUSE);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_FEAR);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT_2);
- }
- break;
- }
- case 477: // Bladestorm
- case 1733: // Bladestorm, Killing Spree
- {
- if (!amount)
- {
- mechanicImmunityMask |= IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK;
-
- immuneInfo.SpellEffectImmune.insert(SPELL_EFFECT_KNOCK_BACK);
- immuneInfo.SpellEffectImmune.insert(SPELL_EFFECT_KNOCK_BACK_DEST);
-
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_STUN);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_DECREASE_SPEED);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_CONFUSE);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_FEAR);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_ROOT_2);
- }
- break;
- }
- case 878: // Whirlwind, Fog of Corruption, Determination
- {
- if (Id == 66092) // Determination
- {
- mechanicImmunityMask |= (1 << MECHANIC_SNARE) | (1 << MECHANIC_STUN)
- | (1 << MECHANIC_DISORIENTED) | (1 << MECHANIC_FREEZE);
-
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_STUN);
- immuneInfo.AuraTypeImmune.insert(SPELL_AURA_MOD_DECREASE_SPEED);
- }
- break;
- }
- default:
- break;
- }
break;
}
case SPELL_AURA_MECHANIC_IMMUNITY: