diff --git a/Modules/Data/Constants.lua b/Modules/Data/Constants.lua index a465ef8..0ec192f 100755 --- a/Modules/Data/Constants.lua +++ b/Modules/Data/Constants.lua @@ -336,6 +336,18 @@ Data.Aura = { [25894] = ((ECS.IsTBC or ECS.IsWotlk) and nil or 1), -- Greater Blessing of Wisdom rank 1 [25918] = ((ECS.IsTBC or ECS.IsWotlk) and nil or 1), -- Greater Blessing of Wisdom rank 2 }, + ReduceTargetArmor = { + [37174] = (ECS.IsTBC and 1000 or nil), -- Perceived Weakness + [37482] = (ECS.IsTBC and 600 or nil), -- Exploited Weakness + [40477] = (ECS.IsTBC and 300 or nil), -- Forceful Strike + [42976] = (ECS.IsTBC and 400 or nil), -- Executioner + [43817] = (ECS.IsTBC and 1000 or nil), -- Focused Assault + [47216] = 1092, -- Piercing Fangs + [54678] = 50000, -- Brute Force + [461252] = 2000, -- Shadowflame Fury + [1231894] = 1000, -- Ferocity of the Crocolisk + [1231896] = 500, -- Brilliance of Mr. Bigglesworth + }, SpellCrit = { [24907] = ((ECS.IsTBC or ECS.IsWotlk) and 5 or nil), -- Moonkin Aura [29177] = 6, -- Elemental Devastation Rank 2 diff --git a/Modules/Data/DataUtils.lua b/Modules/Data/DataUtils.lua index 664e8b0..c1c0739 100644 --- a/Modules/Data/DataUtils.lua +++ b/Modules/Data/DataUtils.lua @@ -142,4 +142,4 @@ function DataUtils:GetSocketedGemsFromItemLink(itemLink) return nil end -return DataUtils +return DataUtils \ No newline at end of file diff --git a/Modules/Data/General.lua b/Modules/Data/General.lua index 3239565..01536b6 100644 --- a/Modules/Data/General.lua +++ b/Modules/Data/General.lua @@ -3,6 +3,8 @@ local Data = ECSLoader:ImportModule("Data") ---@type DataUtils local DataUtils = ECSLoader:ImportModule("DataUtils") +local _, _, classId = UnitClass("player") +local playerLevel = UnitLevel("player") ---@return string function Data:GetMovementSpeed() @@ -20,4 +22,83 @@ function Data:GetMovementSpeed() currentSpeed = currentSpeed / 7 * 100 return DataUtils:Round(currentSpeed, 0) .. "%" +end + +---@return string +function Data:GetArmorPenetrationFlat() + local armorPenetration = 0 + + if classId == Data.ROGUE and not ECS.IsWotlk then + if C_SpellBook.IsSpellKnown(14173) then -- Serrated Blades 3/3 + armorPenetration = armorPenetration + playerLevel * 5 + elseif C_SpellBook.IsSpellKnown(14172) then -- Serrated Blades 2/3 + armorPenetration = armorPenetration + playerLevel * 3.4 + elseif C_SpellBook.IsSpellKnown(14171) then -- Serrated Blades 1/3 + armorPenetration = armorPenetration + playerLevel * 1.6 + end + end + + local i = 1 + repeat + local aura = C_UnitAuras.GetBuffDataByIndex("player", i) + if aura and aura.spellId then + armorPenetration = armorPenetration + (Data.Aura.ReduceTargetArmor[aura.spellId] or 0) + if not ECS.IsWotlk then + if aura.spellId == 26481 then + armorPenetration = armorPenetration + 200 * aura.applications -- Insight of the Qiraji + elseif aura.spellId == 21153 then + armorPenetration = armorPenetration + 700 * aura.applications -- Bonereaver's Edge + elseif aura.spellId == 38307 then + armorPenetration = armorPenetration + 435 * aura.applications -- The Dark of Night + end + end + end + i = i + 1 + until (not aura) + + return DataUtils:Round(armorPenetration, 2) .. "%" +end + +---@return string +function Data:GetArmorPenetrationPercentage() + local armorPenetration = GetArmorPenetration() + + if ECS.IsWotlk then + if classId == Data.WARRIOR then + local _, isActive = GetShapeshiftFormInfo(1) + if isActive then + armorPenetration = armorPenetration + 10 -- 10% from Battle Stance + end + -- TODO: mace specialization + elseif classId == Data.ROGUE then + if C_SpellBook.IsSpellKnown(14173) then -- Serrated Blades 3/3 + armorPenetration = armorPenetration + 9 + elseif C_SpellBook.IsSpellKnown(14172) then -- Serrated Blades 2/3 + armorPenetration = armorPenetration + 6 + elseif C_SpellBook.IsSpellKnown(14171) then -- Serrated Blades 1/3 + armorPenetration = armorPenetration + 3 + end + -- TODO: mace specialization + elseif classId == Data.DEATHKNIGHT then + if C_SpellBook.IsSpellKnown(61278) then -- Blood Gorged 5/5 + armorPenetration = armorPenetration + 10 + elseif C_SpellBook.IsSpellKnown(61277) then -- Blood Gorged 4/5 + armorPenetration = armorPenetration + 8 + elseif C_SpellBook.IsSpellKnown(61276) then -- Blood Gorged 3/5 + armorPenetration = armorPenetration + 6 + elseif C_SpellBook.IsSpellKnown(61275) then -- Blood Gorged 2/5 + armorPenetration = armorPenetration + 4 + elseif C_SpellBook.IsSpellKnown(61274) then -- Blood Gorged 1/5 + armorPenetration = armorPenetration + 2 + end + end + end + + return DataUtils:Round(armorPenetration, 2) .. "%" +end + +---@return number +function Data:GetArmorPenetrationRating() + local armorPenetrationRating = GetCombatRating(CR_ARMOR_PENETRATION) + return DataUtils:Round(armorPenetrationRating, 0) end \ No newline at end of file diff --git a/Modules/Data/Melee.lua b/Modules/Data/Melee.lua index e0f36cc..13e50f1 100755 --- a/Modules/Data/Melee.lua +++ b/Modules/Data/Melee.lua @@ -246,31 +246,6 @@ function Data:GetExpertiseRating() return DataUtils:Round(expertiseRating, 0) end ----@return string -function Data:GetArmorPenetration() - local armorPenetration = GetArmorPenetration() - - if ECS.IsWotlk and classId == Data.WARRIOR then - local _, isActive = GetShapeshiftFormInfo(1) - if isActive then - armorPenetration = armorPenetration + 10 -- 10% from Battle Stance - end - end - - if classId == Data.DEATHKNIGHT then - local _, _, _, _, points, _, _, _ = GetTalentInfo(1, 24) - armorPenetration = armorPenetration + points * 2 -- 0-10% Blood Gorged - end - - return DataUtils:Round(armorPenetration, 2) .. "%" -end - ----@return number -function Data:GetArmorPenetrationRating() - local armorPenetrationRating = GetCombatRating(CR_ARMOR_PENETRATION) - return DataUtils:Round(armorPenetrationRating, 0) -end - ---@return number function Data:GetMeleeHasteRating() local hasteRating = GetCombatRating(CR_HASTE_MELEE)