diff --git a/spec/System/TestAilments_spec.lua b/spec/System/TestAilments_spec.lua index e6fab517868..b91f3937225 100644 --- a/spec/System/TestAilments_spec.lua +++ b/spec/System/TestAilments_spec.lua @@ -12,6 +12,26 @@ describe("TestAilments", function() runCallback("OnFrame") end + for _, verb in ipairs({ "inflict", "apply" }) do + it("Painseeker removes inherent ailment chance on crit with '" .. verb .. "' wording", function() + build.skillsTab:PasteSocketGroup("Slot: Weapon 1\nBall Lightning 20/0 1\n") + build.itemsTab:CreateDisplayItemFromRaw("Rarity: UNIQUE\nPainseeker\nShagreen Gloves\nImplicits: 0\nCritical Strikes do not inherently " .. verb .. " non-Damaging Ailments\nInflict non-Damaging Ailments as though dealing 150% more Damage") + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + + assert.are.equals(0, build.calcsTab.mainOutput.ShockChanceOnCrit) + assert.are.equals(0, build.calcsTab.mainOutput.FreezeChanceOnCrit) + assert.are.equals(100, build.calcsTab.mainOutput.IgniteChanceOnCrit) + + build.configTab.input.customMods = "25% chance to Shock\n25% chance to Freeze" + rebuild() + + assert.are.equals(25, build.calcsTab.mainOutput.ShockChanceOnCrit) + assert.are.equals(25, build.calcsTab.mainOutput.FreezeChanceOnCrit) + assert.are.equals(25, build.calcsTab.mainOutput.ShockChance) + end) + end + it("maximum shock value", function() -- Shock Nova build.skillsTab:PasteSocketGroup("Slot: Weapon 1\nShock Nova 4/0 1\n") diff --git a/spec/System/TestItemMods_spec.lua b/spec/System/TestItemMods_spec.lua index 3aa079e67b9..620de26c744 100644 --- a/spec/System/TestItemMods_spec.lua +++ b/spec/System/TestItemMods_spec.lua @@ -7,6 +7,87 @@ describe("TetsItemMods", function() -- newBuild() takes care of resetting everything in setup() end) + for _, wording in ipairs({ "Increases", "Increase" }) do + it("Scornflux applies Arcane Surge cast speed to movement speed with '" .. wording .. "' wording", function() + build.itemsTab:CreateDisplayItemFromRaw("Scornflux\nSatin Slippers\n" .. wording .. " to Cast Speed from Arcane Surge also applies to Movement Speed") + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + local withoutArcaneSurge = build.calcsTab.mainOutput.MovementSpeedMod + + build.configTab.input.buffArcaneSurge = true + build.configTab:BuildModList() + runCallback("OnFrame") + assert.are.near(withoutArcaneSurge + 0.2, build.calcsTab.mainOutput.MovementSpeedMod, 10 ^ -9) + end) + end + + for _, punctuation in ipairs({ ",", "" }) do + it("Gamblesprint applies configured movement speed with '" .. punctuation .. "' punctuation", function() + build.itemsTab:CreateDisplayItemFromRaw("Gamblesprint\nHydrascale Boots\nWhen Hit, gain a random Movement Speed modifier from 40% reduced to 100% increased" .. punctuation .. " until Hit again") + build.itemsTab:AddDisplayItem() + for _, movementSpeed in ipairs({ 100, -40 }) do + build.configTab.input.GamblesprintMovementSpeed = movementSpeed + build.configTab:BuildModList() + runCallback("OnFrame") + assert.are.near(1 + movementSpeed / 100, build.calcsTab.mainOutput.MovementSpeedMod, 10 ^ -9) + end + end) + end + + for _, wording in ipairs({ "Item Rarity", "Rarity of Items found" }) do + it("The Pariah grants rarity only for white sockets with '" .. wording .. "' wording", function() + for _, colour in ipairs({ "W", "R" }) do + local item = new("Item"):Item("Rarity: UNIQUE\nThe Pariah\nUnset Ring\nSockets: " .. colour .. "\nImplicits: 0\n60% increased " .. wording .. " per White Socket") + build.itemsTab:AddItem(item, true) + build.itemsTab.slots["Ring 1"]:SetSelItemId(item.id) + build.buildFlag = true + runCallback("OnFrame") + assert.are.equals(colour == "W" and 60 or 0, build.calcsTab.mainEnv.player.modDB:Sum("INC", nil, "LootRarity")) + end + end) + end + + for _, wording in ipairs({ "Enemy", "Enemy Monster" }) do + it("Triumvirate Authority ignores physical reduction only for socketed Vaal skills with '" .. wording .. "' wording", function() + build.itemsTab:CreateDisplayItemFromRaw("Triumvirate Authority\nUnset Ring\nSockets: G\nHits from Socketed Vaal Skills ignore " .. wording .. " Physical Damage Reduction") + build.itemsTab:AddDisplayItem() + build.skillsTab:PasteSocketGroup("Slot: Ring 1\nVaal Blade Vortex 20/0 1\n") + build.skillsTab:PasteSocketGroup("Slot: Ring 1\nFireball 20/0 1\n") + build.skillsTab:PasteSocketGroup("Slot: Helmet\nVaal Blade Vortex 20/0 1\n") + runCallback("OnFrame") + + local affected, unaffected = 0, 0 + for _, skill in ipairs(build.calcsTab.mainEnv.player.activeSkillList) do + local expected = skill.socketGroup.slot == "Ring 1" and skill.skillTypes[SkillType.Vaal] or false + assert.are.equals(expected, skill.skillModList:Flag(skill.skillCfg, "IgnoreEnemyPhysicalDamageReduction") or false) + if expected then + affected = affected + 1 + else + unaffected = unaffected + 1 + end + end + assert.are.equals(1, affected) + assert.is_true(unaffected >= 2) + end) + end + + for _, case in ipairs({ + { name = "current", line = "100% chance to Avoid being Chilled or Frozen if you have used a Fire Skill Recently" }, + { name = "legacy", line = "Cannot be Frozen or Chilled if you've used a Fire Skill Recently" }, + }) do + it("Hrimnor's Resolve grants conditional chill and freeze protection with " .. case.name .. " wording", function() + build.itemsTab:CreateDisplayItemFromRaw("Hrimnor's Resolve\nSamnite Helmet\n" .. case.line) + build.itemsTab:AddDisplayItem() + for _, recently in ipairs({ false, true, false }) do + build.configTab.input.conditionUsedFireSkillRecently = recently + build.configTab:BuildModList() + runCallback("OnFrame") + assert.are.equals(recently and 100 or 0, build.calcsTab.mainOutput.ChillAvoidChance) + assert.are.equals(recently and 100 or 0, build.calcsTab.mainOutput.FreezeAvoidChance) + end + end) + end + it("shows versioned reusable variant groups", function() build.itemsTab:CreateDisplayItemFromRaw([[ Rarity: Unique diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index c975e8c33ab..d5ffc9c2f38 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -4095,7 +4095,7 @@ c["100% Chance to Cause Monster to Flee on Block 1% of Damage Leeched as Life ag c["100% chance to Avoid Bleeding"]={{[1]={flags=0,keywordFlags=0,name="AvoidBleed",type="BASE",value=100}},nil} c["100% chance to Avoid Blind"]={{[1]={flags=0,keywordFlags=0,name="AvoidBlind",type="BASE",value=100}},nil} c["100% chance to Avoid being Chilled during Onslaught"]={{[1]={[1]={type="Condition",var="Onslaught"},flags=0,keywordFlags=0,name="AvoidChill",type="BASE",value=100}},nil} -c["100% chance to Avoid being Chilled or Frozen if you have used a Fire Skill Recently"]={{[1]={[1]={type="Condition",var="UsedFireSkillRecently"},flags=0,keywordFlags=0,name="AvoidChill",type="BASE",value=100}}," or Frozen "} +c["100% chance to Avoid being Chilled or Frozen if you have used a Fire Skill Recently"]={{[1]={[1]={type="Condition",var="UsedFireSkillRecently"},flags=0,keywordFlags=0,name="AvoidChill",type="BASE",value=100},[2]={[1]={type="Condition",var="UsedFireSkillRecently"},flags=0,keywordFlags=0,name="AvoidFreeze",type="BASE",value=100}},nil} c["100% chance to Avoid being Ignited while on Low Life"]={{[1]={[1]={type="Condition",var="LowLife"},flags=0,keywordFlags=0,name="AvoidIgnite",type="BASE",value=100}},nil} c["100% chance to Avoid being Ignited, Chilled or Frozen with Her Blessing"]={{[1]={flags=0,keywordFlags=0,name="AvoidIgnite",type="BASE",value=100}}," , Chilled or Frozen with Her Blessing "} c["100% chance to Avoid being Ignited, Chilled or Frozen with Her Blessing 20% increased Attack and Movement Speed with Her Blessing"]={{[1]={flags=0,keywordFlags=0,name="AvoidIgnite",type="BASE",value=100}}," , Chilled or Frozen with Her Blessing 20% increased Attack and Movement Speed with Her Blessing "} @@ -10903,7 +10903,7 @@ c["60% increased Global Accuracy Rating"]={{[1]={[1]={type="Global"},flags=0,key c["60% increased Global Critical Strike Chance"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=60}},nil} c["60% increased Global Damage"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="Damage",type="INC",value=60}},nil} c["60% increased Intelligence Requirement"]={{[1]={flags=0,keywordFlags=0,name="IntRequirement",type="INC",value=60}},nil} -c["60% increased Item Rarity per White Socket"]={{}," Item Rarity "} +c["60% increased Item Rarity per White Socket"]={{[1]={[1]={type="Multiplier",var="WhiteSocketIn{SlotName}"},flags=0,keywordFlags=0,name="LootRarity",type="INC",value=60}},nil} c["60% increased Life Recovery from Flasks while affected by Vitality"]={{[1]={[1]={type="Condition",var="AffectedByVitality"},flags=0,keywordFlags=0,name="FlaskLifeRecovery",type="INC",value=60}},nil} c["60% increased Lightning Damage while affected by Herald of Thunder"]={{[1]={[1]={type="Condition",var="AffectedByHeraldofThunder"},flags=0,keywordFlags=0,name="LightningDamage",type="INC",value=60}},nil} c["60% increased Lightning Damage while affected by Wrath"]={{[1]={[1]={type="Condition",var="AffectedByWrath"},flags=0,keywordFlags=0,name="LightningDamage",type="INC",value=60}},nil} @@ -14832,8 +14832,7 @@ c["Critical Strikes deal no Damage"]={{[1]={[1]={type="Condition",var="CriticalS c["Critical Strikes do not deal extra Damage"]={{[1]={flags=0,keywordFlags=0,name="NoCritMultiplier",type="FLAG",value=true}},nil} c["Critical Strikes do not inherently Freeze"]={{[1]={flags=0,keywordFlags=0,name="CritsDontAlwaysFreeze",type="FLAG",value=true}},nil} c["Critical Strikes do not inherently Ignite"]={{[1]={flags=0,keywordFlags=0,name="CritsDontAlwaysIgnite",type="FLAG",value=true}},nil} -c["Critical Strikes do not inherently inflict non-Damaging Ailments"]={nil,"Critical Strikes do not inherently inflict non-Damaging Ailments "} -c["Critical Strikes do not inherently inflict non-Damaging Ailments Inflict non-Damaging Ailments as though dealing 200% more Damage"]={nil,"Critical Strikes do not inherently inflict non-Damaging Ailments Inflict non-Damaging Ailments as though dealing 200% more Damage "} +c["Critical Strikes do not inherently inflict non-Damaging Ailments"]={{[1]={flags=0,keywordFlags=0,name="CritsDontAlwaysChill",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="CritsDontAlwaysFreeze",type="FLAG",value=true},[3]={flags=0,keywordFlags=0,name="CritsDontAlwaysShock",type="FLAG",value=true}},nil} c["Critical Strikes have 15% chance to Blind Enemies while you have Cat's Stealth"]={nil,"Critical Strikes have 15% chance to Blind Enemies while you have Cat's Stealth "} c["Critical Strikes have 20% chance to Blind Enemies while you have Cat's Stealth"]={nil,"Critical Strikes have 20% chance to Blind Enemies while you have Cat's Stealth "} c["Critical Strikes have 20% chance to Blind Enemies while you have Cat's Stealth 50% increased Damage with Hits and Ailments against Blinded Enemies"]={nil,"Critical Strikes have 20% chance to Blind Enemies while you have Cat's Stealth 50% increased Damage with Hits and Ailments against Blinded Enemies "} @@ -15005,8 +15004,8 @@ c["Damage of Enemies Hitting you is Unlucky"]={nil,"Damage of Enemies Hitting yo c["Damage of Enemies Hitting you is Unlucky Damage with Hits is Unlucky"]={nil,"Damage of Enemies Hitting you is Unlucky Damage with Hits is Unlucky "} c["Damage of Enemies Hitting you is Unlucky while you are Cursed with Vulnerability"]={nil,"Damage of Enemies Hitting you is Unlucky while you are Cursed with Vulnerability "} c["Damage of Enemies Hitting you is Unlucky while you are Cursed with Vulnerability You count as on Full Life while you are Cursed with Vulnerability"]={nil,"Damage of Enemies Hitting you is Unlucky while you are Cursed with Vulnerability You count as on Full Life while you are Cursed with Vulnerability "} -end)();(function() c["Damage of Enemies Hitting you is Unlucky while you are on Full Life"]={nil,"Damage of Enemies Hitting you is Unlucky while you are on Full Life "} +end)();(function() c["Damage of Enemies Hitting you is Unlucky while you are on Low Life"]={nil,"Damage of Enemies Hitting you is Unlucky while you are on Low Life "} c["Damage of Enemies Hitting you is Unlucky while you have a Magic Ring Equipped"]={nil,"Damage of Enemies Hitting you is Unlucky while you have a Magic Ring Equipped "} c["Damage of Enemies Hitting you is Unlucky while you have a Magic Ring Equipped You are Hexproof if you have a Magic Ring in right slot"]={nil,"Damage of Enemies Hitting you is Unlucky while you have a Magic Ring Equipped You are Hexproof if you have a Magic Ring in right slot "} @@ -16913,8 +16912,7 @@ c["Hits always Shock"]={{[1]={flags=0,keywordFlags=0,name="EnemyShockChance",typ c["Hits always Shock Enemies that are on Low Life"]={nil,"Hits always Shock Enemies that are on Low Life "} c["Hits can't be Evaded"]={{[1]={[1]={type="Condition",var="{Hand}Attack"},flags=0,keywordFlags=0,name="CannotBeEvaded",type="FLAG",value=true}},nil} c["Hits from Socketed Vaal Skills ignore Enemy Monster Resistances"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},[2]={skillType=38,type="SkillType"},flags=0,keywordFlags=0,name="ExtraSkillMod",type="LIST",value={mod={flags=0,keywordFlags=0,name="IgnoreElementalResistances",type="FLAG",value=true}}},[2]={[1]={slotName="{SlotName}",type="SocketedIn"},[2]={skillType=38,type="SkillType"},flags=0,keywordFlags=0,name="ExtraSkillMod",type="LIST",value={mod={flags=0,keywordFlags=0,name="IgnoreChaosResistance",type="FLAG",value=true}}}},nil} -c["Hits from Socketed Vaal Skills ignore Enemy Physical Damage Reduction"]={nil,"Hits from Socketed Vaal Skills ignore Enemy Physical Damage Reduction "} -c["Hits from Socketed Vaal Skills ignore Enemy Physical Damage Reduction Hits from Socketed Vaal Skills ignore Enemy Monster Resistances"]={nil,"Hits from Socketed Vaal Skills ignore Enemy Physical Damage Reduction Hits from Socketed Vaal Skills ignore Enemy Monster Resistances "} +c["Hits from Socketed Vaal Skills ignore Enemy Physical Damage Reduction"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},[2]={skillType=38,type="SkillType"},flags=0,keywordFlags=0,name="ExtraSkillMod",type="LIST",value={mod={flags=0,keywordFlags=0,name="IgnoreEnemyPhysicalDamageReduction",type="FLAG",value=true}}}},nil} c["Hits have +10% additional Critical Strike Chance against you"]={nil,"Hits have +10% additional Critical Strike Chance "} c["Hits have 10% chance to ignore Enemy Physical Damage Reduction"]={{[1]={flags=0,keywordFlags=0,name="ChanceToIgnoreEnemyPhysicalDamageReduction",type="BASE",value=10}},nil} c["Hits have 13% chance to ignore Enemy Physical Damage Reduction"]={{[1]={flags=0,keywordFlags=0,name="ChanceToIgnoreEnemyPhysicalDamageReduction",type="BASE",value=13}},nil} @@ -17153,7 +17151,7 @@ c["Increases and Reductions to your Evasion Rating also apply to your Spell Dama c["Increases and Reductions to your Evasion Rating also apply to your Spell Damage at 50% of their value"]={nil,"Increases and Reductions to your Evasion Rating also apply to your Spell Damage at 50% of their value "} c["Increases and reductions to Maximum Life also apply to Maximum Rage at 20% Value"]={nil,"Increases and reductions to Maximum Life also apply to Maximum Rage at 20% Value "} c["Increases and reductions to Maximum Mana also apply to Shock Effect at 30% of their value"]={{[1]={flags=0,keywordFlags=0,name="ManaAppliesToShockEffect",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ImprovedManaAppliesToShockEffect",type="MAX",value=30}},nil} -c["Increases to Cast Speed from Arcane Surge also applies to Movement Speed"]={nil,"Increases to Cast Speed from Arcane Surge also applies to Movement Speed "} +c["Increases to Cast Speed from Arcane Surge also applies to Movement Speed"]={{[1]={flags=0,keywordFlags=0,name="ArcaneSurgeCastSpeedToMovementSpeed",type="FLAG",value=true}},nil} c["Infernal Cry has 16% increased Area of Effect"]={{[1]={[1]={includeTransfigured=true,skillName="Infernal Cry",type="SkillName"},flags=0,keywordFlags=0,name="AreaOfEffect",type="INC",value=16}},nil} c["Infernal Cry has 19% increased Area of Effect"]={{[1]={[1]={includeTransfigured=true,skillName="Infernal Cry",type="SkillName"},flags=0,keywordFlags=0,name="AreaOfEffect",type="INC",value=19}},nil} c["Infernal Cry has 22% increased Area of Effect"]={{[1]={[1]={includeTransfigured=true,skillName="Infernal Cry",type="SkillName"},flags=0,keywordFlags=0,name="AreaOfEffect",type="INC",value=22}},nil} @@ -18317,8 +18315,7 @@ c["Nearby Allies have +7% to Critical Strike Multiplier per 100 Dexterity you ha c["Nearby Allies have +8% to Critical Strike Multiplier per 100 Dexterity you have"]={{[1]={[1]={div=100,stat="Dex",type="PerStat"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="CritMultiplier",type="BASE",value=8},onlyAllies=true}}},nil} c["Nearby Allies have 1% Chance to Block Attack Damage per 100 Strength you have"]={{[1]={[1]={div=100,stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="BlockChance",type="BASE",value=1},onlyAllies=true}}},nil} c["Nearby Allies have 3% increased Cast Speed per 100 Intelligence you have"]={{[1]={[1]={div=100,stat="Int",type="PerStat"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=16,keywordFlags=0,name="Speed",type="INC",value=3},onlyAllies=true}}},nil} -c["Nearby Allies have 30% increased Item Rarity"]={{}," Item Rarity "} -c["Nearby Allies have 30% increased Item Rarity Nearby Allies have Culling Strike"]={{}," Item Rarity Nearby Allies have Culling Strike "} +c["Nearby Allies have 30% increased Item Rarity"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="LootRarity",type="INC",value=30},onlyAllies=true}}},nil} c["Nearby Allies have 4% increased Cast Speed per 100 Intelligence you have"]={{[1]={[1]={div=100,stat="Int",type="PerStat"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=16,keywordFlags=0,name="Speed",type="INC",value=4},onlyAllies=true}}},nil} c["Nearby Allies have 5% increased Defences per 100 Strength you have"]={{[1]={[1]={div=100,stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="Defences",type="INC",value=5},onlyAllies=true}}},nil} c["Nearby Allies have 6% increased Defences per 100 Strength you have"]={{[1]={[1]={div=100,stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="Defences",type="INC",value=6},onlyAllies=true}}},nil} @@ -20007,10 +20004,10 @@ c["Skills Socketed in your Boots are Supported by level 20 High-Impact Mine"]={{ c["Skills Socketed in your Boots are Supported by level 20 Hypothermia"]={{[1]={[1]={slotName="Boots",type="SocketedIn"},flags=0,keywordFlags=0,name="ExtraSupport",type="LIST",value={appliesToGrantedSkills=true,level=20,skillId="SupportHypothermia"}}},nil} c["Skills Socketed in your Boots are Supported by level 20 Ice Bite"]={{[1]={[1]={slotName="Boots",type="SocketedIn"},flags=0,keywordFlags=0,name="ExtraSupport",type="LIST",value={appliesToGrantedSkills=true,level=20,skillId="SupportIceBite"}}},nil} c["Skills Socketed in your Boots are Supported by level 20 Ignite Proliferation"]={{[1]={[1]={slotName="Boots",type="SocketedIn"},flags=0,keywordFlags=0,name="ExtraSupport",type="LIST",value={appliesToGrantedSkills=true,level=20,skillId="SupportIgniteProliferation"}}},nil} -end)();(function() c["Skills Socketed in your Boots are Supported by level 20 Immolate"]={{[1]={[1]={slotName="Boots",type="SocketedIn"},flags=0,keywordFlags=0,name="ExtraSupport",type="LIST",value={appliesToGrantedSkills=true,level=20,skillId="SupportImmolate"}}},nil} c["Skills Socketed in your Boots are Supported by level 20 Impale"]={{[1]={[1]={slotName="Boots",type="SocketedIn"},flags=0,keywordFlags=0,name="ExtraSupport",type="LIST",value={appliesToGrantedSkills=true,level=20,skillId="SupportImpale"}}},nil} c["Skills Socketed in your Boots are Supported by level 20 Increased Area of Effect"]={{[1]={[1]={slotName="Boots",type="SocketedIn"},flags=0,keywordFlags=0,name="ExtraSupport",type="LIST",value={appliesToGrantedSkills=true,level=20,skillId="SupportIncreasedAreaOfEffect"}}},nil} +end)();(function() c["Skills Socketed in your Boots are Supported by level 20 Increased Critical Damage"]={{[1]={[1]={slotName="Boots",type="SocketedIn"},flags=0,keywordFlags=0,name="ExtraSupport",type="LIST",value={appliesToGrantedSkills=true,level=20,skillId="SupportIncreasedCriticalDamage"}}},nil} c["Skills Socketed in your Boots are Supported by level 20 Increased Critical Strikes"]={{[1]={[1]={slotName="Boots",type="SocketedIn"},flags=0,keywordFlags=0,name="ExtraSupport",type="LIST",value={appliesToGrantedSkills=true,level=20,skillId="SupportIncreasedCriticalStrikes"}}},nil} c["Skills Socketed in your Boots are Supported by level 20 Infernal Legion"]={{[1]={[1]={slotName="Boots",type="SocketedIn"},flags=0,keywordFlags=0,name="ExtraSupport",type="LIST",value={appliesToGrantedSkills=true,level=20,skillId="SupportInfernalLegion"}}},nil} @@ -22447,7 +22444,7 @@ c["Weapons you Animate create an additional copy"]={nil,"Weapons you Animate cre c["When 90% of your Hex's Duration Expires on an Enemy, Eat 1 Soul per Enemy Power"]={{[1]={flags=0,keywordFlags=0,name="Condition:CanHaveSoulEater",type="FLAG",value=true}},nil} c["When Hit during effect, 25% of Life loss from Damage taken occurs over 4 seconds instead"]={{[1]={[1]={type="Condition",var="UsingFlask"},flags=0,keywordFlags=0,name="LifeLossPrevented",type="BASE",value=25}},nil} c["When Hit, gain a random Movement Speed modifier from 20% reduced to 50% increased, until Hit again"]={nil,"a random Movement Speed modifier from 20% reduced to 50% increased, until Hit again "} -c["When Hit, gain a random Movement Speed modifier from 40% reduced to 100% increased, until Hit again"]={nil,"a random Movement Speed modifier from 40% reduced to 100% increased, until Hit again "} +c["When Hit, gain a random Movement Speed modifier from 40% reduced to 100% increased, until Hit again"]={{[1]={flags=0,keywordFlags=0,name="Condition:HaveGamblesprint",type="FLAG",value=true}},nil} c["When Hit, lose a Ghost Shroud to Recover Energy Shield equal to 3% of your Evasion Rating"]={nil,"lose a Ghost Shroud to Recover Energy Shield equal to 3% of your Evasion Rating "} c["When Hit, lose a Ghost Shroud to Recover Energy Shield equal to 3% of your Evasion Rating Limited to 1 Keystone Tattoo"]={nil,"lose a Ghost Shroud to Recover Energy Shield equal to 3% of your Evasion Rating Limited to 1 Keystone Tattoo "} c["When a nearby Minion dies, gain Rotten Bulwark equal to 8% of its maximum Life"]={nil,"When a nearby Minion dies, gain Rotten Bulwark equal to 8% of its maximum Life "} @@ -22688,7 +22685,7 @@ c["You and Allies near your Banner have +1% to Damage over Time Multiplier per 2 c["You and Enemies in your Presence count as moving while affected by Elemental Ailments"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",varList={[1]="Frozen",[2]="Chilled",[3]="Shocked",[4]="Ignited",[5]="Scorched",[6]="Brittle",[7]="Sapped"}},flags=0,keywordFlags=0,name="Condition:Moving",type="FLAG",value=true}}},[2]={[1]={type="Condition",varList={[1]="Frozen",[2]="Chilled",[3]="Shocked",[4]="Ignited",[5]="Scorched",[6]="Brittle",[7]="Sapped"}},flags=0,keywordFlags=0,name="Condition:Moving",type="FLAG",value=true}},nil} c["You and Nearby Allies have 1 to 10 added Lightning Damage per Blue Socket"]={{[1]={[1]={type="Multiplier",var="BlueSocketIn{SlotName}"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="LightningMin",type="BASE",value=1}}},[2]={[1]={type="Multiplier",var="BlueSocketIn{SlotName}"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="LightningMax",type="BASE",value=10}}}},nil} c["You and Nearby Allies have 16 to 144 added Lightning Damage per Blue Socket"]={{[1]={[1]={type="Multiplier",var="BlueSocketIn{SlotName}"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="LightningMin",type="BASE",value=16}}},[2]={[1]={type="Multiplier",var="BlueSocketIn{SlotName}"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="LightningMax",type="BASE",value=144}}}},nil} -c["You and Nearby Allies have 30% increased Item Rarity"]={{}," Item Rarity "} +c["You and Nearby Allies have 30% increased Item Rarity"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="LootRarity",type="INC",value=30}}}},nil} c["You and Nearby Allies have 47 to 61 added Chaos Damage per White Socket"]={{[1]={[1]={type="Multiplier",var="WhiteSocketIn{SlotName}"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="ChaosMin",type="BASE",value=47}}},[2]={[1]={type="Multiplier",var="WhiteSocketIn{SlotName}"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="ChaosMax",type="BASE",value=61}}}},nil} c["You and Nearby Allies have 56 to 88 added Cold Damage per Green Socket"]={{[1]={[1]={type="Multiplier",var="GreenSocketIn{SlotName}"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="ColdMin",type="BASE",value=56}}},[2]={[1]={type="Multiplier",var="GreenSocketIn{SlotName}"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="ColdMax",type="BASE",value=88}}}},nil} c["You and Nearby Allies have 64 to 96 added Fire Damage per Red Socket"]={{[1]={[1]={type="Multiplier",var="RedSocketIn{SlotName}"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="FireMin",type="BASE",value=64}}},[2]={[1]={type="Multiplier",var="RedSocketIn{SlotName}"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="FireMax",type="BASE",value=96}}}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index bc1f7b97366..53294cdd08c 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -401,6 +401,7 @@ local modNameList = { ["to avoid being shocked"] = "AvoidShock", ["to avoid being frozen"] = "AvoidFreeze", ["to avoid being chilled"] = "AvoidChill", + ["to avoid being chilled or frozen"] = { "AvoidChill", "AvoidFreeze" }, ["to avoid being ignited"] = "AvoidIgnite", ["to avoid non-damaging ailments on you"] = { "AvoidShock", "AvoidFreeze", "AvoidChill", "AvoidSap", "AvoidBrittle", "AvoidScorch" }, ["to avoid blind"] = "AvoidBlind", @@ -833,6 +834,7 @@ local modNameList = { ["action speed"] = "ActionSpeed", ["light radius"] = "LightRadius", ["rarity of items found"] = "LootRarity", + ["item rarity"] = "LootRarity", ["rarity of items dropped"] = "LootRarity", ["quantity of items found"] = "LootQuantity", ["quantity of items dropped"] = "LootQuantity", @@ -2425,7 +2427,7 @@ local specialModList = { mod("ManaConvertToArmour", "BASE", num), } end, ["life recovery from flasks also applies to energy shield"] = { flag("LifeFlaskAppliesToEnergyShield") }, - ["increase to cast speed from arcane surge also applies to movement speed"] = { flag("ArcaneSurgeCastSpeedToMovementSpeed") }, + ["increases? to cast speed from arcane surge also applies to movement speed"] = { flag("ArcaneSurgeCastSpeedToMovementSpeed") }, ["arcane surge also grants (%d+)%% increased life regeneration rate to you"] = function(num) return { mod("ArcaneSurgeAlsoLifeRegen", "INC", num) } end, ["increases and reductions to effect of flasks applied to you also applies to effect of arcane surge on you at (%d+)%% of their value"] = function(num) return { mod("FlaskEffectToArcaneSurgeEffect", "BASE", num) } end, ["non%-instant mana recovery from flasks is also recovered as life"] = { flag("ManaFlaskAppliesToLife") }, @@ -3265,6 +3267,7 @@ local specialModList = { mod("ExtraSkillMod", "LIST", { mod = flag("IgnoreElementalResistances") }, { type = "SocketedIn", slotName = "{SlotName}" }, { type = "SkillType", skillType = SkillType.Vaal }), mod("ExtraSkillMod", "LIST", { mod = flag("IgnoreChaosResistance") }, { type = "SocketedIn", slotName = "{SlotName}" }, { type = "SkillType", skillType = SkillType.Vaal }), }, + ["hits from socketed vaal skills ignore enemy physical damage reduction"] = { mod("ExtraSkillMod", "LIST", { mod = flag("IgnoreEnemyPhysicalDamageReduction") }, { type = "SocketedIn", slotName = "{SlotName}" }, { type = "SkillType", skillType = SkillType.Vaal }) }, ["hits from socketed vaal skills ignore enemy monster physical damage reduction"] = { mod("ExtraSkillMod", "LIST", { mod = flag("IgnoreEnemyPhysicalDamageReduction") }, { type = "SocketedIn", slotName = "{SlotName}" }, { type = "SkillType", skillType = SkillType.Vaal }) }, ["socketed vaal skills grant elusive when used"] = { flag("Condition:CanBeElusive") }, ["damage with hits from socketed vaal skills is lucky"] = { mod("ExtraSkillMod", "LIST", { mod = flag("LuckyHits") }, { type = "SocketedIn", slotName = "{SlotName}" }, { type = "SkillType", skillType = SkillType.Vaal }) }, @@ -3828,7 +3831,7 @@ local specialModList = { ["hits with prismatic skills always ?i?n?f?l?i?c?t? (%w+)"] = function(_, type) return { mod("Enemy" .. firstToUpper(type) .. "Chance", "BASE", 100, nil, ModFlag.Hit, { type = "SkillType", skillType = SkillType.RandomElement }), } end, - ["critical strikes do not [ia][np][fp]l[iy]c?t? non%-damaging ailments"] = { + ["critical strikes do not inherently [ia][np][fp]l[iy]c?t? non%-damaging ailments"] = { flag("CritsDontAlwaysChill"), flag("CritsDontAlwaysFreeze"), flag("CritsDontAlwaysShock"), @@ -5461,7 +5464,7 @@ local specialModList = { ["every 8 seconds, gain avatar of fire for 4 seconds"] = { flag("Condition:HaveVulconus"), }, - ["when hit, gain a random movement speed modifier from 40%% reduced to 100%% increased until hit again"] = { + ["when hit, gain a random movement speed modifier from 40%% reduced to 100%% increased,? until hit again"] = { flag("Condition:HaveGamblesprint"), }, ["trigger socketed curse spell when you cast a curse spell, with a ([%d%.]+) second cooldown"] = {