diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 2 |
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; |
