From 8bc9cc9c55aa9e08311bc716216ee30007b33d46 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 26 Apr 2020 01:07:12 -0400 Subject: [PATCH] Core/Items: Check required level to use items including any bonuses that modify it Port From (https://github.com/TrinityCore/TrinityCore/commit/b702401978928781249798dd607b6c6fbd10f122) --- Source/Game/Entities/Player/Player.Items.cs | 4 ++-- Source/Game/Spells/Spell.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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;