diff --git a/Classes/CalcBreakdownControl.lua b/Classes/CalcBreakdownControl.lua index 2a84f104..63a15212 100644 --- a/Classes/CalcBreakdownControl.lua +++ b/Classes/CalcBreakdownControl.lua @@ -346,6 +346,16 @@ function CalcBreakdownClass:AddModSection(sectionData) end elseif tag.type == "SkillName" then desc = "Skill: "..tag.skillName + elseif tag.type == "SkillType" then + for name, type in pairs(SkillType) do + if type == tag.skillType then + desc = "Skill type: "..self:FormatModName(name) + break + end + end + if not desc then + desc = "Skill type: ?" + end elseif tag.type == "SlotNumber" then desc = "When in slot #"..tag.num elseif tag.type == "GlobalEffect" then diff --git a/Classes/CalcsTab.lua b/Classes/CalcsTab.lua index 8ce269c6..915f8a7b 100644 --- a/Classes/CalcsTab.lua +++ b/Classes/CalcsTab.lua @@ -51,7 +51,7 @@ local CalcsTabClass = common.NewClass("CalcsTab", "UndoHandler", "ControlHost", end) }, }, { label = "Skill Part", flag = "multiPart", { controlName = "mainSkillPart", - control = common.New("DropDownControl", nil, 0, 0, 100, 16, nil, function(index) + control = common.New("DropDownControl", nil, 0, 0, 130, 16, nil, function(index) self.input.skill_part = index self:AddUndoState() self.build.buildFlag = true diff --git a/Classes/ModDB.lua b/Classes/ModDB.lua index 0a9a656a..1d7ba16a 100644 --- a/Classes/ModDB.lua +++ b/Classes/ModDB.lua @@ -82,13 +82,14 @@ end function ModDBClass:Sum(modType, cfg, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) local flags, keywordFlags = 0, 0 - local skillName, skillGem, skillPart, slotName, source, tabulate + local skillName, skillGem, skillPart, skillTypes, slotName, source, tabulate if cfg then flags = cfg.flags or 0 keywordFlags = cfg.keywordFlags or 0 skillName = cfg.skillName skillGem = cfg.skillGem skillPart = cfg.skillPart + skillTypes = cfg.skillTypes slotName = cfg.slotName source = cfg.source tabulate = cfg.tabulate @@ -187,6 +188,11 @@ function ModDBClass:Sum(modType, cfg, arg1, arg2, arg3, arg4, arg5, arg6, arg7, value = nullValue break end + elseif tag.type == "SkillType" then + if not skillTypes or not skillTypes[tag.skillType] then + value = nullValue + break + end elseif tag.type == "SlotName" then if tag.slotName ~= slotName then value = nullValue diff --git a/Classes/ModList.lua b/Classes/ModList.lua index 9e3b926e..5d6584d0 100644 --- a/Classes/ModList.lua +++ b/Classes/ModList.lua @@ -54,13 +54,14 @@ end function ModListClass:Sum(modType, cfg, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) local flags, keywordFlags = 0, 0 - local skillName, skillGem, skillPart, slotName, source, tabulate + local skillName, skillGem, skillPart, skillTypes, slotName, source, tabulate if cfg then flags = cfg.flags or 0 keywordFlags = cfg.keywordFlags or 0 skillName = cfg.skillName skillGem = cfg.skillGem skillPart = cfg.skillPart + skillTypes = cfg.skillTypes slotName = cfg.slotName source = cfg.source tabulate = cfg.tabulate @@ -157,6 +158,11 @@ function ModListClass:Sum(modType, cfg, arg1, arg2, arg3, arg4, arg5, arg6, arg7 value = nullValue break end + elseif tag.type == "SkillType" then + if not skillTypes or not skillTypes[tag.skillType] then + value = nullValue + break + end elseif tag.type == "SlotName" then if tag.slotName ~= slotName then value = nullValue diff --git a/Data/Gems/act_dex.lua b/Data/Gems/act_dex.lua index c4282659..aa22f6d1 100644 --- a/Data/Gems/act_dex.lua +++ b/Data/Gems/act_dex.lua @@ -210,6 +210,9 @@ gems["Blade Flurry"] = { { name = "6 Stages", }, + { + name = "Release at 6 Stages", + }, }, color = 2, baseFlags = { @@ -226,8 +229,8 @@ gems["Blade Flurry"] = { --"is_area_damage" = ? nil, --"base_skill_show_average_damage_instead_of_dps" = ? --"skill_can_add_multiple_charges_per_action" = ? - mod("Damage", "MORE", 20, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 1 }), - mod("Damage", "MORE", 120, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 2 }), + mod("Damage", "MORE", 100, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 2 }), + skill("dpsMultiplier", 3, { type = "SkillPart", skillPart = 3 }), }, qualityMods = { mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 diff --git a/Data/Gems/other.lua b/Data/Gems/other.lua index abfc46ec..fb39bce3 100644 --- a/Data/Gems/other.lua +++ b/Data/Gems/other.lua @@ -89,6 +89,34 @@ gems["Portal"] = { [10] = { }, }, } +gems["Envy"] = { + hidden = true, + color = 3, + baseFlags = { + spell = true, + aura = true, + area = true, + chaos = true, + }, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, [50] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 50), + mod("ChaosMin", "BASE", 58, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_minimum_added_chaos_damage" = 58 + mod("ChaosMax", "BASE", 81, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_maximum_added_chaos_damage" = 81 + mod("AreaRadius", "INC", 0), --"base_skill_area_of_effect_+%" = 0 + mod("ChaosMin", "BASE", 52, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"spell_minimum_added_chaos_damage" = 52 + mod("ChaosMax", "BASE", 69, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"spell_maximum_added_chaos_damage" = 69 + --"base_deal_no_damage" = ? + }, + qualityMods = { + }, + levelMods = { + }, + levels = { + [15] = { }, + }, +} gems["Gluttony of Elements"] = { hidden = true, color = 4, diff --git a/Data/Gems/sup_int.lua b/Data/Gems/sup_int.lua index 746d4de7..a2d0c8c9 100644 --- a/Data/Gems/sup_int.lua +++ b/Data/Gems/sup_int.lua @@ -216,7 +216,53 @@ gems["Cast while Channelling"] = { support = true, channelling = true, spell = true, - unsupported = true, + color = 3, + requireSkillTypes = { 58, 36, }, + addSkillTypes = { }, + excludeSkillTypes = { 30, }, + baseMods = { + mod("ManaCost", "MORE", 40), + --"spell_uncastable_if_triggerable" = ? + }, + qualityMods = { + mod("Damage", "INC", 0.5, 0, 0, nil), --"damage_+%" = 0.5 + }, + levelMods = { + --[1] = "cast_while_channelling_time_ms" + [2] = mod("Damage", "MORE", nil, 0, 0, { type = "SkillType", skillType = SkillType.TriggerableSpell }), --"support_cast_while_channelling_triggered_skill_damage_+%_final" + }, + levels = { + [1] = { 450, 0, }, + [2] = { 440, 0, }, + [3] = { 440, 1, }, + [4] = { 430, 1, }, + [5] = { 430, 2, }, + [6] = { 420, 2, }, + [7] = { 420, 3, }, + [8] = { 410, 3, }, + [9] = { 410, 4, }, + [10] = { 400, 4, }, + [11] = { 400, 5, }, + [12] = { 390, 5, }, + [13] = { 390, 6, }, + [14] = { 380, 6, }, + [15] = { 380, 7, }, + [16] = { 370, 7, }, + [17] = { 370, 8, }, + [18] = { 360, 8, }, + [19] = { 360, 9, }, + [20] = { 350, 9, }, + [21] = { 350, 10, }, + [22] = { 340, 10, }, + [23] = { 340, 11, }, + [24] = { 330, 11, }, + [25] = { 330, 12, }, + [26] = { 320, 12, }, + [27] = { 320, 13, }, + [28] = { 310, 13, }, + [29] = { 310, 14, }, + [30] = { 300, 14, }, + }, } gems["Chance to Ignite"] = { fire = true, diff --git a/Data/Gems/sup_str.lua b/Data/Gems/sup_str.lua index 123dd7ae..35fefd20 100644 --- a/Data/Gems/sup_str.lua +++ b/Data/Gems/sup_str.lua @@ -163,7 +163,53 @@ gems["Cast on Melee Kill"] = { attack = true, spell = true, trigger = true, - unsupported = true, + color = 1, + requireSkillTypes = { 24, 36, }, + addSkillTypes = { 42, }, + excludeSkillTypes = { 37, 41, 30, 44, }, + baseMods = { + mod("ManaCost", "MORE", 40), + --"cast_linked_spells_on_melee_kill_%" = 100 + --"spell_uncastable_if_triggerable" = ? + }, + qualityMods = { + mod("Damage", "INC", 0.5, 0, 0, nil), --"damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Spell), --"support_cast_on_melee_kill_spell_damage_+%_final" + }, + levels = { + [1] = { 20, }, + [2] = { 21, }, + [3] = { 22, }, + [4] = { 23, }, + [5] = { 24, }, + [6] = { 25, }, + [7] = { 26, }, + [8] = { 27, }, + [9] = { 28, }, + [10] = { 29, }, + [11] = { 30, }, + [12] = { 31, }, + [13] = { 32, }, + [14] = { 33, }, + [15] = { 34, }, + [16] = { 35, }, + [17] = { 36, }, + [18] = { 37, }, + [19] = { 38, }, + [20] = { 39, }, + [21] = { 40, }, + [22] = { 41, }, + [23] = { 42, }, + [24] = { 43, }, + [25] = { 44, }, + [26] = { 45, }, + [27] = { 46, }, + [28] = { 47, }, + [29] = { 48, }, + [30] = { 49, }, + }, } gems["Cast when Damage Taken"] = { strength = true, diff --git a/Data/New.lua b/Data/New.lua index 309eb056..feb6e078 100644 --- a/Data/New.lua +++ b/Data/New.lua @@ -48,9 +48,9 @@ Armour: 140 Energy Shield: 63 Requires Level 68, 62 Str, 91 Int Adds (13-17) to (29-37) Chaos Damage -+226 to maximum Energy Shield -+32% to Cold Resistance -+20% to Lightning Resistance ++(200-250) to maximum Energy Shield ++(30-50)% to Cold Resistance ++(15-20)% to Lightning Resistance Regenerate 100 Energy Shield per second if all worn items are Corrupted Regenerate 35 Mana per second if all worn items are Corrupted Corrupted @@ -107,6 +107,22 @@ Requires Level 28, 71 Int +1% to Critical Strike Multiplier per 1% Block Chance +25% to Critical Strike Multiplier if you've dealt a Non-Critical Strike Recently ]],[[ +Duskdawn +Maelström Staff +Staves +Physical Damage: 57–119 +Critical Strike Chance: 6.40% +Attacks per Second: 1.20 +Weapon Range: 11 +Requires Level 64, 113 Str, 113 Int +18% Chance to Block +4% Chance to Block +(60-80)% increased Critical Strike Chance for Spells +Gain (10-20)% of Elemental Damage as Extra Chaos Damage ++1% to Critical Strike Multiplier per 1% Block Chance ++60% to Critical Strike Multiplier if you've dealt a Non-Critical Strike Recently +120% increased Spell Damage if you've dealt a Critical Strike Recently +]],[[ The Brine Crown Prophet Crown Armour: (390 to 429) @@ -153,13 +169,37 @@ Splintered Tower Shield Chance to Block: (27% to 29%) Armour: (128 to 168) Requires 10 Str -3% reduced Movement Speed (Hidden) +(120-160) to Armour +(30-40) to maximum Life Your hits can't be Evaded +(3-5)% Chance to Block Adds 250 to 300 Cold Damage to Counterattacks ]],[[ +Perseverance +Vanguard Belt +Requires Level 78 ++(260-320) to Armour and Evasion Rating +(4-8)% increased maximum Life ++(20-40)% to Cold Resistance +1% increased Attack Damage per 300 of the lowest of Armour and Evasion Rating +(14-20)% chance to gain Fortify on Melee Stun +You have Onslaught while you have Fortify +]],[[ +Kitava's Feast +Void Axe +Two Hand Axes +Physical Damage: (266 to 304)–(399 to 456) +Critical Strike Chance: 5.00% +Attacks per Second: 1.25 +Weapon Range: 11 +Requires Level 68, 149 Str, 76 Dex +Socketed Gems are supported by level 25 Melee Splash +(250-300)% increased Physical Damage +1% of Physical Attack Damage Leeched as Life +1% of Physical Attack Damage Leeched as Mana +Recover 5% of Maximum Life on Kill +Enemies you hit are destroyed on Kill +]],[[ Primordial Might Crimson Jewel (25-30)% increased Damage if you Summoned a Golem in the past 8 seconds @@ -221,26 +261,26 @@ Armour is increased by Uncapped Fire Resistance The Formless Inferno Royal Burgonet League: Breach +Armour: (590 to 721) Requires Level 65, 148 Str -(157)% increased Armour --20 Fire Damage taken when Hit +(80-120)% increased Armour ++(40-50) to maximum Life +-30% to Fire Resistance 8% of Physical Damage taken as Fire Damage --30% to Cold Resistance --30% to Lightning Resistance Armour is increased by Uncapped Fire Resistance ]],[[ -Xoph'ethakk's Heart +Xoph's Heart Amber Amulet League: Breach -Requires Level 40 +Requires Level 35 +(20-30) to Strength +(20-30) to Strength -(18-22)% increased Fire Damage +25% increased Fire Damage +(25-35) to maximum Life +(20-40)% to Fire Resistance Cover Enemies in Ash when they Hit you ]],[[ -Xoph'ethula's Heart +Xoph's Blood Amber Amulet League: Breach Requires Level 64 @@ -393,6 +433,20 @@ Requires Level 49, 122 Str, 53 Dex 25% chance to Curse Enemies with level 10 Vulnerability on Hit Attacks Cause Bleeding when Hitting Cursed Enemies ]],[[ +Uul-Netol's Embrace +Vaal Axe +Two Hand Axes +League: Breach +Physical Damage: (300.2 to 331.8)–(497.8 to 550.2) +Critical Strike Chance: 5.00% +Attacks per Second: (0.84 to 0.90) +Weapon Range: 11 +Requires Level 64, 158 Str, 76 Dex +(280-320)% increased Physical Damage +(30-25)% reduced Attack Speed +Attacks Cause Bleeding when Hitting Cursed Enemies +Attack with level 20 Bone Nova when you Kill a Bleeding Enemy +]],[[ The Infinite Pursuit Goliath Greaves League: Breach @@ -408,7 +462,7 @@ Titan Greaves League: Breach Requires Level 68, 120 Str (60-80)% increased Armour -+67 to maximum Life ++(50-70) to maximum Life 25% increased Movement Speed Gain a Frenzy Charge on Hit while Bleeding 15% increased Movement Speed while Bleeding @@ -447,6 +501,22 @@ Minions have +17% to Chaos Resistance Minions Poison Enemies on Hit Minions Recover 20% of Maximum Life on Killing a Poisoned Enemy ]],[[ +United in Dream +Cutlass +League: Breach +One Hand Swords +Physical Damage: 11–44 +Critical Strike Chance: 5.00% +Attacks per Second: 1.55 +Weapon Range: 9 +Requires Level 69, 55 Str, 79 Dex +18% increased Accuracy Rating +Grants level 15 Envy Skill +Minions deal (30-40)% increased Damage +Minions have +29% to Chaos Resistance +Minions Poison Enemies on Hit +Minions Leech 5% of Damage as Life against Poisoned Enemies +]],[[ Skin of the Loyal Simple Robe League: Breach @@ -454,6 +524,56 @@ Sockets cannot be modified +1 to Level of Socketed Gems 100% increased Global Defences ]],[[ +Skin of the Lords +Simple Robe +League: Breach +Variant: Acrobatics +Variant: Ancestral Bond +Variant: Arrow Dancing +Variant: Avatar of Fire +Variant: Blood Magic +Variant: Conduit +Variant: Eldritch Battery +Variant: Elemental Equilibrium +Variant: Elemental Overload +Variant: Ghost Reaver +Variant: Iron Grip +Variant: Iron Reflexes +Variant: Mind Over Matter +Variant: Minion Instability +Variant: Pain Attunement +Variant: Phase Acrobatics +Variant: Point Blank +Variant: Resolute Technique +Variant: Unwavering Stance +Variant: Vaal Pact +Variant: Zealot's Oath +Sockets cannot be modified ++1 to Level of Socketed Gems +100% increased Global Defences +You can only Socket Corrupted Gems in this item +{variant:1}Acrobatics +{variant:2}Ancestral Bond +{variant:3}Arrow Dancing +{variant:4}Avatar of Fire +{variant:5}Blood Magic +{variant:6}Conduit +{variant:7}Eldritch Battery +{variant:8}Elemental Equilibrium +{variant:9}Elemental Overload +{variant:10}Ghost Reaver +{variant:11}Iron Grip +{variant:12}Iron Reflexes +{variant:13}Mind Over Matter +{variant:14}Minion Instability +{variant:15}Pain Attunement +{variant:16}Phase Acrobatics +{variant:17}Point Blank +{variant:18}Resolute Technique +{variant:19}Unwavering Stance +{variant:20}Vaal Pact +{variant:21}Zealot's Oath +]],[[ The Red Dream Crimson Jewel League: Breach @@ -462,6 +582,17 @@ Gain 5% of Fire Damage as Extra Chaos Damage Passives granting Fire Resistance or all Elemental Resistances in Radius also grant an equal chance to gain an Endurance Charge on Kill ]],[[ +The Red Nightmare +Crimson Jewel +League: Breach +Limited to: 1 +Radius: Large +Gain 5% of Fire Damage as Extra Chaos Damage +Passives granting Fire Resistance or all Elemental Resistances in Radius +also grant Chance to Block at 35% of its value +Passives granting Fire Resistance or all Elemental Resistances in Radius +also grant an equal chance to gain an Endurance Charge on Kill +]],[[ The Green Dream Viridian Jewel League: Breach @@ -470,6 +601,17 @@ Gain 5% of Cold Damage as Extra Chaos Damage Passives granting Cold Resistance or all Elemental Resistances in Radius also grant an equal chance to gain a Frenzy Charge on Kill ]],[[ +The Green Nightmare +Viridian Jewel +League: Breach +Limited to: 1 +Radius: Large +Gain 5% of Cold Damage as Extra Chaos Damage +Passives granting Cold Resistance or all Elemental Resistances in Radius +also grant Chance to Dodge Attacks at 35% of its value +Passives granting Cold Resistance or all Elemental Resistances in Radius +also grant an equal chance to gain a Frenzy Charge on Kill +]],[[ The Blue Dream Cobalt Jewel League: Breach @@ -477,5 +619,26 @@ Radius: Large Gain 5% of Lightning Damage as Extra Chaos Damage Passives granting Lightning Resistance or all Elemental Resistances in Radius also grant an equal chance to gain a Power Charge on Kill -]] +]],[[ +The Blue Nightmare +Cobalt Jewel +League: Breach +Limited to: 1 +Radius: Large +Gain 5% of Lightning Damage as Extra Chaos Damage +Passives granting Lightning Resistance or all Elemental Resistances in Radius +also grant Chance to Block Spells at 35% of its value +Passives granting Lightning Resistance or all Elemental Resistances in Radius +also grant an equal chance to gain a Power Charge on Kill +]],[[ +Presence of Chayula +Onyx Amulet +League: Breach +Requires Level 60 ++(10-16) to all Attributes +30% increased Rarity of Items found ++60% to Chaos Resistance +Cannot be Stunned +20% of Maximum Life Converted to Energy Shield +]], } \ No newline at end of file diff --git a/Data/Uniques/gloves.lua b/Data/Uniques/gloves.lua index 1a3517aa..d8f1491a 100644 --- a/Data/Uniques/gloves.lua +++ b/Data/Uniques/gloves.lua @@ -361,7 +361,7 @@ Requires Level 58, 45 Dex, 45 Int 2% increased Attack Speed per Frenzy Charge 6% increased Accuracy Rating per Frenzy Charge 10% reduced Frenzy Charge Duration per Frenzy Charge -When at Maximum Frenzy Charges, Attacks Poison Enemies +While at Maximum Frenzy Charges, Attacks Poison Enemies ]],[[ Thunderfist Murder Mitts diff --git a/Modules/Build.lua b/Modules/Build.lua index 8a64d85b..b43e84bc 100644 --- a/Modules/Build.lua +++ b/Modules/Build.lua @@ -203,7 +203,7 @@ function buildMode:Init(dbFileName, buildName) self.modFlag = true self.buildFlag = true end) - self.controls.mainSkillPart = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 20, 100, 18, nil, function(index) + self.controls.mainSkillPart = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 20, 150, 18, nil, function(index) local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeGem.srcGem.skillPart = index self.modFlag = true diff --git a/Modules/Calcs.lua b/Modules/Calcs.lua index 37556512..6185b329 100644 --- a/Modules/Calcs.lua +++ b/Modules/Calcs.lua @@ -303,6 +303,7 @@ local function buildActiveSkillModList(env, activeSkill) skillName = activeSkill.activeGem.name:gsub("^Vaal ",""), -- This allows modifiers that target specific skills to also apply to their Vaal counterpart skillGem = activeSkill.activeGem, skillPart = activeSkill.skillPart, + skillTypes = activeSkill.skillTypes, slotName = activeSkill.slotName, } @@ -1229,14 +1230,14 @@ local function performCalcs(env) } end end - slotBreakdown = function(source, sourceName, cfg, base, ...) + slotBreakdown = function(source, sourceName, cfg, base, total, ...) local inc = modDB:Sum("INC", cfg, ...) local more = modDB:Sum("MORE", cfg, ...) t_insert(breakdown[...].slots, { base = base, inc = (inc ~= 0) and s_format(" x %.2f", 1 + inc/100), more = (more ~= 1) and s_format(" x %.2f", more), - total = s_format("%.2f", base * (1 + inc / 100) * more), + total = s_format("%.2f", total or (base * (1 + inc / 100) * more)), source = source, sourceName = sourceName, item = env.itemList[source], @@ -1305,9 +1306,26 @@ local function performCalcs(env) output.Life = 1 condList["FullLife"] = true else - output.Life = round(calcVal(modDB, "Life")) + local base = modDB:Sum("BASE", cfg, "Life") + local inc = modDB:Sum("INC", cfg, "Life") + local more = modDB:Sum("MORE", cfg, "Life") + local conv = modDB:Sum("BASE", nil, "LifeConvertToEnergyShield") + output.Life = round(base * (1 + inc/100) * more * (1 - conv/100)) if breakdown then - simpleBreakdown(nil, nil, "Life") + if inc ~= 0 or more ~= 1 or conv ~= 0 then + breakdown.Life = { } + breakdown.Life[1] = s_format("%g ^8(base)", base) + if inc ~= 0 then + t_insert(breakdown.Life, s_format("x %.2f ^8(increased/reduced)", 1 + inc/100)) + end + if more ~= 1 then + t_insert(breakdown.Life, s_format("x %.2f ^8(more/less)", more)) + end + if conv ~= 0 then + t_insert(breakdown.Life, s_format("x %.2f ^8(converted to Energy Shield)", 1 - conv/100)) + end + t_insert(breakdown.Life, s_format("= %g", output.Life)) + end end end output.Mana = round(calcVal(modDB, "Mana")) @@ -1370,14 +1388,14 @@ local function performCalcs(env) if energyShieldBase > 0 then energyShield = energyShield + energyShieldBase * calcMod(modDB, nil, "EnergyShield", "Defences") if breakdown then - slotBreakdown("Global", nil, nil, energyShieldBase, "EnergyShield", "Defences") + slotBreakdown("Global", nil, nil, energyShieldBase, nil, "EnergyShield", "Defences") end end local armourBase = modDB:Sum("BASE", nil, "Armour", "ArmourAndEvasion") if armourBase > 0 then armour = armour + armourBase * calcMod(modDB, nil, "Armour", "ArmourAndEvasion", "Defences") if breakdown then - slotBreakdown("Global", nil, nil, armourBase, "Armour", "ArmourAndEvasion", "Defences") + slotBreakdown("Global", nil, nil, armourBase, nil, "Armour", "ArmourAndEvasion", "Defences") end end local evasionBase = modDB:Sum("BASE", nil, "Evasion", "ArmourAndEvasion") @@ -1385,12 +1403,12 @@ local function performCalcs(env) if ironReflexes then armour = armour + evasionBase * calcMod(modDB, nil, "Armour", "Evasion", "ArmourAndEvasion", "Defences") if breakdown then - slotBreakdown("Conversion", "Evasion to Armour", nil, evasionBase, "Armour", "Evasion", "ArmourAndEvasion", "Defences") + slotBreakdown("Conversion", "Evasion to Armour", nil, evasionBase, nil, "Armour", "Evasion", "ArmourAndEvasion", "Defences") end else evasion = evasion + evasionBase * calcMod(modDB, nil, "Evasion", "ArmourAndEvasion", "Defences") if breakdown then - slotBreakdown("Global", nil, nil, evasionBase, "Evasion", "ArmourAndEvasion", "Defences") + slotBreakdown("Global", nil, nil, evasionBase, nil, "Evasion", "ArmourAndEvasion", "Defences") end end end @@ -1407,7 +1425,7 @@ local function performCalcs(env) energyShield = energyShield + energyShieldBase * calcMod(modDB, slotCfg, "EnergyShield", "Defences") gearEnergyShield = gearEnergyShield + energyShieldBase if breakdown then - slotBreakdown(slot, nil, slotCfg, energyShieldBase, "EnergyShield", "Defences") + slotBreakdown(slot, nil, slotCfg, energyShieldBase, nil, "EnergyShield", "Defences") end end armourBase = armourData.Armour or 0 @@ -1418,7 +1436,7 @@ local function performCalcs(env) armour = armour + armourBase * calcMod(modDB, slotCfg, "Armour", "ArmourAndEvasion", "Defences") gearArmour = gearArmour + armourBase if breakdown then - slotBreakdown(slot, nil, slotCfg, armourBase, "Armour", "ArmourAndEvasion", "Defences") + slotBreakdown(slot, nil, slotCfg, armourBase, nil, "Armour", "ArmourAndEvasion", "Defences") end end evasionBase = armourData.Evasion or 0 @@ -1427,13 +1445,13 @@ local function performCalcs(env) armour = armour + evasionBase * calcMod(modDB, slotCfg, "Armour", "Evasion", "ArmourAndEvasion", "Defences") gearArmour = gearArmour + evasionBase if breakdown then - slotBreakdown(slot, nil, slotCfg, evasionBase, "Armour", "Evasion", "ArmourAndEvasion", "Defences") + slotBreakdown(slot, nil, slotCfg, evasionBase, nil, "Armour", "Evasion", "ArmourAndEvasion", "Defences") end else evasion = evasion + evasionBase * calcMod(modDB, slotCfg, "Evasion", "ArmourAndEvasion", "Defences") gearEvasion = gearEvasion + evasionBase if breakdown then - slotBreakdown(slot, nil, slotCfg, evasionBase, "Evasion", "ArmourAndEvasion", "Defences") + slotBreakdown(slot, nil, slotCfg, evasionBase, nil, "Evasion", "ArmourAndEvasion", "Defences") end end end @@ -1444,12 +1462,27 @@ local function performCalcs(env) energyShieldBase = modDB:Sum("BASE", nil, "Mana") * convManaToES / 100 energyShield = energyShield + energyShieldBase * calcMod(modDB, nil, "Mana", "EnergyShield", "Defences") if breakdown then - slotBreakdown("Conversion", "Mana to Energy Shield", nil, energyShieldBase, "EnergyShield", "Defences", "Mana") + slotBreakdown("Conversion", "Mana to Energy Shield", nil, energyShieldBase, nil, "EnergyShield", "Defences", "Mana") + end + end + local convLifeToES = modDB:Sum("BASE", nil, "LifeConvertToEnergyShield") + if convLifeToES > 0 then + energyShieldBase = modDB:Sum("BASE", nil, "Life") * convLifeToES / 100 + local total + if modDB:Sum("FLAG", nil, "ChaosInoculation") then + total = 1 + else + total = energyShieldBase * calcMod(modDB, nil, "Life", "EnergyShield", "Defences") + end + energyShield = energyShield + total + if breakdown then + slotBreakdown("Conversion", "Life to Energy Shield", nil, energyShieldBase, total, "EnergyShield", "Defences", "Life") end end output.EnergyShield = round(energyShield) output.Armour = round(armour) output.Evasion = round(evasion) + output.LowestOfArmourAndEvasion = m_min(output.Armour, output.Evasion) output["Gear:EnergyShield"] = gearEnergyShield output["Gear:Armour"] = gearArmour output["Gear:Evasion"] = gearEvasion diff --git a/Modules/ModParser.lua b/Modules/ModParser.lua index c9677b00..4c8d8ef8 100644 --- a/Modules/ModParser.lua +++ b/Modules/ModParser.lua @@ -322,6 +322,7 @@ local modTagList = { ["per (%d+) evasion rating"] = function(num) return { tag = { type = "PerStat", stat = "Evasion", div = num } } end, ["per (%d+) accuracy rating"] = function(num) return { tag = { type = "PerStat", stat = "Accuracy", div = num } } end, ["per (%d+)%% block chance"] = function(num) return { tag = { type = "PerStat", stat = "BlockChance", div = num } } end, + ["per (%d+) of the lowest of armour and evasion rating"] = function(num) return { tag = { type = "PerStat", stat = "LowestOfArmourAndEvasion", div = num } } end, -- Slot conditions ["in main hand"] = { tag = { type = "SlotNumber", num = 1 } }, ["when in main hand"] = { tag = { type = "SlotNumber", num = 1 } }, @@ -367,6 +368,7 @@ local modTagList = { ["if you've killed recently"] = { tag = { type = "Condition", var = "KilledRecently" } }, ["if you haven't killed recently"] = { tag = { type = "Condition", var = "NotKilledRecently" } }, ["if you or your totems have killed recently"] = { tag = { type = "Condition", varList = {"KilledRecently","TotemsKilledRecently"} } }, + ["if you've killed a maimed enemy recently"] = { tagList = { { type = "Condition", var = "KilledRecently" }, { type = "Condition", var = "EnemyMaimed" } } }, ["if you've been hit recently"] = { tag = { type = "Condition", var = "BeenHitRecently" } }, ["if you were hit recently"] = { tag = { type = "Condition", var = "BeenHitRecently" } }, ["if you were damaged by a hit recently"] = { tag = { type = "Condition", var = "BeenHitRecently" } }, @@ -538,6 +540,7 @@ local specialModList = { ["gain (%d+)%% of bow physical damage as extra damage of each element"] = function(num) return { mod("PhysicalDamageGainAsLightning", "BASE", num, nil, ModFlag.Bow), mod("PhysicalDamageGainAsCold", "BASE", num, nil, ModFlag.Bow), mod("PhysicalDamageGainAsFire", "BASE", num, nil, ModFlag.Bow) } end, ["totems fire (%d+) additional projectiles"] = function(num) return { mod("ProjectileCount", "BASE", num, nil, 0, KeywordFlag.Totem) } end, ["when at maximum frenzy charges, attacks poison enemies"] = { mod("PoisonChance", "BASE", 100, nil, ModFlag.Attack, { type = "Condition", var = "AtMaxFrenzyCharges" }) }, + ["while at maximum frenzy charges, attacks poison enemies"] = { mod("PoisonChance", "BASE", 100, nil, ModFlag.Attack, { type = "Condition", var = "AtMaxFrenzyCharges" }) }, ["skills chain an additional time while at maximum frenzy charges"] = { mod("ChainCount", "BASE", 1, { type = "Condition", var = "AtMaxFrenzyCharges" }) }, ["you cannot be shocked while at maximum endurance charges"] = { mod("AvoidShock", "BASE", 100, { type = "Condition", var = "AtMaxEnduranceCharges" }) }, ["you have no life regeneration"] = { flag("NoLifeRegen") }, @@ -551,19 +554,31 @@ local specialModList = { ["critical strikes deal no damage"] = { flag("NoCritDamage") }, ["enemies chilled by you take (%d+)%% increased burning damage"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("BurningDamageTaken", "INC", num) }, { type = "Condition", var = "EnemyChilled" }) } end, ["attacks with this weapon penetrate (%d+)%% elemental resistances"] = function(num) return { mod("ElementalPenetration", "BASE", num, nil, ModFlag.Weapon) } end, + ["(%d+)%% of maximum life converted to energy shield"] = function(num) return { mod("LifeConvertToEnergyShield", "BASE", num) } end, } local keystoneList = { -- List of keystones that can be found on uniques - "Zealot's Oath", - "Pain Attunement", - "Blood Magic", - "Unwavering Stance", - "Ghost Reaver", - "Conduit", - "Mind Over Matter", "Acrobatics", - "Phase Acrobatics", + "Ancestral Bond", + "Arrow Dancing", "Avatar of Fire", + "Blood Magic", + "Conduit", + "Eldritch Battery", + "Elemental Equilibrium", + "Elemental Overload", + "Ghost Reaver", + "Iron Grip", + "Iron Reflexes", + "Mind Over Matter", + "Minion Instability", + "Pain Attunement", + "Phase Acrobatics", + "Point Blank", + "Resolute Technique", + "Unwavering Stance", + "Vaal Pact", + "Zealot's Oath", } for _, name in pairs(keystoneList) do specialModList[name:lower()] = { mod("Keystone", "LIST", name) } @@ -855,6 +870,10 @@ local function parseMod(line) keywordFlags = bor(keywordFlags, data.keywordFlags or 0) if data.tag then t_insert(tagList, copyTable(data.tag)) + elseif data.tagList then + for _, tag in ipairs(data.tagList) do + t_insert(tagList, copyTable(tag)) + end end end end diff --git a/README.md b/README.md index 3a17221a..8d054dd6 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,11 @@ Head over to the [Releases](https://github.com/Openarl/PathOfBuilding/releases) ![ss3](https://cloud.githubusercontent.com/assets/19189971/18089780/f0ff234a-6f04-11e6-8c88-6193fe59a5c4.png) ## Changelog +### 1.2.23 - 2016/12/10 + * Added and updated more uniques from 2.5.0 + * Added a new skill part to Blade Flurry that approximates the DPS from releasing every time you hit 6 stages + * Added support for the Cast on Melee Kill and Cast while Channelling support gems + ### 1.2.22 - 2016/12/04 * Added many more uniques from 2.5.0, and updated mods on others * Updated existing uniques that were changed in 2.5.0 diff --git a/changelog.txt b/changelog.txt index 002cea14..1e82ecb0 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,7 @@ +VERSION[1.2.23][2016/12/10] + * Added and updated more uniques from 2.5.0 + * Added a new skill part to Blade Flurry that approximates the DPS from releasing every time you hit 6 stages + * Added support for the Cast on Melee Kill and Cast while Channelling support gems VERSION[1.2.22][2016/12/04] * Added many more uniques from 2.5.0, and updated mods on others * Updated existing uniques that were changed in 2.5.0 diff --git a/manifest.xml b/manifest.xml index e43de778..fcc00896 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,18 +1,18 @@ - + - + - + - + @@ -26,8 +26,8 @@ - - + + @@ -42,27 +42,27 @@ - + - + - + - + - + - + - - + + @@ -89,7 +89,7 @@ - +