diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-06-16 23:54:29 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-06-16 23:54:29 +0200 |
commit | cd7c5eff49bc877fd39950c94b04a1cb2168e380 (patch) | |
tree | 6bd3d93f7b7ff58dcd24e865f57ddd61c859b7f6 /src | |
parent | d4fc589f4c4efac69723211b37239a2afa161cc6 (diff) |
Core/Spells: Validate known heirlooms for SPELL_EFFECT_CREATE_HEIRLOOM_ITEM
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/CollectionMgr.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 10 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/server/game/Entities/Player/CollectionMgr.h b/src/server/game/Entities/Player/CollectionMgr.h index ea245dbf285..5e46afd8fd8 100644 --- a/src/server/game/Entities/Player/CollectionMgr.h +++ b/src/server/game/Entities/Player/CollectionMgr.h @@ -107,6 +107,7 @@ public: void LoadAccountHeirlooms(PreparedQueryResult result); void SaveAccountHeirlooms(LoginDatabaseTransaction trans); void AddHeirloom(uint32 itemId, uint32 flags); + bool HasHeirloom(uint32 itemId) const { return _heirlooms.contains(itemId); } void UpgradeHeirloom(uint32 itemId, int32 castItem); void CheckHeirloomUpgrades(Item* item); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 84752a67067..998c7662098 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -6417,6 +6417,16 @@ SpellCastResult Spell::CheckCast(bool strict, int32* param1 /*= nullptr*/, int32 } break; } + case SPELL_EFFECT_CREATE_HEIRLOOM_ITEM: + { + if (!m_caster->IsPlayer()) + return SPELL_FAILED_BAD_TARGETS; + + if (!m_caster->ToPlayer()->GetSession()->GetCollectionMgr()->HasHeirloom(m_misc.Raw.Data[0])) + return SPELL_FAILED_BAD_TARGETS; + + break; + } case SPELL_EFFECT_GIVE_ARTIFACT_POWER: case SPELL_EFFECT_GIVE_ARTIFACT_POWER_NO_BONUS: { |