Skip to content

Commit 953d057

Browse files
committed
Preserve skill selection on character reimport
1 parent a51cdca commit 953d057

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

src/Classes/ImportTab.lua

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,43 @@ function ImportTabClass:ImportPassiveTreeAndJewels(json, charData)
729729
main:SetWindowTitleSubtext(string.format("%s (%s, %s, %s)", self.build.buildName, charData.name, charData.class, charData.league))
730730
end
731731

732+
local SOCKET_GROUP_REIMPORT_KEY_SEPARATOR = "\31"
733+
734+
local function getSocketGroupReimportKey(socketGroup)
735+
-- Use a rarely-used separator to avoid accidental collisions when concatenating fields.
736+
local gemNameParts = { }
737+
for _, gem in ipairs(socketGroup.gemList) do
738+
t_insert(gemNameParts, (gem.nameSpec or ""):lower())
739+
end
740+
return table.concat({
741+
socketGroup.slot or "",
742+
socketGroup.source or "",
743+
tostring(#socketGroup.gemList),
744+
table.concat(gemNameParts, SOCKET_GROUP_REIMPORT_KEY_SEPARATOR),
745+
}, SOCKET_GROUP_REIMPORT_KEY_SEPARATOR)
746+
end
747+
748+
local function snapshotSocketGroupReimportState(socketGroup, isMainGroup)
749+
return {
750+
enabled = socketGroup.enabled,
751+
includeInFullDPS = socketGroup.includeInFullDPS,
752+
groupCount = socketGroup.groupCount,
753+
label = socketGroup.label,
754+
mainActiveSkill = socketGroup.mainActiveSkill,
755+
mainActiveSkillCalcs = socketGroup.mainActiveSkillCalcs,
756+
isMainGroup = isMainGroup,
757+
}
758+
end
759+
760+
local function applySocketGroupReimportState(socketGroup, state)
761+
socketGroup.enabled = state.enabled
762+
socketGroup.includeInFullDPS = state.includeInFullDPS
763+
socketGroup.groupCount = state.groupCount
764+
socketGroup.label = state.label
765+
socketGroup.mainActiveSkill = state.mainActiveSkill
766+
socketGroup.mainActiveSkillCalcs = state.mainActiveSkillCalcs
767+
end
768+
732769
function ImportTabClass:ImportItemsAndSkills(json)
733770
--local out = io.open("get-items.json", "w")
734771
--out:write(json)
@@ -748,15 +785,22 @@ function ImportTabClass:ImportItemsAndSkills(json)
748785

749786
local mainSkillEmpty = #self.build.skillsTab.socketGroupList == 0
750787
local skillOrder
788+
local preservedSocketGroupStateByKey
751789
if self.controls.charImportItemsClearSkills.state then
752790
skillOrder = { }
791+
preservedSocketGroupStateByKey = { }
753792
for _, socketGroup in ipairs(self.build.skillsTab.socketGroupList) do
754793
for _, gem in ipairs(socketGroup.gemList) do
755794
if gem.grantedEffect and not gem.grantedEffect.support then
756795
t_insert(skillOrder, gem.grantedEffect.name)
757796
end
758797
end
759798
end
799+
for index, socketGroup in ipairs(self.build.skillsTab.socketGroupList) do
800+
local key = getSocketGroupReimportKey(socketGroup)
801+
preservedSocketGroupStateByKey[key] = preservedSocketGroupStateByKey[key] or { }
802+
t_insert(preservedSocketGroupStateByKey[key], snapshotSocketGroupReimportState(socketGroup, index == self.build.mainSocketGroup))
803+
end
760804
wipeTable(self.build.skillsTab.socketGroupList)
761805
end
762806
self.charImportStatus = colorCodes.POSITIVE.."Items and skills successfully imported."
@@ -801,6 +845,22 @@ function ImportTabClass:ImportItemsAndSkills(json)
801845
end
802846
end)
803847
end
848+
if preservedSocketGroupStateByKey then
849+
local restoredMainSocketGroup
850+
for index, socketGroup in ipairs(self.build.skillsTab.socketGroupList) do
851+
local stateList = preservedSocketGroupStateByKey[getSocketGroupReimportKey(socketGroup)]
852+
if stateList and stateList[1] then
853+
local state = t_remove(stateList, 1)
854+
applySocketGroupReimportState(socketGroup, state)
855+
if state.isMainGroup then
856+
restoredMainSocketGroup = index
857+
end
858+
end
859+
end
860+
if restoredMainSocketGroup then
861+
self.build.mainSocketGroup = restoredMainSocketGroup
862+
end
863+
end
804864
if mainSkillEmpty then
805865
self.build.mainSocketGroup = self:GuessMainSocketGroup()
806866
end

0 commit comments

Comments
 (0)