From 8c75c5d00f6d39624c8f59fedd7b944133a1c34a Mon Sep 17 00:00:00 2001 From: Openarl Date: Wed, 31 Aug 2016 00:46:24 +1000 Subject: [PATCH] Extract bandits from PoEPlanner links --- Classes/PassiveSpec.lua | 17 +++++++++++++---- Classes/PassiveTree.lua | 14 -------------- Modules/Build.lua | 13 ++++++++----- manifest.xml | 6 +++--- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/Classes/PassiveSpec.lua b/Classes/PassiveSpec.lua index 61bbcaae..d26ee84c 100644 --- a/Classes/PassiveSpec.lua +++ b/Classes/PassiveSpec.lua @@ -13,14 +13,15 @@ local m_min = math.min local m_max = math.max local m_floor = math.floor -local PassiveSpecClass = common.NewClass("PassiveSpec", "UndoHandler", function(self, tree) +local PassiveSpecClass = common.NewClass("PassiveSpec", "UndoHandler", function(self, build) self.UndoHandler() - self.tree = tree + self.build = build + self.tree = build.tree -- Make a local copy of the passive tree that we can modify self.nodes = { } - for _, treeNode in ipairs(tree.nodes) do + for _, treeNode in ipairs(self.tree.nodes) do self.nodes[treeNode.id] = setmetatable({ linked = { } }, treeNode.meta) @@ -82,7 +83,7 @@ function PassiveSpecClass:DecodeURL(url) if not b or #b < 6 then return "Invalid tree link (unrecognised format)" end - local classId, ascendClassId, nodes + local classId, ascendClassId, bandits, nodes if b:byte(1) == 0 and b:byte(2) == 2 then -- Hold on to your headgear, it looks like a PoE Planner link -- Let's grab a scalpel and start peeling back the 50 layers of base 64 encoding @@ -91,6 +92,7 @@ function PassiveSpecClass:DecodeURL(url) b = common.base64.decode(treeLink:gsub("^.+/",""):gsub("-","+"):gsub("_","/")) classId = b:byte(3) ascendClassId = b:byte(4) + bandits = b:byte(5) nodes = b:sub(8, -1) else local ver = b:byte(1) * 16777216 + b:byte(2) * 65536 + b:byte(3) * 256 + b:byte(4) @@ -120,6 +122,13 @@ function PassiveSpecClass:DecodeURL(url) end end self:SelectAscendClass(ascendClassId) + if bandits then + -- Decode bandits from PoEPlanner + local lookup = { [0] = "None", "Alira", "Kraityn", "Oak" } + self.build.banditNormal = lookup[bandits % 4] + self.build.banditCruel = lookup[m_floor(bandits / 4) % 4] + self.build.banditMerciless = lookup[m_floor(bandits / 16) % 4] + end end -- Encodes the current spec into a URL, using the official skill tree's format diff --git a/Classes/PassiveTree.lua b/Classes/PassiveTree.lua index 7a3dd318..a044073c 100644 --- a/Classes/PassiveTree.lua +++ b/Classes/PassiveTree.lua @@ -35,20 +35,6 @@ end local PassiveTreeClass = common.NewClass("PassiveTree", function(self) MakeDir("TreeData") - -- Test - --[[local test = getFile("https://www.pathofexile.com/character-window/get-characters?accountName=Openarl") - if test then - ConPrintf("=== Characters ===") - local l = jsonToLua("return "..test) - ConPrintTable(assert(loadstring(l))()) - end - test = getFile("https://www.pathofexile.com/character-window/get-passive-skills?accountName=Openarl&character=Natiala") - if test then - ConPrintf("=== Passive Skills ===") - local l = jsonToLua("return "..test) - ConPrintTable(assert(loadstring(l))()) - end]] - ConPrintf("Loading passive tree data...") local treeText local treeFile = io.open("TreeData/tree.lua", "r") diff --git a/Modules/Build.lua b/Modules/Build.lua index fa838ee2..86b5d53b 100644 --- a/Modules/Build.lua +++ b/Modules/Build.lua @@ -16,7 +16,7 @@ function buildMode:Init(dbFileName, buildName) self.tree = main.tree self.importTab = common.New("ImportTab", self) - self.spec = common.New("PassiveSpec", self.tree) + self.spec = common.New("PassiveSpec", self) self.treeTab = common.New("TreeTab", self) self.skillsTab = common.New("SkillsTab", self) self.itemsTab = common.New("ItemsTab", self) @@ -125,21 +125,21 @@ function buildMode:Init(dbFileName, buildName) end) self.controls.modeCalcs.locked = function() return self.viewMode == "CALCS" end self.controls.banditNormal = common.New("DropDownControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 70, 100, 16, - {{val="None",label="Passive"},{val="Oak",label="Oak (Life)"},{val="Kraityn",label="Kraityn (Resists)"},{val="Alira",label="Alira (Mana)"}}, function(sel,val) + {{val="None",label="Passive point"},{val="Oak",label="Oak (Life)"},{val="Kraityn",label="Kraityn (Resists)"},{val="Alira",label="Alira (Mana)"}}, function(sel,val) self.banditNormal = val.val self.modFlag = true self.buildFlag = true end) self.controls.banditNormalLabel = common.New("LabelControl", {"BOTTOMLEFT",self.controls.banditNormal,"TOPLEFT"}, 0, 0, 0, 14, "Normal Bandit:") self.controls.banditCruel = common.New("DropDownControl", {"LEFT",self.controls.banditNormal,"RIGHT"}, 0, 0, 100, 16, - {{val="None",label="Passive"},{val="Oak",label="Oak (Phys Dmg)"},{val="Kraityn",label="Kraityn (Att. Speed)"},{val="Alira",label="Alira (Cast Speed)"}}, function(sel,val) + {{val="None",label="Passive point"},{val="Oak",label="Oak (Phys Dmg)"},{val="Kraityn",label="Kraityn (Att. Speed)"},{val="Alira",label="Alira (Cast Speed)"}}, function(sel,val) self.banditCruel = val.val self.modFlag = true self.buildFlag = true end) self.controls.banditCruelLabel = common.New("LabelControl", {"BOTTOMLEFT",self.controls.banditCruel,"TOPLEFT"}, 0, 0, 0, 14, "Cruel Bandit:") self.controls.banditMerciless = common.New("DropDownControl", {"LEFT",self.controls.banditCruel,"RIGHT"}, 0, 0, 100, 16, - {{val="None",label="Passive"},{val="Oak",label="Oak (Endurance)"},{val="Kraityn",label="Kraityn (Frenzy)"},{val="Alira",label="Alira (Power)"}}, function(sel,val) + {{val="None",label="Passive point"},{val="Oak",label="Oak (Endurance)"},{val="Kraityn",label="Kraityn (Frenzy)"},{val="Alira",label="Alira (Power)"}}, function(sel,val) self.banditMerciless = val.val self.modFlag = true self.buildFlag = true @@ -263,7 +263,6 @@ function buildMode:Load(xml, fileName) self.characterLevel = tonumber(xml.attrib.level) or 1 for _, diff in pairs({"banditNormal","banditCruel","banditMerciless"}) do self[diff] = xml.attrib[diff] or "None" - self.controls[diff]:SelByValue(self[diff]) end self.controls.characterLevel:SetText(tostring(self.characterLevel)) end @@ -303,6 +302,10 @@ function buildMode:OnFrame(inputEvents) self.controls.classDrop:SelByValue(self.spec.curClassName) self.controls.ascendDrop:SelByValue(self.spec.curAscendClassName) + for _, diff in pairs({"banditNormal","banditCruel","banditMerciless"}) do + self.controls[diff]:SelByValue(self[diff]) + end + if self.buildFlag then -- Rebuild calculation output tables self.buildFlag = false diff --git a/manifest.xml b/manifest.xml index 27b7009f..bbb0c88a 100644 --- a/manifest.xml +++ b/manifest.xml @@ -21,8 +21,8 @@ - - + + @@ -33,7 +33,7 @@ - +