From d0a766f14fc4d0c9166a279c532938632ca38583 Mon Sep 17 00:00:00 2001 From: ariel- Date: Thu, 18 Jan 2018 16:09:34 -0300 Subject: Core/Auras: Don't remove shield only dependant auras on disarm Closes #19782 (cherry picked from commit b8c281f497d5da2251b11ab09f182a23a5721a1c) --- src/server/game/Entities/Player/Player.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src') 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: -- cgit v1.2.3