diff --git a/Classes/ConfigTab.lua b/Classes/ConfigTab.lua index 3380d583..9baf6c33 100644 --- a/Classes/ConfigTab.lua +++ b/Classes/ConfigTab.lua @@ -138,6 +138,9 @@ local varList = { modList:NewMod("CritChanceLucky", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "projectileDistance", type = "number", label = "Projectile travel distance:", ifFlag = "projectile" }, + { var = "conditionEnemyMoving", type = "check", label = "Is the enemy Moving?", ifFlag = "bleed", apply = function(val, modList, enemyModList) + modList:NewMod("Damage", "MORE", 500, "Movement", 0, KeywordFlag.Bleed) + end }, { var = "conditionEnemyFullLife", type = "check", label = "Is the enemy on Full Life?", ifCond = "EnemyFullLife", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyFullLife" }, "Config", { type = "Condition", var = "Effective" }) end }, @@ -189,12 +192,17 @@ local varList = { { var = "conditionEnemyCoveredInAsh", type = "check", label = "Is the enemy covered in Ash?", tooltip = "This adds the following modifiers:\n20% less enemy Movement Speed\n20% increased Fire Damage Taken by enemy", apply = function(val, modList, enemyModList) enemyModList:NewMod("FireDamageTaken", "INC", 20, "Ash") end }, + { var = "conditionEnemyRareOrUnique", type = "check", label = "is the enemy Rare or Unique?", ifCond = "EnemyRareOrUnique", tooltip = "Your enemy will automatically be considered to be Unique if one of the Boss options is selected.", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyRareOrUnique" }, "Config", { type = "Condition", var = "Effective" }) + end }, { var = "enemyIsBoss", type = "list", label = "Is the enemy a Boss?", tooltip = "Standard Boss adds the following modifiers:\n60% less Effect of your Curses\n+30% to enemy Elemental Resistances\n+15% to enemy Chaos Resistance\n\nShaper/Guardian adds the following modifiers:\n80% less Effect of your Curses\n+40% to enemy Elemental Resistances\n+25% to enemy Chaos Resistance\n50% less Duration of Bleed\n50% less Duration of Poison\n50% less Duration of Ignite", list = {{val="NONE",label="No"},{val=true,label="Standard Boss"},{val="SHAPER",label="Shaper/Guardian"}}, apply = function(val, modList, enemyModList) if val == true then + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyRareOrUnique" }, "Config", { type = "Condition", var = "Effective" }) enemyModList:NewMod("CurseEffect", "MORE", -60, "Boss") enemyModList:NewMod("ElementalResist", "BASE", 30, "Boss") enemyModList:NewMod("ChaosResist", "BASE", 15, "Boss") elseif val == "SHAPER" then + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyRareOrUnique" }, "Config", { type = "Condition", var = "Effective" }) enemyModList:NewMod("CurseEffect", "MORE", -80, "Boss") enemyModList:NewMod("ElementalResist", "BASE", 40, "Boss") enemyModList:NewMod("ChaosResist", "BASE", 25, "Boss") diff --git a/Classes/ImportTab.lua b/Classes/ImportTab.lua index 2bc9e27a..855c9001 100644 --- a/Classes/ImportTab.lua +++ b/Classes/ImportTab.lua @@ -345,6 +345,10 @@ function ImportTabClass:ImportItem(itemData, sockets) item.title = itemLib.sanitiseItemText(itemData.name) item.baseName = itemLib.sanitiseItemText(itemData.typeLine) item.name = item.title .. ", " .. item.baseName + if item.baseName == "Two-Toned Boots" then + -- Hack for Two-Toned Boots + item.baseName = "Two-Toned Boots (Armour/Energy Shield)" + end item.base = data.itemBases[item.baseName] if item.base then item.type = item.base.type @@ -354,13 +358,26 @@ function ImportTabClass:ImportItem(itemData, sockets) else item.name = itemLib.sanitiseItemText(itemData.typeLine) for baseName, baseData in pairs(data.itemBases) do - if item.name:find(baseName, 1, true) then + local s, e = item.name:find(baseName, 1, true) + if s then item.baseName = baseName - item.base = data.itemBases[item.baseName] + item.namePrefix = item.name:sub(1, s - 1) + item.nameSuffix = item.name:sub(e + 1) item.type = baseData.type break end end + if not item.baseName then + local s, e = item.name:find("Two-Toned Boots", 1, true) + if s then + -- Hack for Two-Toned Boots + item.baseName = "Two-Toned Boots (Armour/Energy Shield)" + item.namePrefix = item.name:sub(1, s - 1) + item.nameSuffix = item.name:sub(e + 1) + item.type = "Boots" + end + end + item.base = data.itemBases[item.baseName] end if not item.base or not item.rarity then return @@ -387,6 +404,18 @@ function ImportTabClass:ImportItem(itemData, sockets) end elseif property.name == "Limited to" then item.limit = tonumber(property.values[1][1]) + elseif property.name == "Evasion Rating" then + if item.baseName == "Two-Toned Boots (Armour/Energy Shield)" then + -- Another hack for Two-Toned Boots + item.baseName = "Two-Toned Boots (Armour/Evasion)" + item.base = data.itemBases[item.baseName] + end + elseif property.name == "Energy Shield" then + if item.baseName == "Two-Toned Boots (Armour/Evasion)" then + -- Yet another hack for Two-Toned Boots + item.baseName = "Two-Toned Boots (Evasion/Energy Shield)" + item.base = data.itemBases[item.baseName] + end end end end diff --git a/Classes/ItemsTab.lua b/Classes/ItemsTab.lua index a991d75a..1acd9b1b 100644 --- a/Classes/ItemsTab.lua +++ b/Classes/ItemsTab.lua @@ -36,7 +36,7 @@ local ItemsTabClass = common.NewClass("ItemsTab", "UndoHandler", "ControlHost", type = type .. ": " .. base.subType end self.baseLists[type] = self.baseLists[type] or { } - t_insert(self.baseLists[type], { label = name, name = name, base = base }) + t_insert(self.baseLists[type], { label = name:gsub(" %(.+%)",""), name = name, base = base }) end self.baseTypeList = { } for type, list in pairs(self.baseLists) do @@ -338,7 +338,7 @@ end function ItemsTabClass:CraftItem() local popup local function makeItem(base) - local item = { name = base.name, base = base.base, modLines = { }, quality = 0 } + local item = { name = base.name, base = base.base, baseName = base.name, modLines = { }, quality = 0 } local raritySel = popup.controls.rarity.sel if base.base.flask then if raritySel == 3 then @@ -350,7 +350,6 @@ function ItemsTabClass:CraftItem() end item.rarity = popup.controls.rarity.list[raritySel].val if raritySel >= 3 then - item.baseName = base.name item.title = popup.controls.title.buf:match("%S") and popup.controls.title.buf or "New Item" end if base.base.implicit then @@ -635,9 +634,9 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode) local rarityCode = data.colorCodes[item.rarity] if item.title then main:AddTooltipLine(20, rarityCode..item.title) - main:AddTooltipLine(20, rarityCode..item.baseName) + main:AddTooltipLine(20, rarityCode..item.baseName:gsub(" %(.+%)","")) else - main:AddTooltipLine(20, rarityCode..item.name) + main:AddTooltipLine(20, rarityCode..item.namePrefix..item.baseName:gsub(" %(.+%)","")..item.nameSuffix) end main:AddTooltipSeparator(10) diff --git a/Data/Bases/boots.lua b/Data/Bases/boots.lua index dc8c5a74..afc28cda 100644 --- a/Data/Bases/boots.lua +++ b/Data/Bases/boots.lua @@ -217,6 +217,13 @@ itemBases["Dragonscale Boots"] = { armour = { armourBase = 105, evasionBase = 105, }, req = { level = 65, str = 62, dex = 62, }, } +itemBases["Two-Toned Boots (Armour/Evasion)"] = { + type = "Boots", + subType = "Armour/Evasion", + implicit = "+(15-20)% to Fire and Cold Resistances", + armour = { armourBase = 109, evasionBase = 109 }, + req = { level = 72, str = 62, dex = 62 }, +} itemBases["Chain Boots"] = { @@ -267,10 +274,10 @@ itemBases["Crusader Boots"] = { armour = { armourBase = 105, energyShieldBase = 31, }, req = { level = 64, str = 62, int = 62, }, } -itemBases["Two-Toned Boots"] = { +itemBases["Two-Toned Boots (Armour/Energy Shield)"] = { type = "Boots", subType = "Armour/Energy Shield", - implicit = "", + implicit = "+(15-20)% to Fire and Lightning Resistances", armour = { armourBase = 109, energyShieldBase = 32 }, req = { level = 72, str = 62, int = 62 }, } @@ -330,3 +337,10 @@ itemBases["Murder Boots"] = { armour = { evasionBase = 161, energyShieldBase = 22, }, req = { level = 69, dex = 82, int = 42, }, } +itemBases["Two-Toned Boots (Evasion/Energy Shield)"] = { + type = "Boots", + subType = "Evasion/Energy Shield", + implicit = "+(15-20)% to Cold and Lightning Resistances", + armour = { evasionBase = 109, energyShieldBase = 32 }, + req = { level = 72, dex = 62, int = 62 }, +} \ No newline at end of file diff --git a/Modules/ItemTools.lua b/Modules/ItemTools.lua index 5bc0d456..ebd830b8 100644 --- a/Modules/ItemTools.lua +++ b/Modules/ItemTools.lua @@ -80,20 +80,41 @@ function itemLib.parseItemRaw(item) item.name = item.rawLines[l] l = l + 1 end + item.namePrefix = "" + item.nameSuffix = "" if item.rarity == "NORMAL" or item.rarity == "MAGIC" then for baseName, baseData in pairs(data.itemBases) do - if item.name:find(baseName, 1, true) then + local s, e = item.name:find(baseName, 1, true) + if s then item.baseName = baseName + item.namePrefix = item.name:sub(1, s - 1) + item.nameSuffix = item.name:sub(e + 1) item.type = baseData.type break end end - elseif item.rawLines[l] and not item.rawLines[l]:match("^%-") and data.itemBases[item.rawLines[l]] then - item.baseName = item.rawLines[l] - item.title = item.name - item.name = item.title .. ", " .. item.baseName - item.type = data.itemBases[item.baseName].type - l = l + 1 + if not item.baseName then + local s, e = item.name:find("Two-Toned Boots", 1, true) + if s then + -- Hack for Two-Toned Boots + item.baseName = "Two-Toned Boots (Armour/Energy Shield)" + item.namePrefix = item.name:sub(1, s - 1) + item.nameSuffix = item.name:sub(e + 1) + item.type = "Boots" + end + end + item.name = item.name:gsub(" %(.+%)","") + elseif item.rawLines[l] and not item.rawLines[l]:match("^%-") then + if item.rawLines[l] == "Two-Toned Boots" then + item.rawLines[l] = "Two-Toned Boots (Armour/Energy Shield)" + end + if data.itemBases[item.rawLines[l]] then + item.baseName = item.rawLines[l] + item.title = item.name + item.name = item.title .. ", " .. item.baseName:gsub(" %(.+%)","") + item.type = data.itemBases[item.baseName].type + l = l + 1 + end end item.base = data.itemBases[item.baseName] item.modLines = { } @@ -182,6 +203,18 @@ function itemLib.parseItemRaw(item) gameModeStage = "EXPLICIT" elseif specName == "Unreleased" then item.unreleased = (specVal == "true") + elseif specName == "Evasion Rating" then + if item.baseName == "Two-Toned Boots (Armour/Energy Shield)" then + -- Another hack for Two-Toned Boots + item.baseName = "Two-Toned Boots (Armour/Evasion)" + item.base = data.itemBases[item.baseName] + end + elseif specName == "Energy Shield" then + if item.baseName == "Two-Toned Boots (Armour/Evasion)" then + -- Yet another hack for Two-Toned Boots + item.baseName = "Two-Toned Boots (Evasion/Energy Shield)" + item.base = data.itemBases[item.baseName] + end end end if line == "Prefixes:" then @@ -284,7 +317,7 @@ function itemLib.createItemRaw(item) t_insert(rawLines, item.title) t_insert(rawLines, item.baseName) else - t_insert(rawLines, item.name) + t_insert(rawLines, (item.namePrefix or "")..item.baseName..(item.nameSuffix or "")) end if item.uniqueID then t_insert(rawLines, "Unique ID: "..item.uniqueID) @@ -365,7 +398,8 @@ function itemLib.craftItem(item) ranges[item.modLines[l].line] = item.modLines[l].range item.modLines[l] = nil end - local newName = item.baseName + item.namePrefix = "" + item.nameSuffix = "" for _, list in ipairs({item.prefixes,item.suffixes}) do for i = 1, item.affixLimit/2 do local name = list[i] @@ -375,9 +409,9 @@ function itemLib.craftItem(item) local mod = item.affixes[name] if mod then if mod.type == "Prefix" then - newName = name .. " " .. newName + item.namePrefix = name .. " " elseif mod.type == "Suffix" then - newName = newName .. " " .. name + item.nameSuffix = " " .. name end for _, line in ipairs(mod) do t_insert(item.modLines, { line = line, range = ranges[line] }) diff --git a/Modules/ModParser.lua b/Modules/ModParser.lua index 2d2eeff1..220f5794 100644 --- a/Modules/ModParser.lua +++ b/Modules/ModParser.lua @@ -127,6 +127,11 @@ local modNameList = { ["radius of auras"] = { "AreaRadius", keywordFlags = KeywordFlag.Aura }, ["radius of curses"] = { "AreaRadius", keywordFlags = KeywordFlag.Curse }, ["effect of buffs on you"] = "BuffEffect", + ["effect of the buff granted by your stone golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Stone Golem" } }, + ["effect of the buff granted by your lightning golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Lightning Golem" } }, + ["effect of the buff granted by your ice golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Ice Golem" } }, + ["effect of the buff granted by your flame golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Flame Golem" } }, + ["effect of the buff granted by your chaos golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Chaos Golem" } }, -- Charges ["maximum power charge"] = "PowerChargesMax", ["maximum power charges"] = "PowerChargesMax", @@ -441,6 +446,7 @@ local modTagList = { ["against enemies that are on full life"] = { tag = { type = "Condition", var = "EnemyFullLife" }, flags = ModFlag.Hit }, ["against enemies on low life"] = { tag = { type = "Condition", var = "EnemyLowLife" }, flags = ModFlag.Hit }, ["against enemies that are on low life"] = { tag = { type = "Condition", var = "EnemyLowLife" }, flags = ModFlag.Hit }, + ["against rare and unique enemies"] = { tag = { type = "Condition", var = "EnemyRareOrUnique" }, flags = ModFlag.Hit }, ["against bleeding enemies"] = { tag = { type = "Condition", var = "EnemyBleeding" }, flags = ModFlag.Hit }, ["against poisoned enemies"] = { tag = { type = "Condition", var = "EnemyPoisoned" }, flags = ModFlag.Hit }, ["against hindered enemies"] = { tag = { type = "Condition", var = "EnemyHindered" }, flags = ModFlag.Hit }, diff --git a/README.md b/README.md index 11eabef4..45bd8fbe 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,12 @@ 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.10 - 2017/02/23 + * Added support for the helmet enchants that grant increased Buff Effect from Golems + * Added an option to the Configuration tab for "Is the enemy Rare or Unique?" + * Skills that cause Bleeding now have an option in the Configuration tab for "Is the enemy Moving?" + * Two-Toned Boots should now be handled correctly; all 3 variants should import correctly, and are available to craft + ### 1.3.9 - 2017/02/23 * Projectile skills now have an option in the Configuration tab for "Projectile travel distance" * Point Blank, and the scaling Pierce chance from Powerful Precision, are now supported diff --git a/changelog.txt b/changelog.txt index 9514032d..fd4b6083 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +VERSION[1.3.10][2017/02/23] + * Added support for the helmet enchants that grant increased Buff Effect from Golems + * Added an option to the Configuration tab for "Is the enemy Rare or Unique?" + * Skills that cause Bleeding now have an option in the Configuration tab for "Is the enemy Moving?" + * Two-Toned Boots should now be handled correctly; all 3 variants should import correctly, and are available to craft VERSION[1.3.9][2017/02/23] * Projectile skills now have an option in the Configuration tab for "Projectile travel distance" * Point Blank, and the scaling Pierce chance from Powerful Precision, are now supported diff --git a/manifest.xml b/manifest.xml index c7cd0161..e79c6d5a 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,30 +1,30 @@ - + - + - + - + - + @@ -48,9 +48,9 @@ - + - + @@ -69,7 +69,7 @@ - +