Skip to content
This repository was archived by the owner on Oct 21, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/Modules/CalcSetup.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1108,6 +1108,15 @@ function calcs.initEnv(build, mode, override, specEnv)
env.itemModDB:ScaleAddMod(mod, scale)
end
end
elseif item.type == "Quiver" and items["Weapon 1"] and items["Weapon 1"].name:match("Widowhail") then
local widowHailMod=(1 + (items["Weapon 1"].baseModList:Sum("INC", nil, "EffectOfBonusesFromQuiver") or 100) / 100)
scale = scale * widowHailMod
env.modDB:NewMod("WidowHailMultiplier", "BASE", widowHailMod, "Widowhail")
local combinedList = new("ModList")
for _, mod in ipairs(srcList) do
combinedList:MergeMod(mod)
end
env.itemModDB:ScaleAddList(combinedList, scale)
elseif env.modDB.multipliers["CorruptedMagicJewelEffect"] and item.type == "Jewel" and item.rarity == "MAGIC" and item.corrupted and slot.nodeId and item.base.subType ~= "Charm" then
scale = scale + env.modDB.multipliers["CorruptedMagicJewelEffect"]
local combinedList = new("ModList")
Expand Down
12 changes: 6 additions & 6 deletions src/Modules/ModParser.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2274,16 +2274,16 @@
["life leech is instant"] = { mod("InstantLifeLeech", "BASE", 100), },
["mana leech is instant"] = { mod("InstantManaLeech", "BASE", 100), },
["mana leech effects also recover energy shield"] = { flag("ManaLeechRecoversEnergyShield") },
["leeche?s? (%d.+)%% of (%a+) damage as mana"] = function(num, _, dmgType) return {

Check warning on line 2277 in src/Modules/ModParser.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (leeche)
mod(firstToUpper(dmgType) .. "DamageManaLeech", "BASE", num),
} end,
["leeche?s? (%d.+)%% of (%a+) damage as life"] = function(num, _, dmgType) return {

Check warning on line 2280 in src/Modules/ModParser.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (leeche)
mod(firstToUpper(dmgType) .. "DamageLifeLeech", "BASE", num),
} end,
["leeche?s? (%d.+)%% of (%a+) attack damage as mana"] = function(num, _, dmgType) return {

Check warning on line 2283 in src/Modules/ModParser.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (leeche)
mod(firstToUpper(dmgType) .. "DamageManaLeech", "BASE", num, nil, ModFlag.Attack, 0),
} end,
["leeche?s? (%d.+)%% of (%a+) attack damage as life"] = function(num, _, dmgType) return {

Check warning on line 2286 in src/Modules/ModParser.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (leeche)
mod(firstToUpper(dmgType) .. "DamageLifeLeech", "BASE", num, nil, ModFlag.Attack, 0),
} end,
-- Ascendant
Expand Down Expand Up @@ -2430,8 +2430,8 @@
["(%d+)%% increased mirage archer duration"] = function(num) return { mod("MirageArcherDuration", "INC", num), } end,
["([%-%+]%d+) to maximum number of summoned mirage archers"] = function(num) return { mod("MirageArcherMaxCount", "BASE", num), } end,
["([%-%+]%d+) to maximum number of sacred wisps"] = function(num) return { mod("SacredWispsMaxCount", "BASE", num), } end,
["projectiles deal (%d+)%% more hit damage to targets in the first ([%d%.]+) metres of their movement, scaling [du][op]w?n? with distance travelled to reach (%d+)%% after ([%d%.]+) metres"] = function(num, _, strFirstDist, strLowPrct, strSecondDist) return {

Check warning on line 2433 in src/Modules/ModParser.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (Prct)
mod("Damage", "MORE", 100, nil, bor(ModFlag.Hit, ModFlag.Projectile), { type = "DistanceRamp", ramp = { { 10*tonumber(strFirstDist), num / 100}, {10*tonumber(strSecondDist), tonumber(strLowPrct) / 100} } }),

Check warning on line 2434 in src/Modules/ModParser.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (Prct)
} end,
-- Elementalist
["gain (%d+)%% increased area of effect for %d+ seconds"] = function(num) return { mod("AreaOfEffect", "INC", num, { type = "Condition", var = "PendulumOfDestructionAreaOfEffect" }) } end,
Expand Down Expand Up @@ -2787,7 +2787,7 @@
} end,
["gain maximum life instead of maximum energy shield from equipped armour items"] = { flag("ConvertArmourESToLife") },
-- Mercenary - Gemling
["attribute requirements of gems can be satisi?fied by your highest attribute"] = { flag("GemAttributeRequirementsSatisfiedByHighestAttribute") },

