diff --git a/src/Data/Minions.lua b/src/Data/Minions.lua index e8cf39f52..37a3ad519 100644 --- a/src/Data/Minions.lua +++ b/src/Data/Minions.lua @@ -542,6 +542,7 @@ minions["UnearthBoneConstruct"] = { attackTime = 1.06, attackRange = 12, accuracy = 1, + limit = "ActiveUnearthBoneConstructLimit", baseMovementSpeed = 37, spectreReservation = 50, companionReservation = 30, @@ -700,6 +701,7 @@ minions["LivingLightning"] = { attackTime = 1, attackRange = 20, accuracy = 1, + limit = "ActiveLivingLightningLimit", baseMovementSpeed = 97, spectreReservation = 50, companionReservation = 30, diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index db85d1275..0651cca20 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -284,6 +284,9 @@ return { ["display_skill_minions_level_is_corpse_level"] = { skill("minionLevelIsEnemyLevel", true), }, +["display_minion_level_from_triggering_skill_level"] = { + skill("minionLevelIsTriggeredSkillLevel", true), +}, ["active_skill_minion_added_damage_+%_final"] = { skill("minionDamageEffectiveness", nil), }, @@ -2196,6 +2199,9 @@ return { ["active_skill_minion_bleeding_damage_+%_final"] = { mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", nil, 0, KeywordFlag.Bleed) }), }, +["minion_base_physical_damage_%_to_convert_to_lightning"] = { + mod("MinionModifier", "LIST", { mod = mod("PhysicalDamageConvertToLightning", "BASE", nil) }), +}, ["minion_critical_strike_chance_+%"] = { mod("MinionModifier", "LIST", { mod = mod("CritChance", "INC", nil) }), }, @@ -2275,6 +2281,15 @@ return { ["base_number_of_arbalists"] = { mod("ActiveArbalistLimit", "BASE", nil), }, +["base_number_of_living_lightning_allowed"] = { + mod("ActiveLivingLightningLimit", "BASE", nil), +}, +["base_number_of_skeletal_constructs_allowed"] = { + mod("ActiveUnearthBoneConstructLimit", "BASE", nil), +}, +["maximum_hatching_elementals_allowed"] = { + mod("ActiveSkitteringStoneLimit", "BASE", nil), +}, ["base_number_of_champions_of_light_allowed"] = { mod("ActiveSentinelOfPurityLimit", "BASE", nil), }, diff --git a/src/Data/Skills/minion.lua b/src/Data/Skills/minion.lua index 777969bbf..1f069c5d6 100644 --- a/src/Data/Skills/minion.lua +++ b/src/Data/Skills/minion.lua @@ -1172,11 +1172,20 @@ skills["LivingLightningZap"] = { label = "Zap", incrementalEffectiveness = 0.054999999701977, statDescriptionScope = "skill_stat_descriptions", + statMap = { + ["living_lightning_damage_+%_final_per_additional_hit"] = { + mod("Damage", "MORE", nil), + div = 3/2, --Average over 3 hits + }, + }, baseFlags = { attack = true, melee = true, chaining = true, }, + baseMods = { + skill("timeOverride", 0.001, { type = "Multiplier", var = "LivingLightningAttackTime" }), + }, constantStats = { { "number_of_chains", 3 }, { "living_lightning_damage_+%_final_per_additional_hit", -30 }, diff --git a/src/Data/Skills/sup_int.lua b/src/Data/Skills/sup_int.lua index e3918403a..4c2418982 100644 --- a/src/Data/Skills/sup_int.lua +++ b/src/Data/Skills/sup_int.lua @@ -3593,6 +3593,14 @@ skills["TriggeredLivingLightningPlayer"] = { label = "Living Lightning", incrementalEffectiveness = 0.054999999701977, statDescriptionScope = "triggered_living_lightning", + statMap = { + ["living_lightning_maximum_number_of_attacks"] = { + mod("MinionModifier", "LIST", { mod = mod("RepeatCount", "BASE", nil), }), + }, + ["living_lightning_beam_attack_time_ms"] = { + mod("MinionModifier", "LIST", { mod = mod("Multiplier:LivingLightningAttackTime", "BASE", nil) }), + }, + }, baseFlags = { minion = true, }, @@ -3669,6 +3677,12 @@ skills["TriggeredLivingLightningPlayerTwo"] = { mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", nil, ModFlag.Attack, 0, { type = "PerStat", stat = "Dex", actor = "parent", div = 10 }) }), div = 10, }, + ["living_lightning_maximum_number_of_attacks"] = { + mod("MinionModifier", "LIST", { mod = mod("RepeatCount", "BASE", nil), }), + }, + ["living_lightning_beam_attack_time_ms"] = { + mod("MinionModifier", "LIST", { mod = mod("Multiplier:LivingLightningAttackTime", "BASE", nil) }), + }, }, baseFlags = { minion = true, diff --git a/src/Export/Minions/Minions.txt b/src/Export/Minions/Minions.txt index 3dc3db83e..fa91f50ed 100644 --- a/src/Export/Minions/Minions.txt +++ b/src/Export/Minions/Minions.txt @@ -61,6 +61,7 @@ local minions, mod = ... #emit #monster Metadata/Monsters/SkeletalConstruct/BoneConstructPlayerSummoned UnearthBoneConstruct +#limit ActiveUnearthBoneConstructLimit #emit #monster Metadata/Monsters/RhoaPlayerSummoned/RhoaPlayerSummoned SummonedRhoa @@ -73,6 +74,7 @@ local minions, mod = ... #emit #monster Metadata/Monsters/Monsters/LivingLightningPlayerSummoned LivingLightning +#limit ActiveLivingLightningLimit #emit #monster Metadata/Monsters/Daemon/ArtilleryPlayer/SummonArtilleryDaemon TacticianMinion diff --git a/src/Export/Skills/minion.txt b/src/Export/Skills/minion.txt index e740551f2..25613b257 100644 --- a/src/Export/Skills/minion.txt +++ b/src/Export/Skills/minion.txt @@ -188,6 +188,13 @@ skills["MinionInstability"] = { #skill LivingLightningZap Zap #set LivingLightningZap #flags attack melee chaining +statMap = { + ["living_lightning_damage_+%_final_per_additional_hit"] = { + mod("Damage", "MORE", nil), + div = 3/2, --Average over 3 hits + }, +}, +#baseMod skill("timeOverride", 0.001, { type = "Multiplier", var = "LivingLightningAttackTime" }) #mods #skillEnd diff --git a/src/Export/Skills/sup_int.txt b/src/Export/Skills/sup_int.txt index cf6937e09..a65266e70 100644 --- a/src/Export/Skills/sup_int.txt +++ b/src/Export/Skills/sup_int.txt @@ -783,6 +783,14 @@ statMap = { #skill TriggeredLivingLightningPlayer #set TriggeredLivingLightningPlayer #flags minion +statMap = { + ["living_lightning_maximum_number_of_attacks"] = { + mod("MinionModifier", "LIST", { mod = mod("RepeatCount", "BASE", nil), }), + }, + ["living_lightning_beam_attack_time_ms"] = { + mod("MinionModifier", "LIST", { mod = mod("Multiplier:LivingLightningAttackTime", "BASE", nil) }), + }, +}, #mods #skillEnd @@ -804,6 +812,12 @@ statMap = { mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", nil, ModFlag.Attack, 0, { type = "PerStat", stat = "Dex", actor = "parent", div = 10 }) }), div = 10, }, + ["living_lightning_maximum_number_of_attacks"] = { + mod("MinionModifier", "LIST", { mod = mod("RepeatCount", "BASE", nil), }), + }, + ["living_lightning_beam_attack_time_ms"] = { + mod("MinionModifier", "LIST", { mod = mod("Multiplier:LivingLightningAttackTime", "BASE", nil) }), + }, }, #mods #skillEnd diff --git a/src/Modules/CalcActiveSkill.lua b/src/Modules/CalcActiveSkill.lua index c0910eebc..e1b7deee5 100644 --- a/src/Modules/CalcActiveSkill.lua +++ b/src/Modules/CalcActiveSkill.lua @@ -161,6 +161,7 @@ function calcs.createActiveSkill(activeEffect, supportList, env, actor, socketGr -- Track how many active skills are supported by this support effect if supportEffect.isSupporting and activeEffect.srcInstance then supportEffect.isSupporting[activeEffect.srcInstance] = true + supportEffect.activeSkillLevel = activeEffect.srcInstance.level end if supportEffect.grantedEffect.addFlags and not summonSkill then -- Support skill adds flags to supported skills (eg. Remote Mine adds 'mine') @@ -789,6 +790,7 @@ function calcs.buildActiveSkillModList(env, activeSkill) minion.type = minionType minion.minionData = env.data.minions[minionType] minion.level = activeSkill.skillData.minionLevelIsEnemyLevel and env.enemyLevel or + activeSkill.skillData.minionLevelIsTriggeredSkillLevel and activeEffect.srcInstance.supportEffect and activeEffect.srcInstance.supportEffect.activeSkillLevel and data.minionLevelTable[activeEffect.srcInstance.supportEffect.activeSkillLevel] or activeSkill.skillData.minionLevelIsPlayerLevel and (m_min(env.build and env.build.characterLevel or activeSkill.skillData.minionLevel or activeEffect.grantedEffectLevel.levelRequirement, activeSkill.skillData.minionLevelIsPlayerLevel)) or activeSkill.skillData.minionLevel or data.minionLevelTable[activeSkill.activeEffect.level] or 1 -- fix minion level between 1 and 100 diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 5ac6aa096..ffc4175ae 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -2840,6 +2840,8 @@ function calcs.offence(env, actor, activeSkill) if skillData.hitTimeOverride and not skillData.triggeredOnDeath then output.HitTime = skillData.hitTimeOverride output.HitSpeed = 1 / output.HitTime + elseif skillData.timeOverride and not skillData.triggeredOnDeath then + output.Time = skillData.timeOverride elseif skillData.hitTimeMultiplier and output.Time and not skillData.triggeredOnDeath then output.HitTime = output.Time * skillData.hitTimeMultiplier if output.Cooldown and skillData.triggered then