|
51 | 51 | --- Build class / spec cache |
52 | 52 | ---------------------- |
53 | 53 | do |
| 54 | + local initialSpecs = { |
| 55 | + [1] = 1446, |
| 56 | + [2] = 1451, |
| 57 | + [3] = 1448, |
| 58 | + [4] = 1453, |
| 59 | + [5] = 1452, |
| 60 | + [6] = 1455, |
| 61 | + [7] = 1444, |
| 62 | + [8] = 1449, |
| 63 | + [9] = 1454, |
| 64 | + [10] = 1450, |
| 65 | + [11] = 1447, |
| 66 | + [12] = 1456, |
| 67 | + [13] = 1465, |
| 68 | + }; |
54 | 69 | for classID = 1, GetNumClasses() do |
55 | 70 | local _; |
56 | 71 | cache.classNames[classID], cache.classFiles[classID], _ = GetClassInfo(classID); |
57 | 72 | cache.specIndexToIdMap[classID] = {}; |
58 | 73 | cache.classSpecs[classID] = {}; |
59 | | - for specIndex = 1, GetNumSpecializationsForClassID(classID) do |
60 | | - local specID = GetSpecializationInfoForClassID(classID, specIndex); |
| 74 | + local numSpecs = GetNumSpecializationsForClassID(classID); |
| 75 | + for specIndex = 1, (numSpecs + 1) do |
| 76 | + local specID = GetSpecializationInfoForClassID(classID, specIndex) or initialSpecs[classID]; |
61 | 77 | local specName, _, specIcon = select(2, GetSpecializationInfoForSpecID(specID)); |
| 78 | + local isInitial = specIndex > numSpecs; |
| 79 | + if isInitial then |
| 80 | + specName = 'Initial ' .. cache.classNames[classID]; |
| 81 | + end |
62 | 82 | if specName ~= '' then |
63 | 83 | cache.specNames[specID] = specName; |
64 | 84 | cache.classSpecs[classID][specID] = specName; |
65 | 85 | cache.specIndexToIdMap[classID][specIndex] = specID; |
66 | | - cache.specIconId[specID] = specIcon; |
| 86 | + cache.specIconId[specID] = not isInitial and specIcon or ('interface/icons/classicon_' .. cache.classFiles[classID]); |
67 | 87 | cache.specIdToClassIdMap[specID] = classID; |
68 | 88 | end |
69 | 89 | end |
@@ -361,8 +381,8 @@ function TalentViewer:InitDropdown() |
361 | 381 | local specList = {}; |
362 | 382 | local specListReverse = {}; |
363 | 383 | local index = 1; |
364 | | - for _, classSpecs in pairs(cache.classSpecs) do |
365 | | - for specID, _ in pairs(classSpecs) do |
| 384 | + for classID, _ in ipairs(cache.classSpecs) do |
| 385 | + for _, specID in ipairs(cache.specIndexToIdMap[classID]) do |
366 | 386 | specList[index] = specID; |
367 | 387 | specListReverse[specID] = index; |
368 | 388 | index = index + 1; |
@@ -408,23 +428,22 @@ function TalentViewer:BuildMenu(rootDescription) |
408 | 428 | self:SelectSpec(cache.specIdToClassIdMap[specID], specID, true); |
409 | 429 | end |
410 | 430 |
|
411 | | - for classID, classSpecs in pairs(cache.classSpecs) do |
| 431 | + for classID, _ in ipairs(cache.classSpecs) do |
| 432 | + local nameFormat = '|T%s:16|t %s'; |
412 | 433 | local elementDescription = rootDescription:CreateRadio( |
413 | | - string.format( |
414 | | - '|Tinterface/icons/classicon_%s:16|t %s', |
415 | | - cache.classFiles[classID], |
| 434 | + nameFormat:format( |
| 435 | + 'interface/icons/classicon_' .. cache.classFiles[classID], |
416 | 436 | cache.classNames[classID] |
417 | 437 | ), |
418 | 438 | isClassSelected, |
419 | 439 | nil, |
420 | 440 | classID |
421 | 441 | ); |
422 | | - for specID, specName in pairs(classSpecs) do |
| 442 | + for _, specID in ipairs(cache.specIndexToIdMap[classID]) do |
423 | 443 | elementDescription:CreateRadio( |
424 | | - string.format( |
425 | | - '|T%d:16|t %s', |
| 444 | + nameFormat:format( |
426 | 445 | cache.specIconId[specID], |
427 | | - specName |
| 446 | + cache.specNames[specID] |
428 | 447 | ), |
429 | 448 | isSpecSelected, |
430 | 449 | selectSpec, |
|
0 commit comments