Skip to content

Commit c07336a

Browse files
authored
Fix player specific flask mods applying to actors (#5326)
1 parent f93e99e commit c07336a

File tree

3 files changed

+36
-12
lines changed

3 files changed

+36
-12
lines changed

src/Classes/ModStore.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,8 @@ function ModStoreClass:EvalMod(mod, cfg)
513513
else
514514
match = target:GetCondition(tag.var, cfg)
515515
end
516+
elseif tag.actor and cfg and tag.var == nil and tag.varList == nil and tag.actor == cfg.actor then
517+
match = true
516518
end
517519
if tag.neg then
518520
match = not match

src/Modules/CalcPerform.lua

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1496,12 +1496,20 @@ function calcs.perform(env, avoidCache)
14961496

14971497
-- Merge flask modifiers
14981498
if env.mode_combat then
1499-
local effectInc = modDB:Sum("INC", nil, "FlaskEffect")
1499+
local effectInc = modDB:Sum("INC", {actor = "player"}, "FlaskEffect")
1500+
local effectIncMagic = modDB:Sum("INC", {actor = "player"}, "MagicUtilityFlaskEffect")
1501+
local effectIncNonPlayer = modDB:Sum("INC", nil, "FlaskEffect")
1502+
local effectIncMagicNonPlayer = modDB:Sum("INC", nil, "MagicUtilityFlaskEffect")
15001503
local flaskBuffs = { }
15011504
local flaskConditions = {}
15021505
local flaskBuffsPerBase = {}
1506+
local flaskBuffsNonPlayer = {}
1507+
local flaskBuffsPerBaseNonPlayer = {}
1508+
local flasksApplyToMinion = env.minion and modDB:Flag(env.player.mainSkill.skillCfg, "FlasksApplyToMinion")
1509+
local quickSilverAppliesToAllies = env.minion and modDB:Flag(env.player.mainSkill.skillCfg, "QuickSilverAppliesToAllies")
15031510
for item in pairs(env.flasks) do
15041511
flaskBuffsPerBase[item.baseName] = flaskBuffsPerBase[item.baseName] or {}
1512+
flaskBuffsPerBaseNonPlayer[item.baseName] = flaskBuffsPerBaseNonPlayer[item.baseName] or {}
15051513
flaskConditions["UsingFlask"] = true
15061514
if item.baseName:match("Hybrid Flask") then
15071515
flaskConditions["UsingLifeFlask"] = true
@@ -1511,19 +1519,28 @@ function calcs.perform(env, avoidCache)
15111519
end
15121520

15131521
local flaskEffectInc = item.flaskData.effectInc
1522+
local flaskEffectIncNonPlayer = flaskEffectInc
15141523
if item.rarity == "MAGIC" and not (flaskConditions["UsingLifeFlask"] or flaskConditions["UsingManaFlask"]) then
1515-
flaskEffectInc = flaskEffectInc + modDB:Sum("INC", nil, "MagicUtilityFlaskEffect")
1524+
flaskEffectInc = flaskEffectInc + effectIncMagic
1525+
flaskEffectIncNonPlayer = effectIncNonPlayer + effectIncMagicNonPlayer
15161526
end
15171527

15181528
-- Avert thine eyes, lest they be forever scarred
15191529
-- I have no idea how to determine which buff is applied by a given flask,
15201530
-- so utility flasks are grouped by base, unique flasks are grouped by name, and magic flasks by their modifiers
15211531
local effectMod = 1 + (effectInc + flaskEffectInc) / 100
1532+
local effectModNonPlayer = 1 + (effectIncNonPlayer + flaskEffectIncNonPlayer) / 100
15221533
if item.buffModList[1] then
15231534
local srcList = new("ModList")
15241535
srcList:ScaleAddList(item.buffModList, effectMod)
15251536
mergeBuff(srcList, flaskBuffs, item.baseName)
15261537
mergeBuff(srcList, flaskBuffsPerBase[item.baseName], item.baseName)
1538+
if (flasksApplyToMinion or quickSilverAppliesToAllies) then
1539+
srcList = new("ModList")
1540+
srcList:ScaleAddList(item.buffModList, effectModNonPlayer)
1541+
mergeBuff(srcList, flaskBuffsNonPlayer, item.baseName)
1542+
mergeBuff(srcList, flaskBuffsPerBaseNonPlayer[item.baseName], item.baseName)
1543+
end
15271544
end
15281545
if item.modList[1] then
15291546
local srcList = new("ModList")
@@ -1539,6 +1556,12 @@ function calcs.perform(env, avoidCache)
15391556
end
15401557
mergeBuff(srcList, flaskBuffs, key)
15411558
mergeBuff(srcList, flaskBuffsPerBase[item.baseName], key)
1559+
if (flasksApplyToMinion or quickSilverAppliesToAllies) then
1560+
srcList = new("ModList")
1561+
srcList:ScaleAddList(item.modList, effectModNonPlayer)
1562+
mergeBuff(srcList, flaskBuffsNonPlayer, key)
1563+
mergeBuff(srcList, flaskBuffsPerBaseNonPlayer[item.baseName], key)
1564+
end
15421565
end
15431566
end
15441567
if not modDB:Flag(nil, "FlasksDoNotApplyToPlayer") then
@@ -1550,20 +1573,20 @@ function calcs.perform(env, avoidCache)
15501573
end
15511574
end
15521575
if env.minion then
1553-
if modDB:Flag(env.player.mainSkill.skillCfg, "FlasksApplyToMinion") then
1576+
if flasksApplyToMinion then
15541577
local minionModDB = env.minion.modDB
15551578
for flaskCond, status in pairs(flaskConditions) do
15561579
minionModDB.conditions[flaskCond] = status
15571580
end
1558-
for _, buffModList in pairs(flaskBuffs) do
1581+
for _, buffModList in pairs(flaskBuffsNonPlayer) do
15591582
minionModDB:AddList(buffModList)
15601583
end
15611584
else -- Not all flasks apply to minions. Check if some flasks need to be selectively applied
1562-
if modDB:Flag(env.player.mainSkill.skillCfg, "QuickSilverAppliesToAllies") and flaskBuffsPerBase["Quicksilver Flask"] then
1585+
if quickSilverAppliesToAllies and flaskBuffsPerBaseNonPlayer["Quicksilver Flask"] then
15631586
local minionModDB = env.minion.modDB
15641587
minionModDB.conditions["UsingQuicksilverFlask"] = flaskConditions["UsingQuicksilverFlask"]
15651588
minionModDB.conditions["UsingFlask"] = flaskConditions["UsingFlask"]
1566-
for _, buffModList in pairs(flaskBuffsPerBase["Quicksilver Flask"]) do
1589+
for _, buffModList in pairs(flaskBuffsPerBaseNonPlayer["Quicksilver Flask"]) do
15671590
minionModDB:AddList(buffModList)
15681591
end
15691592
end

src/Modules/ModParser.lua

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,6 @@ local modNameList = {
685685
-- Flask modifiers
686686
["effect"] = "FlaskEffect",
687687
["effect of flasks"] = "FlaskEffect",
688-
["effect of flasks on you"] = "FlaskEffect",
689688
["amount recovered"] = "FlaskRecovery",
690689
["life recovered"] = "FlaskRecovery",
691690
["life recovery from flasks used"] = "FlaskLifeRecovery",
@@ -3508,11 +3507,11 @@ local specialModList = {
35083507
["only affects passives in massive ring"] = { mod("JewelData", "LIST", { key = "radiusIndex", value = 8 }) },
35093508
["primordial"] = { mod("Multiplier:PrimordialItem", "BASE", 1) },
35103509
["spectres have a base duration of (%d+) seconds"] = { mod("SkillData", "LIST", { key = "duration", value = 6 }, { type = "SkillName", skillName = "Raise Spectre" }) },
3511-
["flasks applied to you have (%d+)%% increased effect"] = function(num) return { mod("FlaskEffect", "INC", num) } end,
3512-
["while a unique enemy is in your presence, flasks applied to you have (%d+)%% increased effect"] = function(num) return { mod("FlaskEffect", "INC", num, { type = "ActorCondition", actor = "enemy", var = "RareOrUnique" }) } end,
3513-
["while a pinnacle atlas boss is in your presence, flasks applied to you have (%d+)%% increased effect"] = function(num) return { mod("FlaskEffect", "INC", num, { type = "ActorCondition", actor = "enemy", var = "PinnacleBoss" }) } end,
3514-
["magic utility flasks applied to you have (%d+)%% increased effect"] = function(num) return { mod("MagicUtilityFlaskEffect", "INC", num) } end,
3515-
["flasks applied to you have (%d+)%% reduced effect"] = function(num) return { mod("FlaskEffect", "INC", -num) } end,
3510+
["flasks applied to you have (%d+)%% increased effect"] = function(num) return { mod("FlaskEffect", "INC", num, { type = "ActorCondition", actor = "player"}) } end,
3511+
["while a unique enemy is in your presence, flasks applied to you have (%d+)%% increased effect"] = function(num) return { mod("FlaskEffect", "INC", num, { type = "ActorCondition", actor = "enemy", var = "RareOrUnique" }, { type = "ActorCondition", actor = "player"}) } end,
3512+
["while a pinnacle atlas boss is in your presence, flasks applied to you have (%d+)%% increased effect"] = function(num) return { mod("FlaskEffect", "INC", num, { type = "ActorCondition", actor = "enemy", var = "PinnacleBoss" }, { type = "ActorCondition", actor = "player"}) } end,
3513+
["magic utility flasks applied to you have (%d+)%% increased effect"] = function(num) return { mod("MagicUtilityFlaskEffect", "INC", num, { type = "ActorCondition", actor = "player"}) } end,
3514+
["flasks applied to you have (%d+)%% reduced effect"] = function(num) return { mod("FlaskEffect", "INC", -num, { type = "ActorCondition", actor = "player"}) } end,
35163515
["adds (%d+) passive skills"] = function(num) return { mod("JewelData", "LIST", { key = "clusterJewelNodeCount", value = num }) } end,
35173516
["1 added passive skill is a jewel socket"] = { mod("JewelData", "LIST", { key = "clusterJewelSocketCount", value = 1 }) },
35183517
["(%d+) added passive skills are jewel sockets"] = function(num) return { mod("JewelData", "LIST", { key = "clusterJewelSocketCount", value = num }) } end,

0 commit comments

Comments
 (0)