Release 1.3.21

- Overhauled buff/debuff and curse handling
- Added support for Punishment, Generosity and Block Chance Reduction
- Minor corrections to unique stat wording
This commit is contained in:
Openarl
2017-03-20 21:06:47 +10:00
parent 946f042501
commit c9a5e7fc9a
16 changed files with 390 additions and 88 deletions

View File

@@ -1753,7 +1753,60 @@ gems["Punishment"] = {
spell = true,
area = true,
duration = true,
unsupported = true,
color = 1,
baseFlags = {
spell = true,
curse = true,
area = true,
duration = true,
},
skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [32] = true, [36] = true, },
baseMods = {
skill("castTime", 0.5),
--"newpunishment_applied_buff_duration_ms" = 4000
},
qualityMods = {
mod("Speed", "INC", 0.25, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Buff"}), --"newpunishment_attack_speed_+%" = 0.25
},
levelMods = {
[1] = skill("manaCost", nil),
[2] = skill("duration", nil), --"base_skill_effect_duration"
[3] = mod("Damage", "MORE", nil, ModFlag.Melee, 0, { type = "GlobalEffect", effectType = "Buff"}), --"newpunishment_melee_damage_+%_final"
[4] = mod("Speed", "INC", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Buff"}), --"newpunishment_attack_speed_+%"
[5] = mod("AreaOfEffect", "INC", nil), --"base_skill_area_of_effect_+%"
},
levels = {
[1] = { 24, 9, 25, 10, 0, },
[2] = { 26, 9.1, 26, 10, 4, },
[3] = { 27, 9.2, 26, 11, 8, },
[4] = { 29, 9.3, 27, 11, 12, },
[5] = { 30, 9.4, 27, 12, 16, },
[6] = { 32, 9.5, 28, 12, 20, },
[7] = { 34, 9.6, 28, 13, 24, },
[8] = { 35, 9.7, 29, 13, 28, },
[9] = { 37, 9.8, 29, 14, 32, },
[10] = { 38, 9.9, 30, 14, 36, },
[11] = { 39, 10, 30, 15, 40, },
[12] = { 40, 10.1, 31, 15, 44, },
[13] = { 42, 10.2, 31, 16, 48, },
[14] = { 43, 10.3, 32, 16, 52, },
[15] = { 44, 10.4, 32, 17, 56, },
[16] = { 45, 10.5, 33, 17, 60, },
[17] = { 46, 10.6, 33, 18, 64, },
[18] = { 47, 10.7, 34, 18, 68, },
[19] = { 48, 10.8, 34, 19, 72, },
[20] = { 50, 10.9, 35, 19, 76, },
[21] = { 51, 11, 35, 20, 80, },
[22] = { 52, 11.1, 36, 20, 84, },
[23] = { 53, 11.2, 36, 21, 88, },
[24] = { 54, 11.3, 37, 21, 92, },
[25] = { 56, 11.4, 37, 22, 96, },
[26] = { 57, 11.5, 38, 22, 100, },
[27] = { 58, 11.6, 38, 23, 104, },
[28] = { 59, 11.7, 39, 23, 108, },
[29] = { 60, 11.8, 39, 24, 112, },
[30] = { 61, 11.9, 40, 24, 116, },
},
}
gems["Purity of Fire"] = {
aura = true,

View File

@@ -157,7 +157,51 @@ gems["Blind"] = {
gems["Block Chance Reduction"] = {
dexterity = true,
support = true,
unsupported = true,
color = 2,
requireSkillTypes = { 10, 1, },
addSkillTypes = { },
excludeSkillTypes = { },
baseMods = {
},
qualityMods = {
--"global_reduce_enemy_block_%" = 0.25
},
levelMods = {
--[1] = "global_reduce_enemy_block_%"
--[2] = "reduce_enemy_dodge_%"
},
levels = {
[1] = { 20, 20, },
[2] = { 21, 20, },
[3] = { 21, 21, },
[4] = { 22, 21, },
[5] = { 22, 22, },
[6] = { 23, 22, },
[7] = { 23, 23, },
[8] = { 24, 23, },
[9] = { 24, 24, },
[10] = { 25, 24, },
[11] = { 25, 25, },
[12] = { 26, 25, },
[13] = { 26, 26, },
[14] = { 27, 26, },
[15] = { 27, 27, },
[16] = { 28, 27, },
[17] = { 28, 28, },
[18] = { 29, 28, },
[19] = { 29, 29, },
[20] = { 30, 29, },
[21] = { 30, 30, },
[22] = { 31, 30, },
[23] = { 31, 31, },
[24] = { 32, 31, },
[25] = { 32, 32, },
[26] = { 33, 32, },
[27] = { 33, 33, },
[28] = { 34, 33, },
[29] = { 34, 34, },
[30] = { 35, 34, },
},
}
gems["Cast On Critical Strike"] = {
dexterity = true,

View File

@@ -508,7 +508,51 @@ gems["Generosity"] = {
strength = true,
support = true,
aura = true,
unsupported = true,
color = 1,
requireSkillTypes = { 44, },
addSkillTypes = { },
excludeSkillTypes = { 30, 32, },
baseMods = {
skill("auraCannotAffectSelf", true), --"aura_cannot_affect_self" = ?
},
qualityMods = {
mod("AreaOfEffect", "INC", 2, 0, KeywordFlag.Aura), --"base_aura_area_of_effect_+%" = 2
},
levelMods = {
[1] = mod("AuraEffect", "INC", nil), --"non_curse_aura_effect_+%"
},
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["Increased Burning Damage"] = {
fire = true,

View File

@@ -294,7 +294,7 @@ Requires Level 18
15% increased Movement Speed
50% increased Stun Recovery
20% reduced Light Radius
{variant:2}Adds (15-20) to (25-30) Chaos Damage while using a Flask
{variant:2}Adds (15-20) to (25-30) Chaos Damage to Spells and Attacks while using a Flask
+50% to Chaos Resistance while using a Flask
]],[[
Dusktoe

View File

@@ -205,8 +205,8 @@ Requires Level 70, 113 Dex, 113 Int
Adds (35-50) to (100-125) Physical Damage
(10-15)% increased Attack Speed
Minions have (10-15)% increased Attack Speed
10% Chance to summon a Spectral Wolf on Kill
Increases and reductions to Minion Damage also affects you
10% Chance to Cast level 18 Summon Spectral Wolf on Kill
Increases and Reductions to Minion Damage also affect you
70% increased Minion Damage if you have Hit Recently
]],[[
Touch of Anguish

View File

@@ -86,7 +86,7 @@ Requires Level 24, 17 Dex
{variant:2}+(40-50) to Evasion Rating
{variant:1}+(10-20)% to Cold Resistance
{variant:2}+(20-30)% to Cold Resistance
{variant:2}Adds (5-7) to (13-15) Cold Damage
{variant:2}Adds (5-7) to (13-15) Cold Damage to Spells and Attacks
{variant:1}25% of Physical Damage Converted to Cold Damage
{variant:2}50% of Physical Damage Converted to Cold Damage
Reflects 10 Cold Damage to Melee Attackers
@@ -102,7 +102,7 @@ Requires Level 9, 17 Dex
{variant:2}+(40-50) to Evasion Rating
{variant:1}+(10-20)% to Cold Resistance
{variant:2}+(20-30)% to Cold Resistance
{variant:2}Adds (5-7) to (13-15) Cold Damage
{variant:2}Adds (5-7) to (13-15) Cold Damage to Spells and Attacks
{variant:1}25% of Physical Damage Converted to Cold Damage
{variant:2}50% of Physical Damage Converted to Cold Damage
Reflects 10 Cold Damage to Melee Attackers

View File

@@ -21,7 +21,7 @@ Requires Level 20
{variant:1}(10-15)% increased Cold Damage
{variant:2}(25-30)% increased Cold Damage
{variant:1}Adds 1 to (1-50) Lightning Damage to Attacks
{variant:2}Adds 1 to (50-70) Lightning Damage
{variant:2}Adds 1 to (50-70) Lightning Damage to Spells and Attacks
+(30-40) to maximum Life
{variant:1}1% of Damage against Frozen Enemies Leeched as Life
{variant:2}1% of Damage against Shocked Enemies Leeched as Life
@@ -38,7 +38,7 @@ Requires Level 20
{variant:1}(10-15)% increased Fire Damage
{variant:1}(25-30)% increased Fire Damage
{variant:1}Adds 1 to (10-30) Cold Damage to Attacks
{variant:2}Adds (20-25) to (30-50) Cold Damage
{variant:2}Adds (20-25) to (30-50) Cold Damage to Spells and Attacks
+(30-40) to maximum Energy Shield
30% increased Damage while Ignited
+5000 to Armour while Frozen
@@ -51,7 +51,7 @@ League: Domination, Nemesis
Requires Level 20
+(12-16)% to Fire and Lightning Resistances
{variant:1}Adds 1 to (10-30) Fire Damage to Attacks
{variant:2}Adds (20-25) to (30-50) Fire Damage
{variant:2}Adds (20-25) to (30-50) Fire Damage to Spells and Attacks
{variant:1}(10-15)% increased Lightning Damage
{variant:2}(25-30)% increased Lightning Damage
+(30-40) to maximum Mana
@@ -486,7 +486,7 @@ Requires Level 20
{variant:1}Adds 10 to 15 Physical Damage to Attacks against Frozen Enemies
{variant:2}Adds 40 to 60 Cold Damage against Chilled Enemies
{variant:1}Adds (5-6) to (7-9) Cold Damage to Attacks
{variant:2}Adds (7-10) to (15-20) Cold Damage
{variant:2}Adds (7-10) to (15-20) Cold Damage to Spells and Attacks
+(200-300) to Evasion Rating
{variant:1}20% reduced Chill Duration on You
{variant:2}50% chance to Avoid being Chilled

View File

@@ -31,7 +31,7 @@ Variant: Pre 2.6.0
Variant: Current
Requires Level 61, 159 Str
{variant:2}Adds (7-10) to (15-25) Fire Damage to Attacks
{variant:3}Adds (12-15) to (30-35) Fire Damage
{variant:3}Adds (12-15) to (30-35) Fire Damage to Spells and Attacks
(120-150)% increased Armour
{variant:3}+(60-80) to maximum Life
+(35-50)% to Fire Resistance

View File

@@ -467,7 +467,7 @@ Implicits: 2
+1 to Level of Active Socketed Skill Gems
(60-80)% increased Physical Damage
Adds (60-65) to (90-105) Chaos Damage
{variant:2}Adds 1 to 2 Physical Damage per Level
{variant:2}Adds 1 to 2 Physical Damage to Attacks per Level
{variant:1}+1 Life gained on Kill per Level
{variant:1}1% increased Elemental Damage per Level
1% increased Chaos Damage per Level

View File

@@ -3,7 +3,7 @@
-- Module: Calcs
-- Performs all the offense and defense calculations.
-- Here be dragons!
-- This file is 3300 lines long, over half of which is in one function...
-- This file is 3400 lines long, over half of which is in one function...
--
local pairs = pairs
@@ -474,6 +474,29 @@ local function buildNodeModList(env, nodeList, finishJewels)
return modList
end
-- Merge an instance of a buff, taking the highest value of each modifier
local function mergeBuff(src, destTable, destKey)
if not destTable[destKey] then
destTable[destKey] = { }
end
local dest = destTable[destKey]
for _, mod in ipairs(src) do
local param = modLib.formatModParams(mod)
for index, destMod in ipairs(dest) do
if param == modLib.formatModParams(destMod) then
if type(destMod.value) == "number" and mod.value > destMod.value then
dest[index] = mod
end
param = nil
break
end
end
if param then
t_insert(dest, mod)
end
end
end
-- Calculate min/max damage of a hit for the given damage type
local function calcHitDamage(env, source, cfg, breakdown, damageType, ...)
local modDB = env.modDB
@@ -1002,7 +1025,7 @@ local function initEnv(build, mode, override)
end
-- Finalise environment and perform the calculations
-- This function is 1900 lines long. Enjoy!
-- This function is 2100 lines long. Enjoy!
local function performCalcs(env)
local modDB = env.modDB
local enemyDB = env.enemyDB
@@ -1049,9 +1072,35 @@ local function performCalcs(env)
-- Merge flask modifiers
if env.mode_combat then
local effectInc = modDB:Sum("INC", nil, "FlaskEffect")
local flaskBuffs = { }
for item in pairs(env.flasks) do
modDB.conditions["UsingFlask"] = true
modDB:ScaleAddList(item.modList, 1 + (effectInc + item.flaskData.effectInc) / 100)
-- Avert thine eyes, lest they be forever scarred
-- I have no idea how to determine which buff is applied by a given flask,
-- so utility flasks are grouped by base, unique flasks are grouped by name, and magic flasks by their modifiers
local effectMod = 1 + (effectInc + item.flaskData.effectInc) / 100
if item.buffModList[1] then
local srcList = common.New("ModList")
srcList:ScaleAddList(item.buffModList, effectMod)
mergeBuff(srcList, flaskBuffs, item.baseName)
end
if item.modList[1] then
local srcList = common.New("ModList")
srcList:ScaleAddList(item.modList, effectMod)
local key
if item.rarity == "UNIQUE" then
key = item.title
else
key = ""
for _, mod in ipairs(item.modList) do
key = key .. modLib.formatModParams(mod) .. "&"
end
end
mergeBuff(srcList, flaskBuffs, key)
end
end
for _, buffModList in pairs(flaskBuffs) do
modDB:AddList(buffModList)
end
end
@@ -1124,27 +1173,6 @@ local function performCalcs(env)
if env.mode_effective then
condList["Effective"] = true
end
-- Check for extra curses
for _, value in ipairs(modDB:Sum("LIST", nil, "ExtraCurse")) do
local modList = common.New("ModList")
mergeGemMods(modList, {
level = value.level,
quality = 0,
data = data.gems[value.name],
})
modDB.multipliers["CurseOnEnemy"] = (modDB.multipliers["CurseOnEnemy"] or 0) + 1
local curseModList = { }
for _, mod in ipairs(modList) do
for _, tag in ipairs(mod.tagList) do
if tag.type == "GlobalEffect" and tag.effectType == "Curse" then
t_insert(curseModList, mod)
break
end
end
end
enemyDB:ScaleAddList(curseModList, (1 + enemyDB:Sum("INC", nil, "CurseEffect") / 100) * enemyDB:Sum("MORE", nil, "CurseEffect"))
end
-- Check for extra modifiers to apply to aura skills
local extraAuraModList = { }
@@ -1155,7 +1183,10 @@ local function performCalcs(env)
end
end
-- Merge auxillary skill modifiers and calculate skill life and mana reservations
-- Combine buffs/debuffs and calculate skill life and mana reservations
local buffs = { }
local debuffs = { }
local curses = { }
env.reserved_LifeBase = 0
env.reserved_LifePercent = 0
env.reserved_ManaBase = 0
@@ -1168,37 +1199,58 @@ local function performCalcs(env)
local skillModList = activeSkill.skillModList
local skillCfg = activeSkill.skillCfg
-- Merge auxillary modifiers
-- Combine buffs/debuffs
if env.mode_buffs 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
if activeSkill.buffModList and
not activeSkill.skillFlags.curse 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 srcList = common.New("ModList")
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
end
modDB:ScaleAddList(activeSkill.buffModList, 1 + inc / 100)
local more = modDB:Sum("MORE", skillCfg, "BuffEffect")
srcList:ScaleAddList(activeSkill.buffModList, (1 + inc / 100) * more)
mergeBuff(srcList, buffs, activeSkill.activeGem.name)
end
if activeSkill.auraModList then
if activeSkill.auraModList and not activeSkill.skillData.auraCannotAffectSelf 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)
modDB:ScaleAddList(extraAuraModList, (1 + inc / 100) * more)
local srcList = common.New("ModList")
local inc = modDB:Sum("INC", skillCfg, "AuraEffect", "BuffEffect") + skillModList:Sum("INC", skillCfg, "AuraEffect", "BuffEffect")
local more = modDB:Sum("MORE", skillCfg, "AuraEffect", "BuffEffect") * skillModList:Sum("MORE", skillCfg, "AuraEffect", "BuffEffect")
srcList:ScaleAddList(activeSkill.auraModList, (1 + inc / 100) * more)
srcList:ScaleAddList(extraAuraModList, (1 + inc / 100) * more)
mergeBuff(srcList, buffs, activeSkill.activeGem.name)
condList["HaveAuraActive"] = true
end
end
if env.mode_effective then
if activeSkill.debuffModList then
activeSkill.debuffSkill = true
enemyDB:ScaleAddList(activeSkill.debuffModList, activeSkill.skillData.stackCount or 1)
local srcList = common.New("ModList")
srcList:ScaleAddList(activeSkill.debuffModList, activeSkill.skillData.stackCount or 1)
mergeBuff(srcList, debuffs, activeSkill.activeGem.name)
end
if activeSkill.curseModList then
activeSkill.debuffSkill = true
condList["EnemyCursed"] = true
modDB.multipliers["CurseOnEnemy"] = (modDB.multipliers["CurseOnEnemy"] or 0) + 1
if activeSkill.curseModList or (activeSkill.skillFlags.curse and activeSkill.buffModList) then
local curse = {
name = activeSkill.activeGem.name,
priority = activeSkill.skillTypes[SkillType.Aura] and 3 or 1,
}
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")
enemyDB:ScaleAddList(activeSkill.curseModList, (1 + inc / 100) * more)
if activeSkill.curseModList then
curse.modList = common.New("ModList")
curse.modList:ScaleAddList(activeSkill.curseModList, (1 + inc / 100) * more)
end
if activeSkill.buffModList then
-- Curse applies a buff; scale by curse effect, then buff effect
local temp = common.New("ModList")
temp:ScaleAddList(activeSkill.buffModList, (1 + inc / 100) * more)
curse.buffModList = common.New("ModList")
local buffInc = modDB:Sum("INC", skillCfg, "BuffEffect")
local buffMore = modDB:Sum("MORE", skillCfg, "BuffEffect")
curse.buffModList:ScaleAddList(temp, (1 + buffInc / 100) * buffMore)
end
t_insert(curses, curse)
end
end
@@ -1231,6 +1283,76 @@ local function performCalcs(env)
end
end
-- Check for extra curses
for _, value in ipairs(modDB:Sum("LIST", nil, "ExtraCurse")) do
local curse = {
name = value.name,
priority = 2,
modList = common.New("ModList")
}
local gemModList = common.New("ModList")
mergeGemMods(gemModList, {
level = value.level,
quality = 0,
data = data.gems[value.name],
})
local curseModList = { }
for _, mod in ipairs(gemModList) do
for _, tag in ipairs(mod.tagList) do
if tag.type == "GlobalEffect" and tag.effectType == "Curse" then
t_insert(curseModList, mod)
break
end
end
end
curse.modList:ScaleAddList(curseModList, (1 + enemyDB:Sum("INC", nil, "CurseEffect") / 100) * enemyDB:Sum("MORE", nil, "CurseEffect"))
t_insert(curses, curse)
end
-- Assign curses to slots
local curseSlots = { }
env.curseSlots = curseSlots
output.EnemyCurseLimit = modDB:Sum("BASE", nil, "EnemyCurseLimit")
for _, curse in ipairs(curses) do
local slot
for i = 1, output.EnemyCurseLimit do
if not curseSlots[i] then
slot = i
break
elseif curseSlots[i].name == curse.name then
if curseSlots[i].priority < curse.priority then
slot = i
else
slot = nil
end
break
elseif curseSlots[i].priority < curse.priority then
slot = i
end
end
if slot then
curseSlots[slot] = curse
end
end
-- Merge buff/debuff modifiers
for _, modList in pairs(buffs) do
modDB:AddList(modList)
end
for _, modList in pairs(debuffs) do
enemyDB:AddList(modList)
end
modDB.multipliers["CurseOnEnemy"] = #curseSlots
for _, slot in ipairs(curseSlots) do
condList["EnemyCursed"] = true
if slot.modList then
enemyDB:AddList(slot.modList)
end
if slot.buffModList then
modDB:AddList(slot.buffModList)
end
end
-- Process misc modifiers
for _, value in ipairs(modDB:Sum("LIST", nil, "Misc")) do
if value.type == "Condition" then
@@ -2538,7 +2660,7 @@ local function performCalcs(env)
skillFlags.bleed = false
skillFlags.poison = false
skillFlags.ignite = false
skillFlags.igniteCanStack = modDB:Sum("FLAG", nil, "IgniteCanStack")
skillFlags.igniteCanStack = modDB:Sum("FLAG", skillCfg, "IgniteCanStack")
skillFlags.shock = false
skillFlags.freeze = false
for _, pass in ipairs(passList) do
@@ -3263,8 +3385,8 @@ function calcs.buildOutput(build, mode)
end
end
end
for _, value in ipairs(env.modDB:Sum("LIST", nil, "ExtraCurse")) do
t_insert(curseList, value.name)
for _, slot in ipairs(env.curseSlots) do
t_insert(curseList, slot.name)
end
output.BuffList = table.concat(buffList, ", ")
output.CombatList = table.concat(combatList, ", ")

View File

@@ -620,6 +620,16 @@ function itemLib.buildItemModList(item)
return
end
local baseList = { }
if item.base.weapon then
item.weaponData = { }
elseif item.base.armour then
item.armourData = { }
elseif item.base.flask then
item.flaskData = { }
item.buffModList = { }
elseif item.type == "Jewel" then
item.jewelData = { }
end
item.baseModList = baseList
item.rangeLineList = { }
item.modSource = "Item:"..(item.id or -1)..":"..item.name
@@ -638,7 +648,11 @@ function itemLib.buildItemModList(item)
if type(mod.value) == "table" and mod.value.mod then
mod.value.mod.source = mod.source
end
t_insert(baseList, mod)
if modLine.buff then
t_insert(item.buffModList, mod)
else
t_insert(baseList, mod)
end
end
end
end
@@ -646,15 +660,6 @@ function itemLib.buildItemModList(item)
-- Hack to remove the energy shield
t_insert(baseList, { name = "Misc", type = "LIST", value = { type = "ArmourData", key = "EnergyShield" }, flags = 0, keywordFlags = 0, tagList = { } })
end
if item.base.weapon then
item.weaponData = { }
elseif item.base.armour then
item.armourData = { }
elseif item.base.flask then
item.flaskData = { }
elseif item.type == "Jewel" then
item.jewelData = { }
end
if item.base.weapon or item.type == "Ring" then
item.slotModList = { }
for i = 1, 2 do

View File

@@ -546,7 +546,11 @@ local specialModList = {
mod("FireDamage", "INC", num, { type = "Condition", var = "HaveFireGolem"}),
mod("ChaosDamage", "INC", num, { type = "Condition", var = "HaveChaosGolem"})
} end,
["100%% increased effect of buffs granted by your elemental golems"] = { flag("LiegeOfThePrimordial") },
["(%d+)%% increased effect of buffs granted by your elemental golems"] = function(num) return {
mod("BuffEffect", "INC", num, { type = "SkillType", skillType = SkillType.Golem }, { type = "SkillType", skillType = SkillType.FireSkill }),
mod("BuffEffect", "INC", num, { type = "SkillType", skillType = SkillType.Golem }, { type = "SkillType", skillType = SkillType.ColdSkill }),
mod("BuffEffect", "INC", num, { type = "SkillType", skillType = SkillType.Golem }, { type = "SkillType", skillType = SkillType.LightningSkill }),
} end,
["every 10 seconds, gain (%d+)%% increased elemental damage for 4 seconds"] = function(num) return { mod("ElementalDamage", "INC", num, { type = "Condition", var = "PendulumOfDestruction" }) } end,
["every 10 seconds, gain (%d+)%% increased area of effect of area skills for 4 seconds"] = function(num) return { mod("AreaOfEffect", "INC", num, { type = "Condition", var = "PendulumOfDestruction" }) } end,
["enemies you curse take (%d+)%% increased damage"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("DamageTaken", "INC", num) }, { type = "Condition", var = "EnemyCursed" }) } end,
@@ -1081,7 +1085,6 @@ local function parseMod(line, order)
end
modValue = { tonumber(formCap[1]), tonumber(formCap[2]) }
modName = { damageType.."Min", damageType.."Max" }
modFlag = modFlag or { flags = bor(ModFlag.Attack, ModFlag.Spell) }
end
-- Combine flags and tags

View File

@@ -113,6 +113,10 @@ function modLib.formatValue(value)
return "{"..ret.."}"
end
function modLib.formatMod(mod)
return string.format("%s = %s|%s|%s|%s|%s", modLib.formatValue(mod.value), mod.name, mod.type, modLib.formatFlags(mod.flags, ModFlag), modLib.formatFlags(mod.keywordFlags, KeywordFlag), modLib.formatTags(mod.tagList))
function modLib.formatModParams(mod)
return string.format("%s|%s|%s|%s|%s", mod.name, mod.type, modLib.formatFlags(mod.flags, ModFlag), modLib.formatFlags(mod.keywordFlags, KeywordFlag), modLib.formatTags(mod.tagList))
end
function modLib.formatMod(mod)
return modLib.formatValue(mod.value) .. " = " .. modLib.formatModParams(mod)
end

View File

@@ -47,6 +47,20 @@ 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.21 - 2017/03/20
With this update, the handling of buffs and debuffs has been improved:
* Having multiple copies of the same flask or buff/debuff skill active is now handled correctly
* When multiple copies are present, the highest value of each stat is used
* The enemy curse limit is now calculated and respected; when the limit is exceeded:
* Blasphemy curses take priority over other curses
* The Vulnerability aura from Witchfire Brew takes priority over non-Blasphemy curses
* Otherwise, curses are prioritised according to their ordering in the Skills tab
Other changes:
* Punishment is now supported (this was mostly made possible by the buff overhaul)
* Generosity is now supported
* Block Chance Reduction is now supported (although it has no effect)
* Several uniques have received minor corrections to the wording of stats
### 1.3.20 - 2017/03/17
* Added skill parts to Vaal Fireball that match those on Fireball
* Reverted the rounding change from the previous update, as the change in the game has been reverted also

View File

@@ -1,3 +1,16 @@
VERSION[1.3.21][2017/03/20]
With this update, the handling of buffs and debuffs has been improved:
* Having multiple copies of the same flask or buff/debuff skill active is now handled correctly
* When multiple copies are present, the highest value of each stat is used
* The enemy curse limit is now calculated and respected; when the limit is exceeded:
* Blasphemy curses take priority over other curses
* The Vulnerability aura from Witchfire Brew takes priority over non-Blasphemy curses
* Otherwise, curses are prioritised according to their ordering in the Skills tab
Other changes:
* Punishment is now supported (this was mostly made possible by the buff overhaul)
* Generosity is now supported
* Block Chance Reduction is now supported (although it has no effect)
* Several uniques have received minor corrections to the wording of stats
VERSION[1.3.20][2017/03/17]
* Added skill parts to Vaal Fireball that match those on Fireball
* Reverted the rounding change from the previous update, as the change in the game has been reverted also

View File

@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<PoBVersion>
<Version number="1.3.20"/>
<Version number="1.3.21"/>
<Source part="program" url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/"/>
<Source part="tree" url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/tree.zip"/>
<Source url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/runtime-win32.zip" part="runtime" platform="win32"/>
<File sha1="7912b22666567d5f0ff46378f5cb22e589e84efd" name="Launch.lua" part="program"/>
<File sha1="d8e42beeb38baabcc197d658e4c0af33419eeff3" name="UpdateCheck.lua" part="program"/>
<File sha1="4f17937f2b37784e169a3792b235f2a0a3961e61" name="UpdateApply.lua" part="program"/>
<File sha1="27e2fa488535f5a48a15e33a2f0247e1e579bb9f" name="changelog.txt" part="program"/>
<File sha1="0181a4e101cef562573966fba6b19849fbe4ebff" name="changelog.txt" part="program"/>
<File sha1="74fff9f369b6e2c98cfdf978c251c9828bcf39dc" name="Classes/BuildListControl.lua" part="program"/>
<File sha1="deffd663ba726d938fcbe2870aab8a4e982587fa" name="Classes/ButtonControl.lua" part="program"/>
<File sha1="ec81fc6c0ee4a4d228f88ec165a0bc7e994278bc" name="Classes/CalcBreakdownControl.lua" part="program"/>
@@ -44,14 +44,14 @@
<File sha1="4b7675c8b4fe71cade7dd3d70793df1ed8022d01" name="Classes/UndoHandler.lua" part="program"/>
<File sha1="8c68133681e44293ccaace709bc4c3b4f580f851" name="Modules/Build.lua" part="program"/>
<File sha1="8a07fe01c53b785ebb6256236e781fbaabd36c0e" name="Modules/BuildList.lua" part="program"/>
<File sha1="649feb516ed36370e56a37e9e78229c5e54f2b3a" name="Modules/Calcs.lua" part="program"/>
<File sha1="29f46be6ffa64380ee24f6986f643f9843204258" name="Modules/Calcs.lua" part="program"/>
<File sha1="1a49b23df0a47dba23a906c448c60a5c6db606d2" name="Modules/CalcSections.lua" part="program"/>
<File sha1="761af85f3e1c5601fdb790356a09aefe2f5a64e3" name="Modules/Common.lua" part="program"/>
<File sha1="b4cfb1847f09d22dfd6969cc9e55c64e6d72cac2" name="Modules/Data.lua" part="program"/>
<File sha1="475486feafac812e5f1a5313f57f37e6e79b4b9b" name="Modules/ItemTools.lua" part="program"/>
<File sha1="bbeff8fabf5ff65d8571104eb49f0a9694495c0a" name="Modules/ItemTools.lua" part="program"/>
<File sha1="cc69e5d4f5cbc8739340820314629245f317b555" name="Modules/Main.lua" part="program"/>
<File sha1="15618093d7c1a88ba3bc4e567b0aa0b5a9b27cf3" name="Modules/ModParser.lua" part="program"/>
<File sha1="5f93a9d8f58e0d5990a1f84e1ab1d53fbd35fb56" name="Modules/ModTools.lua" part="program"/>
<File sha1="34eb86c947cbc0fc072756ed0bbd5bd1a5a8b5f6" name="Modules/ModParser.lua" part="program"/>
<File sha1="7d8acc42bbdb948e4f565e1a4111c6b8c0f1f969" name="Modules/ModTools.lua" part="program"/>
<File sha1="e7ee7e5b6388facb7bf568517ecc401590757df7" name="Assets/ring.png" part="program"/>
<File sha1="9a320bfe629b1cf3f14fc77fbbf2508d0a5b2841" name="Assets/small_ring.png" part="program"/>
<File sha1="d06292de8b169e3adedc7fda69edae6ac466442e" name="Data/ModFlask.lua" part="program"/>
@@ -60,11 +60,11 @@
<File sha1="0d6e592ba125e721062cf1d388aa5eccd44703f1" name="Data/Rares.lua" part="program"/>
<File sha1="d4db572b0a4b1b2220c347267366792ac58b93cc" name="Data/Gems/act_dex.lua" part="program"/>
<File sha1="247f17c6627118c7b6f7b08622f4c57261177069" name="Data/Gems/act_int.lua" part="program"/>
<File sha1="3662b4317714feea4f4b3f661ddd8560c6f2f2f6" name="Data/Gems/act_str.lua" part="program"/>
<File sha1="3463375d5ec812437cef5b6325d3b616c06dbcad" name="Data/Gems/act_str.lua" part="program"/>
<File sha1="5bfb9d035b311f9658e6a31e49bd7fcc87d1d41a" name="Data/Gems/other.lua" part="program"/>
<File sha1="e7ce0e4a513f2e572d3bd6cb498755e39a119944" name="Data/Gems/sup_dex.lua" part="program"/>
<File sha1="4e82aafe55b1ef7a42e590f6fd6d30ca8430d15b" name="Data/Gems/sup_dex.lua" part="program"/>
<File sha1="9dea051759cc611f03c773264faac19ab8cfed92" name="Data/Gems/sup_int.lua" part="program"/>
<File sha1="77e41584bc1786da8b4d2ab9de74b6ac6569e65c" name="Data/Gems/sup_str.lua" part="program"/>
<File sha1="d3a3d28df6efe5baa96c89f1628c818c8e18061f" name="Data/Gems/sup_str.lua" part="program"/>
<File sha1="8163089cecf7253ec1f5d658141de81bc6e4046c" name="Data/Bases/amulet.lua" part="program"/>
<File sha1="9871414663d5da9fa564f959e42dcdc22c66f486" name="Data/Bases/axe.lua" part="program"/>
<File sha1="8504a4003c30cdfb94f354faa2789de7712cee1c" name="Data/Bases/belt.lua" part="program"/>
@@ -88,20 +88,20 @@
<File sha1="595e3816af08514a6d86b53f737bff913d953c69" name="Data/Uniques/axe.lua" part="program"/>
<File sha1="5b4826e6f9242b68a4fe3f008bdd1204cda58f85" name="Data/Uniques/belt.lua" part="program"/>
<File sha1="7ecea8e2420fdcab13e0338c2491eb802d7f8e74" name="Data/Uniques/body.lua" part="program"/>
<File sha1="a19268d1da5e12c938e7ccdfdbaa80a7c8cd6748" name="Data/Uniques/boots.lua" part="program"/>
<File sha1="a6c0cb438c115e924b420d813c09ed0958e8e52c" name="Data/Uniques/boots.lua" part="program"/>
<File sha1="588821ab138c0e7e579a1ad6225c7405ef2934ba" name="Data/Uniques/bow.lua" part="program"/>
<File sha1="fac4dbd518096b2137f22c8ab9d832230f4c8677" name="Data/Uniques/claw.lua" part="program"/>
<File sha1="b73b16de3df43c7bed47479372c82fbd390248ff" name="Data/Uniques/claw.lua" part="program"/>
<File sha1="e2c2fc4d04fcec13c416818629bffd542886e617" name="Data/Uniques/dagger.lua" part="program"/>
<File sha1="acfc587edffcb9d4810b2b2d30cd510176d8b780" name="Data/Uniques/flask.lua" part="program"/>
<File sha1="019b56f239dfa4e54ee6b94f93b9125fabc2b715" name="Data/Uniques/gloves.lua" part="program"/>
<File sha1="3179548d727b1613712b9e4d298158ddafe9c827" name="Data/Uniques/gloves.lua" part="program"/>
<File sha1="7e70825d889ef5dc61cb117ab1ebf7e7f814f54a" name="Data/Uniques/helmet.lua" part="program"/>
<File sha1="81ee65fed4e1c86fc9f096cf78872e18543e7213" name="Data/Uniques/jewel.lua" part="program"/>
<File sha1="998c53204c6bc4b5796c7598189f9a10522df507" name="Data/Uniques/mace.lua" part="program"/>
<File sha1="940ec4e40778144151a611400174ed79b813c204" name="Data/Uniques/quiver.lua" part="program"/>
<File sha1="da9ea690b10d8c27b7f95a84c63d0fe58413812d" name="Data/Uniques/ring.lua" part="program"/>
<File sha1="7c766211bc4935997aa6bdfc807de13ad31c4467" name="Data/Uniques/shield.lua" part="program"/>
<File sha1="3ec41f8199a0c1d3e9376fac864d51e45d10f1e4" name="Data/Uniques/ring.lua" part="program"/>
<File sha1="4297fc1368fbd62136ebe360d99741ce45f203f0" name="Data/Uniques/shield.lua" part="program"/>
<File sha1="633652f8861e52b7905957b819a63e52718b3eaa" name="Data/Uniques/staff.lua" part="program"/>
<File sha1="45b702d12b4f27ae48d54da59c5945715b40427b" name="Data/Uniques/sword.lua" part="program"/>
<File sha1="7872e848dcb7904709b919f70bfb9ecb1c73401b" name="Data/Uniques/sword.lua" part="program"/>
<File sha1="b4611a28551b3480d0886c624b81242c9cdae6f2" name="Data/Uniques/wand.lua" part="program"/>
<File platform="win32" sha1="7e5a3242c9a4296dc8377feb4c9d824f3f0a3cc1" name="Path of Building.exe" part="runtime"/>
<File platform="win32" sha1="7a973d3c0b5121e6aad0dcb9323be5b432fc63e7" name="lua51.dll" part="runtime"/>