aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2018-01-18 16:09:34 -0300
committerShauren <shauren.trinity@gmail.com>2021-06-16 12:34:40 +0200
commitd0a766f14fc4d0c9166a279c532938632ca38583 (patch)
treead4770980b9d3cbab530866bb7127a87f1d34f1a /src
parentb27e741096b59d3e07503bb8db30df6596dee1f2 (diff)
Core/Auras: Don't remove shield only dependant auras on disarm
Closes #19782 (cherry picked from commit b8c281f497d5da2251b11ab09f182a23a5721a1c)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp22
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: