aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp6
-rw-r--r--src/server/game/Spells/SpellHistory.cpp5
3 files changed, 8 insertions, 5 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 5edcd644c8c..54851fe3ef9 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -780,7 +780,7 @@ enum SpellAttr9 : uint32
SPELL_ATTR9_DO_NOT_DISPLAY_POWER_COST = 0x00008000, // TITLE Do Not Display Power Cost (client only)
SPELL_ATTR9_NEXT_MODAL_SPELL_REQUIRES_SAME_UNIT_TARGET = 0x00010000, // TITLE Next modal spell requires same unit target DESCRIPTION Prevents automatically casting the spell from SpellClassOptions::ModalNextSpell after current spell if target was changed (client only)
SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT = 0x00020000, // TITLE AutoCast Off By Default
- SPELL_ATTR9_UNK18 = 0x00040000, // TITLE Unknown attribute 18@Attr9
+ SPELL_ATTR9_IGNORE_SCHOOL_LOCKOUT = 0x00040000, // TITLE Ignore School Lockout
SPELL_ATTR9_UNK19 = 0x00080000, // TITLE Unknown attribute 19@Attr9
SPELL_ATTR9_UNK20 = 0x00100000, // TITLE Unknown attribute 20@Attr9
SPELL_ATTR9_UNK21 = 0x00200000, // TITLE Unknown attribute 21@Attr9
diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
index 1e8f8fd7ce2..48ed3a37641 100644
--- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
+++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
@@ -1456,7 +1456,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr9>::ToString(SpellAttr9 value)
case SPELL_ATTR9_DO_NOT_DISPLAY_POWER_COST: return { "SPELL_ATTR9_DO_NOT_DISPLAY_POWER_COST", "Do Not Display Power Cost (client only)", "" };
case SPELL_ATTR9_NEXT_MODAL_SPELL_REQUIRES_SAME_UNIT_TARGET: return { "SPELL_ATTR9_NEXT_MODAL_SPELL_REQUIRES_SAME_UNIT_TARGET", "Next modal spell requires same unit target", "Prevents automatically casting the spell from SpellClassOptions::ModalNextSpell after current spell if target was changed (client only)" };
case SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT: return { "SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT", "AutoCast Off By Default", "" };
- case SPELL_ATTR9_UNK18: return { "SPELL_ATTR9_UNK18", "Unknown attribute 18@Attr9", "" };
+ case SPELL_ATTR9_IGNORE_SCHOOL_LOCKOUT: return { "SPELL_ATTR9_IGNORE_SCHOOL_LOCKOUT", "Ignore School Lockout", "" };
case SPELL_ATTR9_UNK19: return { "SPELL_ATTR9_UNK19", "Unknown attribute 19@Attr9", "" };
case SPELL_ATTR9_UNK20: return { "SPELL_ATTR9_UNK20", "Unknown attribute 20@Attr9", "" };
case SPELL_ATTR9_UNK21: return { "SPELL_ATTR9_UNK21", "Unknown attribute 21@Attr9", "" };
@@ -1500,7 +1500,7 @@ TC_API_EXPORT SpellAttr9 EnumUtils<SpellAttr9>::FromIndex(size_t index)
case 15: return SPELL_ATTR9_DO_NOT_DISPLAY_POWER_COST;
case 16: return SPELL_ATTR9_NEXT_MODAL_SPELL_REQUIRES_SAME_UNIT_TARGET;
case 17: return SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT;
- case 18: return SPELL_ATTR9_UNK18;
+ case 18: return SPELL_ATTR9_IGNORE_SCHOOL_LOCKOUT;
case 19: return SPELL_ATTR9_UNK19;
case 20: return SPELL_ATTR9_UNK20;
case 21: return SPELL_ATTR9_UNK21;
@@ -1541,7 +1541,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr9>::ToIndex(SpellAttr9 value)
case SPELL_ATTR9_DO_NOT_DISPLAY_POWER_COST: return 15;
case SPELL_ATTR9_NEXT_MODAL_SPELL_REQUIRES_SAME_UNIT_TARGET: return 16;
case SPELL_ATTR9_AUTOCAST_OFF_BY_DEFAULT: return 17;
- case SPELL_ATTR9_UNK18: return 18;
+ case SPELL_ATTR9_IGNORE_SCHOOL_LOCKOUT: return 18;
case SPELL_ATTR9_UNK19: return 19;
case SPELL_ATTR9_UNK20: return 20;
case SPELL_ATTR9_UNK21: return 21;
diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp
index 144a45a5687..a19f56bbf4d 100644
--- a/src/server/game/Spells/SpellHistory.cpp
+++ b/src/server/game/Spells/SpellHistory.cpp
@@ -275,7 +275,7 @@ void SpellHistory::HandleCooldowns(SpellInfo const* spellInfo, uint32 itemId, Sp
bool SpellHistory::IsReady(SpellInfo const* spellInfo, uint32 itemId /*= 0*/) const
{
- if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE)
+ if (!spellInfo->HasAttribute(SPELL_ATTR9_IGNORE_SCHOOL_LOCKOUT) && spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE)
if (IsSchoolLocked(spellInfo->GetSchoolMask()))
return false;
@@ -774,6 +774,9 @@ void SpellHistory::LockSpellSchool(SpellSchoolMask schoolMask, Duration lockoutT
if (!(spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE))
continue;
+ if (spellInfo->HasAttribute(SPELL_ATTR9_IGNORE_SCHOOL_LOCKOUT))
+ continue;
+
if (!(schoolMask & spellInfo->GetSchoolMask()))
continue;