aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp6
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Spells/Spell.cpp2
3 files changed, 5 insertions, 5 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 9a3e2c2fb07..76c67dd291d 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -11803,7 +11803,7 @@ InventoryResult Player::CanUseItem(Item* pItem, bool not_loading) const
if (getLevel() < pItem->GetRequiredLevel())
return EQUIP_ERR_CANT_EQUIP_LEVEL_I;
- InventoryResult res = CanUseItem(pProto);
+ InventoryResult res = CanUseItem(pProto, true);
if (res != EQUIP_ERR_OK)
return res;
@@ -11840,7 +11840,7 @@ InventoryResult Player::CanUseItem(Item* pItem, bool not_loading) const
return EQUIP_ERR_ITEM_NOT_FOUND;
}
-InventoryResult Player::CanUseItem(ItemTemplate const* proto) const
+InventoryResult Player::CanUseItem(ItemTemplate const* proto, bool skipRequiredLevelCheck /*= false*/) const
{
// Used by group, function GroupLoot, to know if a prototype can be used by a player
@@ -11870,7 +11870,7 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto) const
if (proto->GetRequiredSpell() != 0 && !HasSpell(proto->GetRequiredSpell()))
return EQUIP_ERR_PROFICIENCY_NEEDED;
- if (getLevel() < proto->GetBaseRequiredLevel())
+ if (!skipRequiredLevelCheck && getLevel() < proto->GetBaseRequiredLevel())
return EQUIP_ERR_CANT_EQUIP_LEVEL_I;
// If World Event is not active, prevent using event dependant items
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index def458b8510..bf654be6dc7 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1174,7 +1174,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
InventoryResult CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, Item* pItem, bool swap, bool not_loading = true) const;
InventoryResult CanUseItem(Item* pItem, bool not_loading = true) const;
bool HasItemTotemCategory(uint32 TotemCategory) const;
- InventoryResult CanUseItem(ItemTemplate const* pItem) const;
+ InventoryResult CanUseItem(ItemTemplate const* pItem, bool skipRequiredLevelCheck = false) const;
InventoryResult CanRollForItemInLFG(ItemTemplate const* item, WorldObject const* lootedObject) const;
Item* StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool update, ItemRandomBonusListId randomBonusListId = 0, GuidSet const& allowedLooters = GuidSet(), ItemContext context = ItemContext::NONE, std::vector<int32> const& bonusListIDs = std::vector<int32>(), bool addToCollection = true);
Item* StoreItem(ItemPosCountVec const& pos, Item* pItem, bool update);
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index c4f9583661a..14101379155 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -6509,7 +6509,7 @@ SpellCastResult Spell::CheckItems(uint32* param1 /*= nullptr*/, uint32* param2 /
return SPELL_FAILED_ITEM_NOT_FOUND;
// required level has to be checked also! Exploit fix
- if (targetItem->GetTemplate()->GetBaseItemLevel() < m_spellInfo->BaseLevel || (targetItem->GetTemplate()->GetBaseRequiredLevel() && (uint32)targetItem->GetTemplate()->GetBaseRequiredLevel() < m_spellInfo->BaseLevel))
+ if (targetItem->GetItemLevel(targetItem->GetOwner()) < int32(m_spellInfo->BaseLevel) || (targetItem->GetRequiredLevel() && (uint32)targetItem->GetRequiredLevel() < m_spellInfo->BaseLevel))
return SPELL_FAILED_LOWLEVEL;
bool isItemUsable = false;