summaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/ItemHandler.cpp
diff options
context:
space:
mode:
authorUltraNix <80540499+UltraNix@users.noreply.github.com>2021-09-02 10:39:57 +0200
committerGitHub <noreply@github.com>2021-09-02 10:39:57 +0200
commit2f9f95221be59e2c28aa42216b1bf50c0f35fc58 (patch)
treeccff9f76e9ddd322c36560596cf9038dd5ab6025 /src/server/game/Handlers/ItemHandler.cpp
parentfb0c3b4cb2f6f40a3307d1f4acb2c8fe0f5344b5 (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.cpp64
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);