From e9a4b95580cb0a736ec01c89c068886afa266c8c Mon Sep 17 00:00:00 2001 From: Openarl Date: Tue, 31 Jan 2017 01:15:04 +1000 Subject: [PATCH] Release 1.2.36 - Hide condition options if the condition isn't used - Added support for "Ignited Enemies Burn faster" - Added options for On Shocked/Burning/Chilled ground - Added workaround for account name case sensitivity on character imports --- Classes/CalcsTab.lua | 41 +++++++++++++++---- Classes/CheckBoxControl.lua | 6 +-- Classes/ConfigTab.lua | 76 ++++++++++++++++++++++++------------ Classes/ImportTab.lua | 54 +++++++++++++++++-------- Classes/PassiveSpec.lua | 3 +- Classes/PassiveTreeView.lua | 9 +++-- Data/Uniques/gloves.lua | 2 +- Launch.lua | 12 +++--- Modules/Build.lua | 2 +- Modules/CalcSections.lua | 2 +- Modules/Calcs.lua | 49 +++++++++++++++++++---- Modules/ModParser.lua | 5 +++ README.md | 6 +++ changelog.txt | 5 +++ manifest.xml | 40 +++++++++---------- runtime-win32.zip | Bin 1288314 -> 1290555 bytes 16 files changed, 219 insertions(+), 93 deletions(-) diff --git a/Classes/CalcsTab.lua b/Classes/CalcsTab.lua index cca625b98..8e4c793ea 100644 --- a/Classes/CalcsTab.lua +++ b/Classes/CalcsTab.lua @@ -350,13 +350,36 @@ function CalcsTabClass:BuildOutput() self.itemCalculator = { self.calcs.getItemCalculator(self.build) } end --- Estimate the offensive and defensive power of all unallocated nodes +-- Controls the coroutine that calculations node power function CalcsTabClass:BuildPower() + if self.powerBuildFlag then + self.powerBuildFlag = false + self.powerBuilder = coroutine.create(self.PowerBuilder) + end + if self.powerBuilder then + collectgarbage("stop") -- This is necessary to work around a bug in the JIT + coroutine.resume(self.powerBuilder, self) + if coroutine.status(self.powerBuilder) == "dead" then + self.powerBuilder = nil + end + collectgarbage("restart") + end +end + +-- Estimate the offensive and defensive power of all unallocated nodes +function CalcsTabClass:PowerBuilder() local calcFunc, calcBase = self:GetNodeCalculator() local cache = { } - self.powerMax = { } + local newPowerMax = { + dps = 0, + def = 0 + } + if not self.powerMax then + self.powerMax = newPowerMax + end + local start = GetTime() for _, node in pairs(self.build.spec.nodes) do - node.power = wipeTable(node.power) + wipeTable(node.power) if not node.alloc and node.modKey ~= "" then if not cache[node.modKey] then cache[node.modKey] = calcFunc({node}) @@ -370,12 +393,16 @@ function CalcsTabClass:BuildPower() (output.LifeRegen - calcBase.LifeRegen) / 500 + (output.EnergyShieldRegen - calcBase.EnergyShieldRegen) / 1000 if node.path then - self.powerMax.dps = m_max(self.powerMax.dps or 0, node.power.dps) - self.powerMax.def = m_max(self.powerMax.def or 0, node.power.def) + newPowerMax.dps = m_max(newPowerMax.dps, node.power.dps) + newPowerMax.def = m_max(newPowerMax.def, node.power.def) end end - end - self.powerBuildFlag = false + if coroutine.running() and GetTime() - start > 100 then + coroutine.yield() + start = GetTime() + end + end + self.powerMax = newPowerMax end function CalcsTabClass:GetNodeCalculator() diff --git a/Classes/CheckBoxControl.lua b/Classes/CheckBoxControl.lua index be74edbdf..89b0ffa4a 100644 --- a/Classes/CheckBoxControl.lua +++ b/Classes/CheckBoxControl.lua @@ -64,10 +64,10 @@ function CheckBoxClass:Draw(viewPort) local tooltip = self:GetProperty("tooltip") if tooltip then main:AddTooltipLine(16, tooltip) + SetDrawLayer(nil, 100) + main:DrawTooltip(x, y, size, size, viewPort) + SetDrawLayer(nil, 0) end - SetDrawLayer(nil, 100) - main:DrawTooltip(x, y, size, size, viewPort) - SetDrawLayer(nil, 0) end end diff --git a/Classes/ConfigTab.lua b/Classes/ConfigTab.lua index 3a8e63b5a..93da6d0d5 100644 --- a/Classes/ConfigTab.lua +++ b/Classes/ConfigTab.lua @@ -11,10 +11,10 @@ local m_max = math.max local varList = { { section = "General" }, { 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 = "conditionLowLife", type = "check", label = "Are you always on Low Life?", tooltip = "You will automatically be considered to be on Low Life if you have at least 65% life reserved,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) + { var = "conditionLowLife", type = "check", label = "Are you always on Low Life?", ifCond = "LowLife", tooltip = "You will automatically be considered to be on Low Life if you have at least 65% life reserved,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "LowLife" }, "Config") end }, - { var = "conditionFullLife", type = "check", label = "Are you always on Full Life?", tooltip = "You will automatically be considered to be on Full Life if you have Chaos Innoculation,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) + { var = "conditionFullLife", type = "check", label = "Are you always on Full Life?", ifCond = "FullLife", tooltip = "You will automatically be considered to be on Full Life if you have Chaos Innoculation,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "FullLife" }, "Config") end }, { var = "igniteMode", type = "list", label = "Ignite calculation mode:", tooltip = "Controls how the base damage for ignite is calculated:\nAverage Damage: Ignite is based on the average damage dealt, factoring in crits and non-crits.\nCrit Damage: Ignite is based on crit damage only.", list = {{val="AVERAGE",label="Average Damage"},{val="CRIT",label="Crit Damage"}} }, @@ -28,43 +28,52 @@ local varList = { { var = "buffUnholyMight", type = "check", label = "Do you have Unholy Might?", tooltip = "This will enable the Unholy Might buff. (Gain 30% of Physical Damage as Extra Chaos Damage)", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "UnholyMight" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "buffPhasing", type = "check", label = "Do you have Phasing?", apply = function(val, modList, enemyModList) + { var = "buffPhasing", type = "check", label = "Do you have Phasing?", ifCond = "Phasing", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "Phasing" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "buffFortify", type = "check", label = "Do you have Fortify?", apply = function(val, modList, enemyModList) + { var = "buffFortify", type = "check", label = "Do you have Fortify?", ifCond = "Fortify", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "Fortify" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionUsingFlask", type = "check", label = "Do you have a Flask active?", apply = function(val, modList, enemyModList) + { var = "conditionUsingFlask", type = "check", label = "Do you have a Flask active?", ifCond = "UsingFlask", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "UsingFlask" }, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionOnConsecratedGround", type = "check", label = "Are you on Consecrated Ground?", tooltip = "In addition to allowing any 'while on Consecrated Ground' modifiers to apply,\nthis will apply the 4% life regen modifier granted by Consecrated Ground.", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "OnConsecratedGround" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionIgnited", type = "check", label = "Are you Ignited?", apply = function(val, modList, enemyModList) + { var = "conditionOnBurningGround", type = "check", label = "Are you on Burning Ground?", ifCond = "OnBurningGround", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "OnBurningGround" }, "Config", { type = "Condition", var = "Combat" }) + end }, + { var = "conditionOnChilledGround", type = "check", label = "Are you on Chilled Ground?", ifCond = "OnChilledGround", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "OnChilledGround" }, "Config", { type = "Condition", var = "Combat" }) + end }, + { var = "conditionOnShockedGround", type = "check", label = "Are you on Shocked Ground?", ifCond = "OnShockedGround", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "OnShockedGround" }, "Config", { type = "Condition", var = "Combat" }) + end }, + { var = "conditionIgnited", type = "check", label = "Are you Ignited?", ifCond = "PlayerIgnited", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "PlayerIgnited" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionFrozen", type = "check", label = "Are you Frozen?", apply = function(val, modList, enemyModList) + { var = "conditionFrozen", type = "check", label = "Are you Frozen?", ifCond = "PlayerFrozen", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "PlayerFrozen" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionShocked", type = "check", label = "Are you Shocked?", apply = function(val, modList, enemyModList) + { var = "conditionShocked", type = "check", label = "Are you Shocked?", ifCond = "PlayerShocked", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "PlayerShocked" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionHitRecently", type = "check", label = "Have you Hit Recently?", tooltip = "You will automatically be considered to have Hit Recently if your main skill is self-cast,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) + { var = "conditionHitRecently", type = "check", label = "Have you Hit Recently?", ifCond = "HitRecently", tooltip = "You will automatically be considered to have Hit Recently if your main skill is self-cast,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "HitRecently" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionCritRecently", type = "check", label = "Have you Crit Recently?", apply = function(val, modList, enemyModList) + { var = "conditionCritRecently", type = "check", label = "Have you Crit Recently?", ifCond = "CritRecently", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "CritRecently" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionKilledRecently", type = "check", label = "Have you Killed Recently?", apply = function(val, modList, enemyModList) + { var = "conditionKilledRecently", type = "check", label = "Have you Killed Recently?", ifCond = "KilledRecently", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "KilledRecently" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionTotemsKilledRecently", type = "check", label = "Have your Totems Killed Recently?", apply = function(val, modList, enemyModList) + { var = "conditionTotemsKilledRecently", type = "check", label = "Have your Totems Killed Recently?", ifCond = "TotemsKilledRecently", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "TotemsKilledRecently" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionBeenHitRecently", type = "check", label = "Have you been Hit Recently?", apply = function(val, modList, enemyModList) + { var = "conditionBeenHitRecently", type = "check", label = "Have you been Hit Recently?", ifCond = "BeenHitRecently", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "BeenHitRecently" }, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionBeenSavageHitRecently", type = "check", label = "Have you been Savage Hit Recently?", apply = function(val, modList, enemyModList) + { var = "conditionBeenSavageHitRecently", type = "check", label = "Have you been Savage Hit Recently?", ifCond = "BeenSavageHitRecently", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "BeenSavageHitRecently" }, "Config", { type = "Condition", var = "Combat" }) end }, { var = "buffPendulum", type = "check", label = "Is Pendulum of Destruction active?", ifNode = 57197, apply = function(val, modList, enemyModList) @@ -92,40 +101,40 @@ local varList = { { var = "critChanceLucky", type = "check", label = "Is your Crit Chance Lucky?", apply = function(val, modList, enemyModList) modList:NewMod("CritChanceLucky", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "conditionEnemyFullLife", type = "check", label = "Is the enemy on Full Life?", apply = function(val, modList, enemyModList) + { 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 }, - { var = "conditionEnemyLowLife", type = "check", label = "Is the enemy on Low Life?", apply = function(val, modList, enemyModList) + { var = "conditionEnemyLowLife", type = "check", label = "Is the enemy on Low Life?", ifCond = "EnemyLowLife", 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) + { var = "conditionAtCloseRange", type = "check", label = "Is the enemy at Close Range?", ifCond = "AtCloseRange", 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) + { var = "conditionEnemyCursed", type = "check", label = "Is the enemy Cursed?", ifCond = "EnemyCursed", 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 }, - { var = "conditionEnemyBleeding", type = "check", label = "Is the enemy Bleeding?", apply = function(val, modList, enemyModList) + { var = "conditionEnemyBleeding", type = "check", label = "Is the enemy Bleeding?", ifCond = "EnemyBleeding", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyBleeding" }, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "conditionEnemyPoisoned", type = "check", label = "Is the enemy Poisoned?", apply = function(val, modList, enemyModList) + { var = "conditionEnemyPoisoned", type = "check", label = "Is the enemy Poisoned?", ifCond = "EnemyPoisoned", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyPoisoned" }, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "conditionEnemyMaimed", type = "check", label = "Is the enemy Maimed?", apply = function(val, modList, enemyModList) + { var = "conditionEnemyMaimed", type = "check", label = "Is the enemy Maimed?", ifCond = "EnemyMaimed", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyMaimed" }, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "conditionEnemyHindered", type = "check", label = "Is the enemy Hindered?", apply = function(val, modList, enemyModList) + { var = "conditionEnemyHindered", type = "check", label = "Is the enemy Hindered?", ifCond = "EnemyHindered", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyHindered" }, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "conditionEnemyBurning", type = "check", label = "Is the enemy Burning?", apply = function(val, modList, enemyModList) + { var = "conditionEnemyBurning", type = "check", label = "Is the enemy Burning?", ifCond = "EnemyBurning", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyBurning" }, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "conditionEnemyIgnited", type = "check", label = "Is the enemy Ignited?", tooltip = "This also implies that the enemy is Burning.", apply = function(val, modList, enemyModList) + { var = "conditionEnemyIgnited", type = "check", label = "Is the enemy Ignited?", ifCond = "EnemyIgnited", tooltip = "This also implies that the enemy is Burning.", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyIgnited" }, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "conditionEnemyChilled", type = "check", label = "Is the enemy Chilled?", apply = function(val, modList, enemyModList) + { var = "conditionEnemyChilled", type = "check", label = "Is the enemy Chilled?", ifCond = "EnemyChilled", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyChilled" }, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "conditionEnemyFrozen", type = "check", label = "Is the enemy Frozen?", apply = function(val, modList, enemyModList) + { var = "conditionEnemyFrozen", type = "check", label = "Is the enemy Frozen?", ifCond = "EnemyFrozen", apply = function(val, modList, enemyModList) modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyFrozen" }, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyShocked", type = "check", label = "Is the enemy Shocked?", tooltip = "In addition to allowing any 'against Shocked Enemies' modifiers to apply,\nthis will apply Shock's Damage Taken modifier to the enemy.", apply = function(val, modList, enemyModList) @@ -229,6 +238,21 @@ local ConfigTabClass = common.NewClass("ConfigTab", "UndoHandler", "ControlHost" control.tooltip = function() return "This option is specific to '"..self.build.spec.nodes[varData.ifNode].dn.."'."..(varData.tooltip and "\n"..varData.tooltip or "") end + elseif varData.ifCond then + control.shown = function() + return self.build.calcsTab.mainEnv.conditionsUsed[varData.ifCond] + end + control.tooltip = function() + if launch.devMode and IsKeyDown("CTRL") then + local out = varData.tooltip or "" + for _, mod in ipairs(self.build.calcsTab.mainEnv.conditionsUsed[varData.ifCond]) do + out = (#out > 0 and out.."\n" or out) .. modLib.formatMod(mod) .. "|" .. mod.source + end + return out + else + return varData.tooltip + end + end else control.tooltip = varData.tooltip end diff --git a/Classes/ImportTab.lua b/Classes/ImportTab.lua index c34a7ea96..654d35ded 100644 --- a/Classes/ImportTab.lua +++ b/Classes/ImportTab.lua @@ -34,7 +34,6 @@ local ImportTabClass = common.NewClass("ImportTab", "ControlHost", "Control", fu self.controls.accountNameGo.enabled = function() return self.controls.accountName.buf:match("%S") end - self.controls.accountNameTip = common.New("LabelControl", {"TOPLEFT",self.controls.accountName,"BOTTOMLEFT"}, 0, 4, 0, 14, "^7Note: the account name must have the correct capitalisation, or the character import will fail.") -- Stage: input POESESSID self.controls.sessionHeader = common.New("LabelControl", {"TOPLEFT",self.controls.sectionCharImport,"TOPLEFT"}, 6, 40, 200, 14) @@ -205,22 +204,45 @@ function ImportTabClass:DownloadCharacterList() self.charImportMode = "GETACCOUNTNAME" return end - self.charImportStatus = "Character list successfully retrieved." - self.charImportMode = "SELECTCHAR" - main.lastAccountName = accountName - if sessionID then - main.accountSessionIDs[accountName] = sessionID - end - wipeTable(self.controls.charSelect.list) - for i, char in ipairs(charList) do - t_insert(self.controls.charSelect.list, { - val = char, - label = string.format("%s: Level %d %s in %s", char.name or "?", char.level or 0, char.class or "?", char.league or "?") - }) + --ConPrintTable(charList) + if #charList == 0 then + self.charImportStatus = data.colorCodes.NEGATIVE.."The account has no characters to import." + self.charImportMode = "GETACCOUNTNAME" + return end - table.sort(self.controls.charSelect.list, function(a,b) - return a.val.name:lower() < b.val.name:lower() - end) + -- GGG's character API has an issue where for /get-characters the account name is not case-sensitive, but for /get-passive-skills and /get-items it is. + -- This workaround grabs the profile page and extracts the correct account name from one of the URLs. + launch:DownloadPage("https://www.pathofexile.com/account/view-profile/"..accountName, function(page, errMsg) + if errMsg then + self.charImportStatus = data.colorCodes.NEGATIVE.."Error retrieving character list, try again ("..errMsg:gsub("\n"," ")..")" + self.charImportMode = "GETACCOUNTNAME" + return + end + local realAccountName = page:match("/account/view%-profile/([^/]+)/characters") + if not realAccountName then + self.charImportStatus = data.colorCodes.NEGATIVE.."Failed to retrieve character list." + self.charImportMode = "GETSESSIONID" + return + end + self.controls.accountName:SetText(realAccountName) + accountName = realAccountName + self.charImportStatus = "Character list successfully retrieved." + self.charImportMode = "SELECTCHAR" + main.lastAccountName = accountName + if sessionID then + main.accountSessionIDs[accountName] = sessionID + end + wipeTable(self.controls.charSelect.list) + for i, char in ipairs(charList) do + t_insert(self.controls.charSelect.list, { + val = char, + label = string.format("%s: Level %d %s in %s", char.name or "?", char.level or 0, char.class or "?", char.league or "?") + }) + end + table.sort(self.controls.charSelect.list, function(a,b) + return a.val.name:lower() < b.val.name:lower() + end) + end, sessionID and "POESESSID="..sessionID) end, sessionID and "POESESSID="..sessionID) end diff --git a/Classes/PassiveSpec.lua b/Classes/PassiveSpec.lua index cb98c9b1a..54481abb6 100644 --- a/Classes/PassiveSpec.lua +++ b/Classes/PassiveSpec.lua @@ -23,7 +23,8 @@ local PassiveSpecClass = common.NewClass("PassiveSpec", "UndoHandler", function( self.nodes = { } for _, treeNode in ipairs(self.tree.nodes) do self.nodes[treeNode.id] = setmetatable({ - linked = { } + linked = { }, + power = { } }, treeNode.meta) end for id, node in pairs(self.nodes) do diff --git a/Classes/PassiveTreeView.lua b/Classes/PassiveTreeView.lua index 81cc5c4fa..b2a6d6cc5 100644 --- a/Classes/PassiveTreeView.lua +++ b/Classes/PassiveTreeView.lua @@ -309,6 +309,11 @@ function PassiveTreeViewClass:Draw(build, viewPort, inputEvents) SetDrawColor(1, 1, 1) end + if self.showHeatMap then + -- Build the power numbers if needed + build.calcsTab:BuildPower() + end + -- Draw the nodes for nodeId, node in pairs(spec.nodes) do -- Determine the base and overlay images for this node based on type and state @@ -360,10 +365,6 @@ function PassiveTreeViewClass:Draw(build, viewPort, inputEvents) SetDrawColor(0.5, 0.5, 0.5) end if self.showHeatMap then - if build.calcsTab.powerBuildFlag then - -- Build the power numbers if needed - build.calcsTab:BuildPower() - end if not node.alloc and node.type ~= "classStart" and node.type ~= "ascendClassStart" then -- Calculate color based on DPS and defensive powers local dps = m_max(node.power.dps or 0, 0) diff --git a/Data/Uniques/gloves.lua b/Data/Uniques/gloves.lua index d8f1491aa..b676f385a 100644 --- a/Data/Uniques/gloves.lua +++ b/Data/Uniques/gloves.lua @@ -297,7 +297,7 @@ Energy Shield: 24 Requires Level 51, 40 Str, 40 Int Adds (30-36 to 44-50) Cold Damage to Attacks (12 to 16)% increased maximum Life -(40 to 50)% to Cold Resistance ++(40 to 50)% to Cold Resistance 25% increased Freeze Duration on Enemies Your Hits can only Kill Frozen enemies ]], diff --git a/Launch.lua b/Launch.lua index fe5d470fd..08c2c042d 100644 --- a/Launch.lua +++ b/Launch.lua @@ -190,7 +190,9 @@ function launch:OnSubError(errMsg) end function launch:OnSubFinished(...) - if self.subScriptType == "UPDATE" then + local type = self.subScriptType + self.subScriptType = nil + if type == "UPDATE" then local ret = (...) self.updateAvailable = ret if self.updateChecking then @@ -203,14 +205,14 @@ function launch:OnSubFinished(...) end self.updateChecking = false end - elseif self.subScriptType == "DOWNLOAD" then - local errMsg = PCall(self.downloadCallback, ...) + elseif type == "DOWNLOAD" then + local callback = self.downloadCallback + self.downloadCallback = nil + local errMsg = PCall(callback, ...) if errMsg then self:ShowErrMsg("In download callback: %s", errMsg) end - self.downloadCallback = nil end - self.subScriptType = nil end function launch:DownloadPage(url, callback, cookies) diff --git a/Modules/Build.lua b/Modules/Build.lua index 16f8da8a5..2915ce3c9 100644 --- a/Modules/Build.lua +++ b/Modules/Build.lua @@ -341,7 +341,7 @@ function buildMode:Init(dbFileName, buildName) local start = GetTime() SetProfiling(true) for i = 1, 10 do - self.calcsTab:BuildPower(self) + self.calcsTab:PowerBuilder() end SetProfiling(false) ConPrintf("Power build time: %d msec", GetTime() - start) diff --git a/Modules/CalcSections.lua b/Modules/CalcSections.lua index f45ba3ceb..efa951977 100644 --- a/Modules/CalcSections.lua +++ b/Modules/CalcSections.lua @@ -209,7 +209,7 @@ return { { label = "Total Increased", { format = "{0:mod:1}%", { modName = { "Damage", "FireDamage", "ElementalDamage" }, modType = "INC", cfg = "ignite" }, }, }, { label = "Total More", { format = "{0:mod:1}%", { modName = { "Damage", "FireDamage", "ElementalDamage" }, modType = "MORE", cfg = "ignite" }, }, }, { label = "Effective DPS Mod", flag = "effective", { format = "x {3:output:IgniteEffMult}", { breakdown = "IgniteEffMult" }, { label = "Enemy modifiers", modName = { "FireResist", "ElementalResist", "DamageTaken", "DotTaken", "FireDamageTaken", "BurningDamageTaken", "ElementalDamageTaken" }, enemy = true }, }, }, - { label = "Ignite DPS", { format = "{1:output:IgniteDPS}", { breakdown = "IgniteDPS" }, }, }, + { label = "Ignite DPS", { format = "{1:output:IgniteDPS}", { breakdown = "IgniteDPS" }, { modName = { "IgniteBurnRate" }, cfg = "skill" }, }, }, { label = "Ignite Duration", { format = "{2:output:IgniteDuration}s", { breakdown = "IgniteDuration" }, { label = "Player modifiers", modName = "EnemyIgniteDuration", cfg = "skill" }, { label = "Enemy modifiers", modName = "SelfIgniteDuration", enemy = true }, }, }, { label = "Dmg. per Ignite", flag = "igniteCanStack", { format = "{1:output:IgniteDamage}", { breakdown = "IgniteDamage" }, }, }, } }, diff --git a/Modules/Calcs.lua b/Modules/Calcs.lua index e41308805..5ba8ee75a 100644 --- a/Modules/Calcs.lua +++ b/Modules/Calcs.lua @@ -3,7 +3,7 @@ -- Module: Calcs -- Performs all the offense and defense calculations. -- Here be dragons! --- This file is 2700 lines long, over half of which is in one function... +-- This file is 2800 lines long, over half of which is in one function... -- local pairs = pairs @@ -1277,7 +1277,7 @@ local function performCalcs(env) end return out end - dotBreakdown = function(out, baseVal, inc, more, effMult, total) + dotBreakdown = function(out, baseVal, inc, more, rate, effMult, total) t_insert(out, s_format("%.1f ^8(base damage per second)", baseVal)) if inc ~= 0 then t_insert(out, s_format("x %.2f ^8(increased/reduced)", 1 + inc/100)) @@ -1285,6 +1285,9 @@ local function performCalcs(env) if more ~= 1 then t_insert(out, s_format("x %.2f ^8(more/less)", more)) end + if rate and rate ~= 1 then + t_insert(out, s_format("x %.2f ^8(rate modifier)", rate)) + end if effMult ~= 1 then t_insert(out, s_format("x %.3f ^8(effective DPS modifier)", effMult)) end @@ -2170,7 +2173,7 @@ local function performCalcs(env) output.TotalDot = output.TotalDot + total if breakdown then breakdown[damageType.."Dot"] = { } - dotBreakdown(breakdown[damageType.."Dot"], baseVal, inc, more, effMult, total) + dotBreakdown(breakdown[damageType.."Dot"], baseVal, inc, more, nil, effMult, total) end end end @@ -2312,7 +2315,7 @@ local function performCalcs(env) t_insert(breakdown.BleedDPS, "x 0.1 ^8(bleed deals 10% per second)") t_insert(breakdown.BleedDPS, s_format("= %.1f", baseVal)) t_insert(breakdown.BleedDPS, "Bleed DPS:") - dotBreakdown(breakdown.BleedDPS, baseVal, inc, more, effMult, output.BleedDPS) + dotBreakdown(breakdown.BleedDPS, baseVal, inc, more, nil, effMult, output.BleedDPS) if output.BleedDuration ~= 5 then breakdown.BleedDuration = { "5.00s ^8(base duration)" @@ -2373,7 +2376,7 @@ local function performCalcs(env) t_insert(breakdown.PoisonDPS, "x 0.08 ^8(poison deals 8% per second)") t_insert(breakdown.PoisonDPS, s_format("= %.1f", baseVal, 1)) t_insert(breakdown.PoisonDPS, "Poison DPS:") - dotBreakdown(breakdown.PoisonDPS, baseVal, inc, more, effMult, output.PoisonDPS) + dotBreakdown(breakdown.PoisonDPS, baseVal, inc, more, nil, effMult, output.PoisonDPS) if output.PoisonDuration ~= 2 then breakdown.PoisonDuration = { s_format("%.2fs ^8(base duration)", durationBase) @@ -2439,9 +2442,10 @@ local function performCalcs(env) end local inc = modDB:Sum("INC", dotCfg, "Damage", "FireDamage", "ElementalDamage") local more = round(modDB:Sum("MORE", dotCfg, "Damage", "FireDamage", "ElementalDamage"), 2) - output.IgniteDPS = baseVal * (1 + inc/100) * more * effMult + local burnRateMod = calcMod(modDB, skillCfg, "IgniteBurnRate") + output.IgniteDPS = baseVal * (1 + inc/100) * more * burnRateMod * effMult local incDur = modDB:Sum("INC", dotCfg, "EnemyIgniteDuration") + enemyDB:Sum("INC", nil, "SelfIgniteDuration") - output.IgniteDuration = 4 * (1 + incDur / 100) * debuffDurationMult + output.IgniteDuration = 4 * (1 + incDur / 100) / burnRateMod * debuffDurationMult if modDB:Sum("FLAG", nil, "IgniteCanStack") then output.IgniteDamage = output.IgniteDPS * output.IgniteDuration skillFlags.igniteCanStack = true @@ -2450,7 +2454,7 @@ local function performCalcs(env) t_insert(breakdown.IgniteDPS, "x 0.2 ^8(ignite deals 20% per second)") t_insert(breakdown.IgniteDPS, s_format("= %.1f", baseVal, 1)) t_insert(breakdown.IgniteDPS, "Ignite DPS:") - dotBreakdown(breakdown.IgniteDPS, baseVal, inc, more, effMult, output.IgniteDPS) + dotBreakdown(breakdown.IgniteDPS, baseVal, inc, more, burnRateMod, effMult, output.IgniteDPS) if skillFlags.igniteCanStack then breakdown.IgniteDamage = { s_format("%.1f ^8(damage per second)", output.IgniteDPS), @@ -2465,6 +2469,9 @@ local function performCalcs(env) if incDur ~= 0 then t_insert(breakdown.IgniteDuration, s_format("x %.2f ^8(increased/reduced duration)", 1 + incDur/100)) end + if burnRateMod ~= 1 then + t_insert(breakdown.IgniteDuration, s_format("/ %.2f ^8(rate modifier)", burnRateMod)) + end if debuffDurationMult ~= 1 then t_insert(breakdown.IgniteDuration, s_format("/ %.2f ^8(debuff expires slower/faster)", 1 / debuffDurationMult)) end @@ -2725,6 +2732,32 @@ function calcs.buildOutput(build, mode) for _, stat in pairs({"Life", "Mana", "Armour", "Evasion", "EnergyShield"}) do output["Spec:"..stat.."Inc"] = env.modDB:Sum("INC", specCfg, stat) end + + env.conditionsUsed = { } + local function addCond(var, mod) + if not env.conditionsUsed[var] then + env.conditionsUsed[var] = { } + end + t_insert(env.conditionsUsed[var], mod) + end + for _, db in ipairs{env.modDB, env.enemyDB} do + for modName, modList in pairs(db.mods) do + for _, mod in ipairs(modList) do + for _, tag in ipairs(mod.tagList) do + if tag.type == "Condition" then + if tag.varList then + for _, var in ipairs(tag.varList) do + addCond(var, mod) + end + else + addCond(tag.var, mod) + end + end + end + end + end + end + ConPrintTable(env.conditionsUsed) elseif mode == "CALCS" then local buffList = { } local combatList = { } diff --git a/Modules/ModParser.lua b/Modules/ModParser.lua index 22616a497..a64b0d992 100644 --- a/Modules/ModParser.lua +++ b/Modules/ModParser.lua @@ -367,6 +367,9 @@ local modTagList = { ["while using a flask"] = { tag = { type = "Condition", var = "UsingFlask" } }, ["during flask effect"] = { tag = { type = "Condition", var = "UsingFlask" } }, ["while on consecrated ground"] = { tag = { type = "Condition", var = "OnConsecratedGround" } }, + ["on burning ground"] = { tag = { type = "Condition", var = "OnBurningGround" } }, + ["on chilled ground"] = { tag = { type = "Condition", var = "OnChilledGround" } }, + ["on shocked ground"] = { tag = { type = "Condition", var = "OnShockedGround" } }, ["while ignited"] = { tag = { type = "Condition", var = "PlayerIgnited" } }, ["while frozen"] = { tag = { type = "Condition", var = "PlayerFrozen" } }, ["while shocked"] = { tag = { type = "Condition", var = "PlayerShocked" } }, @@ -582,6 +585,8 @@ local specialModList = { ["attacks with this weapon deal double damage to chilled enemies"] = { mod("Damage", "MORE", 100, nil, ModFlag.Hit, { type = "Condition", var = "XHandAttack" }, { type = "Condition", var = "EnemyChilled" }) }, ["(%d+)%% of maximum life converted to energy shield"] = function(num) return { mod("LifeConvertToEnergyShield", "BASE", num) } end, ["non%-critical strikes deal (%d+)%% damage"] = function(num) return { mod("Damage", "MORE", -100+num, nil, ModFlag.Hit, { type = "Condition", var = "CriticalStrike", neg = true }) } end, + ["ignited enemies burn (%d+)%% faster"] = function(num) return { mod("IgniteBurnRate", "INC", num) } end, + ["enemies ignited by an attack burn (%d+)%% faster"] = function(num) return { mod("IgniteBurnRate", "INC", num, nil, ModFlag.Attack) } end, } local keystoneList = { -- List of keystones that can be found on uniques diff --git a/README.md b/README.md index 32d7df8d6..1badc85ef 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,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.2.36 - 2017/01/31 + * Condition toggles in the Configuration tab will now only appear if the condition is actually used by the build + * Added support for "Ignited Enemies Burn faster" modifiers + * Added options to the Configuration tab for "Are you on Shocked/Burning/Chilled Ground" + * Character imports will now work even if the capitalisation of the account name is incorrect + ### 1.2.35 - 2017/01/29 With this update, the way the program handles the calculation of crit damage has been improved. Damage for crits and non-crits are now calculated and tallied separately, and combined later, instead of only diff --git a/changelog.txt b/changelog.txt index aae9d047e..54b6f2296 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +VERSION[1.2.36][2017/01/31] + * Condition toggles in the Configuration tab will now only appear if the condition is actually used by the build + * Added support for "Ignited Enemies Burn faster" modifiers + * Added options to the Configuration tab for "Are you on Shocked/Burning/Chilled Ground" + * Character imports will now work even if the capitalisation of the account name is incorrect VERSION[1.2.35][2017/01/29] With this update, the way the program handles the calculation of crit damage has been improved. Damage for crits and non-crits are now calculated and tallied separately, and combined later, instead of only diff --git a/manifest.xml b/manifest.xml index 08e1e3dec..45036bc85 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,26 +1,26 @@ - + - + - + - - - + + + - + @@ -29,9 +29,9 @@ - + - + @@ -42,15 +42,15 @@ - + - - + + - + @@ -89,7 +89,7 @@ - + @@ -99,12 +99,12 @@ - - - - - - + + + + + + diff --git a/runtime-win32.zip b/runtime-win32.zip index 20a3eba7868aa1d7275bed3f1f039f5aa8ab56dd..7633beb031310999b9f8e89adbb327dcd5e8a86b 100644 GIT binary patch delta 906085 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