diff --git a/Source/Game/Entities/Player/Player.Items.cs b/Source/Game/Entities/Player/Player.Items.cs index 9fa7914fd..d84452524 100644 --- a/Source/Game/Entities/Player/Player.Items.cs +++ b/Source/Game/Entities/Player/Player.Items.cs @@ -1447,7 +1447,7 @@ namespace Game.Entities } return InventoryResult.ItemNotFound; } - public InventoryResult CanUseItem(ItemTemplate proto) + public InventoryResult CanUseItem(ItemTemplate proto, bool skipRequiredLevelCheck = false) { // Used by group, function GroupLoot, to know if a prototype can be used by a player @@ -1477,7 +1477,7 @@ namespace Game.Entities if (proto.GetRequiredSpell() != 0 && !HasSpell(proto.GetRequiredSpell())) return InventoryResult.ProficiencyNeeded; - if (GetLevel() < proto.GetBaseRequiredLevel()) + if (!skipRequiredLevelCheck && GetLevel() < proto.GetBaseRequiredLevel()) return InventoryResult.CantEquipLevelI; // If World Event is not active, prevent using event dependant items diff --git a/Source/Game/Spells/Spell.cs b/Source/Game/Spells/Spell.cs index d9fd1a1a1..878192012 100644 --- a/Source/Game/Spells/Spell.cs +++ b/Source/Game/Spells/Spell.cs @@ -6046,7 +6046,7 @@ namespace Game.Spells return SpellCastResult.ItemNotFound; // required level has to be checked also! Exploit fix - if (targetItem.GetTemplate().GetBaseItemLevel() < m_spellInfo.BaseLevel || (targetItem.GetTemplate().GetBaseRequiredLevel() != 0 && (uint)targetItem.GetTemplate().GetBaseRequiredLevel() < m_spellInfo.BaseLevel)) + if (targetItem.GetItemLevel(targetItem.GetOwner()) < m_spellInfo.BaseLevel || (targetItem.GetRequiredLevel() != 0 && targetItem.GetRequiredLevel() < m_spellInfo.BaseLevel)) return SpellCastResult.Lowlevel; bool isItemUsable = false;