diff --git a/Classes/ConfigTab.lua b/Classes/ConfigTab.lua index 3932b280..4f02f3fb 100644 --- a/Classes/ConfigTab.lua +++ b/Classes/ConfigTab.lua @@ -79,6 +79,9 @@ local varList = { { var = "conditionEnemyLowLife", type = "check", label = "Is the enemy on Low Life?", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyLowLife" }, "Config", { type = "Condition", var = "Effective" }) end }, + { var = "conditionAtCloseRange", type = "check", label = "Is the enemy at Close Range?", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "AtCloseRange" }, "Config", { type = "Condition", var = "Effective" }) + end }, { var = "conditionEnemyCursed", type = "check", label = "Is the enemy Cursed?", tooltip = "Your enemy will automatically be considered to be Cursed if you have at least one curse enabled,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyCursed" }, "Config", { type = "Condition", var = "Effective" }) end }, diff --git a/Classes/DropDownControl.lua b/Classes/DropDownControl.lua index 0eb33f54..e6f885de 100644 --- a/Classes/DropDownControl.lua +++ b/Classes/DropDownControl.lua @@ -51,10 +51,15 @@ function DropDownClass:IsMouseOver() local width, height = self:GetSize() local cursorX, cursorY = GetCursorPos() local dropExtra = self.dropped and (height - 4) * #self.list + 2 or 0 - local mOver = cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + dropExtra + local mOver + if self.dropUp then + mOver = cursorX >= x and cursorY >= y - dropExtra and cursorX < x + width and cursorY < y + height + else + mOver = cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + dropExtra + end local mOverComp if mOver then - if cursorY < y + height then + if cursorY >= y and cursorY < y + height then mOverComp = "BODY" else mOverComp = "DROP" @@ -69,6 +74,8 @@ function DropDownClass:Draw(viewPort) local enabled = self:IsEnabled() local mOver, mOverComp = self:IsMouseOver() local dropExtra = (height - 4) * #self.list + 4 + self.dropUp = y + height + dropExtra > viewPort.height + local dropY = self.dropUp and y - dropExtra or y + height if not enabled then SetDrawColor(0.33, 0.33, 0.33) elseif mOver or self.dropped then @@ -79,7 +86,7 @@ function DropDownClass:Draw(viewPort) DrawImage(nil, x, y, width, height) if self.dropped then SetDrawLayer(nil, 5) - DrawImage(nil, x, y + height, width, dropExtra) + DrawImage(nil, x, dropY, width, dropExtra) SetDrawLayer(nil, 0) end if not enabled then @@ -103,7 +110,7 @@ function DropDownClass:Draw(viewPort) if self.dropped then SetDrawLayer(nil, 5) SetDrawColor(0, 0, 0) - DrawImage(nil, x + 1, y + height + 1, width - 2, dropExtra - 2) + DrawImage(nil, x + 1, dropY + 1, width - 2, dropExtra - 2) SetDrawLayer(nil, 0) end if enabled then @@ -111,7 +118,7 @@ function DropDownClass:Draw(viewPort) if (mOver or self.dropped) and self.tooltip then SetDrawLayer(nil, 10) main:AddTooltipLine(14, self.tooltip) - main:DrawTooltip(x, y, width, height + (self.dropped and dropExtra or 0), viewPort) + main:DrawTooltip(x, y - (self.dropped and self.dropUp and dropExtra or 0), width, height + (self.dropped and dropExtra or 0), viewPort) SetDrawLayer(nil, 0) end else @@ -127,11 +134,11 @@ function DropDownClass:Draw(viewPort) if self.dropped then SetDrawLayer(nil, 5) local cursorX, cursorY = GetCursorPos() - self.hoverSel = mOver and math.floor((cursorY - y - height) / (height - 4)) + 1 + self.hoverSel = mOver and math.floor((cursorY - dropY) / (height - 4)) + 1 if self.hoverSel and self.hoverSel < 1 then self.hoverSel = nil end - SetViewport(x + 2, y + height + 2, width - 4, #self.list * (height - 4)) + SetViewport(x + 2, dropY + 2, width - 4, #self.list * (height - 4)) for index, listVal in ipairs(self.list) do local y = (index - 1) * (height - 4) if index == self.hoverSel then @@ -180,7 +187,9 @@ function DropDownClass:OnKeyUp(key) local x, y = self:GetPos() local width, height = self:GetSize() local cursorX, cursorY = GetCursorPos() - self:SetSel(math.floor((cursorY - y - height) / (height - 4)) + 1) + local dropExtra = (height - 4) * #self.list + 4 + local dropY = self.dropUp and y - dropExtra or y + height + self:SetSel(math.floor((cursorY - dropY) / (height - 4)) + 1) self.dropped = false end elseif key == "WHEELDOWN" or key == "DOWN" then diff --git a/Classes/ItemSlotControl.lua b/Classes/ItemSlotControl.lua index 67af1ff6..6e790655 100644 --- a/Classes/ItemSlotControl.lua +++ b/Classes/ItemSlotControl.lua @@ -58,7 +58,7 @@ function ItemSlotClass:Draw(viewPort) local x, y = self:GetPos() local width, height = self:GetSize() DrawString(x - 2, y + 2, "RIGHT_X", height - 4, "VAR", "^7"..self.label..":") - self.DropDownControl:Draw() + self.DropDownControl:Draw(viewPort) local highlight = false for _, control in pairs({self.itemsTab.controls.itemList, self.itemsTab.controls.uniqueDB, self.itemsTab.controls.rareDB}) do if control:IsShown() and control.selDragging and control.selDragActive and self.itemsTab:IsItemValidForSlot(control.selItem, self.slotName) then diff --git a/Classes/PassiveSpec.lua b/Classes/PassiveSpec.lua index d26ee84c..cb98c9b1 100644 --- a/Classes/PassiveSpec.lua +++ b/Classes/PassiveSpec.lua @@ -40,6 +40,7 @@ local PassiveSpecClass = common.NewClass("PassiveSpec", "UndoHandler", function( end) function PassiveSpecClass:Load(xml, dbFileName) + self.title = xml.attrib.title for _, node in pairs(xml) do if type(node) == "table" then if node.elem == "URL" then @@ -55,6 +56,9 @@ function PassiveSpecClass:Load(xml, dbFileName) end function PassiveSpecClass:Save(xml) + xml.attrib = { + title = self.title, + } t_insert(xml, { elem = "URL", [1] = self:EncodeURL("https://www.pathofexile.com/passive-skill-tree/") diff --git a/Classes/SkillsTab.lua b/Classes/SkillsTab.lua index 17c7cc7b..a1203147 100644 --- a/Classes/SkillsTab.lua +++ b/Classes/SkillsTab.lua @@ -100,7 +100,7 @@ function SkillsTabClass:Load(xml, fileName) gem.skillPart = tonumber(child.attrib.skillPart) t_insert(socketGroup.gemList, gem) end - if node.attrib.skillPart then + if node.attrib.skillPart and socketGroup.gemList[1] then socketGroup.gemList[1].skillPart = tonumber(node.attrib.skillPart) end self:ProcessSocketGroup(socketGroup) diff --git a/Classes/TreeTab.lua b/Classes/TreeTab.lua index 6f767621..695a640c 100644 --- a/Classes/TreeTab.lua +++ b/Classes/TreeTab.lua @@ -6,6 +6,8 @@ local launch, main = ... local ipairs = ipairs +local t_insert = table.insert +local m_min = math.min local TreeTabClass = common.NewClass("TreeTab", "ControlHost", function(self, build) self.ControlHost() @@ -14,86 +16,33 @@ local TreeTabClass = common.NewClass("TreeTab", "ControlHost", function(self, bu self.viewer = common.New("PassiveTreeView") + self.specList = { } + self.specList[1] = common.New("PassiveSpec", build) + self:SetActiveSpec(1) + self.anchorControls = common.New("Control", nil, 0, 0, 0, 20) + --[[self.controls.specSelect = common.New("DropDownControl", {"LEFT",self.anchorControls,"RIGHT"}, 0, 0, 150, 20, nil, function(sel) + if self.specList[sel] then + self:SetActiveSpec(sel) + else + self:OpenSpecManagePopup() + end + end)]] + --self.controls.reset = common.New("ButtonControl", {"LEFT",self.controls.specSelect,"RIGHT"}, 8, 0, 60, 20, "Reset", function() self.controls.reset = common.New("ButtonControl", {"LEFT",self.anchorControls,"RIGHT"}, 0, 0, 60, 20, "Reset", function() main:OpenConfirmPopup("Reset Tree", "Are you sure you want to reset your passive tree?", "Reset", function() self.build.spec:ResetNodes() self.build.spec:AddUndoState() self.build.buildFlag = true - end) + end) end) self.controls.import = common.New("ButtonControl", {"LEFT",self.controls.reset,"RIGHT"}, 8, 0, 90, 20, "Import Tree", function() - local treeLink = "" - local showMsg - local popup = main:OpenPopup(380, 110, "Import Tree", { - common.New("LabelControl", nil, 0, 20, 0, 16, "Enter passive tree link:"), - edit = common.New("EditControl", nil, 0, 40, 350, 18, "", nil, nil, nil, function(buf) - treeLink = buf - showMsg = nil - end), - common.New("LabelControl", nil, 0, 58, 0, 16, function() return showMsg or "" end), - import = common.New("ButtonControl", nil, -45, 80, 80, 20, "Import", function() - if #treeLink > 0 then - if treeLink:match("poeurl%.com/") then - local curl = require("lcurl") - local easy = curl.easy() - easy:setopt_url(treeLink) - easy:setopt_writefunction(function(data) - return true - end) - easy:perform() - local redirect = easy:getinfo(curl.INFO_REDIRECT_URL) - easy:close() - if not redirect or redirect == treeLink then - showMsg = "^1Failed to resolve PoEURL link" - return - end - treeLink = redirect - end - local errMsg = self.build.spec:DecodeURL(treeLink) - if errMsg then - showMsg = "^1"..errMsg - else - self.build.spec:AddUndoState() - self.build.buildFlag = true - main:ClosePopup() - end - end - end), - common.New("ButtonControl", nil, 45, 80, 80, 20, "Cancel", function() - main:ClosePopup() - end), - }, "import", "edit") + self:OpenImportPopup() end) self.controls.export = common.New("ButtonControl", {"LEFT",self.controls.import,"RIGHT"}, 8, 0, 90, 20, "Export Tree", function() - local treeLink = self.build.spec:EncodeURL("https://www.pathofexile.com/passive-skill-tree/") - local popup - popup = main:OpenPopup(380, 100, "Export Tree", { - common.New("LabelControl", nil, 0, 20, 0, 16, "Passive tree link:"), - edit = common.New("EditControl", nil, 0, 40, 350, 18, treeLink, nil, "%Z"), - shrink = common.New("ButtonControl", nil, -90, 70, 140, 20, "Shrink with PoEURL", function() - popup.controls.shrink.enabled = false - popup.controls.shrink.label = "Shrinking..." - launch:DownloadPage("http://poeurl.com/shrink.php?url="..treeLink, function(page, errMsg) - popup.controls.shrink.label = "Done" - if errMsg or not page:match("%S") then - main:OpenMessagePopup("PoEURL Shortener", "Failed to get PoEURL link. Try again later.") - else - treeLink = "http://poeurl.com/"..page - popup.controls.edit:SetText(treeLink) - popup:SelectControl(popup.controls.edit) - end - end) - end), - common.New("ButtonControl", nil, 30, 70, 80, 20, "Copy", function() - Copy(treeLink) - end), - done = common.New("ButtonControl", nil, 120, 70, 80, 20, "Done", function() - main:ClosePopup() - end), - }, "done", "edit") + self:OpenExportPopup() end) - self.controls.treeSearch = common.New("EditControl", {"LEFT",self.controls.export,"RIGHT"}, 8, 0, 400, 20, "", "Search", "%c%(%)", 100, function(buf) + self.controls.treeSearch = common.New("EditControl", {"LEFT",self.controls.export,"RIGHT"}, 8, 0, 300, 20, "", "Search", "%c%(%)", 100, function(buf) self.viewer.searchStr = buf end) self.controls.treeHeatMap = common.New("CheckBoxControl", {"LEFT",self.controls.treeSearch,"RIGHT"}, 130, 0, 20, "Show node power:", function(state) @@ -124,6 +73,12 @@ function TreeTabClass:Draw(viewPort, inputEvents) local treeViewPort = { x = viewPort.x, y = viewPort.y, width = viewPort.width, height = viewPort.height - 32 } self.viewer:Draw(self.build, treeViewPort, inputEvents) + --[[self.controls.specSelect.sel = self.activeSpec + wipeTable(self.controls.specSelect.list) + for id, spec in ipairs(self.specList) do + t_insert(self.controls.specSelect.list, spec.title or "Default") + end + t_insert(self.controls.specSelect.list, "Manage trees...")]] if not self.controls.treeSearch.hasFocus then self.controls.treeSearch:SetText(self.viewer.searchStr) end @@ -137,4 +92,126 @@ function TreeTabClass:Draw(viewPort, inputEvents) DrawImage(nil, viewPort.x, viewPort.y + viewPort.height - 32, viewPort.width, 4) self:DrawControls(viewPort) +end + +function TreeTabClass:Load(xml, dbFileName) + self.specList = { } + if xml.elem == "Spec" then + -- Import single spec from old build + self.specList[1] = common.New("PassiveSpec", self.build) + self.specList[1]:Load(xml, dbFileName) + self.activeSpec = 1 + self.build.spec = self.specList[1] + return + end + for _, node in pairs(xml) do + if type(node) == "table" then + if node.elem == "Spec" then + local newSpec = common.New("PassiveSpec", self.build) + newSpec:Load(node, dbFileName) + t_insert(self.specList, newSpec) + end + end + end + if not self.specList[1] then + self.specList[1] = common.New("PassiveSpec", self.build) + end + self:SetActiveSpec(tonumber(xml.attrib.activeSpec) or 1) +end + +function TreeTabClass:Save(xml) + xml.attrib = { + activeSpec = tostring(self.activeSpec) + } + for _, spec in ipairs(self.specList) do + local child = { + elem = "Spec" + } + spec:Save(child) + t_insert(xml, child) + end +end + +function TreeTabClass:SetActiveSpec(specId) + self.activeSpec = m_min(specId, #self.specList) + self.build.spec = self.specList[self.activeSpec] + self.build.buildFlag = true +end + +function TreeTabClass:OpenSpecManagePopup() + main:OpenPopup(500, 400, "Manage Passive Trees", { + }) +end + +function TreeTabClass:OpenImportPopup() + local treeLink = "" + local showMsg + main:OpenPopup(380, 110, "Import Tree", { + common.New("LabelControl", nil, 0, 20, 0, 16, "Enter passive tree link:"), + edit = common.New("EditControl", nil, 0, 40, 350, 18, "", nil, nil, nil, function(buf) + treeLink = buf + showMsg = nil + end), + common.New("LabelControl", nil, 0, 58, 0, 16, function() return showMsg or "" end), + import = common.New("ButtonControl", nil, -45, 80, 80, 20, "Import", function() + if #treeLink > 0 then + if treeLink:match("poeurl%.com/") then + local curl = require("lcurl") + local easy = curl.easy() + easy:setopt_url(treeLink) + easy:setopt_writefunction(function(data) + return true + end) + easy:perform() + local redirect = easy:getinfo(curl.INFO_REDIRECT_URL) + easy:close() + if not redirect or redirect == treeLink then + showMsg = "^1Failed to resolve PoEURL link" + return + end + treeLink = redirect + end + local errMsg = self.build.spec:DecodeURL(treeLink) + if errMsg then + showMsg = "^1"..errMsg + else + self.build.spec:AddUndoState() + self.build.buildFlag = true + main:ClosePopup() + end + end + end), + common.New("ButtonControl", nil, 45, 80, 80, 20, "Cancel", function() + main:ClosePopup() + end), + }, "import", "edit") +end + +function TreeTabClass:OpenExportPopup() + local treeLink = self.build.spec:EncodeURL("https://www.pathofexile.com/passive-skill-tree/") + local popup + popup = main:OpenPopup(380, 100, "Export Tree", { + common.New("LabelControl", nil, 0, 20, 0, 16, "Passive tree link:"), + edit = common.New("EditControl", nil, 0, 40, 350, 18, treeLink, nil, "%Z"), + shrink = common.New("ButtonControl", nil, -90, 70, 140, 20, "Shrink with PoEURL", function() + popup.controls.shrink.enabled = false + popup.controls.shrink.label = "Shrinking..." + launch:DownloadPage("http://poeurl.com/shrink.php?url="..treeLink, function(page, errMsg) + popup.controls.shrink.label = "Done" + if errMsg or not page:match("%S") then + main:OpenMessagePopup("PoEURL Shortener", "Failed to get PoEURL link. Try again later.") + else + treeLink = "http://poeurl.com/"..page + popup.controls.edit:SetText(treeLink) + popup:SelectControl(popup.controls.edit) + end + end) + end), + common.New("ButtonControl", nil, 30, 70, 80, 20, "Copy", function() + Copy(treeLink) + end), + done = common.New("ButtonControl", nil, 120, 70, 80, 20, "Done", function() + main:ClosePopup() + end), + }, "done", "edit") end \ No newline at end of file diff --git a/Data/Gems/act_dex.lua b/Data/Gems/act_dex.lua index ef1c868a..1f13d967 100644 --- a/Data/Gems/act_dex.lua +++ b/Data/Gems/act_dex.lua @@ -2544,13 +2544,13 @@ gems["Projectile Weakness"] = { skill("debuff", true), }, qualityMods = { - mod("ProjectileDamageTaken", "BASE", 0.5, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"projectile_damage_taken_+%" = 0.5 + mod("ProjectileDamageTaken", "INC", 0.5, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"projectile_damage_taken_+%" = 0.5 }, levelMods = { [1] = skill("manaCost", nil), [2] = skill("duration", nil), --"base_skill_effect_duration" [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" - [4] = mod("ProjectileDamageTaken", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"projectile_damage_taken_+%" + [4] = mod("ProjectileDamageTaken", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"projectile_damage_taken_+%" }, levels = { [1] = { 24, 9, 0, 25, }, diff --git a/Data/New.lua b/Data/New.lua index c47997b6..c913449e 100644 --- a/Data/New.lua +++ b/Data/New.lua @@ -190,5 +190,16 @@ Adds 15 to 25 Cold Damage to Spells per Power Charge Lose all Power Charges on reaching Maximum Power Charges Gain a Frenzy Charge on reaching Maximum Power Charges 11% increased Cold Damage per Frenzy Charge +]],[[ +The Halcyon +Jade Amulet +Unreleased: true +League: Breach ++(20-30) to Dexterity +18% increased Cold Damage ++38% to Cold Resistance +30% increased Freeze Duration on Enemies +10% chance to Freeze +60% increased Damage if you've Frozen an Enemy Recently ]], } \ No newline at end of file diff --git a/Modules/Build.lua b/Modules/Build.lua index eb28cab1..e96fad31 100644 --- a/Modules/Build.lua +++ b/Modules/Build.lua @@ -22,7 +22,6 @@ function buildMode:Init(dbFileName, buildName) self.importTab = common.New("ImportTab", self) self.notesTab = common.New("NotesTab", self) self.configTab = common.New("ConfigTab", self) - self.spec = common.New("PassiveSpec", self) self.treeTab = common.New("TreeTab", self) self.skillsTab = common.New("SkillsTab", self) self.itemsTab = common.New("ItemsTab", self) @@ -296,12 +295,15 @@ function buildMode:Init(dbFileName, buildName) ["Build"] = self, ["Config"] = self.configTab, ["Notes"] = self.notesTab, - ["Spec"] = self.spec, + ["Tree"] = self.treeTab, ["TreeView"] = self.treeTab.viewer, ["Items"] = self.itemsTab, ["Skills"] = self.skillsTab, ["Calcs"] = self.calcsTab, } + self.legacyLoaders = { -- Special loaders for legacy sections + ["Spec"] = self.treeTab, + } ConPrintf("Loading '%s'...", dbFileName) if self:LoadDBFile() then @@ -317,6 +319,7 @@ function buildMode:Init(dbFileName, buildName) -- Build calculation output tables self.calcsTab:BuildOutput() self:RefreshStatList() + self.buildFlag = false --[[ for _, item in pairs(main.uniqueDB.list) do @@ -386,6 +389,10 @@ function buildMode:Save(xml) end function buildMode:OnFrame(inputEvents) + if self.abortSave and not launch.devMode then + main:SetMode("LIST", self.buildName) + end + for id, event in ipairs(inputEvents) do if event.type == "KeyDown" then if IsKeyDown("CTRL") then @@ -623,7 +630,7 @@ function buildMode:LoadDB(xmlText, fileName) for _, node in ipairs(dbXML[1]) do if type(node) == "table" then -- Check if there is a saver that can load this section - local saver = self.savers[node.elem] + local saver = self.savers[node.elem] or self.legacyLoaders[node.elem] if saver then if saver:Load(node, self.dbFileName) then return true diff --git a/Modules/Calcs.lua b/Modules/Calcs.lua index 6ae1df35..c8b97c93 100644 --- a/Modules/Calcs.lua +++ b/Modules/Calcs.lua @@ -2492,6 +2492,9 @@ function calcs.buildOutput(build, mode) if env.modDB.conditions.Onslaught then t_insert(combatList, "Onslaught") end + if env.modDB.conditions.UnholyMight then + t_insert(combatList, "Unholy Might") + end for _, activeSkill in ipairs(env.activeSkillList) do if activeSkill.buffModList or activeSkill.auraModList then if activeSkill.skillFlags.multiPart then diff --git a/Modules/ModParser.lua b/Modules/ModParser.lua index c90a7978..4fbaabc6 100644 --- a/Modules/ModParser.lua +++ b/Modules/ModParser.lua @@ -186,6 +186,7 @@ local modNameList = { ["physical weapon damage"] = { "PhysicalDamage", flags = ModFlag.Weapon }, ["physical melee damage"] = { "PhysicalDamage", flags = ModFlag.Melee }, ["melee physical damage"] = { "PhysicalDamage", flags = ModFlag.Melee }, + ["bow damage"] = { "Damage", flags = ModFlag.Bow }, ["wand damage"] = { "Damage", flags = ModFlag.Wand }, ["wand physical damage"] = { "PhysicalDamage", flags = ModFlag.Wand }, ["claw physical damage"] = { "PhysicalDamage", flags = ModFlag.Claw }, @@ -376,6 +377,7 @@ local modTagList = { ["if you've crit in the past 8 seconds"] = { tag = { type = "Condition", var = "CritInPast8Sec" } }, ["if energy shield recharge has started recently"] = { tag = { type = "Condition", var = "EnergyShieldRechargeRecently" } }, -- Enemy status conditions + ["at close range"] = { tag = { type = "Condition", var = "AtCloseRange" }, flags = ModFlag.Hit }, ["against enemies on full life"] = { tag = { type = "Condition", var = "EnemyFullLife" }, flags = ModFlag.Hit }, ["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 }, diff --git a/README.md b/README.md index 6799c29d..8547d4cd 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,13 @@ 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.19 - 2016/11/30 + * Updated the passive tree to 2.5.0 + * Added 'The Halcyon' + * Added an "enemy at Close Range" condition for Chin Sol + * Corrected the projectile damage taken stat on Projectile Weakness + * Fixed error that could result from loading certain builds saved prior to version 1.0.27 + ### 1.2.18 - 2016/11/29 * Added 3 new Jewel templates * Added 'Tulfall' diff --git a/changelog.txt b/changelog.txt index 5a89e85b..72676917 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,9 @@ +VERSION[1.2.19][2016/11/30] + * Updated the passive tree to 2.5.0 + * Added 'The Halcyon' + * Added an "enemy at Close Range" condition for Chin Sol + * Corrected the projectile damage taken stat on Projectile Weakness + * Fixed error that could result from loading certain builds saved prior to version 1.0.27 VERSION[1.2.18][2016/11/29] * Added 3 new Jewel templates * Added 'Tulfall' diff --git a/manifest.xml b/manifest.xml index 74940926..295a2713 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,62 +1,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -138,7 +138,7 @@ - + diff --git a/tree.zip b/tree.zip index e22a8add..4ae43426 100644 Binary files a/tree.zip and b/tree.zip differ