Extract bandits from PoEPlanner links

This commit is contained in:
Openarl
2016-08-31 00:46:24 +10:00
parent d3d3c6e9f2
commit 8c75c5d00f
4 changed files with 24 additions and 26 deletions

View File

@@ -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

View File

@@ -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")

View File

@@ -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

View File

@@ -21,8 +21,8 @@
<File sha1="3f0db9229007f0a6552d64632db20621077ecc7d" name="Classes/ItemSlotControl.lua" part="program"/>
<File sha1="495561c42ed0f874bf1663cb9ad2b826cd923c48" name="Classes/ItemsTab.lua" part="program"/>
<File sha1="e577edeea7685cb2b0cd0d00b901a458ae45add0" name="Classes/LabelControl.lua" part="program"/>
<File sha1="3d9c57ff143b18b52232d80412e63afb9a16962f" name="Classes/PassiveSpec.lua" part="program"/>
<File sha1="98de0665f88ec450b8eae5fa587e8d04629f9d3d" name="Classes/PassiveTree.lua" part="program"/>
<File sha1="6f8f98d6ee505af53441c1fe9ad74fbff86d56ad" name="Classes/PassiveSpec.lua" part="program"/>
<File sha1="b10a31abaa3254e8d65df3622286fa2824fe93c9" name="Classes/PassiveTree.lua" part="program"/>
<File sha1="aa2038462e769ac4d976774791e18b5137f251d3" name="Classes/PassiveTreeView.lua" part="program"/>
<File sha1="27a1c5220b28045278d79054e688a956f48e98e7" name="Classes/PopupDialog.lua" part="program"/>
<File sha1="b2a6624d2574690561788455d19fff20ddb257d7" name="Classes/ScrollBarControl.lua" part="program"/>
@@ -33,7 +33,7 @@
<File sha1="80527e0e05c986355ce7af2ba026538aec99a63a" name="Classes/SlotSelectControl.lua" part="program"/>
<File sha1="5f28e18b2867769b6141109332f263e12c74b2f9" name="Classes/TreeTab.lua" part="program"/>
<File sha1="4b7675c8b4fe71cade7dd3d70793df1ed8022d01" name="Classes/UndoHandler.lua" part="program"/>
<File sha1="4ad837c7f9fdeab079160f120f7bd1cdcb68eff0" name="Modules/Build.lua" part="program"/>
<File sha1="5002676f4d7b6ee38bf7d18feca5798123315af4" name="Modules/Build.lua" part="program"/>
<File sha1="6e94bd1923414b7bbd5f02b3206214e997aa4825" name="Modules/BuildList.lua" part="program"/>
<File sha1="a2dd234f717f006b6e7420021aeabdc2b18caf58" name="Modules/Calcs.lua" part="program"/>
<File sha1="7721650215b51d7c472da2e81389b81c91c6b498" name="Modules/CalcsView.lua" part="program"/>