Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
Openarl committed Aug 14, 2017
2 parents 7c43326 + 1e60aac commit 58ea211
Show file tree
Hide file tree
Showing 23 changed files with 149 additions and 67 deletions.
3 changes: 2 additions & 1 deletion Classes/ConfigTab.lua
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ local gameVersionDropList = {

local varList = {
{ section = "General", col = 1 },
{ var = "resistancePenalty", type = "list", label = "Resistance penalty:", ifVer = "3_0", list = {{val=0,label="None"},{val=-30,label="Act 5 (-30%)"},{val=nil,label="Act 10 (-60%)"}} },
{ var = "enemyLevel", type = "number", label = "Enemy Level:", tooltip = "This overrides the default enemy level used to estimate your hit and evade chances.\nThe default level is your character level, capped at 84, which is the same value\nused in-game to calculate the stats on the character sheet." },
{ var = "enemyPhysicalHit", type = "number", label = "Enemy Physical Hit Damage:", tooltip = "This overrides the default damage amount used to estimate your physical damage reduction from armour.\nThe default is 1.5 times the enemy's base damage, which is the same value\nused in-game to calculate the estimate shown on the character sheet." },
{ var = "conditionStationary", type = "check", label = "Are you always stationary?", ifCond = "Stationary", apply = function(val, modList, enemyModList)
Expand Down Expand Up @@ -507,7 +508,7 @@ local ConfigTabClass = common.NewClass("ConfigTab", "UndoHandler", "ControlHost"
end
t_insert(self.sectionList, lastSection)
t_insert(self.controls, lastSection)
else
elseif not varData.ifVer or varData.ifVer == build.targetVersion then
local control
if varData.type == "check" then
control = common.New("CheckBoxControl", {"TOPLEFT",lastSection,"TOPLEFT"}, 234, 0, 18, nil, function(state)
Expand Down
2 changes: 1 addition & 1 deletion Classes/PassiveTree.lua
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ local PassiveTreeClass = common.NewClass("PassiveTree", function(self, targetVer
data.rsq = size * size
end

local err, passives = PLoadModule("Data/"..targetVersion.."/Passives.lua")
--local err, passives = PLoadModule("Data/"..targetVersion.."/Passives.lua")

ConPrintf("Processing tree...")
self.keystoneMap = { }
Expand Down
2 changes: 1 addition & 1 deletion Classes/PassiveTreeView.lua
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,7 @@ function PassiveTreeViewClass:Draw(build, viewPort, inputEvents)
-- Draw tooltip
SetDrawLayer(nil, 100)
local size = m_floor(node.size * scale)
if self.tooltip:CheckForUpdate(node, launch.devModeAlt, build.outputRevision) then
if self.tooltip:CheckForUpdate(node, self.showStatDifferences, launch.devModeAlt, build.outputRevision) then
self:AddNodeTooltip(self.tooltip, node, build)
end
self.tooltip:Draw(m_floor(scrX - size), m_floor(scrY - size), size * 2, size * 2, viewPort)
Expand Down
2 changes: 1 addition & 1 deletion Classes/TextListControl.lua
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ function TextListClass:Draw(viewPort)
local lineY = -scrollBar.offset
for _, lineInfo in ipairs(self.list) do
if lineInfo[colIndex] then
DrawString(colInfo.x, lineY, colInfo.align, lineInfo.height, lineInfo.font or "VAR", lineInfo[colIndex])
DrawString(lineInfo.x or colInfo.x, lineY, lineInfo.align or colInfo.align, lineInfo.height, lineInfo.font or "VAR", lineInfo[colIndex])
end
lineY = lineY + lineInfo.height
end
Expand Down
2 changes: 1 addition & 1 deletion Data/2_6/ModCache.lua

Large diffs are not rendered by default.

34 changes: 34 additions & 0 deletions Data/3_0/EnchantmentHelmet.lua
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,16 @@ return {
"12% increased Blade Flurry Area of Effect",
},
},
["Charged Dash"] = {
["MERCILESS"] = {
"25% increased Charged Dash Damage",
"4% chance to Dodge Attacks if you have finished Channelling Charged Dash Recently",
},
["ENDGAME"] = {
"40% increased Charged Dash Damage",
"6% chance to Dodge Attacks if you have finished Channelling Charged Dash Recently",
},
},
["Clarity"] = {
["MERCILESS"] = {
"20% reduced Clarity Mana Reservation",
Expand Down Expand Up @@ -345,6 +355,18 @@ return {
"40% increased Cyclone Damage",
},
},
["Dark Pact"] = {
["MERCILESS"] = {
"25% increased Dark Pact Damage",
"8% increased Dark Pact Cast Speed",
"8% increased Dark Pact Area of Effect",
},
["ENDGAME"] = {
"40% increased Dark Pact Damage",
"12% increased Dark Pact Cast Speed",
"12% increased Dark Pact Area of Effect",
},
},
["Decoy Totem"] = {
["MERCILESS"] = {
"40% increased Decoy Totem Life",
Expand Down Expand Up @@ -1445,6 +1467,18 @@ return {
"12% increased Static Strike Area of Effect",
},
},
["Storm Burst"] = {
["MERCILESS"] = {
"25% increased Storm Burst Damage",
"8% increased Storm Burst Area of Effect",
"30% chance to Avoid interruption from Stuns while Casting Storm Burst",
},
["ENDGAME"] = {
"40% increased Storm Burst Damage",
"12% increased Storm Burst Area of Effect",
"45% chance to Avoid interruption from Stuns while Casting Storm Burst",
},
},
["Storm Call"] = {
["MERCILESS"] = {
"25% increased Storm Call Damage",
Expand Down
1 change: 0 additions & 1 deletion Data/3_0/Minions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,6 @@ minions["Clone"] = {
},
modList = {
mod("EnergyShield", "BASE", 10),
mod("SkillData", "LIST", { key = "attackRateCap", value = 1.84 }),
},
}
minions["SpiderMinion"] = {
Expand Down
2 changes: 1 addition & 1 deletion Data/3_0/ModCache.lua

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Data/Uniques/belt.lua
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ Requires Level 50
(67-75) Life Regenerated per second
(8-10) Mana Regenerated per second
{variant:1}−40% to all Elemental Resistances
{variant:3}−25% to all Elemental Resistances
{variant:3}−(15-25)% to all Elemental Resistances
{variant:1}−10% to all maximum Resistances
{variant:2}−5% to all maximum Resistances
−(50-40) Physical Damage taken from Attacks
Expand Down
34 changes: 18 additions & 16 deletions Data/Uniques/body.lua
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,7 @@ Variant: Arrow Dancing
Variant: Avatar of Fire
Variant: Blood Magic
Variant: Conduit
Variant: Crimson Dance
Variant: Eldritch Battery
Variant: Elemental Equilibrium
Variant: Elemental Overload
Expand Down Expand Up @@ -375,22 +376,23 @@ You can only Socket Corrupted Gems in this item
{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}Perfect Agony
{variant:17}Phase Acrobatics
{variant:18}Point Blank
{variant:19}Resolute Technique
{variant:20}Unwavering Stance
{variant:21}Vaal Pact
{variant:22}Zealot's Oath
{variant:7}Crimson Dance
{variant:8}Eldritch Battery
{variant:9}Elemental Equilibrium
{variant:10}Elemental Overload
{variant:11}Ghost Reaver
{variant:12}Iron Grip
{variant:13}Iron Reflexes
{variant:14}Mind Over Matter
{variant:15}Minion Instability
{variant:16}Pain Attunement
{variant:17}Perfect Agony
{variant:18}Phase Acrobatics
{variant:19}Point Blank
{variant:20}Resolute Technique
{variant:21}Unwavering Stance
{variant:22}Vaal Pact
{variant:23}Zealot's Oath
Corrupted
]],[[
Soul Mantle
Expand Down
2 changes: 1 addition & 1 deletion Data/Uniques/dagger.lua
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Variant: Current
Requires Level 44, 63 Dex, 90 Int
30% increased Global Critical Strike Chance
{variant:1}Adds (15-25) to (35-45) Physical Damage
{variant:1}Adds (35–40) to (55–60) Physical Damage
{variant:2}Adds (35–40) to (55–60) Physical Damage
(22-30)% increased Critical Strike Chance
+(30-40)% to Global Critical Strike Multiplier
100% increased Critical Strike Chance against Enemies on Full Life
Expand Down
2 changes: 1 addition & 1 deletion Data/Uniques/ring.lua
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ Requires Level 11
+(20-30)% to Cold Resistance
+(25-35)% to Fire Resistance
{variant:1,2}(25-35)% increased Burning Damage
{variant:3}(80–100)% increased Burning Damage
{variant:3}(60–80)% increased Burning Damage
{variant:1}100% of Cold Damage Converted to Fire Damage
{variant:2,3}40% of Cold Damage Converted to Fire Damage
10% increased Light Radius
Expand Down
11 changes: 8 additions & 3 deletions Modules/Build.lua
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,10 @@ function buildMode:Init(dbFileName, buildName, buildXML, targetVersion)
end

if not dbFileName and not targetVersion and not buildXML then
self.targetVersion = nil
self:OpenTargetVersionPopup(true)
return
targetVersion = liveTargetVersion
--self.targetVersion = nil
--self:OpenTargetVersionPopup(true)
--return
end

self.abortSave = true
Expand Down Expand Up @@ -1037,6 +1038,10 @@ function buildMode:RefreshStatList()
t_insert(statBoxList, { height = 10 })
t_insert(statBoxList, { height = 18, "^7Player:" })
end
if self.calcsTab.mainEnv.player.mainSkill.skillFlags.disable then
t_insert(statBoxList, { height = 16, "^7Skill disabled:" })
t_insert(statBoxList, { height = 14, align = "CENTER_X", x = 140, self.calcsTab.mainEnv.player.mainSkill.disableReason })
end
self:AddDisplayStatList(self.displayStats, self.calcsTab.mainEnv.player)
end

Expand Down
10 changes: 9 additions & 1 deletion Modules/CalcActiveSkill.lua
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ function calcs.buildActiveSkillModList(env, actor, activeSkill)
if skillTypes[SkillType.Shield] and not activeSkill.summonSkill and (not actor.itemList["Weapon 2"] or actor.itemList["Weapon 2"].type ~= "Shield") then
-- Skill requires a shield to be equipped
skillFlags.disable = true
activeSkill.disableReason = "This skill requires a Shield"
end

if skillFlags.attack then
Expand All @@ -240,21 +241,28 @@ function calcs.buildActiveSkillModList(env, actor, activeSkill)
elseif skillTypes[SkillType.DualWield] or not skillTypes[SkillType.CanDualWield] or skillTypes[SkillType.MainHandOnly] or skillFlags.forceMainHand then
-- Skill requires a compatible main hand weapon
skillFlags.disable = true
activeSkill.disableReason = "Main Hand weapon is not usable with this skill"
end
if skillTypes[SkillType.DualWield] or skillTypes[SkillType.CanDualWield] then
if not skillTypes[SkillType.MainHandOnly] and not skillFlags.forceMainHand then
local weapon2Flags = getWeaponFlags(env, actor.weaponData2, weaponTypes)
if weapon2Flags then
activeSkill.weapon2Flags = weapon2Flags
skillFlags.weapon2Attack = true
elseif skillTypes[SkillType.DualWield] or not skillFlags.weapon1Attack then
elseif skillTypes[SkillType.DualWield] then
-- Skill requires a compatible off hand weapon
skillFlags.disable = true
activeSkill.disableReason = activeSkill.disableReason or "Off Hand weapon is not usable with this skill"
elseif not skillFlags.weapon1Attack then
-- Neither weapon is compatible
skillFlags.disable = true
activeSkill.disableReason = "No usable weapon equipped"
end
end
elseif actor.weaponData2.type then
-- Skill cannot be used while dual wielding
skillFlags.disable = true
activeSkill.disableReason = "This skill cannot be used while Dual Wielding"
end
skillFlags.bothWeaponAttack = skillFlags.weapon1Attack and skillFlags.weapon2Attack
end
Expand Down
3 changes: 3 additions & 0 deletions Modules/CalcOffence-3_0.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1350,6 +1350,9 @@ function calcs.offence(env, actor)
if effectMod ~= 1 then
t_insert(breakdown.BleedDPS, s_format("x %.2f ^8(ailment effect modifier)", effectMod))
end
if output.RuthlessBlowEffect ~= 0 then
t_insert(breakdown.BleedDPS, s_format("x %.2f ^8(ruthless blow effect modifier)", output.RuthlessBlowEffect))
end
t_insert(breakdown.BleedDPS, s_format("= %.1f", baseVal))
breakdown.multiChain(breakdown.BleedDPS, {
label = "Bleed DPS:",
Expand Down
8 changes: 4 additions & 4 deletions Modules/CalcPerform.lua
Original file line number Diff line number Diff line change
Expand Up @@ -600,8 +600,8 @@ function calcs.perform(env)
if not activeSkill.skillData.buffNotPlayer then
activeSkill.buffSkill = true
local srcList = common.New("ModList")
local inc = modDB:Sum("INC", skillCfg, "BuffEffect", "BuffEffectOnSelf")
local more = modDB:Sum("MORE", skillCfg, "BuffEffect", "BuffEffectOnSelf")
local inc = modDB:Sum("INC", skillCfg, "BuffEffect", "BuffEffectOnSelf") + skillModList:Sum("INC", skillCfg, "BuffEffect")
local more = modDB:Sum("MORE", skillCfg, "BuffEffect", "BuffEffectOnSelf") * skillModList:Sum("MORE", skillCfg, "BuffEffect")
srcList:ScaleAddList(buff.modList, (1 + inc / 100) * more)
mergeBuff(srcList, buffs, buff.name)
if activeSkill.skillData.thisIsNotABuff then
Expand All @@ -611,8 +611,8 @@ function calcs.perform(env)
if env.minion and (activeSkill.skillData.buffMinions or activeSkill.skillData.buffAllies) then
activeSkill.minionBuffSkill = true
local srcList = common.New("ModList")
local inc = modDB:Sum("INC", skillCfg, "BuffEffect") + env.minion.modDB:Sum("INC", nil, "BuffEffectOnSelf")
local more = modDB:Sum("MORE", skillCfg, "BuffEffect") * env.minion.modDB:Sum("MORE", nil, "BuffEffectOnSelf")
local inc = modDB:Sum("INC", skillCfg, "BuffEffect") + env.minion.modDB:Sum("INC", nil, "BuffEffectOnSelf") + skillModList:Sum("INC", skillCfg, "BuffEffect")
local more = modDB:Sum("MORE", skillCfg, "BuffEffect") * env.minion.modDB:Sum("MORE", nil, "BuffEffectOnSelf") * skillModList:Sum("MORE", skillCfg, "BuffEffect")
srcList:ScaleAddList(buff.modList, (1 + inc / 100) * more)
mergeBuff(srcList, minionBuffs, buff.name)
end
Expand Down
12 changes: 6 additions & 6 deletions Modules/CalcSetup.lua
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,10 @@ function calcs.initEnv(build, mode, override)
modDB:NewMod("Accuracy", "BASE", 2, "Base", { type = "Multiplier", var = "Level", base = -2 })
modDB:NewMod("CritMultiplier", "BASE", 50, "Base")
modDB:NewMod("CritDegenMultiplier", "BASE", 50, "Base")
modDB:NewMod("FireResist", "BASE", -60, "Base")
modDB:NewMod("ColdResist", "BASE", -60, "Base")
modDB:NewMod("LightningResist", "BASE", -60, "Base")
modDB:NewMod("ChaosResist", "BASE", -60, "Base")
modDB:NewMod("FireResist", "BASE", env.configInput.resistancePenalty or -60, "Base")
modDB:NewMod("ColdResist", "BASE", env.configInput.resistancePenalty or -60, "Base")
modDB:NewMod("LightningResist", "BASE", env.configInput.resistancePenalty or -60, "Base")
modDB:NewMod("ChaosResist", "BASE", env.configInput.resistancePenalty or -60, "Base")
if build.targetVersion == "2_6" then
modDB:NewMod("CritChance", "INC", 50, "Base", { type = "Multiplier", var = "PowerCharge" })
else
Expand Down Expand Up @@ -501,7 +501,7 @@ function calcs.initEnv(build, mode, override)
local slot = socketGroup.slot and build.itemsTab.slots[socketGroup.slot]
socketGroup.slotEnabled = not slot or not slot.weaponSet or slot.weaponSet == (build.itemsTab.activeItemSet.useSecondWeaponSet and 2 or 1)
if index == env.mainSocketGroup or (socketGroup.enabled and socketGroup.slotEnabled) then
groupCfg.slotName = socketGroup.slot
groupCfg.slotName = socketGroup.slot and socketGroup.slot:gsub(" Swap","")
local propertyModList = env.modDB:Sum("LIST", groupCfg, "GemProperty")

-- Build list of supports for this socket group
Expand Down Expand Up @@ -588,7 +588,7 @@ function calcs.initEnv(build, mode, override)
end
local activeSkill = calcs.createActiveSkill(activeGem, supportList)
if not gem.fromItem then
activeSkill.slotName = socketGroup.slot
activeSkill.slotName = groupCfg.slotName
end
t_insert(socketGroupSkillList, activeSkill)
t_insert(env.activeSkillList, activeSkill)
Expand Down
2 changes: 1 addition & 1 deletion Modules/Data.lua
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ data.jewelRadius = {
}

data.labyrinths = {
{ name = "ENDGAME", label = "Endgame" },
{ name = "ENDGAME", label = "Eternal" },
{ name = "MERCILESS", label = "Merciless" },
{ name = "CRUEL", label = "Cruel" },
{ name = "NORMAL", label = "Normal" },
Expand Down
2 changes: 1 addition & 1 deletion Modules/ItemTools.lua
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ function itemLib.parseItemRaw(item)
range = tonumber(range),
})
elseif specName == "Implicits" then
item.implicitLines = tonumber(specVal)
item.implicitLines = tonumber(specVal) or 0
gameModeStage = "EXPLICIT"
elseif specName == "Unreleased" then
item.unreleased = (specVal == "true")
Expand Down
7 changes: 6 additions & 1 deletion Modules/ModParser-3_0.lua
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,10 @@ local formList = {
["^regenerate ([%d%.]+)%% (.+) per second"] = "REGENPERCENT",
["^regenerate ([%d%.]+)%% of (.+) per second"] = "REGENPERCENT",
["^regenerate ([%d%.]+)%% of your (.+) per second"] = "REGENPERCENT",
["(%d+) to (%d+) added (%a+) damage"] = "DMG",
["(%d+)%-(%d+) added (%a+) damage"] = "DMG",
["(%d+) to (%d+) additional (%a+) damage"] = "DMG",
["(%d+)%-(%d+) additional (%a+) damage"] = "DMG",
["adds (%d+) to (%d+) (%a+) damage"] = "DMG",
["adds (%d+)%-(%d+) (%a+) damage"] = "DMG",
["adds (%d+) to (%d+) (%a+) damage to attacks"] = "DMGATTACKS",
Expand Down Expand Up @@ -443,7 +446,7 @@ local preFlagList = {
["^attacks used by totems have "] = { keywordFlags = KeywordFlag.Totem },
["^spells cast by totems have "] = { keywordFlags = KeywordFlag.Totem },
["^attacks with this weapon "] = { tag = { type = "Condition", var = "XHandAttack" } },
["^attacks with this weapon have "] = { tag = { type = "Condition", var = "XHandAttack" } },
["^attacks with this weapon [hd][ae][va][el] "] = { tag = { type = "Condition", var = "XHandAttack" } },
["^attacks [hd][ae][va][el] "] = { flags = ModFlag.Attack },
["^attack skills [hd][ae][va][el] "] = { keywordFlags = KeywordFlag.Attack },
["^projectile attack skills [hd][ae][va][el] "] = { tagList = { { type = "SkillType", skillType = SkillType.Attack }, { type = "SkillType", skillType = SkillType.Projectile } } },
Expand Down Expand Up @@ -626,6 +629,7 @@ local modTagList = {
["against taunted enemies"] = { tag = { type = "EnemyCondition", var = "Taunted" }, keywordFlags = KeywordFlag.Hit },
["against bleeding enemies"] = { tag = { type = "EnemyCondition", var = "Bleeding" }, keywordFlags = KeywordFlag.Hit },
["against poisoned enemies"] = { tag = { type = "EnemyCondition", var = "Poisoned" }, keywordFlags = KeywordFlag.Hit },
["against enemies affected by (%d+) or more poisons"] = function(num) return { tag = { type = "MultiplierThreshold", var = "PoisonOnEnemy", threshold = num } } end,
["against hindered enemies"] = { tag = { type = "EnemyCondition", var = "Hindered" }, keywordFlags = KeywordFlag.Hit },
["against blinded enemies"] = { tag = { type = "EnemyCondition", var = "Blinded" }, keywordFlags = KeywordFlag.Hit },
["against burning enemies"] = { tag = { type = "EnemyCondition", var = "Burning" }, keywordFlags = KeywordFlag.Hit },
Expand Down Expand Up @@ -1064,6 +1068,7 @@ local keystoneList = {
"Avatar of Fire",
"Blood Magic",
"Conduit",
"Crimson Dance",
"Eldritch Battery",
"Elemental Equilibrium",
"Elemental Overload",
Expand Down
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,19 @@ If you'd like to help support the development of Path of Building, I have a [Pat
![ss3](https://cloud.githubusercontent.com/assets/19189971/18089780/f0ff234a-6f04-11e6-8c88-6193fe59a5c4.png)

## Changelog
### 1.4.59 - 2017/08/14
With this update, new builds will default to 3.0, and the version selection dialog will no longer display.
Builds can still be converted to 2.6 via the Configuration tab. All 2.6 builds will continue to work as normal,
however from this point some new features may only be available for 3.0 builds.
* The Helmet enchantments for the new skills are now available in the item enchanting system
* The resistance penalties from completing Act 5/10 can now be disabled using a new option in the Configuration tab
* Removed the attack rate cap for Blink/Mirror Arrow clones, which is no longer present in 3.0
* An explanatory message is now shown in the sidebar if the main skill is disabled (e.g if no compatible weapon is equipped)
* Fixed the Burning Damage roll on Pyre
* Fixed the flat Physical Damage rolls on Widowmaker
* Fixed the Elemental Resistances roll on Immortal Flesh
* Fixed issue preventing Socketed Gem modifiers from applying to gems socketed into the alternate weapon set

### 1.4.58 - 2017/08/09
* Added all of the new uniques
* Added support for the Void Gaze skill granted by Eber's Unification
Expand All @@ -73,7 +86,7 @@ For 2.6 builds:
* The program now behaves correctly when attempting to import from an account with a private profile

For 3.0 builds:
* Lioneye's Fall now correctly transforms modifiers that grant Ailemnt Damage while wielding melee weapons
* Lioneye's Fall now correctly transforms modifiers that grant Ailment Damage while wielding melee weapons

### 1.4.56 - 2017/08/04
* AoE Radius is now shown in the sidebar and stat comparison tooltips
Expand Down
Loading

0 comments on commit 58ea211

Please sign in to comment.