From 63c80a2fe926fd8610f17ecd0627490023367608 Mon Sep 17 00:00:00 2001 From: Kevin Lyles Date: Fri, 23 Oct 2009 17:21:08 -0500 Subject: [PATCH] Fixed the order of categories, classes, and weights changed dataVersion to 3 --- Upgrade.lua | 100 +++++++++++++++++++++++++++++++++++++++++++++++-- WeightsWatcher.lua | 8 ++-- config.lua | 106 ++++++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 188 insertions(+), 26 deletions(-) diff --git a/Upgrade.lua b/Upgrade.lua index 6474de4..6b52738 100644 --- a/Upgrade.lua +++ b/Upgrade.lua @@ -119,6 +119,94 @@ noop_down = [[ end ]] +function upgradeAccountToOrderedLists(vars) + local i, j = 1 + local weightsListCopy = {} + + for class, weights in pairs(vars.weightsList) do + if type(class) ~= "string" then + print("WeightsWatcher: Error: class name has type " .. type(class) .. ", expecting string.") + return nil + end + weightsListCopy[i] = class + weightsListCopy[class] = {} + j = 1 + for weight, stats in pairs(weights) do + if type(weight) ~= "string" then + print("WeightsWatcher: Error: weight name for class " .. class .. " has type " .. type(weight) .. ", expecting string.") + return nil + end + weightsListCopy[class][j] = weight + weightsListCopy[class][weight] = stats + j = j + 1 + end + i = i + 1 + end + + vars.weightsList = weightsListCopy + vars.dataMinorVersion = 4 + return vars +end + +downgradeAccountFromOrderedLists = [[ + return function(vars) + local weightsListCopy = {} + + for i, class in ipairs(vars.weightsList) do + weightsListCopy[class] = {} + for j, weight in ipairs(vars.weightsList[class]) do + weightsListCopy[class][weight] = class[weight] + end + end + vars.weightsList = weightsListCopy + + vars.dataMinorVersion = 3 + return vars + end +]] + +function upgradeCharToOrderedLists(vars) + local i = 1 + local activeWeightsCopy = {} + + for class, weights in pairs(vars.activeWeights) do + if type(class) ~= "string" then + print("WeightsWatcher: Error: class name has type " .. type(class) .. ", expecting string.") + return nil + end + activeWeightsCopy[i] = class + activeWeightsCopy[class] = {} + for j, weight in pairs(weights) do + if type(weight) ~= "string" then + print("WeightsWatcher: Error: weight name has type " .. type(weight) .. ", expecting string.") + return nil + end + activeWeightsCopy[class][j] = weight + end + i = i + 1 + end + + vars.activeWeights = activeWeightsCopy + vars.dataMinorVersion = 2 + return vars +end + +downgradeCharFromOrderedLists = [[ + return function(vars) + local activeWeightsCopy = {} + + for i, class in ipairs(vars.activeWeights) do + activeWeightsCopy[class] = {} + for j, weight in ipairs(vars.activeWeights[class]) do + activeWeightsCopy[class][j] = weight + end + end + vars.activeWeights = activeWeightsCopy + + vars.dataMinorVersion = 1 + return vars + end +]] function upgradeAccountToGemQuality(vars) if not vars.options.gemQualityLimit then @@ -146,11 +234,11 @@ function copyDefaultAccountVars() end function createActiveWeights(class) - local activeWeights = {} + local activeWeights = {class} activeWeights[class] = {} - for name, _ in pairs(ww_vars.weightsList[class]) do - table.insert(activeWeights[class], name) + for i, name in ipairs(ww_vars.weightsList[class]) do + activeWeights[class][i] = name end return activeWeights @@ -170,6 +258,7 @@ upgradeAccountFunctions = { [0] = function(vars) return copyDefaultAccountVars() end, [1] = function(vars) return upgradeAccountToNormalization(vars) end, [2] = function(vars) return upgradeAccountToGemQuality(vars) end, + [3] = function(vars) return upgradeAccountToOrderedLists(vars) end, }, } @@ -177,14 +266,19 @@ downgradeAccountFunctions = { [0] = { [2] = noop_down, [3] = noop_down, + [4] = downgradeAccountFromOrderedLists, }, } upgradeCharFunctions = { [0] = { [0] = function(vars) return copyDefaultCharVars() end, + [1] = function(vars) return upgradeCharToOrderedLists(vars) end, }, } downgradeCharFunctions = { + [0] = { + [2] = downgradeCharFromOrderedLists, + }, } diff --git a/WeightsWatcher.lua b/WeightsWatcher.lua index 3aad984..e726d79 100644 --- a/WeightsWatcher.lua +++ b/WeightsWatcher.lua @@ -112,9 +112,9 @@ function WeightsWatcher:displayItemStats(tooltip, ttname) end tooltip:AddLine("Current Weights:") - for class, weights in pairs(ww_charVars.activeWeights) do + for _, class in ipairs(ww_charVars.activeWeights) do if ww_vars.weightsList[class] then - for _, weight in pairs(weights) do + for _, weight in pairs(ww_charVars.activeWeights[class]) do if ww_vars.weightsList[class][weight] then tooltip:AddDoubleLine(" " .. weight, string.format("%.3f", WeightsWatcher:calculateWeight(normalStats, socketBonusActive, socketBonusStat, gemStats, ww_vars.weightsList[class][weight]))) end @@ -125,9 +125,9 @@ function WeightsWatcher:displayItemStats(tooltip, ttname) -- TODO: move this inline (put it in parentheses?)? if #(sockets) > 0 then tooltip:AddLine("Ideally Gemmed Weights:") - for class, weights in pairs(ww_charVars.activeWeights) do + for _, class in ipairs(ww_charVars.activeWeights) do if ww_vars.weightsList[class] then - for _, weight in pairs(weights) do + for _, weight in pairs(ww_charVars.activeWeights[class]) do if ww_vars.weightsList[class][weight] then bestGems = {} bestGemsIgnoreSocket = {} diff --git a/config.lua b/config.lua index 08e4ae2..edfe593 100644 --- a/config.lua +++ b/config.lua @@ -26,9 +26,9 @@ StaticPopupDialogs["WW_CONFIRM_RESTORE_DEFAULTS"] = { button1 = "Restore Defaults", button2 = "Cancel", OnAccept = function() - for class, weights in pairs(defaultVars.weightsList) do - for weight, stats in pairs(weights) do - setWeight(class, weight, stats) + for _, class in ipairs(defaultVars.weightsList) do + for _, weight in ipairs(defaultVars.weightsList[class]) do + setWeight(class, weight, defaultVars.weightsList[class][weight]) end end ww_config.rightPanel:Hide() @@ -170,7 +170,7 @@ function configSaveWeight(weight) end function deleteWeight(weight) - local point, relativeTo, relativePoint, xOffset, yOffset + local point, relativeTo, relativePoint, xOffset, yOffset, removed weight.category.length = weight.category.length - 1 for _, weightFrame in ipairs({weight.category:GetChildren()}) do @@ -197,7 +197,29 @@ function deleteWeight(weight) weight:Hide() weight:SetParent(nil) + removed = false + for i, name in ipairs(ww_vars.weightsList[weight.category.class]) do + if removed then + ww_vars.weightsList[weight.category.class][i - 1] = ww_vars.weightsList[weight.category.class][i] + ww_vars.weightsList[weight.category.class][i] = nil + elseif name == weight.name then + ww_vars.weightsList[weight.category.class][i] = nil + removed = true + end + end ww_vars.weightsList[weight.category.class][weight.name] = nil + removed = false + if ww_charVars.activeWeights[weight.category.class] then + for i, name in ipairs(ww_charVars.activeWeights[weight.category.class]) do + if removed then + ww_charVars.activeWeights[weight.category.class][i - 1] = ww_charVars.activeWeights[weight.category.class][i] + ww_charVars.activeWeights[weight.category.class][i] = nil + elseif name == weight.name then + ww_charVars.activeWeights[weight.category.class][i] = nil + removed = true + end + end + end ww_config.rightPanel:Hide() ww_config.leftPanel.scrollFrame:GetScript("OnShow")(ww_config.leftPanel.scrollFrame) end @@ -250,6 +272,7 @@ function setWeight(class, weight, statList) break end end + table.insert(ww_vars.weightsList[class], weight) ww_config.leftPanel.scrollFrame:GetScript("OnShow")(ww_config.leftPanel.scrollFrame) end ww_vars.weightsList[class][weight] = deepTableCopy(statList) @@ -257,14 +280,15 @@ end --loads the various class buttons onto the config frame function loadClassButtons() - local classes, revClassLookup = {}, {} - - for class, weights in pairs(ww_vars.weightsList) do - revClassLookup[classNames[class]] = class - class = classNames[class] - classes[class] = {} - for name, _ in pairs(weights) do - table.insert(classes[class], name) + local classes, revClassLookup, newClass = {}, {} + + for i, class in ipairs(ww_vars.weightsList) do + newClass = classNames[class] + revClassLookup[newClass] = class + classes[i] = newClass + classes[newClass] = {} + for j, name in ipairs(ww_vars.weightsList[class]) do + classes[newClass][j] = name end end @@ -313,9 +337,9 @@ end -- elementType is the element template type -- elementHeight is the height of each element function createScrollableTieredList(template, scrollFrame, scrolledFrame, categoryTable, elementTable, elementType, elementHeight) - local i, categoryFrame, elementFrame = 1 + local categoryFrame, elementFrame - for category, elements in pairs(template) do + for i, category in ipairs(template) do --for each category print the header and then the print the list of stats categoryFrame = CreateFrame("Frame", category, scrolledFrame, "ww_categoryFrame") categoryFrame.text:SetText(category) @@ -336,7 +360,7 @@ function createScrollableTieredList(template, scrollFrame, scrolledFrame, catego table.insert(categoryTable, categoryFrame) table.insert(elementTable, categoryFrame.text) categoryFrame.position = #(elementTable) - for j, element in ipairs(elements) do + for j, element in ipairs(template[category]) do elementFrame = CreateFrame("Frame", element, categoryTable[i], elementType) elementFrame.position = j elementFrame.category = categoryFrame @@ -349,7 +373,6 @@ function createScrollableTieredList(template, scrollFrame, scrolledFrame, catego categoryFrame:SetHeight(elementHeight * categoryFrame.length) categoryFrame.collapsed = false - i = i + 1 end end @@ -412,6 +435,12 @@ function DropDownOnClick(choice, dropdown) end trackedStats = { + [1] = "General", + [2] = "Tanking", + [3] = "Melee", + [4] = "Caster", + [5] = "Meta Gem Stats", + [6] = "Resistances", ["General"] = { "Stamina", "Critical Strike Rating", @@ -494,9 +523,23 @@ classNames = { defaultVars = { dataMajorVersion = 0, - dataMinorVersion = 3, + dataMinorVersion = 4, weightsList = { + [1] = "DEATHKNIGHT", + [2] = "DRUID", + [3] = "HUNTER", + [4] = "MAGE", + [5] = "PALADIN", + [6] = "PRIEST", + [7] = "ROGUE", + [8] = "SHAMAN", + [9] = "WARLOCK", + [10] = "WARRIOR", ["DEATHKNIGHT"] = { + [1] = "Blood DPS", + [2] = "Frost DPS", + [3] = "Unholy DPS", + [4] = "Tank", ["Blood DPS"] = { ["dps"] = 361, ["hit rating"] = 100, @@ -527,7 +570,7 @@ defaultVars = { ["haste rating"] = 26, ["armor penetration rating"] = 22, }, - ["Tanking"] = { + ["Tank"] = { ["dps"] = 432, ["parry rating"] = 103, ["hit rating"] = 100, @@ -544,6 +587,10 @@ defaultVars = { }, }, ["DRUID"] = { + [1] = "Balance", + [2] = "Feral DPS", + [3] = "Feral Tank", + [4] = "Restoration", ["Balance"] = { ["hit rating"] = 100, ["haste rating"] = 46, @@ -588,6 +635,9 @@ defaultVars = { }, }, ["HUNTER"] = { + [1] = "Beast Mastery", + [2] = "Marksmanship", + [3] = "Survival", ["Beast Mastery"] = { ["dps"] = 134, ["hit rating"] = 100, @@ -623,6 +673,9 @@ defaultVars = { }, }, ["MAGE"] = { + [1] = "Arcane", + [2] = "Fire", + [3] = "Frost", ["Arcane"] = { ["hit rating"] = 100, ["haste rating"] = 49, @@ -653,6 +706,9 @@ defaultVars = { }, }, ["PALADIN"] = { + [1] = "Holy", + [2] = "Protection", + [3] = "Retribution", ["Holy"] = { ["haste rating"] = 100, ["spell power"] = 55, @@ -689,6 +745,9 @@ defaultVars = { }, }, ["PRIEST"] = { + [1] = "Discipline", + [2] = "Holy", + [3] = "Shadow", ["Discipline"] = { ["mp5"] = 100, ["intellect"] = 89, @@ -717,6 +776,7 @@ defaultVars = { }, }, ["ROGUE"] = { + [1] = "All", ["All"] = { ["agility"] = 100, ["expertise rating"] = 100, @@ -730,6 +790,9 @@ defaultVars = { }, }, ["SHAMAN"] = { + [1] = "Elemental", + [2] = "Enhancement", + [3] = "Restoration", ["Elemental"] = { ["hit rating"] = 100, ["spell power"] = 65, @@ -759,6 +822,9 @@ defaultVars = { }, }, ["WARLOCK"] = { + [1] = "Affliction", + [2] = "Demonology", + [3] = "Destruction", ["Affliction"] = { ["spell power"] = 100, ["shadow spell damage"] = 88, @@ -794,6 +860,8 @@ defaultVars = { }, }, ["WARRIOR"] = { + [1] = "DPS", + [2] = "Protection", ["DPS"] = { ["expertise rating"] = 100, ["attack power"] = 34, @@ -831,6 +899,6 @@ defaultVars = { defaultCharVars = { dataMajorVersion = 0, - dataMinorVersion = 1, + dataMinorVersion = 2, activeWeights = {}, } -- 1.7.9.5