diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 7b1d0c3f77..e7d42d83f9 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -2000,7 +2000,7 @@ c["10% chance for Energy Shield Recharge to start when you use a Skill Eldritch c["10% chance on Hitting an Enemy for all Impales on that Enemy to last for an additional Hit"]={{[1]={flags=0,keywordFlags=0,name="ImpaleAdditionalDurationChance",type="BASE",value=10}},nil} c["10% chance that if you would gain a Crab Barrier, you instead gain up to"]={{}," that if you would gain a Crab Barrier, you instead gain up to "} c["10% chance that if you would gain a Crab Barrier, you instead gain up to your maximum number of Crab Barriers"]={{[1]={flags=0,keywordFlags=0,name="CrabBarriersMax",type="BASE",value=10}}," that if you would gain a Crab Barrier, you instead gain up to your "} -c["10% chance to Aggravate Bleeding on targets you Hit with Attacks"]={{}," to Aggravate Bleeding on targets you Hit "} +c["10% chance to Aggravate Bleeding on targets you Hit with Attacks"]={{[1]={flags=0,keywordFlags=65536,name="AggravateChance",type="BASE",value=10}},nil} c["10% chance to Avoid Bleeding"]={{[1]={flags=0,keywordFlags=0,name="AvoidBleed",type="BASE",value=10}},nil} c["10% chance to Avoid Elemental Ailments"]={{[1]={flags=0,keywordFlags=0,name="AvoidElementalAilments",type="BASE",value=10}},nil} c["10% chance to Avoid Elemental Ailments while Phasing"]={{[1]={[1]={type="Condition",var="Phasing"},flags=0,keywordFlags=0,name="AvoidElementalAilments",type="BASE",value=10}},nil} @@ -3879,12 +3879,9 @@ c["25% chance that if you would gain Endurance Charges, you instead gain up to m c["25% chance that if you would gain Endurance Charges, you instead gain up to maximum Endurance Charges Gain 1 Endurance Charge every second if you've been Hit Recently +1 to Maximum Endurance Charges"]={{[1]={[1]={type="Condition",var="BeenHitRecently"},flags=0,keywordFlags=0,name="EnduranceChargesMax",type="BASE",value=25}}," that if you would gain Endurance Charges, you instead gain up to Gain 1 Endurance Charge every second +1 to Maximum Endurance Charges "} c["25% chance that if you would gain Power Charges, you instead gain up to"]={{}," that if you would gain Power Charges, you instead gain up to "} c["25% chance that if you would gain Power Charges, you instead gain up to your maximum number of Power Charges"]={{}," that if you would gain Power Charges, you instead gain up to your maximum number of Power Charges "} -c["25% chance to Aggravate Bleeding on targets you Critically Strike with Attacks"]={{}," to Aggravate Bleeding on targets you Critically Strike "} -c["25% chance to Aggravate Bleeding on targets you Hit with Attacks"]={{}," to Aggravate Bleeding on targets you Hit "} -c["25% chance to Aggravate Bleeding on targets you Hit with Attacks Gain 50% Chance to Block from Equipped Shield instead of the Shield's value"]={{[1]={flags=0,keywordFlags=65536,name="BlockChance",type="BASE",value=25}}," to Aggravate Bleeding on targets you Hit Gain 50% from Equipped Shield instead of the Shield's value "} -c["25% chance to Aggravate Bleeding on targets you Hit with Attacks Gain 50% Chance to Block from Equipped Shield instead of the Shield's value Inherent Bonuses from Dual Wielding are doubled"]={{[1]={flags=0,keywordFlags=65536,name="BlockChance",type="BASE",value=25}}," to Aggravate Bleeding on targets you Hit Gain 50% from Equipped Shield instead of the Shield's value Inherent Bonuses from Dual Wielding are doubled "} -c["25% chance to Aggravate Bleeding on targets you Hit with Attacks Gain 50% Chance to Block from Equipped Shield instead of the Shield's value Inherent Bonuses from Dual Wielding are doubled Deal 1% more Damage with Hits and Ailments to Rare and Unique Enemies for every 2 seconds they've ever been in your Presence, up to a maximum of 50%"]={{[1]={flags=0,keywordFlags=65536,name="BlockChance",type="BASE",value=25}}," to Aggravate Bleeding on targets you Hit Gain 50% from Equipped Shield instead of the Shield's value Inherent Bonuses from Dual Wielding are doubled Deal 1% more Damage with Hits and Ailments to Rare and Unique Enemies for every 2 seconds they've ever been in your Presence, up to a maximum of 50% "} -c["25% chance to Aggravate Bleeding on targets you Hit with Exerted Attacks"]={{}," to Aggravate Bleeding on targets you Hit with Exerted Attacks "} +c["25% chance to Aggravate Bleeding on targets you Critically Strike with Attacks"]={{[1]={flags=1,keywordFlags=0,name="AggravateChanceOnCrit",type="BASE",value=25}},nil} +c["25% chance to Aggravate Bleeding on targets you Hit with Attacks"]={{[1]={flags=0,keywordFlags=65536,name="AggravateChance",type="BASE",value=25}},nil} +c["25% chance to Aggravate Bleeding on targets you Hit with Exerted Attacks"]={{[1]={flags=1,keywordFlags=0,name="ExertAggravateChance",type="BASE",value=25}},nil} c["25% chance to Avoid Elemental Ailments"]={{[1]={flags=0,keywordFlags=0,name="AvoidElementalAilments",type="BASE",value=25}},nil} c["25% chance to Avoid Elemental Ailments while Phasing"]={{[1]={[1]={type="Condition",var="Phasing"},flags=0,keywordFlags=0,name="AvoidElementalAilments",type="BASE",value=25}},nil} c["25% chance to Avoid Fire Damage from Hits"]={{[1]={flags=0,keywordFlags=0,name="AvoidFireDamageChance",type="BASE",value=25}},nil} @@ -5224,7 +5221,7 @@ c["50% chance for Hits to ignore Enemy Physical Damage Reduction while you have c["50% chance for Impales on Enemies you Kill to Reflect Damage to surrounding Enemies"]={{[1]={flags=0,keywordFlags=0,name="Damage",type="BASE",value=50}}," for Impales you Kill to Reflect to surrounding Enemies "} c["50% chance for Spell Hits against you to inflict Poison"]={{}," for Hits to inflict Poison "} c["50% chance for used Retaliation Skills to remain Usable and not consume a Cooldown Use"]={{[1]={flags=0,keywordFlags=0,name="AdditionalCooldownUses",type="BASE",value=50}}," for used Retaliation Skills to remain Usable and not consume a "} -c["50% chance to Aggravate Bleeding on targets you Stun with Attacks Hits"]={{}," to Aggravate Bleeding on targets you Stun Hits "} +c["50% chance to Aggravate Bleeding on targets you Stun with Attacks Hits"]={{[1]={[1]={type="Condition",var="StunnedEnemyRecently"},flags=1,keywordFlags=0,name="AggravateChance",type="BASE",value=50}},nil} c["50% chance to Avoid being Chilled"]={{[1]={flags=0,keywordFlags=0,name="AvoidChill",type="BASE",value=50}},nil} c["50% chance to Avoid being Frozen"]={{[1]={flags=0,keywordFlags=0,name="AvoidFreeze",type="BASE",value=50}},nil} c["50% chance to Avoid being Stunned while Channelling"]={{[1]={[1]={type="Condition",var="Channelling"},flags=0,keywordFlags=0,name="AvoidStun",type="BASE",value=50}},nil} @@ -7261,7 +7258,7 @@ c["Bleeding you inflict deals Damage 10% faster"]={{[1]={flags=0,keywordFlags=0, c["Bleeding you inflict deals Damage 15% faster"]={{[1]={flags=0,keywordFlags=0,name="BleedFaster",type="INC",value=15}},nil} c["Bleeding you inflict deals Damage 4% faster per Frenzy Charge"]={{[1]={[1]={type="Multiplier",var="FrenzyCharge"},flags=0,keywordFlags=0,name="BleedFaster",type="INC",value=4}},nil} c["Bleeding you inflict deals Damage 5% faster"]={{[1]={flags=0,keywordFlags=0,name="BleedFaster",type="INC",value=5}},nil} -c["Bleeding you inflict is Aggravated"]={nil,"Bleeding you inflict is Aggravated "} +c["Bleeding you inflict is Aggravated"]={{[1]={flags=0,keywordFlags=0,name="BleedingYouInflictIsAggravated",type="FLAG",value=true}},nil} c["Bleeding you inflict is Reflected to you"]={nil,"Bleeding you inflict is Reflected to you "} c["Bleeding you inflict is Reflected to you +1% to Chaos Resistance per Poison on you"]={nil,"Bleeding you inflict is Reflected to you +1% to Chaos Resistance per Poison on you "} c["Blight has 30% increased Hinder Duration"]={{[1]={[1]={includeTransfigured=true,skillName="Blight",type="SkillName"},flags=0,keywordFlags=0,name="Duration",type="INC",value=30}}," Hinder "} @@ -11847,7 +11844,7 @@ c["You take no Extra Damage from Critical Strikes while Elusive"]={{[1]={[1]={ty c["Your Action Speed is at least 108% of base value"]={{[1]={flags=0,keywordFlags=0,name="MinimumActionSpeed",type="MAX",value=108}},nil} c["Your Aura Buffs do not affect allies"]={{[1]={flags=0,keywordFlags=0,name="SelfAurasCannotAffectAllies",type="FLAG",value=true}},nil} c["Your Aura Skills are Disabled"]={{[1]={[1]={skillType=43,type="SkillType"},flags=0,keywordFlags=0,name="DisableSkill",type="FLAG",value=true}},nil} -c["Your Bleeding does not deal extra Damage while the Enemy is moving and cannot be Aggravated"]={{[1]={flags=0,keywordFlags=0,name="Condition:NoExtraBleedDamageToMovingEnemy",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="Condition:CannotAggravate",type="FLAG",value=true}},nil} +c["Your Bleeding does not deal extra Damage while the Enemy is moving and cannot be Aggravated"]={{[1]={flags=0,keywordFlags=0,name="NoExtraBleedDamageToMovingEnemy",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="CannotAggravateBleeding",type="FLAG",value=true}},nil} c["Your Blessing Skills are Disabled"]={{[1]={[1]={skillType=119,type="SkillType"},flags=0,keywordFlags=0,name="DisableSkill",type="FLAG",value=true}},nil} c["Your Chaos Damage Poisons Enemies"]={{[1]={flags=0,keywordFlags=0,name="ChaosPoisonChance",type="BASE",value=100}},nil} c["Your Chaos Damage can Chill"]={{[1]={flags=0,keywordFlags=0,name="ChaosCanChill",type="FLAG",value=true}},nil} diff --git a/src/Data/Spectres.lua b/src/Data/Spectres.lua index fc55c0cb18..f385af9ee6 100644 --- a/src/Data/Spectres.lua +++ b/src/Data/Spectres.lua @@ -5702,7 +5702,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/ReaperHigh"] = { mod("BleedChance", "BASE", 100, 0, 0), -- MonsterBleedImplicit [global_bleed_on_hit = 1] -- MonsterNearbyEnemyLifeRegenReduced50 [life_mastery_nearby_enemy_life_regeneration_rate_+% = -50] mod("BleedStacksMax", "OVERRIDE", 16, 0, 0), -- MonsterBleedingStacksAzmeriReaper [bleeding_stacks_up_to_x_times = 16] - flag("Condition:NoExtraBleedDamageToMovingEnemy"), --This mod is not currently working correctly, + flag("NoExtraBleedDamageToMovingEnemy"), }, } -- Sanguimancer Demon diff --git a/src/Export/Minions/Spectres.txt b/src/Export/Minions/Spectres.txt index b43fcdd95b..7c096c747c 100644 --- a/src/Export/Minions/Spectres.txt +++ b/src/Export/Minions/Spectres.txt @@ -362,7 +362,7 @@ local minions, mod, flag = ... #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/ReaperLow #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/ReaperMid #monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/ReaperHigh -#mod flag("Condition:NoExtraBleedDamageToMovingEnemy"), --This mod is not currently working correctly +#mod flag("NoExtraBleedDamageToMovingEnemy") #emit -- Sanguimancer Demon #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/ShepherdLow diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 6393f3f9a6..0b1495881d 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -2580,18 +2580,21 @@ function calcs.offence(env, actor, activeSkill) local moreExertedAttackDamage = skillModList:Sum("MORE", cfg, "ExertAttackIncrease") local overexertionExertedDamage = skillModList:Sum("MORE", cfg, "OverexertionExertAverageIncrease") local echoesOfCreationExertedDamage = skillModList:Sum("MORE", cfg, "EchoesExertAverageIncrease") + local exertAggravateChance = skillModList:Sum("BASE", cfg, "ExertAggravateChance") if activeSkill.skillModList:Flag(nil, "Condition:WarcryMaxHit") then skillModList:NewMod("Damage", "INC", incExertedAttacks, "Exerted Attacks") skillModList:NewMod("Damage", "MORE", moreExertedAttacks, "Exerted Attacks") skillModList:NewMod("Damage", "MORE", moreExertedAttackDamage, "Exerted Attack Damage", ModFlag.Attack) skillModList:NewMod("Damage", "MORE", overexertionExertedDamage * exertingWarcryCount, "Max Autoexertion Support") skillModList:NewMod("Damage", "MORE", echoesOfCreationExertedDamage * exertingWarcryCount, "Max Echoes of Creation") + skillModList:NewMod("AggravateChance", "BASE", exertAggravateChance, "Exerted Attacks") else skillModList:NewMod("Damage", "INC", incExertedAttacks * globalOutput.ExertedAttackUptimeRatio / 100, "Uptime Scaled Exerted Attacks") skillModList:NewMod("Damage", "MORE", moreExertedAttacks * globalOutput.ExertedAttackUptimeRatio / 100, "Uptime Scaled Exerted Attacks") skillModList:NewMod("Damage", "MORE", moreExertedAttackDamage * globalOutput.ExertedAttackUptimeRatio / 100, "Uptime Scaled Exerted Attack Damage", ModFlag.Attack) skillModList:NewMod("Damage", "MORE", overexertionExertedDamage * globalOutput.GlobalWarcryUptimeRatio / 100, "Uptime Scaled Autoexertion Support") skillModList:NewMod("Damage", "MORE", echoesOfCreationExertedDamage * globalOutput.GlobalWarcryUptimeRatio / 100, "Uptime Scaled Echoes of Creation") + skillModList:NewMod("AggravateChance", "BASE", exertAggravateChance * globalOutput.GlobalWarcryUptimeRatio / 100, "Uptime Scaled Exerted Attacks") end globalOutput.ExertedAttackAvgDmg = calcLib.mod(skillModList, skillCfg, "ExertIncrease") globalOutput.ExertedAttackAvgDmg = globalOutput.ExertedAttackAvgDmg * calcLib.mod(skillModList, skillCfg, "ExertAttackIncrease", "OverexertionExertAverageIncrease", "EchoesExertAverageIncrease") @@ -3622,6 +3625,7 @@ function calcs.offence(env, actor, activeSkill) else output.BleedChanceOnCrit = m_min(100, skillModList:Sum("BASE", cfg, "BleedChance") + enemyDB:Sum("BASE", nil, "SelfBleedChance")) end + output.AggravateChanceOnCrit = m_min(100, skillModList:Sum("BASE", cfg, "AggravateChance", "AggravateChanceOnCrit")) if not skillFlags.hit or skillModList:Flag(cfg, "CannotPoison") then output.PoisonChanceOnCrit = 0 else @@ -3643,6 +3647,7 @@ function calcs.offence(env, actor, activeSkill) else output.BleedChanceOnHit = m_min(100, skillModList:Sum("BASE", cfg, "BleedChance") + enemyDB:Sum("BASE", nil, "SelfBleedChance")) end + output.AggravateChanceOnHit = m_min(100, skillModList:Sum("BASE", cfg, "AggravateChance")) if not skillFlags.hit or skillModList:Flag(cfg, "CannotPoison") then output.PoisonChanceOnHit = 0 output.ChaosPoisonChance = 0 @@ -3821,6 +3826,36 @@ function calcs.offence(env, actor, activeSkill) end -- Calculate bleeding chance and damage + output.NumberOfHitsToAggravate = -1 + local bleedIsAggravated = skillModList:Flag(cfg, "BleedingYouInflictIsAggravated") or (env.partyMembers.output.AggravateOldBleedsChance and (env.partyMembers.output.AggravateOldBleedsChance > 0)) + if bleedIsAggravated or ((output.AggravateChanceOnHit + output.AggravateChanceOnCrit) > 0) then + local aggravateOldBleedsChance = output.AggravateChanceOnHit * (1 - output.CritChance / 100) + output.AggravateChanceOnCrit * output.CritChance / 100 + output.AggravateOldBleedsChance = output.HitChance / 100 * aggravateOldBleedsChance + if not skillModList:Flag(cfg, "CannotAggravateBleeding") then + output.AggravateChance = m_min(100, output.AggravateOldBleedsChance + (bleedIsAggravated and 100 or 0)) + output.NumberOfHitsToAggravate = (not bleedIsAggravated and ((output.AggravateOldBleedsChance == 0) and -1 or 100 / output.AggravateOldBleedsChance )) or 0 + end + if globalBreakdown and not globalBreakdown.AggravateChance then + if skillModList:Flag(cfg, "CannotAggravateBleeding") then + globalBreakdown.AggravateChance = { "Cannot Aggravate Bleeding" } + elseif bleedIsAggravated then + if skillModList:Flag(cfg, "BleedingYouInflictIsAggravated") then + globalBreakdown.AggravateChance = { "Bleeding You Inflict is Aggravated" } + else + globalBreakdown.AggravateChance = { "Bleeding You Inflict is Aggravated by Party Members" } + end + else + globalBreakdown.AggravateChance = { } + t_insert(globalBreakdown.AggravateChance, s_format("%.2f ^8(chance to hit)", output.HitChance / 100)) + t_insert(globalBreakdown.AggravateChance, s_format("* %.2f ^8(chance to aggravate)", aggravateOldBleedsChance / 100)) + t_insert(globalBreakdown.AggravateChance, s_format("= %.2f%%", output.AggravateOldBleedsChance)) + t_insert(globalBreakdown.AggravateChance, " ") + t_insert(globalBreakdown.AggravateChance, "Hits Required to Aggravate: ") + t_insert(globalBreakdown.AggravateChance, s_format("1 / %.4f ^8(1 / chance to aggravate)", output.AggravateOldBleedsChance / 100)) + t_insert(globalBreakdown.AggravateChance, s_format("= %.2f ^8 (number of hits to aggravate)", output.NumberOfHitsToAggravate)) + end + end + end if canDeal.Physical and (output.BleedChanceOnHit + output.BleedChanceOnCrit) > 0 then activeSkill[pass.label ~= "Off Hand" and "bleedCfg" or "OHbleedCfg"] = { skillName = skillCfg.skillName, @@ -3834,7 +3869,7 @@ function calcs.offence(env, actor, activeSkill) } local dotCfg = pass.label ~= "Off Hand" and activeSkill.bleedCfg or activeSkill.OHbleedCfg checkWeapon1HFlags(dotCfg) - local avgCritBleedDmg, sourceMinCritDmg, sourceMaxCritDmg, avgHitBleedDmg, sourceMinHitDmg, sourceMaxHitDmg + local avgCritBleedDmg, sourceMinCritDmg, sourceMaxCritDmg, avgHitBleedDmg, sourceMinHitDmg, sourceMaxHitDmg, avgAggravatedCritBleedDmg, avgAggravatedHitBleedDmg if breakdown then breakdown.BleedPhysical = { damageTypes = { } } end @@ -3896,6 +3931,7 @@ function calcs.offence(env, actor, activeSkill) -- the amount of damage each bleed does as % maximum local bleedRollAverage + local aggravatedBleedRollAverage if globalOutput.BleedStackPotential > 1 then -- shift damage towards top of range as only top bleeds apply bleedRollAverage = (bleedStacks - (maxStacks - 1)/2) / (bleedStacks + 1) * 100 @@ -3903,6 +3939,15 @@ function calcs.offence(env, actor, activeSkill) -- assume middle of range for hit damage bleedRollAverage = 50 end + if (not enemyDB:Flag(nil, "Condition:Moving") or skillModList:Flag(dotCfg, "NoExtraBleedDamageToMovingEnemy")) and output.NumberOfHitsToAggravate > 0 then + local aggravatedBleedStacks = bleedStacks - output.NumberOfHitsToAggravate + if aggravatedBleedStacks > 1 then + aggravatedBleedRollAverage = (aggravatedBleedStacks - (maxStacks - 1)/2) / (aggravatedBleedStacks + 1) * 100 + else + -- scale average roll bleed by the percentage of bleeds which are aggravated + aggravatedBleedRollAverage = 50 * bleedStacks / output.NumberOfHitsToAggravate + end + end globalOutput.BleedRollAverage = bleedRollAverage if globalBreakdown then globalBreakdown.BleedRollAverage = { @@ -3934,11 +3979,17 @@ function calcs.offence(env, actor, activeSkill) sourceMinCritDmg = min * output.CritBleedDotMulti sourceMaxCritDmg = max * output.CritBleedDotMulti avgCritBleedDmg = (sourceMinCritDmg + (sourceMaxCritDmg - sourceMinCritDmg) * bleedRollAverage / 100) + if aggravatedBleedRollAverage then + avgAggravatedCritBleedDmg = (sourceMinCritDmg + (sourceMaxCritDmg - sourceMinCritDmg) * aggravatedBleedRollAverage / 100) + end else output.BleedDotMulti = 1 + (skillModList:Override(dotCfg, "DotMultiplier") or skillModList:Sum("BASE", dotCfg, "DotMultiplier") + skillModList:Sum("BASE", dotCfg, "PhysicalDotMultiplier")) / 100 sourceMinHitDmg = min * output.BleedDotMulti sourceMaxHitDmg = max * output.BleedDotMulti avgHitBleedDmg = (sourceMinHitDmg + (sourceMaxHitDmg - sourceMinHitDmg) * bleedRollAverage / 100) + if aggravatedBleedRollAverage then + avgAggravatedHitBleedDmg = (sourceMinHitDmg + (sourceMaxHitDmg - sourceMinHitDmg) * aggravatedBleedRollAverage / 100) + end end end @@ -3973,13 +4024,25 @@ function calcs.offence(env, actor, activeSkill) end end local basePercent = skillData.bleedBasePercent or data.misc.BleedPercentBase + local baseReason = "(base)" + if enemyDB:Flag(nil, "Condition:Moving") and not skillModList:Flag(dotCfg, "NoExtraBleedDamageToMovingEnemy") then + basePercent = basePercent * 3 + baseReason = "(enemy is moving)" + elseif output.NumberOfHitsToAggravate == 0 then + basePercent = basePercent * 3 + baseReason = "(bleed is aggravated)" + end -- over-stacking bleed stacks increases the chance a critical bleed is present local ailmentCritChance = 100 * (1 - m_pow(1 - output.CritChance / 100, m_max(globalOutput.BleedStackPotential, 1))) local baseMinVal = calcAilmentDamage("Bleed", ailmentCritChance, sourceMinHitDmg, 0, true) * basePercent / 100 local baseMaxVal = calcAilmentDamage("Bleed", 100, sourceMaxHitDmg, sourceMaxCritDmg, true) * basePercent / 100 * output.RuthlessBlowAilmentEffect * output.FistOfWarDamageEffect * globalOutput.AilmentWarcryEffect local averageBaseBleedDps = calcAilmentDamage("Bleed", ailmentCritChance, avgHitBleedDmg, avgCritBleedDmg, false) - local baseBleedDps = averageBaseBleedDps * basePercent / 100 * output.RuthlessBlowAilmentEffect * output.FistOfWarDamageEffect * globalOutput.AilmentWarcryEffect + local averageBaseAggravatedBleedDps = 0 + if aggravatedBleedRollAverage and (averageBaseBleedDps > 0) then + averageBaseAggravatedBleedDps = 2 * calcAilmentDamage("Bleed", ailmentCritChance, avgAggravatedHitBleedDmg, avgAggravatedCritBleedDmg, false) + end + local baseBleedDps = (averageBaseBleedDps + averageBaseAggravatedBleedDps) * basePercent / 100 * output.RuthlessBlowAilmentEffect * output.FistOfWarDamageEffect * globalOutput.AilmentWarcryEffect if baseBleedDps > 0 then skillFlags.bleed = true skillFlags.duration = true @@ -4015,7 +4078,10 @@ function calcs.offence(env, actor, activeSkill) breakdown.BleedDotMulti = breakdown.critDot(output.BleedDotMulti, output.CritBleedDotMulti, totalFromHit, totalFromCrit) output.BleedDotMulti = (output.BleedDotMulti * totalFromHit) + (output.CritBleedDotMulti * totalFromCrit) end - t_insert(breakdown.BleedDPS, s_format("x %.2f ^8(bleed deals %d%% per second)", basePercent/100, basePercent)) + t_insert(breakdown.BleedDPS, s_format("x %.2f ^8(bleed deals %d%% per second %s)", basePercent/100, basePercent, baseReason)) + if aggravatedBleedRollAverage then + t_insert(breakdown.BleedDPS, s_format("(and x %.2f ^8(from best aggravated bleed)", basePercent / 100 * ((averageBaseBleedDps + averageBaseAggravatedBleedDps) / averageBaseBleedDps - 1))) + end if effectMod ~= 1 then t_insert(breakdown.BleedDPS, s_format("x %.2f ^8(ailment effect modifier)", effectMod)) end @@ -4992,6 +5058,8 @@ function calcs.offence(env, actor, activeSkill) -- Combine secondary effect stats if isAttack then combineStat("BleedChance", "AVERAGE") + combineStat("AggravateOldBleedsChance", "AVERAGE") + combineStat("AggravateChance", "AVERAGE") combineStat("BleedDPS", "CHANCE_AILMENT", "BleedChance") combineStat("PoisonChance", "AVERAGE") combineStat("PoisonDPS", "CHANCE", "PoisonChance") diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index a27cba767e..c4bf5e5853 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -3161,6 +3161,10 @@ function calcs.perform(env, skipEHP) buffExports.PlayerMods["MovementSpeedMod|percent|max="..tostring(output["MovementSpeedMod"] * 100)] = true + if (output.AggravateOldBleedsChance or 0) > 0 then + buffExports.PlayerMods["AggravateOldBleedsChance=100"] = true + end + for _, mod in ipairs(buffExports["Aura"]["extraAura"].modList) do -- leaving comment to make it easier for future similar mods --if mod.name:match("Parent") then diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index 8946eb861e..6e068d6430 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -870,6 +870,12 @@ return { { label = "Off Hand", flag = "weapon2Attack", modName = "BleedChance", modType = "BASE", cfg = "weapon2" }, { label = "Enemy modifiers", modName = "SelfBleedChance", modType = "BASE", enemy = true }, }, }, + { label = "Aggravate Chance", { format = "{0:output:AggravateChance}%", + { breakdown = "MainHand.AggravateChance" }, + { breakdown = "OffHand.AggravateChance" }, + { breakdown = "AggravateChance" }, + { modName = { "AggravateChance", "AggravateChanceOnCrit", "ExertAggravateChance", "BleedingYouInflictIsAggravated", "Condition:CannotAggravate" }, cfg = "skill" }, + }, }, { label = "Total Increased", { format = "{0:mod:1}%", { modName = { "Damage", "PhysicalDamage" }, modType = "INC", cfg = "bleed" }, }, }, { label = "Total More", { format = "{0:mod:1}%", { modName = { "Damage", "PhysicalDamage" }, modType = "MORE", cfg = "bleed" }, }, }, { label = "MH Eff. DoT Multi", bgCol = colorCodes.MAINHANDBG, flag = "weapon1Attack", haveOutput = "MainHand.BleedDotMulti", { format = "x {2:output:MainHand.BleedDotMulti}", { breakdown = "MainHand.BleedDotMulti" }, { modName = { "DotMultiplier", "PhysicalDotMultiplier" }, cfg = "bleed" }, }, }, diff --git a/src/Modules/CalcSetup.lua b/src/Modules/CalcSetup.lua index b50eb21364..7d57fcddff 100644 --- a/src/Modules/CalcSetup.lua +++ b/src/Modules/CalcSetup.lua @@ -505,7 +505,6 @@ function calcs.initEnv(build, mode, override, specEnv) modDB:NewMod("Speed", "MORE", 20, "Base", ModFlag.Attack, { type = "Condition", var = "DualWielding" }, { type = "Condition", var = "DoubledInherentDualWieldingSpeed"}) modDB:NewMod("BlockChance", "BASE", 20, "Base", { type = "Condition", var = "DualWielding" }, { type = "Condition", var = "NoInherentBlock", neg = true}, { type = "Condition", var = "DoubledInherentDualWieldingBlock", neg = true}) modDB:NewMod("BlockChance", "BASE", 40, "Base", { type = "Condition", var = "DualWielding" }, { type = "Condition", var = "NoInherentBlock", neg = true}, { type = "Condition", var = "DoubledInherentDualWieldingBlock"}) - modDB:NewMod("Damage", "MORE", 200, "Base", 0, KeywordFlag.Bleed, { type = "ActorCondition", actor = "enemy", var = "Moving" }, { type = "Condition", var = "NoExtraBleedDamageToMovingEnemy", neg = true }) modDB:NewMod("Condition:BloodStance", "FLAG", true, "Base", { type = "Condition", var = "SandStance", neg = true }) modDB:NewMod("Condition:PrideMinEffect", "FLAG", true, "Base", { type = "Condition", var = "PrideMaxEffect", neg = true }) modDB:NewMod("PerBrutalTripleDamageChance", "BASE", 3, "Base") diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 44e316b72c..cc02670a50 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -740,6 +740,7 @@ local modNameList = { ["bleed duration"] = { "EnemyBleedDuration" }, ["bleeding duration"] = { "EnemyBleedDuration" }, ["bleed duration on you"] = "SelfBleedDuration", + ["to aggravate bleeding on targets you hit"] = "AggravateChance", -- Misc modifiers ["movement speed"] = "MovementSpeed", ["attack, cast and movement speed"] = { "Speed", "MovementSpeed" }, @@ -2096,8 +2097,8 @@ local specialModList = { ["energy shield protects mana instead of life"] = { flag("EnergyShieldProtectsMana") }, ["modifiers to critical strike multiplier also apply to damage over time multiplier for ailments from critical strikes at (%d+)%% of their value"] = function(num) return { mod("CritMultiplierAppliesToDegen", "BASE", num) } end, ["damage over time multiplier for ailments is equal to critical strike multiplier"] = { flag("DotMultiplierIsCritMultiplier") }, - ["your bleeding does not deal extra damage while the enemy is moving"] = { flag("Condition:NoExtraBleedDamageToMovingEnemy") }, - ["your bleeding does not deal extra damage while the enemy is moving and cannot be aggravated"] = { flag("Condition:NoExtraBleedDamageToMovingEnemy"), flag("Condition:CannotAggravate") }, + ["your bleeding does not deal extra damage while the enemy is moving"] = { flag("NoExtraBleedDamageToMovingEnemy") }, + ["your bleeding does not deal extra damage while the enemy is moving and cannot be aggravated"] = { flag("NoExtraBleedDamageToMovingEnemy"), flag("CannotAggravateBleeding") }, ["you and enemies in your presence count as moving while affected by elemental ailments"] = { mod("EnemyModifier", "LIST", { mod = flag("Condition:Moving", { type = "Condition", varList = { "Frozen","Chilled","Shocked","Ignited","Scorched","Brittle","Sapped" } }) }), flag("Condition:Moving", { type = "Condition", varList = { "Frozen","Chilled","Shocked","Ignited","Scorched","Brittle","Sapped" } }), @@ -2518,6 +2519,7 @@ local specialModList = { ["hits ignore enemy monster physical damage reduction if you[' ]h?a?ve blocked in the past (%d+) seconds"] = { flag("IgnoreEnemyPhysicalDamageReduction", { type = "Condition", var = "BlockedRecently" }) }, + ["bleeding you inflict is aggravated"] = { flag("BleedingYouInflictIsAggravated") }, ["(%d+)%% more attack and movement speed per challenger charge"] = function(num) return { mod("Speed", "MORE", num, nil, ModFlag.Attack, 0, { type = "Multiplier", var = "ChallengerCharge" }), mod("MovementSpeed", "MORE", num, { type = "Multiplier", var = "ChallengerCharge" }), @@ -3337,6 +3339,9 @@ local specialModList = { ["causes bleeding on melee critical strike"] = { mod("BleedChance", "BASE", 100, nil, ModFlag.Melee, { type = "Condition", var = "CriticalStrike" }) }, ["melee critical strikes have (%d+)%% chance to cause bleeding"] = function(num) return { mod("BleedChance", "BASE", num, nil, ModFlag.Melee, { type = "Condition", var = "CriticalStrike" }) } end, ["attacks always inflict bleeding while you have cat's stealth"] = { mod("BleedChance", "BASE", 100, nil, ModFlag.Attack, { type = "Condition", var = "AffectedByCat'sStealth" }) }, + ["(%d+)%% chance to aggravate bleeding on targets you critically strike with attacks"] = function(num) return { mod("AggravateChanceOnCrit", "BASE", num, nil, ModFlag.Attack) } end, + ["(%d+)%% chance to aggravate bleeding on targets you hit with exerted attacks"] = function(num) return { mod("ExertAggravateChance", "BASE", num, nil, ModFlag.Attack) } end, + ["(%d+)%% chance to aggravate bleeding on targets you stun with attacks hits"] = function(num) return { mod("AggravateChance", "BASE", num, nil, ModFlag.Attack, { type = "Condition", var = "StunnedEnemyRecently" }) } end, ["you have crimson dance while you have cat's stealth"] = { mod("Keystone", "LIST", "Crimson Dance", { type = "Condition", var = "AffectedByCat'sStealth" }) }, ["you have crimson dance if you have dealt a critical strike recently"] = { mod("Keystone", "LIST", "Crimson Dance", { type = "Condition", var = "CritRecently" }) }, ["bleeding you inflict deals damage (%d+)%% faster"] = function(num) return { mod("BleedFaster", "INC", num) } end,