diff --git a/Modules/Data/Constants.lua b/Modules/Data/Constants.lua index 679422a..28ab776 100755 --- a/Modules/Data/Constants.lua +++ b/Modules/Data/Constants.lua @@ -351,6 +351,18 @@ Data.Aura = { [25894] = (ECS.IsClassic and 1 or nil), -- Greater Blessing of Wisdom rank 1 [25918] = (ECS.IsClassic and 1 or nil), -- 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.IsClassic and nil or 5), -- Moonkin Aura [29177] = 6, -- Elemental Devastation Rank 2 diff --git a/Modules/Data/Data.lua b/Modules/Data/Data.lua index 4d1f3fe..62a574c 100755 --- a/Modules/Data/Data.lua +++ b/Modules/Data/Data.lua @@ -24,7 +24,8 @@ dataFunctionRefs = { ["MeleeCritChance"] = function() return Data:MeleeCrit() end, ["Expertise"] = function() return ECS.IsClassic and 0 or Data:GetExpertise() end, ["ExpertiseRating"] = function() return ECS.IsClassic and 0 or Data:GetExpertiseRating() end, - ["MeleeArmorPenetration"] = function() return Data:GetArmorPenetration() end, + ["MeleeArmorPenetrationFlat"] = function() return Data:GetArmorPenetrationFlat() end, + ["MeleeArmorPenetrationPercentage"] = function() return ECS.IsWotlk and Data:GetArmorPenetrationPercentage() or 0 end, ["MeleeArmorPenetrationRating"] = function() return ECS.IsWotlk and Data:GetArmorPenetrationRating() or 0 end, ["MeleeHitRating"] = function() return ECS.IsClassic and 0 or Data:MeleeHitRating() end, ["MeleeHitBonus"] = function() return Data:MeleeHitBonus() end, diff --git a/Modules/Data/General.lua b/Modules/Data/General.lua index d8c8f7e..cbc65d5 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,65 @@ function Data:GetMovementSpeed() currentSpeed = currentSpeed / 7 * 100 return DataUtils:Round(currentSpeed, 0) .. "%" +end + +---@return number +function Data:GetArmorPenetrationFlat() + local armorPenetration = 0 + + if classId == Data.ROGUE and not ECS.IsWotlk then + armorPenetration = armorPenetration + playerLevel * 5/3 * DataUtils:GetActiveTalentSpell({14171,14172,14173}) -- Serrated Blades + 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 = 0 + + if ECS.IsWotlk then + armorPenetration = GetArmorPenetration() + 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 + armorPenetration = armorPenetration + 3 * DataUtils:GetActiveTalentSpell({14171,14172,14173}) -- Serrated Blades + -- TODO: mace specialization + elseif classId == Data.DEATHKNIGHT then + armorPenetration = armorPenetration + 2 * DataUtils:GetActiveTalentSpell({61274,61275,61276,61277,61278}) -- Blood Gorged + end + end + + return DataUtils:Round(armorPenetration, 2) .. "%" +end + +---@return number +function Data:GetArmorPenetrationRating() + local arpen = 0 + if ECS.IsWotlk then + arpen = GetCombatRating(CR_ARMOR_PENETRATION) + end + return arpen end \ No newline at end of file diff --git a/Modules/Data/Melee.lua b/Modules/Data/Melee.lua index 5fa29e9..910e695 100755 --- a/Modules/Data/Melee.lua +++ b/Modules/Data/Melee.lua @@ -220,30 +220,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 - armorPenetration = armorPenetration + 2 * DataUtils:GetActiveTalentSpell({61274,61275,61276,61277,61278}) -- 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) @@ -254,5 +230,4 @@ end function Data:GetMeleeHasteBonus() local hasteBonus = GetCombatRatingBonus(CR_HASTE_MELEE) return DataUtils:Round(hasteBonus, 2) .. "%" -end - +end \ No newline at end of file