diff options
author | UltraNix <80540499+UltraNix@users.noreply.github.com> | 2021-09-02 10:39:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-02 10:39:57 +0200 |
commit | 2f9f95221be59e2c28aa42216b1bf50c0f35fc58 (patch) | |
tree | ccff9f76e9ddd322c36560596cf9038dd5ab6025 /src/server/game/Handlers/ItemHandler.cpp | |
parent | fb0c3b4cb2f6f40a3307d1f4acb2c8fe0f5344b5 (diff) |
fix(Core/Items): armor type requirement for needing items in LFG grou… (#7523)
- Closes #7467
Diffstat (limited to 'src/server/game/Handlers/ItemHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 2b799c5bb5..00266fe87a 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -290,6 +290,70 @@ void WorldSession::HandleDestroyItemOpcode(WorldPacket& recvData) _player->DestroyItem(bag, slot, true); } +bool ItemTemplate::HasStat(ItemModType stat) const +{ + for (uint8 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) + { + if (i >= StatsCount) + { + break; + } + + if (ItemStat[i].ItemStatType == stat) + { + return true; + } + } + + return false; +} + +bool ItemTemplate::HasSpellPowerStat() const +{ + bool invalid = false; + for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) + { + _Spell const& spellData = Spells[i]; + if (!spellData.SpellId) + { + continue; + } + + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellData.SpellId); + if (!spellInfo) + { + continue; + } + + for (uint8 j = EFFECT_0; j <= EFFECT_2; ++j) + { + switch (spellInfo->Effects[j].ApplyAuraName) + { + case SPELL_AURA_MOD_HEALING_DONE: + case SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT: + case SPELL_AURA_MOD_SPELL_HEALING_OF_ATTACK_POWER: + case SPELL_AURA_MOD_HEALING: + invalid = true; + break; + case SPELL_AURA_MOD_DAMAGE_DONE: + case SPELL_AURA_MOD_SPELL_DAMAGE_OF_STAT_PERCENT: + case SPELL_AURA_MOD_SPELL_DAMAGE_OF_ATTACK_POWER: + case SPELL_AURA_MOD_DAMAGE_TAKEN: + if (!(spellInfo->Effects[j].MiscValue & SPELL_SCHOOL_MASK_SPELL)) + { + return false; + } + invalid = true; + break; + default: + break; + } + } + } + + return invalid; +} + void ItemTemplate::InitializeQueryData() { queryData.Initialize(SMSG_ITEM_QUERY_SINGLE_RESPONSE, 1); |