diff options
author | ariel- <ariel-@users.noreply.github.com> | 2018-01-18 16:09:34 -0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-06-16 12:34:40 +0200 |
commit | d0a766f14fc4d0c9166a279c532938632ca38583 (patch) | |
tree | ad4770980b9d3cbab530866bb7127a87f1d34f1a | |
parent | b27e741096b59d3e07503bb8db30df6596dee1f2 (diff) |
Core/Auras: Don't remove shield only dependant auras on disarm
Closes #19782
(cherry picked from commit b8c281f497d5da2251b11ab09f182a23a5721a1c)
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 6246594485a..f79a2eacd26 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -25274,16 +25274,27 @@ bool Player::HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item cons { if (!spellInfo->HasAttribute(SPELL_ATTR8_ARMOR_SPECIALIZATION)) { + // most used check: shield only + if (spellInfo->EquippedItemSubClassMask & (1 << ITEM_SUBCLASS_ARMOR_SHIELD)) + { + if (Item* item = GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND)) + if (item != ignoreItem && item->IsFitToSpellRequirements(spellInfo)) + return true; + + // special check to filter things like Shield Wall, the aura is not permanent and must stay even without required item + if (!spellInfo->IsPassive()) + { + for (SpellEffectInfo const* effect : spellInfo->GetEffects()) + if (effect && effect->IsAura()) + return true; + } + } + // tabard not have dependent spells for (uint8 i = EQUIPMENT_SLOT_START; i < EQUIPMENT_SLOT_MAINHAND; ++i) if (Item* item = GetUseableItemByPos(INVENTORY_SLOT_BAG_0, i)) if (item != ignoreItem && item->IsFitToSpellRequirements(spellInfo)) return true; - - // shields can be equipped to offhand slot - if (Item* item = GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND)) - if (item != ignoreItem && item->IsFitToSpellRequirements(spellInfo)) - return true; } else { @@ -25297,7 +25308,6 @@ bool Player::HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item cons return true; } - break; } default: |