Skip to content
Open
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
17 changes: 17 additions & 0 deletions spec/System/TestSkills_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,21 @@ describe("TestSkills", function()
local finalCost = build.calcsTab.mainOutput.ManaCost
assert.are.equals(16, round(finalCost))
end)

it("Test Atziri's Allure - ignore curse limit", function()
build.skillsTab:PasteSocketGroup("Elemental Weakness 20/0 1\nAtziri's Allure 1/0 1")
build.skillsTab:PasteSocketGroup("Flammability 20/0 1\n")
runCallback("OnFrame")

local curseList = build.calcsTab.calcsOutput.CurseList
assert.True(curseList:match("Flammability") ~= nil and curseList:match("Elemental Weakness") ~= nil)
end)

-- skills that don't have a base CD and have more than one use need to use the added cooldown by whatever support allows the +1 limit to be supportable
it("Test Added Cooldown interaction with +1 Limit", function()
build.skillsTab:PasteSocketGroup("Thunderstorm 20/0 1\nHourglass 1/0 1\nOverabundance I 1/0 1\n")
runCallback("OnFrame")

assert.True(build.calcsTab.calcsOutput.Cooldown == 10)
end)
end)
9 changes: 9 additions & 0 deletions src/Data/SkillStatMap.lua
Original file line number Diff line number Diff line change
Expand Up @@ -576,6 +576,9 @@ return {
["base_cooldown_speed_+%_final"] = {
mod("CooldownRecovery", "MORE", nil),
},
["support_cooldown_reduction_cooldown_recovery_+%"] = {
mod("CooldownRecovery", "MORE", nil),
},
["additional_weapon_base_attack_time_ms"] = {
mod("Speed", "BASE", nil, ModFlag.Attack),
div = 1000,
Expand Down Expand Up @@ -1622,6 +1625,9 @@ return {
["number_of_additional_curses_allowed"] = {
mod("EnemyCurseLimit", "BASE", nil),
},
["curse_ignores_curse_limit"] = {
flag("CursesIgnoreCurseLimit")
},
["consecrated_ground_enemy_damage_taken_+%"] = {
mod("DamageTakenConsecratedGround", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff" }, { type = "Condition", var = "OnConsecratedGround" }),
},
Expand Down Expand Up @@ -2680,6 +2686,9 @@ return {
["base_limit_+"] = {
mod("AdditionalCooldownUses", "BASE", nil),
},
["support_storm_skill_limit_+"] = {
mod("AdditionalCooldownUses", "BASE", nil, 0, 0, { type = "SkillType", skillType = SkillType.Storm }),
},
["kill_enemy_on_hit_if_under_10%_life"] = {
mod("CullPercent", "MAX", nil),
value = 10
Expand Down
8 changes: 8 additions & 0 deletions src/Data/Skills/sup_int.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6142,6 +6142,14 @@ skills["SupportMorganasTempestPlayer"] = {
label = "Morgana's Tempest",
incrementalEffectiveness = 0.054999999701977,
statDescriptionScope = "gem_stat_descriptions",
statMap = {
["support_approaching_storms_area_of_effect_+%_final"] = {
mod("AreaOfEffect", "MORE", nil, 0, 0, { type = "SkillType", skillType = SkillType.Storm }),
},
["support_approaching_storms_damage_+%_final"] = {
mod("Damage", "MORE", nil, 0, 0, { type = "SkillType", skillType = SkillType.Storm }),
},
},
baseFlags = {
},
constantStats = {
Expand Down
8 changes: 8 additions & 0 deletions src/Data/Skills/sup_str.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7879,6 +7879,14 @@ skills["SupportZerphisLegacyPlayer"] = {
label = "Zerphi's Infamy",
incrementalEffectiveness = 0.054999999701977,
statDescriptionScope = "gem_stat_descriptions",
statMap = {
["support_zerphis_legacy_area_of_effect_+%"] = {
mod("AreaOfEffect", "MORE", nil, 0, 0, { type = "SkillType", skillTypeList = { SkillType.Warcry, SkillType.Area } })
},
["support_zerphis_legacy_damage_+%_final"] = {
mod("Damage", "MORE", nil, 0, 0, { type = "SkillType", skillTypeList = { SkillType.Warcry, SkillType.Area } })
},
},
baseFlags = {
},
constantStats = {
Expand Down
8 changes: 8 additions & 0 deletions src/Export/Skills/sup_int.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1144,6 +1144,14 @@ statMap = {

#skill SupportMorganasTempestPlayer
#set SupportMorganasTempestPlayer
statMap = {
["support_approaching_storms_area_of_effect_+%_final"] = {
mod("AreaOfEffect", "MORE", nil, 0, 0, { type = "SkillType", skillType = SkillType.Storm }),
},
["support_approaching_storms_damage_+%_final"] = {
mod("Damage", "MORE", nil, 0, 0, { type = "SkillType", skillType = SkillType.Storm }),
},
},
#mods
#skillEnd

Expand Down
8 changes: 8 additions & 0 deletions src/Export/Skills/sup_str.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1782,5 +1782,13 @@ statMap = {

#skill SupportZerphisLegacyPlayer
#set SupportZerphisLegacyPlayer
statMap = {
["support_zerphis_legacy_area_of_effect_+%"] = {
mod("AreaOfEffect", "MORE", nil, 0, 0, { type = "SkillType", skillTypeList = { SkillType.Warcry, SkillType.Area } })
},
["support_zerphis_legacy_damage_+%_final"] = {
mod("Damage", "MORE", nil, 0, 0, { type = "SkillType", skillTypeList = { SkillType.Warcry, SkillType.Area } })
},
},
#mods
#skillEnd
3 changes: 2 additions & 1 deletion src/Modules/CalcOffence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,8 @@ function calcSkillCooldown(skillModList, skillCfg, skillData)
-- If a skill can store extra uses and has a cooldown, it doesn't round the cooldown value to server ticks
local rounded = false
if (skillData.storedUses and skillData.storedUses > 1) or (skillData.VaalStoredUses and skillData.VaalStoredUses > 1) or skillModList:Sum("BASE", skillCfg, "AdditionalCooldownUses") > 0 then
return cooldown, rounded, nil, noCooldownChance
-- if the skill does not have an innate cooldown, we need to pass the added otherwise things go boom
return cooldown, rounded, skillData.cooldown and nil or addedCooldown, noCooldownChance
else
cooldown = m_ceil(cooldown * data.misc.ServerTickRate) / data.misc.ServerTickRate
rounded = true
Expand Down
8 changes: 4 additions & 4 deletions src/Modules/CalcPerform.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2147,13 +2147,13 @@ function calcs.perform(env, skipEHP)
elseif buff.type == "Curse" or buff.type == "CurseBuff" then
local mark = activeSkill.skillTypes[SkillType.Mark]
modDB.conditions["SelfCast"..buff.name:gsub(" ","")] = not (activeSkill.skillTypes[SkillType.Triggered] or activeSkill.skillTypes[SkillType.Aura])
if env.mode_effective and (not enemyDB:Flag(nil, "Hexproof") or modDB:Flag(nil, "CursesIgnoreHexproof") or activeSkill.skillData.ignoreHexLimit or activeSkill.skillData.ignoreHexproof) or mark then
if env.mode_effective and (not enemyDB:Flag(nil, "Hexproof") or modDB:Flag(nil, "CursesIgnoreHexproof") or activeSkill.skillData.ignoreCurseLimit or activeSkill.skillData.ignoreHexproof) or mark then
local curse = {
name = buff.name,
fromPlayer = true,
priority = determineCursePriority(buff.name, activeSkill),
isMark = mark,
ignoreHexLimit = (modDB:Flag(activeSkill.skillCfg, "CursesIgnoreHexLimit") or activeSkill.skillData.ignoreHexLimit) and not mark or false,
ignoreCurseLimit = (modDB:Flag(activeSkill.skillCfg, "CursesIgnoreCurseLimit") or activeSkill.skillData.ignoreCurseLimit or activeSkill.skillModList:Flag(nil, "CursesIgnoreCurseLimit")) and not mark or false,
socketedCursesHexLimit = modDB:Flag(activeSkill.skillCfg, "SocketedCursesAdditionalLimit")
}
local inc = skillModList:Sum("INC", skillCfg, "CurseEffect") + enemyDB:Sum("INC", nil, "CurseEffectOnSelf")
Expand Down Expand Up @@ -2697,7 +2697,7 @@ function calcs.perform(env, skipEHP)
for _, source in ipairs({curses, minionCurses, allyCurses}) do
for _, curse in ipairs(source) do
-- Calculate curses that ignore hex limit after
if not curse.ignoreHexLimit and not curse.socketedCursesHexLimit then
if not curse.ignoreCurseLimit and not curse.socketedCursesHexLimit then
local slot
local skipAddingCurse = false
-- Check if we need to disable a certain curse aura.
Expand Down Expand Up @@ -2741,7 +2741,7 @@ function calcs.perform(env, skipEHP)

for _, source in ipairs({curses, minionCurses}) do
for _, curse in ipairs(source) do
if curse.ignoreHexLimit then
if curse.ignoreCurseLimit then
local skipAddingCurse = false
for i = 1, #curseSlots do
if curseSlots[i].name == curse.name then
Expand Down
Loading