diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index a47ea6710..98c8adf67 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1386,7 +1386,7 @@ c["15% increased Flask Effect Duration"]={{[1]={flags=0,keywordFlags=0,name="Fla c["15% increased Freeze Buildup"]={{}," Freeze Buildup "} c["15% increased Freeze Buildup 15% increased Chill and Freeze Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyFreezeDuration",type="INC",value=15},[2]={flags=0,keywordFlags=0,name="EnemyChillDuration",type="INC",value=15}}," Freeze Buildup 15% increased "} c["15% increased Global Physical Damage"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=15}},nil} -c["15% increased Glory generation"]={{}," Glory generation "} +c["15% increased Glory generation"]={{[1]={flags=0,keywordFlags=0,name="GloryGeneration",type="INC",value=15}},nil} c["15% increased Ignite Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyIgniteDuration",type="INC",value=15}},nil} c["15% increased Ignite Magnitude"]={{[1]={flags=0,keywordFlags=8388608,name="AilmentMagnitude",type="INC",value=15}},nil} c["15% increased Immobilisation buildup"]={{}," Immobilisation buildup "} @@ -1698,7 +1698,7 @@ c["20% increased Freeze Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name c["20% increased Frenzy Charge Duration"]={{[1]={flags=0,keywordFlags=0,name="FrenzyChargesDuration",type="INC",value=20}},nil} c["20% increased Global Defences"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="Defences",type="INC",value=20}},nil} c["20% increased Global Physical Damage"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=20}},nil} -c["20% increased Glory generation for Banner Skills"]={{}," Glory generation for Banner Skills "} +c["20% increased Glory generation for Banner Skills"]={{[1]={flags=0,keywordFlags=0,name="GloryOnHit",type="INC",value=20}},nil} c["20% increased Hazard Duration"]={{[1]={[1]={skillType=203,type="SkillType"},flags=0,keywordFlags=0,name="Duration",type="INC",value=20}},nil} c["20% increased Hazard Immobilisation buildup"]={{}," Immobilisation buildup "} c["20% increased Hinder Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=20}}," Hinder "} @@ -2946,7 +2946,7 @@ c["8% increased Flask Charges gained"]={{[1]={flags=0,keywordFlags=0,name="Flask c["8% increased Flask Effect Duration"]={{[1]={flags=0,keywordFlags=0,name="FlaskDuration",type="INC",value=8}},nil} c["8% increased Flask and Charm Charges gained"]={{[1]={flags=0,keywordFlags=0,name="CharmChargesGained",type="INC",value=8},[2]={flags=0,keywordFlags=0,name="FlaskChargesGained",type="INC",value=8}},nil} c["8% increased Freeze Buildup"]={{}," Freeze Buildup "} -c["8% increased Glory generation"]={{}," Glory generation "} +c["8% increased Glory generation"]={{[1]={flags=0,keywordFlags=0,name="GloryGeneration",type="INC",value=8}},nil} c["8% increased Ignite Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyIgniteDuration",type="INC",value=8}},nil} c["8% increased Ignite Magnitude"]={{[1]={flags=0,keywordFlags=8388608,name="AilmentMagnitude",type="INC",value=8}},nil} c["8% increased Immobilisation buildup"]={{}," Immobilisation buildup "} @@ -3227,7 +3227,7 @@ c["Allies in your Presence have 15% increased Attack Speed"]={{[1]={flags=0,keyw c["Allies in your Presence have 15% increased Cast Speed"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=16,keywordFlags=0,name="Speed",type="INC",value=15},onlyAllies=true}}},nil} c["Allies in your Presence have 20% increased Attack Speed"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=1,keywordFlags=0,name="Speed",type="INC",value=20},onlyAllies=true}}},nil} c["Allies in your Presence have 20% increased Cast Speed"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=16,keywordFlags=0,name="Speed",type="INC",value=20},onlyAllies=true}}},nil} -c["Allies in your Presence have 30% increased Glory generation"]={{}," Glory generation "} +c["Allies in your Presence have 30% increased Glory generation"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="GloryGeneration",type="INC",value=30},onlyAllies=true}}},nil} c["Allies in your Presence have 32% increased Critical Damage Bonus"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="CritMultiplier",type="INC",value=32},onlyAllies=true}}},nil} c["Allies in your Presence have 32% increased Critical Hit Chance"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="CritChance",type="INC",value=32},onlyAllies=true}}},nil} c["Allies in your Presence have 40% increased Critical Damage Bonus"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="CritMultiplier",type="INC",value=40},onlyAllies=true}}},nil} @@ -4063,8 +4063,7 @@ c["Banner Skills have 30% increased Area of Effect"]={{[1]={[1]={skillType=88,ty c["Banner Skills have 30% increased Duration"]={{[1]={[1]={skillType=88,type="SkillType"},flags=0,keywordFlags=0,name="Duration",type="INC",value=30}},nil} c["Banners also grant +25% to all Elemental Resistances to you and Allies"]={{[1]={[1]={skillType=88,type="SkillType"},flags=0,keywordFlags=0,name="ExtraAuraEffect",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=25}}}},nil} c["Banners always have maximum Valour"]={nil,"Banners always have maximum Valour "} -c["Banners gain 5 Glory per second"]={nil,"Banners gain 5 Glory per second "} -c["Banners gain 5 Glory per second There is no Limit on the number of Banners you can place"]={nil,"Banners gain 5 Glory per second There is no Limit on the number of Banners you can place "} +c["Banners gain 5 Glory per second"]={{[1]={flags=0,keywordFlags=0,name="BannerGloryPerSecond",type="BASE",value=5}},nil} c["Barrageable Attacks with this Bow Repeat +1 time if no enemies are in your Presence"]={nil,"Barrageable Attacks with this Bow Repeat +1 time if no enemies are in your Presence "} c["Base Bleeding Duration is 1 second"]={{[1]={flags=0,keywordFlags=0,name="BleedDurationBase",type="OVERRIDE",value="1"}},nil} c["Base Critical Hit Chance for Attacks with Weapons is 7%"]={{[1]={flags=0,keywordFlags=0,name="WeaponBaseCritChance",type="OVERRIDE",value=7}},nil} @@ -5432,9 +5431,9 @@ c["Skills have 33% chance to not consume a Cooldown when used"]={{[1]={[1]={skil c["Skills have 5% chance to not remove Elemental Infusions but still count as consuming them"]={{}," to not remove Elemental Infusions but still count as consuming them "} c["Skills have 6% increased Skill Speed per Connected green Support Gem"]={{[1]={flags=0,keywordFlags=0,name="SkillSpeedIncreasedPerGreenSupport",type="FLAG",value=6}},nil} c["Skills have a 125% longer Perfect Timing window"]={{[1]={flags=0,keywordFlags=0,name="PerfectTiming",type="INC",value=125}},nil} -c["Skills have a 15% chance to not consume Glory"]={nil,"a 15% chance to not consume Glory "} +c["Skills have a 15% chance to not consume Glory"]={{[1]={flags=0,keywordFlags=0,name="ChanceToNotConsumeGlory",type="BASE",value=15}},nil} c["Skills have a 150% longer Perfect Timing window"]={{[1]={flags=0,keywordFlags=0,name="PerfectTiming",type="INC",value=150}},nil} -c["Skills have a 5% chance to not consume Glory"]={nil,"a 5% chance to not consume Glory "} +c["Skills have a 5% chance to not consume Glory"]={{[1]={flags=0,keywordFlags=0,name="ChanceToNotConsumeGlory",type="BASE",value=5}},nil} c["Skills reserve 50% less Spirit"]={{[1]={flags=0,keywordFlags=0,name="SpiritReserved",type="MORE",value=-50}},nil} c["Skills used by Totems have 30% more Skill Speed"]={{[1]={flags=0,keywordFlags=16384,name="Speed",type="MORE",value=30},[2]={flags=0,keywordFlags=16384,name="WarcrySpeed",type="MORE",value=30},[3]={flags=0,keywordFlags=16384,name="TotemPlacementSpeed",type="MORE",value=30}},nil} c["Slam Skills have 8% increased Area of Effect"]={{[1]={[1]={skillType=92,type="SkillType"},flags=0,keywordFlags=0,name="AreaOfEffect",type="INC",value=8}},nil} diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index ae79a9d8f..b426c8e37 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -318,6 +318,21 @@ return { skill("castTimeOverride", nil), div = 1000, }, +["active_skill_requires_X_glory"] = { + -- skill("gloryCost", nil), + mod("GloryCost", "BASE", nil), +}, +["active_skill_generates_mp_%_glory_per_attack_hit"] = { + mod("GloryOnHit", "MAX", nil, 0, KeywordFlag.Attack, { type = "GlobalEffect", effectType = "Aura" }), + div = 100 +}, +["active_skill_generates_mp_%_glory_per_heavy_stun"] = { + skill("gloryOnStun", nil), + div = 100 +}, +["support_glory_required_+%_final"] = { + mod("GloryCost", "MORE", nil), +}, ["skill_cannot_gain_repeat_bonuses"] = { flag("NoRepeatBonuses"), }, @@ -2495,7 +2510,6 @@ return { ["banner_aura_magnitude_+%_final_per_resource"] = { mod("AuraEffect", "MORE", nil, 0, 0, { type = "Multiplier", var = "BannerValour" }, { type = "Condition", var = "BannerPlanted" }), }, - -- Crossbow ["reload_speed_+%"] = { mod("ReloadSpeed", "INC", nil), diff --git a/src/Modules/BuildDisplayStats.lua b/src/Modules/BuildDisplayStats.lua index 4e2d3986d..e470bea0f 100644 --- a/src/Modules/BuildDisplayStats.lua +++ b/src/Modules/BuildDisplayStats.lua @@ -75,6 +75,7 @@ local displayStats = { { stat = "SealMax", label = "Max Number of Seals", fmt = "d" }, { stat = "TimeMaxSeals", label = "Time to Gain Max Seals", fmt = ".2fs", lowerIsBetter = true }, { stat = "AreaOfEffectRadiusMetres", label = "AoE Radius", fmt = ".1fm" }, + { stat = "GloryCost", label = "Glory Cost", fmt = ".0f", colorCodes.RARE }, { stat = "BrandAttachmentRangeMetre", label = "Attachment Range", fmt = ".1fm", flag = "brand" }, { stat = "BrandTicks", label = "Activations per Brand", fmt = "d", flag = "brand" }, { stat = "ManaCost", label = "Mana Cost", fmt = "d", color = colorCodes.MANA, pool = "ManaUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaHasCost end }, diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 72619e29e..00deeb6b9 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -3296,6 +3296,16 @@ function calcs.offence(env, actor, activeSkill) activeSkill.activeEffect.grantedEffect.explosiveArrowFunc(activeSkill, output, globalOutput, globalBreakdown, env) end + + local gloryCost = skillModList:Sum("BASE", nil, "GloryCost") -- skillData.gloryCost or 0 + if gloryCost > 0 then + local more = skillModList:More(skillCfg , "GloryCost") + output.GloryCost = gloryCost * more + if globalOutput then + globalOutput.ShowGlory = 1 + end + end + -- Calculate crit chance, crit multiplier, and their combined effect if skillModList:Flag(cfg, "NeverCrit") then output.PreEffectiveCritChance = 0 @@ -3994,6 +4004,39 @@ function calcs.offence(env, actor, activeSkill) output.LifeOnHitRate = output.LifeOnHit * hitRate output.EnergyShieldOnHitRate = output.EnergyShieldOnHit * hitRate output.ManaOnHitRate = output.ManaOnHit * hitRate + + + if globalBreakdown then + globalBreakdown["Glory"] = {} + local power = modDB:Sum("BASE", nil, "Multiplier:EnemyPower") or 1 + local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") or 0 + if output.GloryCost then + t_insert(globalBreakdown["Glory"], s_format("Uses %.0f glory", output.GloryCost)) + end + if inc > 0 then + t_insert(globalBreakdown["Glory"], "" .. s_format("%.0f%% increased generation", inc)) + end + local chanceToNotConsume = modDB:Sum("BASE", skillCfg, "ChanceToNotConsumeGlory") or 0 + if chanceToNotConsume > 0 then + t_insert(globalBreakdown["Glory"], s_format("%.0f%% chance to not consume", chanceToNotConsume)) + end + local bannerGloryPerSecond = modDB:Sum("BASE", skillCfg, "BannerGloryPerSecond") + if bannerGloryPerSecond then + t_insert(globalBreakdown["Glory"], s_format("%.0f passive glory/s for banners", bannerGloryPerSecond * (1+inc/100))) + end + local gloryOnHit = modDB:Max(skillCfg, "GloryOnHit") + if gloryOnHit and not output.GloryCost then + local incBanner = modDB:Sum("INC", skillCfg, "GloryOnHit") or 0 + local internalCooldown = 3 + local hitRateReduction = hitRate / internalCooldown + t_insert(globalBreakdown["Glory"], s_format("%.0f active glory/s for banners", gloryOnHit * (1+(inc+incBanner)/100) * hitRate * hitRateReduction * power)) + globalOutput.ShowGlory = 1 + end + if skillData.gloryOnStun then + t_insert(globalBreakdown["Glory"], s_format("%.0f glory gained on stun", skillData.gloryOnStun * (1+inc/100) * power)) + globalOutput.ShowGlory = 1 + end + end -- Calculate gain on kill if skillFlags.mine or skillFlags.trap or skillFlags.totem then diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index 3fde85108..9f9570c5d 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -1427,6 +1427,9 @@ return { { label = "Enemy Mana Recovery", haveOutput = "EnemyManaRegen", { format = "{0:output:EnemyManaRegen}%", { modName = "ManaRegen", modType = "INC", enemy = true }, }, }, { label = "Enemy ES Recovery", haveOutput = "EnemyEnergyShieldRegen", { format = "{0:output:EnemyEnergyShieldRegen}%", { modName = "EnergyShieldRegen", modType = "INC", enemy = true }, }, }, { label = "MS While Casting", { format = "{1:output:MovementSpeedWhileUsingSkillPercent}%", { breakdown = "MovementSpeedWhileUsingSkill" }, { modName = { "SkillMovementSpeed", "MovementSpeedPenalty" }, cfg = "skill" }, }, }, + { label = "Glory", haveOutput = "ShowGlory", {format = "-", { breakdown = "Glory" }, + { label = "Glory modifiers", modName = {"GloryGeneration", "ChanceToNotConsumeGlory", "BannerGloryPerSecond"} }, + }, }, } } } }, -- attributes/resists diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 5ca530852..97b6b367c 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -670,6 +670,7 @@ local modNameList = { ["to deal triple damage"] = "TripleDamageChance", ["curse activation"] = "CurseActivation", ["ice crystal life"] = "IceCrystalLife", + ["glory cost"] = "GloryCost", -- Effects ["onslaught effect"] = "OnslaughtEffect", ["effect of onslaught on you"] = "OnslaughtEffect", @@ -871,6 +872,9 @@ local modNameList = { ["penalty to accuracy rating at range"] = "AccuracyPenalty", ["when you reload a crossbow to be immediate"] = "InstantReloadChance", ["to not expend ammunition"] = "ChanceToNotConsumeAmmo", + ["glory generation"] = "GloryGeneration", + ["glory generation for banner skills"] = "GloryOnHit", + ["to not consume glory"] = "ChanceToNotConsumeGlory", -- Flask and Charm modifiers ["effect"] = "LocalEffect", ["effect of flasks"] = "FlaskEffect", @@ -1274,7 +1278,7 @@ local preFlagList = { ["^non%-channelling spells [hd][ae][va][el] "] = { flags = ModFlag.Spell, tag = { type = "SkillType", skillType = SkillType.Channel, neg = true } }, ["^non%-vaal skills deal "] = { tag = { type = "SkillType", skillType = SkillType.Vaal, neg = true } }, ["^bolts fired by crossbow attacks [hd][ae][va][el] "] = { flags = ModFlag.Crossbow, tag = { type = "SkillType", skillType = SkillType.CrossbowSkill } }, - ["^skills [hgdf][aei][vari][eln] "] = { }, + ["^skills [hgdf][aei][vari][eln] a?n? ?"] = { }, ["^triggered spells [hd][ae][va][el] "] = { keywordFlags = KeywordFlag.Spell, tag = { type = "SkillType", skillType = SkillType.Triggered } }, ["^totems have "] = { keywordFlags = KeywordFlag.Totem }, ["^persistent buffs have "] = { tagList = { { type = "SkillType", skillType = SkillType.Persistent }, { type = "SkillType", skillType = SkillType.Buff } } }, @@ -3125,6 +3129,9 @@ local specialModList = { mod("ExtraAura", "LIST", { onlyAllies = true, mod = flag("GainMainHandDmgFromParent") }), mod("Multiplier:MainHandDamageToAllies", "BASE", num), } end, + ["banners gain (%d+) glory per second"] = function(num) return { + mod("BannerGloryPerSecond", "BASE", num) + } end, -- Warrior - Smith of Kitava ["body armour grants armour also applies to (%a+) damage taken from hits"] = function(_, dmgType) return { mod("ArmourAppliesTo"..firstToUpper(dmgType).."DamageTaken", "BASE", 100, { type = "ItemCondition", itemSlot = "Body Armour", rarityCond = "NORMAL" }) @@ -5919,6 +5926,7 @@ local resourceTypes = { ["energy shield, life and mana"] = { "Life", "Mana", "EnergyShield" }, ["energy shield, mana and life"] = { "Life", "Mana", "EnergyShield" }, ["rage"] = "Rage", + ["glory"] = "Glory", } do local maximumResourceTypes = { }