diff options
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 39 |
3 files changed, 17 insertions, 30 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 5566107a7f7..33097fbec95 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -764,7 +764,7 @@ enum SpellAttr9 : uint32 SPELL_ATTR9_ONLY_WHEN_ILLEGALLY_MOUNTED = 0x00000004, // TITLE Only When Illegally Mounted SPELL_ATTR9_DO_NOT_LOG_AURA_REFRESH = 0x00000008, // TITLE Do Not Log Aura Refresh (client only) SPELL_ATTR9_MISSILE_SPEED_IS_DELAY_IN_SEC = 0x00000010, // TITLE Missile Speed is Delay (in sec) - SPELL_ATTR9_SUMMON_PLAYER_TOTEM = 0x00000020, // TITLE Ignore Totem Requirements for Casting + SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING = 0x00000020, // TITLE Ignore Totem Requirements for Casting SPELL_ATTR9_UNK6 = 0x00000040, // TITLE Unknown attribute 6@Attr9 SPELL_ATTR9_UNK7 = 0x00000080, // TITLE Unknown attribute 7@Attr9 SPELL_ATTR9_AIMED_SHOT = 0x00000100, // TITLE Cooldown Ignores Ranged Weapon diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp index fb515d961a4..b5c772b539e 100644 --- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp +++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp @@ -1440,7 +1440,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr9>::ToString(SpellAttr9 value) case SPELL_ATTR9_ONLY_WHEN_ILLEGALLY_MOUNTED: return { "SPELL_ATTR9_ONLY_WHEN_ILLEGALLY_MOUNTED", "Only When Illegally Mounted", "" }; case SPELL_ATTR9_DO_NOT_LOG_AURA_REFRESH: return { "SPELL_ATTR9_DO_NOT_LOG_AURA_REFRESH", "Do Not Log Aura Refresh (client only)", "" }; case SPELL_ATTR9_MISSILE_SPEED_IS_DELAY_IN_SEC: return { "SPELL_ATTR9_MISSILE_SPEED_IS_DELAY_IN_SEC", "Missile Speed is Delay (in sec)", "" }; - case SPELL_ATTR9_SUMMON_PLAYER_TOTEM: return { "SPELL_ATTR9_SUMMON_PLAYER_TOTEM", "Ignore Totem Requirements for Casting", "" }; + case SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING: return { "SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING", "Ignore Totem Requirements for Casting", "" }; case SPELL_ATTR9_UNK6: return { "SPELL_ATTR9_UNK6", "Unknown attribute 6@Attr9", "" }; case SPELL_ATTR9_UNK7: return { "SPELL_ATTR9_UNK7", "Unknown attribute 7@Attr9", "" }; case SPELL_ATTR9_AIMED_SHOT: return { "SPELL_ATTR9_AIMED_SHOT", "Cooldown Ignores Ranged Weapon", "" }; @@ -1484,7 +1484,7 @@ TC_API_EXPORT SpellAttr9 EnumUtils<SpellAttr9>::FromIndex(size_t index) case 2: return SPELL_ATTR9_ONLY_WHEN_ILLEGALLY_MOUNTED; case 3: return SPELL_ATTR9_DO_NOT_LOG_AURA_REFRESH; case 4: return SPELL_ATTR9_MISSILE_SPEED_IS_DELAY_IN_SEC; - case 5: return SPELL_ATTR9_SUMMON_PLAYER_TOTEM; + case 5: return SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING; case 6: return SPELL_ATTR9_UNK6; case 7: return SPELL_ATTR9_UNK7; case 8: return SPELL_ATTR9_AIMED_SHOT; @@ -1525,7 +1525,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr9>::ToIndex(SpellAttr9 value) case SPELL_ATTR9_ONLY_WHEN_ILLEGALLY_MOUNTED: return 2; case SPELL_ATTR9_DO_NOT_LOG_AURA_REFRESH: return 3; case SPELL_ATTR9_MISSILE_SPEED_IS_DELAY_IN_SEC: return 4; - case SPELL_ATTR9_SUMMON_PLAYER_TOTEM: return 5; + case SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING: return 5; case SPELL_ATTR9_UNK6: return 6; case SPELL_ATTR9_UNK7: return 7; case SPELL_ATTR9_AIMED_SHOT: return 8; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index b2bcf65ab10..5f74831c43a 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -7663,43 +7663,30 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*= } } - // check totem-item requirements (items presence in inventory) - uint32 totems = 2; - for (uint8 i = 0; i < 2; ++i) + if (!m_spellInfo->HasAttribute(SPELL_ATTR9_IGNORE_TOTEM_REQUIREMENTS_FOR_CASTING)) { - if (m_spellInfo->Totem[i] != 0) + // check totem-item requirements (items presence in inventory) + for (int32 totem : m_spellInfo->Totem) { - if (player->HasItemCount(m_spellInfo->Totem[i])) + if (totem && !player->HasItemCount(totem)) { - totems -= 1; - continue; + if (param1) + *param1 = totem; + return SPELL_FAILED_TOTEMS; } } - else - totems -= 1; - } - - if (totems != 0) - return SPELL_FAILED_TOTEMS; - // Check items for TotemCategory (items presence in inventory) - uint32 totemCategory = 2; - for (uint8 i = 0; i < 2; ++i) - { - if (m_spellInfo->TotemCategory[i] != 0) + // Check items for TotemCategory (items presence in inventory) + for (int32 totemCategory : m_spellInfo->TotemCategory) { - if (player->HasItemTotemCategory(m_spellInfo->TotemCategory[i])) + if (totemCategory && !player->HasItemTotemCategory(totemCategory)) { - totemCategory -= 1; - continue; + if (param1) + *param1 = totemCategory; + return SPELL_FAILED_TOTEM_CATEGORY; } } - else - totemCategory -= 1; } - - if (totemCategory != 0) - return SPELL_FAILED_TOTEM_CATEGORY; } // special checks for spell effects |