From cd7c5eff49bc877fd39950c94b04a1cb2168e380 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 16 Jun 2023 23:54:29 +0200 Subject: Core/Spells: Validate known heirlooms for SPELL_EFFECT_CREATE_HEIRLOOM_ITEM --- src/server/game/Entities/Player/CollectionMgr.h | 1 + src/server/game/Spells/Spell.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) (limited to 'src') 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: { -- cgit v1.2.3