diff --git a/Data/Gems/act_int.lua b/Data/Gems/act_int.lua index 4c618d2f..be500229 100644 --- a/Data/Gems/act_int.lua +++ b/Data/Gems/act_int.lua @@ -390,7 +390,60 @@ gems["Bone Offering"] = { active_skill = true, spell = true, duration = true, - unsupported = true, + color = 3, + baseFlags = { + spell = true, + duration = true, + }, + skillTypes = { [2] = true, [5] = true, [12] = true, [36] = true, [9] = true, [49] = true, [17] = true, [19] = true, [18] = true, }, + baseMods = { + skill("castTime", 1), + skill("duration", 3), --"base_skill_effect_duration" = 3000 + --"offering_skill_effect_duration_per_corpse" = 500 + --"base_deal_no_damage" = ? + skill("offering", true), + }, + qualityMods = { + mod("Duration", "INC", 0.5), --"skill_effect_duration_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("BlockChance", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"monster_base_block_%" + [3] = mod("SpellBlockChance", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_spell_block_%" + --[4] = "minion_recover_X_life_on_block" + }, + levels = { + [1] = { 16, 25, 25, 11, }, + [2] = { 17, 26, 25, 14, }, + [3] = { 18, 26, 26, 20, }, + [4] = { 19, 27, 26, 27, }, + [5] = { 20, 27, 27, 38, }, + [6] = { 21, 28, 27, 50, }, + [7] = { 22, 28, 28, 66, }, + [8] = { 23, 29, 28, 81, }, + [9] = { 24, 29, 29, 99, }, + [10] = { 25, 30, 29, 120, }, + [11] = { 26, 30, 30, 146, }, + [12] = { 27, 31, 30, 176, }, + [13] = { 28, 31, 31, 212, }, + [14] = { 29, 32, 31, 255, }, + [15] = { 29, 32, 32, 306, }, + [16] = { 30, 33, 32, 366, }, + [17] = { 30, 33, 33, 414, }, + [18] = { 31, 34, 33, 468, }, + [19] = { 32, 34, 34, 528, }, + [20] = { 33, 35, 34, 594, }, + [21] = { 34, 35, 35, 644, }, + [22] = { 34, 36, 35, 693, }, + [23] = { 35, 36, 36, 743, }, + [24] = { 36, 37, 36, 792, }, + [25] = { 37, 37, 37, 842, }, + [26] = { 38, 38, 37, 891, }, + [27] = { 38, 38, 38, 941, }, + [28] = { 39, 39, 38, 990, }, + [29] = { 40, 39, 39, 1040, }, + [30] = { 41, 40, 39, 1089, }, + }, } gems["Clarity"] = { aura = true, @@ -1779,7 +1832,60 @@ gems["Flesh Offering"] = { active_skill = true, spell = true, duration = true, - unsupported = true, + color = 3, + baseFlags = { + spell = true, + duration = true, + }, + skillTypes = { [2] = true, [5] = true, [12] = true, [36] = true, [9] = true, [49] = true, [17] = true, [19] = true, [18] = true, }, + baseMods = { + skill("castTime", 1), + skill("duration", 3), --"base_skill_effect_duration" = 3000 + --"offering_skill_effect_duration_per_corpse" = 500 + --"base_deal_no_damage" = ? + skill("offering", true), + }, + qualityMods = { + mod("Duration", "INC", 0.5), --"skill_effect_duration_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Speed", "INC", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Buff" }), --"attack_speed_+%" + [3] = mod("MovementSpeed", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_movement_velocity_+%" + [4] = mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff" }), --"cast_speed_+%_from_haste_aura" + }, + levels = { + [1] = { 16, 20, 20, 20, }, + [2] = { 17, 21, 20, 21, }, + [3] = { 18, 21, 21, 21, }, + [4] = { 19, 22, 21, 22, }, + [5] = { 20, 22, 22, 22, }, + [6] = { 21, 23, 22, 23, }, + [7] = { 22, 23, 23, 23, }, + [8] = { 23, 24, 23, 24, }, + [9] = { 24, 24, 24, 24, }, + [10] = { 25, 25, 24, 25, }, + [11] = { 26, 25, 25, 25, }, + [12] = { 27, 26, 25, 26, }, + [13] = { 28, 26, 26, 26, }, + [14] = { 29, 27, 26, 27, }, + [15] = { 29, 27, 27, 27, }, + [16] = { 30, 28, 27, 28, }, + [17] = { 30, 28, 28, 28, }, + [18] = { 31, 29, 28, 29, }, + [19] = { 32, 29, 29, 29, }, + [20] = { 33, 30, 29, 30, }, + [21] = { 34, 30, 30, 30, }, + [22] = { 34, 31, 30, 31, }, + [23] = { 35, 31, 31, 31, }, + [24] = { 36, 32, 31, 32, }, + [25] = { 37, 32, 32, 32, }, + [26] = { 38, 33, 32, 33, }, + [27] = { 38, 33, 33, 33, }, + [28] = { 39, 34, 33, 34, }, + [29] = { 40, 34, 34, 34, }, + [30] = { 41, 35, 34, 35, }, + }, } gems["Freezing Pulse"] = { projectile = true, @@ -3714,7 +3820,60 @@ gems["Spirit Offering"] = { active_skill = true, spell = true, duration = true, - unsupported = true, + color = 3, + baseFlags = { + spell = true, + duration = true, + }, + skillTypes = { [2] = true, [5] = true, [12] = true, [36] = true, [9] = true, [49] = true, [17] = true, [19] = true, [18] = true, }, + baseMods = { + skill("castTime", 1), + skill("duration", 3), --"base_skill_effect_duration" = 3000 + --"offering_skill_effect_duration_per_corpse" = 500 + --"spirit_offering_life_%_added_as_base_maximum_energy_shield_per_corpse_consumed" = 2 + --"base_deal_no_damage" = ? + skill("offering", true), + }, + qualityMods = { + mod("Duration", "INC", 0.5), --"skill_effect_duration_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("PhysicalDamageGainAsChaos", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"physical_damage_%_to_add_as_chaos" + [3] = mod("ElementalResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_resist_all_elements_%" + }, + levels = { + [1] = { 16, 20, 20, }, + [2] = { 17, 20, 21, }, + [3] = { 18, 21, 21, }, + [4] = { 19, 21, 22, }, + [5] = { 20, 22, 22, }, + [6] = { 21, 22, 23, }, + [7] = { 22, 23, 23, }, + [8] = { 23, 23, 24, }, + [9] = { 24, 24, 24, }, + [10] = { 25, 24, 25, }, + [11] = { 26, 25, 25, }, + [12] = { 27, 25, 26, }, + [13] = { 28, 26, 26, }, + [14] = { 29, 26, 27, }, + [15] = { 29, 27, 27, }, + [16] = { 30, 27, 28, }, + [17] = { 30, 28, 28, }, + [18] = { 31, 28, 29, }, + [19] = { 32, 29, 29, }, + [20] = { 33, 29, 30, }, + [21] = { 34, 30, 30, }, + [22] = { 34, 30, 31, }, + [23] = { 35, 31, 31, }, + [24] = { 36, 31, 32, }, + [25] = { 37, 32, 32, }, + [26] = { 38, 32, 33, }, + [27] = { 38, 33, 33, }, + [28] = { 39, 33, 34, }, + [29] = { 40, 34, 34, }, + [30] = { 41, 34, 35, }, + }, } gems["Storm Call"] = { intelligence = true, diff --git a/Modules/Calcs.lua b/Modules/Calcs.lua index df7fd241..60d9abc8 100644 --- a/Modules/Calcs.lua +++ b/Modules/Calcs.lua @@ -3,7 +3,7 @@ -- Module: Calcs -- Performs all the offense and defense calculations. -- Here be dragons! --- This file is 3000 lines long, over half of which is in one function... +-- This file is 3100 lines long, over half of which is in one function... -- local pairs = pairs @@ -1155,7 +1155,8 @@ local function performCalcs(env) -- Merge auxillary modifiers if env.mode_buffs then - if activeSkill.buffModList and (not activeSkill.skillFlags.totem or activeSkill.skillData.allowTotemBuff) then + if activeSkill.buffModList and (not activeSkill.skillFlags.totem or activeSkill.skillData.allowTotemBuff) and (not activeSkill.skillData.offering or modDB:Sum("FLAG", nil, "OfferingsAffectPlayer")) then + activeSkill.buffSkill = true local inc = modDB:Sum("INC", skillCfg, "BuffEffect") if activeSkill.activeGem.data.golem and modDB:Sum("FLAG", skillCfg, "LiegeOfThePrimordial") and (activeSkill.activeGem.data.fire or activeSkill.activeGem.data.cold or activeSkill.activeGem.data.lightning) then inc = inc + 100 @@ -1163,6 +1164,7 @@ local function performCalcs(env) modDB:ScaleAddList(activeSkill.buffModList, 1 + inc / 100) end if activeSkill.auraModList then + activeSkill.buffSkill = true local inc = modDB:Sum("INC", skillCfg, "AuraEffect") + skillModList:Sum("INC", skillCfg, "AuraEffect") + modDB:Sum("INC", skillCfg, "BuffEffect") local more = modDB:Sum("MORE", skillCfg, "AuraEffect") * skillModList:Sum("MORE", skillCfg, "AuraEffect") modDB:ScaleAddList(activeSkill.auraModList, (1 + inc / 100) * more) @@ -1172,9 +1174,11 @@ local function performCalcs(env) end if env.mode_effective then if activeSkill.debuffModList then + activeSkill.debuffSkill = true enemyDB:ScaleAddList(activeSkill.debuffModList, activeSkill.skillData.stackCount or 1) end if activeSkill.curseModList then + activeSkill.debuffSkill = true condList["EnemyCursed"] = true local inc = modDB:Sum("INC", skillCfg, "CurseEffect") + enemyDB:Sum("INC", nil, "CurseEffect") + skillModList:Sum("INC", skillCfg, "CurseEffect") local more = modDB:Sum("MORE", skillCfg, "CurseEffect") * enemyDB:Sum("MORE", nil, "CurseEffect") * skillModList:Sum("MORE", skillCfg, "CurseEffect") @@ -1554,7 +1558,7 @@ local function performCalcs(env) slotBreakdown("Conversion", "Mana to Energy Shield", nil, energyShieldBase, nil, "EnergyShield", "Defences", "Mana") end end - local convLifeToES = modDB:Sum("BASE", nil, "LifeConvertToEnergyShield") + local convLifeToES = modDB:Sum("BASE", nil, "LifeConvertToEnergyShield", "LifeGainAsEnergyShield") if convLifeToES > 0 then energyShieldBase = modDB:Sum("BASE", nil, "Life") * convLifeToES / 100 local total @@ -3096,14 +3100,14 @@ function calcs.buildOutput(build, mode) t_insert(combatList, "Unholy Might") end for _, activeSkill in ipairs(env.activeSkillList) do - if activeSkill.buffModList or activeSkill.auraModList then + if activeSkill.buffSkill then if activeSkill.skillFlags.multiPart then t_insert(buffList, activeSkill.activeGem.name .. " (" .. activeSkill.skillPartName .. ")") else t_insert(buffList, activeSkill.activeGem.name) end end - if activeSkill.debuffModList or activeSkill.curseModList then + if activeSkill.debuffSkill then if activeSkill.skillFlags.multiPart then t_insert(curseList, activeSkill.activeGem.name .. " (" .. activeSkill.skillPartName .. ")") else diff --git a/Modules/ModParser.lua b/Modules/ModParser.lua index 29356cfb..26d79e0e 100644 --- a/Modules/ModParser.lua +++ b/Modules/ModParser.lua @@ -513,6 +513,7 @@ local specialModList = { ["critical strikes ignore enemy monster elemental resistances"] = { flag("IgnoreElementalResistances", { type = "Condition", var = "CriticalStrike" }) }, ["non%-critical strikes penetrate (%d+)%% of enemy elemental resistances"] = function(num) return { mod("ElementalPenetration", "BASE", num, { type = "Condition", var = "CriticalStrike", neg = true }) } end, ["movement speed cannot be modified to below base value"] = { flag("MovementSpeedCannotBeBelowBase") }, + ["your offering skills also affect you"] = { flag("OfferingsAffectPlayer") }, -- Special node types ["(%d+)%% of block chance applied to spells"] = function(num) return { mod("BlockChanceConv", "BASE", num) } end, ["(%d+)%% additional block chance with staves"] = function(num) return { mod("BlockChance", "BASE", num, { type = "Condition", var = "UsingStaff" }) } end, diff --git a/README.md b/README.md index 53ee7112..c56e6821 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,9 @@ 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.3.4 - 2017/02/20 + * Added support for the Offering skills and Mistress of Sacrifice + ### 1.3.3 - 2017/02/19 * Added support for Intuitive Leap * Added support for the Decay effect granted by Essence of Delirium diff --git a/changelog.txt b/changelog.txt index ece2b69f..1c226801 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,5 @@ +VERSION[1.3.4][2017/02/20] + * Added support for the Offering skills and Mistress of Sacrifice VERSION[1.3.3][2017/02/19] * Added support for Intuitive Leap * Added support for the Decay effect granted by Essence of Delirium diff --git a/manifest.xml b/manifest.xml index 18352d43..da415025 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,13 +1,13 @@ - + - + @@ -44,13 +44,13 @@ - + - + @@ -59,7 +59,7 @@ - + @@ -103,12 +103,12 @@ - + - + - + diff --git a/runtime-win32.zip b/runtime-win32.zip index 18984f44..edbdd50f 100644 Binary files a/runtime-win32.zip and b/runtime-win32.zip differ