aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-06-16 23:54:29 +0200
committerShauren <shauren.trinity@gmail.com>2023-06-16 23:54:29 +0200
commitcd7c5eff49bc877fd39950c94b04a1cb2168e380 (patch)
tree6bd3d93f7b7ff58dcd24e865f57ddd61c859b7f6 /src
parentd4fc589f4c4efac69723211b37239a2afa161cc6 (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.h1
-rw-r--r--src/server/game/Spells/Spell.cpp10
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:
{