diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index c680ece713..a9af23e8b5 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -2213,6 +2213,14 @@ function calcs.offence(env, actor, activeSkill) else local critOverride = skillModList:Override(cfg, "CritChance") local baseCrit = critOverride or source.CritChance or 0 + + local baseCritFromMainHand = skillModList:Flag(cfg, "BaseCritFromMainHand") + if baseCritFromMainHand then + if actor.itemList["Weapon 1"] and actor.itemList["Weapon 1"].weaponData and actor.itemList["Weapon 1"].weaponData[1] then + baseCrit = actor.weaponData1.CritChance + end + end + if critOverride == 100 then output.PreEffectiveCritChance = 100 output.CritChance = 100 @@ -2242,10 +2250,11 @@ function calcs.offence(env, actor, activeSkill) end if breakdown and output.CritChance ~= baseCrit then breakdown.CritChance = { } + local baseCritFromMainHandStr = baseCritFromMainHand and " from main weapon" or "" if base ~= 0 then - t_insert(breakdown.CritChance, s_format("(%g + %g) ^8(base)", baseCrit, base)) + t_insert(breakdown.CritChance, s_format("(%g + %g) ^8(base%s)", baseCrit, base, baseCritFromMainHandStr)) else - t_insert(breakdown.CritChance, s_format("%g ^8(base)", baseCrit + base)) + t_insert(breakdown.CritChance, s_format("%g ^8(base%s)", baseCrit + base, baseCritFromMainHandStr)) end if inc ~= 0 then t_insert(breakdown.CritChance, s_format("x %.2f", 1 + inc/100).." ^8(increased/reduced)") diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 7ec867bdbe..f3d64619d8 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3668,6 +3668,7 @@ local specialModList = { ["when you lose temporal chains you gain maximum rage"] = { flag("Condition:CanGainRage") }, ["your critical strike multiplier is (%d+)%%"] = function(num) return { mod("CritMultiplier", "OVERRIDE", num) } end, ["base critical strike chance for attacks with weapons is ([%d%.]+)%%"] = function(num) return { mod("WeaponBaseCritChance", "OVERRIDE", num) } end, + ["base critical strike chance of spells is the critical strike chance of your main hand weapon"] = { flag("BaseCritFromMainHand", nil, ModFlag.Spell) }, ["critical strike chance is (%d+)%% for hits with this weapon"] = function(num) return { mod("CritChance", "OVERRIDE", num, nil, ModFlag.Hit, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }) } end, ["maximum critical strike chance is (%d+)%%"] = function(num) return { mod("CritChanceCap", "OVERRIDE", num),