From a67562baa306cb5bbef964566a9b98fb18c8d676 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Thu, 29 Jan 2026 04:11:10 +0100 Subject: [PATCH 01/21] wip --- Modules/Config/DefenseSection.lua | 78 +++++++++++++----- Modules/Config/MeleeSection.lua | 16 +++- Modules/Config/RangeSection.lua | 16 +++- Modules/Config/SpellSection.lua | 16 +++- Modules/Data/Data.lua | 14 ++-- Modules/Data/Defense.lua | 15 ++++ Modules/Data/Melee.lua | 6 ++ Modules/Data/Ranged.lua | 6 ++ Modules/Data/SpellCrit.lua | 6 ++ .../DefenseConfigTranslations.lua | 80 +++++++++++++++++++ .../MeleeConfigTranslations.lua | 22 ++++- .../RangedConfigTranslations.lua | 20 +++++ .../SpellConfigTranslations.lua | 20 +++++ 13 files changed, 285 insertions(+), 30 deletions(-) diff --git a/Modules/Config/DefenseSection.lua b/Modules/Config/DefenseSection.lua index 2d42f42c..d2030d91 100755 --- a/Modules/Config/DefenseSection.lua +++ b/Modules/Config/DefenseSection.lua @@ -42,7 +42,7 @@ function _Config:LoadDefenseSection() }, meleeCritReduction = { type = "toggle", - order = 1.81, + order = 2, name = function() return i18n("Melee Crit Reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by melee attacks.") end, width = 1.5, @@ -55,7 +55,7 @@ function _Config:LoadDefenseSection() }, rangedCritReduction = { type = "toggle", - order = 1.82, + order = 2.1, name = function() return i18n("Ranged Crit Reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by ranged attacks.") end, width = 1.5, @@ -68,7 +68,7 @@ function _Config:LoadDefenseSection() }, spellCritReduction = { type = "toggle", - order = 1.83, + order = 2.2, name = function() return i18n("Spell Crit Reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by spells.") end, width = 1.5, @@ -81,7 +81,7 @@ function _Config:LoadDefenseSection() }, avoidance = { type = "toggle", - order = 1.85, + order = 3, name = function() return i18n("Avoidance") end, desc = function() return i18n("Shows/Hides the total avoidance.") end, width = 1.5, @@ -94,7 +94,7 @@ function _Config:LoadDefenseSection() }, avoidanceBoss = { type = "toggle", - order = 1.86, + order = 3.1, name = function() return i18n("Avoidance (Lvl +3)") end, desc = function() return i18n("Shows/Hides the total avoidance (Lvl +3).") end, width = 1.5, @@ -107,7 +107,7 @@ function _Config:LoadDefenseSection() }, defenseRating = { type = "toggle", - order = 1.9, + order = 4, name = function() return i18n("Defense Rating") end, desc = function() return i18n("Shows/Hides the defense rating.") end, width = 1.5, @@ -123,7 +123,7 @@ function _Config:LoadDefenseSection() }, defense = { type = "toggle", - order = 2, + order = 4.1, name = function() return i18n("Defense") end, desc = function() return i18n("Shows/Hides the defense value.") end, width = 1.5, @@ -134,9 +134,23 @@ function _Config:LoadDefenseSection() Stats.RebuildStatInfos() end, }, + blockRating = { + type = "toggle", + order = 5, + name = function() return i18n("Block Rating") end, + desc = function() return i18n("Shows/Hides the block rating.") end, + width = 1.5, + hidden = function() return ECS.IsClassic end, + disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, + get = function () return ExtendedCharacterStats.profile.defense.blockRating.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.defense.blockRating.display = value + Stats.RebuildStatInfos() + end, + }, blockChance = { type = "toggle", - order = 3, + order = 5.1, name = function() return i18n("Block Chance") end, desc = function() return i18n("Shows/Hides the block chance.") end, width = 1.5, @@ -149,7 +163,7 @@ function _Config:LoadDefenseSection() }, blockValue = { type = "toggle", - order = 4, + order = 5.2, name = function() return i18n("Block Value") end, desc = function() return i18n("Shows/Hides the block value.") end, width = 1.5, @@ -160,9 +174,23 @@ function _Config:LoadDefenseSection() Stats.RebuildStatInfos() end, }, + parryRating = { + type = "toggle", + order = 6, + name = function() return i18n("Parry Rating") end, + desc = function() return i18n("Shows/Hides the parry rating.") end, + width = 1.5, + hidden = function() return ECS.IsClassic end, + disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, + get = function () return ExtendedCharacterStats.profile.defense.parryRating.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.defense.parryRating.display = value + Stats.RebuildStatInfos() + end, + }, parry = { type = "toggle", - order = 5, + order = 6.1, name = function() return i18n("Parry Chance") end, desc = function() return i18n("Shows/Hides the parry chance.") end, width = 1.5, @@ -173,9 +201,23 @@ function _Config:LoadDefenseSection() Stats.RebuildStatInfos() end, }, + dodgeRating = { + type = "toggle", + order = 7, + name = function() return i18n("Dodge Rating") end, + desc = function() return i18n("Shows/Hides the dodge rating.") end, + width = 1.5, + hidden = function() return ECS.IsClassic end, + disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, + get = function () return ExtendedCharacterStats.profile.defense.dodgeRating.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.defense.dodgeRating.display = value + Stats.RebuildStatInfos() + end, + }, dodge = { type = "toggle", - order = 6, + order = 7.1, name = function() return i18n("Dodge Chance") end, desc = function() return i18n("Shows/Hides the dodge chance.") end, width = 1.5, @@ -188,17 +230,15 @@ function _Config:LoadDefenseSection() }, resilience = { type = "toggle", - order = 7, - name = function() return i18n("Resilience") end, - desc = function() return i18n("Shows/Hides the resilience value.") end, + order = 8, + name = function() return i18n("Resilience Rating") end, + desc = function() return i18n("Shows/Hides the resilience rating.") end, width = 1.5, - hidden = function() - return (not ECS.IsWotlk) - end, + hidden = function() return ECS.IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.resilience.display; end, + get = function () return ExtendedCharacterStats.profile.defense.resilienceRating.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.resilience.display = value + ExtendedCharacterStats.profile.defense.resilienceRating.display = value Stats.RebuildStatInfos() end, }, diff --git a/Modules/Config/MeleeSection.lua b/Modules/Config/MeleeSection.lua index 19c4a905..91e04290 100755 --- a/Modules/Config/MeleeSection.lua +++ b/Modules/Config/MeleeSection.lua @@ -40,9 +40,23 @@ function _Config:LoadMeleeSection() Stats.RebuildStatInfos() end, }, - meleeCrit = { + meleeCritRating = { type = "toggle", order = 2, + name = function() return i18n("Melee Crit Rating") end, + desc = function() return i18n("Shows/Hides the melee crit rating.") end, + width = 1.5, + hidden = function() return ECS.IsClassic end, + disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, + get = function () return ExtendedCharacterStats.profile.melee.critRating.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.melee.critRating.display = value + Stats.RebuildStatInfos() + end, + }, + meleeCrit = { + type = "toggle", + order = 2.1, name = function() return i18n("Melee Crit") end, desc = function() return i18n("Shows/Hides the melee crit chance.") end, width = 1.5, diff --git a/Modules/Config/RangeSection.lua b/Modules/Config/RangeSection.lua index 591e33c0..fdb594df 100755 --- a/Modules/Config/RangeSection.lua +++ b/Modules/Config/RangeSection.lua @@ -40,9 +40,23 @@ function _Config:LoadRangeSection() Stats.RebuildStatInfos() end, }, - rangeCrit = { + rangedCritRating = { type = "toggle", order = 2, + name = function() return i18n("Ranged Crit Rating") end, + desc = function() return i18n("Shows/Hides the ranged crit rating.") end, + width = 1.5, + hidden = function() return ECS.IsClassic end, + disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, + get = function () return ExtendedCharacterStats.profile.ranged.critRating.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.ranged.critRating.display = value + Stats.RebuildStatInfos() + end, + }, + rangeCrit = { + type = "toggle", + order = 2.1, name = function() return i18n("Ranged Crit") end, desc = function() return i18n("Shows/Hides the ranged crit chance.") end, width = 1.5, diff --git a/Modules/Config/SpellSection.lua b/Modules/Config/SpellSection.lua index d026e2b6..410e9cb9 100755 --- a/Modules/Config/SpellSection.lua +++ b/Modules/Config/SpellSection.lua @@ -27,9 +27,23 @@ function _Config:LoadSpellSection() Stats.RebuildStatInfos() end, }, - spellCrit = { + spellCritRating = { type = "toggle", order = 1, + name = function() return i18n("Spell Crit Rating") end, + desc = function() return i18n("Shows/Hides the spell crit rating.") end, + width = 1.5, + hidden = function() return ECS.IsClassic end, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spell.critRating.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spell.critRating.display = value + Stats.RebuildStatInfos() + end, + }, + spellCrit = { + type = "toggle", + order = 1.1, name = function() return i18n("Spell Crit") end, desc = function() return i18n("Shows/Hides the spell crit chance.") end, width = 1.5, diff --git a/Modules/Data/Data.lua b/Modules/Data/Data.lua index 7cfb50bf..a460ce25 100755 --- a/Modules/Data/Data.lua +++ b/Modules/Data/Data.lua @@ -21,6 +21,7 @@ dataFunctionRefs = { ["MovementSpeed"] = function() return Data:GetMovementSpeed() end, -- Melee ["MeleeAttackPower"] = function() return Data:GetMeleeAttackPower() end, + ["MeleeCritRating"] = function() return ECS.IsClassic and 0 or Data:GetMeleeCritRating() end, ["MeleeCritChance"] = function() return Data:MeleeCrit() end, ["Expertise"] = function() if ECS.IsWotlk then @@ -85,6 +86,7 @@ dataFunctionRefs = { ["MeleeAttackSpeedOffHand"] = function() return Data:GetMeleeAttackSpeedOffHand() end, -- Ranged ["RangeAttackpower"] = function() return Data:GetRangeAttackPower() end, + ["RangedCritRating"] = function() return ECS.IsClassic and 0 or Data:GetRangedCritRating() end, ["RangedCritChance"] = function() return Data:RangedCrit() end, ["RangedHitRating"] = function() if ECS.IsWotlk then @@ -140,17 +142,14 @@ dataFunctionRefs = { end end, ["DefenseValue"] = function() return Data:GetDefenseValue() end, + ["DodgeRating"] = function() return ECS.IsClassic and 0 or Data:GetDodgeRating() end, ["DodgeChance"] = function() return Data:GetDodgeChance() end, + ["ParryRating"] = function() return ECS.IsClassic and 0 or Data:GetParryRating() end, ["ParryChance"] = function() return Data:GetParryChance() end, + ["BlockRating"] = function() return ECS.IsClassic and 0 or Data:GetBlockRating() end, ["BlockChance"] = function() return Data:GetBlockChance() end, ["BlockValue"] = function() return Data:GetBlockValue() end, - ["ResilienceValue"] = function() - if ECS.IsWotlk then - return Data:GetResilienceRating() - else - return 0 - end - end, + ["ResilienceRating"] = function() return ECS.IsClassic and 0 or Data:GetResilienceRating() end, -- Spell ["SpellHitRating"] = function() if ECS.IsWotlk then @@ -162,6 +161,7 @@ dataFunctionRefs = { ["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, + ["SpellCritRating"] = function() return ECS.IsClassic and 0 or Data:GetSpellCritRating() end, ["SpellCritChance"] = function() return Data:GetSpellCrit(Data.HOLY_SCHOOL) end, ["SpellHasteRating"] = function() if ECS.IsWotlk then diff --git a/Modules/Data/Defense.lua b/Modules/Data/Defense.lua index f50d2f2f..f05036a6 100755 --- a/Modules/Data/Defense.lua +++ b/Modules/Data/Defense.lua @@ -234,6 +234,21 @@ function Data:GetResilienceRating() return DataUtils:Round(GetCombatRating(15), 2) end +---@return number +function Data:GetParryRating() + return DataUtils:Round(GetCombatRating(CR_PARRY), 2) +end + +---@return number +function Data:GetDodgeRating() + return DataUtils:Round(GetCombatRating(CR_DODGE), 2) +end + +---@return number +function Data:GetBlockRating() + return DataUtils:Round(GetCombatRating(CR_BLOCK), 2) +end + ---@return number function _Defense:GetEnchantsBlockValue() local mod = 0 diff --git a/Modules/Data/Melee.lua b/Modules/Data/Melee.lua index e0f36ccf..93172cf3 100755 --- a/Modules/Data/Melee.lua +++ b/Modules/Data/Melee.lua @@ -277,6 +277,12 @@ function Data:GetMeleeHasteRating() return DataUtils:Round(hasteRating, 0) end +---@return number +function Data:GetMeleeCritRating() + local critRating = GetCombatRating(CR_CRIT_MELEE) + return DataUtils:Round(critRating, 0) +end + ---@return string function Data:GetMeleeHasteBonus() local hasteBonus = GetCombatRatingBonus(CR_HASTE_MELEE) diff --git a/Modules/Data/Ranged.lua b/Modules/Data/Ranged.lua index 957571d1..87a5b926 100755 --- a/Modules/Data/Ranged.lua +++ b/Modules/Data/Ranged.lua @@ -144,4 +144,10 @@ function Data.RangeMissChanceBossLevel() return DataUtils:Round(missChance, 2) .. "%" end +---@return number +function Data:GetRangedCritRating() + local critRating = GetCombatRating(CR_CRIT_RANGED) + return DataUtils:Round(critRating, 0) +end + return Data diff --git a/Modules/Data/SpellCrit.lua b/Modules/Data/SpellCrit.lua index 2d6569e9..2b21befb 100755 --- a/Modules/Data/SpellCrit.lua +++ b/Modules/Data/SpellCrit.lua @@ -185,3 +185,9 @@ end function Data:GetSpellPenetration() return DataUtils:Round(GetSpellPenetration(), 2) end + +---@return number +function Data:GetSpellCritRating() + local critRating = GetCombatRating(CR_CRIT_SPELL) + return DataUtils:Round(critRating, 0) +end \ No newline at end of file diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index 8d2a36cb..06861091 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -182,6 +182,86 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false }, + ["Parry Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Dodge Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Block Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Resilience Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Shows/Hides the resilience rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Shows/Hides the parry rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Shows/Hides the dodge rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Shows/Hides the block rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, } for k, v in pairs(defenseConfigTranslations) do diff --git a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua index 57db826a..8ed17347 100644 --- a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua @@ -361,7 +361,27 @@ local meleeConfigTranslations = { ["esES"] = "Muestra/oculta todas las estadísticas de golpes de refilón", ["esMX"] = "Muestra/oculta todas las estadísticas de golpes de refilón", ["ptBR"] = "Mostra/oculta todas as estatísticas de pancada de relance" - } + }, + ["Melee Crit Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Shows/Hides the melee crit rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, } for k, v in pairs(meleeConfigTranslations) do diff --git a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua index f8576871..7b53c869 100644 --- a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua @@ -161,6 +161,26 @@ local rangedConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de fallo contra jefes (nivel +3)", ["ptBR"] = "Mostra/oculta a chance de erro contra chefes (nível +3)" }, + ["Ranged Crit Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Shows/Hides the ranged crit rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, } for k, v in pairs(rangedConfigTranslations) do diff --git a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua index 9fd59d06..e10fe768 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua @@ -222,6 +222,26 @@ local spellConfigTranslations = { ["esMX"] = "Muestra/oculta el valor de poder de sanación", ["ptBR"] = "Mostra/oculta o valor de poder de cura" }, + ["Spell Crit Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Shows/Hides the spell crit rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, } for k, v in pairs(spellConfigTranslations) do From 1af29d6d3381c91b3ffa5bc26a3abad9400f6869 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Thu, 29 Jan 2026 17:10:34 +0100 Subject: [PATCH 02/21] wip --- Modules/Stats.lua | 182 +++++++++++++++++++++++----------------------- 1 file changed, 92 insertions(+), 90 deletions(-) diff --git a/Modules/Stats.lua b/Modules/Stats.lua index e10820a4..7c100ea7 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -215,12 +215,19 @@ _CreateStatInfos = function() _CreateStatInfo(category, category.movementSpeed) category = profile.melee - if ECS.IsWotlk then - _CreateStatInfo(category, category.attackPower, category.crit, category.penetration, category.penetrationRating, category.expertise, - category.expertiseRating, category.hasteRating, category.hasteBonus) - else - _CreateStatInfo(category, category.attackPower, category.crit) - end + _CreateStatInfo( + category, + category.attackPower, + ECS.IsClassic and nil or category.critRating, + category.crit, + ECS.IsWotlk and category.penetrationRating or nil, + ECS.IsClassic and nil or category.penetration, + ECS.IsClassic and nil or category.expertiseRating, + ECS.IsClassic and nil or category.expertise, + ECS.IsClassic and nil or category.hasteRating, + category.hasteBonus + ) + if category.display then category = category.hit _CreateStatInfo(category, category.rating, category.bonus, category.sameLevel, category.bossLevel) @@ -235,12 +242,17 @@ _CreateStatInfos = function() end category = profile.ranged - if ECS.IsWotlk then - _CreateStatInfo(category, category.attackPower, category.crit, category.penetration, category.penetrationRating, - category.hasteRating, category.hasteBonus, category.attackSpeed) - else - _CreateStatInfo(category, category.attackPower, category.crit, category.attackSpeed) - end + _CreateStatInfo( + category, + category.attackPower, + ECS.IsClassic and nil or category.critRating, + category.crit, + ECS.IsWotlk and category.penetrationRating or nil, + ECS.IsClassic and nil or category.penetration, + ECS.IsClassic and nil or category.hasteRating, + category.hasteBonus, + category.attackSpeed + ) if category.display then category = category.hit @@ -248,88 +260,78 @@ _CreateStatInfos = function() end category = profile.defense - _CreateStatInfo(category, category.armor, category.meleeCritReduction, category.rangedCritReduction, category.spellCritReduction, category.avoidance, category.avoidanceBoss, - category.defenseRating, category.defense, category.blockChance, category.blockValue, category.parry, category.dodge, category.resilience) + _CreateStatInfo( + category, + category.armor, + category.meleeCritReduction, + category.rangedCritReduction, + category.spellCritReduction, + category.avoidance, + category.avoidanceBoss, + ECS.IsClassic and nil or category.defenseRating, + category.defense, + ECS.IsClassic and nil or category.blockRating, + category.blockChance, + category.blockValue, + ECS.IsClassic and nil or category.parryRating, + category.parry, + ECS.IsClassic and nil or category.dodgeRating, + category.dodge, + ECS.IsClassic and nil or category.resilienceRating + ) category = profile.regen _CreateStatInfo(category, category.mp5Items, category.mp5Spirit, category.mp5Buffs, category.mp5Casting, category.mp5NotCasting) - category = profile.spell - if ECS.IsWotlk then - _CreateStatInfo(category, category.hasteRating, category.hasteBonus, category.penetration) - - if category.display then - category = category.hit - _CreateStatInfo(category, category.rating, category.bonus, category.sameLevel, category.bossLevel) - end - - category = profile.spellBonus - local spell = profile.spell - local spellCrit = spell.crit - _CreateStatInfo( - category, - category.bonusHealing, - spell.arcane.display and category.arcaneDmg or nil, - spell.arcane.display and spellCrit.arcane or nil, - spell.fire.display and category.fireDmg or nil, - spell.fire.display and spellCrit.fire or nil, - spell.frost.display and category.frostDmg or nil, - spell.frost.display and spellCrit.frost or nil, - spell.holy.display and category.holyDmg or nil, - spell.holy.display and spellCrit.holy or nil, - spell.nature.display and category.natureDmg or nil, - spell.nature.display and spellCrit.nature or nil, - spell.physical.display and category.physicalDmg or nil, - spell.physical.display and spellCrit.physical or nil, - spell.shadow.display and category.shadowDmg or nil, - spell.shadow.display and spellCrit.shadow or nil - ) - else - local spellBonus = profile.spellBonus - local spell = profile.spell - local spellCrit = spell.crit - local spellHit = spell.hit - _CreateStatInfo( - category, - category.penetration, - spellBonus.bonusHealing, - 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, - spell.arcane.display and spellHit.sameLevel.display and spellHit.arcaneMissChance or nil, - spell.arcane.display and spellHit.bossLevel.display and spellHit.arcaneMissChanceBoss or nil, - spell.fire.display and spellBonus.fireDmg or nil, - spell.fire.display and spellCrit.display and spellCrit.fire or nil, - spell.fire.display and spellHit.bonus.display and spellHit.fireHitBonus or nil, - spell.fire.display and spellHit.sameLevel.display and spellHit.fireMissChance or nil, - spell.fire.display and spellHit.bossLevel.display and spellHit.fireMissChanceBoss or nil, - spell.frost.display and spellBonus.frostDmg or nil, - spell.frost.display and spellCrit.display and spellCrit.frost or nil, - spell.frost.display and spellHit.bonus.display and spellHit.frostHitBonus or nil, - spell.frost.display and spellHit.sameLevel.display and spellHit.frostMissChance or nil, - spell.frost.display and spellHit.bossLevel.display and spellHit.frostMissChanceBoss or nil, - spell.holy.display and spellBonus.holyDmg or nil, - spell.holy.display and spellCrit.display and spellCrit.holy or nil, - spell.holy.display and spellHit.bonus.display and spellHit.holyHitBonus or nil, - spell.holy.display and spellHit.sameLevel.display and spellHit.holyMissChance or nil, - spell.holy.display and spellHit.bossLevel.display and spellHit.holyMissChanceBoss or nil, - spell.nature.display and spellBonus.natureDmg or nil, - spell.nature.display and spellCrit.display and spellCrit.nature or nil, - spell.nature.display and spellHit.bonus.display and spellHit.natureHitBonus or nil, - spell.nature.display and spellHit.sameLevel.display and spellHit.natureMissChance or nil, - spell.nature.display and spellHit.bossLevel.display and spellHit.natureMissChanceBoss or nil, - spell.physical.display and spellBonus.physicalDmg or nil, - spell.physical.display and spellCrit.display and spellCrit.physical or nil, - spell.physical.display and spellHit.bonus.display and spellHit.physicalHitBonus or nil, - spell.physical.display and spellHit.sameLevel.display and spellHit.physicalMissChance or nil, - spell.physical.display and spellHit.bossLevel.display and spellHit.physicalMissChanceBoss or nil, - spell.shadow.display and spellBonus.shadowDmg or nil, - spell.shadow.display and spellCrit.display and spellCrit.shadow or nil, - spell.shadow.display and spellHit.bonus.display and spellHit.shadowHitBonus or nil, - spell.shadow.display and spellHit.sameLevel.display and spellHit.shadowMissChance or nil, - spell.shadow.display and spellHit.bossLevel.display and spellHit.shadowMissChanceBoss or nil - ) - end + local spellBonus = profile.spellBonus + local spell = profile.spell + local spellCrit = spell.crit + local spellHit = spell.hit + _CreateStatInfo( + category, + ECS.IsClassic and nil or category.hasteRating, + ECS.IsClassic and nil or category.hasteBonus, + ECS.IsClassic and nil or category.penetrationRating, + ECS.IsClassic and nil or category.penetration, + spellBonus.bonusHealing, + ECS.IsClassic and nil or spellHit.rating, + ECS.IsClassic and nil or spellCrit.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, + spell.arcane.display and spellHit.sameLevel.display and spellHit.arcaneMissChance or nil, + spell.arcane.display and spellHit.bossLevel.display and spellHit.arcaneMissChanceBoss or nil, + spell.fire.display and spellBonus.fireDmg or nil, + spell.fire.display and spellCrit.display and spellCrit.fire or nil, + spell.fire.display and spellHit.bonus.display and spellHit.fireHitBonus or nil, + spell.fire.display and spellHit.sameLevel.display and spellHit.fireMissChance or nil, + spell.fire.display and spellHit.bossLevel.display and spellHit.fireMissChanceBoss or nil, + spell.frost.display and spellBonus.frostDmg or nil, + spell.frost.display and spellCrit.display and spellCrit.frost or nil, + spell.frost.display and spellHit.bonus.display and spellHit.frostHitBonus or nil, + spell.frost.display and spellHit.sameLevel.display and spellHit.frostMissChance or nil, + spell.frost.display and spellHit.bossLevel.display and spellHit.frostMissChanceBoss or nil, + spell.holy.display and spellBonus.holyDmg or nil, + spell.holy.display and spellCrit.display and spellCrit.holy or nil, + spell.holy.display and spellHit.bonus.display and spellHit.holyHitBonus or nil, + spell.holy.display and spellHit.sameLevel.display and spellHit.holyMissChance or nil, + spell.holy.display and spellHit.bossLevel.display and spellHit.holyMissChanceBoss or nil, + spell.nature.display and spellBonus.natureDmg or nil, + spell.nature.display and spellCrit.display and spellCrit.nature or nil, + spell.nature.display and spellHit.bonus.display and spellHit.natureHitBonus or nil, + spell.nature.display and spellHit.sameLevel.display and spellHit.natureMissChance or nil, + spell.nature.display and spellHit.bossLevel.display and spellHit.natureMissChanceBoss or nil, + spell.physical.display and spellBonus.physicalDmg or nil, + spell.physical.display and spellCrit.display and spellCrit.physical or nil, + spell.physical.display and spellHit.bonus.display and spellHit.physicalHitBonus or nil, + spell.physical.display and spellHit.sameLevel.display and spellHit.physicalMissChance or nil, + spell.physical.display and spellHit.bossLevel.display and spellHit.physicalMissChanceBoss or nil, + spell.shadow.display and spellBonus.shadowDmg or nil, + spell.shadow.display and spellCrit.display and spellCrit.shadow or nil, + spell.shadow.display and spellHit.bonus.display and spellHit.shadowHitBonus or nil, + spell.shadow.display and spellHit.sameLevel.display and spellHit.shadowMissChance or nil, + spell.shadow.display and spellHit.bossLevel.display and spellHit.shadowMissChanceBoss or nil + ) end --- Creates a new header in the stats UI From e8f2af3bd9dd4fa529c2d459b88d66a3aa60cacd Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Fri, 30 Jan 2026 03:58:45 +0100 Subject: [PATCH 03/21] wip --- .../DefenseConfigTranslations.lua | 40 ------------------- .../i18n/translations/StatTranslations.lua | 40 +++++++++++++++++++ 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index 06861091..6707f6a2 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -182,46 +182,6 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false }, - ["Parry Rating."] = { - ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, - }, - ["Dodge Rating."] = { - ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, - }, - ["Block Rating."] = { - ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, - }, - ["Resilience Rating."] = { - ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, - }, ["Shows/Hides the resilience rating."] = { ["enUS"] = true, ["deDE"] = true, diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index 6bf9140e..1226068a 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -322,6 +322,36 @@ local statTranslations = { ["esMX"] = "Defensa", ["ptBR"] = "Defesa" }, + ["Parry Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Dodge Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Block Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, ["Block Chance"] = { ["enUS"] = true, ["deDE"] = "Blockchance", @@ -362,6 +392,16 @@ local statTranslations = { ["esMX"] = "Probabilidad de esquivar", ["ptBR"] = "Chance de esquivar" }, + ["Resilience Rating."] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, ["Resilience"] = { ["enUS"] = true, ["deDE"] = "Abhärtung", From 547646037426883bb1f8b14b6199438ce90c0875 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Fri, 30 Jan 2026 04:58:49 +0100 Subject: [PATCH 04/21] wip --- .../DefenseConfigTranslations.lua | 40 +++++++++++++++++++ .../MeleeConfigTranslations.lua | 2 +- .../RangedConfigTranslations.lua | 2 +- .../SpellConfigTranslations.lua | 2 +- .../i18n/translations/StatTranslations.lua | 32 ++++++++++++++- 5 files changed, 74 insertions(+), 4 deletions(-) diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index 6707f6a2..ac53f08c 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -2,6 +2,46 @@ local i18n = ECSLoader:ImportModule("i18n") local defenseConfigTranslations = { + ["Parry Rating"] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Dodge Rating"] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Block Rating"] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, + ["Resilience Rating"] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, ["Melee Crit Reduction"] = { ["enUS"] = true, ["deDE"] = false, diff --git a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua index 8ed17347..9e5a600c 100644 --- a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua @@ -362,7 +362,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta todas las estadísticas de golpes de refilón", ["ptBR"] = "Mostra/oculta todas as estatísticas de pancada de relance" }, - ["Melee Crit Rating."] = { + ["Melee Crit Rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, diff --git a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua index 7b53c869..00baa15d 100644 --- a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua @@ -161,7 +161,7 @@ local rangedConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de fallo contra jefes (nivel +3)", ["ptBR"] = "Mostra/oculta a chance de erro contra chefes (nível +3)" }, - ["Ranged Crit Rating."] = { + ["Ranged Crit Rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, diff --git a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua index e10fe768..c72e1bdd 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua @@ -222,7 +222,7 @@ local spellConfigTranslations = { ["esMX"] = "Muestra/oculta el valor de poder de sanación", ["ptBR"] = "Mostra/oculta o valor de poder de cura" }, - ["Spell Crit Rating."] = { + ["Spell Crit Rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index 1226068a..ee17e8d3 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -42,6 +42,16 @@ local statTranslations = { ["esMX"] = "Poder de ataque", ["ptBR"] = "Poder de ataque" }, + ["Melee Crit Rating"] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, ["Crit Chance"] = { ["enUS"] = true, ["deDE"] = "Kritische Chance", @@ -252,6 +262,16 @@ local statTranslations = { ["esMX"] = "A distancia", ["ptBR"] = "Longo alcance" }, + ["Ranged Crit Rating"] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, ["Armor"] = { ["enUS"] = true, ["deDE"] = "Rüstung", @@ -392,7 +412,7 @@ local statTranslations = { ["esMX"] = "Probabilidad de esquivar", ["ptBR"] = "Chance de esquivar" }, - ["Resilience Rating."] = { + ["Resilience Rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, @@ -482,6 +502,16 @@ local statTranslations = { ["esMX"] = "Hechizo", ["ptBR"] = "Feitiço" }, + ["Spell Crit Rating"] = { + ["enUS"] = true, + ["deDE"] = true, + ["frFR"] = true, + ["zhCN"] = true, + ["ruRU"] = true, + ["esES"] = true, + ["esMX"] = true, + ["ptBR"] = true, + }, ["Penetration"] = { ["enUS"] = true, ["deDE"] = "Durchschlagskraft", From a0e6b0f033b31c884a15019c3899d101771f03d2 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Fri, 30 Jan 2026 05:14:00 +0100 Subject: [PATCH 05/21] wip --- Modules/Config/MeleeSection.lua | 4 ++-- Modules/Config/RangeSection.lua | 4 ++-- Modules/Config/SpellSection.lua | 4 ++-- Modules/Profile.lua | 10 ++++----- .../MeleeConfigTranslations.lua | 4 ++-- .../RangedConfigTranslations.lua | 4 ++-- .../SpellConfigTranslations.lua | 4 ++-- .../i18n/translations/StatTranslations.lua | 22 +++++++++---------- 8 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Modules/Config/MeleeSection.lua b/Modules/Config/MeleeSection.lua index 91e04290..afb9faf2 100755 --- a/Modules/Config/MeleeSection.lua +++ b/Modules/Config/MeleeSection.lua @@ -43,8 +43,8 @@ function _Config:LoadMeleeSection() meleeCritRating = { type = "toggle", order = 2, - name = function() return i18n("Melee Crit Rating") end, - desc = function() return i18n("Shows/Hides the melee crit rating.") end, + name = function() return i18n("Melee Crit. Rating") end, + desc = function() return i18n("Shows/Hides the melee crit. rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, diff --git a/Modules/Config/RangeSection.lua b/Modules/Config/RangeSection.lua index fdb594df..7c277b83 100755 --- a/Modules/Config/RangeSection.lua +++ b/Modules/Config/RangeSection.lua @@ -43,8 +43,8 @@ function _Config:LoadRangeSection() rangedCritRating = { type = "toggle", order = 2, - name = function() return i18n("Ranged Crit Rating") end, - desc = function() return i18n("Shows/Hides the ranged crit rating.") end, + name = function() return i18n("Ranged Crit. Rating") end, + desc = function() return i18n("Shows/Hides the ranged crit. rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, diff --git a/Modules/Config/SpellSection.lua b/Modules/Config/SpellSection.lua index 410e9cb9..56f1c301 100755 --- a/Modules/Config/SpellSection.lua +++ b/Modules/Config/SpellSection.lua @@ -30,8 +30,8 @@ function _Config:LoadSpellSection() spellCritRating = { type = "toggle", order = 1, - name = function() return i18n("Spell Crit Rating") end, - desc = function() return i18n("Shows/Hides the spell crit rating.") end, + name = function() return i18n("Spell Crit. Rating") end, + desc = function() return i18n("Shows/Hides the spell crit. rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, diff --git a/Modules/Profile.lua b/Modules/Profile.lua index 2739d369..2833c596 100755 --- a/Modules/Profile.lua +++ b/Modules/Profile.lua @@ -128,12 +128,12 @@ local function GetDefaultStatsProfile() statColor = colors.ATTACK_SPEED_PRIMARY, }, expertise = {display = true, isTbcOnly = true, refName = "Expertise", text = "Expertise"}, - expertiseRating = {display = true, isTbcOnly = true, refName = "ExpertiseRating", text = "Expertise Rating"}, + expertiseRating = {display = true, isTbcOnly = true, refName = "ExpertiseRating", text = "Expertise rating"}, hasteRating = { display = true, isTbcOnly = true, refName = "MeleeHasteRating", - text = "Haste Rating", + text = "Haste rating", textColor = colors.HASTE_RATING_SECONDARY, statColor = colors.HASTE_RATING_PRIMARY }, @@ -236,7 +236,7 @@ local function GetDefaultStatsProfile() display = true, isTbcOnly = true, refName = "RangedArmorPenetrationRating", - text = "Armor Pen. Rating", + text = "Armor pen. rating", textColor = colors.ATTACK_SPEED_SECONDARY, statColor = colors.ATTACK_SPEED_PRIMARY, }, @@ -244,7 +244,7 @@ local function GetDefaultStatsProfile() display = true, isTbcOnly = true, refName = "RangedHasteRating", - text = "Haste Rating", + text = "Haste rating", textColor = colors.HASTE_RATING_SECONDARY, statColor = colors.HASTE_RATING_PRIMARY }, @@ -542,7 +542,7 @@ local function GetDefaultStatsProfile() display = true, isTbcOnly = true, refName = "SpellHasteRating", - text = "Haste Rating", + text = "Haste rating", textColor = colors.HASTE_RATING_SECONDARY, statColor = colors.HASTE_RATING_PRIMARY }, diff --git a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua index 9e5a600c..ccf015a3 100644 --- a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua @@ -362,7 +362,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta todas las estadísticas de golpes de refilón", ["ptBR"] = "Mostra/oculta todas as estatísticas de pancada de relance" }, - ["Melee Crit Rating"] = { + ["Melee Crit. Rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, @@ -372,7 +372,7 @@ local meleeConfigTranslations = { ["esMX"] = true, ["ptBR"] = true, }, - ["Shows/Hides the melee crit rating."] = { + ["Shows/Hides the melee crit. rating."] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, diff --git a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua index 00baa15d..42771fd2 100644 --- a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua @@ -161,7 +161,7 @@ local rangedConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de fallo contra jefes (nivel +3)", ["ptBR"] = "Mostra/oculta a chance de erro contra chefes (nível +3)" }, - ["Ranged Crit Rating"] = { + ["Ranged Crit. Rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, @@ -171,7 +171,7 @@ local rangedConfigTranslations = { ["esMX"] = true, ["ptBR"] = true, }, - ["Shows/Hides the ranged crit rating."] = { + ["Shows/Hides the ranged crit. rating."] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, diff --git a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua index c72e1bdd..592281f6 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua @@ -222,7 +222,7 @@ local spellConfigTranslations = { ["esMX"] = "Muestra/oculta el valor de poder de sanación", ["ptBR"] = "Mostra/oculta o valor de poder de cura" }, - ["Spell Crit Rating"] = { + ["Spell Crit. Rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, @@ -232,7 +232,7 @@ local spellConfigTranslations = { ["esMX"] = true, ["ptBR"] = true, }, - ["Shows/Hides the spell crit rating."] = { + ["Shows/Hides the spell crit. rating."] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index ee17e8d3..f1683d93 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -42,7 +42,7 @@ local statTranslations = { ["esMX"] = "Poder de ataque", ["ptBR"] = "Poder de ataque" }, - ["Melee Crit Rating"] = { + ["Melee crit. rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, @@ -72,7 +72,7 @@ local statTranslations = { ["esMX"] = "Penetración de armadura", ["ptBR"] = "Penetração em Armadura" }, - ["Armor Pen. Rating"] = { + ["Armor pen. rating"] = { ["enUS"] = true, ["deDE"] = "Rüstungsdurchschlagwertung", ["frFR"] = "Score de pénétration d'armure", @@ -92,7 +92,7 @@ local statTranslations = { ["esMX"] = "Pericia", ["ptBR"] = "Aptidão" }, - ["Expertise Rating"] = { + ["Expertise rating"] = { ["enUS"] = true, ["deDE"] = "Waffenkundewertung", ["frFR"] = "Score d'expertise", @@ -202,7 +202,7 @@ local statTranslations = { ["esMX"] = "Daño (Niv. + 3)", ["ptBR"] = "Dano (Nív. + 3)" }, - ["Haste Rating"] = { + ["Haste rating"] = { ["enUS"] = true, ["deDE"] = "Tempowertung", ["frFR"] = "Score de hâte", @@ -262,7 +262,7 @@ local statTranslations = { ["esMX"] = "A distancia", ["ptBR"] = "Longo alcance" }, - ["Ranged Crit Rating"] = { + ["Ranged crit. rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, @@ -322,7 +322,7 @@ local statTranslations = { ["esMX"] = "Eludir (Niv. +3)", ["ptBR"] = "Evasiva (Nív. +3)" }, - ["Defense Rating"] = { + ["Defense rating"] = { ["enUS"] = true, ["deDE"] = "Verteidigungswertung", ["frFR"] = "Score de défense", @@ -342,7 +342,7 @@ local statTranslations = { ["esMX"] = "Defensa", ["ptBR"] = "Defesa" }, - ["Parry Rating."] = { + ["Parry rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, @@ -352,7 +352,7 @@ local statTranslations = { ["esMX"] = true, ["ptBR"] = true, }, - ["Dodge Rating."] = { + ["Dodge rating."] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, @@ -362,7 +362,7 @@ local statTranslations = { ["esMX"] = true, ["ptBR"] = true, }, - ["Block Rating."] = { + ["Block rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, @@ -412,7 +412,7 @@ local statTranslations = { ["esMX"] = "Probabilidad de esquivar", ["ptBR"] = "Chance de esquivar" }, - ["Resilience Rating"] = { + ["Resilience rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, @@ -502,7 +502,7 @@ local statTranslations = { ["esMX"] = "Hechizo", ["ptBR"] = "Feitiço" }, - ["Spell Crit Rating"] = { + ["Spell crit. rating"] = { ["enUS"] = true, ["deDE"] = true, ["frFR"] = true, From ea984ca007951ad6ffff8aa7af2b2244ee18f638 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Fri, 13 Feb 2026 23:01:55 +0100 Subject: [PATCH 06/21] false on non english lines --- .../DefenseConfigTranslations.lua | 112 +++++++++--------- .../MeleeConfigTranslations.lua | 28 ++--- .../RangedConfigTranslations.lua | 28 ++--- .../SpellConfigTranslations.lua | 28 ++--- .../i18n/translations/StatTranslations.lua | 98 +++++++-------- 5 files changed, 147 insertions(+), 147 deletions(-) diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index ac53f08c..9be3c1e3 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -4,43 +4,43 @@ local i18n = ECSLoader:ImportModule("i18n") local defenseConfigTranslations = { ["Parry Rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Dodge Rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Block Rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Resilience Rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Melee Crit Reduction"] = { ["enUS"] = true, @@ -224,43 +224,43 @@ local defenseConfigTranslations = { }, ["Shows/Hides the resilience rating."] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Shows/Hides the parry rating."] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Shows/Hides the dodge rating."] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Shows/Hides the block rating."] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, } diff --git a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua index ccf015a3..5a328c58 100644 --- a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua @@ -364,23 +364,23 @@ local meleeConfigTranslations = { }, ["Melee Crit. Rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Shows/Hides the melee crit. rating."] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, } diff --git a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua index 42771fd2..db729293 100644 --- a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua @@ -163,23 +163,23 @@ local rangedConfigTranslations = { }, ["Ranged Crit. Rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Shows/Hides the ranged crit. rating."] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, } diff --git a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua index 592281f6..b9f52891 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua @@ -224,23 +224,23 @@ local spellConfigTranslations = { }, ["Spell Crit. Rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Shows/Hides the spell crit. rating."] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, } diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index f1683d93..cf824ad0 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -44,13 +44,13 @@ local statTranslations = { }, ["Melee crit. rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Crit Chance"] = { ["enUS"] = true, @@ -264,13 +264,13 @@ local statTranslations = { }, ["Ranged crit. rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Armor"] = { ["enUS"] = true, @@ -344,33 +344,33 @@ local statTranslations = { }, ["Parry rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Dodge rating."] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Block rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Block Chance"] = { ["enUS"] = true, @@ -414,13 +414,13 @@ local statTranslations = { }, ["Resilience rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Resilience"] = { ["enUS"] = true, @@ -504,13 +504,13 @@ local statTranslations = { }, ["Spell crit. rating"] = { ["enUS"] = true, - ["deDE"] = true, - ["frFR"] = true, - ["zhCN"] = true, - ["ruRU"] = true, - ["esES"] = true, - ["esMX"] = true, - ["ptBR"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Penetration"] = { ["enUS"] = true, From b6b245d6d2635ecdf77dc22b081df0338d8788e1 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 18 Feb 2026 00:09:38 +0100 Subject: [PATCH 07/21] wip --- Modules/Data/Defense.lua | 24 ++++++++++++++++++++---- Modules/Data/Melee.lua | 5 ++++- Modules/Data/Ranged.lua | 5 ++++- Modules/Data/SpellCrit.lua | 5 ++++- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/Modules/Data/Defense.lua b/Modules/Data/Defense.lua index 1a632064..4508f0da 100755 --- a/Modules/Data/Defense.lua +++ b/Modules/Data/Defense.lua @@ -219,22 +219,38 @@ end ---@return number function Data:GetResilienceRating() - return DataUtils:Round(GetCombatRating(15), 2) + local rating = 0 + if CR_RESILIENCE_CRIT_TAKEN then + rating = GetCombatRating(CR_RESILIENCE_CRIT_TAKEN) + end + return DataUtils:Round(rating, 2) end ---@return number function Data:GetParryRating() - return DataUtils:Round(GetCombatRating(CR_PARRY), 2) + local rating = 0 + if CR_PARRY then + rating = GetCombatRating(CR_PARRY) + end + return DataUtils:Round(rating, 2) end ---@return number function Data:GetDodgeRating() - return DataUtils:Round(GetCombatRating(CR_DODGE), 2) + local rating = 0 + if CR_DODGE then + rating = GetCombatRating(CR_DODGE) + end + return DataUtils:Round(rating, 2) end ---@return number function Data:GetBlockRating() - return DataUtils:Round(GetCombatRating(CR_BLOCK), 2) + local rating = 0 + if CR_BLOCK then + rating = GetCombatRating(CR_BLOCK) + end + return DataUtils:Round(rating, 2) end ---@return number diff --git a/Modules/Data/Melee.lua b/Modules/Data/Melee.lua index 7249076c..c6ebc968 100755 --- a/Modules/Data/Melee.lua +++ b/Modules/Data/Melee.lua @@ -268,7 +268,10 @@ end ---@return number function Data:GetMeleeCritRating() - local critRating = GetCombatRating(CR_CRIT_MELEE) + local critRating = 0 + if CR_CRIT_MELEE then + critRating = GetCombatRating(CR_CRIT_MELEE) + end return DataUtils:Round(critRating, 0) end diff --git a/Modules/Data/Ranged.lua b/Modules/Data/Ranged.lua index 2606c07a..cb684256 100755 --- a/Modules/Data/Ranged.lua +++ b/Modules/Data/Ranged.lua @@ -134,7 +134,10 @@ end ---@return number function Data:GetRangedCritRating() - local critRating = GetCombatRating(CR_CRIT_RANGED) + local critRating = 0 + if CR_CRIT_RANGED then + critRating = GetCombatRating(CR_CRIT_RANGED) + end return DataUtils:Round(critRating, 0) end diff --git a/Modules/Data/SpellCrit.lua b/Modules/Data/SpellCrit.lua index 076c9898..3ba05638 100755 --- a/Modules/Data/SpellCrit.lua +++ b/Modules/Data/SpellCrit.lua @@ -164,6 +164,9 @@ end ---@return number function Data:GetSpellCritRating() - local critRating = GetCombatRating(CR_CRIT_SPELL) + local critRating = 0 + if CR_CRIT_SPELL then + critRating = GetCombatRating(CR_CRIT_SPELL) + end return DataUtils:Round(critRating, 0) end \ No newline at end of file From 8748aa7de42bfcdccf4fcda9be54e6922ed67420 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 18 Feb 2026 03:06:29 +0100 Subject: [PATCH 08/21] wip --- .luacheckrc | 2 ++ Modules/Config/DefenseSection.lua | 16 +++++++++++++++- Modules/Config/RangeSection.lua | 1 + Modules/Data/Data.lua | 1 + Modules/Data/Defense.lua | 14 +++++++++++--- Modules/Stats.lua | 3 ++- 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/.luacheckrc b/.luacheckrc index 2e903fee..c32c27af 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -819,6 +819,8 @@ stds.ecs = { "CR_HIT_RANGED", "CR_HIT_SPELL", "CR_PARRY", + "CR_RESILIENCE_CRIT_TAKEN", + "CR_RESILIENCE_PLAYER_DAMAGE_TAKEN", "CR_WEAPON_SKILL", "CreateFont", "CreateFrame", diff --git a/Modules/Config/DefenseSection.lua b/Modules/Config/DefenseSection.lua index c2a51771..9155477c 100755 --- a/Modules/Config/DefenseSection.lua +++ b/Modules/Config/DefenseSection.lua @@ -231,7 +231,7 @@ function _Config:LoadDefenseSection() Stats.RebuildStatInfos() end, }, - resilience = { + resilienceRating = { type = "toggle", order = 8, name = function() return i18n("Resilience Rating") end, @@ -245,6 +245,20 @@ function _Config:LoadDefenseSection() Stats.RebuildStatInfos() end, }, + resilience = { + type = "toggle", + order = 8.1, + 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, + disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, + get = function () return ExtendedCharacterStats.profile.defense.resilienceValue.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.defense.resilienceValue.display = value + Stats.RebuildStatInfos() + end, + }, }, } end diff --git a/Modules/Config/RangeSection.lua b/Modules/Config/RangeSection.lua index b31062ce..2a7a9e7b 100755 --- a/Modules/Config/RangeSection.lua +++ b/Modules/Config/RangeSection.lua @@ -74,6 +74,7 @@ function _Config:LoadRangeSection() name = function() return i18n("Armor Pen.") end, desc = function() return i18n("Shows/Hides the armor penetration value.") end, width = 1.5, + hidden = function() return (not ECS.IsWotlk) end, disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, get = function () return ExtendedCharacterStats.profile.ranged.penetration.display; end, set = function (_, value) diff --git a/Modules/Data/Data.lua b/Modules/Data/Data.lua index af0e75f4..47dac2ae 100755 --- a/Modules/Data/Data.lua +++ b/Modules/Data/Data.lua @@ -72,6 +72,7 @@ dataFunctionRefs = { ["BlockChance"] = function() return Data:GetBlockChance() end, ["BlockValue"] = function() return Data:GetBlockValue() end, ["ResilienceRating"] = function() return ECS.IsClassic and 0 or Data:GetResilienceRating() end, + ["ResilienceValue"] = function() return ECS.IsClassic and 0 or Data:GetResilienceValue() end, -- Spell ["SpellHitRating"] = function() return ECS.IsClassic and 0 or Data:SpellHitRating() end, ["SpellHitBonus"] = function() return Data.SpellHitBonus(Data.HOLY_SCHOOL) end, diff --git a/Modules/Data/Defense.lua b/Modules/Data/Defense.lua index 4508f0da..4678e0bd 100755 --- a/Modules/Data/Defense.lua +++ b/Modules/Data/Defense.lua @@ -27,6 +27,7 @@ function _Defense:GetCritReduction() local meleeCritReduction = 0 local rangedCritReduction = 0 local spellCritReduction = 0 + local critReducingFromResilience = 0 local i = 1 repeat local aura = C_UnitAuras.GetAuraDataByIndex("player", i, "HELPFUL") @@ -60,7 +61,9 @@ function _Defense:GetCritReduction() if critReductionFromDefense < 0 then critReductionFromDefense = 0 end - local critReducingFromResilience = GetCombatRatingBonus(15) + if CR_RESILIENCE_CRIT_TAKEN then + critReducingFromResilience = GetCombatRatingBonus(CR_RESILIENCE_CRIT_TAKEN) + end if classId == Data.DRUID then local coeff = ECS.IsWotlk and 2 or 1 @@ -220,12 +223,17 @@ end ---@return number function Data:GetResilienceRating() local rating = 0 - if CR_RESILIENCE_CRIT_TAKEN then - rating = GetCombatRating(CR_RESILIENCE_CRIT_TAKEN) + if CR_RESILIENCE_PLAYER_DAMAGE_TAKEN then + rating = GetCombatRating(CR_RESILIENCE_PLAYER_DAMAGE_TAKEN) end return DataUtils:Round(rating, 2) end +---@return number +function Data:GetResilienceValue() + return DataUtils:Round(GetModResilienceDamageReduction(), 2) +end + ---@return number function Data:GetParryRating() local rating = 0 diff --git a/Modules/Stats.lua b/Modules/Stats.lua index b61dd86f..00ce6ffa 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -286,7 +286,8 @@ _CreateStatInfos = function() DataUtils:CanParry() and category.parry or nil, (not ECS.IsClassic) and category.dodgeRating or nil, category.dodge or nil, - (not ECS.IsClassic) and category.resilienceRating or nil + (not ECS.IsClassic) and category.resilienceRating or nil, + ECS.IsClassic and nil or category.resilienceValue ) if UnitHasMana("player") then From 713c77283425d2690824de4507e1da5cd91021d4 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 18 Feb 2026 03:11:18 +0100 Subject: [PATCH 09/21] wip --- .luacheckrc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.luacheckrc b/.luacheckrc index c32c27af..95792921 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -347,10 +347,10 @@ stds.ecs = { "C_Debug.GetMapDebugObjects", "C_Debug.TeleportToMapDebugObject", "C_Debug.TeleportToMapLocation", - "C_Engraving", "C_Engraving.GetRuneForEquipmentSlot", - "C_EventUtils", + "C_Engraving", "C_EventUtils.IsEventValid", + "C_EventUtils", "C_FriendList.AddFriend", "C_FriendList.AddIgnore", "C_FriendList.AddOrDelIgnore", @@ -570,11 +570,11 @@ stds.ecs = { "C_UIWidgetManager.GetTextureWithStateVisualizationInfo", "C_UIWidgetManager.GetTextWithStateWidgetVisualizationInfo", "C_UIWidgetManager.GetTopCenterWidgetSetID", - "C_UnitAuras", "C_UnitAuras.GetAuraDataByIndex", "C_UnitAuras.GetBuffDataByIndex", "C_UnitAuras.GetDebuffDataByIndex", "C_UnitAuras.GetPlayerAuraBySpellID", + "C_UnitAuras", "C_VideoOptions.GetGxAdapterInfo", "C_VoiceChat.ActivateChannel", "C_VoiceChat.BeginLocalCapture", @@ -1198,6 +1198,7 @@ stds.ecs = { "GetMirrorTimerProgress", "GetModifiedClick", "GetModifiedClickAction", + "GetModResilienceDamageReduction", "GetMoney", "GetMonitorAspectRatio", "GetMonitorCount", From cb4bffec4c66fe9965332ceb6b9e1f93a9654fc7 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 18 Feb 2026 04:12:36 +0100 Subject: [PATCH 10/21] wip --- Modules/Config/DefenseSection.lua | 6 +- Modules/Config/MeleeSection.lua | 2 +- Modules/Config/RangeSection.lua | 4 +- Modules/Config/SpellSection.lua | 2 +- Modules/Profile.lua | 120 +++++++++--------- .../DefenseConfigTranslations.lua | 6 +- .../MeleeConfigTranslations.lua | 2 +- .../RangedConfigTranslations.lua | 2 +- .../SpellConfigTranslations.lua | 2 +- .../i18n/translations/StatTranslations.lua | 108 +++++++--------- 10 files changed, 122 insertions(+), 132 deletions(-) diff --git a/Modules/Config/DefenseSection.lua b/Modules/Config/DefenseSection.lua index 9155477c..860dc9d4 100755 --- a/Modules/Config/DefenseSection.lua +++ b/Modules/Config/DefenseSection.lua @@ -45,7 +45,7 @@ function _Config:LoadDefenseSection() meleeCritReduction = { type = "toggle", order = 2, - name = function() return i18n("Melee Crit Reduction") end, + name = function() return i18n("Melee Crit. Reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by melee attacks.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, @@ -58,7 +58,7 @@ function _Config:LoadDefenseSection() rangedCritReduction = { type = "toggle", order = 2.1, - name = function() return i18n("Ranged Crit Reduction") end, + name = function() return i18n("Ranged Crit. Reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by ranged attacks.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, @@ -71,7 +71,7 @@ function _Config:LoadDefenseSection() spellCritReduction = { type = "toggle", order = 2.2, - name = function() return i18n("Spell Crit Reduction") end, + name = function() return i18n("Spell Crit. Reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by spells.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, diff --git a/Modules/Config/MeleeSection.lua b/Modules/Config/MeleeSection.lua index f5892711..33025e9a 100755 --- a/Modules/Config/MeleeSection.lua +++ b/Modules/Config/MeleeSection.lua @@ -58,7 +58,7 @@ function _Config:LoadMeleeSection() type = "toggle", order = 2.1, name = function() return i18n("Melee Crit") end, - desc = function() return i18n("Shows/Hides the melee crit chance.") end, + desc = function() return i18n("Shows/Hides the melee crit. chance.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, get = function () return ExtendedCharacterStats.profile.melee.crit.display; end, diff --git a/Modules/Config/RangeSection.lua b/Modules/Config/RangeSection.lua index 2a7a9e7b..bbd2a27b 100755 --- a/Modules/Config/RangeSection.lua +++ b/Modules/Config/RangeSection.lua @@ -55,11 +55,11 @@ function _Config:LoadRangeSection() Stats.RebuildStatInfos() end, }, - rangeCrit = { + rangeCrit. = { type = "toggle", order = 2.1, name = function() return i18n("Ranged Crit") end, - desc = function() return i18n("Shows/Hides the ranged crit chance.") end, + desc = function() return i18n("Shows/Hides the ranged crit. chance.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, get = function () return ExtendedCharacterStats.profile.ranged.crit.display; end, diff --git a/Modules/Config/SpellSection.lua b/Modules/Config/SpellSection.lua index f55a3872..65e06485 100755 --- a/Modules/Config/SpellSection.lua +++ b/Modules/Config/SpellSection.lua @@ -45,7 +45,7 @@ function _Config:LoadSpellSection() type = "toggle", order = 1.1, name = function() return i18n("Spell Crit") end, - desc = function() return i18n("Shows/Hides the spell crit chance.") end, + desc = function() return i18n("Shows/Hides the spell crit. chance.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, get = function () return ExtendedCharacterStats.profile.spell.crit.display; end, diff --git a/Modules/Profile.lua b/Modules/Profile.lua index ddeca2aa..5ea5e05b 100755 --- a/Modules/Profile.lua +++ b/Modules/Profile.lua @@ -19,7 +19,7 @@ local function GetDefaultStatsProfile() refName = "GeneralHeader", text = "General", - movementSpeed = {display = true, refName = "MovementSpeed", text = "Movement Speed"}, + movementSpeed = {display = true, refName = "MovementSpeed", text = "Movement speed"}, }, melee = { @@ -99,28 +99,28 @@ local function GetDefaultStatsProfile() attackPower = { display = true, refName = "MeleeAttackPower", - text = "Attack Power", + text = "Attack power", textColor = colors.ATTACK_POWER_SECONDARY, statColor = colors.ATTACK_POWER_PRIMARY }, crit = { display = true, refName = "MeleeCritChance", - text = "Crit Chance", + text = "Crit. chance", textColor = colors.CRIT_SECONDARY, statColor = colors.CRIT_PRIMARY }, penetration = { display = true, refName = "MeleeArmorPenetration", - text = "Armor Pen.", + text = "Armor pen.", textColor = colors.ATTACK_SPEED_SECONDARY, statColor = colors.ATTACK_SPEED_PRIMARY, }, penetrationRating = { display = true, refName = "MeleeArmorPenetrationRating", - text = "Armor Pen. Rating", + text = "Armor pen. rating", textColor = colors.ATTACK_SPEED_SECONDARY, statColor = colors.ATTACK_SPEED_PRIMARY, }, @@ -132,7 +132,7 @@ local function GetDefaultStatsProfile() expertiseRating = { display = true, refName = "ExpertiseRating", - text = "Expertise Rating" + text = "Expertise rating" }, hasteRating = { display = true, @@ -144,7 +144,7 @@ local function GetDefaultStatsProfile() hasteBonus = { display = true, refName = "MeleeHasteBonus", - text = "Haste Bonus", + text = "Haste bonus", textColor = colors.HASTE_RATING_SECONDARY, statColor = colors.HASTE_RATING_PRIMARY }, @@ -152,7 +152,7 @@ local function GetDefaultStatsProfile() display = true, isSubGroup = true, refName = "MeleeAttackSpeedHeader", - text = "Attack Speed", + text = "Attack speed", mainHand = { display = true, @@ -215,21 +215,21 @@ local function GetDefaultStatsProfile() attackPower = { display = true, refName = "RangeAttackpower", - text = "Attack Power", + text = "Attack power", textColor = colors.ATTACK_POWER_SECONDARY, statColor = colors.ATTACK_POWER_PRIMARY }, crit = { display = true, refName = "RangedCritChance", - text = "Crit Chance", + text = "Crit. chance", textColor = colors.CRIT_SECONDARY, statColor = colors.CRIT_PRIMARY }, penetration = { display = true, refName = "RangedArmorPenetration", - text = "Armor Pen.", + text = "Armor pen.", textColor = colors.ATTACK_SPEED_SECONDARY, statColor = colors.ATTACK_SPEED_PRIMARY, }, @@ -250,14 +250,14 @@ local function GetDefaultStatsProfile() hasteBonus = { display = true, refName = "RangedHasteBonus", - text = "Haste Bonus", + text = "Haste bonus", textColor = colors.HASTE_RATING_SECONDARY, statColor = colors.HASTE_RATING_PRIMARY }, attackSpeed = { display = true, refName = "RangedAttackSpeed", - text = "Attack Speed", + text = "Attack speed", textColor = colors.ATTACK_SPEED_SECONDARY, statColor = colors.ATTACK_SPEED_PRIMARY }, @@ -269,21 +269,21 @@ local function GetDefaultStatsProfile() text = "Defense", armor = {display = true, refName = "Armor", text = "Armor"}, - meleeCritReduction = {display = true, refName = "MeleeCritReduction", text = "Melee Crit Reduction"}, - rangedCritReduction = {display = true, refName = "RangedCritReduction", text = "Ranged Crit Reduction"}, - spellCritReduction = {display = true, refName = "SpellCritReduction", text = "Spell Crit Reduction"}, + meleeCritReduction = {display = true, refName = "MeleeCritReduction", text = "Melee crit. reduction"}, + rangedCritReduction = {display = true, refName = "RangedCritReduction", text = "Ranged crit. reduction"}, + spellCritReduction = {display = true, refName = "SpellCritReduction", text = "Spell crit. reduction"}, avoidance = {display = true, refName = "Avoidance", text = "Avoidance"}, avoidanceBoss = {display = true, refName = "AvoidanceBoss", text = "Avoidance (Lvl +3)"}, defenseRating = { display = true, refName = "DefenseRating", - text = "Defense Rating" + text = "Defense rating" }, defense = {display = true, refName = "DefenseValue", text = "Defense"}, - blockChance = {display = true, refName = "BlockChance", text = "Block Chance"}, - blockValue = {display = true, refName = "BlockValue", text = "Block Value"}, - parry = {display = true, refName = "ParryChance", text = "Parry Chance"}, - dodge = {display = true, refName = "DodgeChance", text = "Dodge Chance"}, + blockChance = {display = true, refName = "BlockChance", text = "Block chance"}, + blockValue = {display = true, refName = "BlockValue", text = "Block value"}, + parry = {display = true, refName = "ParryChance", text = "Parry chance"}, + dodge = {display = true, refName = "DodgeChance", text = "Dodge chance"}, resilience = { display = true, refName = "ResilienceValue", @@ -370,14 +370,14 @@ local function GetDefaultStatsProfile() rating = { display = true, refName = "SpellHitRating", - text = "Hit Rating", + text = "Hit rating", textColor = colors.HIT_SECONDARY, statColor = colors.HIT_PRIMARY }, bonus = { display = true, refName = "SpellHitBonus", - text = "Hit Bonus", + text = "Hit bonus", textColor = colors.HIT_SECONDARY, statColor = colors.HIT_PRIMARY }, @@ -398,147 +398,147 @@ local function GetDefaultStatsProfile() arcaneHitBonus = { display = true, refName = "ArcaneHitBonus", - text = "Arcane Hit Bonus", + text = "Arcane hit bonus", textColor = colors.ARCANE_SECONDARY, statColor = colors.ARCANE_PRIMARY }, arcaneMissChance = { display = true, refName = "ArcaneMissChance", - text = "Arcane Miss", + text = "Arcane miss", textColor = colors.ARCANE_SECONDARY, statColor = colors.ARCANE_PRIMARY }, arcaneMissChanceBoss = { display = true, refName = "ArcaneMissChanceBoss", - text = "Arcane Miss (Lvl + 3)", + text = "Arcane miss (Lvl + 3)", textColor = colors.ARCANE_SECONDARY, statColor = colors.ARCANE_PRIMARY }, fireHitBonus = { display = true, refName = "FireHitBonus", - text = "Fire Hit Bonus", + text = "Fire hit bonus", textColor = colors.FIRE_SECONDARY, statColor = colors.FIRE_PRIMARY }, fireMissChance = { display = true, refName = "FireMissChance", - text = "Fire Miss", + text = "Fire miss", textColor = colors.FIRE_SECONDARY, statColor = colors.FIRE_PRIMARY }, fireMissChanceBoss = { display = true, refName = "FireMissChanceBoss", - text = "Fire Miss (Lvl + 3)", + text = "Fire miss (Lvl + 3)", textColor = colors.FIRE_SECONDARY, statColor = colors.FIRE_PRIMARY }, frostHitBonus = { display = true, refName = "FrostHitBonus", - text = "Frost Hit Bonus", + text = "Frost hit bonus", textColor = colors.FROST_SECONDARY, statColor = colors.FROST_PRIMARY }, frostMissChance = { display = true, refName = "FrostMissChance", - text = "Frost Miss", + text = "Frost miss", textColor = colors.FROST_SECONDARY, statColor = colors.FROST_PRIMARY }, frostMissChanceBoss = { display = true, refName = "FrostMissChanceBoss", - text = "Frost Miss (Lvl + 3)", + text = "Frost miss (Lvl + 3)", textColor = colors.FROST_SECONDARY, statColor = colors.FROST_PRIMARY }, holyHitBonus = { display = true, refName = "HolyHitBonus", - text = "Holy Hit Bonus", + text = "Holy hit bonus", textColor = colors.HOLY_SECONDARY, statColor = colors.HOLY_PRIMARY }, holyMissChance = { display = true, refName = "HolyMissChance", - text = "Holy Miss", + text = "Holy miss", textColor = colors.HOLY_SECONDARY, statColor = colors.HOLY_PRIMARY }, holyMissChanceBoss = { display = true, refName = "HolyMissChanceBoss", - text = "Holy Miss (Lvl + 3)", + text = "Holy miss (Lvl + 3)", textColor = colors.HOLY_SECONDARY, statColor = colors.HOLY_PRIMARY }, natureHitBonus = { display = true, refName = "NatureHitBonus", - text = "Nature Hit Bonus", + text = "Nature hit bonus", textColor = colors.NATURE_SECONDARY, statColor = colors.NATURE_PRIMARY }, natureMissChance = { display = true, refName = "NatureMissChance", - text = "Nature Miss", + text = "Nature miss", textColor = colors.NATURE_SECONDARY, statColor = colors.NATURE_PRIMARY }, natureMissChanceBoss = { display = true, refName = "NatureMissChanceBoss", - text = "Nature Miss (Lvl + 3)", + text = "Nature miss (Lvl + 3)", textColor = colors.NATURE_SECONDARY, statColor = colors.NATURE_PRIMARY }, physicalHitBonus = { display = true, refName = "PhysicalHitBonus", - text = "Physical Hit Bonus", + text = "Physical hit bonus", textColor = colors.PHYSICAL_SECONDARY, statColor = colors.PHYSICAL_PRIMARY }, physicalMissChance = { display = true, refName = "PhysicalMissChance", - text = "Physical Miss", + text = "Physical miss", textColor = colors.PHYSICAL_SECONDARY, statColor = colors.PHYSICAL_PRIMARY }, physicalMissChanceBoss = { display = true, refName = "PhysicalMissChanceBoss", - text = "Physical Miss (Lvl + 3)", + text = "Physical miss (Lvl + 3)", textColor = colors.PHYSICAL_SECONDARY, statColor = colors.PHYSICAL_PRIMARY }, shadowHitBonus = { display = true, refName = "ShadowHitBonus", - text = "Shadow Hit Bonus", + text = "Shadow hit bonus", textColor = colors.SHADOW_SECONDARY, statColor = colors.SHADOW_PRIMARY }, shadowMissChance = { display = true, refName = "ShadowMissChance", - text = "Shadow Miss", + text = "Shadow miss", textColor = colors.SHADOW_SECONDARY, statColor = colors.SHADOW_PRIMARY }, shadowMissChanceBoss = { display = true, refName = "ShadowMissChanceBoss", - text = "Shadow Miss (Lvl + 3)", + text = "Shadow miss (Lvl + 3)", textColor = colors.SHADOW_SECONDARY, statColor = colors.SHADOW_PRIMARY }, @@ -553,7 +553,7 @@ local function GetDefaultStatsProfile() hasteBonus = { display = true, refName = "SpellHasteBonus", - text = "Haste Bonus", + text = "Haste bonus", textColor = colors.HASTE_RATING_SECONDARY, statColor = colors.HASTE_RATING_PRIMARY }, @@ -564,49 +564,49 @@ local function GetDefaultStatsProfile() arcane = { display = true, refName = "ArcaneCritChance", - text = "Arcane Crit", + text = "Arcane crit.", textColor = colors.ARCANE_SECONDARY, statColor = colors.ARCANE_PRIMARY }, fire = { display = true, refName = "FireCritChance", - text = "Fire Crit", + text = "Fire crit.", textColor = colors.FIRE_SECONDARY, statColor = colors.FIRE_PRIMARY }, frost = { display = true, refName = "FrostCritChance", - text = "Frost Crit", + text = "Frost crit.", textColor = colors.FROST_SECONDARY, statColor = colors.FROST_PRIMARY }, holy = { display = true, refName = "HolyCritChance", - text = "Holy Crit", + text = "Holy crit.", textColor = colors.HOLY_SECONDARY, statColor = colors.HOLY_PRIMARY }, nature = { display = true, refName = "NatureCritChance", - text = "Nature Crit", + text = "Nature crit.", textColor = colors.NATURE_SECONDARY, statColor = colors.NATURE_PRIMARY }, physical = { display = true, refName = "PhysicalCritChance", - text = "Physical Crit", + text = "Physical crit.", textColor = colors.PHYSICAL_SECONDARY, statColor = colors.PHYSICAL_PRIMARY }, shadow = { display = true, refName = "ShadowCritChance", - text = "Shadow Crit", + text = "Shadow crit.", textColor = colors.SHADOW_SECONDARY, statColor = colors.SHADOW_PRIMARY }, @@ -620,56 +620,56 @@ local function GetDefaultStatsProfile() bonusHealing = { display = true, refName = "BonusHealing", - text = "Healing Power", + text = "Healing power", textColor = colors.HEALING_SECONDARY, statColor = colors.HEALING_PRIMARY }, arcaneDmg = { display = true, refName = "ArcaneDmg", - text = "Arcane Damage", + text = "Arcane damage", textColor = colors.ARCANE_SECONDARY, statColor = colors.ARCANE_PRIMARY }, fireDmg = { display = true, refName = "FireDmg", - text = "Fire Damage", + text = "Fire damage", textColor = colors.FIRE_SECONDARY, statColor = colors.FIRE_PRIMARY }, frostDmg = { display = true, refName = "FrostDmg", - text = "Frost Damage", + text = "Frost damage", textColor = colors.FROST_SECONDARY, statColor = colors.FROST_PRIMARY }, holyDmg = { display = true, refName = "HolyDmg", - text = "Holy Damage", + text = "Holy damage", textColor = colors.HOLY_SECONDARY, statColor = colors.HOLY_PRIMARY }, natureDmg = { display = true, refName = "NatureDmg", - text = "Nature Damage", + text = "Nature damage", textColor = colors.NATURE_SECONDARY, statColor = colors.NATURE_PRIMARY }, physicalDmg = { display = true, refName = "PhysicalDmg", - text = "Physical Damage", + text = "Physical damage", textColor = colors.PHYSICAL_SECONDARY, statColor = colors.PHYSICAL_PRIMARY }, shadowDmg = { display = true, refName = "ShadowDmg", - text = "Shadow Damage", + text = "Shadow damage", textColor = colors.SHADOW_SECONDARY, statColor = colors.SHADOW_PRIMARY }, diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index 9be3c1e3..c746dc8d 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -42,7 +42,7 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Melee Crit Reduction"] = { + ["Melee Crit. Reduction"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -52,7 +52,7 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false }, - ["Ranged Crit Reduction"] = { + ["Ranged Crit. Reduction"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -62,7 +62,7 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false }, - ["Spell Crit Reduction"] = { + ["Spell Crit. Reduction"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, diff --git a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua index 5a328c58..90a7429c 100644 --- a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua @@ -52,7 +52,7 @@ local meleeConfigTranslations = { ["esMX"] = "Probabilidad de golpe crítico", ["ptBR"] = "Chance de acerto crítico" }, - ["Shows/Hides the melee crit chance."] = { + ["Shows/Hides the melee crit. chance."] = { ["enUS"] = true, ["deDE"] = "Zeigt/Versteckt die Chance im Nahkampf kritisch zu treffen.", ["frFR"] = "Affiche/cache les chances d'infliger un coup critique en mêlée.", diff --git a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua index db729293..191ba04f 100644 --- a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua @@ -51,7 +51,7 @@ local rangedConfigTranslations = { ["esMX"] = "Crítico a distancia", ["ptBR"] = "Crítico de longo alcance" }, - ["Shows/Hides the ranged crit chance."] = { + ["Shows/Hides the ranged crit. chance."] = { ["enUS"] = true, ["deDE"] = "Zeigt/Versteckt die Chance im Fernkampf kritisch zu treffen.", ["frFR"] = "Affiche/cache les chances de coup critique à distance.", diff --git a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua index b9f52891..38e8ccf4 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua @@ -32,7 +32,7 @@ local spellConfigTranslations = { ["esMX"] = "Crítico con hechizos", ["ptBR"] = "Crítico com feitiços", }, - ["Shows/Hides the spell crit chance."] = { + ["Shows/Hides the spell crit. chance."] = { ["enUS"] = true, ["deDE"] = "Zeigt/Versteckt die Chance mit einem Zauber kritisch zu treffen.", ["frFR"] = "Affiche/cache les chances d'infliger un coup critique avec les sorts.", diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index cf824ad0..71d1a03a 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -12,7 +12,7 @@ local statTranslations = { ["esMX"] = true, ["ptBR"] = "Geral" }, - ["Movement Speed"] = { + ["Movement speed"] = { ["enUS"] = true, ["deDE"] = "Geschwindigkeit", ["frFR"] = "Vitesse de déplacement", @@ -32,7 +32,7 @@ local statTranslations = { ["esMX"] = "Cuerpo a cuerpo", ["ptBR"] = "Corpo a corpo" }, - ["Attack Power"] = { + ["Attack power"] = { ["enUS"] = true, ["deDE"] = "Angriffskraft", ["frFR"] = "Puissance d'attaque", @@ -52,7 +52,7 @@ local statTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Crit Chance"] = { + ["Crit. chance"] = { ["enUS"] = true, ["deDE"] = "Kritische Chance", ["frFR"] = "Chances de critique", @@ -62,7 +62,7 @@ local statTranslations = { ["esMX"] = "Probabilidad de golpe crítico", ["ptBR"] = "Chance de acerto crítico" }, - ["Armor Pen."] = { + ["Armor pen."] = { ["enUS"] = true, ["deDE"] = "Rüstungsdurchschlagskraft", ["frFR"] = "Pénétration d'armure", @@ -152,7 +152,7 @@ local statTranslations = { ["esMX"] = "Fallo (Niv. + 3)", ["ptBR"] = "Erro (Nív. + 3)", }, - ["Glancing Blow"] = { + ["Glancing blow"] = { ["enUS"] = true, ["deDE"] = "Streifschlag", ["frFR"] = "Coup d'éraflure", @@ -212,7 +212,7 @@ local statTranslations = { ["esMX"] = "Índice de celeridad", ["ptBR"] = "Taxa de aceleração" }, - ["Haste Bonus"] = { + ["Haste bonus"] = { ["enUS"] = true, ["deDE"] = "Tempobonus", ["frFR"] = "Bonus de hâte", @@ -222,7 +222,7 @@ local statTranslations = { ["esMX"] = "Bonus de celeridad", ["ptBR"] = "Bônus de aceleração" }, - ["Attack Speed"] = { + ["Attack speed"] = { ["enUS"] = true, ["deDE"] = "Angriffstempo", ["frFR"] = "Vitesse d'attaque", @@ -232,7 +232,7 @@ local statTranslations = { ["esMX"] = "Velocidad de ataque", ["ptBR"] = "Velocidade de ataque" }, - ["Main Hand"] = { + ["Main hand"] = { ["enUS"] = true, ["deDE"] = "Waffenhand", ["frFR"] = "Main droite", @@ -242,7 +242,7 @@ local statTranslations = { ["esMX"] = "Mano derecha", ["ptBR"] = "Mão principal" }, - ["Off Hand"] = { + ["Off hand"] = { ["enUS"] = true, ["deDE"] = "Schildhand", ["frFR"] = "Main gauche", @@ -282,24 +282,14 @@ local statTranslations = { ["esMX"] = "Armadura", ["ptBR"] = "Armadura" }, - ["Crit Immune"] = { - ["enUS"] = true, - ["deDE"] = "Krit. Immun", - ["frFR"] = "Immunisé des critiques", - ["zhCN"] = false, - ["ruRU"] = "Крит иммун", - ["esES"] = "Inmune Crít", - ["esMX"] = "Inmune Crít", - ["ptBR"] = "Imune a críticos" - }, - ["Crit Reduction"] = { + ["Crit. reduction"] = { ["enUS"] = true, ["deDE"] = "Krit. Reduzierung", ["frFR"] = "Réduction des critiques", ["zhCN"] = false, ["ruRU"] = "Снижение крита", - ["esES"] = "Reducción de Crít", - ["esMX"] = "Reducción de Crít", + ["esES"] = "Reducción de crít", + ["esMX"] = "Reducción de crít", ["ptBR"] = "Redução de crítico" }, ["Avoidance"] = { @@ -352,7 +342,7 @@ local statTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Dodge rating."] = { + ["Dodge rating"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -372,7 +362,7 @@ local statTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Block Chance"] = { + ["Block chance"] = { ["enUS"] = true, ["deDE"] = "Blockchance", ["frFR"] = "Chances de bloquer", @@ -382,7 +372,7 @@ local statTranslations = { ["esMX"] = "Probabilidad de bloquear", ["ptBR"] = "Chance de bloquear" }, - ["Block Value"] = { + ["Block value"] = { ["enUS"] = true, ["deDE"] = "Blockwertung", ["frFR"] = "Bloquer", @@ -392,7 +382,7 @@ local statTranslations = { ["esMX"] = "Bloqueo", ["ptBR"] = "Bloqueio" }, - ["Parry Chance"] = { + ["Parry chance"] = { ["enUS"] = true, ["deDE"] = "Parrierchance", ["frFR"] = "Chances de parer", @@ -402,7 +392,7 @@ local statTranslations = { ["esMX"] = "Probabilidad de parar", ["ptBR"] = "Chance de aparar" }, - ["Dodge Chance"] = { + ["Dodge chance"] = { ["enUS"] = true, ["deDE"] = "Ausweichchance", ["frFR"] = "Chances d'esquiver", @@ -522,7 +512,7 @@ local statTranslations = { ["esMX"] = "Penetración", ["ptBR"] = "Penetração" }, - ["Healing Power"] = { + ["Healing power"] = { ["enUS"] = true, ["deDE"] = "Heilungskraft", ["frFR"] = "Pouvoir de guérison", @@ -532,7 +522,7 @@ local statTranslations = { ["esMX"] = "Sanación", ["ptBR"] = "Poder de cura" }, - ["Arcane Damage"] = { + ["Arcane damage"] = { ["enUS"] = true, ["deDE"] = "Arkanschaden", ["frFR"] = "Dégats des arcanes", @@ -542,7 +532,7 @@ local statTranslations = { ["esMX"] = "Daño arcano", ["ptBR"] = "Dano arcano" }, - ["Arcane Crit"] = { + ["Arcane crit."] = { ["enUS"] = true, ["deDE"] = "Arkan Kritisch", ["frFR"] = "Critique des arcanes", @@ -552,7 +542,7 @@ local statTranslations = { ["esMX"] = "Crítico arcano", ["ptBR"] = "Crítico arcano" }, - ["Arcane Hit Bonus"] = { + ["Arcane hit bonus"] = { ["enUS"] = true, ["deDE"] = "Arkan Trefferchancebonus", ["frFR"] = "Bonus de toucher des arcanes", @@ -562,7 +552,7 @@ local statTranslations = { ["esMX"] = "Bonificación de golpe arcano", ["ptBR"] = "Bônus de acerto arcano" }, - ["Arcane Miss"] = { + ["Arcane miss"] = { ["enUS"] = true, ["deDE"] = "Arkan Verfehlen", ["frFR"] = "Rater des arcanes", @@ -572,7 +562,7 @@ local statTranslations = { ["esMX"] = "Fallo arcano", ["ptBR"] = "Erro arcano" }, - ["Arcane Miss (Lvl + 3)"] = { + ["Arcane miss (Lvl + 3)"] = { ["enUS"] = true, ["deDE"] = "Arkan Verfehlen (Lvl + 3)", ["frFR"] = "Rater des arcanes (Niv. + 3)", @@ -582,7 +572,7 @@ local statTranslations = { ["esMX"] = "Fallo arcano (Niv. + 3)", ["ptBR"] = "Erro arcano (Nív. + 3)" }, - ["Fire Damage"] = { + ["Fire damage"] = { ["enUS"] = true, ["deDE"] = "Feuerschaden", ["frFR"] = "Dégats du feu", @@ -592,7 +582,7 @@ local statTranslations = { ["esMX"] = "Daño de fuego", ["ptBR"] = "Dano de fogo" }, - ["Fire Crit"] = { + ["Fire crit."] = { ["enUS"] = true, ["deDE"] = "Feuer Kritisch", ["frFR"] = "Critique du feu", @@ -602,7 +592,7 @@ local statTranslations = { ["esMX"] = "Crítico de fuego", ["ptBR"] = "Crítico de fogo" }, - ["Fire Hit Bonus"] = { + ["Fire hit bonus"] = { ["enUS"] = true, ["deDE"] = "Feuer Trefferchancebonus", ["frFR"] = "Bonus de toucher du feu", @@ -612,7 +602,7 @@ local statTranslations = { ["esMX"] = "Bonificación de golpe de fuego", ["ptBR"] = "Bônus de acerto de fogo" }, - ["Fire Miss"] = { + ["Fire miss"] = { ["enUS"] = true, ["deDE"] = "Feuer Verfehlen", ["frFR"] = "Rater du feu", @@ -622,7 +612,7 @@ local statTranslations = { ["esMX"] = "Fallo de fuego", ["ptBR"] = "Erro de fogo" }, - ["Fire Miss (Lvl + 3)"] = { + ["Fire miss (Lvl + 3)"] = { ["enUS"] = true, ["deDE"] = "Feuer Verfehlen (Lvl + 3)", ["frFR"] = "Rater du feu (Niv. + 3)", @@ -632,7 +622,7 @@ local statTranslations = { ["esMX"] = "Fallo de fuego (Niv. + 3)", ["ptBR"] = "Erro de fogo (Nív. + 3)" }, - ["Frost Damage"] = { + ["Frost damage"] = { ["enUS"] = true, ["deDE"] = "Frostschaden", ["frFR"] = "Dégats du givre", @@ -642,7 +632,7 @@ local statTranslations = { ["esMX"] = "Daño de escarcha", ["ptBR"] = "Dano de gelo" }, - ["Frost Crit"] = { + ["Frost crit."] = { ["enUS"] = true, ["deDE"] = "Frost Kritisch", ["frFR"] = "Critique du givre", @@ -652,7 +642,7 @@ local statTranslations = { ["esMX"] = "Crítico de escarcha", ["ptBR"] = "Crítico de gelo" }, - ["Frost Hit Bonus"] = { + ["Frost hit bonus"] = { ["enUS"] = true, ["deDE"] = "Frost Trefferchancebonus", ["frFR"] = "Bonus de toucher du givre", @@ -662,7 +652,7 @@ local statTranslations = { ["esMX"] = "Bonificación de golpe de escarcha", ["ptBR"] = "Bônus de acerto de gelo" }, - ["Frost Miss"] = { + ["Frost miss"] = { ["enUS"] = true, ["deDE"] = "Frost Verfehlen", ["frFR"] = "Rater du givre", @@ -672,7 +662,7 @@ local statTranslations = { ["esMX"] = "Fallo de escarcha", ["ptBR"] = "Erro de gelo" }, - ["Frost Miss (Lvl + 3)"] = { + ["Frost miss (Lvl + 3)"] = { ["enUS"] = true, ["deDE"] = "Frost Verfehlen (Lvl + 3)", ["frFR"] = "Rater du givre (Niv. + 3)", @@ -692,7 +682,7 @@ local statTranslations = { ["esMX"] = "Daño sagrado", ["ptBR"] = "Dano sagrado" }, - ["Holy Crit"] = { + ["Holy crit."] = { ["enUS"] = true, ["deDE"] = "Heilig Kritisch", ["frFR"] = "Critique du sacré", @@ -702,7 +692,7 @@ local statTranslations = { ["esMX"] = "Crítico sagrado", ["ptBR"] = "Crítico sagrado" }, - ["Holy Hit Bonus"] = { + ["Holy hit bonus"] = { ["enUS"] = true, ["deDE"] = "Heilig Trefferchancebonus", ["frFR"] = "Bonus de toucher du sacré", @@ -712,7 +702,7 @@ local statTranslations = { ["esMX"] = "Bonificación de golpe sagrado", ["ptBR"] = "Bônus de acerto sagrado" }, - ["Holy Miss"] = { + ["Holy miss"] = { ["enUS"] = true, ["deDE"] = "Heilig Verfehlen", ["frFR"] = "Rater du sacré", @@ -722,7 +712,7 @@ local statTranslations = { ["esMX"] = "Fallo sagrado", ["ptBR"] = "Erro sagrado" }, - ["Holy Miss (Lvl + 3)"] = { + ["Holy miss (Lvl + 3)"] = { ["enUS"] = true, ["deDE"] = "Heilig Verfehlen (Lvl + 3)", ["frFR"] = "Rater du sacré (Niv. + 3)", @@ -742,7 +732,7 @@ local statTranslations = { ["esMX"] = "Daño de la naturaleza", ["ptBR"] = "Dano de natureza" }, - ["Nature Crit"] = { + ["Nature crit."] = { ["enUS"] = true, ["deDE"] = "Natur Kritisch", ["frFR"] = "Critique de la nature", @@ -752,7 +742,7 @@ local statTranslations = { ["esMX"] = "Crítico de la naturaleza", ["ptBR"] = "Crítico de natureza" }, - ["Nature Hit Bonus"] = { + ["Nature hit bonus"] = { ["enUS"] = true, ["deDE"] = "Natur Trefferchancebonus", ["frFR"] = "Bonus de toucher de la nature", @@ -762,7 +752,7 @@ local statTranslations = { ["esMX"] = "Bonificación de golpe de la naturaleza", ["ptBR"] = "Bônus de acerto de natureza" }, - ["Nature Miss"] = { + ["Nature miss"] = { ["enUS"] = true, ["deDE"] = "Natur Verfehlen", ["frFR"] = "Rater de la nature", @@ -772,7 +762,7 @@ local statTranslations = { ["esMX"] = "Fallo de la naturaleza", ["ptBR"] = "Erro de natureza" }, - ["Nature Miss (Lvl + 3)"] = { + ["Nature miss (Lvl + 3)"] = { ["enUS"] = true, ["deDE"] = "Natur Verfehlen (Lvl + 3)", ["frFR"] = "Rater de la nature (Niv. + 3)", @@ -792,7 +782,7 @@ local statTranslations = { ["esMX"] = "Daño físico", ["ptBR"] = "Dano físico" }, - ["Physical Crit"] = { + ["Physical crit."] = { ["enUS"] = true, ["deDE"] = "Physisch Kritisch", ["frFR"] = "Critique physique", @@ -802,7 +792,7 @@ local statTranslations = { ["esMX"] = "Crítico físico", ["ptBR"] = "Crítico físico" }, - ["Physical Hit Bonus"] = { + ["Physical hit bonus"] = { ["enUS"] = true, ["deDE"] = "Physischer Trefferchancebonus", ["frFR"] = "Bonus de toucher physique", @@ -812,7 +802,7 @@ local statTranslations = { ["esMX"] = "Bonificación de golpe físico", ["ptBR"] = "Bônus de acerto físico" }, - ["Physical Miss"] = { + ["Physical miss"] = { ["enUS"] = true, ["deDE"] = "Physisch Verfehlen", ["frFR"] = "Rater physique", @@ -822,7 +812,7 @@ local statTranslations = { ["esMX"] = "Fallo físico", ["ptBR"] = "Erro físico" }, - ["Physical Miss (Lvl + 3)"] = { + ["Physical miss (Lvl + 3)"] = { ["enUS"] = true, ["deDE"] = "Physisch Verfehlen (Lvl + 3)", ["frFR"] = "Rater physique (Niv. + 3)", @@ -842,7 +832,7 @@ local statTranslations = { ["esMX"] = "Daño de las sombras", ["ptBR"] = "Dano de sombra" }, - ["Shadow Crit"] = { + ["Shadow crit."] = { ["enUS"] = true, ["deDE"] = "Schatten Kritisch", ["frFR"] = "Critique des ombres", @@ -852,7 +842,7 @@ local statTranslations = { ["esMX"] = "Crítico de las sombras", ["ptBR"] = "Crítico de sombra" }, - ["Shadow Hit Bonus"] = { + ["Shadow hit bonus"] = { ["enUS"] = true, ["deDE"] = "Schatten Trefferchancebonus", ["frFR"] = "Bonus de toucher des ombres", @@ -862,7 +852,7 @@ local statTranslations = { ["esMX"] = "Bonificación de golpe de las sombras", ["ptBR"] = "Bônus de acerto de sombra" }, - ["Shadow Miss"] = { + ["Shadow miss"] = { ["enUS"] = true, ["deDE"] = "Schatten Verfehlen", ["frFR"] = "Rater des ombres", @@ -872,7 +862,7 @@ local statTranslations = { ["esMX"] = "Fallo de las sombras", ["ptBR"] = "Erro de sombra" }, - ["Shadow Miss (Lvl + 3)"] = { + ["Shadow miss (Lvl + 3)"] = { ["enUS"] = true, ["deDE"] = "Schatten Verfehlen (Lvl + 3)", ["frFR"] = "Rater des ombres (Niv. + 3)", From 8393988108d24bad7850db5c4d0f51eed241fd00 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 18 Feb 2026 04:15:20 +0100 Subject: [PATCH 11/21] resilience --- Modules/Data/Data.lua | 2 +- Modules/Data/Defense.lua | 2 +- Modules/Profile.lua | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Modules/Data/Data.lua b/Modules/Data/Data.lua index 47dac2ae..94b2cdaf 100755 --- a/Modules/Data/Data.lua +++ b/Modules/Data/Data.lua @@ -72,7 +72,7 @@ dataFunctionRefs = { ["BlockChance"] = function() return Data:GetBlockChance() end, ["BlockValue"] = function() return Data:GetBlockValue() end, ["ResilienceRating"] = function() return ECS.IsClassic and 0 or Data:GetResilienceRating() end, - ["ResilienceValue"] = function() return ECS.IsClassic and 0 or Data:GetResilienceValue() end, + ["Resilience"] = function() return ECS.IsClassic and 0 or Data:GetResilience() end, -- Spell ["SpellHitRating"] = function() return ECS.IsClassic and 0 or Data:SpellHitRating() end, ["SpellHitBonus"] = function() return Data.SpellHitBonus(Data.HOLY_SCHOOL) end, diff --git a/Modules/Data/Defense.lua b/Modules/Data/Defense.lua index 4678e0bd..44774029 100755 --- a/Modules/Data/Defense.lua +++ b/Modules/Data/Defense.lua @@ -230,7 +230,7 @@ function Data:GetResilienceRating() end ---@return number -function Data:GetResilienceValue() +function Data:GetResilience() return DataUtils:Round(GetModResilienceDamageReduction(), 2) end diff --git a/Modules/Profile.lua b/Modules/Profile.lua index 5ea5e05b..5e1f3e0b 100755 --- a/Modules/Profile.lua +++ b/Modules/Profile.lua @@ -286,7 +286,7 @@ local function GetDefaultStatsProfile() dodge = {display = true, refName = "DodgeChance", text = "Dodge chance"}, resilience = { display = true, - refName = "ResilienceValue", + refName = "Resilience", text = "Resilience" }, }, From f2bb975f086cf9f295c456a58b2908fbf3ba10f2 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 18 Feb 2026 04:19:53 +0100 Subject: [PATCH 12/21] wip --- Modules/Config/DefenseSection.lua | 6 +++--- Modules/Stats.lua | 2 +- .../ConfigTranslations/DefenseConfigTranslations.lua | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Modules/Config/DefenseSection.lua b/Modules/Config/DefenseSection.lua index 860dc9d4..cd8c43d9 100755 --- a/Modules/Config/DefenseSection.lua +++ b/Modules/Config/DefenseSection.lua @@ -249,13 +249,13 @@ function _Config:LoadDefenseSection() type = "toggle", order = 8.1, name = function() return i18n("Resilience") end, - desc = function() return i18n("Shows/Hides the resilience value.") end, + desc = function() return i18n("Shows/Hides the resilience damage reduction.") end, width = 1.5, hidden = function() return ECS.IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.resilienceValue.display; end, + get = function () return ExtendedCharacterStats.profile.defense.resilience.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.resilienceValue.display = value + ExtendedCharacterStats.profile.defense.resilience.display = value Stats.RebuildStatInfos() end, }, diff --git a/Modules/Stats.lua b/Modules/Stats.lua index 00ce6ffa..2c4bb07d 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -287,7 +287,7 @@ _CreateStatInfos = function() (not ECS.IsClassic) and category.dodgeRating or nil, category.dodge or nil, (not ECS.IsClassic) and category.resilienceRating or nil, - ECS.IsClassic and nil or category.resilienceValue + ECS.IsClassic and nil or category.resilience ) if UnitHasMana("player") then diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index c746dc8d..49d846df 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -192,7 +192,7 @@ local defenseConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de esquivar", ["ptBR"] = "Mostra/oculta a chance de esquivar" }, - ["Shows/Hides the resilience value."] = { + ["Shows/Hides the resilience damage reduction."] = { ["enUS"] = true, ["deDE"] = "Zeigt/Versteckt den Abhärtungswert.", ["frFR"] = "Affiche/cache la valeur de résilience.", From 883d038d1091d0aa2800d2ace1ea4c660654df4a Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 18 Feb 2026 04:25:45 +0100 Subject: [PATCH 13/21] wip --- Modules/i18n/translations/StatTranslations.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index 71d1a03a..b86efce9 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -70,7 +70,7 @@ local statTranslations = { ["ruRU"] = "Проник. способ. броня", ["esES"] = "Penetración de armadura", ["esMX"] = "Penetración de armadura", - ["ptBR"] = "Penetração em Armadura" + ["ptBR"] = "Penetração em armadura" }, ["Armor pen. rating"] = { ["enUS"] = true, @@ -288,8 +288,8 @@ local statTranslations = { ["frFR"] = "Réduction des critiques", ["zhCN"] = false, ["ruRU"] = "Снижение крита", - ["esES"] = "Reducción de crít", - ["esMX"] = "Reducción de crít", + ["esES"] = "Reducción de crít.", + ["esMX"] = "Reducción de crít.", ["ptBR"] = "Redução de crítico" }, ["Avoidance"] = { From 482cfdf3e9babca2c9b621801adff67d4efa86e7 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 18 Feb 2026 04:28:10 +0100 Subject: [PATCH 14/21] wip --- Modules/Stats.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Stats.lua b/Modules/Stats.lua index 2c4bb07d..47c77140 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -286,7 +286,7 @@ _CreateStatInfos = function() DataUtils:CanParry() and category.parry or nil, (not ECS.IsClassic) and category.dodgeRating or nil, category.dodge or nil, - (not ECS.IsClassic) and category.resilienceRating or nil, + ECS.IsClassic and nil or category.resilienceRating, ECS.IsClassic and nil or category.resilience ) From f1bc415bbcced233d09a923c3f1b80edd305e6f5 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 18 Feb 2026 04:33:36 +0100 Subject: [PATCH 15/21] wip --- Modules/Config/RangeSection.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Config/RangeSection.lua b/Modules/Config/RangeSection.lua index bbd2a27b..914fb82f 100755 --- a/Modules/Config/RangeSection.lua +++ b/Modules/Config/RangeSection.lua @@ -55,7 +55,7 @@ function _Config:LoadRangeSection() Stats.RebuildStatInfos() end, }, - rangeCrit. = { + rangeCrit = { type = "toggle", order = 2.1, name = function() return i18n("Ranged Crit") end, From 5a7fa6b5b738ffeff5050534600293cd710861fb Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Wed, 18 Feb 2026 06:16:21 +0100 Subject: [PATCH 16/21] wip --- Modules/Config/Config.lua | 18 +++---- Modules/Config/DefenseSection.lua | 26 +++++----- Modules/Config/GeneralSection.lua | 4 +- Modules/Config/ManaSection.lua | 2 +- Modules/Config/MeleeSection.lua | 50 +++++++++---------- Modules/Config/RangeSection.lua | 30 +++++------ Modules/Config/SpellSchoolsSection.lua | 2 +- Modules/Config/SpellSection.lua | 44 ++++++++-------- Modules/Migration.lua | 17 ++++++- Modules/Profile.lua | 33 ++++++++++-- .../i18n/translations/CommandTranslations.lua | 2 +- .../ConfigTranslations/ConfigTranslations.lua | 20 ++++---- .../DefenseConfigTranslations.lua | 16 +++--- .../GeneralConfigTranslations.lua | 4 +- .../ManaConfigTranslations.lua | 2 +- .../MeleeConfigTranslations.lua | 30 +++++------ .../RangedConfigTranslations.lua | 12 ++--- .../SpellConfigTranslations.lua | 12 ++--- .../SpellSchoolsConfigTranslations.lua | 2 +- .../i18n/translations/StatTranslations.lua | 18 +++++-- 20 files changed, 197 insertions(+), 147 deletions(-) diff --git a/Modules/Config/Config.lua b/Modules/Config/Config.lua index a0d2ac2a..8ef302f4 100755 --- a/Modules/Config/Config.lua +++ b/Modules/Config/Config.lua @@ -60,7 +60,7 @@ _GeneralTab = function() generalHeader = { type = "header", order = 1, - name = function() return i18n("General Settings") end, + name = function() return i18n("General settings") end, }, statsWindowClosedOnOpen = { type = "toggle", @@ -76,7 +76,7 @@ _GeneralTab = function() addColorsToStatTexts = { type = "toggle", order = 2, - name = function() return i18n("Colorize Stats") end, + name = function() return i18n("Colorize stats") end, desc = function() return i18n("Adds colors to the stats overview.") end, width = "full", get = function () return ExtendedCharacterStats.general.addColorsToStatTexts; end, @@ -111,7 +111,7 @@ _GeneralTab = function() showQualityColors = { type = "toggle", order = 3, - name = function() return i18n("Show Item Quality Colors") end, + name = function() return i18n("Show item quality colors") end, desc = function() return i18n("Shows/Hides the colored frames around equipped items.") end, width = "full", get = function () return ExtendedCharacterStats.general.showQualityColors; end, @@ -123,7 +123,7 @@ _GeneralTab = function() qualityColorsIntensity = { type = "range", order = 4, - name = function() return i18n("Quality Colors' Intensity") end, + name = function() return i18n("Quality colors' intensity") end, desc = function() return i18n("Changes the intensity of the colored frames' glow.") end, width = "double", min = 0.10, @@ -138,7 +138,7 @@ _GeneralTab = function() headerFontSize = { type = "range", order = 5, - name = function() return i18n("Header Font Size") end, + name = function() return i18n("Header font size") end, desc = function() return i18n("Changes the font size of the headers (e.g. Melee)") end, width = "double", min = 8, @@ -153,8 +153,8 @@ _GeneralTab = function() statFontSize = { type = "range", order = 6, - name = function() return i18n("Stat Font Size") end, - desc = function() return i18n("Changes the font size of the stat lines (e.g. Crit)") end, + name = function() return i18n("Stat font size") end, + desc = function() return i18n("Changes the font size of the stat lines (e.g. Crit.)") end, width = "double", min = 8, max = 18, @@ -168,7 +168,7 @@ _GeneralTab = function() windowWidth = { type = "range", order = 7, - name = function() return i18n("Window Width") end, + name = function() return i18n("Window width") end, desc = function() return i18n("Changes the width of the stats window") end, width = "double", min = 12, @@ -241,7 +241,7 @@ _StatsTab = function () statsHeader = { type = "header", order = 1, - name = function() return i18n("Stats Settings") end, + name = function() return i18n("Stats settings") end, }, generalGroup = _Config:LoadGeneralSection(), meleeGroup = _Config:LoadMeleeSection(), diff --git a/Modules/Config/DefenseSection.lua b/Modules/Config/DefenseSection.lua index cd8c43d9..c86ad084 100755 --- a/Modules/Config/DefenseSection.lua +++ b/Modules/Config/DefenseSection.lua @@ -20,7 +20,7 @@ function _Config:LoadDefenseSection() showDefenseStats = { type = "toggle", order = 0, - name = function() return i18n("Show Defense Stats") end, + name = function() return i18n("Show defense stats") end, desc = function() return i18n("Shows/Hides all defense stats.") end, width = 1.5, get = function () return ExtendedCharacterStats.profile.defense.display; end, @@ -45,7 +45,7 @@ function _Config:LoadDefenseSection() meleeCritReduction = { type = "toggle", order = 2, - name = function() return i18n("Melee Crit. Reduction") end, + name = function() return i18n("Melee crit. reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by melee attacks.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, @@ -58,7 +58,7 @@ function _Config:LoadDefenseSection() rangedCritReduction = { type = "toggle", order = 2.1, - name = function() return i18n("Ranged Crit. Reduction") end, + name = function() return i18n("Ranged crit. reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by ranged attacks.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, @@ -71,7 +71,7 @@ function _Config:LoadDefenseSection() spellCritReduction = { type = "toggle", order = 2.2, - name = function() return i18n("Spell Crit. Reduction") end, + name = function() return i18n("Spell crit. reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by spells.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, @@ -110,7 +110,7 @@ function _Config:LoadDefenseSection() defenseRating = { type = "toggle", order = 4, - name = function() return i18n("Defense Rating") end, + 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, @@ -137,7 +137,7 @@ function _Config:LoadDefenseSection() blockRating = { type = "toggle", order = 5, - name = function() return i18n("Block Rating") end, + name = function() return i18n("Block rating") end, desc = function() return i18n("Shows/Hides the block rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, @@ -151,7 +151,7 @@ function _Config:LoadDefenseSection() blockChance = { type = "toggle", order = 5.1, - name = function() return i18n("Block Chance") end, + name = function() return i18n("Block chance") end, desc = function() return i18n("Shows/Hides the block chance.") end, width = 1.5, hidden = function() return not IsSpellKnown(107) end, @@ -165,7 +165,7 @@ function _Config:LoadDefenseSection() blockValue = { type = "toggle", order = 5.2, - name = function() return i18n("Block Value") end, + name = function() return i18n("Block value") end, desc = function() return i18n("Shows/Hides the block value.") end, width = 1.5, hidden = function() return not DataUtils:CanBlock() end, @@ -179,7 +179,7 @@ function _Config:LoadDefenseSection() parryRating = { type = "toggle", order = 6, - name = function() return i18n("Parry Rating") end, + name = function() return i18n("Parry rating") end, desc = function() return i18n("Shows/Hides the parry rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, @@ -193,7 +193,7 @@ function _Config:LoadDefenseSection() parry = { type = "toggle", order = 6.1, - name = function() return i18n("Parry Chance") end, + name = function() return i18n("Parry chance") end, desc = function() return i18n("Shows/Hides the parry chance.") end, width = 1.5, hidden = function() return not DataUtils:CanParry() end, @@ -207,7 +207,7 @@ function _Config:LoadDefenseSection() dodgeRating = { type = "toggle", order = 7, - name = function() return i18n("Dodge Rating") end, + name = function() return i18n("Dodge rating") end, desc = function() return i18n("Shows/Hides the dodge rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, @@ -221,7 +221,7 @@ function _Config:LoadDefenseSection() dodge = { type = "toggle", order = 7.1, - name = function() return i18n("Dodge Chance") end, + name = function() return i18n("Dodge chance") end, desc = function() return i18n("Shows/Hides the dodge chance.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, @@ -234,7 +234,7 @@ function _Config:LoadDefenseSection() resilienceRating = { type = "toggle", order = 8, - name = function() return i18n("Resilience Rating") end, + name = function() return i18n("Resilience rating") end, desc = function() return i18n("Shows/Hides the resilience rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, diff --git a/Modules/Config/GeneralSection.lua b/Modules/Config/GeneralSection.lua index 8adafb23..d0354e82 100644 --- a/Modules/Config/GeneralSection.lua +++ b/Modules/Config/GeneralSection.lua @@ -18,7 +18,7 @@ function _Config:LoadGeneralSection() showGeneralStats = { type = "toggle", order = 0, - name = function() return i18n("Show General Stats") end, + name = function() return i18n("Show general stats") end, desc = function() return i18n("Shows/Hides all general stats.") end, width = 1.5, get = function () return ExtendedCharacterStats.profile.general.display; end, @@ -30,7 +30,7 @@ function _Config:LoadGeneralSection() movementSpeed = { type = "toggle", order = 1, - name = function() return i18n("Show Movement Speed") end, + name = function() return i18n("Show movement speed") end, desc = function() return i18n("Shows/Hides the movement speed value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.general.display); end, diff --git a/Modules/Config/ManaSection.lua b/Modules/Config/ManaSection.lua index d62c4f5c..8931aec3 100755 --- a/Modules/Config/ManaSection.lua +++ b/Modules/Config/ManaSection.lua @@ -19,7 +19,7 @@ function _Config:LoadManaSection() showManaStats = { type = "toggle", order = 0, - name = function() return i18n("Show Mana Stats") end, + name = function() return i18n("Show mana stats") end, desc = function() return i18n("Shows/Hides all mana stats.") end, width = 1.5, get = function () return ExtendedCharacterStats.profile.regen.display; end, diff --git a/Modules/Config/MeleeSection.lua b/Modules/Config/MeleeSection.lua index 33025e9a..4b8c5a48 100755 --- a/Modules/Config/MeleeSection.lua +++ b/Modules/Config/MeleeSection.lua @@ -18,7 +18,7 @@ function _Config:LoadMeleeSection() showMeleeStats = { type = "toggle", order = 0, - name = function() return i18n("Show Melee Stats") end, + name = function() return i18n("Show melee stats") end, desc = function() return i18n("Shows/Hides all melee stats.") end, width = 1.5, get = function () return ExtendedCharacterStats.profile.melee.display; end, @@ -30,7 +30,7 @@ function _Config:LoadMeleeSection() meleeAttackPower = { type = "toggle", order = 1, - name = function() return i18n("Melee Attack Power") end, + name = function() return i18n("Melee attack power") end, desc = function() return i18n("Shows/Hides the melee attack power value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, @@ -43,7 +43,7 @@ function _Config:LoadMeleeSection() meleeCritRating = { type = "toggle", order = 2, - name = function() return i18n("Melee Crit. Rating") end, + name = function() return i18n("Melee crit. rating") end, desc = function() return i18n("Shows/Hides the melee crit. rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, @@ -57,7 +57,7 @@ function _Config:LoadMeleeSection() meleeCrit = { type = "toggle", order = 2.1, - name = function() return i18n("Melee Crit") end, + name = function() return i18n("Melee crit.") end, desc = function() return i18n("Shows/Hides the melee crit. chance.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, @@ -70,7 +70,7 @@ function _Config:LoadMeleeSection() penetration = { type = "toggle", order = 2.3, - name = function() return i18n("Armor Pen.") end, + 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, @@ -84,7 +84,7 @@ function _Config:LoadMeleeSection() penetrationRating = { type = "toggle", order = 2.4, - name = function() return i18n("Armor Pen. Rating") end, + 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, @@ -112,7 +112,7 @@ function _Config:LoadMeleeSection() expertiseRating = { type = "toggle", order = 2.6, - name = function() return i18n("Expertise Rating") end, + 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, @@ -126,7 +126,7 @@ function _Config:LoadMeleeSection() hasteRating = { type = "toggle", order = 2.6, - name = function() return i18n("Haste Rating") end, + 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, @@ -140,7 +140,7 @@ function _Config:LoadMeleeSection() hasteBonus = { type = "toggle", order = 2.7, - name = function() return i18n("Haste Bonus") end, + 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, @@ -154,7 +154,7 @@ function _Config:LoadMeleeSection() meleeHit = { type = "toggle", order = 3, - name = function() return i18n("Melee Hit") end, + name = function() return i18n("Melee hit") end, desc = function() return i18n("Shows/Hides all melee hit chance.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, @@ -168,12 +168,12 @@ function _Config:LoadMeleeSection() type = "group", order = 4, inline = true, - name = function() return i18n("Melee Hit Values") end, + name = function() return i18n("Melee hit values") end, args = { meleeHitRating = { type = "toggle", order = 1, - name = function() return i18n("Hit Rating") end, + 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, @@ -190,7 +190,7 @@ function _Config:LoadMeleeSection() meleeHitBonus = { type = "toggle", order = 2, - name = function() return i18n("Hit Bonus") end, + name = function() return i18n("Hit bonus") end, desc = function() return i18n("Shows/Hides the melee hit bonus.") end, width = 1.5, disabled = function() @@ -206,7 +206,7 @@ function _Config:LoadMeleeSection() meleeMiss = { type = "toggle", order = 3, - name = function() return i18n("Miss Chance") end, + name = function() return i18n("Miss chance") end, desc = function() return i18n("Shows/Hides the melee miss chance against enemies on the same level.") end, width = 1.5, disabled = function() @@ -222,7 +222,7 @@ function _Config:LoadMeleeSection() meleeMissBoss = { type = "toggle", order = 4, - name = function() return i18n("Miss Chance Boss") end, + name = function() return i18n("Miss chance boss") end, desc = function() return i18n("Shows/Hides the melee miss chance against boss enemies (+3 Level).") end, width = 1.5, disabled = function() @@ -240,7 +240,7 @@ function _Config:LoadMeleeSection() glancingBlow = { type = "toggle", order = 5, - name = function() return i18n("Glancing Blow") end, + 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, @@ -255,13 +255,13 @@ function _Config:LoadMeleeSection() type = "group", order = 6, inline = true, - name = function() return i18n("Melee Glance Values") end, + name = function() return i18n("Melee glance values") end, hidden = function() return ECS.IsWotlk end, args = { meleeGlance = { type = "toggle", order = 1, - name = function() return i18n("Glancing Blow Chance") end, + name = function() return i18n("Glancing blow chance") end, desc = function() return i18n("Shows/Hides the glancing chance against enemies on same level.") end, width = 1.5, disabled = function() @@ -277,7 +277,7 @@ function _Config:LoadMeleeSection() meleeGlanceBoss = { type = "toggle", order = 2, - name = function() return i18n("Glancing Blow Chance Boss") end, + name = function() return i18n("Glancing blow chance boss") end, desc = function() return i18n("Shows/Hides the glancing chance against boss enemies (+3 Level).") end, width = 1.5, disabled = function() @@ -293,7 +293,7 @@ function _Config:LoadMeleeSection() meleeGlanceDamage = { type = "toggle", order = 3, - name = function() return i18n("Glancing Blow Damage") end, + name = function() return i18n("Glancing blow damage") end, desc = function() return i18n("Shows/Hides the damage reduction against enemies on the same level.") end, width = 1.5, disabled = function() @@ -309,7 +309,7 @@ function _Config:LoadMeleeSection() meleeGlanceDamageBoss = { type = "toggle", order = 4, - name = function() return i18n("Glancing Blow Damage Boss") end, + name = function() return i18n("Glancing blow damage boss") end, desc = function() return i18n("Shows/Hides the damage reduction against boss enemies (+3 Level).") end, width = 1.5, disabled = function() @@ -327,7 +327,7 @@ function _Config:LoadMeleeSection() meleeAttackSpeed = { type = "toggle", order = 7, - name = function() return i18n("Attack Speed") end, + name = function() return i18n("Attack speed") end, desc = function() return i18n("Shows/Hides the melee attack speed.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.melee.display); end, @@ -341,12 +341,12 @@ function _Config:LoadMeleeSection() type = "group", order = 8, inline = true, - name = function() return i18n("Attack Speed") end, + name = function() return i18n("Attack speed") end, args = { mainHand = { type = "toggle", order = 1, - name = function() return i18n("Main Hand") end, + name = function() return i18n("Main hand") end, desc = function() return i18n("Shows/Hides the attack speed of the main hand.") end, width = 1.5, disabled = function() @@ -362,7 +362,7 @@ function _Config:LoadMeleeSection() offHand = { type = "toggle", order = 2, - name = function() return i18n("Off Hand") end, + name = function() return i18n("Off hand") end, hidden = function() return not CanDualWield() end, desc = function() return i18n("Shows/Hides the attack speed of the off hand.") end, width = 1.5, diff --git a/Modules/Config/RangeSection.lua b/Modules/Config/RangeSection.lua index 914fb82f..87952765 100755 --- a/Modules/Config/RangeSection.lua +++ b/Modules/Config/RangeSection.lua @@ -19,7 +19,7 @@ function _Config:LoadRangeSection() showRangeStats = { type = "toggle", order = 0, - name = function() return i18n("Show Ranged Stats") end, + name = function() return i18n("Show ranged stats") end, desc = function() return i18n("Shows/Hides all ranged stats.") end, width = 1.5, get = function () return ExtendedCharacterStats.profile.ranged.display; end, @@ -31,7 +31,7 @@ function _Config:LoadRangeSection() rangedAttackPower = { type = "toggle", order = 1, - name = function() return i18n("Ranged Attack Power") end, + name = function() return i18n("Ranged attack power") end, desc = function() return i18n("Shows/Hides the ranged attack power value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, @@ -44,7 +44,7 @@ function _Config:LoadRangeSection() rangedCritRating = { type = "toggle", order = 2, - name = function() return i18n("Ranged Crit. Rating") end, + name = function() return i18n("Ranged crit. rating") end, desc = function() return i18n("Shows/Hides the ranged crit. rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, @@ -58,7 +58,7 @@ function _Config:LoadRangeSection() rangeCrit = { type = "toggle", order = 2.1, - name = function() return i18n("Ranged Crit") end, + name = function() return i18n("Ranged crit.") end, desc = function() return i18n("Shows/Hides the ranged crit. chance.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, @@ -71,7 +71,7 @@ function _Config:LoadRangeSection() penetration = { type = "toggle", order = 2.3, - name = function() return i18n("Armor Pen.") end, + name = function() return i18n("Armor pen.") end, desc = function() return i18n("Shows/Hides the armor penetration value.") end, width = 1.5, hidden = function() return (not ECS.IsWotlk) end, @@ -85,7 +85,7 @@ function _Config:LoadRangeSection() penetrationRating = { type = "toggle", order = 2.4, - name = function() return i18n("Armor Pen. Rating") end, + 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, @@ -99,7 +99,7 @@ function _Config:LoadRangeSection() hasteRating = { type = "toggle", order = 2.6, - name = function() return i18n("Haste Rating") end, + 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, @@ -113,7 +113,7 @@ function _Config:LoadRangeSection() hasteBonus = { type = "toggle", order = 2.7, - name = function() return i18n("Haste Bonus") end, + 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, @@ -127,7 +127,7 @@ function _Config:LoadRangeSection() rangedAttackSpeed = { type = "toggle", order = 3, - name = function() return i18n("Attack Speed") end, + name = function() return i18n("Attack speed") end, desc = function() return i18n("Shows/Hides the ranged attack speed.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, @@ -140,7 +140,7 @@ function _Config:LoadRangeSection() rangeHit = { type = "toggle", order = 4, - name = function() return i18n("Ranged Hit") end, + name = function() return i18n("Ranged hit") end, desc = function() return i18n("Shows/Hides all ranged hit chance.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.ranged.display); end, @@ -154,12 +154,12 @@ function _Config:LoadRangeSection() type = "group", order = 5, inline = true, - name = function() return i18n("Ranged Hit Values") end, + name = function() return i18n("Ranged hit values") end, args = { rangeHitRating = { type = "toggle", order = 1, - name = function() return i18n("Hit Rating") end, + 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, @@ -176,7 +176,7 @@ function _Config:LoadRangeSection() rangeHitBonus = { type = "toggle", order = 2, - name = function() return i18n("Hit Bonus") end, + name = function() return i18n("Hit bonus") end, desc = function() return i18n("Shows/Hides the ranged hit bonus.") end, width = 1.5, disabled = function() @@ -192,7 +192,7 @@ function _Config:LoadRangeSection() rangeMiss = { type = "toggle", order = 3, - name = function() return i18n("Miss Chance") end, + name = function() return i18n("Miss chance") end, desc = function() return i18n("Shows/Hides the ranged miss chance against enemies on the same level.") end, width = 1.5, disabled = function() @@ -208,7 +208,7 @@ function _Config:LoadRangeSection() rangeMissBoss = { type = "toggle", order = 4, - name = function() return i18n("Miss Chance Boss") end, + name = function() return i18n("Miss chance boss") end, desc = function() return i18n("Shows/Hides the ranged miss chance against boss enemies (+3 Level).") end, width = 1.5, disabled = function() diff --git a/Modules/Config/SpellSchoolsSection.lua b/Modules/Config/SpellSchoolsSection.lua index bc3b5881..a676f531 100644 --- a/Modules/Config/SpellSchoolsSection.lua +++ b/Modules/Config/SpellSchoolsSection.lua @@ -13,7 +13,7 @@ function _Config:SpellSchoolsSection() order = 6, inline = false, width = 2, - name = function() return i18n("Spell Schools") end, + name = function() return i18n("Spell schools") end, args = { arcane = { type = "toggle", diff --git a/Modules/Config/SpellSection.lua b/Modules/Config/SpellSection.lua index 65e06485..bab9fd99 100755 --- a/Modules/Config/SpellSection.lua +++ b/Modules/Config/SpellSection.lua @@ -18,7 +18,7 @@ function _Config:LoadSpellSection() showSpellStats = { type = "toggle", order = 0, - name = function() return i18n("Show Spell Stats") end, + name = function() return i18n("Show spell stats") end, desc = function() return i18n("Shows/Hides all spell stats.") end, width = 1.5, get = function () return ExtendedCharacterStats.profile.spell.display; end, @@ -30,21 +30,21 @@ function _Config:LoadSpellSection() spellCritRating = { type = "toggle", order = 1, - name = function() return i18n("Spell Crit. Rating") end, + name = function() return i18n("Spell crit. rating") end, desc = function() return i18n("Shows/Hides the spell crit. rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spell.critRating.display; end, + get = function () return ExtendedCharacterStats.profile.spell.crit.rating.display; end, set = function (_, value) - ExtendedCharacterStats.profile.spell.critRating.display = value + ExtendedCharacterStats.profile.spell.crit.rating.display = value Stats.RebuildStatInfos() end, }, spellCrit = { type = "toggle", order = 1.1, - name = function() return i18n("Spell Crit") end, + name = function() return i18n("Spell crit.") end, desc = function() return i18n("Shows/Hides the spell crit. chance.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, @@ -57,7 +57,7 @@ function _Config:LoadSpellSection() hasteRating = { type = "toggle", order = 2, - name = function() return i18n("Haste Rating") end, + 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, @@ -71,7 +71,7 @@ function _Config:LoadSpellSection() hasteBonus = { type = "toggle", order = 3, - name = function() return i18n("Haste Bonus") end, + name = function() return i18n("Haste bonus") end, desc = function() return i18n("Shows/Hides the spell haste bonus value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, @@ -84,7 +84,7 @@ function _Config:LoadSpellSection() spellPenetration = { type = "toggle", order = 4, - name = function() return i18n("Spell Penetration") end, + name = function() return i18n("Spell penetration") end, desc = function() return i18n("Shows/Hides the spell penetration value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, @@ -98,12 +98,12 @@ function _Config:LoadSpellSection() type = "group", order = 5, inline = true, - name = function() return i18n("Spell Hit Values") end, + name = function() return i18n("Spell hit values") end, args = { spellHitRating = { type = "toggle", order = 1, - name = function() return i18n("Hit Rating") end, + 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, @@ -120,7 +120,7 @@ function _Config:LoadSpellSection() spellHitBonus = { type = "toggle", order = 2, - name = function() return i18n("Hit Bonus") end, + name = function() return i18n("Hit bonus") end, desc = function() return i18n("Shows/Hides the spell hit bonus.") end, width = 1.5, disabled = function() @@ -136,7 +136,7 @@ function _Config:LoadSpellSection() spellMiss = { type = "toggle", order = 3, - name = function() return i18n("Miss Chance") end, + name = function() return i18n("Miss chance") end, desc = function() return i18n("Shows/Hides the spell miss chance against enemies on the same level.") end, width = 1.5, disabled = function() @@ -152,7 +152,7 @@ function _Config:LoadSpellSection() spellMissBoss = { type = "toggle", order = 4, - name = function() return i18n("Miss Chance Boss") end, + name = function() return i18n("Miss chance boss") end, desc = function() return i18n("Shows/Hides the spell miss chance against boss enemies (+3 Level).") end, width = 1.5, disabled = function() @@ -171,12 +171,12 @@ function _Config:LoadSpellSection() type = "group", order = 6, inline = true, - name = function() return i18n("Spell Power") end, + name = function() return i18n("Spell power") end, args = { bonusHealing = { type = "toggle", order = 1, - name = function() return i18n("Healing Power") end, + name = function() return i18n("Healing power") end, desc = function() return i18n("Shows/Hides the healing power value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, @@ -189,7 +189,7 @@ function _Config:LoadSpellSection() arcaneDmg = { type = "toggle", order = 2, - name = function() return i18n("Arcane Damage") end, + name = function() return i18n("Arcane damage") end, desc = function() return i18n("Shows/Hides the arcane damage value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, @@ -202,7 +202,7 @@ function _Config:LoadSpellSection() fireDmg = { type = "toggle", order = 3, - name = function() return i18n("Fire Damage") end, + name = function() return i18n("Fire damage") end, desc = function() return i18n("Shows/Hides the fire damage value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, @@ -215,7 +215,7 @@ function _Config:LoadSpellSection() frostDmg = { type = "toggle", order = 4, - name = function() return i18n("Frost Damage") end, + name = function() return i18n("Frost damage") end, desc = function() return i18n("Shows/Hides the frost damage value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, @@ -228,7 +228,7 @@ function _Config:LoadSpellSection() holyDmg = { type = "toggle", order = 5, - name = function() return i18n("Holy Damage") end, + name = function() return i18n("Holy damage") end, desc = function() return i18n("Shows/Hides the holy damage value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, @@ -241,7 +241,7 @@ function _Config:LoadSpellSection() natureDmg = { type = "toggle", order = 6, - name = function() return i18n("Nature Damage") end, + name = function() return i18n("Nature damage") end, desc = function() return i18n("Shows/Hides the nature damage value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, @@ -254,7 +254,7 @@ function _Config:LoadSpellSection() physicalDmg = { type = "toggle", order = 7, - name = function() return i18n("Physical Damage") end, + name = function() return i18n("Physical damage") end, desc = function() return i18n("Shows/Hides the physical damage value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, @@ -267,7 +267,7 @@ function _Config:LoadSpellSection() shadowDmg = { type = "toggle", order = 8, - name = function() return i18n("Shadow Damage") end, + name = function() return i18n("Shadow damage") end, desc = function() return i18n("Shows/Hides the shadow damage value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, diff --git a/Modules/Migration.lua b/Modules/Migration.lua index 59cd8135..e6068677 100644 --- a/Modules/Migration.lua +++ b/Modules/Migration.lua @@ -14,4 +14,19 @@ function Migration:ToLatestProfileVersion(profileVersion) ECS:Print(i18n("Profile has been reset due to a major update.")) -- because of TBC anniversary return end -end + + local defaultProfile = Profile:GetDefaultProfile() + if profileVersion < 24 then + ExtendedCharacterStats.profile.defense.blockRating = defaultProfile.profile.defense.blockRating + ExtendedCharacterStats.profile.defense.resilience = defaultProfile.profile.defense.resilience + ExtendedCharacterStats.profile.melee.critRating = defaultProfile.profile.melee.critRating + ExtendedCharacterStats.profile.melee.penetration = defaultProfile.profile.melee.penetration + ExtendedCharacterStats.profile.melee.penetrationRating = defaultProfile.profile.melee.penetrationRating + ExtendedCharacterStats.profile.ranged.critRating = defaultProfile.profile.ranged.critRating + ExtendedCharacterStats.profile.ranged.penetration = defaultProfile.profile.ranged.penetration + ExtendedCharacterStats.profile.ranged.penetrationRating = defaultProfile.profile.ranged.penetrationRating + ExtendedCharacterStats.profile.spell.crit.rating = defaultProfile.profile.spell.crit.rating + ExtendedCharacterStats.profile.spell.penetration = defaultProfile.profile.spell.penetration + ExtendedCharacterStats.profile.spell.penetrationRating = defaultProfile.profile.spell.penetrationRating + end +end \ No newline at end of file diff --git a/Modules/Profile.lua b/Modules/Profile.lua index 5e1f3e0b..3acc538a 100755 --- a/Modules/Profile.lua +++ b/Modules/Profile.lua @@ -6,7 +6,7 @@ local Utils = ECSLoader:ImportModule("Utils") ---@return number function Profile.GetProfileVersion() - return 23 + return 24 end ---@return ECSProfile @@ -66,7 +66,7 @@ local function GetDefaultStatsProfile() display = true, isSubGroup = true, refName = "GlanceChanceHeader", - text = "Glancing Blow", + text = "Glancing blow", sameLevel = { display = true, refName = "GlanceHitChanceSameLevel", @@ -103,6 +103,13 @@ local function GetDefaultStatsProfile() textColor = colors.ATTACK_POWER_SECONDARY, statColor = colors.ATTACK_POWER_PRIMARY }, + critRating = { + display = true, + refName = "RangedCritRating", + text = "Crit. rating", + textColor = colors.CRIT_SECONDARY, + statColor = colors.CRIT_PRIMARY + }, crit = { display = true, refName = "MeleeCritChance", @@ -157,14 +164,14 @@ local function GetDefaultStatsProfile() mainHand = { display = true, refName = "MeleeAttackSpeedMainHand", - text = "Main Hand", + text = "Main hand", textColor = colors.ATTACK_SPEED_SECONDARY, statColor = colors.ATTACK_SPEED_PRIMARY }, offHand = { display = true, refName = "MeleeAttackSpeedOffHand", - text = "Off Hand", + text = "Off hand", textColor = colors.ATTACK_SPEED_SECONDARY, statColor = colors.ATTACK_SPEED_PRIMARY }, @@ -219,6 +226,13 @@ local function GetDefaultStatsProfile() textColor = colors.ATTACK_POWER_SECONDARY, statColor = colors.ATTACK_POWER_PRIMARY }, + critRating = { + display = true, + refName = "RangedCritRating", + text = "Crit. rating", + textColor = colors.CRIT_SECONDARY, + statColor = colors.CRIT_PRIMARY + }, crit = { display = true, refName = "RangedCritChance", @@ -280,10 +294,14 @@ local function GetDefaultStatsProfile() text = "Defense rating" }, defense = {display = true, refName = "DefenseValue", text = "Defense"}, + blockRating = {display = true, refName = "BlockRating", text = "Block rating"}, blockChance = {display = true, refName = "BlockChance", text = "Block chance"}, blockValue = {display = true, refName = "BlockValue", text = "Block value"}, + parryRating = {display = true, refName = "ParryRating", text = "Parry rating"}, parry = {display = true, refName = "ParryChance", text = "Parry chance"}, + dodgeRating = {display = true, refName = "DodgeRating", text = "Dodge rating"}, dodge = {display = true, refName = "DodgeChance", text = "Dodge chance"}, + resilienceRating = {display = true,refName = "ResilienceRating", text = "Resilience rating"}, resilience = { display = true, refName = "Resilience", @@ -561,6 +579,13 @@ local function GetDefaultStatsProfile() crit = { display = true, + rating = { + display = true, + refName = "SpellCritRating", + text = "Crit. rating", + textColor = colors.CRIT_SECONDARY, + statColor = colors.CRIT_PRIMARY + }, arcane = { display = true, refName = "ArcaneCritChance", diff --git a/Modules/i18n/translations/CommandTranslations.lua b/Modules/i18n/translations/CommandTranslations.lua index 45e8820a..40b667ae 100644 --- a/Modules/i18n/translations/CommandTranslations.lua +++ b/Modules/i18n/translations/CommandTranslations.lua @@ -2,7 +2,7 @@ local i18n = ECSLoader:ImportModule("i18n") local commandTranslations = { - ["Available Commands"] = { + ["Available commands"] = { ["enUS"] = true, ["deDE"] = "Verfügbare Befehle", ["frFR"] = "Commandes disponibles", diff --git a/Modules/i18n/translations/ConfigTranslations/ConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/ConfigTranslations.lua index a8b72073..99d00412 100644 --- a/Modules/i18n/translations/ConfigTranslations/ConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/ConfigTranslations.lua @@ -32,7 +32,7 @@ local configTranslations = { ["esMX"] = "Estadísticas", ["ptBR"] = "Estatísticas" }, - ["General Settings"] = { + ["General settings"] = { ["enUS"] = true, ["deDE"] = "Allgemeine Einstellungen", ["frFR"] = "Paramètres généraux", @@ -62,7 +62,7 @@ local configTranslations = { ["esMX"] = "Oculta la ventana de estadísticas cuando abriendo la información del personaje", ["ptBR"] = "Oculta as janelas de estatísticas ao abrir as informações do personagem" }, - ["Colorize Stats"] = { + ["Colorize stats"] = { ["enUS"] = true, ["deDE"] = "Werte färben", ["frFR"] = "Coloriser les statistiques", @@ -122,7 +122,7 @@ local configTranslations = { ["esMX"] = "Valores de estadísticas", ["ptBR"] = "Valores das estatísticas" }, - ["Show Item Quality Colors"] = { + ["Show item quality colors"] = { ["enUS"] = true, ["deDE"] = "Zeige Item Qualitätsfarben", ["frFR"] = "Affiche la couleur de rareté des objets", @@ -142,7 +142,7 @@ local configTranslations = { ["esMX"] = "Muestra/oculta los marcos coloreados alrededor de los objetos equipados", ["ptBR"] = "Mostra/oculta os quadros coloridos ao redor dos itens equipados" }, - ["Quality Colors' Intensity"] = { + ["Quality colors' intensity"] = { ["enUS"] = true, ["deDE"] = "Intensität der Qualitätsfarben", ["frFR"] = "Intensité des couleurs de qualité", @@ -162,7 +162,7 @@ local configTranslations = { ["esMX"] = "Cambia la intensidad del brillo de los marcos coloreados.", ["ptBR"] = "Altera a intensidade do brilho dos quadros coloridos." }, - ["Header Font Size"] = { + ["Header font size"] = { ["enUS"] = true, ["deDE"] = "Überschriften Schriftgröße", ["frFR"] = "Taille de la police d'entête", @@ -182,7 +182,7 @@ local configTranslations = { ["esMX"] = "Cambia el tamaño de fuente de los encabezados (p. ej., cuerpo a cuerpo)", ["ptBR"] = "Altera o tamanho da fonte dos cabeçalhos (por exemplo, corpo a corpo)" }, - ["Stat Font Size"] = { + ["Stat font size"] = { ["enUS"] = true, ["deDE"] = "Werte Schriftgröße", ["frFR"] = "Taille de la police des statistiques", @@ -192,17 +192,17 @@ local configTranslations = { ["esMX"] = "Tamaño de fuente de estadística", ["ptBR"] = "Tamanho da fonte das estatísticas" }, - ["Changes the font size of the stat lines (e.g. Crit)"] = { + ["Changes the font size of the stat lines (e.g. Crit.)"] = { ["enUS"] = true, ["deDE"] = "Ändert die Schriftgröße der Werte (z.B. Kritische Chance)", ["frFR"] = "Modifie la taille de la police des statistiques (ex. Critique)", ["zhCN"] = "更改统计行的字体大小 (例如:暴击)", - ["ruRU"] = "Изменяет размер шрифта характеристик (например, \"Крит\")", + ["ruRU"] = "Изменяет размер шрифта характеристик (например, \"Крит.\")", ["esES"] = "Cambia el tamaño de fuente de las líneas de estadísticas (p. ej., crítico)", ["esMX"] = "Cambia el tamaño de fuente de las líneas de estadísticas (p. ej., crítico)", ["ptBR"] = "Altera o tamanho da fonte das linhas de estatísticas (por exemplo, crítico)" }, - ["Window Width"] = { + ["Window width"] = { ["enUS"] = true, ["deDE"] = "Fensterbreite", ["frFR"] = "Largeur de fenêtre", @@ -232,7 +232,7 @@ local configTranslations = { ["esMX"] = "Idioma", ["ptBR"] = "Idioma" }, - ["Stats Settings"] = { + ["Stats settings"] = { ["enUS"] = true, ["deDE"] = "Werte Einstellungen", ["frFR"] = "Paramètres des statistiques", diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index 49d846df..6e62d5b3 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -2,7 +2,7 @@ local i18n = ECSLoader:ImportModule("i18n") local defenseConfigTranslations = { - ["Parry Rating"] = { + ["Parry rating"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -12,7 +12,7 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Dodge Rating"] = { + ["Dodge rating"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -22,7 +22,7 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Block Rating"] = { + ["Block rating"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -32,7 +32,7 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Resilience Rating"] = { + ["Resilience rating"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -42,7 +42,7 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Melee Crit. Reduction"] = { + ["Melee crit. reduction"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -52,7 +52,7 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false }, - ["Ranged Crit. Reduction"] = { + ["Ranged crit. reduction"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -62,7 +62,7 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false }, - ["Spell Crit. Reduction"] = { + ["Spell crit. reduction"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -72,7 +72,7 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false }, - ["Show Defense Stats"] = { + ["Show defense stats"] = { ["enUS"] = true, ["deDE"] = "Verteidigungswerte anzeigen", ["frFR"] = "Afficher défense", diff --git a/Modules/i18n/translations/ConfigTranslations/GeneralConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/GeneralConfigTranslations.lua index 88bb1158..fdb9a963 100644 --- a/Modules/i18n/translations/ConfigTranslations/GeneralConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/GeneralConfigTranslations.lua @@ -2,7 +2,7 @@ local i18n = ECSLoader:ImportModule("i18n") local generalConfigTranslations = { - ["Show General Stats"] = { + ["Show general stats"] = { ["enUS"] = true, ["deDE"] = "Allgemeine Werte anzeigen", ["frFR"] = "Afficher les statistiques", @@ -22,7 +22,7 @@ local generalConfigTranslations = { ["esMX"] = "Muestra/oculta todas estadísticas generales", ["ptBR"] = "Mostra/oculta todas as estatísticas gerais" }, - ["Show Movement Speed"] = { + ["Show movement speed"] = { ["enUS"] = true, ["deDE"] = "Bewegungsgeschwindigkeit anzeigen", ["frFR"] = "Afficher la vitesse de déplacement", diff --git a/Modules/i18n/translations/ConfigTranslations/ManaConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/ManaConfigTranslations.lua index 21443840..8a9db4bc 100644 --- a/Modules/i18n/translations/ConfigTranslations/ManaConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/ManaConfigTranslations.lua @@ -2,7 +2,7 @@ local i18n = ECSLoader:ImportModule("i18n") local manaConfigTranslations = { - ["Show Mana Stats"] = { + ["Show mana stats"] = { ["enUS"] = true, ["deDE"] = "Manawerte anzeigen", ["frFR"] = "Afficher mana", diff --git a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua index 90a7429c..dba3d4ea 100644 --- a/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/MeleeConfigTranslations.lua @@ -2,7 +2,7 @@ local i18n = ECSLoader:ImportModule("i18n") local meleeConfigTranslations = { - ["Show Melee Stats"] = { + ["Show melee stats"] = { ["enUS"] = true, ["deDE"] = "Nahkampfwerte anzeigen", ["frFR"] = "Afficher mêlée", @@ -22,7 +22,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta todas estadísticas cuerpo a cuerpo", ["ptBR"] = "Mostra/oculta todas as estatísticas corpo a corpo" }, - ["Melee Attack Power"] = { + ["Melee attack power"] = { ["enUS"] = true, ["deDE"] = "Nahkampf Angriffskraft", ["frFR"] = "Puissance d'attaque en mêlée", @@ -42,7 +42,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta el valor de poder de ataque cuerpo a cuerpo", ["ptBR"] = "Mostra/oculta o valor de poder de ataque corpo a corpo" }, - ["Melee Crit"] = { + ["Melee crit."] = { ["enUS"] = true, ["deDE"] = "Nahkampf Kritisch", ["frFR"] = "Critique en mêlée", @@ -152,7 +152,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta la velocidad de ataque de la mano izquierda", ["ptBR"] = "Mostra/oculta a velocidade de ataque da mão secundária" }, - ["Melee Hit"] = { + ["Melee hit"] = { ["enUS"] = true, ["deDE"] = "Nahkampf Trefferwertung", ["frFR"] = "Toucher en mêlée", @@ -162,7 +162,7 @@ local meleeConfigTranslations = { ["esMX"] = "Probabilidad de golpear", ["ptBR"] = "Chance de acerto" }, - ["Melee Hit Values"] = { + ["Melee hit values"] = { ["enUS"] = true, ["deDE"] = "Nahkampf Trefferwertung", ["frFR"] = "Valeurs de toucher en mêlée", @@ -182,7 +182,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de golpear", ["ptBR"] = "Mostra/oculta a chance de acerto" }, - ["Hit Rating"] = { + ["Hit rating"] = { ["enUS"] = true, ["deDE"] = "Trefferwertung", ["frFR"] = "Score de toucher", @@ -202,7 +202,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta el índice de golpear", ["ptBR"] = "Mostra/oculta a taxa de acerto" }, - ["Hit Bonus"] = { + ["Hit bonus"] = { ["enUS"] = true, ["deDE"] = "Trefferwertungsbonus", ["frFR"] = "Bonus de toucher", @@ -222,7 +222,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta el bonus de golpear", ["ptBR"] = "Mostra/oculta o bônus de acerto" }, - ["Miss Chance"] = { + ["Miss chance"] = { ["enUS"] = true, ["deDE"] = "Chance zu verfehlen", ["frFR"] = "Chances de rater", @@ -242,7 +242,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de fallo contra enemigos del mismo nivel", ["ptBR"] = "Mostra/oculta a chance de erro contra inimigos do mesmo nível" }, - ["Miss Chance Boss"] = { + ["Miss chance boss"] = { ["enUS"] = true, ["deDE"] = "Chance zu verfehlen (Boss)", ["frFR"] = "Chances de rater (Boss)", @@ -262,7 +262,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de fallo contra jefes (nivel +3)", ["ptBR"] = "Mostra/oculta a chance de erro contra chefes (nível +3)." }, - ["Glancing Blow Chance"] = { + ["Glancing blow chance"] = { ["enUS"] = true, ["deDE"] = "Streifschlagchance", ["frFR"] = "Chance de coup d'éraflure", @@ -282,7 +282,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de golpe de refilón contra enemigos del mismo nivel.", ["ptBR"] = "Mostra/oculta a chance de pancada de relance contra inimigos do mesmo nível." }, - ["Glancing Blow Chance Boss"] = { + ["Glancing blow chance boss"] = { ["enUS"] = true, ["deDE"] = "Streifschlagchance (Boss)", ["frFR"] = "Chance de coup d'éraflure (Boss)", @@ -302,7 +302,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de golpe de refilón contra jefes (nivel +3)", ["ptBR"] = "Mostra/oculta a chance de pancada de relance contra chefes (nível +3)." }, - ["Glancing Blow Damage"] = { + ["Glancing blow damage"] = { ["enUS"] = true, ["deDE"] = "Streifschlagschaden", ["frFR"] = "Dégâts du coup d'éraflure", @@ -322,7 +322,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta el daño de golpe de refilón contra enemigos del mismo nivel.", ["ptBR"] = "Mostra/oculta o dano de pancada de relance contra inimigos do mesmo nível." }, - ["Glancing Blow Damage Boss"] = { + ["Glancing blow damage boss"] = { ["enUS"] = true, ["deDE"] = "Streifschlagschaden (Boss)", ["frFR"] = "Dégâts du coup d'éraflure (Boss)", @@ -342,7 +342,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta el daño de golpe de refilón contra jefes (nivel +3)", ["ptBR"] = "Mostra/oculta o dano de pancada de relance contra chefes (nível +3)." }, - ["Melee Glance Values"] = { + ["Melee glance values"] = { ["enUS"] = true, ["deDE"] = "Nahkampf-Streifwerte", ["frFR"] = "Valeurs de coup d'éraflure en mêlée", @@ -362,7 +362,7 @@ local meleeConfigTranslations = { ["esMX"] = "Muestra/oculta todas las estadísticas de golpes de refilón", ["ptBR"] = "Mostra/oculta todas as estatísticas de pancada de relance" }, - ["Melee Crit. Rating"] = { + ["Melee crit. rating"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, diff --git a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua index 191ba04f..f378285c 100644 --- a/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/RangedConfigTranslations.lua @@ -2,7 +2,7 @@ local i18n = ECSLoader:ImportModule("i18n") local rangedConfigTranslations = { - ["Show Ranged Stats"] = { + ["Show ranged stats"] = { ["enUS"] = true, ["deDE"] = "Fernkampfwerte anzeigen", ["frFR"] = "Afficher à distance", @@ -21,7 +21,7 @@ local rangedConfigTranslations = { ["esES"] = "Muestra/oculta todas estadísticas a distancia", ["esMX"] = "Muestra/oculta todas estadísticas a distancia" }, - ["Ranged Attack Power"] = { + ["Ranged attack power"] = { ["enUS"] = true, ["deDE"] = "Fernkampf Angriffskraft", ["frFR"] = "Puissance d'attaque à distance", @@ -41,7 +41,7 @@ local rangedConfigTranslations = { ["esMX"] = "Muestra/oculta el valor de poder de ataque a distancia", ["ptBR"] = "Mostra/oculta o valor de poder de ataque de longo alcance" }, - ["Ranged Crit"] = { + ["Ranged crit."] = { ["enUS"] = true, ["deDE"] = "Fernkampf Kritisch", ["frFR"] = "Critique à distance", @@ -91,7 +91,7 @@ local rangedConfigTranslations = { ["esMX"] = "Muestra/oculta la velocidad de ataque a distancia", ["ptBR"] = "Mostra/oculta a velocidade de ataque de longo alcance" }, - ["Ranged Hit"] = { + ["Ranged hit"] = { ["enUS"] = true, ["deDE"] = "Fernkampf Trefferwertung", ["frFR"] = "Toucher à distance", @@ -101,7 +101,7 @@ local rangedConfigTranslations = { ["esMX"] = "Probabilidad de golpear", ["ptBR"] = "Chance de acerto" }, - ["Ranged Hit Values"] = { + ["Ranged hit values"] = { ["enUS"] = true, ["deDE"] = "Fernkampf Trefferwertung", ["frFR"] = "Valeurs de toucher à distance", @@ -161,7 +161,7 @@ local rangedConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de fallo contra jefes (nivel +3)", ["ptBR"] = "Mostra/oculta a chance de erro contra chefes (nível +3)" }, - ["Ranged Crit. Rating"] = { + ["Ranged crit. rating"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, diff --git a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua index 38e8ccf4..8e77e9e1 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua @@ -2,7 +2,7 @@ local i18n = ECSLoader:ImportModule("i18n") local spellConfigTranslations = { - ["Show Spell Stats"] = { + ["Show spell stats"] = { ["enUS"] = true, ["deDE"] = "Zauberwerte anzeigen", ["frFR"] = "Afficher sorts", @@ -22,7 +22,7 @@ local spellConfigTranslations = { ["esMX"] = "Muestra/oculta todas estadísticas de hechizos", ["ptBR"] = "Mostra/oculta todas as estatísticas de feitiços" }, - ["Spell Crit"] = { + ["Spell crit."] = { ["enUS"] = true, ["deDE"] = "Zauber Kritisch", ["frFR"] = "Critique des sorts", @@ -42,7 +42,7 @@ local spellConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de asestar un golpe crítico con hechizos", ["ptBR"] = "Mostra/oculta a chance de realizar acertos críticos com feitiços" }, - ["Spell Penetration"] = { + ["Spell penetration"] = { ["enUS"] = true, ["deDE"] = "Zauberdurchschlagskraft", ["frFR"] = "Pénétration des sorts", @@ -82,7 +82,7 @@ local spellConfigTranslations = { ["esMX"] = "Muestra/oculta el bonus de celeridad con hechizos", ["ptBR"] = "Mostra/oculta o bônus de de aceleração de feitiço" }, - ["Spell Hit Values"] = { + ["Spell hit values"] = { ["enUS"] = true, ["deDE"] = "Zauber Trefferwertung", ["frFR"] = "Toucher des sorts", @@ -132,7 +132,7 @@ local spellConfigTranslations = { ["esMX"] = "Muestra/oculta la probabilidad de fallo con hechizos contra jefes (nivel +3)", ["ptBR"] = "Mostra/oculta a chance de erro de feitiço contra inimigos chefes (nível +3)" }, - ["Spell Power"] = { + ["Spell power"] = { ["enUS"] = true, ["deDE"] = "Zauberkraft", ["frFR"] = "Puissance des sorts", @@ -222,7 +222,7 @@ local spellConfigTranslations = { ["esMX"] = "Muestra/oculta el valor de poder de sanación", ["ptBR"] = "Mostra/oculta o valor de poder de cura" }, - ["Spell Crit. Rating"] = { + ["Spell crit. rating"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, diff --git a/Modules/i18n/translations/ConfigTranslations/SpellSchoolsConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellSchoolsConfigTranslations.lua index 55c4a28c..0eb920cf 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellSchoolsConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellSchoolsConfigTranslations.lua @@ -2,7 +2,7 @@ local i18n = ECSLoader:ImportModule("i18n") local spellSchoolsConfigTranslations = { - ["Spell Schools"] = { + ["Spell schools"] = { ["enUS"] = true, ["deDE"] = "Zauber Schulen", ["frFR"] = "Écoles de magie", diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index b86efce9..241e559b 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -52,6 +52,16 @@ local statTranslations = { ["esMX"] = false, ["ptBR"] = false, }, + ["Crit. rating"] = { + ["enUS"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, + }, ["Crit. chance"] = { ["enUS"] = true, ["deDE"] = "Kritische Chance", @@ -672,7 +682,7 @@ local statTranslations = { ["esMX"] = "Fallo de escarcha (Niv. + 3)", ["ptBR"] = "Erro de gelo (Nív. + 3)" }, - ["Holy Damage"] = { + ["Holy damage"] = { ["enUS"] = true, ["deDE"] = "Heiligschaden", ["frFR"] = "Dégats du sacré", @@ -722,7 +732,7 @@ local statTranslations = { ["esMX"] = "Fallo sagrado (Niv. + 3)", ["ptBR"] = "Erro sagrado (Nív. + 3)" }, - ["Nature Damage"] = { + ["Nature damage"] = { ["enUS"] = true, ["deDE"] = "Naturschaden", ["frFR"] = "Dégats de la nature", @@ -772,7 +782,7 @@ local statTranslations = { ["esMX"] = "Fallo de la naturaleza (Niv. + 3)", ["ptBR"] = "Erro de natureza (Nív. + 3)" }, - ["Physical Damage"] = { + ["Physical damage"] = { ["enUS"] = true, ["deDE"] = "Physischer Schaden", ["frFR"] = "Dégats physiques", @@ -822,7 +832,7 @@ local statTranslations = { ["esMX"] = "Fallo físico (Niv. + 3)", ["ptBR"] = "Erro físico (Nív. + 3)" }, - ["Shadow Damage"] = { + ["Shadow damage"] = { ["enUS"] = true, ["deDE"] = "Schattenschaden", ["frFR"] = "Dégats des ombres", From bb193ce3a0e39b1090e761719f318be6815c6a41 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Thu, 19 Feb 2026 04:26:03 +0100 Subject: [PATCH 17/21] wip --- Modules/Config/DefenseSection.lua | 256 ++++++++++-------- Modules/Config/SpellSection.lua | 64 +++-- Modules/Profile.lua | 140 +++++++--- Modules/Stats.lua | 111 +++++--- .../DefenseConfigTranslations.lua | 16 +- .../i18n/translations/StatTranslations.lua | 92 +------ 6 files changed, 356 insertions(+), 323 deletions(-) diff --git a/Modules/Config/DefenseSection.lua b/Modules/Config/DefenseSection.lua index c86ad084..08c0f37a 100755 --- a/Modules/Config/DefenseSection.lua +++ b/Modules/Config/DefenseSection.lua @@ -42,137 +42,111 @@ function _Config:LoadDefenseSection() Stats.RebuildStatInfos() end, }, - meleeCritReduction = { + resilienceRating = { type = "toggle", order = 2, - name = function() return i18n("Melee crit. reduction") end, - desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by melee attacks.") end, + name = function() return i18n("Resilience rating") end, + desc = function() return i18n("Shows/Hides the resilience rating.") end, width = 1.5, + hidden = function() return ECS.IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.meleeCritReduction.display; end, + get = function () return ExtendedCharacterStats.profile.defense.resilienceRating.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.meleeCritReduction.display = value + ExtendedCharacterStats.profile.defense.resilienceRating.display = value Stats.RebuildStatInfos() end, }, - rangedCritReduction = { + resilience = { type = "toggle", order = 2.1, - name = function() return i18n("Ranged crit. reduction") end, - desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by ranged attacks.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.rangedCritReduction.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.defense.rangedCritReduction.display = value - Stats.RebuildStatInfos() - end, - }, - spellCritReduction = { - type = "toggle", - order = 2.2, - name = function() return i18n("Spell crit. reduction") end, - desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by spells.") end, + name = function() return i18n("Resilience") end, + desc = function() return i18n("Shows/Hides the resilience damage reduction.") end, width = 1.5, + hidden = function() return ECS.IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.spellCritReduction.display; end, + get = function () return ExtendedCharacterStats.profile.defense.resilience.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.spellCritReduction.display = value + ExtendedCharacterStats.profile.defense.resilience.display = value Stats.RebuildStatInfos() end, }, - avoidance = { + defenseRating = { type = "toggle", order = 3, - name = function() return i18n("Avoidance") end, - desc = function() return i18n("Shows/Hides the total avoidance.") end, + 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, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.avoidance.display; end, + get = function () return ExtendedCharacterStats.profile.defense.defenseRating.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.avoidance.display = value + ExtendedCharacterStats.profile.defense.defenseRating.display = value Stats.RebuildStatInfos() end, }, - avoidanceBoss = { + defense = { type = "toggle", order = 3.1, - name = function() return i18n("Avoidance (Lvl +3)") end, - desc = function() return i18n("Shows/Hides the total avoidance (Lvl +3).") end, + name = function() return i18n("Defense") end, + desc = function() return i18n("Shows/Hides the defense value.") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.avoidanceBoss.display; end, + get = function () return ExtendedCharacterStats.profile.defense.defense.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.avoidanceBoss.display = value + ExtendedCharacterStats.profile.defense.defense.display = value Stats.RebuildStatInfos() end, }, - defenseRating = { + avoidance = { type = "toggle", order = 4, - name = function() return i18n("Defense rating") end, - desc = function() return i18n("Shows/Hides the defense rating.") end, + name = function() return i18n("Avoidance") end, + desc = function() return i18n("Shows/Hides the total avoidance.") end, width = 1.5, - hidden = function() return ECS.IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.defenseRating.display; end, + get = function () return ExtendedCharacterStats.profile.defense.avoidance.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.defenseRating.display = value + ExtendedCharacterStats.profile.defense.avoidance.display = value Stats.RebuildStatInfos() end, }, - defense = { + avoidanceBoss = { type = "toggle", order = 4.1, - name = function() return i18n("Defense") end, - desc = function() return i18n("Shows/Hides the defense value.") end, + name = function() return i18n("Avoidance (Lvl +3)") end, + desc = function() return i18n("Shows/Hides the total avoidance (Lvl +3).") end, width = 1.5, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.defense.display; end, + get = function () return ExtendedCharacterStats.profile.defense.avoidanceBoss.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.defense.display = value + ExtendedCharacterStats.profile.defense.avoidanceBoss.display = value Stats.RebuildStatInfos() end, }, - blockRating = { + dodgeRating = { type = "toggle", order = 5, - name = function() return i18n("Block rating") end, - desc = function() return i18n("Shows/Hides the block rating.") end, + name = function() return i18n("Dodge rating") end, + desc = function() return i18n("Shows/Hides the dodge rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.blockRating.display; end, + get = function () return ExtendedCharacterStats.profile.defense.dodgeRating.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.blockRating.display = value + ExtendedCharacterStats.profile.defense.dodgeRating.display = value Stats.RebuildStatInfos() end, }, - blockChance = { + dodge = { type = "toggle", order = 5.1, - name = function() return i18n("Block chance") end, - desc = function() return i18n("Shows/Hides the block chance.") end, - width = 1.5, - hidden = function() return not IsSpellKnown(107) end, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.blockChance.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.defense.blockChance.display = value - Stats.RebuildStatInfos() - end, - }, - blockValue = { - type = "toggle", - order = 5.2, - name = function() return i18n("Block value") end, - desc = function() return i18n("Shows/Hides the block value.") end, + name = function() return i18n("Dodge chance") end, + desc = function() return i18n("Shows/Hides the dodge chance.") end, width = 1.5, - hidden = function() return not DataUtils:CanBlock() end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.blockValue.display; end, + get = function () return ExtendedCharacterStats.profile.defense.dodge.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.blockValue.display = value + ExtendedCharacterStats.profile.defense.dodge.display = value Stats.RebuildStatInfos() end, }, @@ -204,60 +178,102 @@ function _Config:LoadDefenseSection() Stats.RebuildStatInfos() end, }, - dodgeRating = { - type = "toggle", + blockGroup = { + type = "group", order = 7, - name = function() return i18n("Dodge rating") end, - desc = function() return i18n("Shows/Hides the dodge rating.") end, - width = 1.5, - hidden = function() return ECS.IsClassic end, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.dodgeRating.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.defense.dodgeRating.display = value - Stats.RebuildStatInfos() - end, + inline = true, + name = function() return i18n("Block values") end, + args = { + rating = { + type = "toggle", + order = 5, + name = function() return i18n("Block rating") end, + desc = function() return i18n("Shows/Hides the block rating.") end, + width = 1.5, + hidden = function() return ECS.IsClassic end, + disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, + get = function () return ExtendedCharacterStats.profile.defense.blockRating.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.defense.blockRating.display = value + Stats.RebuildStatInfos() + end, + }, + chance = { + type = "toggle", + order = 5.1, + name = function() return i18n("Block chance") end, + desc = function() return i18n("Shows/Hides the block chance.") end, + width = 1.5, + hidden = function() return not IsSpellKnown(107) end, + disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, + get = function () return ExtendedCharacterStats.profile.defense.blockChance.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.defense.blockChance.display = value + Stats.RebuildStatInfos() + end, + }, + amount = { + type = "toggle", + order = 5.2, + name = function() return i18n("Blocked amount") end, + desc = function() return i18n("Shows/Hides the blocked amount.") end, + width = 1.5, + hidden = function() return not DataUtils:CanBlock() end, + disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, + get = function () return ExtendedCharacterStats.profile.defense.blockValue.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.defense.blockValue.display = value + Stats.RebuildStatInfos() + end, + }, + } }, - dodge = { - type = "toggle", - order = 7.1, - name = function() return i18n("Dodge chance") end, - desc = function() return i18n("Shows/Hides the dodge chance.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.dodge.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.defense.dodge.display = value - Stats.RebuildStatInfos() - end, - }, - resilienceRating = { - type = "toggle", + critReductionGroup = { + type = "group", order = 8, - name = function() return i18n("Resilience rating") end, - desc = function() return i18n("Shows/Hides the resilience rating.") end, - width = 1.5, - hidden = function() return ECS.IsClassic end, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.resilienceRating.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.defense.resilienceRating.display = value - Stats.RebuildStatInfos() - end, - }, - resilience = { - type = "toggle", - order = 8.1, - name = function() return i18n("Resilience") end, - desc = function() return i18n("Shows/Hides the resilience damage reduction.") end, - width = 1.5, - hidden = function() return ECS.IsClassic end, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.resilience.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.defense.resilience.display = value - Stats.RebuildStatInfos() - end, + inline = true, + name = function() return i18n("Crit. reduction values") end, + args = { + melee = { + type = "toggle", + order = 2, + name = function() return i18n("Melee crit. reduction") end, + desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by melee attacks.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, + get = function () return ExtendedCharacterStats.profile.defense.meleeCritReduction.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.defense.meleeCritReduction.display = value + Stats.RebuildStatInfos() + end, + }, + ranged = { + type = "toggle", + order = 2.1, + name = function() return i18n("Ranged crit. reduction") end, + desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by ranged attacks.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, + get = function () return ExtendedCharacterStats.profile.defense.rangedCritReduction.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.defense.rangedCritReduction.display = value + Stats.RebuildStatInfos() + end, + }, + spell = { + type = "toggle", + order = 2.2, + name = function() return i18n("Spell crit. reduction") end, + desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by spells.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, + get = function () return ExtendedCharacterStats.profile.defense.spellCritReduction.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.defense.spellCritReduction.display = value + Stats.RebuildStatInfos() + end, + }, + } }, }, } diff --git a/Modules/Config/SpellSection.lua b/Modules/Config/SpellSection.lua index bab9fd99..60fa2c35 100755 --- a/Modules/Config/SpellSection.lua +++ b/Modules/Config/SpellSection.lua @@ -27,33 +27,6 @@ function _Config:LoadSpellSection() Stats.RebuildStatInfos() end, }, - spellCritRating = { - type = "toggle", - order = 1, - name = function() return i18n("Spell crit. rating") end, - desc = function() return i18n("Shows/Hides the spell crit. rating.") end, - width = 1.5, - hidden = function() return ECS.IsClassic end, - disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spell.crit.rating.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.spell.crit.rating.display = value - Stats.RebuildStatInfos() - end, - }, - spellCrit = { - type = "toggle", - order = 1.1, - name = function() return i18n("Spell crit.") end, - desc = function() return i18n("Shows/Hides the spell crit. chance.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spell.crit.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.spell.crit.display = value - Stats.RebuildStatInfos() - end, - }, hasteRating = { type = "toggle", order = 2, @@ -94,10 +67,45 @@ function _Config:LoadSpellSection() Stats.RebuildStatInfos() end, }, - spellHitGroup = { + spellCritGroup = { type = "group", order = 5, inline = true, + name = function() return i18n("Spell crit values") end, + args = { + spellCritRating = { + type = "toggle", + order = 1, + name = function() return i18n("Spell crit. rating") end, + desc = function() return i18n("Shows/Hides the spell crit. rating.") end, + width = 1.5, + hidden = function() return ECS.IsClassic end, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spell.crit.rating.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spell.crit.rating.display = value + Stats.RebuildStatInfos() + end, + }, + spellCrit = { + type = "toggle", + order = 1.1, + name = function() return i18n("Spell crit.") end, + desc = function() return i18n("Shows/Hides the spell crit. chance.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spell.crit.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spell.crit.display = value + Stats.RebuildStatInfos() + end, + }, + } + }, + spellHitGroup = { + type = "group", + order = 6, + inline = true, name = function() return i18n("Spell hit values") end, args = { spellHitRating = { diff --git a/Modules/Profile.lua b/Modules/Profile.lua index 3acc538a..127864d2 100755 --- a/Modules/Profile.lua +++ b/Modules/Profile.lua @@ -19,7 +19,11 @@ local function GetDefaultStatsProfile() refName = "GeneralHeader", text = "General", - movementSpeed = {display = true, refName = "MovementSpeed", text = "Movement speed"}, + movementSpeed = { + display = true, + refName = "MovementSpeed", + text = "Movement speed" + }, }, melee = { @@ -281,32 +285,103 @@ local function GetDefaultStatsProfile() display = true, refName = "DefenseHeader", text = "Defense", - - armor = {display = true, refName = "Armor", text = "Armor"}, - meleeCritReduction = {display = true, refName = "MeleeCritReduction", text = "Melee crit. reduction"}, - rangedCritReduction = {display = true, refName = "RangedCritReduction", text = "Ranged crit. reduction"}, - spellCritReduction = {display = true, refName = "SpellCritReduction", text = "Spell crit. reduction"}, - avoidance = {display = true, refName = "Avoidance", text = "Avoidance"}, - avoidanceBoss = {display = true, refName = "AvoidanceBoss", text = "Avoidance (Lvl +3)"}, - defenseRating = { + armor = { display = true, - refName = "DefenseRating", - text = "Defense rating" + refName = "Armor", + text = "Armor" + }, + resilienceRating = { + display = true, + refName = "ResilienceRating", + text = "Resilience rating" }, - defense = {display = true, refName = "DefenseValue", text = "Defense"}, - blockRating = {display = true, refName = "BlockRating", text = "Block rating"}, - blockChance = {display = true, refName = "BlockChance", text = "Block chance"}, - blockValue = {display = true, refName = "BlockValue", text = "Block value"}, - parryRating = {display = true, refName = "ParryRating", text = "Parry rating"}, - parry = {display = true, refName = "ParryChance", text = "Parry chance"}, - dodgeRating = {display = true, refName = "DodgeRating", text = "Dodge rating"}, - dodge = {display = true, refName = "DodgeChance", text = "Dodge chance"}, - resilienceRating = {display = true,refName = "ResilienceRating", text = "Resilience rating"}, resilience = { display = true, refName = "Resilience", text = "Resilience" }, + defenseRating = { + display = true, + refName = "DefenseRating", + text = "Defense rating" + }, + defense = { + display = true, + refName = "DefenseValue", + text = "Defense" + }, + avoidance = { + display = true, + refName = "Avoidance", + text = "Avoidance" + }, + avoidanceBoss = { + display = true, + refName = "AvoidanceBoss", + text = "Avoidance (Lvl +3)" + }, + dodgeRating = { + display = true, + refName = "DodgeRating", + text = "Dodge rating" + }, + dodge = { + display = true, + refName = "DodgeChance", + text = "Dodge chance" + }, + parryRating = { + display = true, + refName = "ParryRating", + text = "Parry rating" + }, + parry = { + display = true, + refName = "ParryChance", + text = "Parry chance" + }, + block = { + display = true, + isSubGroup = true, + refName = "BlockHeader", + text = "Block", + rating = { + display = true, + refName = "BlockRating", + text = "Rating" + }, + chance = { + display = true, + refName = "BlockChance", + text = "Chance" + }, + amount = { + display = true, + refName = "BlockValue", + text = "Amount" + }, + }, + critReduction = { + display = true, + isSubGroup = true, + refName = "CritReductionHeader", + text = "Crit. reduction", + melee = { + display = true, + refName = "MeleeCritReduction", + text = "Melee" + }, + ranged = { + display = true, + refName = "RangedCritReduction", + text = "Ranged" + }, + spell = { + display = true, + refName = "SpellCritReduction", + text = "Spell" + }, + }, }, regen = { @@ -388,7 +463,7 @@ local function GetDefaultStatsProfile() rating = { display = true, refName = "SpellHitRating", - text = "Hit rating", + text = "Rating", textColor = colors.HIT_SECONDARY, statColor = colors.HIT_PRIMARY }, @@ -575,63 +650,66 @@ local function GetDefaultStatsProfile() textColor = colors.HASTE_RATING_SECONDARY, statColor = colors.HASTE_RATING_PRIMARY }, - penetration = {display = true, refName = "SpellPenetration", text = "Penetration"}, - + penetration = { + display = true, + refName = "SpellPenetration", + text = "Penetration" + }, crit = { display = true, rating = { display = true, refName = "SpellCritRating", - text = "Crit. rating", + text = "Rating", textColor = colors.CRIT_SECONDARY, statColor = colors.CRIT_PRIMARY }, arcane = { display = true, refName = "ArcaneCritChance", - text = "Arcane crit.", + text = "Arcane", textColor = colors.ARCANE_SECONDARY, statColor = colors.ARCANE_PRIMARY }, fire = { display = true, refName = "FireCritChance", - text = "Fire crit.", + text = "Fire", textColor = colors.FIRE_SECONDARY, statColor = colors.FIRE_PRIMARY }, frost = { display = true, refName = "FrostCritChance", - text = "Frost crit.", + text = "Frost", textColor = colors.FROST_SECONDARY, statColor = colors.FROST_PRIMARY }, holy = { display = true, refName = "HolyCritChance", - text = "Holy crit.", + text = "Holy", textColor = colors.HOLY_SECONDARY, statColor = colors.HOLY_PRIMARY }, nature = { display = true, refName = "NatureCritChance", - text = "Nature crit.", + text = "Nature", textColor = colors.NATURE_SECONDARY, statColor = colors.NATURE_PRIMARY }, physical = { display = true, refName = "PhysicalCritChance", - text = "Physical crit.", + text = "Physical", textColor = colors.PHYSICAL_SECONDARY, statColor = colors.PHYSICAL_PRIMARY }, shadow = { display = true, refName = "ShadowCritChance", - text = "Shadow crit.", + text = "Shadow.", textColor = colors.SHADOW_SECONDARY, statColor = colors.SHADOW_PRIMARY }, diff --git a/Modules/Stats.lua b/Modules/Stats.lua index 47c77140..7698744c 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -272,23 +272,35 @@ _CreateStatInfos = function() _CreateStatInfo( category, category.armor, - category.meleeCritReduction, - category.rangedCritReduction, - category.spellCritReduction, - category.avoidance, - category.avoidanceBoss, + ECS.IsClassic and nil or category.resilienceRating, + ECS.IsClassic and nil or category.resilience, (not ECS.IsClassic) and category.defenseRating or nil, category.defense, - (not ECS.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, - DataUtils:CanParry() and category.parry or nil, + category.avoidance, + category.avoidanceBoss, (not ECS.IsClassic) and category.dodgeRating or nil, category.dodge or nil, - ECS.IsClassic and nil or category.resilienceRating, - ECS.IsClassic and nil or category.resilience + (not ECS.IsClassic and DataUtils:CanParry()) and category.parryRating or nil, + DataUtils:CanParry() and category.parry or nil ) + if category.display then + if DataUtils:CanBlock() then + category = category.block + _CreateStatInfo( + category, + ECS.IsClassic and nil or category.rating, + category.chance, + category.value + ) + end + category = category.critReduction + _CreateStatInfo( + category, + category.melee, + category.ranged, + category.spell + ) + end if UnitHasMana("player") then category = profile.regen @@ -298,8 +310,6 @@ _CreateStatInfos = function() category = profile.spell local spellBonus = profile.spellBonus local spell = profile.spell - local spellCrit = spell.crit - local spellHit = spell.hit _CreateStatInfo( category, (not ECS.IsClassic) and category.hasteRating or nil, @@ -307,44 +317,55 @@ _CreateStatInfos = function() (not ECS.IsClassic) and category.penetrationRating or nil, category.penetration, spellBonus.bonusHealing, - (not ECS.IsClassic) and spellHit.rating or nil, - ECS.IsClassic and nil or spellCrit.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, - spell.arcane.display and spellHit.sameLevel.display and spellHit.arcaneMissChance or nil, - spell.arcane.display and spellHit.bossLevel.display and spellHit.arcaneMissChanceBoss or nil, spell.fire.display and spellBonus.fireDmg or nil, - spell.fire.display and spellCrit.display and spellCrit.fire or nil, - spell.fire.display and spellHit.bonus.display and spellHit.fireHitBonus or nil, - spell.fire.display and spellHit.sameLevel.display and spellHit.fireMissChance or nil, - spell.fire.display and spellHit.bossLevel.display and spellHit.fireMissChanceBoss or nil, spell.frost.display and spellBonus.frostDmg or nil, - spell.frost.display and spellCrit.display and spellCrit.frost or nil, - spell.frost.display and spellHit.bonus.display and spellHit.frostHitBonus or nil, - spell.frost.display and spellHit.sameLevel.display and spellHit.frostMissChance or nil, - spell.frost.display and spellHit.bossLevel.display and spellHit.frostMissChanceBoss or nil, spell.holy.display and spellBonus.holyDmg or nil, - spell.holy.display and spellCrit.display and spellCrit.holy or nil, - spell.holy.display and spellHit.bonus.display and spellHit.holyHitBonus or nil, - spell.holy.display and spellHit.sameLevel.display and spellHit.holyMissChance or nil, - spell.holy.display and spellHit.bossLevel.display and spellHit.holyMissChanceBoss or nil, spell.nature.display and spellBonus.natureDmg or nil, - spell.nature.display and spellCrit.display and spellCrit.nature or nil, - spell.nature.display and spellHit.bonus.display and spellHit.natureHitBonus or nil, - spell.nature.display and spellHit.sameLevel.display and spellHit.natureMissChance or nil, - spell.nature.display and spellHit.bossLevel.display and spellHit.natureMissChanceBoss or nil, spell.physical.display and spellBonus.physicalDmg or nil, - spell.physical.display and spellCrit.display and spellCrit.physical or nil, - spell.physical.display and spellHit.bonus.display and spellHit.physicalHitBonus or nil, - spell.physical.display and spellHit.sameLevel.display and spellHit.physicalMissChance or nil, - spell.physical.display and spellHit.bossLevel.display and spellHit.physicalMissChanceBoss or nil, - spell.shadow.display and spellBonus.shadowDmg or nil, - spell.shadow.display and spellCrit.display and spellCrit.shadow or nil, - spell.shadow.display and spellHit.bonus.display and spellHit.shadowHitBonus or nil, - spell.shadow.display and spellHit.sameLevel.display and spellHit.shadowMissChance or nil, - spell.shadow.display and spellHit.bossLevel.display and spellHit.shadowMissChanceBoss or nil + spell.shadow.display and spellBonus.shadowDmg or nil ) + if category.display then + local spellCrit = spell.crit + _CreateStatInfo( + category, + ECS.IsClassic and nil or spellCrit.rating, + spell.arcane.display and spellCrit.display and spellCrit.arcane or nil, + spell.fire.display and spellCrit.display and spellCrit.fire or nil, + spell.frost.display and spellCrit.display and spellCrit.frost or nil, + spell.holy.display and spellCrit.display and spellCrit.holy or nil, + spell.nature.display and spellCrit.display and spellCrit.nature or nil, + spell.physical.display and spellCrit.display and spellCrit.physical or nil, + spell.shadow.display and spellCrit.display and spellCrit.shadow or nil + ) + local spellHit = spell.hit + category = spellHit + _CreateStatInfo( + category, + ECS.IsClassic and nil or spellHit.rating, + spell.arcane.display and spellHit.bonus.display and spellHit.arcaneHitBonus or nil, + spell.fire.display and spellHit.bonus.display and spellHit.fireHitBonus or nil, + spell.frost.display and spellHit.bonus.display and spellHit.frostHitBonus or nil, + spell.holy.display and spellHit.bonus.display and spellHit.holyHitBonus or nil, + spell.nature.display and spellHit.bonus.display and spellHit.natureHitBonus or nil, + spell.physical.display and spellHit.bonus.display and spellHit.physicalHitBonus or nil, + spell.shadow.display and spellHit.bonus.display and spellHit.shadowHitBonus or nil, + spell.arcane.display and spellHit.sameLevel.display and spellHit.arcaneMissChance or nil, + spell.fire.display and spellHit.sameLevel.display and spellHit.fireMissChance or nil, + spell.frost.display and spellHit.sameLevel.display and spellHit.frostMissChance or nil, + spell.holy.display and spellHit.sameLevel.display and spellHit.holyMissChance or nil, + spell.nature.display and spellHit.sameLevel.display and spellHit.natureMissChance or nil, + spell.physical.display and spellHit.sameLevel.display and spellHit.physicalMissChance or nil, + spell.shadow.display and spellHit.sameLevel.display and spellHit.shadowMissChance or nil, + spell.arcane.display and spellHit.bossLevel.display and spellHit.arcaneMissChanceBoss or nil, + spell.fire.display and spellHit.bossLevel.display and spellHit.fireMissChanceBoss or nil, + spell.frost.display and spellHit.bossLevel.display and spellHit.frostMissChanceBoss or nil, + spell.holy.display and spellHit.bossLevel.display and spellHit.holyMissChanceBoss or nil, + spell.nature.display and spellHit.bossLevel.display and spellHit.natureMissChanceBoss or nil, + spell.physical.display and spellHit.bossLevel.display and spellHit.physicalMissChanceBoss or nil, + spell.shadow.display and spellHit.bossLevel.display and spellHit.shadowMissChanceBoss or nil + ) + end end --- Creates a new header in the stats UI diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index 6e62d5b3..1813205d 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -162,15 +162,15 @@ local defenseConfigTranslations = { ["esMX"] = "Muestra/oculta la probababilidad de bloquear", ["ptBR"] = "Mostra/oculta a chance de bloquear" }, - ["Shows/Hides the block value."] = { + ["Shows/Hides the blocked amount."] = { ["enUS"] = true, - ["deDE"] = "Zeigt/Versteckt die Blockwertung.", - ["frFR"] = "Affiche/cache le score de blocage.", - ["zhCN"] = "显示/隐藏 格挡值", - ["ruRU"] = "Показать/скрыть значение рейтинга блокирования", - ["esES"] = "Muestra/oculta el valor de bloqueo", - ["esMX"] = "Muestra/oculta el valor de bloqueo", - ["ptBR"] = "Muestra/oculta o valor de bloqueio" + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, }, ["Shows/Hides the parry chance."] = { ["enUS"] = true, diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index 241e559b..0b4be1e9 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -292,16 +292,6 @@ local statTranslations = { ["esMX"] = "Armadura", ["ptBR"] = "Armadura" }, - ["Crit. reduction"] = { - ["enUS"] = true, - ["deDE"] = "Krit. Reduzierung", - ["frFR"] = "Réduction des critiques", - ["zhCN"] = false, - ["ruRU"] = "Снижение крита", - ["esES"] = "Reducción de crít.", - ["esMX"] = "Reducción de crít.", - ["ptBR"] = "Redução de crítico" - }, ["Avoidance"] = { ["enUS"] = true, ["deDE"] = "Vermeidung", @@ -362,7 +352,7 @@ local statTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Block rating"] = { + ["Amount"] = { ["enUS"] = true, ["deDE"] = false, ["frFR"] = false, @@ -372,26 +362,6 @@ local statTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Block chance"] = { - ["enUS"] = true, - ["deDE"] = "Blockchance", - ["frFR"] = "Chances de bloquer", - ["zhCN"] = "格挡几率", - ["ruRU"] = "Шанс блока", - ["esES"] = "Probabilidad de bloquear", - ["esMX"] = "Probabilidad de bloquear", - ["ptBR"] = "Chance de bloquear" - }, - ["Block value"] = { - ["enUS"] = true, - ["deDE"] = "Blockwertung", - ["frFR"] = "Bloquer", - ["zhCN"] = "格挡值", - ["ruRU"] = "Блок", - ["esES"] = "Bloqueo", - ["esMX"] = "Bloqueo", - ["ptBR"] = "Bloqueio" - }, ["Parry chance"] = { ["enUS"] = true, ["deDE"] = "Parrierchance", @@ -592,16 +562,6 @@ local statTranslations = { ["esMX"] = "Daño de fuego", ["ptBR"] = "Dano de fogo" }, - ["Fire crit."] = { - ["enUS"] = true, - ["deDE"] = "Feuer Kritisch", - ["frFR"] = "Critique du feu", - ["zhCN"] = "火焰暴击", - ["ruRU"] = "Крит (огонь)", - ["esES"] = "Crítico de fuego", - ["esMX"] = "Crítico de fuego", - ["ptBR"] = "Crítico de fogo" - }, ["Fire hit bonus"] = { ["enUS"] = true, ["deDE"] = "Feuer Trefferchancebonus", @@ -642,16 +602,6 @@ local statTranslations = { ["esMX"] = "Daño de escarcha", ["ptBR"] = "Dano de gelo" }, - ["Frost crit."] = { - ["enUS"] = true, - ["deDE"] = "Frost Kritisch", - ["frFR"] = "Critique du givre", - ["zhCN"] = "冰霜暴击", - ["ruRU"] = "Крит (лед)", - ["esES"] = "Crítico de escarcha", - ["esMX"] = "Crítico de escarcha", - ["ptBR"] = "Crítico de gelo" - }, ["Frost hit bonus"] = { ["enUS"] = true, ["deDE"] = "Frost Trefferchancebonus", @@ -692,16 +642,6 @@ local statTranslations = { ["esMX"] = "Daño sagrado", ["ptBR"] = "Dano sagrado" }, - ["Holy crit."] = { - ["enUS"] = true, - ["deDE"] = "Heilig Kritisch", - ["frFR"] = "Critique du sacré", - ["zhCN"] = "神圣暴击", - ["ruRU"] = "Крит (свет)", - ["esES"] = "Crítico sagrado", - ["esMX"] = "Crítico sagrado", - ["ptBR"] = "Crítico sagrado" - }, ["Holy hit bonus"] = { ["enUS"] = true, ["deDE"] = "Heilig Trefferchancebonus", @@ -742,16 +682,6 @@ local statTranslations = { ["esMX"] = "Daño de la naturaleza", ["ptBR"] = "Dano de natureza" }, - ["Nature crit."] = { - ["enUS"] = true, - ["deDE"] = "Natur Kritisch", - ["frFR"] = "Critique de la nature", - ["zhCN"] = "自然暴击", - ["ruRU"] = "Крит (природа)", - ["esES"] = "Crítico de la naturaleza", - ["esMX"] = "Crítico de la naturaleza", - ["ptBR"] = "Crítico de natureza" - }, ["Nature hit bonus"] = { ["enUS"] = true, ["deDE"] = "Natur Trefferchancebonus", @@ -792,16 +722,6 @@ local statTranslations = { ["esMX"] = "Daño físico", ["ptBR"] = "Dano físico" }, - ["Physical crit."] = { - ["enUS"] = true, - ["deDE"] = "Physisch Kritisch", - ["frFR"] = "Critique physique", - ["zhCN"] = "物理暴击", - ["ruRU"] = "Крит (физ.)", - ["esES"] = "Crítico físico", - ["esMX"] = "Crítico físico", - ["ptBR"] = "Crítico físico" - }, ["Physical hit bonus"] = { ["enUS"] = true, ["deDE"] = "Physischer Trefferchancebonus", @@ -842,16 +762,6 @@ local statTranslations = { ["esMX"] = "Daño de las sombras", ["ptBR"] = "Dano de sombra" }, - ["Shadow crit."] = { - ["enUS"] = true, - ["deDE"] = "Schatten Kritisch", - ["frFR"] = "Critique des ombres", - ["zhCN"] = "暗影暴击", - ["ruRU"] = "Крит (тьма)", - ["esES"] = "Crítico de las sombras", - ["esMX"] = "Crítico de las sombras", - ["ptBR"] = "Crítico de sombra" - }, ["Shadow hit bonus"] = { ["enUS"] = true, ["deDE"] = "Schatten Trefferchancebonus", From f0b6aa91709082582c08b8887f318d505c3b21e2 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Thu, 19 Feb 2026 19:49:19 +0100 Subject: [PATCH 18/21] wip --- Modules/Config/DefenseSection.lua | 15 ++++--- Modules/Config/SpellSection.lua | 2 +- Modules/Profile.lua | 7 +++- .../DefenseConfigTranslations.lua | 40 +++++++++++++++++++ .../SpellConfigTranslations.lua | 10 +++++ .../i18n/translations/StatTranslations.lua | 10 +++++ 6 files changed, 74 insertions(+), 10 deletions(-) diff --git a/Modules/Config/DefenseSection.lua b/Modules/Config/DefenseSection.lua index 08c0f37a..ffa6ec87 100755 --- a/Modules/Config/DefenseSection.lua +++ b/Modules/Config/DefenseSection.lua @@ -183,10 +183,11 @@ function _Config:LoadDefenseSection() order = 7, inline = true, name = function() return i18n("Block values") end, + hidden = function() return not DataUtils:CanBlock() end, args = { rating = { type = "toggle", - order = 5, + order = 1, name = function() return i18n("Block rating") end, desc = function() return i18n("Shows/Hides the block rating.") end, width = 1.5, @@ -200,11 +201,10 @@ function _Config:LoadDefenseSection() }, chance = { type = "toggle", - order = 5.1, + order = 1.1, name = function() return i18n("Block chance") end, desc = function() return i18n("Shows/Hides the block chance.") end, width = 1.5, - hidden = function() return not IsSpellKnown(107) end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, get = function () return ExtendedCharacterStats.profile.defense.blockChance.display; end, set = function (_, value) @@ -214,11 +214,10 @@ function _Config:LoadDefenseSection() }, amount = { type = "toggle", - order = 5.2, + order = 1.2, name = function() return i18n("Blocked amount") end, desc = function() return i18n("Shows/Hides the blocked amount.") end, width = 1.5, - hidden = function() return not DataUtils:CanBlock() end, disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, get = function () return ExtendedCharacterStats.profile.defense.blockValue.display; end, set = function (_, value) @@ -236,7 +235,7 @@ function _Config:LoadDefenseSection() args = { melee = { type = "toggle", - order = 2, + order = 1, name = function() return i18n("Melee crit. reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by melee attacks.") end, width = 1.5, @@ -249,7 +248,7 @@ function _Config:LoadDefenseSection() }, ranged = { type = "toggle", - order = 2.1, + order = 1.1, name = function() return i18n("Ranged crit. reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by ranged attacks.") end, width = 1.5, @@ -262,7 +261,7 @@ function _Config:LoadDefenseSection() }, spell = { type = "toggle", - order = 2.2, + order = 1.2, name = function() return i18n("Spell crit. reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by spells.") end, width = 1.5, diff --git a/Modules/Config/SpellSection.lua b/Modules/Config/SpellSection.lua index 60fa2c35..a93f6dd3 100755 --- a/Modules/Config/SpellSection.lua +++ b/Modules/Config/SpellSection.lua @@ -71,7 +71,7 @@ function _Config:LoadSpellSection() type = "group", order = 5, inline = true, - name = function() return i18n("Spell crit values") end, + name = function() return i18n("Spell crit. values") end, args = { spellCritRating = { type = "toggle", diff --git a/Modules/Profile.lua b/Modules/Profile.lua index 127864d2..c8eca87b 100755 --- a/Modules/Profile.lua +++ b/Modules/Profile.lua @@ -340,6 +340,7 @@ local function GetDefaultStatsProfile() refName = "ParryChance", text = "Parry chance" }, + ---@type SubCategory block = { display = true, isSubGroup = true, @@ -361,6 +362,7 @@ local function GetDefaultStatsProfile() text = "Amount" }, }, + ---@type SubCategory critReduction = { display = true, isSubGroup = true, @@ -657,6 +659,9 @@ local function GetDefaultStatsProfile() }, crit = { display = true, + isSubGroup = true, + refName = "SpellCritHeader", + text = "Crit.", rating = { display = true, refName = "SpellCritRating", @@ -709,7 +714,7 @@ local function GetDefaultStatsProfile() shadow = { display = true, refName = "ShadowCritChance", - text = "Shadow.", + text = "Shadow", textColor = colors.SHADOW_SECONDARY, statColor = colors.SHADOW_PRIMARY }, diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index 1813205d..bbe37466 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -32,6 +32,36 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false, }, + ["Block chance"] = { + ["enUS"] = true, + ["deDE"] = "Blockchance", + ["frFR"] = "Chances de bloquer", + ["zhCN"] = "格挡几率", + ["ruRU"] = "Шанс блока", + ["esES"] = "Probabilidad de bloquear", + ["esMX"] = "Probabilidad de bloquear", + ["ptBR"] = "Chance de bloquear" + }, + ["Block values"] = { + ["enUS"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, + }, + ["Blocked amount"] = { + ["enUS"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, + }, ["Resilience rating"] = { ["enUS"] = true, ["deDE"] = false, @@ -42,6 +72,16 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false, }, + ["Crit. reduction values"] = { + ["enUS"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false + }, ["Melee crit. reduction"] = { ["enUS"] = true, ["deDE"] = false, diff --git a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua index 8e77e9e1..7aa99a27 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua @@ -222,6 +222,16 @@ local spellConfigTranslations = { ["esMX"] = "Muestra/oculta el valor de poder de sanación", ["ptBR"] = "Mostra/oculta o valor de poder de cura" }, + ["Spell crit. values"] = { + ["enUS"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false, + }, ["Spell crit. rating"] = { ["enUS"] = true, ["deDE"] = false, diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index 0b4be1e9..de24a48b 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -402,6 +402,16 @@ local statTranslations = { ["esMX"] = "Temple", ["ptBR"] = "Resiliência" }, + ["Crit. reduction"] = { + ["enUS"] = true, + ["deDE"] = false, + ["frFR"] = false, + ["zhCN"] = false, + ["ruRU"] = false, + ["esES"] = false, + ["esMX"] = false, + ["ptBR"] = false + }, ["Mana"] = { ["enUS"] = true, ["deDE"] = true, From 2f23430a9db8d1cfcadacbcfcda7fcfee9cb55fe Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Fri, 20 Feb 2026 06:27:51 +0100 Subject: [PATCH 19/21] wip --- Modules/Config/DefenseSection.lua | 54 ++-- Modules/Config/SpellSection.lua | 241 +++++++-------- Modules/Migration.lua | 3 + Modules/Profile.lua | 248 +++++++-------- Modules/Stats.lua | 70 +++-- .../i18n/translations/StatTranslations.lua | 290 ------------------ 6 files changed, 327 insertions(+), 579 deletions(-) diff --git a/Modules/Config/DefenseSection.lua b/Modules/Config/DefenseSection.lua index ffa6ec87..e42693ac 100755 --- a/Modules/Config/DefenseSection.lua +++ b/Modules/Config/DefenseSection.lua @@ -192,10 +192,13 @@ function _Config:LoadDefenseSection() desc = function() return i18n("Shows/Hides the block rating.") end, width = 1.5, hidden = function() return ECS.IsClassic end, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.blockRating.display; end, + disabled = function() + return (not ExtendedCharacterStats.profile.defense.display) or + (not ExtendedCharacterStats.profile.block.display) + end, + get = function () return ExtendedCharacterStats.profile.defense.block.rating.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.blockRating.display = value + ExtendedCharacterStats.profile.defense.block.rating.display = value Stats.RebuildStatInfos() end, }, @@ -205,10 +208,13 @@ function _Config:LoadDefenseSection() name = function() return i18n("Block chance") end, desc = function() return i18n("Shows/Hides the block chance.") end, width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.blockChance.display; end, + disabled = function() + return (not ExtendedCharacterStats.profile.defense.display) or + (not ExtendedCharacterStats.profile.block.display) + end, + get = function () return ExtendedCharacterStats.profile.defense.block.chance.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.blockChance.display = value + ExtendedCharacterStats.profile.defense.block.chance.display = value Stats.RebuildStatInfos() end, }, @@ -218,10 +224,13 @@ function _Config:LoadDefenseSection() name = function() return i18n("Blocked amount") end, desc = function() return i18n("Shows/Hides the blocked amount.") end, width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.blockValue.display; end, + disabled = function() + return (not ExtendedCharacterStats.profile.defense.display) or + (not ExtendedCharacterStats.profile.block.display) + end, + get = function () return ExtendedCharacterStats.profile.defense.block.amount.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.blockValue.display = value + ExtendedCharacterStats.profile.defense.block.amount.display = value Stats.RebuildStatInfos() end, }, @@ -239,10 +248,13 @@ function _Config:LoadDefenseSection() name = function() return i18n("Melee crit. reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by melee attacks.") end, width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.meleeCritReduction.display; end, + disabled = function() + return (not ExtendedCharacterStats.profile.defense.display) or + (not ExtendedCharacterStats.profile.critReduction.display) + end, + get = function () return ExtendedCharacterStats.profile.defense.critReduction.melee.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.meleeCritReduction.display = value + ExtendedCharacterStats.profile.defense.critReduction.melee.display = value Stats.RebuildStatInfos() end, }, @@ -252,10 +264,13 @@ function _Config:LoadDefenseSection() name = function() return i18n("Ranged crit. reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by ranged attacks.") end, width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.rangedCritReduction.display; end, + disabled = function() + return (not ExtendedCharacterStats.profile.defense.display) or + (not ExtendedCharacterStats.profile.critReduction.display) + end, + get = function () return ExtendedCharacterStats.profile.defense.critReduction.ranged.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.rangedCritReduction.display = value + ExtendedCharacterStats.profile.defense.critReduction.ranged.display = value Stats.RebuildStatInfos() end, }, @@ -265,10 +280,13 @@ function _Config:LoadDefenseSection() name = function() return i18n("Spell crit. reduction") end, desc = function() return i18n("Shows/Hides the reduction percentage of being critically hit by spells.") end, width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.defense.display); end, - get = function () return ExtendedCharacterStats.profile.defense.spellCritReduction.display; end, + disabled = function() + return (not ExtendedCharacterStats.profile.defense.display) or + (not ExtendedCharacterStats.profile.critReduction.display) + end, + get = function () return ExtendedCharacterStats.profile.defense.critReduction.spell.display; end, set = function (_, value) - ExtendedCharacterStats.profile.defense.spellCritReduction.display = value + ExtendedCharacterStats.profile.defense.critReduction.spell.display = value Stats.RebuildStatInfos() end, }, diff --git a/Modules/Config/SpellSection.lua b/Modules/Config/SpellSection.lua index a93f6dd3..94284fb7 100755 --- a/Modules/Config/SpellSection.lua +++ b/Modules/Config/SpellSection.lua @@ -67,10 +67,122 @@ function _Config:LoadSpellSection() Stats.RebuildStatInfos() end, }, - spellCritGroup = { + spellPower = { type = "group", order = 5, inline = true, + name = function() return i18n("Spell power") end, + args = { + bonusHealing = { + type = "toggle", + order = 1, + name = function() return i18n("Healing power") end, + desc = function() return i18n("Shows/Hides the healing power value.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spellBonus.bonusHealing.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spellBonus.bonusHealing.display = value + Stats.RebuildStatInfos() + end, + }, + arcane = { + type = "toggle", + order = 2, + name = function() return i18n("Arcane") end, + desc = function() return i18n("Shows/Hides the arcane damage value.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spellBonus.arcane.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spellBonus.arcane.display = value + Stats.RebuildStatInfos() + end, + }, + fire = { + type = "toggle", + order = 3, + name = function() return i18n("Fire") end, + desc = function() return i18n("Shows/Hides the fire damage value.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spellBonus.fire.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spellBonus.fire.display = value + Stats.RebuildStatInfos() + end, + }, + frost = { + type = "toggle", + order = 4, + name = function() return i18n("Frost") end, + desc = function() return i18n("Shows/Hides the frost damage value.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spellBonus.frost.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spellBonus.frost.display = value + Stats.RebuildStatInfos() + end, + }, + holy = { + type = "toggle", + order = 5, + name = function() return i18n("Holy") end, + desc = function() return i18n("Shows/Hides the holy damage value.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spellBonus.holy.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spellBonus.holy.display = value + Stats.RebuildStatInfos() + end, + }, + nature = { + type = "toggle", + order = 6, + name = function() return i18n("Nature") end, + desc = function() return i18n("Shows/Hides the nature damage value.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spellBonus.nature.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spellBonus.nature.display = value + Stats.RebuildStatInfos() + end, + }, + physical = { + type = "toggle", + order = 7, + name = function() return i18n("Physical") end, + desc = function() return i18n("Shows/Hides the physical damage value.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spellBonus.physical.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spellBonus.physical.display = value + Stats.RebuildStatInfos() + end, + }, + shadow = { + type = "toggle", + order = 8, + name = function() return i18n("Shadow") end, + desc = function() return i18n("Shows/Hides the shadow damage value.") end, + width = 1.5, + disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, + get = function () return ExtendedCharacterStats.profile.spellBonus.shadow.display; end, + set = function (_, value) + ExtendedCharacterStats.profile.spellBonus.shadow.display = value + Stats.RebuildStatInfos() + end, + }, + } + }, + spellCritGroup = { + type = "group", + order = 6, + inline = true, name = function() return i18n("Spell crit. values") end, args = { spellCritRating = { @@ -104,7 +216,7 @@ function _Config:LoadSpellSection() }, spellHitGroup = { type = "group", - order = 6, + order = 7, inline = true, name = function() return i18n("Spell hit values") end, args = { @@ -149,11 +261,11 @@ function _Config:LoadSpellSection() width = 1.5, disabled = function() return ((not ExtendedCharacterStats.profile.spell.display) or - (not ExtendedCharacterStats.profile.spell.hit.display)) + (not ExtendedCharacterStats.profile.spell.miss.display)) end, - get = function () return ExtendedCharacterStats.profile.spell.hit.sameLevel.display; end, + get = function () return ExtendedCharacterStats.profile.spell.miss.display; end, set = function (_, value) - ExtendedCharacterStats.profile.spell.hit.sameLevel.display = value + ExtendedCharacterStats.profile.spell.miss.display = value Stats.RebuildStatInfos() end, }, @@ -165,128 +277,17 @@ function _Config:LoadSpellSection() width = 1.5, disabled = function() return ((not ExtendedCharacterStats.profile.spell.display) or - (not ExtendedCharacterStats.profile.spell.hit.display)) + (not ExtendedCharacterStats.profile.spell.missBoss.display)) end, - get = function () return ExtendedCharacterStats.profile.spell.hit.bossLevel.display; end, + get = function () return ExtendedCharacterStats.profile.spell.missBoss.display; end, set = function (_, value) - ExtendedCharacterStats.profile.spell.hit.bossLevel.display = value + ExtendedCharacterStats.profile.spell.missBoss.display = value Stats.RebuildStatInfos() end, }, } }, - spellPower = { - type = "group", - order = 6, - inline = true, - name = function() return i18n("Spell power") end, - args = { - bonusHealing = { - type = "toggle", - order = 1, - name = function() return i18n("Healing power") end, - desc = function() return i18n("Shows/Hides the healing power value.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spellBonus.bonusHealing.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.spellBonus.bonusHealing.display = value - Stats.RebuildStatInfos() - end, - }, - arcaneDmg = { - type = "toggle", - order = 2, - name = function() return i18n("Arcane damage") end, - desc = function() return i18n("Shows/Hides the arcane damage value.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spellBonus.arcaneDmg.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.spellBonus.arcaneDmg.display = value - Stats.RebuildStatInfos() - end, - }, - fireDmg = { - type = "toggle", - order = 3, - name = function() return i18n("Fire damage") end, - desc = function() return i18n("Shows/Hides the fire damage value.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spellBonus.fireDmg.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.spellBonus.fireDmg.display = value - Stats.RebuildStatInfos() - end, - }, - frostDmg = { - type = "toggle", - order = 4, - name = function() return i18n("Frost damage") end, - desc = function() return i18n("Shows/Hides the frost damage value.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spellBonus.frostDmg.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.spellBonus.frostDmg.display = value - Stats.RebuildStatInfos() - end, - }, - holyDmg = { - type = "toggle", - order = 5, - name = function() return i18n("Holy damage") end, - desc = function() return i18n("Shows/Hides the holy damage value.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spellBonus.holyDmg.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.spellBonus.holyDmg.display = value - Stats.RebuildStatInfos() - end, - }, - natureDmg = { - type = "toggle", - order = 6, - name = function() return i18n("Nature damage") end, - desc = function() return i18n("Shows/Hides the nature damage value.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spellBonus.natureDmg.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.spellBonus.natureDmg.display = value - Stats.RebuildStatInfos() - end, - }, - physicalDmg = { - type = "toggle", - order = 7, - name = function() return i18n("Physical damage") end, - desc = function() return i18n("Shows/Hides the physical damage value.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spellBonus.physicalDmg.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.spellBonus.physicalDmg.display = value - Stats.RebuildStatInfos() - end, - }, - shadowDmg = { - type = "toggle", - order = 8, - name = function() return i18n("Shadow damage") end, - desc = function() return i18n("Shows/Hides the shadow damage value.") end, - width = 1.5, - disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, - get = function () return ExtendedCharacterStats.profile.spellBonus.shadowDmg.display; end, - set = function (_, value) - ExtendedCharacterStats.profile.spellBonus.shadowDmg.display = value - Stats.RebuildStatInfos() - end, - }, - } - } + }, } end diff --git a/Modules/Migration.lua b/Modules/Migration.lua index e6068677..8956fc98 100644 --- a/Modules/Migration.lua +++ b/Modules/Migration.lua @@ -17,6 +17,9 @@ function Migration:ToLatestProfileVersion(profileVersion) local defaultProfile = Profile:GetDefaultProfile() if profileVersion < 24 then + ExtendedCharacterStats.profile.spell.miss = defaultProfile.profile.spell.miss + ExtendedCharacterStats.profile.defense.critReduction = defaultProfile.profile.defense.critReduction + ExtendedCharacterStats.profile.defense.blockRating = defaultProfile.profile.defense.blockRating ExtendedCharacterStats.profile.defense.resilience = defaultProfile.profile.defense.resilience ExtendedCharacterStats.profile.melee.critRating = defaultProfile.profile.melee.critRating diff --git a/Modules/Profile.lua b/Modules/Profile.lua index c8eca87b..14ebbc7a 100755 --- a/Modules/Profile.lua +++ b/Modules/Profile.lua @@ -472,168 +472,170 @@ local function GetDefaultStatsProfile() bonus = { display = true, refName = "SpellHitBonus", - text = "Hit bonus", - textColor = colors.HIT_SECONDARY, - statColor = colors.HIT_PRIMARY - }, - sameLevel = { - display = true, - refName = "SpellHitSameLevel", - text = "Miss", - textColor = colors.HIT_SECONDARY, - statColor = colors.HIT_PRIMARY - }, - bossLevel = { - display = true, - refName = "SpellHitBossLevel", - text = "Miss (Lvl + 3)", + text = "Bonus", textColor = colors.HIT_SECONDARY, statColor = colors.HIT_PRIMARY }, arcaneHitBonus = { display = true, refName = "ArcaneHitBonus", - text = "Arcane hit bonus", - textColor = colors.ARCANE_SECONDARY, - statColor = colors.ARCANE_PRIMARY - }, - arcaneMissChance = { - display = true, - refName = "ArcaneMissChance", - text = "Arcane miss", - textColor = colors.ARCANE_SECONDARY, - statColor = colors.ARCANE_PRIMARY - }, - arcaneMissChanceBoss = { - display = true, - refName = "ArcaneMissChanceBoss", - text = "Arcane miss (Lvl + 3)", + text = "Arcane", textColor = colors.ARCANE_SECONDARY, statColor = colors.ARCANE_PRIMARY }, fireHitBonus = { display = true, refName = "FireHitBonus", - text = "Fire hit bonus", - textColor = colors.FIRE_SECONDARY, - statColor = colors.FIRE_PRIMARY - }, - fireMissChance = { - display = true, - refName = "FireMissChance", - text = "Fire miss", - textColor = colors.FIRE_SECONDARY, - statColor = colors.FIRE_PRIMARY - }, - fireMissChanceBoss = { - display = true, - refName = "FireMissChanceBoss", - text = "Fire miss (Lvl + 3)", + text = "Fire", textColor = colors.FIRE_SECONDARY, statColor = colors.FIRE_PRIMARY }, frostHitBonus = { display = true, refName = "FrostHitBonus", - text = "Frost hit bonus", - textColor = colors.FROST_SECONDARY, - statColor = colors.FROST_PRIMARY - }, - frostMissChance = { - display = true, - refName = "FrostMissChance", - text = "Frost miss", - textColor = colors.FROST_SECONDARY, - statColor = colors.FROST_PRIMARY - }, - frostMissChanceBoss = { - display = true, - refName = "FrostMissChanceBoss", - text = "Frost miss (Lvl + 3)", + text = "Frost", textColor = colors.FROST_SECONDARY, statColor = colors.FROST_PRIMARY }, holyHitBonus = { display = true, refName = "HolyHitBonus", - text = "Holy hit bonus", - textColor = colors.HOLY_SECONDARY, - statColor = colors.HOLY_PRIMARY - }, - holyMissChance = { - display = true, - refName = "HolyMissChance", - text = "Holy miss", - textColor = colors.HOLY_SECONDARY, - statColor = colors.HOLY_PRIMARY - }, - holyMissChanceBoss = { - display = true, - refName = "HolyMissChanceBoss", - text = "Holy miss (Lvl + 3)", + text = "Holy", textColor = colors.HOLY_SECONDARY, statColor = colors.HOLY_PRIMARY }, natureHitBonus = { display = true, refName = "NatureHitBonus", - text = "Nature hit bonus", - textColor = colors.NATURE_SECONDARY, - statColor = colors.NATURE_PRIMARY - }, - natureMissChance = { - display = true, - refName = "NatureMissChance", - text = "Nature miss", - textColor = colors.NATURE_SECONDARY, - statColor = colors.NATURE_PRIMARY - }, - natureMissChanceBoss = { - display = true, - refName = "NatureMissChanceBoss", - text = "Nature miss (Lvl + 3)", + text = "Nature", textColor = colors.NATURE_SECONDARY, statColor = colors.NATURE_PRIMARY }, physicalHitBonus = { display = true, refName = "PhysicalHitBonus", - text = "Physical hit bonus", + text = "Physical", textColor = colors.PHYSICAL_SECONDARY, statColor = colors.PHYSICAL_PRIMARY }, - physicalMissChance = { + shadowHitBonus = { display = true, - refName = "PhysicalMissChance", - text = "Physical miss", - textColor = colors.PHYSICAL_SECONDARY, - statColor = colors.PHYSICAL_PRIMARY + refName = "ShadowHitBonus", + text = "Shadow", + textColor = colors.SHADOW_SECONDARY, + statColor = colors.SHADOW_PRIMARY }, - physicalMissChanceBoss = { + }, + ---@type SubCategory + miss = { + display = true, + isSubGroup = true, + refName = "SpellMissHeader", + text = "Miss", + + arcane = { display = true, - refName = "PhysicalMissChanceBoss", - text = "Physical miss (Lvl + 3)", + refName = "ArcaneMissChance", + text = "Arcane", + textColor = colors.ARCANE_SECONDARY, + statColor = colors.ARCANE_PRIMARY + }, + fire = { + display = true, + refName = "FireMissChance", + text = "Fire", + textColor = colors.FIRE_SECONDARY, + statColor = colors.FIRE_PRIMARY + }, + frost = { + display = true, + refName = "FrostMissChance", + text = "Frost", + textColor = colors.FROST_SECONDARY, + statColor = colors.FROST_PRIMARY + }, + holy = { + display = true, + refName = "HolyMissChance", + text = "Holy", + textColor = colors.HOLY_SECONDARY, + statColor = colors.HOLY_PRIMARY + }, + nature = { + display = true, + refName = "NatureMissChance", + text = "Nature", + textColor = colors.NATURE_SECONDARY, + statColor = colors.NATURE_PRIMARY + }, + physical = { + display = true, + refName = "PhysicalMissChance", + text = "Physical", textColor = colors.PHYSICAL_SECONDARY, statColor = colors.PHYSICAL_PRIMARY }, - shadowHitBonus = { + shadow = { display = true, - refName = "ShadowHitBonus", - text = "Shadow hit bonus", + refName = "ShadowMissChance", + text = "Shadow", textColor = colors.SHADOW_SECONDARY, statColor = colors.SHADOW_PRIMARY }, - shadowMissChance = { + }, + ---@type SubCategory + missBoss = { + display = true, + isSubGroup = true, + refName = "SpellMissBossHeader", + text = "Miss (Lvl + 3)", + + arcane = { display = true, - refName = "ShadowMissChance", - text = "Shadow miss", - textColor = colors.SHADOW_SECONDARY, - statColor = colors.SHADOW_PRIMARY + refName = "ArcaneMissChanceBoss", + text = "Arcane", + textColor = colors.ARCANE_SECONDARY, + statColor = colors.ARCANE_PRIMARY }, - shadowMissChanceBoss = { + fire = { + display = true, + refName = "FireMissChanceBoss", + text = "Fire", + textColor = colors.FIRE_SECONDARY, + statColor = colors.FIRE_PRIMARY + }, + frost = { + display = true, + refName = "FrostMissChanceBoss", + text = "Frost", + textColor = colors.FROST_SECONDARY, + statColor = colors.FROST_PRIMARY + }, + holy = { + display = true, + refName = "HolyMissChanceBoss", + text = "Holy", + textColor = colors.HOLY_SECONDARY, + statColor = colors.HOLY_PRIMARY + }, + nature = { + display = true, + refName = "NatureMissChanceBoss", + text = "Nature", + textColor = colors.NATURE_SECONDARY, + statColor = colors.NATURE_PRIMARY + }, + physical = { + display = true, + refName = "PhysicalMissChanceBoss", + text = "Physical", + textColor = colors.PHYSICAL_SECONDARY, + statColor = colors.PHYSICAL_PRIMARY + }, + shadow = { display = true, refName = "ShadowMissChanceBoss", - text = "Shadow miss (Lvl + 3)", + text = "Shadow", textColor = colors.SHADOW_SECONDARY, statColor = colors.SHADOW_PRIMARY }, @@ -732,52 +734,52 @@ local function GetDefaultStatsProfile() textColor = colors.HEALING_SECONDARY, statColor = colors.HEALING_PRIMARY }, - arcaneDmg = { + arcane = { display = true, refName = "ArcaneDmg", - text = "Arcane damage", + text = "Arcane", textColor = colors.ARCANE_SECONDARY, statColor = colors.ARCANE_PRIMARY }, - fireDmg = { + fire = { display = true, refName = "FireDmg", - text = "Fire damage", + text = "Fire", textColor = colors.FIRE_SECONDARY, statColor = colors.FIRE_PRIMARY }, - frostDmg = { + frost = { display = true, refName = "FrostDmg", - text = "Frost damage", + text = "Frost", textColor = colors.FROST_SECONDARY, statColor = colors.FROST_PRIMARY }, - holyDmg = { + holy = { display = true, refName = "HolyDmg", - text = "Holy damage", + text = "Holy", textColor = colors.HOLY_SECONDARY, statColor = colors.HOLY_PRIMARY }, - natureDmg = { + nature = { display = true, refName = "NatureDmg", - text = "Nature damage", + text = "Nature", textColor = colors.NATURE_SECONDARY, statColor = colors.NATURE_PRIMARY }, - physicalDmg = { + physical = { display = true, refName = "PhysicalDmg", - text = "Physical damage", + text = "Physical", textColor = colors.PHYSICAL_SECONDARY, statColor = colors.PHYSICAL_PRIMARY }, - shadowDmg = { + shadow = { display = true, refName = "ShadowDmg", - text = "Shadow damage", + text = "Shadow", textColor = colors.SHADOW_SECONDARY, statColor = colors.SHADOW_PRIMARY }, diff --git a/Modules/Stats.lua b/Modules/Stats.lua index 7698744c..e16e10da 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -317,13 +317,13 @@ _CreateStatInfos = function() (not ECS.IsClassic) and category.penetrationRating or nil, category.penetration, spellBonus.bonusHealing, - spell.arcane.display and spellBonus.arcaneDmg or nil, - spell.fire.display and spellBonus.fireDmg or nil, - spell.frost.display and spellBonus.frostDmg or nil, - spell.holy.display and spellBonus.holyDmg or nil, - spell.nature.display and spellBonus.natureDmg or nil, - spell.physical.display and spellBonus.physicalDmg or nil, - spell.shadow.display and spellBonus.shadowDmg or nil + spell.arcane.display and spellBonus.arcane or nil, + spell.fire.display and spellBonus.fire or nil, + spell.frost.display and spellBonus.frost or nil, + spell.holy.display and spellBonus.holy or nil, + spell.nature.display and spellBonus.nature or nil, + spell.physical.display and spellBonus.physical or nil, + spell.shadow.display and spellBonus.shadow or nil ) if category.display then local spellCrit = spell.crit @@ -343,28 +343,42 @@ _CreateStatInfos = function() _CreateStatInfo( category, ECS.IsClassic and nil or spellHit.rating, - spell.arcane.display and spellHit.bonus.display and spellHit.arcaneHitBonus or nil, - spell.fire.display and spellHit.bonus.display and spellHit.fireHitBonus or nil, - spell.frost.display and spellHit.bonus.display and spellHit.frostHitBonus or nil, - spell.holy.display and spellHit.bonus.display and spellHit.holyHitBonus or nil, - spell.nature.display and spellHit.bonus.display and spellHit.natureHitBonus or nil, - spell.physical.display and spellHit.bonus.display and spellHit.physicalHitBonus or nil, - spell.shadow.display and spellHit.bonus.display and spellHit.shadowHitBonus or nil, - spell.arcane.display and spellHit.sameLevel.display and spellHit.arcaneMissChance or nil, - spell.fire.display and spellHit.sameLevel.display and spellHit.fireMissChance or nil, - spell.frost.display and spellHit.sameLevel.display and spellHit.frostMissChance or nil, - spell.holy.display and spellHit.sameLevel.display and spellHit.holyMissChance or nil, - spell.nature.display and spellHit.sameLevel.display and spellHit.natureMissChance or nil, - spell.physical.display and spellHit.sameLevel.display and spellHit.physicalMissChance or nil, - spell.shadow.display and spellHit.sameLevel.display and spellHit.shadowMissChance or nil, - spell.arcane.display and spellHit.bossLevel.display and spellHit.arcaneMissChanceBoss or nil, - spell.fire.display and spellHit.bossLevel.display and spellHit.fireMissChanceBoss or nil, - spell.frost.display and spellHit.bossLevel.display and spellHit.frostMissChanceBoss or nil, - spell.holy.display and spellHit.bossLevel.display and spellHit.holyMissChanceBoss or nil, - spell.nature.display and spellHit.bossLevel.display and spellHit.natureMissChanceBoss or nil, - spell.physical.display and spellHit.bossLevel.display and spellHit.physicalMissChanceBoss or nil, - spell.shadow.display and spellHit.bossLevel.display and spellHit.shadowMissChanceBoss or nil + spell.arcane.display and spellHit.bonus.display and spellHit.arcane or nil, + spell.fire.display and spellHit.bonus.display and spellHit.fire or nil, + spell.frost.display and spellHit.bonus.display and spellHit.frost or nil, + spell.holy.display and spellHit.bonus.display and spellHit.holy or nil, + spell.nature.display and spellHit.bonus.display and spellHit.nature or nil, + spell.physical.display and spellHit.bonus.display and spellHit.physical or nil, + spell.shadow.display and spellHit.bonus.display and spellHit.shadow or nil ) + local spellMiss = spell.miss + if spellMiss.display then + category = spellMiss + _CreateStatInfo( + category, + spell.arcane.display and category.arcane or nil, + spell.fire.display and category.fire or nil, + spell.frost.display and category.frost or nil, + spell.holy.display and category.holy or nil, + spell.nature.display and category.nature or nil, + spell.physical.display and category.physical or nil, + spell.shadow.display and category.shadow or nil + ) + end + local spellMissBoss = spell.missBoss + if spellMissBoss.display then + category = spellMissBoss + _CreateStatInfo( + category, + spell.arcane.display and category.arcane or nil, + spell.fire.display and category.fire or nil, + spell.frost.display and category.frost or nil, + spell.holy.display and category.holy or nil, + spell.nature.display and category.nature or nil, + spell.physical.display and category.physical or nil, + spell.shadow.display and category.shadow or nil + ) + end end end diff --git a/Modules/i18n/translations/StatTranslations.lua b/Modules/i18n/translations/StatTranslations.lua index de24a48b..c5b0b200 100644 --- a/Modules/i18n/translations/StatTranslations.lua +++ b/Modules/i18n/translations/StatTranslations.lua @@ -512,296 +512,6 @@ local statTranslations = { ["esMX"] = "Sanación", ["ptBR"] = "Poder de cura" }, - ["Arcane damage"] = { - ["enUS"] = true, - ["deDE"] = "Arkanschaden", - ["frFR"] = "Dégats des arcanes", - ["zhCN"] = "奥术伤害", - ["ruRU"] = "Тайная магия", - ["esES"] = "Daño arcano", - ["esMX"] = "Daño arcano", - ["ptBR"] = "Dano arcano" - }, - ["Arcane crit."] = { - ["enUS"] = true, - ["deDE"] = "Arkan Kritisch", - ["frFR"] = "Critique des arcanes", - ["zhCN"] = "奥术暴击", - ["ruRU"] = "Крит (ТМ)", - ["esES"] = "Crítico arcano", - ["esMX"] = "Crítico arcano", - ["ptBR"] = "Crítico arcano" - }, - ["Arcane hit bonus"] = { - ["enUS"] = true, - ["deDE"] = "Arkan Trefferchancebonus", - ["frFR"] = "Bonus de toucher des arcanes", - ["zhCN"] = "奥术命中加成", - ["ruRU"] = "Меткость (ТМ)", - ["esES"] = "Bonificación de golpe arcano", - ["esMX"] = "Bonificación de golpe arcano", - ["ptBR"] = "Bônus de acerto arcano" - }, - ["Arcane miss"] = { - ["enUS"] = true, - ["deDE"] = "Arkan Verfehlen", - ["frFR"] = "Rater des arcanes", - ["zhCN"] = "奥术未命中", - ["ruRU"] = "Сопротивление (ТМ)", - ["esES"] = "Fallo arcano", - ["esMX"] = "Fallo arcano", - ["ptBR"] = "Erro arcano" - }, - ["Arcane miss (Lvl + 3)"] = { - ["enUS"] = true, - ["deDE"] = "Arkan Verfehlen (Lvl + 3)", - ["frFR"] = "Rater des arcanes (Niv. + 3)", - ["zhCN"] = "奥术未命中(等级 + 3)", - ["ruRU"] = "Сопрот. (ТМ) (+3 ур.)", - ["esES"] = "Fallo arcano (Niv. + 3)", - ["esMX"] = "Fallo arcano (Niv. + 3)", - ["ptBR"] = "Erro arcano (Nív. + 3)" - }, - ["Fire damage"] = { - ["enUS"] = true, - ["deDE"] = "Feuerschaden", - ["frFR"] = "Dégats du feu", - ["zhCN"] = "火焰伤害", - ["ruRU"] = "Огонь", - ["esES"] = "Daño de fuego", - ["esMX"] = "Daño de fuego", - ["ptBR"] = "Dano de fogo" - }, - ["Fire hit bonus"] = { - ["enUS"] = true, - ["deDE"] = "Feuer Trefferchancebonus", - ["frFR"] = "Bonus de toucher du feu", - ["zhCN"] = "火焰命中加成", - ["ruRU"] = "Меткость (огонь)", - ["esES"] = "Bonificación de golpe de fuego", - ["esMX"] = "Bonificación de golpe de fuego", - ["ptBR"] = "Bônus de acerto de fogo" - }, - ["Fire miss"] = { - ["enUS"] = true, - ["deDE"] = "Feuer Verfehlen", - ["frFR"] = "Rater du feu", - ["zhCN"] = "火焰未命中", - ["ruRU"] = "Сопротивление (огонь)", - ["esES"] = "Fallo de fuego", - ["esMX"] = "Fallo de fuego", - ["ptBR"] = "Erro de fogo" - }, - ["Fire miss (Lvl + 3)"] = { - ["enUS"] = true, - ["deDE"] = "Feuer Verfehlen (Lvl + 3)", - ["frFR"] = "Rater du feu (Niv. + 3)", - ["zhCN"] = "火焰未命中(等级 + 3)", - ["ruRU"] = "Сопрот. (огонь) (+3 ур.)", - ["esES"] = "Fallo de fuego (Niv. + 3)", - ["esMX"] = "Fallo de fuego (Niv. + 3)", - ["ptBR"] = "Erro de fogo (Nív. + 3)" - }, - ["Frost damage"] = { - ["enUS"] = true, - ["deDE"] = "Frostschaden", - ["frFR"] = "Dégats du givre", - ["zhCN"] = "冰霜伤害", - ["ruRU"] = "Лед", - ["esES"] = "Daño de escarcha", - ["esMX"] = "Daño de escarcha", - ["ptBR"] = "Dano de gelo" - }, - ["Frost hit bonus"] = { - ["enUS"] = true, - ["deDE"] = "Frost Trefferchancebonus", - ["frFR"] = "Bonus de toucher du givre", - ["zhCN"] = "冰霜命中加成", - ["ruRU"] = "Меткость (лед)", - ["esES"] = "Bonificación de golpe de escarcha", - ["esMX"] = "Bonificación de golpe de escarcha", - ["ptBR"] = "Bônus de acerto de gelo" - }, - ["Frost miss"] = { - ["enUS"] = true, - ["deDE"] = "Frost Verfehlen", - ["frFR"] = "Rater du givre", - ["zhCN"] = "冰霜未命中", - ["ruRU"] = "Сопротивление (лед)", - ["esES"] = "Fallo de escarcha", - ["esMX"] = "Fallo de escarcha", - ["ptBR"] = "Erro de gelo" - }, - ["Frost miss (Lvl + 3)"] = { - ["enUS"] = true, - ["deDE"] = "Frost Verfehlen (Lvl + 3)", - ["frFR"] = "Rater du givre (Niv. + 3)", - ["zhCN"] = "冰霜未命中(等级 + 3)", - ["ruRU"] = "Сопрот. (лед) (+3 ур.)", - ["esES"] = "Fallo de escarcha (Niv. + 3)", - ["esMX"] = "Fallo de escarcha (Niv. + 3)", - ["ptBR"] = "Erro de gelo (Nív. + 3)" - }, - ["Holy damage"] = { - ["enUS"] = true, - ["deDE"] = "Heiligschaden", - ["frFR"] = "Dégats du sacré", - ["zhCN"] = "神圣伤害", - ["ruRU"] = "Свет", - ["esES"] = "Daño sagrado", - ["esMX"] = "Daño sagrado", - ["ptBR"] = "Dano sagrado" - }, - ["Holy hit bonus"] = { - ["enUS"] = true, - ["deDE"] = "Heilig Trefferchancebonus", - ["frFR"] = "Bonus de toucher du sacré", - ["zhCN"] = "神圣命中加成", - ["ruRU"] = "Меткость (свет)", - ["esES"] = "Bonificación de golpe sagrado", - ["esMX"] = "Bonificación de golpe sagrado", - ["ptBR"] = "Bônus de acerto sagrado" - }, - ["Holy miss"] = { - ["enUS"] = true, - ["deDE"] = "Heilig Verfehlen", - ["frFR"] = "Rater du sacré", - ["zhCN"] = "神圣未命中", - ["ruRU"] = "Сопротивление (свет)", - ["esES"] = "Fallo sagrado", - ["esMX"] = "Fallo sagrado", - ["ptBR"] = "Erro sagrado" - }, - ["Holy miss (Lvl + 3)"] = { - ["enUS"] = true, - ["deDE"] = "Heilig Verfehlen (Lvl + 3)", - ["frFR"] = "Rater du sacré (Niv. + 3)", - ["zhCN"] = "神圣未命中(等级 + 3)", - ["ruRU"] = "Сопрот. (свет) (+3 ур.)", - ["esES"] = "Fallo sagrado (Niv. + 3)", - ["esMX"] = "Fallo sagrado (Niv. + 3)", - ["ptBR"] = "Erro sagrado (Nív. + 3)" - }, - ["Nature damage"] = { - ["enUS"] = true, - ["deDE"] = "Naturschaden", - ["frFR"] = "Dégats de la nature", - ["zhCN"] = "自然伤害", - ["ruRU"] = "Природа", - ["esES"] = "Daño de la naturaleza", - ["esMX"] = "Daño de la naturaleza", - ["ptBR"] = "Dano de natureza" - }, - ["Nature hit bonus"] = { - ["enUS"] = true, - ["deDE"] = "Natur Trefferchancebonus", - ["frFR"] = "Bonus de toucher de la nature", - ["zhCN"] = "自然命中加成", - ["ruRU"] = "Меткость (природа)", - ["esES"] = "Bonificación de golpe de la naturaleza", - ["esMX"] = "Bonificación de golpe de la naturaleza", - ["ptBR"] = "Bônus de acerto de natureza" - }, - ["Nature miss"] = { - ["enUS"] = true, - ["deDE"] = "Natur Verfehlen", - ["frFR"] = "Rater de la nature", - ["zhCN"] = "自然未命中", - ["ruRU"] = "Сопротивление (природа)", - ["esES"] = "Fallo de la naturaleza", - ["esMX"] = "Fallo de la naturaleza", - ["ptBR"] = "Erro de natureza" - }, - ["Nature miss (Lvl + 3)"] = { - ["enUS"] = true, - ["deDE"] = "Natur Verfehlen (Lvl + 3)", - ["frFR"] = "Rater de la nature (Niv. + 3)", - ["zhCN"] = "自然未命中(等级 + 3)", - ["ruRU"] = "Сопрот. (природа) (+3 ур.)", - ["esES"] = "Fallo de la naturaleza (Niv. + 3)", - ["esMX"] = "Fallo de la naturaleza (Niv. + 3)", - ["ptBR"] = "Erro de natureza (Nív. + 3)" - }, - ["Physical damage"] = { - ["enUS"] = true, - ["deDE"] = "Physischer Schaden", - ["frFR"] = "Dégats physiques", - ["zhCN"] = "物理伤害", - ["ruRU"] = "Физ. урон", - ["esES"] = "Daño físico", - ["esMX"] = "Daño físico", - ["ptBR"] = "Dano físico" - }, - ["Physical hit bonus"] = { - ["enUS"] = true, - ["deDE"] = "Physischer Trefferchancebonus", - ["frFR"] = "Bonus de toucher physique", - ["zhCN"] = "物理命中加成", - ["ruRU"] = "Меткость (физ.)", - ["esES"] = "Bonificación de golpe físico", - ["esMX"] = "Bonificación de golpe físico", - ["ptBR"] = "Bônus de acerto físico" - }, - ["Physical miss"] = { - ["enUS"] = true, - ["deDE"] = "Physisch Verfehlen", - ["frFR"] = "Rater physique", - ["zhCN"] = "物理未命中", - ["ruRU"] = "Сопротивление (физ.)", - ["esES"] = "Fallo físico", - ["esMX"] = "Fallo físico", - ["ptBR"] = "Erro físico" - }, - ["Physical miss (Lvl + 3)"] = { - ["enUS"] = true, - ["deDE"] = "Physisch Verfehlen (Lvl + 3)", - ["frFR"] = "Rater physique (Niv. + 3)", - ["zhCN"] = "物理未命中(等级 + 3)", - ["ruRU"] = "Сопрот. (физ.) (+3 ур.)", - ["esES"] = "Fallo físico (Niv. + 3)", - ["esMX"] = "Fallo físico (Niv. + 3)", - ["ptBR"] = "Erro físico (Nív. + 3)" - }, - ["Shadow damage"] = { - ["enUS"] = true, - ["deDE"] = "Schattenschaden", - ["frFR"] = "Dégats des ombres", - ["zhCN"] = "暗影伤害", - ["ruRU"] = "Тьма", - ["esES"] = "Daño de las sombras", - ["esMX"] = "Daño de las sombras", - ["ptBR"] = "Dano de sombra" - }, - ["Shadow hit bonus"] = { - ["enUS"] = true, - ["deDE"] = "Schatten Trefferchancebonus", - ["frFR"] = "Bonus de toucher des ombres", - ["zhCN"] = "暗影命中加成", - ["ruRU"] = "Меткость (тьма)", - ["esES"] = "Bonificación de golpe de las sombras", - ["esMX"] = "Bonificación de golpe de las sombras", - ["ptBR"] = "Bônus de acerto de sombra" - }, - ["Shadow miss"] = { - ["enUS"] = true, - ["deDE"] = "Schatten Verfehlen", - ["frFR"] = "Rater des ombres", - ["zhCN"] = "暗影未命中", - ["ruRU"] = "Сопротивление (тьма)", - ["esES"] = "Fallo de las sombras", - ["esMX"] = "Fallo de las sombras", - ["ptBR"] = "Erro de sombra" - }, - ["Shadow miss (Lvl + 3)"] = { - ["enUS"] = true, - ["deDE"] = "Schatten Verfehlen (Lvl + 3)", - ["frFR"] = "Rater des ombres (Niv. + 3)", - ["zhCN"] = "暗影未命中(等级 + 3)", - ["ruRU"] = "Сопрот. (тьма) (+3 ур.)", - ["esES"] = "Fallo de las sombras (Niv. + 3)", - ["esMX"] = "Fallo de las sombras (Niv. + 3)", - ["ptBR"] = "Erro de sombra (Nív. + 3)" - }, } for k, v in pairs(statTranslations) do From c94af6b883578040d2307cf0b4af6f231781b4f3 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Fri, 20 Feb 2026 23:16:57 +0100 Subject: [PATCH 20/21] wip --- Modules/Migration.lua | 2 + .../DefenseConfigTranslations.lua | 60 ------------------- .../SpellConfigTranslations.lua | 10 ---- 3 files changed, 2 insertions(+), 70 deletions(-) diff --git a/Modules/Migration.lua b/Modules/Migration.lua index e202cf20..e1e308d0 100644 --- a/Modules/Migration.lua +++ b/Modules/Migration.lua @@ -21,6 +21,8 @@ function Migration:ToLatestProfileVersion(profileVersion) ExtendedCharacterStats.profile.defense.resilienceRating = ExtendedCharacterStats.profile.defense.resilience end if profileVersion < 25 then + ExtendedCharacterStats.profile.defense.resilience = ExtendedCharacterStats.profile.defense.resilience + ExtendedCharacterStats.profile.defense.resilienceRating = ExtendedCharacterStats.profile.defense.resilienceRating ExtendedCharacterStats.profile.spell.miss = defaultProfile.profile.spell.miss ExtendedCharacterStats.profile.defense.critReduction = defaultProfile.profile.defense.critReduction ExtendedCharacterStats.profile.defense.blockRating = defaultProfile.profile.defense.blockRating diff --git a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua index bbe37466..0ac92ab9 100644 --- a/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/DefenseConfigTranslations.lua @@ -22,36 +22,6 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Block rating"] = { - ["enUS"] = true, - ["deDE"] = false, - ["frFR"] = false, - ["zhCN"] = false, - ["ruRU"] = false, - ["esES"] = false, - ["esMX"] = false, - ["ptBR"] = false, - }, - ["Block chance"] = { - ["enUS"] = true, - ["deDE"] = "Blockchance", - ["frFR"] = "Chances de bloquer", - ["zhCN"] = "格挡几率", - ["ruRU"] = "Шанс блока", - ["esES"] = "Probabilidad de bloquear", - ["esMX"] = "Probabilidad de bloquear", - ["ptBR"] = "Chance de bloquear" - }, - ["Block values"] = { - ["enUS"] = true, - ["deDE"] = false, - ["frFR"] = false, - ["zhCN"] = false, - ["ruRU"] = false, - ["esES"] = false, - ["esMX"] = false, - ["ptBR"] = false, - }, ["Blocked amount"] = { ["enUS"] = true, ["deDE"] = false, @@ -82,36 +52,6 @@ local defenseConfigTranslations = { ["esMX"] = false, ["ptBR"] = false }, - ["Melee crit. reduction"] = { - ["enUS"] = true, - ["deDE"] = false, - ["frFR"] = false, - ["zhCN"] = false, - ["ruRU"] = false, - ["esES"] = false, - ["esMX"] = false, - ["ptBR"] = false - }, - ["Ranged crit. reduction"] = { - ["enUS"] = true, - ["deDE"] = false, - ["frFR"] = false, - ["zhCN"] = false, - ["ruRU"] = false, - ["esES"] = false, - ["esMX"] = false, - ["ptBR"] = false - }, - ["Spell crit. reduction"] = { - ["enUS"] = true, - ["deDE"] = false, - ["frFR"] = false, - ["zhCN"] = false, - ["ruRU"] = false, - ["esES"] = false, - ["esMX"] = false, - ["ptBR"] = false - }, ["Show defense stats"] = { ["enUS"] = true, ["deDE"] = "Verteidigungswerte anzeigen", diff --git a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua index 7aa99a27..0f235cfb 100644 --- a/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua +++ b/Modules/i18n/translations/ConfigTranslations/SpellConfigTranslations.lua @@ -232,16 +232,6 @@ local spellConfigTranslations = { ["esMX"] = false, ["ptBR"] = false, }, - ["Spell crit. rating"] = { - ["enUS"] = true, - ["deDE"] = false, - ["frFR"] = false, - ["zhCN"] = false, - ["ruRU"] = false, - ["esES"] = false, - ["esMX"] = false, - ["ptBR"] = false, - }, ["Shows/Hides the spell crit. rating."] = { ["enUS"] = true, ["deDE"] = false, From a8f4cb12ed283e8f78c8a261f1171caf8daa25dc Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Mon, 2 Mar 2026 22:24:42 +0100 Subject: [PATCH 21/21] revert --- Modules/Stats.lua | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Modules/Stats.lua b/Modules/Stats.lua index 774ed1e6..61007ad5 100755 --- a/Modules/Stats.lua +++ b/Modules/Stats.lua @@ -216,7 +216,7 @@ _CreateStatInfos = function() _CreateStatInfo( category, category.attackPower, - ECS.IsClassic and nil or category.critRating, + (not ECS.IsClassic) and category.critRating or nil, category.crit, ECS.IsWotlk and category.penetrationRating or nil, ECS.IsWotlk and category.penetration or nil, @@ -253,7 +253,7 @@ _CreateStatInfos = function() _CreateStatInfo( category, category.attackPower, - ECS.IsClassic and nil or category.critRating, + (not ECS.IsClassic) and category.critRating or nil, category.crit, ECS.IsWotlk and category.penetrationRating or nil, ECS.IsWotlk and category.penetration or nil, @@ -278,8 +278,8 @@ _CreateStatInfos = function() _CreateStatInfo( category, category.armor, - ECS.IsClassic and nil or category.resilienceRating, - ECS.IsClassic and nil or category.resilience, + (not ECS.IsClassic) and category.resilienceRating or nil, + (not ECS.IsClassic) and category.resilience or nil, (not ECS.IsClassic) and category.defenseRating or nil, category.defense, category.avoidance, @@ -294,7 +294,7 @@ _CreateStatInfos = function() category = category.block _CreateStatInfo( category, - ECS.IsClassic and nil or category.rating, + (not ECS.IsClassic) and category.rating or nil, category.chance, category.value ) @@ -335,7 +335,7 @@ _CreateStatInfos = function() local spellCrit = spell.crit _CreateStatInfo( category, - ECS.IsClassic and nil or spellCrit.rating, + (not ECS.IsClassic) and spellCrit.rating or nil, spell.arcane.display and spellCrit.display and spellCrit.arcane or nil, spell.fire.display and spellCrit.display and spellCrit.fire or nil, spell.frost.display and spellCrit.display and spellCrit.frost or nil, @@ -348,7 +348,7 @@ _CreateStatInfos = function() category = spellHit _CreateStatInfo( category, - ECS.IsClassic and nil or spellHit.rating, + (not ECS.IsClassic) and spellHit.rating or nil, spell.arcane.display and spellHit.bonus.display and spellHit.arcane or nil, spell.fire.display and spellHit.bonus.display and spellHit.fire or nil, spell.frost.display and spellHit.bonus.display and spellHit.frost or nil,