From 1d39811cc657c5ee8c4b006b1f28541ba7eec6eb Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Sat, 28 Feb 2026 07:09:18 +0100 Subject: [PATCH 01/10] upvalue globals --- Modules/Config/Config.lua | 10 +- Modules/Config/DefenseSection.lua | 9 +- Modules/Config/GeneralSection.lua | 3 + Modules/Config/ManaSection.lua | 4 + Modules/Config/MeleeSection.lua | 24 ++-- Modules/Config/RangeSection.lua | 14 +- Modules/Config/SpellSchoolsSection.lua | 3 + Modules/Config/SpellSection.lua | 7 +- Modules/Data/Constants.lua | 130 +++++++++--------- Modules/Data/Data.lua | 28 ++-- Modules/Data/DataUtils.lua | 31 +++-- Modules/Data/Defense.lua | 52 +++++-- Modules/Data/General.lua | 8 +- Modules/Data/ItemSets.lua | 35 +++-- Modules/Data/MP5.lua | 33 +++-- Modules/Data/Melee.lua | 41 ++++-- Modules/Data/Ranged.lua | 23 +++- Modules/Data/SpellCrit.lua | 32 +++-- Modules/Data/SpellDamage.lua | 23 +++- Modules/Data/SpellHit.lua | 32 +++-- Modules/EventHandler.lua | 11 +- Modules/GearInfos.lua | 28 ++-- Modules/Init.lua | 15 +- Modules/Migration.lua | 4 + Modules/Profile.lua | 3 + Modules/SlashCommands.lua | 5 +- Modules/Stats.lua | 81 +++++++---- Modules/Utils.lua | 10 +- Modules/i18n/i18n.lua | 18 ++- .../i18n/translations/CommandTranslations.lua | 3 + .../ConfigTranslations/ConfigTranslations.lua | 3 + .../DefenseConfigTranslations.lua | 3 + .../GeneralConfigTranslations.lua | 3 + .../ManaConfigTranslations.lua | 3 + .../MeleeConfigTranslations.lua | 3 + .../RangedConfigTranslations.lua | 3 + .../SpellConfigTranslations.lua | 3 + .../SpellSchoolsConfigTranslations.lua | 3 + .../i18n/translations/StatTranslations.lua | 3 + 39 files changed, 505 insertions(+), 242 deletions(-) diff --git a/Modules/Config/Config.lua b/Modules/Config/Config.lua index a0d2ac2a..789b3704 100755 --- a/Modules/Config/Config.lua +++ b/Modules/Config/Config.lua @@ -1,3 +1,11 @@ +local ECS = ECS +local ECSConfigFrame = ECSConfigFrame +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats +local insert = table.insert +local LibStub = LibStub +local ReloadUI = ReloadUI + ------------------------------------------------------------------ -- Modules ------------------------------------------------------------------ @@ -35,7 +43,7 @@ function Config.CreateWindow() configFrame:Hide(); ECSConfigFrame = configFrame.frame; - table.insert(UISpecialFrames, "ECSConfigFrame"); + insert(UISpecialFrames, "ECSConfigFrame"); end _CreateGUI = function() diff --git a/Modules/Config/DefenseSection.lua b/Modules/Config/DefenseSection.lua index 202a3a54..6cb58c3f 100755 --- a/Modules/Config/DefenseSection.lua +++ b/Modules/Config/DefenseSection.lua @@ -1,3 +1,8 @@ +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats +local IsClassic = ECS.IsClassic +local IsSpellKnown = C_SpellBook.IsSpellKnown + ---@class Config local Config = ECSLoader:ImportModule("Config") local _Config = Config.private @@ -113,7 +118,7 @@ function _Config:LoadDefenseSection() name = function() return i18n("Defense Rating") end, desc = function() return i18n("Shows/Hides the defense rating.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, get = function () return ExtendedCharacterStats.profile.defense.defenseRating.display; end, set = function (_, value) @@ -195,7 +200,7 @@ function _Config:LoadDefenseSection() name = function() return i18n("Resilience") end, desc = function() return i18n("Shows/Hides the resilience value.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, get = function () return ExtendedCharacterStats.profile.defense.resilienceRating.display; end, set = function (_, value) diff --git a/Modules/Config/GeneralSection.lua b/Modules/Config/GeneralSection.lua index 8adafb23..2bc85335 100644 --- a/Modules/Config/GeneralSection.lua +++ b/Modules/Config/GeneralSection.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats + ---@class Config local Config = ECSLoader:ImportModule("Config") local _Config = Config.private diff --git a/Modules/Config/ManaSection.lua b/Modules/Config/ManaSection.lua index d62c4f5c..272e1806 100755 --- a/Modules/Config/ManaSection.lua +++ b/Modules/Config/ManaSection.lua @@ -1,3 +1,7 @@ +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats +local UnitHasMana = UnitHasMana + ---@class Config local Config = ECSLoader:ImportModule("Config") local _Config = Config.private diff --git a/Modules/Config/MeleeSection.lua b/Modules/Config/MeleeSection.lua index 65683234..00dca06c 100755 --- a/Modules/Config/MeleeSection.lua +++ b/Modules/Config/MeleeSection.lua @@ -1,3 +1,9 @@ +local CanDualWield = CanDualWield +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats +local IsClassic = ECS.IsClassic +local IsWotlk = ECS.IsWotlk + ---@class Config local Config = ECSLoader:ImportModule("Config") local _Config = Config.private @@ -59,7 +65,7 @@ function _Config:LoadMeleeSection() name = function() return i18n("Armor Pen.") end, desc = function() return i18n("Shows/Hides the armor penetration value.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, get = function () return ExtendedCharacterStats.profile.melee.penetration.display; end, set = function (_, value) @@ -73,7 +79,7 @@ function _Config:LoadMeleeSection() name = function() return i18n("Armor Pen. Rating") end, desc = function() return i18n("Shows/Hides the armor penetration rating value.") end, width = 1.5, - hidden = function() return not ECS.IsWotlk end, + hidden = function() return not IsWotlk end, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, get = function () return ExtendedCharacterStats.profile.melee.penetrationRating.display; end, set = function (_, value) @@ -87,7 +93,7 @@ function _Config:LoadMeleeSection() name = function() return i18n("Expertise") end, desc = function() return i18n("Shows/Hides the expertise value.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, get = function () return ExtendedCharacterStats.profile.melee.expertise.display; end, set = function (_, value) @@ -101,7 +107,7 @@ function _Config:LoadMeleeSection() name = function() return i18n("Expertise Rating") end, desc = function() return i18n("Shows/Hides the expertise rating.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, get = function () return ExtendedCharacterStats.profile.melee.expertiseRating.display; end, set = function (_, value) @@ -115,7 +121,7 @@ function _Config:LoadMeleeSection() name = function() return i18n("Haste Rating") end, desc = function() return i18n("Shows/Hides the melee haste rating.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, get = function () return ExtendedCharacterStats.profile.melee.hasteRating.display; end, set = function (_, value) @@ -129,7 +135,7 @@ function _Config:LoadMeleeSection() name = function() return i18n("Haste Bonus") end, desc = function() return i18n("Shows/Hides the melee haste bonus value.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, get = function () return ExtendedCharacterStats.profile.melee.hasteBonus.display; end, set = function (_, value) @@ -162,7 +168,7 @@ function _Config:LoadMeleeSection() name = function() return i18n("Hit Rating") end, desc = function() return i18n("Shows/Hides the melee hit rating.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return ((not ExtendedCharacterStats.profile.melee.display) or (not ExtendedCharacterStats.profile.melee.hit.display)) @@ -229,7 +235,7 @@ function _Config:LoadMeleeSection() name = function() return i18n("Glancing Blow") end, desc = function() return i18n("Shows/Hides all glancing blow stats") end, width = 1.5, - hidden = function() return ECS.IsWotlk end, + hidden = function() return IsWotlk end, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, get = function () return ExtendedCharacterStats.profile.melee.glance.display; end, set = function (_, value) @@ -242,7 +248,7 @@ function _Config:LoadMeleeSection() order = 6, inline = true, name = function() return i18n("Melee Glance Values") end, - hidden = function() return ECS.IsWotlk end, + hidden = function() return IsWotlk end, args = { meleeGlance = { type = "toggle", diff --git a/Modules/Config/RangeSection.lua b/Modules/Config/RangeSection.lua index 56a5213f..44b24adf 100755 --- a/Modules/Config/RangeSection.lua +++ b/Modules/Config/RangeSection.lua @@ -1,3 +1,9 @@ +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats +local IsClassic = ECS.IsClassic +local IsWotlk = ECS.IsWotlk +local UnitHasRelicSlot = UnitHasRelicSlot + ---@class Config local Config = ECSLoader:ImportModule("Config") local _Config = Config.private @@ -73,7 +79,7 @@ function _Config:LoadRangeSection() name = function() return i18n("Armor Pen. Rating") end, desc = function() return i18n("Shows/Hides the armor penetration rating value.") end, width = 1.5, - hidden = function() return (not ECS.IsWotlk) end, + hidden = function() return (not IsWotlk) end, disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, get = function () return ExtendedCharacterStats.profile.ranged.penetrationRating.display; end, set = function (_, value) @@ -87,7 +93,7 @@ function _Config:LoadRangeSection() name = function() return i18n("Haste Rating") end, desc = function() return i18n("Shows/Hides the ranged haste rating.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, get = function () return ExtendedCharacterStats.profile.ranged.hasteRating.display; end, set = function (_, value) @@ -101,7 +107,7 @@ function _Config:LoadRangeSection() name = function() return i18n("Haste Bonus") end, desc = function() return i18n("Shows/Hides the ranged haste bonus value.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, get = function () return ExtendedCharacterStats.profile.ranged.hasteBonus.display; end, set = function (_, value) @@ -147,7 +153,7 @@ function _Config:LoadRangeSection() name = function() return i18n("Hit Rating") end, desc = function() return i18n("Shows/Hides the ranged hit rating.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return ((not ExtendedCharacterStats.profile.ranged.display) or (not ExtendedCharacterStats.profile.ranged.hit.display)) diff --git a/Modules/Config/SpellSchoolsSection.lua b/Modules/Config/SpellSchoolsSection.lua index bc3b5881..f365530e 100644 --- a/Modules/Config/SpellSchoolsSection.lua +++ b/Modules/Config/SpellSchoolsSection.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats + ---@class Config local Config = ECSLoader:ImportModule("Config") local _Config = Config.private diff --git a/Modules/Config/SpellSection.lua b/Modules/Config/SpellSection.lua index 3e971d7e..4f7fbe42 100755 --- a/Modules/Config/SpellSection.lua +++ b/Modules/Config/SpellSection.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local IsClassic = ECS.IsClassic + ---@class Config local Config = ECSLoader:ImportModule("Config") local _Config = Config.private @@ -46,7 +49,7 @@ function _Config:LoadSpellSection() name = function() return i18n("Haste Rating") end, desc = function() return i18n("Shows/Hides the spell haste rating value.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, get = function () return ExtendedCharacterStats.profile.spell.hasteRating.display; end, set = function (_, value) @@ -92,7 +95,7 @@ function _Config:LoadSpellSection() name = function() return i18n("Hit Rating") end, desc = function() return i18n("Shows/Hides the spell hit rating.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, + hidden = function() return IsClassic end, disabled = function() return ((not ExtendedCharacterStats.profile.spell.display) or (not ExtendedCharacterStats.profile.spell.hit.display)) diff --git a/Modules/Data/Constants.lua b/Modules/Data/Constants.lua index 7f424a18..0d99403b 100755 --- a/Modules/Data/Constants.lua +++ b/Modules/Data/Constants.lua @@ -1,3 +1,7 @@ +local ECSLoader = ECSLoader +local IsClassic = ECS.IsClassic +local IsWotlk = ECS.IsWotlk + ---@class Data local Data = ECSLoader:ImportModule("Data") @@ -22,14 +26,14 @@ Data.DRUID = 11 Data.Aura = { AllowCastingManaRegeneration = { - [6117] = (ECS.IsWotlk and 0.5 or 0.3), -- Mage Armor rank 1 + [6117] = (IsWotlk and 0.5 or 0.3), -- Mage Armor rank 1 [12051] = 1, -- Evocation - [15271] = (ECS.IsWotlk and 0.83 or 0.5), -- Spirit Tap + [15271] = (IsWotlk and 0.83 or 0.5), -- Spirit Tap [18371] = 0.5, -- Soul Siphon - [22782] = (ECS.IsWotlk and 0.5 or 0.3), -- Mage Armor rank 2 - [22783] = (ECS.IsWotlk and 0.5 or 0.3), -- Mage Armor rank 3 + [22782] = (IsWotlk and 0.5 or 0.3), -- Mage Armor rank 2 + [22783] = (IsWotlk and 0.5 or 0.3), -- Mage Armor rank 3 [23684] = 1, -- Aura of the Blue Dragon - [27125] = (ECS.IsWotlk and 0.5 or 0.3), -- Mage Armor rank 4 + [27125] = (IsWotlk and 0.5 or 0.3), -- Mage Armor rank 4 [29166] = 1, -- Innervate [32932] = 1, -- Sun Shield [38346] = 0.15, -- Meditation @@ -47,9 +51,9 @@ Data.Aura = { [1213422] = 1, -- Aura of the Blue Dragon }, CritReductionAll = { - [21183] = (ECS.IsWotlk and -1 or nil), -- Hearth of the Crusader + [21183] = (IsWotlk and -1 or nil), -- Hearth of the Crusader [30482] = 5, -- Molten Armor - [30708] = (ECS.IsWotlk and -3 or nil), -- totem of wrath + [30708] = (IsWotlk and -3 or nil), -- totem of wrath [31966] = -3, -- Physical Debuffs 2 [33143] = 1000, -- Blessed Resilience [35915] = 5, -- Molten Armor @@ -72,12 +76,12 @@ Data.Aura = { [408680] = 6, -- way of earth }, CritReductionSpell = { - [17794] = (ECS.IsWotlk and -1 or nil), -- Shadow Mastery 1/5 - [17797] = (ECS.IsWotlk and -3 or nil), -- Shadow Mastery 2/5 - [17798] = (ECS.IsWotlk and -2 or nil), -- Shadow Mastery 3/5 - [17799] = (ECS.IsWotlk and -4 or nil), -- Shadow Mastery 4/5 - [17800] = (ECS.IsWotlk and -5 or nil), -- Shadow Mastery 5/5 - [22959] = (ECS.IsWotlk and -5 or nil), -- Improved Scorch + [17794] = (IsWotlk and -1 or nil), -- Shadow Mastery 1/5 + [17797] = (IsWotlk and -3 or nil), -- Shadow Mastery 2/5 + [17798] = (IsWotlk and -2 or nil), -- Shadow Mastery 3/5 + [17799] = (IsWotlk and -4 or nil), -- Shadow Mastery 4/5 + [17800] = (IsWotlk and -5 or nil), -- Shadow Mastery 5/5 + [22959] = (IsWotlk and -5 or nil), -- Improved Scorch }, IsFeralForm = { [768] = true, -- Cat Form @@ -124,12 +128,12 @@ Data.Aura = { [10250] = 800, -- drink [16609] = 10, -- Warchief's Blessing [18140] = 735, -- Blessed Sunfruit Juice - [18194] = (ECS.IsWotlk and 10 or 8), -- Mana Regeneration + [18194] = (IsWotlk and 10 or 8), -- Mana Regeneration [21172] = 75, -- Grip of Command [21174] = 50, -- Aura of Battle [22734] = 700, -- drink [23698] = 735, -- Alterac Spring Water - [24363] = (ECS.IsWotlk and 15 or 12), -- Mana Regeneration + [24363] = (IsWotlk and 15 or 12), -- Mana Regeneration [24398] = 43, -- Water Shield Rank 1 TBC / 7 WOTLK [25696] = 735, -- Drink [25697] = 735, -- Old Enriched Manna Biscuit @@ -142,36 +146,36 @@ Data.Aura = { [26473] = 367, -- drink [26475] = 551, -- drink [27089] = 240*5, -- Drink - [28145] = (ECS.IsWotlk and 14 or 11), -- Power of the Guardian - [28509] = (ECS.IsWotlk and 20 or 16), -- Greater Mana Regeneration - [28519] = (ECS.IsWotlk and 31 or 25), -- Flask of Mighty Restoration - [28795] = (ECS.IsWotlk and 35 or 28), -- Holy Power - [28804] = (ECS.IsWotlk and 30 or 24), -- Epiphany - [28820] = (ECS.IsWotlk and 19 or 15), -- Lightning Shield - [28824] = (ECS.IsWotlk and 35 or 28), -- Totemic Power + [28145] = (IsWotlk and 14 or 11), -- Power of the Guardian + [28509] = (IsWotlk and 20 or 16), -- Greater Mana Regeneration + [28519] = (IsWotlk and 31 or 25), -- Flask of Mighty Restoration + [28795] = (IsWotlk and 35 or 28), -- Holy Power + [28804] = (IsWotlk and 30 or 24), -- Epiphany + [28820] = (IsWotlk and 19 or 15), -- Lightning Shield + [28824] = (IsWotlk and 35 or 28), -- Totemic Power [29007] = 489, -- Drink [29039] = 300, -- Fizzy Energy Drink - [31036] = (ECS.IsWotlk and 56 or 45), -- Verdant Flame + [31036] = (IsWotlk and 56 or 45), -- Verdant Flame [31462] = 12, -- Moonwell Restoration [32548] = 33, -- Symbol of Hope - [33265] = (ECS.IsWotlk and 10 or 8), -- well fed + [33265] = (IsWotlk and 10 or 8), -- well fed [33736] = 50, -- Water Shield Rank 2 TBC / 8 WOTLK [33774] = 735, -- Underspore Pod [34291] = 850, -- drink [34410] = 10, -- Hellscream's Warsong - [35095] = (ECS.IsWotlk and 26 or 21), -- Enlightenment - [37656] = (ECS.IsWotlk and 95 or 76), -- wisdom - [38437] = (ECS.IsWotlk and 19 or 15), -- Totemic Mastery - [40568] = (ECS.IsWotlk and 12 or 8), -- Unstable Flask of the Elder Only works in Blade's Edge Mountains Plateaus and Gruul's Lair. - [40582] = (ECS.IsWotlk and 12 or 8), -- Unstable Flask of the Elder Only works in Blade's Edge Mountains Plateaus and Gruul's Lair. - [41605] = (ECS.IsWotlk and 31 or 25), -- Mighty Restoration of Shattrath Only active in Tempest Keep, Serpentshrine Cavern, Caverns of Time: Mount Hyjal, Black Temple and the Sunwell Plateau. - [41610] = (ECS.IsWotlk and 31 or 25), -- Mighty Restoration of Shattrath Only active in Tempest Keep, Serpentshrine Cavern, Caverns of Time: Mount Hyjal, Black Temple and the Sunwell Plateau. + [35095] = (IsWotlk and 26 or 21), -- Enlightenment + [37656] = (IsWotlk and 95 or 76), -- wisdom + [38437] = (IsWotlk and 19 or 15), -- Totemic Mastery + [40568] = (IsWotlk and 12 or 8), -- Unstable Flask of the Elder Only works in Blade's Edge Mountains Plateaus and Gruul's Lair. + [40582] = (IsWotlk and 12 or 8), -- Unstable Flask of the Elder Only works in Blade's Edge Mountains Plateaus and Gruul's Lair. + [41605] = (IsWotlk and 31 or 25), -- Mighty Restoration of Shattrath Only active in Tempest Keep, Serpentshrine Cavern, Caverns of Time: Mount Hyjal, Black Temple and the Sunwell Plateau. + [41610] = (IsWotlk and 31 or 25), -- Mighty Restoration of Shattrath Only active in Tempest Keep, Serpentshrine Cavern, Caverns of Time: Mount Hyjal, Black Temple and the Sunwell Plateau. [42308] = 1250, -- brain food [42312] = 1200, -- Brain Food [43154] = 489, -- Drink [43182] = 428*5, -- Drink [43183] = 640*5, -- Drink - [43742] = (ECS.IsWotlk and 28 or 22), -- Grace of the Naaru + [43742] = (IsWotlk and 28 or 22), -- Grace of the Naaru [44107] = 42, -- Brewfest Drink [44109] = 104, -- Brewfest Drink [44110] = 174, -- Brewfest Drink @@ -183,7 +187,7 @@ Data.Aura = { [44116] = 1200, -- Brewfest Drink [45019] = 332, -- Holiday Drink [45020] = 1200, -- Holiday Drink - [46386] = (ECS.IsWotlk and 83 or 66), -- Luminous Bluetail + [46386] = (IsWotlk and 83 or 66), -- Luminous Bluetail [46755] = 240, -- drink [49472] = 240*5, -- Drink Coffee [49623] = 125, -- Effervescence @@ -233,19 +237,19 @@ Data.Aura = { [1220685] = 28, -- Totemic Power }, MP5Tooltip = { - [5677] = (ECS.IsWotlk and 5/2 or nil), -- Mana Spring rank 1 - [10491] = (ECS.IsWotlk and 5/2 or nil), -- Mana Spring rank 2 - [10493] = (ECS.IsWotlk and 5/2 or nil), -- Mana Spring rank 3 - [10494] = (ECS.IsWotlk and 5/2 or nil), -- Mana Spring rank 4 - [19742] = ((not ECS.IsClassic) and 1 or nil), -- Blessing of Wisdom rank 1 - [19850] = ((not ECS.IsClassic) and 1 or nil), -- Blessing of Wisdom rank 2 - [19852] = ((not ECS.IsClassic) and 1 or nil), -- Blessing of Wisdom rank 3 - [19853] = ((not ECS.IsClassic) and 1 or nil), -- Blessing of Wisdom rank 4 - [19854] = ((not ECS.IsClassic) and 1 or nil), -- Blessing of Wisdom rank 5 - [25290] = ((not ECS.IsClassic) and 1 or nil), -- Blessing of Wisdom rank 6 - [25569] = (ECS.IsWotlk and 5/2 or nil), -- Mana Spring rank 5 - [25894] = ((not ECS.IsClassic) and 1 or nil), -- Greater Blessing of Wisdom rank 1 - [25918] = ((not ECS.IsClassic) and 1 or nil), -- Greater Blessing of Wisdom rank 2 + [5677] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 1 + [10491] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 2 + [10493] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 3 + [10494] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 4 + [19742] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 1 + [19850] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 2 + [19852] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 3 + [19853] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 4 + [19854] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 5 + [25290] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 6 + [25569] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 5 + [25894] = ((not IsClassic) and 1 or nil), -- Greater Blessing of Wisdom rank 1 + [25918] = ((not IsClassic) and 1 or nil), -- Greater Blessing of Wisdom rank 2 [27142] = 1, -- Blessing of Wisdom rank 7 [27143] = 1, -- Greater Blessing of Wisdom rank 3 [48935] = 1, -- Blessing of Wisdom rank 8 @@ -258,12 +262,12 @@ Data.Aura = { [58777] = 5/2, -- Mana Spring rank 8 }, PercentageMp5 = { - [12051] = ((not ECS.IsClassic) and 0.15/2*5 or nil), -- Evocation - [18792] = (ECS.IsClassic and 0.02/4 or 0.03/4)*5, -- Fel Energy + [12051] = ((not IsClassic) and 0.15/2*5 or nil), -- Evocation + [18792] = (IsClassic and 0.02/4 or 0.03/4)*5, -- Fel Energy [24355] = 0.02*5, -- Drink [24707] = 0.03*5, -- Food [25990] = 0.05*5, -- Graccu's Mince Meat Fruitcake - [26263] = (ECS.IsClassic and 0.04 or 0.03)*5, -- Dim Sum + [26263] = (IsClassic and 0.04 or 0.03)*5, -- Dim Sum [29055] = 0.04*5, -- Refreshing Red Apple [30024] = 0.2*5, -- Drink [30254] = 0.05*5, -- Evocation @@ -336,23 +340,23 @@ Data.Aura = { [462858] = 750, -- Circle of Flame }, PeriodicallyGiveManaTooltip = { - [5677] = ((not ECS.IsWotlk) and 5/2 or nil), -- Mana Spring rank 1 - [10491] = ((not ECS.IsWotlk) and 5/2 or nil), -- Mana Spring rank 2 - [10493] = ((not ECS.IsWotlk) and 5/2 or nil), -- Mana Spring rank 3 - [10494] = ((not ECS.IsWotlk) and 5/2 or nil), -- Mana Spring rank 4 - [19742] = (ECS.IsClassic and 1 or nil), -- Blessing of Wisdom rank 1 - [19850] = (ECS.IsClassic and 1 or nil), -- Blessing of Wisdom rank 2 - [19852] = (ECS.IsClassic and 1 or nil), -- Blessing of Wisdom rank 3 - [19853] = (ECS.IsClassic and 1 or nil), -- Blessing of Wisdom rank 4 - [19854] = (ECS.IsClassic and 1 or nil), -- Blessing of Wisdom rank 5 + [5677] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 1 + [10491] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 2 + [10493] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 3 + [10494] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 4 + [19742] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 1 + [19850] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 2 + [19852] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 3 + [19853] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 4 + [19854] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 5 [24853] = 5/2, -- Mana Spring - [25290] = (ECS.IsClassic and 1 or nil), -- Blessing of Wisdom rank 6 - [25569] = ((not ECS.IsWotlk) and 5/2 or nil), -- Mana Spring rank 5 - [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 + [25290] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 6 + [25569] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 5 + [25894] = (IsClassic and 1 or nil), -- Greater Blessing of Wisdom rank 1 + [25918] = (IsClassic and 1 or nil), -- Greater Blessing of Wisdom rank 2 }, SpellCrit = { - [24907] = ((not ECS.IsClassic) and 5 or nil), -- Moonkin Aura + [24907] = ((not IsClassic) and 5 or nil), -- Moonkin Aura [29177] = 6, -- Elemental Devastation Rank 2 [29178] = 9, -- Elemental Devastation Rank 3 [30165] = 3, -- Elemental Devastation Rank 1 diff --git a/Modules/Data/Data.lua b/Modules/Data/Data.lua index 4d1f3fe1..f27505f8 100755 --- a/Modules/Data/Data.lua +++ b/Modules/Data/Data.lua @@ -1,3 +1,7 @@ +local ECSLoader = ECSLoader +local IsClassic = ECS.IsClassic +local IsWotlk = ECS.IsWotlk + ---@class Data local Data = ECSLoader:CreateModule("Data") @@ -22,11 +26,11 @@ dataFunctionRefs = { -- Melee ["MeleeAttackPower"] = function() return Data:GetMeleeAttackPower() end, ["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, + ["Expertise"] = function() return IsClassic and 0 or Data:GetExpertise() end, + ["ExpertiseRating"] = function() return IsClassic and 0 or Data:GetExpertiseRating() end, ["MeleeArmorPenetration"] = function() return Data:GetArmorPenetration() end, - ["MeleeArmorPenetrationRating"] = function() return ECS.IsWotlk and Data:GetArmorPenetrationRating() or 0 end, - ["MeleeHitRating"] = function() return ECS.IsClassic and 0 or Data:MeleeHitRating() end, + ["MeleeArmorPenetrationRating"] = function() return IsWotlk and Data:GetArmorPenetrationRating() or 0 end, + ["MeleeHitRating"] = function() return IsClassic and 0 or Data:MeleeHitRating() end, ["MeleeHitBonus"] = function() return Data:MeleeHitBonus() end, ["MeleeHitSameLevel"] = function() return Data:MeleeHitMissChanceSameLevel() end, ["MeleeHitBossLevel"] = function() return Data:MeleeHitMissChanceBossLevel() end, @@ -37,20 +41,20 @@ dataFunctionRefs = { ["GlanceDamageSameLevel"] = function() return Data:GlanceDamageSameLevel() end, ["GlanceDamageBossLevel"] = function() return Data:GlanceDamageBossLevel() end, - ["MeleeHasteRating"] = function() return ECS.IsClassic and 0 or Data:GetMeleeHasteRating() end, + ["MeleeHasteRating"] = function() return IsClassic and 0 or Data:GetMeleeHasteRating() end, ["MeleeHasteBonus"] = function() return Data:GetMeleeHasteBonus() end, ["MeleeAttackSpeedMainHand"] = function() return Data:GetMeleeAttackSpeedMainHand() end, ["MeleeAttackSpeedOffHand"] = function() return Data:GetMeleeAttackSpeedOffHand() end, -- Ranged ["RangeAttackpower"] = function() return Data:GetRangeAttackPower() end, ["RangedCritChance"] = function() return Data:RangedCrit() end, - ["RangedHitRating"] = function() return ECS.IsClassic and 0 or Data:RangeHitRating() end, + ["RangedHitRating"] = function() return IsClassic and 0 or Data:RangeHitRating() end, ["RangedHitBonus"] = function() return Data:RangeHitBonus() end, ["RangedHitSameLevel"] = function() return Data:RangeMissChanceSameLevel() end, ["RangedArmorPenetration"] = function() return Data:GetArmorPenetration() end, - ["RangedArmorPenetrationRating"] = function() return ECS.IsWotlk and Data:GetArmorPenetrationRating() or 0 end, + ["RangedArmorPenetrationRating"] = function() return IsWotlk and Data:GetArmorPenetrationRating() or 0 end, ["RangedHitBossLevel"] = function() return Data.RangeMissChanceBossLevel() end, - ["RangedHasteRating"] = function() return ECS.IsClassic and 0 or Data:GetRangedHasteRating() end, + ["RangedHasteRating"] = function() return IsClassic and 0 or Data:GetRangedHasteRating() end, ["RangedHasteBonus"] = function() return Data:GetRangedHasteBonus() end, ["RangedAttackSpeed"] = function() return Data:GetRangedAttackSpeed() end, -- Defense @@ -60,20 +64,20 @@ dataFunctionRefs = { ["SpellCritReduction"] = function() return Data:GetSpellCritReduction() end, ["Avoidance"] = function() return Data:GetAvoidance(playerLevel) end, ["AvoidanceBoss"] = function() return Data:GetAvoidance(enemyLevel) end, - ["DefenseRating"] = function() return ECS.IsClassic and 0 or Data:GetDefenseRating() end, + ["DefenseRating"] = function() return IsClassic and 0 or Data:GetDefenseRating() end, ["DefenseValue"] = function() return Data:GetDefenseValue() end, ["DodgeChance"] = function() return Data:GetDodgeChance() end, ["ParryChance"] = function() return Data:GetParryChance() end, ["BlockChance"] = function() return Data:GetBlockChance() end, ["BlockValue"] = function() return Data:GetBlockValue() end, - ["ResilienceValue"] = function() return ECS.IsClassic and 0 or Data:GetResilienceRating() end, + ["ResilienceValue"] = function() return IsClassic and 0 or Data:GetResilienceRating() end, -- Spell - ["SpellHitRating"] = function() return ECS.IsClassic and 0 or Data:SpellHitRating() end, + ["SpellHitRating"] = function() return IsClassic and 0 or Data:SpellHitRating() end, ["SpellHitBonus"] = function() return Data.SpellHitBonus(Data.HOLY_SCHOOL) end, ["SpellHitSameLevel"] = function() return Data:SpellMissChanceSameLevel(Data.HOLY_SCHOOL) end, ["SpellHitBossLevel"] = function() return Data:SpellMissChanceBossLevel(Data.HOLY_SCHOOL) end, ["SpellCritChance"] = function() return Data:GetSpellCrit(Data.HOLY_SCHOOL) end, - ["SpellHasteRating"] = function() return ECS.IsClassic and 0 or Data:GetSpellHasteRating() end, + ["SpellHasteRating"] = function() return IsClassic and 0 or Data:GetSpellHasteRating() end, ["SpellHasteBonus"] = function() return Data:GetSpellHasteBonus() end, ["SpellPenetration"] = function() return Data:GetSpellPenetration() end, -- MP5 diff --git a/Modules/Data/DataUtils.lua b/Modules/Data/DataUtils.lua index ba8acc34..944f9176 100644 --- a/Modules/Data/DataUtils.lua +++ b/Modules/Data/DataUtils.lua @@ -1,10 +1,21 @@ +local ECSLoader = ECSLoader +local floor = math.floor +local GetBuffDataByIndex = C_UnitAuras.GetBuffDataByIndex +local GetInventoryItemID = GetInventoryItemID +local GetInventoryItemLink = GetInventoryItemLink +local GetItemInfo = C_Item.GetItemInfo +local GetRuneForEquipmentSlot = C_Engraving.GetRuneForEquipmentSlot +local IsSoD = ECS.IsSoD +local IsSpellKnown = C_SpellBook.IsSpellKnown +local IsWotlk = ECS.IsWotlk +local strsplit = strsplit +local tonumber = tonumber + ---@class DataUtils local DataUtils = ECSLoader:CreateModule("DataUtils") ---@type Data local Data = ECSLoader:ImportModule("Data") -local IsSpellKnown = C_SpellBook.IsSpellKnown - --- Rounds every number down to the given decimal places ---@param num number ---@param decimalPlaces number @@ -14,14 +25,14 @@ function DataUtils:Round(num, decimalPlaces) return 0 end local mult = 10^(decimalPlaces) - return math.floor(num * mult + 0.5) / mult + return floor(num * mult + 0.5) / mult end ---@return boolean function DataUtils:IsShapeshifted() local i = 1 repeat - local aura = C_UnitAuras.GetBuffDataByIndex("player", i) + local aura = GetBuffDataByIndex("player", i) i = i + 1 if aura and aura.spellId then if Data.Aura.IsFeralForm[aura.spellId] then @@ -44,7 +55,7 @@ function DataUtils.GetMissChanceByDifference(weaponSkill, defenseValue) -- For a difference of 11-14 each point in weapon skill is worth 0.4% miss chance reduction local extraWeaponSkillDifference = ((15 - delta) * 0.2) return DataUtils:Round(6 + delta * 0.2 - extraWeaponSkillDifference, 2) - elseif ECS.IsWotlk then + elseif IsWotlk then -- For a difference of 15+ each point in weapon skill is worth 0.2% miss chance reduction return 5 + delta * 0.2 else @@ -107,7 +118,7 @@ end ---@return number|nil function DataUtils:GetEnchantFromItemLink(itemLink) if itemLink then - local _, itemStringLink = C_Item.GetItemInfo(itemLink) + local _, itemStringLink = GetItemInfo(itemLink) if itemStringLink then local _, _, enchant, _ = strsplit(":", itemStringLink, 4) return tonumber(enchant) @@ -120,7 +131,7 @@ end ---@return number|nil function DataUtils.GetRuneForEquipSlot(equipSlot) local slotId, _ = GetInventorySlotInfo(equipSlot) - local runeInfo = C_Engraving.GetRuneForEquipmentSlot(slotId) + local runeInfo = GetRuneForEquipmentSlot(slotId) if runeInfo then return runeInfo.itemEnchantmentID @@ -133,7 +144,7 @@ end ---@return string | nil, string | nil, string | nil function DataUtils:GetSocketedGemsFromItemLink(itemLink) if itemLink then - local _, itemStringLink = C_Item.GetItemInfo(itemLink) + local _, itemStringLink = GetItemInfo(itemLink) if itemStringLink then local _, _, gem1, gem2, gem3, _ = strsplit(":", itemStringLink, 6) return gem1, gem2, gem3 @@ -157,7 +168,7 @@ end ---@return number function DataUtils:GetActiveTalentSpell(talentList) for i = #talentList,1,-1 do - if C_SpellBook.IsSpellKnown(talentList[i]) then + if IsSpellKnown(talentList[i]) then return i end end @@ -167,7 +178,7 @@ function DataUtils:GetActiveTalentSpell(talentList) ---@return number function DataUtils:CountTimewornItems() local timeworn = 0 - if ECS.IsSoD then + if IsSoD then for i = 1, 18 do local id, _ = GetInventoryItemID("player", i) if Data.Item.IsTimeworn[id] then diff --git a/Modules/Data/Defense.lua b/Modules/Data/Defense.lua index f9511d57..f4421082 100755 --- a/Modules/Data/Defense.lua +++ b/Modules/Data/Defense.lua @@ -1,3 +1,25 @@ +local CR_DEFENSE_SKILL = CR_DEFENSE_SKILL +local ECSLoader = ECSLoader +local floor = math.floor +local GetBlockChance = GetBlockChance +local GetBuffDataByIndex = C_UnitAuras.GetBuffDataByIndex +local GetCombatRating = GetCombatRating +local GetCombatRatingBonus = GetCombatRatingBonus +local GetDebuffDataByIndex = C_UnitAuras.GetDebuffDataByIndex +local GetDodgeChance = GetBlockChance +local GetInventoryItemLink = GetInventoryItemLink +local GetParryChance = GetBlockChance +local GetShieldBlock = GetShieldBlock +local IsClassic = ECS.IsClassic +local IsSoD = ECS.IsSoD +local IsSpellKnown = C_SpellBook.IsSpellKnown +local IsTBC = ECS.IsTBC +local IsWotlk = ECS.IsWotlk +local OffhandHasShield = C_PaperDollInfo.OffhandHasShield +local UnitArmor = UnitArmor +local UnitClass = UnitClass +local UnitLevel = UnitLevel + ---@class Data local Data = ECSLoader:ImportModule("Data") ---@type DataUtils @@ -29,27 +51,27 @@ function _Defense:GetCritReduction() local spellCritReduction = 0 local i = 1 repeat - local aura = C_UnitAuras.GetAuraDataByIndex("player", i, "HELPFUL") + local aura = GetBuffDataByIndex("player", i) i = i + 1 if aura and aura.spellId then buffBonus = buffBonus + (Data.Aura.CritReductionAll[aura.spellId] or 0) meleeCritReduction = meleeCritReduction + (Data.Aura.CritReductionMelee[aura.spellId] or 0) - if ECS.IsWotlk and aura.spellId == 22812 and C_SpellBook.IsSpellKnown(63058) then + if IsWotlk and aura.spellId == 22812 and IsSpellKnown(63058) then buffBonus = buffBonus + 25 -- Glyph of Barkskin end end until (not aura) i = 1 repeat - local aura = C_UnitAuras.GetAuraDataByIndex("player", i, "HARMFUL") + local aura = GetDebuffDataByIndex("player", i) i = i + 1 if aura and aura.spellId then buffBonus = buffBonus + (Data.Aura.CritReductionAll[aura.spellId] or 0) meleeCritReduction = meleeCritReduction + (Data.Aura.CritReductionMelee[aura.spellId] or 0) spellCritReduction = spellCritReduction + (Data.Aura.CritReductionSpell[aura.spellId] or 0) - if ECS.IsWotlk and aura.spellId == 12579 then + if IsWotlk and aura.spellId == 12579 then spellCritReduction = spellCritReduction - 1 * aura.applications -- Winter's Chill - elseif ECS.IsSoD and aura.spellId == 1231399 then -- Legislate + elseif IsSoD and aura.spellId == 1231399 then -- Legislate buffBonus = buffBonus - 3 * aura.applications end end @@ -63,10 +85,10 @@ function _Defense:GetCritReduction() local critReducingFromResilience = GetCombatRatingBonus(15) if classId == Data.DRUID then - local coeff = ECS.IsWotlk and 2 or 1 + local coeff = IsWotlk and 2 or 1 meleeCritReduction = meleeCritReduction + coeff * DataUtils:GetActiveTalentSpell({33853,33855,33856}) -- Survival of the Fittest elseif classId == Data.PRIEST then - if ECS.IsTBC then + if IsTBC then spellCritReduction = spellCritReduction + 2 * DataUtils:GetActiveTalentSpell({14910,33371}) -- shadow resilience end elseif classId == Data.ROGUE then @@ -74,14 +96,14 @@ function _Defense:GetCritReduction() meleeCritReduction = meleeCritReduction + mod rangedCritReduction = rangedCritReduction + mod elseif classId == Data.WARLOCK then - if not ECS.IsClassic then + if not IsClassic then local mod = 1 * DataUtils:GetActiveTalentSpell({30319,30320,30321}) -- Demonic Resilience meleeCritReduction = meleeCritReduction + mod rangedCritReduction = rangedCritReduction + mod end end - if ECS.IsSoD then + if IsSoD then if classId == Data.DRUID or classId == Data.ROGUE then local chestRune = DataUtils.GetRuneForEquipSlot(Utils.CHAR_EQUIP_SLOTS.Chest) if chestRune and (chestRune == 6710 or chestRune == 6972) then @@ -121,8 +143,8 @@ function _Defense:GetEnemyMissChance(enemyLevel) local enemyAttackRating = enemyLevel * 5 local miss - if ECS.IsWotlk then - local defense = math.floor(GetCombatRatingBonus(CR_DEFENSE_SKILL)); + if IsWotlk then + local defense = floor(GetCombatRatingBonus(CR_DEFENSE_SKILL)); local enemyMissCoef = classId == Data.DRUID and 0.972 or 0.956; -- 0.972 for bears local baseMissChance = 5 - (enemyAttackRating - select(1, UnitDefense("player"))) * 0.04; -- vs lvl 80 if defense > 0 then -- avoid possible division by 0 @@ -142,7 +164,7 @@ end ---@return number function _Defense:GetBlockChance() local block = 0 - if C_SpellBook.IsSpellKnown(107) and C_PaperDollInfo.OffhandHasShield() then + if IsSpellKnown(107) and OffhandHasShield() then block = GetBlockChance() end return block @@ -151,7 +173,7 @@ end ---@return number function _Defense:GetParryChance() local parry = 0 - if C_SpellBook.IsSpellKnown(3127) or C_SpellBook.IsSpellKnown(18848) or C_SpellBook.IsSpellKnown(3124) then + if IsSpellKnown(3127) or IsSpellKnown(18848) or IsSpellKnown(3124) then parry = GetParryChance() end return parry @@ -160,7 +182,7 @@ end ---@return number function _Defense:GetDodgeChance() local dodge = 0 - if C_SpellBook.IsSpellKnown(81) then + if IsSpellKnown(81) then dodge = GetDodgeChance() end return dodge @@ -211,7 +233,7 @@ end ---@return number function Data:GetBlockValue() local blockValue = 0 - if C_SpellBook.IsSpellKnown(107) and C_PaperDollInfo.OffhandHasShield() then + if IsSpellKnown(107) and OffhandHasShield() then blockValue = blockValue + GetShieldBlock() + _Defense:GetEnchantsBlockValue() end return DataUtils:Round(blockValue, 2) diff --git a/Modules/Data/General.lua b/Modules/Data/General.lua index d8c8f7e2..f69cea20 100644 --- a/Modules/Data/General.lua +++ b/Modules/Data/General.lua @@ -1,3 +1,9 @@ +local ECSLoader = ECSLoader +local GetUnitSpeed = GetUnitSpeed +local IsClassic = ECS.IsClassic +local IsFlying = IsFlying +local IsSwimming = IsSwimming + ---@class Data local Data = ECSLoader:ImportModule("Data") ---@type DataUtils @@ -10,7 +16,7 @@ function Data:GetMovementSpeed() local currentSpeed - if (not ECS.IsClassic) and IsFlying() then + if (not IsClassic) and IsFlying() then currentSpeed = flightSpeed elseif IsSwimming() then currentSpeed = swimSpeed diff --git a/Modules/Data/ItemSets.lua b/Modules/Data/ItemSets.lua index 7e07ffed..568c5058 100755 --- a/Modules/Data/ItemSets.lua +++ b/Modules/Data/ItemSets.lua @@ -1,3 +1,10 @@ +local ECSLoader = ECSLoader +local GetInventoryItemID = GetInventoryItemID +local IsClassic = ECS.IsClassic +local IsSoD = ECS.IsSoD +local IsWotlk = ECS.IsWotlk +local UnitClass = UnitClass + ---@class Data local Data = ECSLoader:ImportModule("Data") @@ -123,19 +130,19 @@ local itemSets = { ---@return number function Data:GetSetBonusModifierMP5() local mod = 0 - if (ECS.IsClassic and Data:IsSetBonusActive(setNames.GREEN_DRAGON_MAIL, 3)) then + if (IsClassic and Data:IsSetBonusActive(setNames.GREEN_DRAGON_MAIL, 3)) then mod = mod + 0.15 end - if (ECS.IsClassic and ( + if (IsClassic and ( (classId == Data.DRUID and Data:IsSetBonusActive(setNames.STORMRAGE_RAIMENT, 3)) or (classId == Data.PRIEST and Data:IsSetBonusActive(setNames.VESTMENTS_OF_TRANSCENDENCE, 3)) )) then mod = mod + 0.15 end - if (ECS.IsSoD and Data:IsSetBonusActive(setNames.LIVING_GREEN_DRAGON_MAIL, 3)) then + if (IsSoD and Data:IsSetBonusActive(setNames.LIVING_GREEN_DRAGON_MAIL, 3)) then mod = mod + 0.15 end - if (ECS.IsSoD and Data:IsSetBonusActive(setNames.DAWN_OF_TRANSCENDENCE, 2)) then + if (IsSoD and Data:IsSetBonusActive(setNames.DAWN_OF_TRANSCENDENCE, 2)) then mod = mod + 0.15 end if Data:IsSetBonusActive(setNames.PRIMAL_MOONCLOTH, 3) then @@ -151,32 +158,32 @@ function Data:GetSetBonusValueMP5() (classId == Data.SHAMAN and Data:IsSetBonusActive(setNames.AUGURS_REGALIA, 2)) or (classId == Data.PALADIN and Data:IsSetBonusActive(setNames.FREETHINKERS_ARMOR, 2) ) then - bonus = bonus + (ECS.IsWotlk and 5 or 4) + bonus = bonus + (IsWotlk and 5 or 4) end - if (ECS.IsSoD and Data:IsSetBonusActive(setNames.LIVING_GREEN_DRAGON_MAIL, 2)) then + if (IsSoD and Data:IsSetBonusActive(setNames.LIVING_GREEN_DRAGON_MAIL, 2)) then bonus = bonus + 3 end if Data:IsSetBonusActive(setNames.GREEN_DRAGON_MAIL, 2) then - bonus = bonus + (ECS.IsWotlk and 4 or 3) + bonus = bonus + (IsWotlk and 4 or 3) end - if (not ECS.IsClassic and Data:IsSetBonusActive(setNames.GREEN_DRAGON_MAIL, 3)) then - bonus = bonus + (ECS.IsWotlk and 25 or 20) + if (not IsClassic and Data:IsSetBonusActive(setNames.GREEN_DRAGON_MAIL, 3)) then + bonus = bonus + (IsWotlk and 25 or 20) end - if (not ECS.IsClassic and ( + if (not IsClassic and ( (classId == Data.DRUID and Data:IsSetBonusActive(setNames.STORMRAGE_RAIMENT, 3)) or (classId == Data.PRIEST and Data:IsSetBonusActive(setNames.VESTMENTS_OF_TRANSCENDENCE, 3)) ) ) then - bonus = bonus + (ECS.IsWotlk and 25 or 20) + bonus = bonus + (IsWotlk and 25 or 20) end if Data:IsSetBonusActive(setNames.BLOODSOUL_EMBRACE, 3) then - bonus = bonus + (ECS.IsWotlk and 15 or 12) + bonus = bonus + (IsWotlk and 15 or 12) end if Data:IsSetBonusActive(setNames.FEL_IRON_CHAIN, 4) then - bonus = bonus + (ECS.IsWotlk and 10 or 8) + bonus = bonus + (IsWotlk and 10 or 8) end if Data:IsSetBonusActive(setNames.WINDHAWK_ARMOR, 3) then - bonus = bonus + (ECS.IsWotlk and 10 or 8) + bonus = bonus + (IsWotlk and 10 or 8) end return bonus end diff --git a/Modules/Data/MP5.lua b/Modules/Data/MP5.lua index 5ea8de85..551751df 100755 --- a/Modules/Data/MP5.lua +++ b/Modules/Data/MP5.lua @@ -1,3 +1,18 @@ +local ECSLoader = ECSLoader +local GetBuffDataByIndex = C_UnitAuras.GetBuffDataByIndex +local GetDebuffDataByIndex = C_UnitAuras.GetDebuffDataByIndex +local GetInventoryItemLink = GetInventoryItemLink +local GetManaRegen = GetManaRegen +local GetWeaponEnchantInfo = GetWeaponEnchantInfo +local IsSoD = ECS.IsSoD +local IsTBC = ECS.IsTBC +local IsWotlk = ECS.IsWotlk +local match = string.match +local min = math.min +local tonumber = tonumber +local UnitClass = UnitClass +local UnitPowerMax = UnitPowerMax + ---@class Data local Data = ECSLoader:ImportModule("Data") ---@type DataUtils @@ -22,7 +37,7 @@ function Data:GetValueFromAuraTooltip(index,type) if region and region:GetObjectType() == "FontString" then local tooltip = region:GetText() if tooltip then - return tonumber(string.match(tooltip, '%d[%d,.]*')) + return tonumber(match(tooltip, '%d[%d,.]*')) end end return 0 @@ -122,7 +137,7 @@ function Data:GetMP5FromBuffs() local i = 1 repeat - local aura = C_UnitAuras.GetBuffDataByIndex("player", i) + local aura = GetBuffDataByIndex("player", i) if aura and aura.spellId then bonus = bonus + (Data.Aura.MP5[aura.spellId] or 0) bonus = bonus + (Data.Aura.PercentageMp5[aura.spellId] or 0) * maxmana @@ -137,7 +152,7 @@ function Data:GetMP5FromBuffs() if Data.Aura.PeriodicallyGiveManaTooltip[aura.spellId] then periodic = periodic + Data.Aura.PeriodicallyGiveManaTooltip[aura.spellId] * Data:GetValueFromAuraTooltip(i, "HELPFUL") end - if ECS.IsWotlk then + if IsWotlk then if aura.spellId == 64999 then bonus = bonus + 85 * aura.applications -- Meteoric Inspiration end @@ -147,7 +162,7 @@ function Data:GetMP5FromBuffs() until (not aura) i = 1 repeat - local aura = C_UnitAuras.GetDebuffDataByIndex("player", i) + local aura = GetDebuffDataByIndex("player", i) if aura and aura.spellId then bonus = bonus + (Data.Aura.PercentageMp5[aura.spellId] or 0) * maxmana end @@ -160,7 +175,7 @@ end function _MP5.GetMP5FromRunes() local mod = 0 - if (not ECS.IsSoD) then + if (not IsSoD) then return mod end @@ -179,17 +194,17 @@ function _MP5:GetTalentModifier() local mod = 0 if classId == Data.PRIEST then - local coeff = ECS.IsTBC and 0.1 or (ECS.IsWotlk and 0.5/3 or 0.05) + local coeff = IsTBC and 0.1 or (IsWotlk and 0.5/3 or 0.05) mod = mod + coeff * DataUtils:GetActiveTalentSpell({14521,14776,14777}) -- meditation elseif classId == Data.MAGE then - local coeff = ECS.IsTBC and 0.1 or (ECS.IsWotlk and 0.5/3 or 0.05) + local coeff = IsTBC and 0.1 or (IsWotlk and 0.5/3 or 0.05) mod = mod + coeff * DataUtils:GetActiveTalentSpell({14521,18463,18464}) -- arcane meditation - if ECS.IsWotlk then + if IsWotlk then mod = mod + 0.5/3 * DataUtils:GetActiveTalentSpell({34293,34295,34296}) -- pyromaniac end elseif classId == Data.DRUID then - local coeff = ECS.IsTBC and 0.1 or (ECS.IsWotlk and 0.5/3 or 0.05) + local coeff = IsTBC and 0.1 or (IsWotlk and 0.5/3 or 0.05) mod = mod + coeff * DataUtils:GetActiveTalentSpell({17106,17107,17108}) -- intensity/reflection end return mod diff --git a/Modules/Data/Melee.lua b/Modules/Data/Melee.lua index b10071c5..c86c55d6 100755 --- a/Modules/Data/Melee.lua +++ b/Modules/Data/Melee.lua @@ -1,3 +1,23 @@ +local CR_ARMOR_PENETRATION = CR_ARMOR_PENETRATION +local CR_EXPERTISE = CR_EXPERTISE +local CR_HASTE_MELEE = CR_HASTE_MELEE +local CR_HIT_MELEE = CR_HIT_MELEE +local ECSLoader = ECSLoader +local GetCombatRating = GetCombatRating +local GetCombatRatingBonus = GetCombatRatingBonus +local GetCritChance = GetCritChance +local GetExpertise = GetExpertise +local GetHitModifier = GetHitModifier +local GetShapeshiftFormInfo = GetShapeshiftFormInfo +local IsClassic = ECS.IsClassic +local IsSoD = ECS.IsSoD +local IsWotlk = ECS.IsWotlk +local UnitAttackBothHands = UnitAttackBothHands +local UnitAttackPower = UnitAttackPower +local UnitAttackSpeed = UnitAttackSpeed +local UnitClass = UnitClass +local UnitLevel = UnitLevel + ---@class Data local Data = ECSLoader:ImportModule("Data") ---@type DataUtils @@ -7,6 +27,7 @@ local Utils = ECSLoader:ImportModule("Utils") local _Melee = {} local _, _, classId = UnitClass("player") +local playerLevel = UnitLevel("player") ---@return number function Data:GetMeleeAttackPower() @@ -62,27 +83,27 @@ function _Melee:GetHitTalentBonus() local mod = 0 if classId == Data.WARRIOR then - if ECS.IsWotlk then + if IsWotlk then -- precision mod = 1 * DataUtils:GetActiveTalentSpell({29590,29591,29592}) end elseif classId == Data.HUNTER then - if ECS.IsWotlk then + if IsWotlk then -- focused aim mod = 1 * DataUtils:GetActiveTalentSpell({53620,53621,53622}) end elseif classId == Data.SHAMAN then - if ECS.IsWotlk then + if IsWotlk then -- Dual Wield Specialization if Data:GetMeleeAttackSpeedOffHand() > 0 then mod = 2 * DataUtils:GetActiveTalentSpell({30816,30818,30819}) end - elseif ECS.IsClassic then + elseif IsClassic then -- Nature's Guidance mod = 1 * DataUtils:GetActiveTalentSpell({16180,16196,16198}) end elseif classId == Data.ROGUE then - if ECS.IsClassic then + if IsClassic then -- precision mod = 1 * DataUtils:GetActiveTalentSpell({13705,13832,13843,13844,13845}) end @@ -101,7 +122,7 @@ end function _Melee.GetHitFromRunes() local mod = 0 - if (not ECS.IsSoD) then + if (not IsSoD) then return mod end @@ -118,7 +139,6 @@ end ---@return string function Data:MeleeHitMissChanceSameLevel() local mainBase, mainMod, _, _ = UnitAttackBothHands("player") - local playerLevel = UnitLevel("player") local enemyDefenseValue = playerLevel * 5 local missChance @@ -147,12 +167,11 @@ end ---@return string function Data:MeleeHitMissChanceBossLevel() local mainBase, mainMod, _, _ = UnitAttackBothHands("player") - local playerLevel = UnitLevel("player") local enemyDefenseValue = (playerLevel + 3) * 5 local missChance if DataUtils:IsShapeshifted() then - missChance = ECS.IsWotlk and 8 or 9 + missChance = IsWotlk and 8 or 9 else missChance = DataUtils.GetMissChanceByDifference(mainBase + mainMod, enemyDefenseValue) end @@ -184,7 +203,6 @@ end ---@return string function Data:GlanceHitChanceByLevel(level) local mainBase, mainMod, _, _ = UnitAttackBothHands("player") - local playerLevel = UnitLevel("player") local enemyDefenseValue = (playerLevel + level) * 5 local glancingChance = DataUtils:GetGlancingChanceByDifference(playerLevel, mainBase + mainMod, enemyDefenseValue) @@ -204,7 +222,6 @@ end ---@return string function Data:GlanceDamageByLevel(level) local mainBase, mainMod, _, _ = UnitAttackBothHands("player") - local playerLevel = UnitLevel("player") local enemyDefenseValue = (playerLevel + level) * 5 local glancePenalty = DataUtils:GetGlancingDamage(mainBase + mainMod, enemyDefenseValue) @@ -231,7 +248,7 @@ end function Data:GetArmorPenetration() local armorPenetration = GetArmorPenetration() - if ECS.IsWotlk and classId == Data.WARRIOR then + if IsWotlk and classId == Data.WARRIOR then local _, isActive = GetShapeshiftFormInfo(1) if isActive then armorPenetration = armorPenetration + 10 -- 10% from Battle Stance diff --git a/Modules/Data/Ranged.lua b/Modules/Data/Ranged.lua index f53af9e1..a000a971 100755 --- a/Modules/Data/Ranged.lua +++ b/Modules/Data/Ranged.lua @@ -1,3 +1,19 @@ +local CR_HASTE_RANGED = CR_HASTE_RANGED +local CR_HIT_RANGED = CR_HIT_RANGED +local ECSLoader = ECSLoader +local GetCombatRating = GetCombatRating +local GetCombatRatingBonus = GetCombatRatingBonus +local GetHitModifier = GetHitModifier +local GetRangedCritChance = GetRangedCritChance +local IsClassic = ECS.IsClassic +local IsWotlk = ECS.IsWotlk +local UnitClass = UnitClass +local UnitHasRelicSlot = UnitHasRelicSlot +local UnitLevel = UnitLevel +local UnitRangedAttack = UnitRangedAttack +local UnitRangedAttackPower = UnitRangedAttackPower +local UnitRangedDamage = UnitRangedDamage + ---@class Data local Data = ECSLoader:ImportModule("Data") ---@type Utils @@ -8,6 +24,7 @@ local DataUtils = ECSLoader:ImportModule("DataUtils") local _Ranged = {} local _, _, classId = UnitClass("player") +local playerLevel = UnitLevel("player") ---@return number function Data:GetRangeAttackPower() @@ -69,7 +86,7 @@ function _Ranged:GetHitBonus() local hitValue = 0 -- Biznick Scope awards Hit rating in TBC and is part of CR_HIT_RANGED - if ECS.IsClassic then + if IsClassic then local rangedEnchant = DataUtils:GetEnchantForEquipSlot(Utils.CHAR_EQUIP_SLOTS["Range"]) if rangedEnchant and rangedEnchant == Data.Enchant.Ids.BIZNICK_SCOPE then hitValue = hitValue + 3 @@ -89,7 +106,7 @@ end function _Ranged:GetHitTalentBonus() local bonus = 0 - if ECS.IsWotlk and classId == Data.HUNTER then + if IsWotlk and classId == Data.HUNTER then bonus = bonus + 1 * DataUtils:GetActiveTalentSpell({53620,53621,53622}) -- Focused Aim end @@ -99,7 +116,6 @@ end ---@return string function Data:RangeMissChanceSameLevel() local rangedAttackBase, rangedAttackMod = UnitRangedAttack("player") - local playerLevel = UnitLevel("player") local enemyDefenseValue = playerLevel * 5 local missChance = DataUtils.GetMissChanceByDifference(rangedAttackBase + rangedAttackMod, enemyDefenseValue) @@ -118,7 +134,6 @@ end function Data.RangeMissChanceBossLevel() local rangedAttackBase, rangedAttackMod = UnitRangedAttack("player") local rangedWeaponSkill = rangedAttackBase + rangedAttackMod - local playerLevel = UnitLevel("player") local enemyDefenseValue = (playerLevel + 3) * 5 local missChance = DataUtils.GetMissChanceByDifference(rangedWeaponSkill, enemyDefenseValue) diff --git a/Modules/Data/SpellCrit.lua b/Modules/Data/SpellCrit.lua index f787fdce..53ea0dc3 100755 --- a/Modules/Data/SpellCrit.lua +++ b/Modules/Data/SpellCrit.lua @@ -1,3 +1,10 @@ +local ECSLoader = ECSLoader +local GetBuffDataByIndex = C_UnitAuras.GetBuffDataByIndex +local GetInventoryItemID = GetInventoryItemID +local GetSpellCritChance = GetSpellCritChance +local IsClassic = ECS.IsClassic +local IsWotlk = ECS.IsWotlk + ---@class Data local Data = ECSLoader:ImportModule("Data") ---@type DataUtils @@ -24,7 +31,7 @@ function _SpellCrit:GetSpellCritFromBuffs(school) local mod = 0 local i = 1 repeat - local aura = C_UnitAuras.GetBuffDataByIndex("player", i) + local aura = GetBuffDataByIndex("player", i) i = i + 1 if aura and aura.spellId then mod = mod + (Data.Aura.SpellCrit[aura.spellId] or 0) @@ -54,26 +61,26 @@ function _SpellCrit:GetGeneralTalentModifier() local mod = 0 if classId == Data.MAGE then - if not ECS.IsClassic then + if not IsClassic then mod = mod + 1 * DataUtils:GetActiveTalentSpell({15058,15059,15060}) -- Arcane Instability end elseif classId == Data.DRUID then - if ECS.IsWotlk then + if IsWotlk then mod = mod + 1 * DataUtils:GetActiveTalentSpell({33881,33882,33883}) -- Natural Perfection end elseif classId == Data.WARLOCK then - if ECS.IsWotlk then + if IsWotlk then mod = mod + 2 * DataUtils:GetActiveTalentSpell({30242,30245,30246,30247,30248}) -- Demonic Tactics mod = mod + 1 * DataUtils:GetActiveTalentSpell({34935,34938,34939}) -- Backlash end mod = mod + 1 * DataUtils:GetActiveTalentSpell({18130,18131,18132,18133,18134}) -- Devastation elseif classId == Data.SHAMAN then - if ECS.IsWotlk then + if IsWotlk then mod = mod + 1 * DataUtils:GetActiveTalentSpell({16255,16302,16303,16304,16305}) -- Thundering Strikes end elseif classId == Data.PALADIN then - if ECS.IsWotlk then + if IsWotlk then mod = mod + 1 * DataUtils:GetActiveTalentSpell({20117,20118,20119,20120,20121}) -- Conviction mod = mod + 1 * DataUtils:GetActiveTalentSpell({32043,35396,35397}) -- Sanctity of Battle end @@ -115,11 +122,11 @@ function _SpellCrit:GetTalentModifierFireCrit() if classId == Data.MAGE then mod = mod + 2 * DataUtils:GetActiveTalentSpell({11115,11367,11368}) -- Critical Mass - if ECS.IsWotlk then + if IsWotlk then mod = mod + 1 * DataUtils:GetActiveTalentSpell({34293,34295,34296}) -- Pyromaniac end elseif classId == Data.WARLOCK then - if ECS.IsClassic then + if IsClassic then -- Devastation (while this increases the crit chance of "Destruction spells" there are no fire spells, which are not destruction spells) mod = mod + 1 * DataUtils:GetActiveTalentSpell({18130,18131,18132,18133,18134}) end @@ -140,7 +147,7 @@ end ---@return number function _SpellCrit:GetItemModifierHolyCrit() local mainHand, _ = GetInventoryItemID("player", 16) - if ECS.IsClassic and mainHand == 18608 then + if IsClassic and mainHand == 18608 then return 2 -- 2% Holy Crit from Benediction end return 0 @@ -155,9 +162,4 @@ function _SpellCrit:GetSetBonus(school) end return bonus -end - ----@return number -function Data:GetSpellPenetration() - return DataUtils:Round(GetSpellPenetration(), 2) -end +end \ No newline at end of file diff --git a/Modules/Data/SpellDamage.lua b/Modules/Data/SpellDamage.lua index 701ea5e6..b2db3281 100755 --- a/Modules/Data/SpellDamage.lua +++ b/Modules/Data/SpellDamage.lua @@ -1,3 +1,16 @@ +local CR_HASTE_SPELL = CR_HASTE_SPELL +local ECSLoader = ECSLoader +local GetBuffDataByIndex = C_UnitAuras.GetBuffDataByIndex +local GetCombatRating = GetCombatRating +local GetDebuffDataByIndex = C_UnitAuras.GetDebuffDataByIndex +local GetHaste = GetHaste +local GetInventoryItemID = GetInventoryItemID +local GetPlayerAuraBySpellID = C_UnitAuras.GetPlayerAuraBySpellID +local GetSpellBonusDamage = GetSpellBonusDamage +local GetSpellBonusHealing = GetSpellBonusHealing +local GetSpellPenetration = GetSpellPenetration +local IsSoD = ECS.IsSoD + ---@class Data local Data = ECSLoader:ImportModule("Data") ---@type DataUtils @@ -35,7 +48,7 @@ function Data:GetSpellHasteBonus() local hasteBonus = GetHaste() -- items - if ECS.IsSoD then + if IsSoD then local timeworn = DataUtils:CountTimewornItems() for i = 1, 18 do local id, _ = GetInventoryItemID("player", i) @@ -47,7 +60,7 @@ function Data:GetSpellHasteBonus() -- buffs local i = 1 repeat - local aura = C_UnitAuras.GetBuffDataByIndex("player", i) + local aura = GetBuffDataByIndex("player", i) if aura and aura.spellId then hasteBonus = hasteBonus + (Data.Aura.SpellHaste[aura.spellId] or 0) end @@ -57,7 +70,7 @@ function Data:GetSpellHasteBonus() -- debuffs i = 1 repeat - local aura = C_UnitAuras.GetDebuffDataByIndex("player", i) + local aura = GetDebuffDataByIndex("player", i) if aura and aura.spellId then hasteBonus = hasteBonus + (Data.Aura.SpellHaste[aura.spellId] or 0) end @@ -65,8 +78,8 @@ function Data:GetSpellHasteBonus() until (not aura) -- not stacking buffs - if ECS.IsSoD then - local aura = C_UnitAuras.GetPlayerAuraBySpellID(1219557) -- Power of the Guardian + if IsSoD then + local aura = GetPlayerAuraBySpellID(1219557) -- Power of the Guardian if aura then hasteBonus = hasteBonus + 2 end diff --git a/Modules/Data/SpellHit.lua b/Modules/Data/SpellHit.lua index 084e7d82..301c096b 100755 --- a/Modules/Data/SpellHit.lua +++ b/Modules/Data/SpellHit.lua @@ -1,3 +1,15 @@ +local CR_HIT_SPELL = CR_HIT_SPELL +local ECSLoader = ECSLoader +local GetCombatRating = GetCombatRating +local GetCombatRatingBonus = GetCombatRatingBonus +local GetSpellHitModifier = GetSpellHitModifier +local IsClassic = ECS.IsClassic +local IsSoD = ECS.IsSoD +local IsWotlk = ECS.IsWotlk +local max = math.max +local min = math.min +local UnitClass = UnitClass + ---@class Data local Data = ECSLoader:ImportModule("Data") ---@type DataUtils @@ -15,7 +27,7 @@ local _, _, classId = UnitClass("player") function Data:SpellMissChance(school,levelDifference,IsPvP) -- https://royalgiraffe.github.io/resist-guide local missChance = 0 - local minimumMissChance = ECS.IsWotlk and 0 or 1 + local minimumMissChance = IsWotlk and 0 or 1 local maximumMissChance = 90 -- uncertain, may be different for PvP if levelDifference >= -3 and levelDifference <= 2 then @@ -53,40 +65,40 @@ function _SpellHit:GetTalentSpellHitBonus(school) if classId == Data.DRUID then bonus = bonus + 2 * DataUtils:GetActiveTalentSpell({33592,33596}) -- Balance of Power elseif classId == Data.DEATHKNIGHT then - if ECS.IsWotlk then + if IsWotlk then bonus = bonus + 1 * DataUtils:GetActiveTalentSpell({48962,49567,49568}) -- Virulence end elseif classId == Data.MAGE then - if ECS.IsWotlk then + if IsWotlk then bonus = bonus + 1 * DataUtils:GetActiveTalentSpell({29438,29439,29440}) -- Elemental Precision bonus = bonus + 1 * DataUtils:GetActiveTalentSpell({11222,12839,12840}) -- Arcane Focus else if (school == Data.FIRE_SCHOOL or school == Data.FROST_SCHOOL) then - local coeff = ECS.IsClassic and 2 or 1 + local coeff = IsClassic and 2 or 1 bonus = bonus + coeff * DataUtils:GetActiveTalentSpell({29438,29439,29440}) -- Elemental Precision elseif school == Data.ARCANE_SCHOOL then bonus = bonus + 2 * DataUtils:GetActiveTalentSpell({11222,12839,12840,12841,12842}) -- Arcane Focus end end elseif classId == Data.PALADIN then - if ECS.IsWotlk then + if IsWotlk then bonus = bonus + 2 * DataUtils:GetActiveTalentSpell({53556,53557}) -- Enlightened Judgements end elseif classId == Data.PRIEST then if school == Data.SHADOW_SCHOOL then - local coeff = ECS.IsWotlk and 1 or 2 + local coeff = IsWotlk and 1 or 2 bonus = bonus + coeff * DataUtils:GetActiveTalentSpell({15260,15327,15328}) -- Shadow Focus end elseif classId == Data.SHAMAN then if (school == Data.FIRE_SCHOOL or school == Data.FROST_SCHOOL or school == Data.NATURE_SCHOOL) then - local coeff = ECS.IsWotlk and 1 or 2 + local coeff = IsWotlk and 1 or 2 bonus = bonus + coeff * DataUtils:GetActiveTalentSpell({30672,30673,30674}) -- Elemental Precision end - if ECS.IsClassic then + if IsClassic then bonus = bonus + 1 * DataUtils:GetActiveTalentSpell({16180,16196,16198}) -- Nature's Guidance end elseif classId == Data.WARLOCK then - if ECS.IsWotlk then + if IsWotlk then bonus = bonus + 1 * DataUtils:GetActiveTalentSpell({18174,18175,18176}) -- Suppression end end @@ -109,7 +121,7 @@ end function _SpellHit.GetSpellHitFromRunes(school) local mod = 0 - if (not ECS.IsSoD) then + if (not IsSoD) then return mod end diff --git a/Modules/EventHandler.lua b/Modules/EventHandler.lua index d6833a4d..fa9dcaab 100644 --- a/Modules/EventHandler.lua +++ b/Modules/EventHandler.lua @@ -1,3 +1,8 @@ +local After = C_Timer.After +local ECSLoader = ECSLoader +local InspectPaperDollFrame = InspectPaperDollFrame +local UnitGUID = UnitGUID + ---@class EventHandler local EventHandler = ECSLoader:CreateModule("EventHandler") @@ -10,21 +15,21 @@ local function DelayedUpdateInformation() local statsFrame = Stats:GetFrame() statsFrame:SetScript("OnUpdate", nil) -- update next frame - C_Timer.After(0, function () + After(0, function () Stats.UpdateInformation() end) end local function DelayedUpdateGearColorFrames() -- update next frame - C_Timer.After(0, function () + After(0, function () GearInfos.UpdateGearColorFrames() end) end local function DelayedUpdateInspectGearColorFrames() -- update next frame - C_Timer.After(0, function () + After(0, function () GearInfos:UpdateInspectGearColorFrames() end) end diff --git a/Modules/GearInfos.lua b/Modules/GearInfos.lua index 5522b795..f3801b8d 100755 --- a/Modules/GearInfos.lua +++ b/Modules/GearInfos.lua @@ -1,9 +1,11 @@ - ----@class GearInfos -local GearInfos = ECSLoader:CreateModule("GearInfos") - --- Forward declaration -local _CreateGearColorFrames, _UpdateColorFrame, _GetInspectGearSlots +local After = C_Timer.After +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats +local GetInventoryItemLink = GetInventoryItemLink +local GetItemInfo = C_Item.GetItemInfo +local GetItemQualityByID = C_Item.GetItemQualityByID +local GetItemQualityColor = C_Item.GetItemQualityColor +local ipairs = ipairs local GEAR_SLOT_FRAMES = { CharacterHeadSlot, @@ -25,6 +27,12 @@ local GEAR_SLOT_FRAMES = { CharacterRangedSlot, } +---@class GearInfos +local GearInfos = ECSLoader:CreateModule("GearInfos") + +-- Forward declaration +local _CreateGearColorFrames, _UpdateColorFrame, _GetInspectGearSlots + function GearInfos.Init() _CreateGearColorFrames() end @@ -53,15 +61,15 @@ _UpdateColorFrame = function (gearFrame, unit) local itemLink = GetInventoryItemLink(unit, gearFrame:GetID()) if itemLink ~= nil then - local _, itemInfo = C_Item.GetItemInfo(itemLink) + local _, itemInfo = GetItemInfo(itemLink) if itemInfo ~= nil then - local itemQuality = C_Item.GetItemQualityByID(itemInfo) - local r, g, b, _ = C_Item.GetItemQualityColor(itemQuality) + local itemQuality = GetItemQualityByID(itemInfo) + local r, g, b, _ = GetItemQualityColor(itemQuality) gearFrame.qualityTexture:SetVertexColor(r, g, b, ExtendedCharacterStats.general.qualityColorsIntensity) end else -- next frame - C_Timer.After(0, function () + After(0, function () _UpdateColorFrame(gearFrame, unit) end) end diff --git a/Modules/Init.lua b/Modules/Init.lua index e59adaaa..ee008a11 100644 --- a/Modules/Init.lua +++ b/Modules/Init.lua @@ -1,3 +1,10 @@ +local ECSLoader = ECSLoader +local GearManagerDialog = GearManagerDialog +local IsClassic = ECS.IsClassic +local IsEventValid = C_EventUtils.IsEventValid +local IsSoD = ECS.IsSoD +local PaperDollItemsFrame = PaperDollItemsFrame + ---@class Init local Init = ECSLoader:CreateModule("Init") local _Init = {} @@ -15,8 +22,6 @@ local GearInfos = ECSLoader:ImportModule("GearInfos") ---@type Profile local Profile = ECSLoader:ImportModule("Profile") - - function Init:OnAddonLoaded() if (not ExtendedCharacterStats) then ExtendedCharacterStats = {} @@ -98,7 +103,7 @@ function _Init.RegisterEvents(eventFrame) eventFrame:RegisterUnitEvent("UNIT_RANGED_ATTACK_POWER", "player") eventFrame:RegisterUnitEvent("UNIT_RANGEDDAMAGE", "player") eventFrame:RegisterEvent("UPDATE_SHAPESHIFT_FORM") - if not ECS.IsClassic then + if not IsClassic then eventFrame:RegisterEvent("SOCKET_INFO_SUCCESS") -- Triggers whenever the player successfully sockets an item if GearManagerDialog then @@ -110,12 +115,12 @@ function _Init.RegisterEvents(eventFrame) end) end end - if (C_EventUtils.IsEventValid("GLYPH_ADDED")) then + if (IsEventValid("GLYPH_ADDED")) then eventFrame:RegisterEvent("GLYPH_ADDED") eventFrame:RegisterEvent("GLYPH_UPDATED") eventFrame:RegisterEvent("GLYPH_REMOVED") end - if ECS.IsSoD then + if IsSoD then eventFrame:RegisterEvent("RUNE_UPDATED") -- Triggers whenever the player changed a rune end end diff --git a/Modules/Migration.lua b/Modules/Migration.lua index 0f1bf19b..4cc045a3 100644 --- a/Modules/Migration.lua +++ b/Modules/Migration.lua @@ -1,3 +1,7 @@ +local ECS = ECS +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats + ---@class Migration local Migration = ECSLoader:CreateModule("Migration") diff --git a/Modules/Profile.lua b/Modules/Profile.lua index 2a2152fe..636d8a11 100755 --- a/Modules/Profile.lua +++ b/Modules/Profile.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats + ---@class Profile local Profile = ECSLoader:CreateModule("Profile") diff --git a/Modules/SlashCommands.lua b/Modules/SlashCommands.lua index ecf83f7d..2d151509 100644 --- a/Modules/SlashCommands.lua +++ b/Modules/SlashCommands.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local lower = string.lower + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") ---@type Config @@ -6,7 +9,7 @@ local Config = ECSLoader:ImportModule("Config") local Stats = ECSLoader:ImportModule("Stats") local function _HandleSlash(msg) - local cmd = string.lower(msg) or "help" + local cmd = lower(msg) or "help" if cmd == "toggle" then Stats:ToggleWindow() diff --git a/Modules/Stats.lua b/Modules/Stats.lua index acac2a0b..dd8b385f 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -1,3 +1,28 @@ +local After = C_Timer.After +local CanDualWield = CanDualWield +local CharacterModelFrame = CharacterModelFrame +local ECSConfigFrame = ECSConfigFrame +local ECSLoader = ECSLoader +local EngravingFrame = EngravingFrame +local error = error +local ExtendedCharacterStats = ExtendedCharacterStats +local insert = table.insert +local IsClassic = ECS.IsClassic +local IsSoD = ECS.IsSoD +local IsWotlk = ECS.IsWotlk +local LeaPlusDB = LeaPlusDB +local OutfitterButton = OutfitterButton +local OutfitterButtonFrame = OutfitterButtonFrame +local OutfitterFrame = OutfitterFrame +local PaperDollItemsFrame = PaperDollItemsFrame +local PawnInitialize = PawnInitialize +local pairs = pairs +local type = type +local remove = table.remove +local STANDARD_TEXT_FONT = STANDARD_TEXT_FONT +local UnitHasMana = UnitHasMana +local UnitHasRelicSlot = UnitHasRelicSlot + ------------------------------------------------------------------ -- Modules ------------------------------------------------------------------ @@ -104,9 +129,9 @@ function Stats.CreateWindow() Stats:HideWindow() end - if ECS.IsSoD then + if IsSoD then -- next frame - C_Timer.After(0, function () + After(0, function () if EngravingFrame then if EngravingFrame:IsShown() then mainFrame:ClearAllPoints() @@ -217,24 +242,24 @@ _CreateStatInfos = function() category, category.attackPower, category.crit, - ECS.IsWotlk and category.penetrationRating or nil, - (not ECS.IsClassic) and category.penetration or nil, - (not ECS.IsClassic) and category.expertiseRating or nil, - (not ECS.IsClassic) and category.expertise or nil, - (not ECS.IsClassic) and category.hasteRating or nil, - (not ECS.IsClassic) and category.hasteBonus or nil + IsWotlk and category.penetrationRating or nil, + IsClassic and nil or category.penetration, + IsClassic and nil or category.expertiseRating, + IsClassic and nil or category.expertise, + IsClassic and nil or category.hasteRating, + IsClassic and nil or category.hasteBonus ) if category.display then category = category.hit _CreateStatInfo( category, - (not ECS.IsClassic) and category.rating or nil, + IsClassic and nil or category.rating, category.bonus, category.sameLevel, category.bossLevel ) - if (not ECS.IsWotlk) then + if (not IsWotlk) then category = profile.melee.glance _CreateStatInfo(category, category.sameLevel, category.damageSameLevel, category.bossLevel, category.damageBossLevel) end @@ -253,10 +278,10 @@ _CreateStatInfos = function() category, category.attackPower, category.crit, - ECS.IsWotlk and category.penetrationRating or nil, - (not ECS.IsClassic) and category.penetration or nil, - (not ECS.IsClassic) and category.hasteRating or nil, - (not ECS.IsClassic) and category.hasteBonus or nil, + IsWotlk and category.penetrationRating or nil, + IsClassic and nil or category.penetration, + IsClassic and nil or category.hasteRating, + IsClassic and nil or category.hasteBonus, category.attackSpeed ) @@ -264,7 +289,7 @@ _CreateStatInfos = function() category = category.hit _CreateStatInfo( category, - (not ECS.IsClassic) and category.rating or nil, + IsClassic and nil or category.rating, category.bonus, category.sameLevel, category.bossLevel @@ -281,16 +306,16 @@ _CreateStatInfos = function() category.spellCritReduction, category.avoidance, category.avoidanceBoss, - (not ECS.IsClassic) and category.defenseRating or nil, + IsClassic and nil or category.defenseRating, category.defense, - (not ECS.IsClassic and DataUtils:CanBlock()) and category.blockRating or nil, + (not IsClassic and DataUtils:CanBlock()) and category.blockRating or nil, DataUtils:CanBlock() and category.blockChance or nil, DataUtils:CanBlock() and category.blockValue or nil, - (not ECS.IsClassic and DataUtils:CanParry()) and category.parryRating or nil, + (not IsClassic and DataUtils:CanParry()) and category.parryRating or nil, DataUtils:CanParry() and category.parry or nil, - (not ECS.IsClassic) and category.dodgeRating or nil, + IsClassic and nil or category.dodgeRating, category.dodge or nil, - (not ECS.IsClassic) and category.resilienceRating or nil + IsClassic and nil or category.resilienceRating ) if UnitHasMana("player") then @@ -305,12 +330,12 @@ _CreateStatInfos = function() local spellHit = spell.hit _CreateStatInfo( category, - (not ECS.IsClassic) and category.hasteRating or nil, + IsClassic and nil or category.hasteRating, category.hasteBonus, - (not ECS.IsClassic) and category.penetrationRating or nil, - (not ECS.IsClassic) and category.penetration or nil, + IsClassic and nil or category.penetrationRating, + IsClassic and nil or category.penetration, spellBonus.bonusHealing, - (not ECS.IsClassic) and spellHit.rating or nil, + IsClassic and nil or spellHit.rating, spell.arcane.display and spellBonus.arcaneDmg or nil, spell.arcane.display and spellCrit.display and spellCrit.arcane or nil, spell.arcane.display and spellHit.bonus.display and spellHit.arcaneHitBonus or nil, @@ -360,7 +385,7 @@ _CreateHeader = function(name, displayText, isSubHeader) end lastYOffset = lastYOffset - 20 ---@class StatsHeader - local header = table.remove(framePool) + local header = remove(framePool) if not header then header = _Stats.frame.ScrollChild:CreateFontString(name, "OVERLAY", headerFont) else @@ -385,7 +410,7 @@ _CreateText = function(name, displayText, isSubText) lastYOffset = lastYOffset - 15 ---@class StatsText - local stat = table.remove(framePool) + local stat = remove(framePool) if not stat then stat = _Stats.frame.ScrollChild:CreateFontString(name, "OVERLAY", statFont) else @@ -393,7 +418,7 @@ _CreateText = function(name, displayText, isSubText) end stat:SetPoint("TOPLEFT", xOffSet, lastYOffset) stat:SetText(displayText) - stat:SetFont(STANDARD_TEXT_FONT, ExtendedCharacterStats.general.statFontSize) + stat:SetFont(STANDARD_TEXT_FONT, ExtendedCharacterStats.general.statFontSize) stat:Show() _Stats.displayedLines[name] = stat end @@ -402,7 +427,7 @@ end ---@param frame StatsHeader|StatsText function Stats:RecycleFrame(frame) frame:Hide() - table.insert(framePool, frame) + insert(framePool, frame) end --- Resets the Y-Offset and rebuilds the displayed frames diff --git a/Modules/Utils.lua b/Modules/Utils.lua index ed2fca8f..135b7820 100755 --- a/Modules/Utils.lua +++ b/Modules/Utils.lua @@ -1,8 +1,12 @@ +local ECSLoader = ECSLoader +local tostring = tostring +local GetAddOnInfo = C_AddOns.GetAddOnInfo +local match = string.match +local tonumber = tonumber + ---@class Utils local Utils = ECSLoader:CreateModule("Utils") -local GetAddOnInfo = C_AddOns and C_AddOns.GetAddOnInfo or GetAddOnInfo - ---@class table Utils.CHAR_EQUIP_SLOTS = { ["Head"] = "HeadSlot", @@ -81,7 +85,7 @@ function Utils:GetAddonVersionInfo() cachedTitle = title end -- %d = digit, %p = punctuation character, %x = hexadecimal digits. - local major, minor, patch, _ = string.match(cachedTitle, "(%d+)%p(%d+)%p(%d+)") + local major, minor, patch, _ = match(cachedTitle, "(%d+)%p(%d+)%p(%d+)") return tonumber(major), tonumber(minor), tonumber(patch) end diff --git a/Modules/i18n/i18n.lua b/Modules/i18n/i18n.lua index a0948518..6e31d397 100755 --- a/Modules/i18n/i18n.lua +++ b/Modules/i18n/i18n.lua @@ -1,3 +1,13 @@ +local ECS = ECS +local ECSLoader = ECSLoader +local ExtendedCharacterStats = ExtendedCharacterStats +local format = string.format +local GetLocale = GetLocale +local ipairs = ipairs +local setmetatable = setmetatable +local tostring = tostring +local unpack = unpack + ---@class i18n local i18n = ECSLoader:CreateModule("i18n") i18n.translations = {} @@ -28,21 +38,21 @@ local function translate(key, ...) if translationEntry == nil then -- Translation for the key is missing completely ECS:Error("The translation for <".. tostring(key) .. "> is missing completely. Please report this!") - return string.format(key, unpack(args)) + return format(key, unpack(args)) end local translationValue = translationEntry[selectedLocale] if (not translationValue) then -- The translation for the selected locale is missing - return string.format(key, unpack(args)) + return format(key, unpack(args)) end if translationValue == true then -- Fallback to enUS which is the key - return string.format(key, unpack(args)) + return format(key, unpack(args)) end - return string.format(translationValue, unpack(args)) + return format(translationValue, unpack(args)) end setmetatable(i18n, {__call = function(_, ...) return translate(...) end}) diff --git a/Modules/i18n/translations/CommandTranslations.lua b/Modules/i18n/translations/CommandTranslations.lua index 45e8820a..c5afb7d8 100644 --- a/Modules/i18n/translations/CommandTranslations.lua +++ b/Modules/i18n/translations/CommandTranslations.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local pairs = pairs + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") diff --git a/Modules/i18n/translations/ConfigTranslations/ConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/ConfigTranslations.lua index a8b72073..bcb3d99f 100644 --- a/Modules/i18n/translations/ConfigTranslations/ConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/ConfigTranslations.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local pairs = pairs + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index 8d2a36cb..a9246b16 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local pairs = pairs + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") diff --git a/Modules/i18n/translations/ConfigTranslations/GeneralConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/GeneralConfigTranslations.lua index 88bb1158..d40c4e4b 100644 --- a/Modules/i18n/translations/ConfigTranslations/GeneralConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/GeneralConfigTranslations.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local pairs = pairs + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") diff --git a/Modules/i18n/translations/ConfigTranslations/ManaConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/ManaConfigTranslations.lua index 21443840..54b5a11a 100644 --- a/Modules/i18n/translations/ConfigTranslations/ManaConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/ManaConfigTranslations.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local pairs = pairs + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") diff --git a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua index 57db826a..d6451061 100644 --- a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local pairs = pairs + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") diff --git a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua index f8576871..9f5c0afe 100644 --- a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local pairs = pairs + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") diff --git a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua index 9fd59d06..10ac6331 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local pairs = pairs + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") diff --git a/Modules/i18n/translations/ConfigTranslations/SpellSchoolsConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellSchoolsConfigTranslations.lua index 55c4a28c..92a5a399 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellSchoolsConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellSchoolsConfigTranslations.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local pairs = pairs + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index 6bf9140e..b1d251bf 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -1,3 +1,6 @@ +local ECSLoader = ECSLoader +local pairs = pairs + ---@type i18n local i18n = ECSLoader:ImportModule("i18n") From c32548c89444b9ef95966fad1eaad177e0f7a0b2 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Sat, 28 Feb 2026 17:44:49 +0100 Subject: [PATCH 02/10] wip --- Modules/Config/Config.lua | 2 -- Modules/Config/DefenseSection.lua | 1 - Modules/Config/GeneralSection.lua | 1 - Modules/Config/ManaSection.lua | 1 - Modules/Config/MeleeSection.lua | 1 - Modules/Config/RangeSection.lua | 1 - Modules/Config/SpellSchoolsSection.lua | 1 - Modules/Data/Data.lua | 2 +- Modules/GearInfos.lua | 1 - Modules/Migration.lua | 1 - Modules/Profile.lua | 1 - Modules/Stats.lua | 2 -- Modules/i18n/i18n.lua | 1 - 13 files changed, 1 insertion(+), 15 deletions(-) diff --git a/Modules/Config/Config.lua b/Modules/Config/Config.lua index 789b3704..fc7286f9 100755 --- a/Modules/Config/Config.lua +++ b/Modules/Config/Config.lua @@ -1,7 +1,5 @@ local ECS = ECS -local ECSConfigFrame = ECSConfigFrame local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats local insert = table.insert local LibStub = LibStub local ReloadUI = ReloadUI diff --git a/Modules/Config/DefenseSection.lua b/Modules/Config/DefenseSection.lua index 6cb58c3f..b2d94291 100755 --- a/Modules/Config/DefenseSection.lua +++ b/Modules/Config/DefenseSection.lua @@ -1,5 +1,4 @@ local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats local IsClassic = ECS.IsClassic local IsSpellKnown = C_SpellBook.IsSpellKnown diff --git a/Modules/Config/GeneralSection.lua b/Modules/Config/GeneralSection.lua index 2bc85335..aa18d286 100644 --- a/Modules/Config/GeneralSection.lua +++ b/Modules/Config/GeneralSection.lua @@ -1,5 +1,4 @@ local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats ---@class Config local Config = ECSLoader:ImportModule("Config") diff --git a/Modules/Config/ManaSection.lua b/Modules/Config/ManaSection.lua index 272e1806..741dcc0d 100755 --- a/Modules/Config/ManaSection.lua +++ b/Modules/Config/ManaSection.lua @@ -1,5 +1,4 @@ local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats local UnitHasMana = UnitHasMana ---@class Config diff --git a/Modules/Config/MeleeSection.lua b/Modules/Config/MeleeSection.lua index 00dca06c..f905210c 100755 --- a/Modules/Config/MeleeSection.lua +++ b/Modules/Config/MeleeSection.lua @@ -1,6 +1,5 @@ local CanDualWield = CanDualWield local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats local IsClassic = ECS.IsClassic local IsWotlk = ECS.IsWotlk diff --git a/Modules/Config/RangeSection.lua b/Modules/Config/RangeSection.lua index 44b24adf..55b43ef2 100755 --- a/Modules/Config/RangeSection.lua +++ b/Modules/Config/RangeSection.lua @@ -1,5 +1,4 @@ local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats local IsClassic = ECS.IsClassic local IsWotlk = ECS.IsWotlk local UnitHasRelicSlot = UnitHasRelicSlot diff --git a/Modules/Config/SpellSchoolsSection.lua b/Modules/Config/SpellSchoolsSection.lua index f365530e..6024029d 100644 --- a/Modules/Config/SpellSchoolsSection.lua +++ b/Modules/Config/SpellSchoolsSection.lua @@ -1,5 +1,4 @@ local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats ---@class Config local Config = ECSLoader:ImportModule("Config") diff --git a/Modules/Data/Data.lua b/Modules/Data/Data.lua index f27505f8..07ecee01 100755 --- a/Modules/Data/Data.lua +++ b/Modules/Data/Data.lua @@ -79,7 +79,7 @@ dataFunctionRefs = { ["SpellCritChance"] = function() return Data:GetSpellCrit(Data.HOLY_SCHOOL) end, ["SpellHasteRating"] = function() return IsClassic and 0 or Data:GetSpellHasteRating() end, ["SpellHasteBonus"] = function() return Data:GetSpellHasteBonus() end, - ["SpellPenetration"] = function() return Data:GetSpellPenetration() end, + ["SpellPenetration"] = function() return Data:SpellPenetration() end, -- MP5 ["MP5Items"] = function() return Data:GetMP5FromItems() end, ["MP5Spirit"] = function() return Data:GetMP5FromSpirit() end, diff --git a/Modules/GearInfos.lua b/Modules/GearInfos.lua index f3801b8d..51669cd6 100755 --- a/Modules/GearInfos.lua +++ b/Modules/GearInfos.lua @@ -1,6 +1,5 @@ local After = C_Timer.After local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats local GetInventoryItemLink = GetInventoryItemLink local GetItemInfo = C_Item.GetItemInfo local GetItemQualityByID = C_Item.GetItemQualityByID diff --git a/Modules/Migration.lua b/Modules/Migration.lua index 4cc045a3..e3854a52 100644 --- a/Modules/Migration.lua +++ b/Modules/Migration.lua @@ -1,6 +1,5 @@ local ECS = ECS local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats ---@class Migration local Migration = ECSLoader:CreateModule("Migration") diff --git a/Modules/Profile.lua b/Modules/Profile.lua index 636d8a11..640b16f8 100755 --- a/Modules/Profile.lua +++ b/Modules/Profile.lua @@ -1,5 +1,4 @@ local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats ---@class Profile local Profile = ECSLoader:CreateModule("Profile") diff --git a/Modules/Stats.lua b/Modules/Stats.lua index dd8b385f..0e9146ed 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -1,11 +1,9 @@ local After = C_Timer.After local CanDualWield = CanDualWield local CharacterModelFrame = CharacterModelFrame -local ECSConfigFrame = ECSConfigFrame local ECSLoader = ECSLoader local EngravingFrame = EngravingFrame local error = error -local ExtendedCharacterStats = ExtendedCharacterStats local insert = table.insert local IsClassic = ECS.IsClassic local IsSoD = ECS.IsSoD diff --git a/Modules/i18n/i18n.lua b/Modules/i18n/i18n.lua index 6e31d397..f4e0b330 100755 --- a/Modules/i18n/i18n.lua +++ b/Modules/i18n/i18n.lua @@ -1,6 +1,5 @@ local ECS = ECS local ECSLoader = ECSLoader -local ExtendedCharacterStats = ExtendedCharacterStats local format = string.format local GetLocale = GetLocale local ipairs = ipairs From 18eedd091331b1966b4390774f8773a4d6103bae Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Sat, 28 Feb 2026 18:57:57 +0100 Subject: [PATCH 03/10] wip --- Modules/Data/Melee.lua | 4 ---- Modules/Data/Ranged.lua | 2 -- Modules/Data/SpellDamage.lua | 1 - Modules/Data/SpellHit.lua | 1 - Modules/EventHandler.lua | 7 ++++--- Modules/Init.lua | 4 ++-- Modules/Stats.lua | 26 ++++++++++++++------------ 7 files changed, 20 insertions(+), 25 deletions(-) diff --git a/Modules/Data/Melee.lua b/Modules/Data/Melee.lua index c86c55d6..82480a8e 100755 --- a/Modules/Data/Melee.lua +++ b/Modules/Data/Melee.lua @@ -1,7 +1,3 @@ -local CR_ARMOR_PENETRATION = CR_ARMOR_PENETRATION -local CR_EXPERTISE = CR_EXPERTISE -local CR_HASTE_MELEE = CR_HASTE_MELEE -local CR_HIT_MELEE = CR_HIT_MELEE local ECSLoader = ECSLoader local GetCombatRating = GetCombatRating local GetCombatRatingBonus = GetCombatRatingBonus diff --git a/Modules/Data/Ranged.lua b/Modules/Data/Ranged.lua index a000a971..010a28c9 100755 --- a/Modules/Data/Ranged.lua +++ b/Modules/Data/Ranged.lua @@ -1,5 +1,3 @@ -local CR_HASTE_RANGED = CR_HASTE_RANGED -local CR_HIT_RANGED = CR_HIT_RANGED local ECSLoader = ECSLoader local GetCombatRating = GetCombatRating local GetCombatRatingBonus = GetCombatRatingBonus diff --git a/Modules/Data/SpellDamage.lua b/Modules/Data/SpellDamage.lua index b2db3281..750a34a2 100755 --- a/Modules/Data/SpellDamage.lua +++ b/Modules/Data/SpellDamage.lua @@ -1,4 +1,3 @@ -local CR_HASTE_SPELL = CR_HASTE_SPELL local ECSLoader = ECSLoader local GetBuffDataByIndex = C_UnitAuras.GetBuffDataByIndex local GetCombatRating = GetCombatRating diff --git a/Modules/Data/SpellHit.lua b/Modules/Data/SpellHit.lua index 301c096b..4260affc 100755 --- a/Modules/Data/SpellHit.lua +++ b/Modules/Data/SpellHit.lua @@ -1,4 +1,3 @@ -local CR_HIT_SPELL = CR_HIT_SPELL local ECSLoader = ECSLoader local GetCombatRating = GetCombatRating local GetCombatRatingBonus = GetCombatRatingBonus diff --git a/Modules/EventHandler.lua b/Modules/EventHandler.lua index fa9dcaab..fa57eded 100644 --- a/Modules/EventHandler.lua +++ b/Modules/EventHandler.lua @@ -1,6 +1,5 @@ local After = C_Timer.After local ECSLoader = ECSLoader -local InspectPaperDollFrame = InspectPaperDollFrame local UnitGUID = UnitGUID ---@class EventHandler @@ -11,6 +10,8 @@ local Stats = ECSLoader:ImportModule("Stats") ---@type GearInfos local GearInfos = ECSLoader:ImportModule("GearInfos") +local playerGUID = UnitGUID("player") + local function DelayedUpdateInformation() local statsFrame = Stats:GetFrame() statsFrame:SetScript("OnUpdate", nil) @@ -71,12 +72,12 @@ function EventHandler.HandleOnEvent(self,event, ...) event == "UNIT_RANGED_ATTACK_POWER" ) and args[1] == "player") then statsFrame:SetScript("OnUpdate", DelayedUpdateInformation) - elseif (event == "INSPECT_READY" and args[1] == UnitGUID("player")) or event == "PLAYER_EQUIPMENT_CHANGED" or event == "SOCKET_INFO_SUCCESS" then + elseif (event == "INSPECT_READY" and args[1] == playerGUID) or event == "PLAYER_EQUIPMENT_CHANGED" or event == "SOCKET_INFO_SUCCESS" then statsFrame:SetScript("OnUpdate", DelayedUpdateInformation) end end - if (event == "INSPECT_READY" and args[1] == UnitGUID("player")) or event == "PLAYER_EQUIPMENT_CHANGED" then + if (event == "INSPECT_READY" and args[1] == playerGUID) or event == "PLAYER_EQUIPMENT_CHANGED" then DelayedUpdateGearColorFrames() end if InspectPaperDollFrame and event == "INSPECT_READY" and args[1] == UnitGUID("target") then diff --git a/Modules/Init.lua b/Modules/Init.lua index ee008a11..63f7fa82 100644 --- a/Modules/Init.lua +++ b/Modules/Init.lua @@ -1,5 +1,4 @@ local ECSLoader = ECSLoader -local GearManagerDialog = GearManagerDialog local IsClassic = ECS.IsClassic local IsEventValid = C_EventUtils.IsEventValid local IsSoD = ECS.IsSoD @@ -107,6 +106,7 @@ function _Init.RegisterEvents(eventFrame) eventFrame:RegisterEvent("SOCKET_INFO_SUCCESS") -- Triggers whenever the player successfully sockets an item if GearManagerDialog then + local GearManagerDialog = GearManagerDialog GearManagerDialog:HookScript("OnShow", function() Stats:HideWindow() end) @@ -115,7 +115,7 @@ function _Init.RegisterEvents(eventFrame) end) end end - if (IsEventValid("GLYPH_ADDED")) then + if IsEventValid("GLYPH_ADDED") then eventFrame:RegisterEvent("GLYPH_ADDED") eventFrame:RegisterEvent("GLYPH_UPDATED") eventFrame:RegisterEvent("GLYPH_REMOVED") diff --git a/Modules/Stats.lua b/Modules/Stats.lua index 0e9146ed..65fdcd8e 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -2,18 +2,12 @@ local After = C_Timer.After local CanDualWield = CanDualWield local CharacterModelFrame = CharacterModelFrame local ECSLoader = ECSLoader -local EngravingFrame = EngravingFrame local error = error local insert = table.insert local IsClassic = ECS.IsClassic local IsSoD = ECS.IsSoD local IsWotlk = ECS.IsWotlk -local LeaPlusDB = LeaPlusDB -local OutfitterButton = OutfitterButton -local OutfitterButtonFrame = OutfitterButtonFrame -local OutfitterFrame = OutfitterFrame local PaperDollItemsFrame = PaperDollItemsFrame -local PawnInitialize = PawnInitialize local pairs = pairs local type = type local remove = table.remove @@ -95,14 +89,17 @@ function Stats.CreateWindow() toggleButton:SetText("< ECS") toggleButton:SetSize(44, 18) -- Move to old position if Leatrix Plus durability button is active. See #20 - if (LeaPlusDB and LeaPlusDB["DurabilityStatus"] == "On") or PawnInitialize then - if OutfitterButton then -- See #89 - toggleButton:SetPoint("TOPRIGHT", PaperDollItemsFrame, "TOPRIGHT", -55, -16) + if LeaPlusDB then + local LeaPlusDB = LeaPlusDB + if (LeaPlusDB["DurabilityStatus"] == "On") or PawnInitialize then + if OutfitterButton then -- See #89 + toggleButton:SetPoint("TOPRIGHT", PaperDollItemsFrame, "TOPRIGHT", -55, -16) + else + toggleButton:SetPoint("TOPRIGHT", PaperDollItemsFrame, "TOPRIGHT", -57, -16) + end else - toggleButton:SetPoint("TOPRIGHT", PaperDollItemsFrame, "TOPRIGHT", -57, -16) + toggleButton:SetPoint("BOTTOMRIGHT", PaperDollItemsFrame, "BOTTOMRIGHT", -38, 87) end - else - toggleButton:SetPoint("BOTTOMRIGHT", PaperDollItemsFrame, "BOTTOMRIGHT", -38, 87) end toggleButton:SetScript("OnClick", function () Stats:ToggleWindow() @@ -111,6 +108,8 @@ function Stats.CreateWindow() mainFrame:SetScript("OnShow", function () toggleButton:SetText("< ECS") if OutfitterFrame ~= nil and OutfitterButtonFrame ~= nil then + local OutfitterButtonFrame = OutfitterButtonFrame + local OutfitterFrame = OutfitterFrame OutfitterFrame:SetPoint("TOPLEFT", OutfitterButtonFrame , "TOPRIGHT", -34 + ExtendedCharacterStats.general.window.width, -38) end Stats.UpdateInformation() @@ -118,6 +117,8 @@ function Stats.CreateWindow() mainFrame:SetScript("OnHide", function () toggleButton:SetText("ECS >") if OutfitterFrame ~= nil and OutfitterButtonFrame ~= nil then + local OutfitterButtonFrame = OutfitterButtonFrame + local OutfitterFrame = OutfitterFrame OutfitterFrame:SetPoint("TOPLEFT", OutfitterButtonFrame , "TOPRIGHT", -34, -38) end end) @@ -131,6 +132,7 @@ function Stats.CreateWindow() -- next frame After(0, function () if EngravingFrame then + local EngravingFrame = EngravingFrame if EngravingFrame:IsShown() then mainFrame:ClearAllPoints() mainFrame:SetPoint("LEFT", EngravingFrame, "RIGHT", 10, 19) From 887c1f2bb0438ba576604678519f3d502c6f6d36 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Sat, 28 Feb 2026 19:02:42 +0100 Subject: [PATCH 04/10] wip --- Modules/Data/Constants.lua | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Modules/Data/Constants.lua b/Modules/Data/Constants.lua index 0d99403b..109433b3 100755 --- a/Modules/Data/Constants.lua +++ b/Modules/Data/Constants.lua @@ -241,15 +241,15 @@ Data.Aura = { [10491] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 2 [10493] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 3 [10494] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 4 - [19742] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 1 - [19850] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 2 - [19852] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 3 - [19853] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 4 - [19854] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 5 - [25290] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 6 + [19742] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 1 + [19850] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 2 + [19852] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 3 + [19853] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 4 + [19854] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 5 + [25290] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 6 [25569] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 5 - [25894] = ((not IsClassic) and 1 or nil), -- Greater Blessing of Wisdom rank 1 - [25918] = ((not IsClassic) and 1 or nil), -- Greater Blessing of Wisdom rank 2 + [25894] = (IsClassic and nil or 1), -- Greater Blessing of Wisdom rank 1 + [25918] = (IsClassic and nil or 1), -- Greater Blessing of Wisdom rank 2 [27142] = 1, -- Blessing of Wisdom rank 7 [27143] = 1, -- Greater Blessing of Wisdom rank 3 [48935] = 1, -- Blessing of Wisdom rank 8 @@ -262,7 +262,7 @@ Data.Aura = { [58777] = 5/2, -- Mana Spring rank 8 }, PercentageMp5 = { - [12051] = ((not IsClassic) and 0.15/2*5 or nil), -- Evocation + [12051] = (IsClassic and nil or 0.15/2*5), -- Evocation [18792] = (IsClassic and 0.02/4 or 0.03/4)*5, -- Fel Energy [24355] = 0.02*5, -- Drink [24707] = 0.03*5, -- Food @@ -340,10 +340,10 @@ Data.Aura = { [462858] = 750, -- Circle of Flame }, PeriodicallyGiveManaTooltip = { - [5677] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 1 - [10491] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 2 - [10493] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 3 - [10494] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 4 + [5677] = (IsWotlk and nil or 5/2), -- Mana Spring rank 1 + [10491] = (IsWotlk and nil or 5/2), -- Mana Spring rank 2 + [10493] = (IsWotlk and nil or 5/2), -- Mana Spring rank 3 + [10494] = (IsWotlk and nil or 5/2), -- Mana Spring rank 4 [19742] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 1 [19850] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 2 [19852] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 3 @@ -351,12 +351,12 @@ Data.Aura = { [19854] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 5 [24853] = 5/2, -- Mana Spring [25290] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 6 - [25569] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 5 + [25569] = (IsWotlk and nil or 5/2), -- Mana Spring rank 5 [25894] = (IsClassic and 1 or nil), -- Greater Blessing of Wisdom rank 1 [25918] = (IsClassic and 1 or nil), -- Greater Blessing of Wisdom rank 2 }, SpellCrit = { - [24907] = ((not IsClassic) and 5 or nil), -- Moonkin Aura + [24907] = (IsClassic and nil or 5), -- Moonkin Aura [29177] = 6, -- Elemental Devastation Rank 2 [29178] = 9, -- Elemental Devastation Rank 3 [30165] = 3, -- Elemental Devastation Rank 1 From d3fd93d8459596b0ecc5d6df5ce128ff4dd83ffc Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Mon, 2 Mar 2026 14:33:09 +0100 Subject: [PATCH 05/10] revert --- Modules/Data/Constants.lua | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Modules/Data/Constants.lua b/Modules/Data/Constants.lua index 109433b3..dc558bb6 100755 --- a/Modules/Data/Constants.lua +++ b/Modules/Data/Constants.lua @@ -241,15 +241,15 @@ Data.Aura = { [10491] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 2 [10493] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 3 [10494] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 4 - [19742] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 1 - [19850] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 2 - [19852] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 3 - [19853] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 4 - [19854] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 5 - [25290] = (IsClassic and nil or 1), -- Blessing of Wisdom rank 6 + [19742] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 1 + [19850] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 2 + [19852] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 3 + [19853] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 4 + [19854] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 5 + [25290] = ((not IsClassic) and 1 or nil), -- Blessing of Wisdom rank 6 [25569] = (IsWotlk and 5/2 or nil), -- Mana Spring rank 5 - [25894] = (IsClassic and nil or 1), -- Greater Blessing of Wisdom rank 1 - [25918] = (IsClassic and nil or 1), -- Greater Blessing of Wisdom rank 2 + [25894] = ((not IsClassic) and 1 or nil), -- Greater Blessing of Wisdom rank 1 + [25918] = ((not IsClassic) and 1 or nil), -- Greater Blessing of Wisdom rank 2 [27142] = 1, -- Blessing of Wisdom rank 7 [27143] = 1, -- Greater Blessing of Wisdom rank 3 [48935] = 1, -- Blessing of Wisdom rank 8 @@ -262,7 +262,7 @@ Data.Aura = { [58777] = 5/2, -- Mana Spring rank 8 }, PercentageMp5 = { - [12051] = (IsClassic and nil or 0.15/2*5), -- Evocation + [12051] = ((not IsClassic) and 0.15/2*5 or nil), -- Evocation [18792] = (IsClassic and 0.02/4 or 0.03/4)*5, -- Fel Energy [24355] = 0.02*5, -- Drink [24707] = 0.03*5, -- Food @@ -340,10 +340,10 @@ Data.Aura = { [462858] = 750, -- Circle of Flame }, PeriodicallyGiveManaTooltip = { - [5677] = (IsWotlk and nil or 5/2), -- Mana Spring rank 1 - [10491] = (IsWotlk and nil or 5/2), -- Mana Spring rank 2 - [10493] = (IsWotlk and nil or 5/2), -- Mana Spring rank 3 - [10494] = (IsWotlk and nil or 5/2), -- Mana Spring rank 4 + [5677] = ((not IsWotlk) and 5/2 nil), -- Mana Spring rank 1 + [10491] = ((not IsWotlk) and 5/2 nil), -- Mana Spring rank 2 + [10493] = ((not IsWotlk) and 5/2 nil), -- Mana Spring rank 3 + [10494] = ((not IsWotlk) and 5/2 nil), -- Mana Spring rank 4 [19742] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 1 [19850] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 2 [19852] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 3 @@ -351,12 +351,12 @@ Data.Aura = { [19854] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 5 [24853] = 5/2, -- Mana Spring [25290] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 6 - [25569] = (IsWotlk and nil or 5/2), -- Mana Spring rank 5 + [25569] = ((not IsWotlk) and 5/2 nil), -- Mana Spring rank 5 [25894] = (IsClassic and 1 or nil), -- Greater Blessing of Wisdom rank 1 [25918] = (IsClassic and 1 or nil), -- Greater Blessing of Wisdom rank 2 }, SpellCrit = { - [24907] = (IsClassic and nil or 5), -- Moonkin Aura + [24907] = ((not IsClassic) and 5 or nil), -- Moonkin Aura [29177] = 6, -- Elemental Devastation Rank 2 [29178] = 9, -- Elemental Devastation Rank 3 [30165] = 3, -- Elemental Devastation Rank 1 From ea77ae4cd83a322ad3ebe60ca48f24d4b83a97ac Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Mon, 2 Mar 2026 14:37:13 +0100 Subject: [PATCH 06/10] missing or --- Modules/Data/Constants.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Modules/Data/Constants.lua b/Modules/Data/Constants.lua index dc558bb6..0d99403b 100755 --- a/Modules/Data/Constants.lua +++ b/Modules/Data/Constants.lua @@ -340,10 +340,10 @@ Data.Aura = { [462858] = 750, -- Circle of Flame }, PeriodicallyGiveManaTooltip = { - [5677] = ((not IsWotlk) and 5/2 nil), -- Mana Spring rank 1 - [10491] = ((not IsWotlk) and 5/2 nil), -- Mana Spring rank 2 - [10493] = ((not IsWotlk) and 5/2 nil), -- Mana Spring rank 3 - [10494] = ((not IsWotlk) and 5/2 nil), -- Mana Spring rank 4 + [5677] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 1 + [10491] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 2 + [10493] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 3 + [10494] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 4 [19742] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 1 [19850] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 2 [19852] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 3 @@ -351,7 +351,7 @@ Data.Aura = { [19854] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 5 [24853] = 5/2, -- Mana Spring [25290] = (IsClassic and 1 or nil), -- Blessing of Wisdom rank 6 - [25569] = ((not IsWotlk) and 5/2 nil), -- Mana Spring rank 5 + [25569] = ((not IsWotlk) and 5/2 or nil), -- Mana Spring rank 5 [25894] = (IsClassic and 1 or nil), -- Greater Blessing of Wisdom rank 1 [25918] = (IsClassic and 1 or nil), -- Greater Blessing of Wisdom rank 2 }, From 227df132d5032d3bd9e6e0559d1ead99817d7486 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Mon, 2 Mar 2026 14:45:29 +0100 Subject: [PATCH 07/10] revert --- Modules/Stats.lua | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Modules/Stats.lua b/Modules/Stats.lua index 65fdcd8e..eca5d2f1 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -243,17 +243,17 @@ _CreateStatInfos = function() category.attackPower, category.crit, IsWotlk and category.penetrationRating or nil, - IsClassic and nil or category.penetration, - IsClassic and nil or category.expertiseRating, - IsClassic and nil or category.expertise, - IsClassic and nil or category.hasteRating, - IsClassic and nil or category.hasteBonus + (not IsClassic) and category.penetration or nil, + (not IsClassic) and category.expertiseRating or nil, + (not IsClassic) and category.expertise or nil, + (not IsClassic) and category.hasteRating or nil, + (not IsClassic) and category.hasteBonus or nil ) if category.display then category = category.hit _CreateStatInfo( category, - IsClassic and nil or category.rating, + (not IsClassic) and category.rating or nil, category.bonus, category.sameLevel, category.bossLevel @@ -279,9 +279,9 @@ _CreateStatInfos = function() category.attackPower, category.crit, IsWotlk and category.penetrationRating or nil, - IsClassic and nil or category.penetration, - IsClassic and nil or category.hasteRating, - IsClassic and nil or category.hasteBonus, + (not IsClassic) and category.penetration or nil, + (not IsClassic) and category.hasteRating or nil, + (not IsClassic) and category.hasteBonus or nil, category.attackSpeed ) @@ -289,7 +289,7 @@ _CreateStatInfos = function() category = category.hit _CreateStatInfo( category, - IsClassic and nil or category.rating, + (not IsClassic) and category.rating or nil, category.bonus, category.sameLevel, category.bossLevel @@ -306,16 +306,16 @@ _CreateStatInfos = function() category.spellCritReduction, category.avoidance, category.avoidanceBoss, - IsClassic and nil or category.defenseRating, + (not IsClassic) and category.defenseRating or nil, category.defense, (not IsClassic and DataUtils:CanBlock()) and category.blockRating or nil, DataUtils:CanBlock() and category.blockChance or nil, DataUtils:CanBlock() and category.blockValue or nil, (not IsClassic and DataUtils:CanParry()) and category.parryRating or nil, DataUtils:CanParry() and category.parry or nil, - IsClassic and nil or category.dodgeRating, + (not IsClassic) and category.dodgeRating or nil, category.dodge or nil, - IsClassic and nil or category.resilienceRating + (not IsClassic) and category.resilienceRating or nil ) if UnitHasMana("player") then @@ -330,12 +330,12 @@ _CreateStatInfos = function() local spellHit = spell.hit _CreateStatInfo( category, - IsClassic and nil or category.hasteRating, + (not IsClassic) and category.hasteRating or nil, category.hasteBonus, - IsClassic and nil or category.penetrationRating, - IsClassic and nil or category.penetration, + (not IsClassic) and category.penetrationRating or nil, + (not IsClassic) and category.penetration or nil, spellBonus.bonusHealing, - IsClassic and nil or spellHit.rating, + (not IsClassic) and spellHit.rating or nil, spell.arcane.display and spellBonus.arcaneDmg or nil, spell.arcane.display and spellCrit.display and spellCrit.arcane or nil, spell.arcane.display and spellHit.bonus.display and spellHit.arcaneHitBonus or nil, From 2e320f35f6c4ed40e0d83cdb4cfdc41d3c931ad1 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 4 Mar 2026 18:10:15 +0100 Subject: [PATCH 08/10] revert --- Modules/Data/Melee.lua | 5 ++++- Modules/Data/Ranged.lua | 3 ++- Modules/Stats.lua | 20 ++++++-------------- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/Modules/Data/Melee.lua b/Modules/Data/Melee.lua index a69e292a..8dbd6dba 100755 --- a/Modules/Data/Melee.lua +++ b/Modules/Data/Melee.lua @@ -23,7 +23,6 @@ local Utils = ECSLoader:ImportModule("Utils") local _Melee = {} local _, _, classId = UnitClass("player") -local playerLevel = UnitLevel("player") ---@return number function Data:GetMeleeAttackPower() @@ -110,6 +109,7 @@ end ---@return string function Data:MeleeHitMissChanceSameLevel() local mainBase, mainMod, _, _ = UnitAttackBothHands("player") + local playerLevel = UnitLevel("player") local enemyDefenseValue = playerLevel * 5 local missChance @@ -138,6 +138,7 @@ end ---@return string function Data:MeleeHitMissChanceBossLevel() local mainBase, mainMod, _, _ = UnitAttackBothHands("player") + local playerLevel = UnitLevel("player") local enemyDefenseValue = (playerLevel + 3) * 5 local missChance @@ -174,6 +175,7 @@ end ---@return string function Data:GlanceHitChanceByLevel(level) local mainBase, mainMod, _, _ = UnitAttackBothHands("player") + local playerLevel = UnitLevel("player") local enemyDefenseValue = (playerLevel + level) * 5 local glancingChance = DataUtils:GetGlancingChanceByDifference(playerLevel, mainBase + mainMod, enemyDefenseValue) @@ -193,6 +195,7 @@ end ---@return string function Data:GlanceDamageByLevel(level) local mainBase, mainMod, _, _ = UnitAttackBothHands("player") + local playerLevel = UnitLevel("player") local enemyDefenseValue = (playerLevel + level) * 5 local glancePenalty = DataUtils:GetGlancingDamage(mainBase + mainMod, enemyDefenseValue) diff --git a/Modules/Data/Ranged.lua b/Modules/Data/Ranged.lua index 8dd802e0..f9c17a66 100755 --- a/Modules/Data/Ranged.lua +++ b/Modules/Data/Ranged.lua @@ -22,7 +22,6 @@ local DataUtils = ECSLoader:ImportModule("DataUtils") local _Ranged = {} local _, _, classId = UnitClass("player") -local playerLevel = UnitLevel("player") ---@return number function Data:GetRangeAttackPower() @@ -101,6 +100,7 @@ end ---@return string function Data:RangeMissChanceSameLevel() local rangedAttackBase, rangedAttackMod = UnitRangedAttack("player") + local playerLevel = UnitLevel("player") local enemyDefenseValue = playerLevel * 5 local missChance = DataUtils.GetMissChanceByDifference(rangedAttackBase + rangedAttackMod, enemyDefenseValue) @@ -119,6 +119,7 @@ end function Data.RangeMissChanceBossLevel() local rangedAttackBase, rangedAttackMod = UnitRangedAttack("player") local rangedWeaponSkill = rangedAttackBase + rangedAttackMod + local playerLevel = UnitLevel("player") local enemyDefenseValue = (playerLevel + 3) * 5 local missChance = DataUtils.GetMissChanceByDifference(rangedWeaponSkill, enemyDefenseValue) diff --git a/Modules/Stats.lua b/Modules/Stats.lua index eca5d2f1..54ccb15f 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -89,17 +89,14 @@ function Stats.CreateWindow() toggleButton:SetText("< ECS") toggleButton:SetSize(44, 18) -- Move to old position if Leatrix Plus durability button is active. See #20 - if LeaPlusDB then - local LeaPlusDB = LeaPlusDB - if (LeaPlusDB["DurabilityStatus"] == "On") or PawnInitialize then - if OutfitterButton then -- See #89 - toggleButton:SetPoint("TOPRIGHT", PaperDollItemsFrame, "TOPRIGHT", -55, -16) - else - toggleButton:SetPoint("TOPRIGHT", PaperDollItemsFrame, "TOPRIGHT", -57, -16) - end + if (LeaPlusDB and LeaPlusDB["DurabilityStatus"] == "On") or PawnInitialize then + if OutfitterButton then -- See #89 + toggleButton:SetPoint("TOPRIGHT", PaperDollItemsFrame, "TOPRIGHT", -55, -16) else - toggleButton:SetPoint("BOTTOMRIGHT", PaperDollItemsFrame, "BOTTOMRIGHT", -38, 87) + toggleButton:SetPoint("TOPRIGHT", PaperDollItemsFrame, "TOPRIGHT", -57, -16) end + else + toggleButton:SetPoint("BOTTOMRIGHT", PaperDollItemsFrame, "BOTTOMRIGHT", -38, 87) end toggleButton:SetScript("OnClick", function () Stats:ToggleWindow() @@ -108,8 +105,6 @@ function Stats.CreateWindow() mainFrame:SetScript("OnShow", function () toggleButton:SetText("< ECS") if OutfitterFrame ~= nil and OutfitterButtonFrame ~= nil then - local OutfitterButtonFrame = OutfitterButtonFrame - local OutfitterFrame = OutfitterFrame OutfitterFrame:SetPoint("TOPLEFT", OutfitterButtonFrame , "TOPRIGHT", -34 + ExtendedCharacterStats.general.window.width, -38) end Stats.UpdateInformation() @@ -117,8 +112,6 @@ function Stats.CreateWindow() mainFrame:SetScript("OnHide", function () toggleButton:SetText("ECS >") if OutfitterFrame ~= nil and OutfitterButtonFrame ~= nil then - local OutfitterButtonFrame = OutfitterButtonFrame - local OutfitterFrame = OutfitterFrame OutfitterFrame:SetPoint("TOPLEFT", OutfitterButtonFrame , "TOPRIGHT", -34, -38) end end) @@ -132,7 +125,6 @@ function Stats.CreateWindow() -- next frame After(0, function () if EngravingFrame then - local EngravingFrame = EngravingFrame if EngravingFrame:IsShown() then mainFrame:ClearAllPoints() mainFrame:SetPoint("LEFT", EngravingFrame, "RIGHT", 10, 19) From 0f3dc6fa0e9f9be44a1b523106d29add5475b137 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 4 Mar 2026 18:12:56 +0100 Subject: [PATCH 09/10] luacheck --- Modules/Data/Ranged.lua | 3 --- 1 file changed, 3 deletions(-) diff --git a/Modules/Data/Ranged.lua b/Modules/Data/Ranged.lua index f9c17a66..fc4807e7 100755 --- a/Modules/Data/Ranged.lua +++ b/Modules/Data/Ranged.lua @@ -4,7 +4,6 @@ local GetCombatRatingBonus = GetCombatRatingBonus local GetHitModifier = GetHitModifier local GetRangedCritChance = GetRangedCritChance local IsClassic = ECS.IsClassic -local IsWotlk = ECS.IsWotlk local UnitClass = UnitClass local UnitHasRelicSlot = UnitHasRelicSlot local UnitLevel = UnitLevel @@ -21,8 +20,6 @@ local DataUtils = ECSLoader:ImportModule("DataUtils") local _Ranged = {} -local _, _, classId = UnitClass("player") - ---@return number function Data:GetRangeAttackPower() if UnitHasRelicSlot("player") then From 0c35626077053039b246c078ce13ab6c6861a458 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 4 Mar 2026 18:16:38 +0100 Subject: [PATCH 10/10] remove unused --- Modules/Data/Ranged.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/Modules/Data/Ranged.lua b/Modules/Data/Ranged.lua index fc4807e7..5f32794c 100755 --- a/Modules/Data/Ranged.lua +++ b/Modules/Data/Ranged.lua @@ -4,7 +4,6 @@ local GetCombatRatingBonus = GetCombatRatingBonus local GetHitModifier = GetHitModifier local GetRangedCritChance = GetRangedCritChance local IsClassic = ECS.IsClassic -local UnitClass = UnitClass local UnitHasRelicSlot = UnitHasRelicSlot local UnitLevel = UnitLevel local UnitRangedAttack = UnitRangedAttack