Skip to content

Commit d75191b

Browse files
PeecheyLocalIdentity
andauthored
Add support for Breachlord Bloodline's Esh of the Storm and Tul of the Blizzard (#9284)
* add support for Breachlord's Esh of the Storms and Tul of the Blizzard * fix foulborn key overriding unique, spellcheck * move kalandra logic to better spot * remove unnecessary looping * Simplify logic --------- Co-authored-by: LocalIdentity <[email protected]>
1 parent f409d3c commit d75191b

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

src/Data/ModCache.lua

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -602,15 +602,13 @@ c["+2 to Level of Socketed Spell Gems"]={{[1]={[1]={slotName="{SlotName}",type="
602602
c["+2 to Level of Socketed Support Gems"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="support",value=2}}},nil}
603603
c["+2 to Level of Socketed Vaal Gems"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="vaal",value=2}}},nil}
604604
c["+2 to Level of all Chaos Spell Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keywordList={[1]="chaos",[2]="spell",[3]="skill"},value=2}}},nil}
605-
c["+2 to Level of all Cold Skill Gems if at least 4 Foulborn Unique Items are Equipped"]={{}," Level of all Cold Skill Gems if at least 4 Foulborn Unique Items are Equipped "}
606-
c["+2 to Level of all Cold Skill Gems if at least 4 Foulborn Unique Items are Equipped Your Hits ignore Enemy Monster Cold Resistances if all Equipped Rings are Cryonic Rings"]={{[1]={flags=0,keywordFlags=0,name="ColdResist",type="BASE",value=2}}," Level of all Cold Skill Gems if at least 4 Foulborn Unique Items are Equipped Your Hits ignore Enemy Monster s if all Equipped Rings are Cryonic Rings "}
605+
c["+2 to Level of all Cold Skill Gems if at least 4 Foulborn Unique Items are Equipped"]={{[1]={[1]={threshold=4,type="MultiplierThreshold",var="FoulbornUniqueItem"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keyword="cold",value=2}}},nil}
607606
c["+2 to Level of all Cold Spell Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keywordList={[1]="cold",[2]="spell",[3]="skill"},value=2}}},nil}
608607
c["+2 to Level of all Curse Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keywordList={[1]="curse",[2]="skill"},value=2}}},nil}
609608
c["+2 to Level of all Elemental Skill Gems if the stars are aligned"]={{[1]={[1]={type="Condition",var="StarsAreAligned"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keywordList={[1]="elemental",[2]="grants_active_skill"},value=2}}},nil}
610609
c["+2 to Level of all Elemental Support Gems if the stars are aligned"]={{[1]={[1]={type="Condition",var="StarsAreAligned"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keywordList={[1]="elemental",[2]="support"},value=2}}},nil}
611610
c["+2 to Level of all Fire Spell Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keywordList={[1]="fire",[2]="spell",[3]="skill"},value=2}}},nil}
612-
c["+2 to Level of all Lightning Skill Gems if at least 4 Foulborn Unique Items are Equipped"]={{}," Level of all Lightning Skill Gems if at least 4 Foulborn Unique Items are Equipped "}
613-
c["+2 to Level of all Lightning Skill Gems if at least 4 Foulborn Unique Items are Equipped +30 to Intelligence"]={{[1]={flags=0,keywordFlags=0,name="Int",type="BASE",value=2}}," Level of all Lightning Skill Gems if at least 4 Foulborn Unique Items are Equipped +30 to "}
611+
c["+2 to Level of all Lightning Skill Gems if at least 4 Foulborn Unique Items are Equipped"]={{[1]={[1]={threshold=4,type="MultiplierThreshold",var="FoulbornUniqueItem"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keyword="lightning",value=2}}},nil}
614612
c["+2 to Level of all Lightning Spell Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keywordList={[1]="lightning",[2]="spell",[3]="skill"},value=2}}},nil}
615613
c["+2 to Level of all Link Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keywordList={[1]="link",[2]="skill"},value=2}}},nil}
616614
c["+2 to Level of all Melee Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keywordList={[1]="melee",[2]="skill"},value=2}}},nil}
@@ -12462,10 +12460,8 @@ c["Your Hits are always Critical Strikes"]={{[1]={flags=0,keywordFlags=0,name="C
1246212460
c["Your Hits can only Kill Frozen enemies"]={nil,"Your Hits can only Kill Frozen enemies "}
1246312461
c["Your Hits can't be Evaded by Blinded Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Blinded"},flags=0,keywordFlags=0,name="CannotBeEvaded",type="FLAG",value=true}},nil}
1246412462
c["Your Hits cannot Penetrate or ignore Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="CannotElePenIgnore",type="FLAG",value=true}},nil}
12465-
c["Your Hits ignore Enemy Monster Cold Resistances if all Equipped Rings are Cryonic Rings"]={nil,"Your Hits ignore Enemy Monster Cold Resistances if all Equipped Rings are Cryonic Rings "}
12466-
c["Your Hits ignore Enemy Monster Lightning Resistances if all Equipped Rings are Synaptic Rings"]={nil,"Your Hits ignore Enemy Monster Lightning Resistances if all Equipped Rings are Synaptic Rings "}
12467-
c["Your Hits ignore Enemy Monster Lightning Resistances if all Equipped Rings are Synaptic Rings +2 to Level of all Lightning Skill Gems if at least 4 Foulborn Unique Items are Equipped"]={nil,"Your Hits ignore Enemy Monster Lightning Resistances if all Equipped Rings are Synaptic Rings +2 to Level of all Lightning Skill Gems if at least 4 Foulborn Unique Items are Equipped "}
12468-
c["Your Hits ignore Enemy Monster Lightning Resistances if all Equipped Rings are Synaptic Rings +2 to Level of all Lightning Skill Gems if at least 4 Foulborn Unique Items are Equipped +30 to Intelligence"]={nil,"Your Hits ignore Enemy Monster Lightning Resistances if all Equipped Rings are Synaptic Rings +2 to Level of all Lightning Skill Gems if at least 4 Foulborn Unique Items are Equipped +30 to Intelligence "}
12463+
c["Your Hits ignore Enemy Monster Cold Resistances if all Equipped Rings are Cryonic Rings"]={{[1]={[1]={threshold=2,type="MultiplierThreshold",var="CryonicRingEquipped"},flags=0,keywordFlags=0,name="IgnoreColdResistance",type="FLAG",value=true}},nil}
12464+
c["Your Hits ignore Enemy Monster Lightning Resistances if all Equipped Rings are Synaptic Rings"]={{[1]={[1]={threshold=2,type="MultiplierThreshold",var="SynapticRingEquipped"},flags=0,keywordFlags=0,name="IgnoreLightningResistance",type="FLAG",value=true}},nil}
1246912465
c["Your Hits permanently Intimidate Enemies that are on Full Life"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="ChampionIntimidate"},flags=0,keywordFlags=0,name="Condition:Intimidated",type="FLAG",value=true}}}},nil}
1247012466
c["Your Hits treat Cold Resistance as 10% higher than actual value"]={{[1]={flags=0,keywordFlags=262144,name="ColdPenetration",type="BASE",value=-10}},nil}
1247112467
c["Your Lightning Damage can Freeze but not Shock"]={{[1]={flags=0,keywordFlags=0,name="LightningCanFreeze",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="LightningCannotShock",type="FLAG",value=true}},nil}

src/Modules/CalcSetup.lua

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1039,8 +1039,12 @@ function calcs.initEnv(build, mode, override, specEnv)
10391039
if otherRing.elder or otherRing.shaper then
10401040
env.itemModDB.multipliers.ShaperOrElderItem = (env.itemModDB.multipliers.ShaperOrElderItem or 0) + 1
10411041
end
1042+
-- Esh of the Storm, Tul of the Blizzard
1043+
local otherRingKey = otherRing.baseName:gsub(" ", "").."Equipped"
1044+
if otherRingKey then
1045+
env.itemModDB.multipliers[otherRingKey] = (env.itemModDB.multipliers[otherRingKey] or 0) + 1
1046+
end
10421047
end
1043-
10441048
-- Only ExtraSkill implicit mods work (none should but this is likely an in game bug)
10451049
for _, mod in ipairs(srcList) do
10461050
if mod.name == "ExtraSkill" then
@@ -1098,6 +1102,9 @@ function calcs.initEnv(build, mode, override, specEnv)
10981102
-- Update item counts
10991103
local key
11001104
if item.rarity == "UNIQUE" or item.rarity == "RELIC" then
1105+
if item.foulborn then
1106+
env.itemModDB.multipliers["FoulbornUniqueItem"] = (env.itemModDB.multipliers["FoulbornUniqueItem"] or 0) + 1
1107+
end
11011108
key = "UniqueItem"
11021109
elseif item.rarity == "RARE" then
11031110
key = "RareItem"
@@ -1119,6 +1126,11 @@ function calcs.initEnv(build, mode, override, specEnv)
11191126
env.itemModDB.multipliers.ShaperOrElderItem = (env.itemModDB.multipliers.ShaperOrElderItem or 0) + 1
11201127
end
11211128
env.itemModDB.multipliers[item.type:gsub(" ", ""):gsub(".+Handed", "").."Item"] = (env.itemModDB.multipliers[item.type:gsub(" ", ""):gsub(".+Handed", "").."Item"] or 0) + 1
1129+
-- base ring count, e.g. Cryonic, Synaptic for Breachlord Esh of the Storm, Tul of the Blizzard
1130+
if item.type == "Ring" then
1131+
local key = item.baseName:gsub(" ", "").."Equipped"
1132+
env.itemModDB.multipliers[key] = (env.itemModDB.multipliers[key] or 0) + 1
1133+
end
11221134
-- Calculate socket counts
11231135
local slotEmptySocketsCount = { R = 0, G = 0, B = 0, W = 0}
11241136
local slotGemSocketsCount = 0

src/Modules/ModParser.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2953,6 +2953,7 @@ local specialModList = {
29532953
["([%+%-]%d+) to level of all elemental support gems if the stars are aligned"] = function(num) return { mod("GemProperty", "LIST", { keywordList = { "elemental", "support" }, key = "level", value = num, keyOfScaledMod = "value" }, { type = "Condition", var = "StarsAreAligned" })} end,
29542954
["([%+%-]%d+) to level of socketed active skill gems per (%d+) player levels"] = function(num, _, div) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "level", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }, { type = "Multiplier", var = "Level", div = tonumber(div) }) } end,
29552955
["([%+%-]%d+) to level of all (%a+) skill gems if (%d+) (%a+) items are equipped"] = function(num, _, element, thresh, influence) return { mod("GemProperty", "LIST", { keyword = element, key = "level", value = num, keyOfScaledMod = "value" }, { type = "MultiplierThreshold", var = firstToUpper(influence) .. "Item", threshold = tonumber(thresh) }) } end,
2956+
["([%+%-]%d+) to level of all (%a+) skill gems if a?t? ?l?e?a?s?t? ?(%d+) (%a+) (%a+) items are equipped"] = function(num, _, element, thresh, influence, influence2) return { mod("GemProperty", "LIST", { keyword = element, key = "level", value = num, keyOfScaledMod = "value" }, { type = "MultiplierThreshold", var = firstToUpper(influence) .. firstToUpper(influence2) .. "Item", threshold = tonumber(thresh) }) } end,
29562957
["([%+%-]%d+) to level of all ?([%a%- ]*) support gems if (%d+) (%a+) items are equipped"] = function(num, _, element, thresh, influence) return { mod("GemProperty", "LIST", { keyword = element, key = "level", value = num, keyOfScaledMod = "value" }, { type = "MultiplierThreshold", var = firstToUpper(influence) .. "Item", threshold = tonumber(thresh) }) } end,
29572958
["([%+%-]%d+) to level of socketed skill gems per (%d+) player levels"] = function(num, _, div) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "level", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }, { type = "Multiplier", var = "Level", div = tonumber(div) }) } end,
29582959
["socketed gems fire an additional projectile"] = { mod("ExtraSkillMod", "LIST", { mod = mod("ProjectileCount", "BASE", 1) }, { type = "SocketedIn", slotName = "{SlotName}" }) },
@@ -5037,6 +5038,7 @@ local specialModList = {
50375038
["with a hypnotic eye jewel socketed, gain arcane surge on hit with spells"] = function(num) return { flag("Condition:ArcaneSurge", { type = "Condition", var = "HitSpellRecently" }, { type = "Condition", var = "HaveHypnoticEyeJewelIn{SlotName}" }) } end,
50385039
["hits ignore enemy monster chaos resistance if all equipped items are shaper items"] = { flag("IgnoreChaosResistance", { type = "MultiplierThreshold", var = "NonShaperItem", upper = true, threshold = 0 }) },
50395040
["hits ignore enemy monster chaos resistance if all equipped items are elder items"] = { flag("IgnoreChaosResistance", { type = "MultiplierThreshold", var = "NonElderItem", upper = true, threshold = 0 }) },
5041+
["your hits ignore enemy monster (%a+) resistances? if all equipped rings are (%a+) rings"] = function(_, damageType, baseType) return { flag("Ignore"..firstToUpper(damageType).."Resistance", { type = "MultiplierThreshold", var = firstToUpper(baseType).."RingEquipped", threshold = 2 }) } end,
50405042
["the stars are aligned if you have 6 influence types among other equipped items"] = {
50415043
flag("Condition:StarsAreAligned", { type = "MultiplierThreshold", var = "ShaperItem", threshold = 2 }, { type = "MultiplierThreshold", var = "ElderItem", threshold = 2 }, { type = "MultiplierThreshold", var = "WarlordItem", threshold = 2 },
50425044
{ type = "MultiplierThreshold", var = "HunterItem", threshold = 2 }, { type = "MultiplierThreshold", var = "CrusaderItem", threshold = 2 }, { type = "MultiplierThreshold", var = "RedeemerItem", threshold = 2 }),

0 commit comments

Comments
 (0)