addressing requested changes - part 1

This commit is contained in:
Nostrademous
2021-03-27 09:59:30 -04:00
parent 99b7c144dd
commit f22a7b8e6c
8 changed files with 81 additions and 85 deletions

View File

@@ -448,7 +448,7 @@ end
-- Estimate the offensive and defensive power of all unallocated nodes
function CalcsTabClass:PowerBuilder()
local timer_start = GetTime()
--local timer_start = GetTime()
local calcFunc, calcBase = self:GetMiscCalculator()
local cache = { }
local newPowerMax = {

View File

@@ -55,7 +55,7 @@ function GemSelectClass:PopulateGemList()
for gemId, gemData in pairs(self.skillsTab.build.data.gems) do
if (showAwakened or showAll) and gemData.grantedEffect.plusVersionOf then
self.gems["Default:" .. gemId] = gemData
elseif (showNormal or showAll) then
elseif showNormal or showAll then
if self.skillsTab.showAltQualityGems and self.skillsTab.defaultGemQuality > 0 then
for _, altQual in ipairs(self.skillsTab:getGemAltQualityList(gemData)) do
self.gems[altQual.type .. ":" .. gemId] = gemData
@@ -140,8 +140,7 @@ function GemSelectClass:BuildList(buf)
end
function GemSelectClass:UpdateSortCache()
--profiler.start()
local start = GetTime()
--local start = GetTime()
local sortCache = self.sortCache
--Don't update the cache if no settings have changed that would impact the ordering
if sortCache and sortCache.socketGroup == self.skillsTab.displayGroup and sortCache.gemInstance == self.skillsTab.displayGroup.gemList[self.index] and
@@ -228,8 +227,6 @@ function GemSelectClass:UpdateSortCache()
sortCache.dpsColor[gemId] = "^xFFFF66"
end
end
--profiler.stop()
--profiler.report('sortCache.txt')
--ConPrintf("Gem Selector time: %d ms", GetTime() - start)
end

View File

@@ -125,9 +125,9 @@ function calcs.createActiveSkill(activeEffect, supportList, actor, socketGroup,
end
-- Copy an Active Skill
function calcs.copyActiveSkill(build, mode, skill)
function calcs.copyActiveSkill(env, mode, skill)
local newSkill = calcs.createActiveSkill(skill.activeEffect, skill.supportList, skill.actor, skill.socketGroup, skill.summonSkill)
local newEnv, _, _ = calcs.initEnv(build, mode)
local newEnv, _, _, _ = calcs.initEnv(env.build, mode, {}, {})
calcs.buildActiveSkillModList(newEnv, newSkill)
return newSkill, newEnv
end

View File

@@ -3675,7 +3675,7 @@ function calcs.offence(env, actor, activeSkill)
-- Grab a fully-processed by calcs.perform() version of the skill that Mirage Warrior(s) will use
local uuid = cacheSkillUUID(triggerSkill)
if not GlobalCache.cachedData["CALCS"][uuid] then
calcs.buildActiveSkill(env.build, "CALCS", triggerSkill)
calcs.buildActiveSkill(env, "CALCS", triggerSkill)
env.dontCache = true
end
if GlobalCache.cachedData["CALCS"][uuid] then
@@ -3691,7 +3691,7 @@ function calcs.offence(env, actor, activeSkill)
local exertMore = env.modDB:Sum("MORE", usedSkill.skillCfg, "ExertIncrease")
local maxMirageWarriors = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "GeneralsCryDoubleMaxCount")
local newSkill, newEnv = calcs.copyActiveSkill(env.build, "CALCS", usedSkill)
local newSkill, newEnv = calcs.copyActiveSkill(env, "CALCS", usedSkill)
-- Add new modifiers to new skill (which already has all the old skill's modifiers)
newSkill.skillModList:NewMod("Damage", "MORE", moreDamage, "General's Cry", activeSkill.ModFlags, activeSkill.KeywordFlags)
@@ -3741,7 +3741,7 @@ function calcs.offence(env, actor, activeSkill)
-- Grab a fully-processed by calcs.perform() version of the skill that Mirage Warrior(s) will use
local uuid = cacheSkillUUID(triggerSkill)
if not GlobalCache.cachedData["CALCS"][uuid] then
calcs.buildActiveSkill(env.build, "CALCS", triggerSkill)
calcs.buildActiveSkill(env, "CALCS", triggerSkill)
env.dontCache = true
end
-- We found a skill and it can crit
@@ -3762,7 +3762,7 @@ function calcs.offence(env, actor, activeSkill)
if usedSkill then
local moreDamage = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "SaviourMirageWarriorLessDamage")
local maxMirageWarriors = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "SaviourMirageWarriorMaxCount")
local newSkill, newEnv = calcs.copyActiveSkill(env.build, "CALCS", usedSkill)
local newSkill, newEnv = calcs.copyActiveSkill(env, "CALCS", usedSkill)
-- Add new modifiers to new skill (which already has all the old skill's modifiers)
newSkill.skillModList:NewMod("Damage", "MORE", moreDamage, "The Saviour", activeSkill.ModFlags, activeSkill.KeywordFlags)

View File

@@ -23,7 +23,7 @@ local tempTable1 = { }
local function findTriggerSkill(env, skill, source, triggerRate, reqManaCost)
local uuid = cacheSkillUUID(skill)
if not GlobalCache.cachedData["CACHE"][uuid] then
calcs.buildActiveSkill(env.build, "CACHE", skill)
calcs.buildActiveSkill(env, "CACHE", skill)
env.dontCache = true
end
@@ -31,14 +31,12 @@ local function findTriggerSkill(env, skill, source, triggerRate, reqManaCost)
-- Below code sets the trigger skill to highest APS skill it finds that meets all conditions
if not source and GlobalCache.cachedData["CACHE"][uuid].Speed then
if reqManaCost and GlobalCache.cachedData["CACHE"][uuid].ManaCost and GlobalCache.cachedData["CACHE"][uuid].ManaCost >= reqManaCost then
ConPrintf(skill.activeEffect.grantedEffect.name)
return skill, GlobalCache.cachedData["CACHE"][uuid].Speed
elseif not reqManaCost then
return skill, GlobalCache.cachedData["CACHE"][uuid].Speed
end
elseif GlobalCache.cachedData["CACHE"][uuid].Speed and GlobalCache.cachedData["CACHE"][uuid].Speed > triggerRate then
if reqManaCost and GlobalCache.cachedData["CACHE"][uuid].ManaCost and GlobalCache.cachedData["CACHE"][uuid].ManaCost >= reqManaCost then
ConPrintf(skill.activeEffect.grantedEffect.name)
return skill, GlobalCache.cachedData["CACHE"][uuid].Speed
elseif not reqManaCost then
return skill, GlobalCache.cachedData["CACHE"][uuid].Speed
@@ -268,7 +266,7 @@ local function calcActualTriggerRate(env, source, sourceAPS, spellCount, output,
end
-- Account for APS modifications do to Dual Wield or Simultaneous Strikes
local function calcDualWieldImpact(env, sourceAPS, sourceName)
local function calcDualWieldImpact(env, sourceAPS, skillDoubleHitsWhenDualWielding)
-- See if we are dual wielding
local dualWield = false
if env.player.weaponData1.type and env.player.weaponData2.type then
@@ -277,7 +275,7 @@ local function calcDualWieldImpact(env, sourceAPS, sourceName)
end
-- See if we are using a trigger skill that hits with both weapons simultaneously
if dualWield and (sourceName == "Cleave" or sourceName == "Dual Strike" or sourceName == "Viper Strike" or sourceName == "Riposte") then
if dualWield and skillDoubleHitsWhenDualWielding then
-- those source skills hit with both weapons simultaneously, thus doubling the trigger rate
sourceAPS = sourceAPS * 2.0
end
@@ -1914,7 +1912,7 @@ function calcs.perform(env)
local sourceAPS = GlobalCache.cachedData["CACHE"][uuid].Speed
local dualWield = false
sourceAPS, dualWield = calcDualWieldImpact(env, sourceAPS, source.activeEffect.grantedEffect.name)
sourceAPS, dualWield = calcDualWieldImpact(env, sourceAPS, source.skillData.doubleHitsWhenDualWielding)
-- Get action trigger rate
trigRate = calcActualTriggerRate(env, source, sourceAPS, spellCount, output, breakdown, dualWield)
@@ -1964,7 +1962,7 @@ function calcs.perform(env)
local sourceAPS = GlobalCache.cachedData["CACHE"][uuid].Speed
local dualWield = false
sourceAPS, dualWield = calcDualWieldImpact(env, sourceAPS, source.activeEffect.grantedEffect.name)
sourceAPS, dualWield = calcDualWieldImpact(env, sourceAPS, source.skillData.doubleHitsWhenDualWielding)
-- Get action trigger rate
trigRate = calcActualTriggerRate(env, source, sourceAPS, spellCount, output, breakdown, dualWield)
@@ -1997,7 +1995,7 @@ function calcs.perform(env)
-- if we don't have a processed cached copy of this skill, get one
if not GlobalCache.cachedData["MAIN"][uuid] then
calcs.buildActiveSkill(env.build, "MAIN", env.player.mainSkill, true)
calcs.buildActiveSkill(env, "MAIN", env.player.mainSkill, true)
end
if GlobalCache.cachedData["MAIN"][uuid] then
usedSkill = GlobalCache.cachedData["MAIN"][uuid].ActiveSkill
@@ -2037,7 +2035,7 @@ function calcs.perform(env)
local uuid = cacheSkillUUID(env.player.mainSkill)
-- re-build the active skill in this case and don't cache
calcs.buildActiveSkill(env.build, "CALCS", env.player.mainSkill, true)
calcs.buildActiveSkill(env, "CALCS", env.player.mainSkill, true)
env.dontCache = true
if GlobalCache.cachedData["CALCS"][uuid] then
@@ -2049,7 +2047,7 @@ function calcs.perform(env)
local moreAttackSpeed = usedSkill.skillModList:Sum("BASE", usedSkill.skillCfg, "MirageArcherLessAttackSpeed")
local maxMirageArchers = env.player.mainSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "MirageArcherMaxCount")
local newSkill, newEnv = calcs.copyActiveSkill(env.build, "CALCS", usedSkill)
local newSkill, newEnv = calcs.copyActiveSkill(env, "CALCS", usedSkill)
-- Add new modifiers to new skill (which already has all the old skill's modifiers)
newSkill.skillModList:NewMod("Damage", "MORE", moreDamage, "Mirage Archer", env.player.mainSkill.ModFlags, env.player.mainSkill.KeywordFlags)
@@ -2333,7 +2331,7 @@ function calcs.perform(env)
local sourceAPS = GlobalCache.cachedData["CACHE"][uuid].Speed
local dualWield = false
sourceAPS, dualWield = calcDualWieldImpact(env, sourceAPS, source.activeEffect.grantedEffect.name)
sourceAPS, dualWield = calcDualWieldImpact(env, sourceAPS, source.skillData.doubleHitsWhenDualWielding)
-- Get action trigger rate
trigRate = calcActualTriggerRate(env, source, sourceAPS, spellCount, output, breakdown, dualWield)

View File

@@ -251,7 +251,7 @@ function calcs.calcFullDPS(build, mode, override, specEnv)
skills = true,
everything = true,
}
fullEnv, _, _ = calcs.initEnv(build, mode, override or {}, { cachedPlayerDB = cachedPlayerDB, cachedEnemyDB = cachedEnemyDB, cachedMinionDB = cachedMinionDB, env = fullEnv, accelerate = accelerationTbl })
fullEnv, _, _, _ = calcs.initEnv(build, mode, override or {}, { cachedPlayerDB = cachedPlayerDB, cachedEnemyDB = cachedEnemyDB, cachedMinionDB = cachedMinionDB, env = fullEnv, accelerate = accelerationTbl })
end
end
end
@@ -286,8 +286,8 @@ function calcs.calcFullDPS(build, mode, override, specEnv)
end
-- Process active skill
function calcs.buildActiveSkill(build, mode, skill, setMark)
local fullEnv, _, _ = calcs.initEnv(build, mode)
function calcs.buildActiveSkill(env, mode, skill, setMark)
local fullEnv, _, _, _ = calcs.initEnv(env.build, mode, {}, {})
for _, activeSkill in ipairs(fullEnv.player.activeSkillList) do
if cacheSkillUUID(activeSkill) == cacheSkillUUID(skill) then
fullEnv.player.mainSkill = activeSkill

View File

@@ -26,7 +26,8 @@ common.xml = require("xml")
common.base64 = require("base64")
common.sha1 = require("sha1")
profiler = LoadModule("Modules/Profiler")
-- Uncomment if you need to perform in-depth profiling
--profiler = LoadModule("Modules/Profiler")
-- Class library
common.classes = { }

View File

@@ -1309,7 +1309,7 @@ for name, grantedEffect in pairs(data.skills) do
gemIdLookup[grantedEffect.name:lower()] = grantedEffect.id
end
end
local function extraSkillGranted(name, level, noSupports)
local function grantedExtraSkill(name, level, noSupports)
name = name:gsub(" skill","")
if gemIdLookup[name] then
return {
@@ -1317,7 +1317,7 @@ local function extraSkillGranted(name, level, noSupports)
}
end
end
local function extraSkill(name, level, noSupports)
local function triggerExtraSkill(name, level, noSupports)
name = name:gsub(" skill","")
if gemIdLookup[name] then
return {
@@ -1500,7 +1500,7 @@ local specialModList = {
mod("Damage", "MORE", num, { type = "Multiplier", var = "EnduranceChargesLostRecently", limit = tonumber(limit), limitTotal = true }),
} end,
["(%d+)%% more damage if you've lost an endurance charge in the past 8 seconds"] = function(num) return { mod("Damage", "MORE", num, { type = "Condition", var = "LostEnduranceChargeInPast8Sec" }) } end,
["trigger level (%d+) (.+) when you attack with a non%-vaal slam skill near an enemy"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you attack with a non%-vaal slam skill near an enemy"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
-- Deadeye
["projectiles pierce all nearby targets"] = { flag("PierceAllTargets") },
["gain %+(%d+) life when you hit a bleeding enemy"] = function(num) return { mod("LifeOnHit", "BASE", num, { type = "ActorCondition", actor = "enemy", var = "Bleeding" }) } end,
@@ -1810,44 +1810,44 @@ local specialModList = {
["%+(%d+) to level of all intelligence skill gems"] = function(num) return { mod("GemProperty", "LIST", { keywordList = { "intelligence", "active_skill" }, key = "level", value = num }) } end,
["%+(%d+) to level of all (.+) gems"] = function(num, _, skill) return { mod("GemProperty", "LIST", {keyword = skill, key = "level", value = num }) } end,
-- Extra skill/support
["grants (%D+)"] = function(_, skill) return extraSkillGranted(skill, 1) end,
["grants level (%d+) (.+)"] = function(num, _, skill) return extraSkillGranted(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when equipped"] = function(num, _, skill) return extraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) on %a+"] = function(num, _, skill) return extraSkill(skill, num) end,
["use level (%d+) (.+) on %a+"] = function(num, _, skill) return extraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when you attack"] = function(num, _, skill) return extraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when you deal a critical strike"] = function(num, _, skill) return extraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when hit"] = function(num, _, skill) return extraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when you kill an enemy"] = function(num, _, skill) return extraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when you use a skill"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you use a skill while you have a spirit charge"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you hit an enemy while cursed"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you hit a bleeding enemy"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you hit a rare or unique enemy"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you hit a frozen enemy"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you kill a frozen enemy"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you consume a corpse"] = function(num, _, skill) return skill == "summon phantasm skill" and extraSkill("triggered summon phantasm skill", num) or extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you attack with a bow"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you block"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when animated guardian kills an enemy"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you lose cat's stealth"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when your trap is triggered"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) on hit with this weapon"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) on melee hit while cursed"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) every [%d%.]+ seconds while phasing"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) when you gain avian's might or avian's flight"] = function(num, _, skill) return extraSkill(skill, num) end,
["triggers level (%d+) (.+) when equipped"] = function(num, _, skill) return extraSkill(skill, num) end,
["%d+%% chance to attack with level (%d+) (.+) on melee hit"] = function(num, _, skill) return extraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) when animated weapon kills an enemy"] = function(num, _, skill) return extraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) on melee hit"] = function(num, _, skill) return extraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) [ow][nh]e?n? ?y?o?u? kill ?a?n? ?e?n?e?m?y?"] = function(num, _, skill) return extraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) when you use a socketed skill"] = function(num, _, skill) return extraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) when you gain avian's might or avian's flight"] = function(num, _, skill) return extraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) on critical strike with this weapon"] = function(num, _, skill) return extraSkill(skill, num) end,
["%d+%% chance to [ct][ar][si][tg]g?e?r? level (%d+) (.+) on %a+"] = function(num, _, skill) return extraSkill(skill, num) end,
["attack with level (%d+) (.+) when you kill a bleeding enemy"] = function(num, _, skill) return extraSkill(skill, num) end,
["triggers? level (%d+) (.+) when you kill a bleeding enemy"] = function(num, _, skill) return extraSkill(skill, num) end,
["curse enemies with (%D+) on %a+"] = function(_, skill) return extraSkill(skill, 1, true) end,
["grants (%D+)"] = function(_, skill) return grantedExtraSkill(skill, 1) end,
["grants level (%d+) (.+)"] = function(num, _, skill) return grantedExtraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when equipped"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) on %a+"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["use level (%d+) (.+) on %a+"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when you attack"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when you deal a critical strike"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when hit"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when you kill an enemy"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["[ct][ar][si][tg]g?e?r?s? level (%d+) (.+) when you use a skill"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you use a skill while you have a spirit charge"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you hit an enemy while cursed"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you hit a bleeding enemy"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you hit a rare or unique enemy"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you hit a frozen enemy"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you kill a frozen enemy"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you consume a corpse"] = function(num, _, skill) return skill == "summon phantasm skill" and triggerExtraSkill("triggered summon phantasm skill", num) or triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you attack with a bow"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you block"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when animated guardian kills an enemy"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you lose cat's stealth"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when your trap is triggered"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) on hit with this weapon"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) on melee hit while cursed"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) every [%d%.]+ seconds while phasing"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+) when you gain avian's might or avian's flight"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["triggers level (%d+) (.+) when equipped"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["%d+%% chance to attack with level (%d+) (.+) on melee hit"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) when animated weapon kills an enemy"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) on melee hit"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) [ow][nh]e?n? ?y?o?u? kill ?a?n? ?e?n?e?m?y?"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) when you use a socketed skill"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) when you gain avian's might or avian's flight"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["%d+%% chance to trigger level (%d+) (.+) on critical strike with this weapon"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["%d+%% chance to [ct][ar][si][tg]g?e?r? level (%d+) (.+) on %a+"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["attack with level (%d+) (.+) when you kill a bleeding enemy"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["triggers? level (%d+) (.+) when you kill a bleeding enemy"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["curse enemies with (%D+) on %a+"] = function(_, skill) return triggerExtraSkill(skill, 1, true) end,
["curse enemies with (%D+) on %a+, with (%d+)%% increased effect"] = function(_, skill, num) return {
mod("ExtraSkill", "LIST", { skillId = gemIdLookup[skill], level = 1, noSupports = true, triggered = true }),
mod("CurseEffect", "INC", tonumber(num), { type = "SkillName", skillName = gemIdLookup[skill] }),
@@ -1856,31 +1856,31 @@ local specialModList = {
mod("ExtraSkill", "LIST", { skillId = gemIdLookup[skill], level = 1, noSupports = true, triggered = true }),
mod("CurseEffect", "INC", tonumber(num), { type = "SkillName", skillName = gemIdLookup[skill] }),
} end,
["curse enemies with level (%d+) (%D+) on %a+, which can apply to hexproof enemies"] = function(num, _, skill) return extraSkill(skill, num, true) end,
["curse enemies with level (%d+) (.+) on %a+"] = function(num, _, skill) return extraSkill(skill, num, true) end,
["[ct][ar][si][tg]g?e?r?s? (.+) on %a+"] = function(_, skill) return extraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? (.+) on %a+"] = function(_, skill) return extraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? with (.+) on %a+"] = function(_, skill) return extraSkill(skill, 1, true) end,
["[ct][ar][si][tg]g?e?r?s? (.+) when hit"] = function(_, skill) return extraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? (.+) when hit"] = function(_, skill) return extraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? with (.+) when hit"] = function(_, skill) return extraSkill(skill, 1, true) end,
["[ct][ar][si][tg]g?e?r?s? (.+) when your skills or minions kill"] = function(_, skill) return extraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? (.+) when you take a critical strike"] = function( _, skill) return extraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? with (.+) when you take a critical strike"] = function( _, skill) return extraSkill(skill, 1, true) end,
["trigger (.+) on critical strike"] = function( _, skill) return extraSkill(skill, 1, true) end,
["triggers? (.+) when you take a critical strike"] = function( _, skill) return extraSkill(skill, 1, true) end,
["curse enemies with level (%d+) (%D+) on %a+, which can apply to hexproof enemies"] = function(num, _, skill) return triggerExtraSkill(skill, num, true) end,
["curse enemies with level (%d+) (.+) on %a+"] = function(num, _, skill) return triggerExtraSkill(skill, num, true) end,
["[ct][ar][si][tg]g?e?r?s? (.+) on %a+"] = function(_, skill) return triggerExtraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? (.+) on %a+"] = function(_, skill) return triggerExtraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? with (.+) on %a+"] = function(_, skill) return triggerExtraSkill(skill, 1, true) end,
["[ct][ar][si][tg]g?e?r?s? (.+) when hit"] = function(_, skill) return triggerExtraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? (.+) when hit"] = function(_, skill) return triggerExtraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? with (.+) when hit"] = function(_, skill) return triggerExtraSkill(skill, 1, true) end,
["[ct][ar][si][tg]g?e?r?s? (.+) when your skills or minions kill"] = function(_, skill) return triggerExtraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? (.+) when you take a critical strike"] = function( _, skill) return triggerExtraSkill(skill, 1, true) end,
["[at][tr][ti][ag][cg][ke]r? with (.+) when you take a critical strike"] = function( _, skill) return triggerExtraSkill(skill, 1, true) end,
["trigger (.+) on critical strike"] = function( _, skill) return triggerExtraSkill(skill, 1, true) end,
["triggers? (.+) when you take a critical strike"] = function( _, skill) return triggerExtraSkill(skill, 1, true) end,
["socketed [%a+]* ?gems a?r?e? ?supported by level (%d+) (.+)"] = function(num, _, support) return { mod("ExtraSupport", "LIST", { skillId = gemIdLookup[support] or gemIdLookup[support:gsub("^increased ","")] or "Unknown", level = num }, { type = "SocketedIn", slotName = "{SlotName}" }) } end,
["socketed hex curse skills are triggered by doedre's effigy when summoned"] = { mod("ExtraSupport", "LIST", { skillId = "SupportCursePillarTriggerCurses", level = 20 }, { type = "SocketedIn", slotName = "{SlotName}" }) },
["trigger level (%d+) (.+) every (%d+) seconds"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) every (%d+) seconds"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["trigger level (%d+) (.+), (.+) or (.+) every (%d+) seconds"] = function(num, _, skill1, skill2, skill3) return {
mod("ExtraSkill", "LIST", { skillId = gemIdLookup[skill1], level = num, triggered = true }),
mod("ExtraSkill", "LIST", { skillId = gemIdLookup[skill2], level = num, triggered = true }),
mod("ExtraSkill", "LIST", { skillId = gemIdLookup[skill3], level = num, triggered = true }),
} end,
["offering skills triggered this way also affect you"] = { mod("ExtraSkillMod", "LIST", { mod = mod("SkillData", "LIST", { key = "buffNotPlayer", value = false }) }, { type = "SkillName", skillNameList = { "Bone Offering", "Flesh Offering", "Spirit Offering" } }, { type = "SocketedIn", slotName = "{SlotName}" }) },
["trigger level (%d+) (.+) after spending a total of (%d+) mana"] = function(num, _, skill) return extraSkill(skill, num) end,
["consumes a void charge to trigger level (%d+) (.+) when you fire arrows"] = function(num, _, skill) return extraSkill(skill, num) end,
["consumes a void charge to trigger level (%d+) (.+) when you fire arrows with a non%-triggered skill"] = function(num, _, skill) return extraSkill(skill, num) end,
["trigger level (%d+) (.+) after spending a total of (%d+) mana"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["consumes a void charge to trigger level (%d+) (.+) when you fire arrows"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["consumes a void charge to trigger level (%d+) (.+) when you fire arrows with a non%-triggered skill"] = function(num, _, skill) return triggerExtraSkill(skill, num) end,
["your hits treat cold resistance as (%d+)%% higher than actual value"] = function(num) return {
mod("ColdPenetration", "BASE", -num, nil, 0, KeywordFlag.Hit),
} end,