Skip to content

Commit 6cb485f

Browse files
LocalIdentityLocalIdentity
andauthored
Fix Autoexertion and Call to Arms not disabling Warcry buffs (#7861)
* Fix Autoexertion not disabling Warcry buffs `Supported Warcries do not grant Buffs or Charges to you or Allies` The buffs to allies will be implemented in a future PR * Add support for Call to Arms keystone --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
1 parent 6ec0c58 commit 6cb485f

8 files changed

Lines changed: 68 additions & 36 deletions

File tree

src/Data/ModCache.lua

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11347,9 +11347,7 @@ c["Warcries Exert 2 additional Attacks"]={{[1]={flags=0,keywordFlags=0,name="Ext
1134711347
c["Warcries Exert twice as many Attacks"]={{[1]={flags=0,keywordFlags=0,name="ExtraExertedAttacks",type="MORE",value=100}},nil}
1134811348
c["Warcries Knock Back and Interrupt Enemies in a smaller Area"]={nil,"Warcries Knock Back and Interrupt Enemies in a smaller Area "}
1134911349
c["Warcries cannot Exert Travel Skills"]={nil,"Warcries cannot Exert Travel Skills "}
11350-
c["Warcries do not grant Buffs or Charges to You"]={nil,"Warcries do not grant Buffs or Charges to You "}
11351-
c["Warcries do not grant Buffs or Charges to You 100% more Warcry Duration"]={nil,"Warcries do not grant Buffs or Charges to You 100% more Warcry Duration "}
11352-
c["Warcries do not grant Buffs or Charges to You 100% more Warcry Duration Limited to 1 Keystone Tattoo"]={nil,"Warcries do not grant Buffs or Charges to You 100% more Warcry Duration Limited to 1 Keystone Tattoo "}
11350+
c["Warcries do not grant Buffs or Charges to You"]={{[1]={flags=0,keywordFlags=0,name="CannotGainWarcryBuffs",type="FLAG",value=true}},nil}
1135311351
c["Warcries grant 1 Rage per 5 Enemy Power, up to 5"]={{[1]={flags=0,keywordFlags=0,name="Condition:CanGainRage",type="FLAG",value=true}},nil}
1135411352
c["Warcries grant 5 Rage per 5 Power if you have less than 25 Rage"]={{[1]={flags=0,keywordFlags=0,name="Condition:CanGainRage",type="FLAG",value=true}},nil}
1135511353
c["Warcries grant Arcane Surge to you and Allies, with 10% increased effect per 5 power, up to 50%"]={{[1]={[1]={type="Condition",var="UsedWarcryRecently"},flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="Condition:ArcaneSurge",type="FLAG",value=true}}},[2]={[1]={div=5,globalLimit=50,globalLimitKey="Brinerot Flag",stat="WarcryPower",type="PerStat"},[2]={type="Condition",var="UsedWarcryRecently"},flags=0,keywordFlags=0,name="ArcaneSurgeEffect",type="INC",value=10}},nil}

src/Data/Skills/act_str.lua

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,9 @@ skills["AncestralCry"] = {
291291
["ancestral_cry_max_elemental_resistances_per_5_monster_power"] = {
292292
mod("AncestralMaxElementalResistancePer5MP", "BASE", nil),
293293
},
294+
["skill_empower_limitation_specifier_for_stat_description"] = {
295+
-- Display only
296+
},
294297
},
295298
baseFlags = {
296299
warcry = true,
@@ -3784,7 +3787,7 @@ skills["BloodSandArmour"] = {
37843787
baseTypeName = "Flesh and Stone",
37853788
color = 1,
37863789
description = "Casts an aura that affects you and nearby enemies differently depending on your stance. Using the skill again alternates between Blood Stance and Sand Stance.",
3787-
skillTypes = { [SkillType.Spell] = true, [SkillType.Buff] = true, [SkillType.Aura] = true, [SkillType.AuraAffectsEnemies] = true, [SkillType.Instant] = true, [SkillType.HasReservation] = true, [SkillType.AppliesMaim] = true, [SkillType.Area] = true, [SkillType.InstantNoRepeatWhenHeld] = true, [SkillType.InstantShiftAttackForLeftMouse] = true, [SkillType.Cooldown] = true, [SkillType.Stance] = true, },
3790+
skillTypes = { [SkillType.Spell] = true, [SkillType.Buff] = true, [SkillType.Aura] = true, [SkillType.AuraAffectsEnemies] = true, [SkillType.Instant] = true, [SkillType.HasReservation] = true, [SkillType.Area] = true, [SkillType.InstantNoRepeatWhenHeld] = true, [SkillType.InstantShiftAttackForLeftMouse] = true, [SkillType.Cooldown] = true, [SkillType.Stance] = true, },
37883791
statDescriptionScope = "aura_skill_stat_descriptions",
37893792
castTime = 0,
37903793
statMap = {
@@ -8441,6 +8444,9 @@ skills["SeismicCry"] = {
84418444
["seismic_cry_+%_physical_damamge_reduction_per_5_MP"] = {
84428445
mod("SeismicArmourPer5MP", "BASE", nil),
84438446
},
8447+
["skill_empower_limitation_specifier_for_stat_description"] = {
8448+
-- Display only
8449+
},
84448450
},
84458451
baseFlags = {
84468452
warcry = true,

src/Data/Skills/sup_str.lua

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,10 @@ skills["CallToArms"] = {
738738
statMap = {
739739
["call_to_arms_behaviour"] = {
740740
-- Display only
741-
}
741+
},
742+
["warcry_skills_share_cooldowns"] = {
743+
-- Display only
744+
},
742745
},
743746
castTime = 0,
744747
baseFlags = {
@@ -804,6 +807,7 @@ skills["SupportCallToArms"] = {
804807
statDescriptionScope = "gem_stat_descriptions",
805808
baseMods = {
806809
skill("SupportedByAutoexertion", true),
810+
flag("CannotShareWarcryBuffs"),
807811
},
808812
qualityStats = {
809813
Default = {

src/Data/StatDescriptions/skill_stat_descriptions.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46951,7 +46951,7 @@ return {
4695146951
[2]="#"
4695246952
}
4695346953
},
46954-
text="All your Warcries share their Cooldowns"
46954+
text="Supported Warcries do not grant Buffs or Charges to you or Allies"
4695546955
}
4695646956
}
4695746957
},

src/Export/Skills/act_str.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ local skills, mod, flag, skill = ...
5959
["ancestral_cry_max_elemental_resistances_per_5_monster_power"] = {
6060
mod("AncestralMaxElementalResistancePer5MP", "BASE", nil),
6161
},
62+
["skill_empower_limitation_specifier_for_stat_description"] = {
63+
-- Display only
64+
},
6265
},
6366
#baseMod skill("radius", 60)
6467
#mods
@@ -1566,6 +1569,9 @@ local skills, mod, flag, skill = ...
15661569
["seismic_cry_+%_physical_damamge_reduction_per_5_MP"] = {
15671570
mod("SeismicArmourPer5MP", "BASE", nil),
15681571
},
1572+
["skill_empower_limitation_specifier_for_stat_description"] = {
1573+
-- Display only
1574+
},
15691575
},
15701576
#baseMod skill("radius", 60)
15711577
#mods

src/Export/Skills/sup_str.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,17 @@ local skills, mod, flag, skill = ...
9494
statMap = {
9595
["call_to_arms_behaviour"] = {
9696
-- Display only
97-
}
97+
},
98+
["warcry_skills_share_cooldowns"] = {
99+
-- Display only
100+
},
98101
},
99102
#mods
100103

101104
#skill SupportCallToArms
102105
baseMods = {
103106
skill("SupportedByAutoexertion", true),
107+
flag("CannotShareWarcryBuffs"),
104108
},
105109
#mods
106110

src/Modules/CalcPerform.lua

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,58 +1164,71 @@ function calcs.perform(env, skipEHP)
11641164
uptime = 1
11651165
end
11661166
if activeSkill.activeEffect.grantedEffect.name == "Ancestral Cry" and not modDB:Flag(nil, "AncestralActive") then
1167-
local ancestralEleResistance = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "AncestralElementalResistancePer5MP")
1168-
local ancestralMaxEleResistance = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "AncestralMaxElementalResistancePer5MP")
11691167
env.player.modDB:NewMod("NumAncestralExerts", "BASE", m_floor((activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "AncestralExertedAttacks") + extraExertions) * exertMultiplier))
1170-
env.player.modDB:NewMod("ElementalResist", "BASE", m_floor(ancestralEleResistance * buff_inc) * uptime, "Ancestral Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
1171-
env.player.modDB:NewMod("ElementalResistMax", "BASE", m_floor(ancestralMaxEleResistance * buff_inc) * uptime, "Ancestral Cry", { type = "Multiplier", var = "WarcryPower", div = 10, limit = 3 })
1168+
if not (activeSkill.skillModList:Flag(nil, "CannotShareWarcryBuffs") or modDB:Flag(nil, "CannotGainWarcryBuffs")) then
1169+
local ancestralEleResistance = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "AncestralElementalResistancePer5MP")
1170+
local ancestralMaxEleResistance = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "AncestralMaxElementalResistancePer5MP")
1171+
env.player.modDB:NewMod("ElementalResist", "BASE", m_floor(ancestralEleResistance * buff_inc) * uptime, "Ancestral Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
1172+
env.player.modDB:NewMod("ElementalResistMax", "BASE", m_floor(ancestralMaxEleResistance * buff_inc) * uptime, "Ancestral Cry", { type = "Multiplier", var = "WarcryPower", div = 10, limit = 3 })
1173+
end
11721174
modDB:NewMod("AncestralActive", "FLAG", true) -- Prevents effect from applying multiple times
11731175
elseif activeSkill.activeEffect.grantedEffect.name == "Enduring Cry" and not modDB:Flag(nil, "EnduringActive") then
1174-
local enduringRegen = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "EnduringCryLifeRegen")
1175-
env.player.modDB:NewMod("LifeRegenPercent", "BASE", m_floor(enduringRegen * buff_inc) * uptime, "Enduring Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
1176+
if not (activeSkill.skillModList:Flag(nil, "CannotShareWarcryBuffs") or modDB:Flag(nil, "CannotGainWarcryBuffs")) then
1177+
local enduringRegen = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "EnduringCryLifeRegen")
1178+
env.player.modDB:NewMod("LifeRegenPercent", "BASE", m_floor(enduringRegen * buff_inc) * uptime, "Enduring Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
1179+
end
11761180
modDB:NewMod("EnduringActive", "FLAG", true) -- Prevents effect from applying multiple times
11771181
elseif activeSkill.activeEffect.grantedEffect.name == "Infernal Cry" and not modDB:Flag(nil, "InfernalActive") then
1178-
local infernalPhysAsExtraFire = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "InfernalFireAsExtraPer5MP")
11791182
env.player.modDB:NewMod("NumInfernalExerts", "BASE", m_floor((activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "InfernalExertedAttacks") + extraExertions) * exertMultiplier))
1180-
if env.mode_effective then
1183+
if not (activeSkill.skillModList:Flag(nil, "CannotShareWarcryBuffs") or modDB:Flag(nil, "CannotGainWarcryBuffs")) then
1184+
local infernalPhysAsExtraFire = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "InfernalFireAsExtraPer5MP")
11811185
env.player.modDB:NewMod("PhysicalDamageGainAsFire", "BASE", m_floor(infernalPhysAsExtraFire * buff_inc) * uptime, "Infernal Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
11821186
end
11831187
modDB:NewMod("InfernalActive", "FLAG", true) -- Prevents effect from applying multiple times
11841188
elseif activeSkill.activeEffect.grantedEffect.name == "Battlemage's Cry" and not modDB:Flag(nil, "BattlemageActive") then
1185-
local battlemageBaseCritChance = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "BattlemageBaseCritChancePer5MP")
11861189
env.player.modDB:NewMod("NumBattlemageExerts", "BASE", m_floor((activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "BattlemageExertedAttacks") + extraExertions) * exertMultiplier))
1187-
env.player.modDB:NewMod("CritChance", "BASE", m_floor(battlemageBaseCritChance * buff_inc) / 100 * uptime, "Battlemage's Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
1190+
if not (activeSkill.skillModList:Flag(nil, "CannotShareWarcryBuffs") or modDB:Flag(nil, "CannotGainWarcryBuffs")) then
1191+
local battlemageBaseCritChance = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "BattlemageBaseCritChancePer5MP")
1192+
env.player.modDB:NewMod("CritChance", "BASE", m_floor(battlemageBaseCritChance * buff_inc) / 100 * uptime, "Battlemage's Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
1193+
end
11881194
modDB:NewMod("BattlemageActive", "FLAG", true) -- Prevents effect from applying multiple times
11891195
elseif activeSkill.activeEffect.grantedEffect.name == "Intimidating Cry" and not modDB:Flag(nil, "IntimidatingActive") then
1190-
local intimidatingMovementSpeed = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "IntimidatingMovementSpeedPer5MP")
11911196
env.player.modDB:NewMod("NumIntimidatingExerts", "BASE", m_floor((activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "IntimidatingExertedAttacks") + extraExertions) * exertMultiplier))
1192-
env.player.modDB:NewMod("MovementSpeed", "INC", m_floor(intimidatingMovementSpeed * buff_inc) * uptime, "Intimidating Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 6 })
1197+
if not (activeSkill.skillModList:Flag(nil, "CannotShareWarcryBuffs") or modDB:Flag(nil, "CannotGainWarcryBuffs")) then
1198+
local intimidatingMovementSpeed = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "IntimidatingMovementSpeedPer5MP")
1199+
env.player.modDB:NewMod("MovementSpeed", "INC", m_floor(intimidatingMovementSpeed * buff_inc) * uptime, "Intimidating Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 6 })
1200+
end
11931201
modDB:NewMod("IntimidatingActive", "FLAG", true) -- Prevents effect from applying multiple times
11941202
elseif activeSkill.activeEffect.grantedEffect.name == "Rallying Cry" and not modDB:Flag(nil, "RallyingActive") then
11951203
env.player.modDB:NewMod("NumRallyingExerts", "BASE", m_floor((activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "RallyingExertedAttacks") + extraExertions) * exertMultiplier))
1196-
env.player.modDB:NewMod("RallyingExertMoreDamagePerAlly", "BASE", activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "RallyingCryExertDamageBonus"))
1197-
local rallyingWeaponEffect = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "RallyingCryAllyDamageBonusPer5Power")
1198-
local rallyingBonusMoreMultiplier = 1 + (activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "RallyingCryMinionDamageBonusMultiplier") or 0)
1199-
if warcryPowerBonus ~= 0 then
1200-
rallyingWeaponEffect = m_floor(rallyingWeaponEffect * warcryPowerBonus * buff_inc) / warcryPowerBonus
1201-
end
1202-
-- Special handling for the minion side to add the flat damage bonus
1203-
if env.minion then
1204-
-- Add all damage types
1205-
local dmgTypeList = {"Physical", "Lightning", "Cold", "Fire", "Chaos"}
1206-
for _, damageType in ipairs(dmgTypeList) do
1207-
env.minion.modDB:NewMod(damageType.."Min", "BASE", m_floor((env.player.weaponData1[damageType.."Min"] or 0) * rallyingBonusMoreMultiplier * rallyingWeaponEffect / 100) * uptime, "Rallying Cry", { type = "Multiplier", actor = "parent", var = "WarcryPower", div = 5, limit = 10})
1208-
env.minion.modDB:NewMod(damageType.."Max", "BASE", m_floor((env.player.weaponData1[damageType.."Max"] or 0) * rallyingBonusMoreMultiplier * rallyingWeaponEffect / 100) * uptime, "Rallying Cry", { type = "Multiplier", actor = "parent", var = "WarcryPower", div = 5, limit = 10})
1204+
if not activeSkill.skillModList:Flag(nil, "CannotShareWarcryBuffs") then
1205+
env.player.modDB:NewMod("RallyingExertMoreDamagePerAlly", "BASE", activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "RallyingCryExertDamageBonus"))
1206+
local rallyingWeaponEffect = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "RallyingCryAllyDamageBonusPer5Power")
1207+
local rallyingBonusMoreMultiplier = 1 + (activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "RallyingCryMinionDamageBonusMultiplier") or 0)
1208+
if warcryPowerBonus ~= 0 then
1209+
rallyingWeaponEffect = m_floor(rallyingWeaponEffect * warcryPowerBonus * buff_inc) / warcryPowerBonus
1210+
end
1211+
-- Special handling for the minion side to add the flat damage bonus
1212+
if env.minion then
1213+
-- Add all damage types
1214+
local dmgTypeList = {"Physical", "Lightning", "Cold", "Fire", "Chaos"}
1215+
for _, damageType in ipairs(dmgTypeList) do
1216+
env.minion.modDB:NewMod(damageType.."Min", "BASE", m_floor((env.player.weaponData1[damageType.."Min"] or 0) * rallyingBonusMoreMultiplier * rallyingWeaponEffect / 100) * uptime, "Rallying Cry", { type = "Multiplier", actor = "parent", var = "WarcryPower", div = 5, limit = 10})
1217+
env.minion.modDB:NewMod(damageType.."Max", "BASE", m_floor((env.player.weaponData1[damageType.."Max"] or 0) * rallyingBonusMoreMultiplier * rallyingWeaponEffect / 100) * uptime, "Rallying Cry", { type = "Multiplier", actor = "parent", var = "WarcryPower", div = 5, limit = 10})
1218+
end
12091219
end
12101220
end
12111221
modDB:NewMod("RallyingActive", "FLAG", true) -- Prevents effect from applying multiple times
12121222
elseif activeSkill.activeEffect.grantedEffect.name == "Seismic Cry" and not modDB:Flag(nil, "SeismicActive") then
1213-
local seismicStunEffect = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "SeismicStunThresholdPer5MP")
1214-
local seismicArmour = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "SeismicArmourPer5MP")
12151223
env.player.modDB:NewMod("SeismicMoreAoE", "BASE", activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "SeismicAoEMoreMultiplier"))
12161224
env.player.modDB:NewMod("NumSeismicExerts", "BASE", m_floor((activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "SeismicExertedAttacks") + extraExertions) * exertMultiplier))
1217-
env.player.modDB:NewMod("StunThreshold", "INC", m_floor(seismicStunEffect * buff_inc) * uptime, "Seismic Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
1218-
env.player.modDB:NewMod("Armour", "MORE", m_floor(seismicArmour * buff_inc) * uptime, "Seismic Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
1225+
if not (activeSkill.skillModList:Flag(nil, "CannotShareWarcryBuffs") or modDB:Flag(nil, "CannotGainWarcryBuffs")) then
1226+
local seismicStunEffect = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "SeismicStunThresholdPer5MP")
1227+
local seismicArmour = activeSkill.skillModList:Sum("BASE", env.player.mainSkill.skillCfg, "SeismicArmourPer5MP")
1228+
env.player.modDB:NewMod("StunThreshold", "INC", m_floor(seismicStunEffect * buff_inc) * uptime, "Seismic Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
1229+
env.player.modDB:NewMod("Armour", "MORE", m_floor(seismicArmour * buff_inc) * uptime, "Seismic Cry", { type = "Multiplier", var = "WarcryPower", div = 5, limit = 5 })
1230+
1231+
end
12191232
modDB:NewMod("SeismicActive", "FLAG", true) -- Prevents effect from applying multiple times
12201233
end
12211234
end

src/Modules/ModParser.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3585,6 +3585,7 @@ local specialModList = {
35853585
["warcries share their cooldown"] = { flag("WarcryShareCooldown") },
35863586
["warcries have minimum of (%d+) power"] = { flag("CryWolfMinimumPower") },
35873587
["warcries have infinite power"] = { flag("WarcryInfinitePower") },
3588+
["warcries do not grant buffs or charges to you"] = { flag("CannotGainWarcryBuffs") },
35883589
["(%d+)%% chance to inflict corrosion on hit with attacks"] = { flag("Condition:CanCorrode") },
35893590
["(%d+)%% chance to inflict withered for (%d+) seconds on hit"] = { flag("Condition:CanWither") },
35903591
["inflict withered for (%d+) seconds on hit if you've cast (.-) in the past (%d+) seconds"] = function (_, _, curse) return { flag("Condition:CanWither", { type = "Condition", var = "SelfCast"..curse:gsub("^%l", string.upper):gsub(" %l", string.upper):gsub(" ", "") }) } end,

0 commit comments

Comments
 (0)