Skip to content

Commit c72e2e4

Browse files
committed
Add improved error handling for icyveins builds, and fix issues with certain classes
1 parent 43a1a98 commit c72e2e4

File tree

4 files changed

+83
-19
lines changed

4 files changed

+83
-19
lines changed

TalentTreeViewer/IcyVeinsImport.lua

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ local skillMappings = tInvert{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
1111
--- @type LibTalentTree-1.0
1212
local libTT = LibStub('LibTalentTree-1.0');
1313

14+
local L = LibStub('AceLocale-3.0'):GetLocale(name)
15+
1416
--- @param text string
1517
--- @return boolean
1618
function IcyVeinsImport:IsTalentUrl(text)
@@ -104,16 +106,31 @@ function IcyVeinsImport:ParseDataSegment(startingLevel, dataSegment, levelingOrd
104106
local mappingIndex = skillMappings[char];
105107

106108
local nodeID = nodes[mappingIndex];
107-
local entryIndex = nextChar == '1' and 2 or 1;
108-
local nodeInfo = libTT:GetNodeInfo(nodeID);
109-
local entry = nodeInfo.type == Enum.TraitNodeType.Selection and nodeInfo.entryIDs and nodeInfo.entryIDs[entryIndex] or nil;
110-
rankByNodeID[nodeID] = (rankByNodeID[nodeID] or 0) + 1;
111-
112-
levelingOrder[level] = {
113-
nodeID = nodeID,
114-
entryID = entry,
115-
targetRank = rankByNodeID[nodeID],
116-
};
109+
if not nodeID then
110+
print(L['Error while importing IcyVeins URL: Could not find node for mapping index'], mappingIndex);
111+
if DevTool and DevTool.AddData then
112+
DevTool:AddData({
113+
mappingIndex = mappingIndex,
114+
char = char,
115+
nextChar = nextChar,
116+
index = index,
117+
dataSegment = dataSegment,
118+
splitDataSegment = splitDataSegment,
119+
nodes = nodes,
120+
}, 'Error while importing IcyVeins URL: Could not find node for mapping index')
121+
end
122+
else
123+
local entryIndex = nextChar == '1' and 2 or 1;
124+
local nodeInfo = libTT:GetNodeInfo(nodeID);
125+
local entry = nodeInfo.type == Enum.TraitNodeType.Selection and nodeInfo.entryIDs and nodeInfo.entryIDs[entryIndex] or nil;
126+
rankByNodeID[nodeID] = (rankByNodeID[nodeID] or 0) + 1;
127+
128+
levelingOrder[level] = {
129+
nodeID = nodeID,
130+
entryID = entry,
131+
targetRank = rankByNodeID[nodeID],
132+
};
133+
end
117134
end
118135
end
119136
end
@@ -131,10 +148,12 @@ function IcyVeinsImport:GetClassAndSpecNodeIDs(specID, treeID)
131148

132149
for _, nodeID in ipairs(nodes or {}) do
133150
local nodeInfo = libTT:GetNodeInfo(nodeID);
134-
if nodeInfo.isClassNode then
135-
table.insert(classNodes, nodeID);
136-
elseif libTT:IsNodeVisibleForSpec(specID, nodeID) and nodeInfo.maxRanks > 0 then
137-
table.insert(specNodes, nodeID);
151+
if libTT:IsNodeVisibleForSpec(specID, nodeID) and nodeInfo.maxRanks > 0 then
152+
if nodeInfo.isClassNode then
153+
table.insert(classNodes, nodeID);
154+
else
155+
table.insert(specNodes, nodeID);
156+
end
138157
end
139158
end
140159

TalentTreeViewer/TalentViewer.lua

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,19 @@ function TalentViewer:RecordLevelingEntry(nodeID, targetRank, entryID)
609609
local baseLevel = self.recordingInfo.startingOffset[indexKey];
610610
local level = baseLevel + (#entries * 2);
611611

612-
self:GetTalentFrame():GetTalentButtonByNodeID(nodeID).LevelingOrder:AppendToOrder(level);
612+
local button = self:GetTalentFrame():GetTalentButtonByNodeID(nodeID);
613+
if not button then
614+
if DevTool and DevTool.AddData then
615+
DevTool:AddData({
616+
entry = entries[#entries],
617+
nodeID = nodeID,
618+
level = level,
619+
nodeInfo = self:GetTalentFrame():GetAndCacheNodeInfo(nodeID),
620+
}, 'could not find button for NodeID when recording');
621+
end
622+
return
623+
end
624+
button.LevelingOrder:AppendToOrder(level);
613625
end
614626

615627
function TalentViewer:RemoveLastRecordedLevelingEntry(nodeID)
@@ -623,7 +635,18 @@ function TalentViewer:RemoveLastRecordedLevelingEntry(nodeID)
623635
removed = i;
624636
table.remove(entries, i);
625637
self.recordingInfo.currentIndex[indexKey] = #entries;
626-
self:GetTalentFrame():GetTalentButtonByNodeID(nodeID).LevelingOrder:RemoveLastOrder();
638+
local button = self:GetTalentFrame():GetTalentButtonByNodeID(nodeID);
639+
if not button then
640+
if DevTool and DevTool.AddData then
641+
DevTool:AddData({
642+
entry = entry,
643+
nodeID = nodeID,
644+
nodeInfo = self:GetTalentFrame():GetAndCacheNodeInfo(nodeID),
645+
}, 'could not find button for NodeID when removing');
646+
end
647+
else
648+
button.LevelingOrder:RemoveLastOrder();
649+
end
627650
break;
628651
end
629652
end
@@ -632,7 +655,18 @@ function TalentViewer:RemoveLastRecordedLevelingEntry(nodeID)
632655
local entry = entries[i];
633656
local baseLevel = self.recordingInfo.startingOffset[indexKey];
634657
local level = baseLevel + (i * 2);
635-
self:GetTalentFrame():GetTalentButtonByNodeID(entry.nodeID).LevelingOrder:UpdateOrder(level + 2, level);
658+
local button = self:GetTalentFrame():GetTalentButtonByNodeID(entry.nodeID);
659+
if not button then
660+
if DevTool and DevTool.AddData then
661+
DevTool:AddData({
662+
entry = entry,
663+
nodeID = nodeID,
664+
nodeInfo = self:GetTalentFrame():GetAndCacheNodeInfo(nodeID),
665+
}, 'could not find button for NodeID when updating after removing');
666+
end
667+
else
668+
button.LevelingOrder:UpdateOrder(level + 2, level);
669+
end
636670
end
637671
end
638672
end

TalentTreeViewer/TalentViewerUIMixin.lua

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -844,7 +844,18 @@ function TalentViewerUIMixin:ApplyLevelingBuild(level, lockLevelingBuild)
844844
if entryInfo then
845845
local nodeID = entryInfo.nodeID;
846846
local button = self:GetTalentButtonByNodeID(nodeID);
847-
button.LevelingOrder:AppendToOrder(entryLevel);
847+
if not button then
848+
if DevTool and DevTool.AddData then
849+
DevTool:AddData({
850+
entry = entryInfo,
851+
nodeID = nodeID,
852+
level = entryLevel,
853+
nodeInfo = self:GetAndCacheNodeInfo(nodeID),
854+
}, 'could not find button for NodeID when applying');
855+
end
856+
else
857+
button.LevelingOrder:AppendToOrder(entryLevel);
858+
end
848859
end
849860
end
850861

types.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
--- inherits ClassTalentTalentsTabMixin
22
--- @class TalentViewerUIMixin: FRAME
33
--- @field EnumerateAllTalentButtons fun(): fun(): TalentViewer_TalentButtonMixin
4-
--- @field GetTalentButtonByNodeID fun(self: TalentViewerUIMixin, nodeID: number): TalentViewer_TalentButtonMixin
4+
--- @field GetTalentButtonByNodeID fun(self: TalentViewerUIMixin, nodeID: number): nil|TalentViewer_TalentButtonMixin
55
--- @field StartRecordingButton BUTTON
66
--- @field StopRecordingButton BUTTON
77
--- @field LevelingBuildLevelSlider SLIDER

0 commit comments

Comments
 (0)