Check warning on line 2790 in src/Modules/ModParser.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (satisi)

Check warning on line 2790 in src/Modules/ModParser.lua

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (fied)
["you can use two copies of the same support gem in different skills"] = { mod("MaxSupportGemCopies", "OVERRIDE", 2) },
-- Stormweaver
["targets can be affected by two of your shocks at the same time"] = { flag("ShockCanStack"), mod("ShockStacksMax", "OVERRIDE", 2) },
Expand Down Expand Up @@ -2839,10 +2839,10 @@
["(%d+)%% of recovery applied instantly"] = function(num) return { mod("FlaskInstantRecovery", "BASE", num) } end,
["has no attribute requirements"] = { flag("NoAttributeRequirements") },
-- Skill modifiers
["([%+%-]%d+)%% to quality of all skills"] = function(num) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "quality", value = num }) } end,
["([%+%-]%d+)%% to quality of all skills"] = function(num) return { mod("GemProperty", "LIST", { keyword = "grants_active_skill", key = "quality", value = num, keyOfScaledMod = "value" }) } end,
["([%+%-]%d+)%%? to (%a+) of all ?([%a%- ]*) skills"] = function(num, _, property, type)
if type == "" then type = "all" end
return { mod("GemProperty", "LIST", { keyword = type, key = property, value = num }) }
return { mod("GemProperty", "LIST", { keyword = type, key = property, value = num, keyOfScaledMod = "value" }) }
end,
["grants level (%d+) snipe skill"] = function(num) return {
mod("ExtraSkill", "LIST", { skillId = "Snipe", level = num }),
Expand All @@ -2851,16 +2851,16 @@
-- Global gem modifiers
["([%+%-]%d+)%%? to (%a+) of all (.+) skills"] = function(num, _, property, skill)
if gemIdLookup[skill] then
return { mod("GemProperty", "LIST", {keyword = skill, key = "level", value = num }) }
return { mod("GemProperty", "LIST", {keyword = skill, key = "level", value = num, keyOfScaledMod = "value" }) }
end
local wordList = {}
for tag in skill:gmatch("%w+") do
table.insert(wordList, tag)
end
return { mod("GemProperty", "LIST", {keywordList = wordList, key = property, value = num }) }
return { mod("GemProperty", "LIST", {keywordList = wordList, key = property, value = num, keyOfScaledMod = "value" }) }
end,
["gems socketed in red sockets have [%+%-](%d+) to level"] = function(num) return { mod("GemProperty", "LIST", { keyword = "all", key = "level", value = num }, { type = "SocketedIn", slotName = "{SlotName}", socketColor = "R" }) } end,
["gems socketed in green sockets have [%+%-](%d+)%% to quality"] = function(num) return { mod("GemProperty", "LIST", { keyword = "all", key = "quality", value = num }, { type = "SocketedIn", slotName = "{SlotName}", socketColor = "G" }) } end,
["gems socketed in red sockets have [%+%-](%d+) to level"] = function(num) return { mod("GemProperty", "LIST", { keyword = "all", key = "level", value = num, keyOfScaledMod = "value" }, { type = "SocketedIn", slotName = "{SlotName}", socketColor = "R" }) } end,
["gems socketed in green sockets have [%+%-](%d+)%% to quality"] = function(num) return { mod("GemProperty", "LIST", { keyword = "all", key = "quality", value = num, keyOfScaledMod = "value" }, { type = "SocketedIn", slotName = "{SlotName}", socketColor = "G" }) } end,
["%+(%d+)%% to fire resistance when socketed with a red gem"] = function(num) return { mod("SocketProperty", "LIST", { value = mod("FireResist", "BASE", num) }, { type = "SocketedIn", slotName = "{SlotName}", keyword = "strength", sockets = {1} }) } end,
["%+(%d+)%% to cold resistance when socketed with a green gem"] = function(num) return { mod("SocketProperty", "LIST", { value = mod("ColdResist", "BASE", num) }, { type = "SocketedIn", slotName = "{SlotName}", keyword = "dexterity", sockets = {1} }) } end,
["%+(%d+)%% to lightning resistance when socketed with a blue gem"] = function(num) return { mod("SocketProperty", "LIST", { value = mod("LightningResist", "BASE", num) }, { type = "SocketedIn", slotName = "{SlotName}", keyword = "intelligence", sockets = {1} }) } end,
Expand Down
Loading