From ad3a0a8001023c11ce76538d2feba169d60620b6 Mon Sep 17 00:00:00 2001 From: Benjamin Staneck Date: Fri, 26 Jul 2024 18:52:57 +0200 Subject: [PATCH] Add StyLua and format all files --- .editorconfig | 2 +- basicOptions.lua | 466 +++--- browser.lua | 605 +++---- cspell.json | 31 + cvars.lua | 2212 +++++++++++++------------ gui/CVarConfigPanel.lua | 20 +- gui/ChatConfigPanel.lua | 126 +- gui/CombatConfigPanel.lua | 152 +- gui/FloatingCombatTextConfigPanel.lua | 805 +++++---- gui/GeneralConfigPanel.lua | 617 ++++--- gui/NameplateConfigPanel.lua | 94 +- gui/StatusTextConfigPanel.lua | 369 ++--- semlib/eve.lua | 76 +- semlib/semlib.xml | 6 +- semlib/widgets.lua | 879 +++++----- stylua.toml | 4 + utils.lua | 48 +- 17 files changed, 3339 insertions(+), 3173 deletions(-) create mode 100644 cspell.json create mode 100644 stylua.toml diff --git a/.editorconfig b/.editorconfig index 69fbfa8..004d27e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,7 +2,7 @@ root = true [*] indent_style = space -indent_size = 4 +indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true diff --git a/basicOptions.lua b/basicOptions.lua index a715cff..59e9fc0 100644 --- a/basicOptions.lua +++ b/basicOptions.lua @@ -3,9 +3,11 @@ local E = addon:Eve() local _G = _G local _SetCVar = SetCVar -- Keep a local copy of SetCVar so we don't call the hooked version local SetCVar = function(...) -- Suppress errors trying to set read-only cvars - -- Not ideal, but the api doesn't give us this information - local status, err = pcall(function(...) return _SetCVar(...) end, ...) - return status + -- Not ideal, but the api doesn't give us this information + local status, err = pcall(function(...) + return _SetCVar(...) + end, ...) + return status end local AceConfigRegistry = LibStub("AceConfigRegistry-3.0") @@ -17,119 +19,117 @@ AdvancedInterfaceOptionsSaved = {} local DBVersion = 3 local CVarBlacklist = { - -- Lowercase list of cvars to never record the value for, even if the user manually sets them - ['playintromovie'] = true, + -- Lowercase list of cvars to never record the value for, even if the user manually sets them + ["playintromovie"] = true, } -- Saved settings local DefaultSettings = { - AccountVars = {}, -- account-wide cvars to be re-applied on login, [cvar] = value - CharVars = {}, -- (todo) character-specific cvar settings? [charName-realm] = { [cvar] = value } - EnforceSettings = false, -- true to load cvars from our saved variables every time we log in - -- this will override anything that sets a cvar outside of this addon - CustomVars = {}, -- custom options for missing/removed cvars - ModifiedCVars = {}, -- [cvar:lower()] = 'last addon to modify it' - DBVersion = DBVersion, -- Database version for wiping out incompatible data + AccountVars = {}, -- account-wide cvars to be re-applied on login, [cvar] = value + CharVars = {}, -- (todo) character-specific cvar settings? [charName-realm] = { [cvar] = value } + EnforceSettings = false, -- true to load cvars from our saved variables every time we log in + -- this will override anything that sets a cvar outside of this addon + CustomVars = {}, -- custom options for missing/removed cvars + ModifiedCVars = {}, -- [cvar:lower()] = 'last addon to modify it' + DBVersion = DBVersion, -- Database version for wiping out incompatible data } local AlwaysCharacterSpecificCVars = { - -- list of cvars that should never be account-wide - -- [cvar] = true - -- stopAutoAttackOnTargetChange + -- list of cvars that should never be account-wide + -- [cvar] = true + -- stopAutoAttackOnTargetChange } local AddonLoaded, VariablesLoaded = false, false function E:VARIABLES_LOADED() - VariablesLoaded = true - if AddonLoaded then - self:ADDON_LOADED(addonName) - end + VariablesLoaded = true + if AddonLoaded then + self:ADDON_LOADED(addonName) + end end function E:ADDON_LOADED(addon_name) - if addon_name == addonName then - E:UnregisterEvent('ADDON_LOADED') - AddonLoaded = true - if VariablesLoaded then - E('Init') - end - end + if addon_name == addonName then + E:UnregisterEvent("ADDON_LOADED") + AddonLoaded = true + if VariablesLoaded then + E("Init") + end + end end local function MergeTable(a, b) -- Non-destructively merges table b into table a - for k,v in pairs(b) do - if a[k] == nil or type(a[k]) ~= type(b[k]) then - a[k] = v - -- print('replacing key', k, v) - elseif type(v) == 'table' then - a[k] = MergeTable(a[k], b[k]) - end - end - return a + for k, v in pairs(b) do + if a[k] == nil or type(a[k]) ~= type(b[k]) then + a[k] = v + -- print('replacing key', k, v) + elseif type(v) == "table" then + a[k] = MergeTable(a[k], b[k]) + end + end + return a end function E:Init() -- Runs after our saved variables are loaded and cvars have been loaded - if AdvancedInterfaceOptionsSaved.DBVersion ~= DBVersion then - -- Wipe out previous settings if database versions don't match - AdvancedInterfaceOptionsSaved['DBVersion'] = DBVersion - AdvancedInterfaceOptionsSaved['AccountVars'] = {} - end - MergeTable(AdvancedInterfaceOptionsSaved, DefaultSettings) -- Repair database if keys are missing - + if AdvancedInterfaceOptionsSaved.DBVersion ~= DBVersion then + -- Wipe out previous settings if database versions don't match + AdvancedInterfaceOptionsSaved["DBVersion"] = DBVersion + AdvancedInterfaceOptionsSaved["AccountVars"] = {} + end + MergeTable(AdvancedInterfaceOptionsSaved, DefaultSettings) -- Repair database if keys are missing - if AdvancedInterfaceOptionsSaved.EnforceSettings then - if not AdvancedInterfaceOptionsSaved.AccountVars then - AdvancedInterfaceOptionsSaved['AccountVars'] = {} - end - for cvar, value in pairs(AdvancedInterfaceOptionsSaved.AccountVars) do - if addon.hiddenOptions[cvar] and addon:CVarExists(cvar) and not CVarBlacklist[cvar:lower()] then -- confirm we still use this cvar - if GetCVar(cvar) ~= value then - if not InCombatLockdown() or not addon.combatProtected[cvar] then - SetCVar(cvar, value) - -- print('Loading cvar', cvar, value) - end - end - else -- remove if cvar is no longer supported - AdvancedInterfaceOptionsSaved.AccountVars[cvar] = nil - end - end - end - - --Register our options with the Blizzard Addon Options panel - AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions", addon:CreateGeneralOptions()) - AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_Chat", addon:CreateChatOptions()) - AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_Combat", addon:CreateCombatOptions()) - AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_FloatingCombatText", addon:CreateFloatingCombatTextOptions()) - AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_StatusText", addon:CreateStatusTextOptions()) - AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_Nameplate", addon:CreateNameplateOptions()) - AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_cVar", addon:CreateCVarOptions()) + if AdvancedInterfaceOptionsSaved.EnforceSettings then + if not AdvancedInterfaceOptionsSaved.AccountVars then + AdvancedInterfaceOptionsSaved["AccountVars"] = {} + end + for cvar, value in pairs(AdvancedInterfaceOptionsSaved.AccountVars) do + if addon.hiddenOptions[cvar] and addon:CVarExists(cvar) and not CVarBlacklist[cvar:lower()] then -- confirm we still use this cvar + if GetCVar(cvar) ~= value then + if not InCombatLockdown() or not addon.combatProtected[cvar] then + SetCVar(cvar, value) + -- print('Loading cvar', cvar, value) + end + end + else -- remove if cvar is no longer supported + AdvancedInterfaceOptionsSaved.AccountVars[cvar] = nil + end + end + end + --Register our options with the Blizzard Addon Options panel + AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions", addon:CreateGeneralOptions()) + AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_Chat", addon:CreateChatOptions()) + AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_Combat", addon:CreateCombatOptions()) + AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_FloatingCombatText", addon:CreateFloatingCombatTextOptions()) + AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_StatusText", addon:CreateStatusTextOptions()) + AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_Nameplate", addon:CreateNameplateOptions()) + AceConfigRegistry:RegisterOptionsTable("AdvancedInterfaceOptions_cVar", addon:CreateCVarOptions()) - local categoryFrame, mainCategoryID = AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions", "AdvancedInterfaceOptions") - AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_Chat", "Chat", "AdvancedInterfaceOptions") - AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_Combat", "Combat", "AdvancedInterfaceOptions") - AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_FloatingCombatText", "Floating Combat Text", "AdvancedInterfaceOptions") - AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_StatusText", "Status Text", "AdvancedInterfaceOptions") - AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_Nameplate", "Nameplates", "AdvancedInterfaceOptions") - local cVarFrame, cVarCategoryID = AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_cVar", "CVar Browser", "AdvancedInterfaceOptions") + local categoryFrame, mainCategoryID = AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions", "AdvancedInterfaceOptions") + AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_Chat", "Chat", "AdvancedInterfaceOptions") + AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_Combat", "Combat", "AdvancedInterfaceOptions") + AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_FloatingCombatText", "Floating Combat Text", "AdvancedInterfaceOptions") + AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_StatusText", "Status Text", "AdvancedInterfaceOptions") + AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_Nameplate", "Nameplates", "AdvancedInterfaceOptions") + local cVarFrame, cVarCategoryID = AceConfigDialog:AddToBlizOptions("AdvancedInterfaceOptions_cVar", "CVar Browser", "AdvancedInterfaceOptions") - -- Inject our custom cVar browser into the panel created by Ace3 - addon:PopulateCVarPanel(cVarFrame) - ------------------------------------------------------------------------- - ------------------------------------------------------------------------- + -- Inject our custom cVar browser into the panel created by Ace3 + addon:PopulateCVarPanel(cVarFrame) + ------------------------------------------------------------------------- + ------------------------------------------------------------------------- - -- Slash handler - SlashCmdList.AIO = function(msg) - msg = msg:lower() - if not InCombatLockdown() then - Settings.OpenToCategory(mainCategoryID) - else - DEFAULT_CHAT_FRAME:AddMessage(format("%s: Can't modify interface options in combat", addonName)) - end + -- Slash handler + SlashCmdList.AIO = function(msg) + msg = msg:lower() + if not InCombatLockdown() then + Settings.OpenToCategory(mainCategoryID) + else + DEFAULT_CHAT_FRAME:AddMessage(format("%s: Can't modify interface options in combat", addonName)) end - SLASH_AIO1 = "/aio" + end + SLASH_AIO1 = "/aio" - --[[SlashCmdList.CVAR = function() + --[[SlashCmdList.CVAR = function() if not InCombatLockdown() then -- Does not work, opens to main category Settings.OpenToCategory(cVarCategoryID) @@ -139,180 +139,180 @@ function E:Init() -- Runs after our saved variables are loaded and cvars have be end function addon:RecordCVar(cvar, value) -- Save cvar to DB for loading later - if not AlwaysCharacterSpecificCVars[cvar] then - -- We either need to normalize all cvars being entered into this table or verify that - -- the case matches the case in our database or we risk duplicating entries. - -- eg. MouseSpeed = 1, and mouseSpeed = 2 could exist in the table simultaneously, - -- which would lead to an indeterminate value being loaded on startup - local found = rawget(addon.hiddenOptions, cvar) - if not found then - local mk = cvar:lower() - for k,v in pairs(addon.hiddenOptions) do - if k:lower() == mk then - cvar = k - found = true - break - end - end - end - if found and not CVarBlacklist[cvar:lower()] then -- only record cvars that exist in our database - -- If we don't save the value if it's set to the default, and something else changes it from the default, we won't know to set it back - --if GetCVar(cvar) == GetCVarDefault(cvar) then -- don't bother recording if default value - -- AdvancedInterfaceOptionsSaved.AccountVars[cvar] = nil - --else - AdvancedInterfaceOptionsSaved.AccountVars[cvar] = GetCVar(cvar) -- not necessarily the same as "value" - --end - end - end + if not AlwaysCharacterSpecificCVars[cvar] then + -- We either need to normalize all cvars being entered into this table or verify that + -- the case matches the case in our database or we risk duplicating entries. + -- eg. MouseSpeed = 1, and mouseSpeed = 2 could exist in the table simultaneously, + -- which would lead to an indeterminate value being loaded on startup + local found = rawget(addon.hiddenOptions, cvar) + if not found then + local mk = cvar:lower() + for k, v in pairs(addon.hiddenOptions) do + if k:lower() == mk then + cvar = k + found = true + break + end + end + end + if found and not CVarBlacklist[cvar:lower()] then -- only record cvars that exist in our database + -- If we don't save the value if it's set to the default, and something else changes it from the default, we won't know to set it back + --if GetCVar(cvar) == GetCVarDefault(cvar) then -- don't bother recording if default value + -- AdvancedInterfaceOptionsSaved.AccountVars[cvar] = nil + --else + AdvancedInterfaceOptionsSaved.AccountVars[cvar] = GetCVar(cvar) -- not necessarily the same as "value" + --end + end + end end function addon:DontRecordCVar(cvar, value) -- Wipe out saved variable if another addon modifies it - if not AlwaysCharacterSpecificCVars[cvar] then - local found = rawget(addon.hiddenOptions, cvar) - if not found then - local mk = cvar:lower() - for k,v in pairs(addon.hiddenOptions) do - if k:lower() == mk then - cvar = k - found = true - break - end - end - end - if found then - AdvancedInterfaceOptionsSaved.AccountVars[cvar] = nil - end - end + if not AlwaysCharacterSpecificCVars[cvar] then + local found = rawget(addon.hiddenOptions, cvar) + if not found then + local mk = cvar:lower() + for k, v in pairs(addon.hiddenOptions) do + if k:lower() == mk then + cvar = k + found = true + break + end + end + end + if found then + AdvancedInterfaceOptionsSaved.AccountVars[cvar] = nil + end + end end function addon:SetCVar(cvar, value, ...) -- save our cvar to the db - if not InCombatLockdown() then - SetCVar(cvar, value, ...) - addon:RecordCVar(cvar, value) - -- Clear entry from ModifiedCVars if we're modifying it directly - -- Enforced settings don't use this function, so shouldn't wipe them out - if AdvancedInterfaceOptionsSaved.ModifiedCVars[cvar:lower()] then - AdvancedInterfaceOptionsSaved.ModifiedCVars[cvar:lower()] = nil - end - else - --print("Can't modify interface options in combat") - end + if not InCombatLockdown() then + SetCVar(cvar, value, ...) + addon:RecordCVar(cvar, value) + -- Clear entry from ModifiedCVars if we're modifying it directly + -- Enforced settings don't use this function, so shouldn't wipe them out + if AdvancedInterfaceOptionsSaved.ModifiedCVars[cvar:lower()] then + AdvancedInterfaceOptionsSaved.ModifiedCVars[cvar:lower()] = nil + end + else + --print("Can't modify interface options in combat") + end end ------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Button to reset all of our settings back to their defaults -StaticPopupDialogs['AIO_RESET_EVERYTHING'] = { - text = 'Type "IRREVERSIBLE" into the text box to reset all CVars to their default settings', - button1 = 'Confirm', - button2 = 'Cancel', - hasEditBox = true, - OnShow = function(self) - self.button1:SetEnabled(false) - end, - EditBoxOnTextChanged = function(self, data) - self:GetParent().button1:SetEnabled(self:GetText():lower() == 'irreversible') - end, - OnAccept = function() - for _, info in ipairs(addon:GetCVars()) do - local cvar = info.command - local current, default = GetCVarInfo(cvar) - if current ~= default then - print(format('|cffaaaaff%s|r reset from |cffffaaaa%s|r to |cffaaffaa%s|r', tostring(cvar), tostring(current), tostring(default))) - addon:SetCVar(cvar, default) - end - end - wipe(AdvancedInterfaceOptionsSaved.CustomVars) - end, - timeout = 0, - whileDead = true, - hideOnEscape = true, - preferredIndex = 3, - showAlert = true, +StaticPopupDialogs["AIO_RESET_EVERYTHING"] = { + text = 'Type "IRREVERSIBLE" into the text box to reset all CVars to their default settings', + button1 = "Confirm", + button2 = "Cancel", + hasEditBox = true, + OnShow = function(self) + self.button1:SetEnabled(false) + end, + EditBoxOnTextChanged = function(self, data) + self:GetParent().button1:SetEnabled(self:GetText():lower() == "irreversible") + end, + OnAccept = function() + for _, info in ipairs(addon:GetCVars()) do + local cvar = info.command + local current, default = GetCVarInfo(cvar) + if current ~= default then + print(format("|cffaaaaff%s|r reset from |cffffaaaa%s|r to |cffaaffaa%s|r", tostring(cvar), tostring(current), tostring(default))) + addon:SetCVar(cvar, default) + end + end + wipe(AdvancedInterfaceOptionsSaved.CustomVars) + end, + timeout = 0, + whileDead = true, + hideOnEscape = true, + preferredIndex = 3, + showAlert = true, } -- Backup Settings function addon.BackupSettings() - --[[ + --[[ FIXME: We probably don't actually want to back up every CVar Some CVars use bitfields to track progress that the player likely isn't expecting to be undone by a restore We may need to manually create a list of CVars to ignore, I don't know if there's a way to automate this --]] - local cvarBackup = {} - local settingCount = 0 - for _, info in ipairs(addon:GetCVars()) do - -- Only record CVars that don't match their default value - -- NOTE: Defaults can potentially change, should we store every cvar? - local currentValue, defaultValue = GetCVarInfo(info.command) - if currentValue ~= defaultValue then - -- Normalize casing to simplify lookups - local cvar = info.command:lower() - cvarBackup[cvar] = currentValue - settingCount = settingCount + 1 - end - end + local cvarBackup = {} + local settingCount = 0 + for _, info in ipairs(addon:GetCVars()) do + -- Only record CVars that don't match their default value + -- NOTE: Defaults can potentially change, should we store every cvar? + local currentValue, defaultValue = GetCVarInfo(info.command) + if currentValue ~= defaultValue then + -- Normalize casing to simplify lookups + local cvar = info.command:lower() + cvarBackup[cvar] = currentValue + settingCount = settingCount + 1 + end + end - -- TODO: Support multiple backups (save & restore named cvar profiles) - if not AdvancedInterfaceOptionsSaved.Backups then - AdvancedInterfaceOptionsSaved.Backups = {} - end - AdvancedInterfaceOptionsSaved.Backups[1] = { - timestamp = GetServerTime(), - cvars = cvarBackup, - } + -- TODO: Support multiple backups (save & restore named cvar profiles) + if not AdvancedInterfaceOptionsSaved.Backups then + AdvancedInterfaceOptionsSaved.Backups = {} + end + AdvancedInterfaceOptionsSaved.Backups[1] = { + timestamp = GetServerTime(), + cvars = cvarBackup, + } - print(format("AIO: Backed up %d customized CVar settings!", settingCount)) + print(format("AIO: Backed up %d customized CVar settings!", settingCount)) end StaticPopupDialogs["AIO_BACKUP_SETTINGS"] = { - text = "Save current CVar settings to restore later?", - button1 = "Backup Settings", - button2 = "Cancel", - OnAccept = addon.BackupSettings, - timeout = 0, - whileDead = true, - hideOnEscape = true, - preferredIndex = 3, + text = "Save current CVar settings to restore later?", + button1 = "Backup Settings", + button2 = "Cancel", + OnAccept = addon.BackupSettings, + timeout = 0, + whileDead = true, + hideOnEscape = true, + preferredIndex = 3, } -- Restore Settings function addon.RestoreSettings() - local backup = AdvancedInterfaceOptionsSaved.Backups and AdvancedInterfaceOptionsSaved.Backups[1] - if backup then - for _, info in ipairs(addon:GetCVars()) do - local cvar = info.command - local backupValue = backup.cvars[cvar:lower()] -- Always lowercase cvar names - local currentValue, defaultValue = GetCVarInfo(cvar) - if backupValue then - -- Restore value from backup - if currentValue ~= backupValue then - print(format('|cffaaaaff%s|r changed from |cffffaaaa%s|r to |cffaaffaa%s|r', cvar, tostring(currentValue), tostring(backupValue))) - addon:SetCVar(cvar, backupValue) - end - else - -- CHECKME: If CVar isn't in backup and isn't set to default value, should we reset to default or ignore it? - if currentValue ~= defaultValue then - print(format('|cffaaaaff%s|r changed from |cffffaaaa%s|r to |cffaaffaa%s|r', cvar, tostring(currentValue), tostring(defaultValue))) - addon:SetCVar(cvar, defaultValue) - end - end - end - end + local backup = AdvancedInterfaceOptionsSaved.Backups and AdvancedInterfaceOptionsSaved.Backups[1] + if backup then + for _, info in ipairs(addon:GetCVars()) do + local cvar = info.command + local backupValue = backup.cvars[cvar:lower()] -- Always lowercase cvar names + local currentValue, defaultValue = GetCVarInfo(cvar) + if backupValue then + -- Restore value from backup + if currentValue ~= backupValue then + print(format("|cffaaaaff%s|r changed from |cffffaaaa%s|r to |cffaaffaa%s|r", cvar, tostring(currentValue), tostring(backupValue))) + addon:SetCVar(cvar, backupValue) + end + else + -- CHECKME: If CVar isn't in backup and isn't set to default value, should we reset to default or ignore it? + if currentValue ~= defaultValue then + print(format("|cffaaaaff%s|r changed from |cffffaaaa%s|r to |cffaaffaa%s|r", cvar, tostring(currentValue), tostring(defaultValue))) + addon:SetCVar(cvar, defaultValue) + end + end + end + end end StaticPopupDialogs["AIO_RESTORE_SETTINGS"] = { - text = "Restore CVar settings from backup?\nNote: This can't be undone!", - button1 = "Restore Settings", - button2 = "Cancel", - OnAccept = addon.RestoreSettings, - OnShow = function(self) - -- Disable accept button if we don't have any backups - self.button1:SetEnabled(AdvancedInterfaceOptionsSaved.Backups and AdvancedInterfaceOptionsSaved.Backups[1]) - end, - timeout = 0, - whileDead = true, - hideOnEscape = true, - preferredIndex = 3, - showAlert = true, + text = "Restore CVar settings from backup?\nNote: This can't be undone!", + button1 = "Restore Settings", + button2 = "Cancel", + OnAccept = addon.RestoreSettings, + OnShow = function(self) + -- Disable accept button if we don't have any backups + self.button1:SetEnabled(AdvancedInterfaceOptionsSaved.Backups and AdvancedInterfaceOptionsSaved.Backups[1]) + end, + timeout = 0, + whileDead = true, + hideOnEscape = true, + preferredIndex = 3, + showAlert = true, } diff --git a/browser.lua b/browser.lua index 852c2f7..175368d 100644 --- a/browser.lua +++ b/browser.lua @@ -9,16 +9,16 @@ local GetCVarInfo = addon.GetCVarInfo local CVarList = {} local function UpdateCVarList() - for i, info in pairs(addon:GetCVars()) do - local cvar = info.command - if addon.hiddenOptions[cvar] then - CVarList[cvar] = addon.hiddenOptions[cvar] - else - CVarList[cvar] = { - description = info.help, - } - end + for i, info in pairs(addon:GetCVars()) do + local cvar = info.command + if addon.hiddenOptions[cvar] then + CVarList[cvar] = addon.hiddenOptions[cvar] + else + CVarList[cvar] = { + description = info.help, + } end + end end ------------------------------------------------------- @@ -29,21 +29,23 @@ local SVLoaded = false -- we can't record any changes until after our own saved local TempTraces = {} -- [cvar:lower()] = {source, value} function E:Init() - SVLoaded = true - for cvar, trace in pairs(TempTraces) do -- commit temp vars to sv - local source, value = trace.source, trace.value - local currentValue = GetCVar(cvar) - if value == currentValue then -- only record if the 2 values match, otherwise we probably overwrote it with our own - AdvancedInterfaceOptionsSaved.ModifiedCVars[ cvar ] = source - addon:DontRecordCVar(cvar, value) - end + SVLoaded = true + for cvar, trace in pairs(TempTraces) do -- commit temp vars to sv + local source, value = trace.source, trace.value + local currentValue = GetCVar(cvar) + if value == currentValue then -- only record if the 2 values match, otherwise we probably overwrote it with our own + AdvancedInterfaceOptionsSaved.ModifiedCVars[cvar] = source + addon:DontRecordCVar(cvar, value) end + end end local function TraceCVar(cvar, value, ...) - if not addon:CVarExists(cvar) then return end + if not addon:CVarExists(cvar) then + return + end - --[=[ + --[=[ -- Example calls to debugstack(2) as of patch 9.1.5 -- A call to `SetCVar' results in this hook running twice because SetCVar is a wrapper for C_CVar.SetCVar @@ -58,314 +60,315 @@ local function TraceCVar(cvar, value, ...) [string "@Interface\AddOns\AdvancedInterfaceOptions\browser.lua"]:89: in main chunk ]=] - local trace = debugstack(2) - local source, lineNum = trace:match("\"@([^\"]+)\"%]:(%d+)") + local trace = debugstack(2) + local source, lineNum = trace:match('"@([^"]+)"%]:(%d+)') + if not source then + -- Attempt to pull source out of "in function " string + source, lineNum = trace:match("in function <([^:%[>]+):(%d+)>") if not source then - -- Attempt to pull source out of "in function " string - source, lineNum = trace:match("in function <([^:%[>]+):(%d+)>") - if not source then - -- Give up and record entire traceback - source = trace - lineNum = "(unhandled exception)" - end + -- Give up and record entire traceback + source = trace + lineNum = "(unhandled exception)" end - -- Ignore C_CVar.SetCVar hook if it originated from CvarUtil.lua or ClassicCvarUtil.lua - if source and not (source:lower():find("[_\\/]sharedxml[\\/]cvarutil%.lua") or source:lower():find("[_\\/]sharedxml[\\/]classiccvarutil%.lua")) then - local realValue = GetCVar(cvar) -- the client does some conversions to the original value - if SVLoaded then - AdvancedInterfaceOptionsSaved.ModifiedCVars[ cvar:lower() ] = source .. ':' .. lineNum - addon:DontRecordCVar(cvar, realValue) - else - -- this will still record blame for an addon even if we overwrite their setting - TempTraces[cvar:lower()] = { - source = source .. ':' .. lineNum, - value = realValue, - } - end + end + -- Ignore C_CVar.SetCVar hook if it originated from CvarUtil.lua or ClassicCvarUtil.lua + if source and not (source:lower():find("[_\\/]sharedxml[\\/]cvarutil%.lua") or source:lower():find("[_\\/]sharedxml[\\/]classiccvarutil%.lua")) then + local realValue = GetCVar(cvar) -- the client does some conversions to the original value + if SVLoaded then + AdvancedInterfaceOptionsSaved.ModifiedCVars[cvar:lower()] = source .. ":" .. lineNum + addon:DontRecordCVar(cvar, realValue) + else + -- this will still record blame for an addon even if we overwrite their setting + TempTraces[cvar:lower()] = { + source = source .. ":" .. lineNum, + value = realValue, + } end + end end -hooksecurefunc('SetCVar', TraceCVar) -- /script SetCVar(cvar, value) +hooksecurefunc("SetCVar", TraceCVar) -- /script SetCVar(cvar, value) if C_CVar and C_CVar.SetCVar then - hooksecurefunc(C_CVar, 'SetCVar', TraceCVar) -- C_CVar.SetCVar(cvar, value) + hooksecurefunc(C_CVar, "SetCVar", TraceCVar) -- C_CVar.SetCVar(cvar, value) end -hooksecurefunc('ConsoleExec', function(msg) - local cmd, cvar, value = msg:match('^(%S+)%s+(%S+)%s*(%S*)') - if cmd then - if cmd:lower() == 'set' then -- /console SET cvar value - TraceCVar(cvar, value) - else -- /console cvar value - TraceCVar(cmd, cvar) - end +hooksecurefunc("ConsoleExec", function(msg) + local cmd, cvar, value = msg:match("^(%S+)%s+(%S+)%s*(%S*)") + if cmd then + if cmd:lower() == "set" then -- /console SET cvar value + TraceCVar(cvar, value) + else -- /console cvar value + TraceCVar(cmd, cvar) end + end end) local SetCVar = function(cvar, value) - addon:SetCVar(cvar, value) + addon:SetCVar(cvar, value) end - -- Injects the CVar browser into the options panel created by Ace3 function addon:PopulateCVarPanel(OptionsPanel) - - local Title = OptionsPanel:CreateFontString(nil, 'ARTWORK', 'GameFontNormalLarge') - Title:SetJustifyV('TOP') - Title:SetJustifyH('LEFT') - Title:SetPoint('TOPLEFT', 10, -16) - Title:SetText("CVar Browser") - - local SubText = OptionsPanel:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight') - SubText:SetMaxLines(3) - SubText:SetNonSpaceWrap(true) - SubText:SetJustifyV('TOP') - SubText:SetJustifyH('LEFT') - SubText:SetPoint('TOPLEFT', Title, 'BOTTOMLEFT', 0, -12) - SubText:SetPoint('RIGHT', -32, 0) - SubText:SetText('These options allow you to modify various CVars within the game.') - - -- FilterBox should adjust the contents of the list frame based on the input text - -- todo: Display grey "Search" text in the box if it's empty - local FilterBox = CreateFrame('editbox', nil, OptionsPanel, 'InputBoxTemplate') - FilterBox:SetPoint('TOPLEFT', SubText, 'BOTTOMLEFT', 5, -10) - FilterBox:SetPoint('RIGHT', OptionsPanel, 'RIGHT', -40, 0) - FilterBox:SetHeight(20) - FilterBox:SetAutoFocus(false) - FilterBox:ClearFocus() - FilterBox:SetScript('OnEscapePressed', function(self) - self:SetAutoFocus(false) -- Allow focus to clear when escape is pressed - self:ClearFocus() - end) - FilterBox:SetScript('OnEnterPressed', function(self) - self:SetAutoFocus(false) -- Clear focus when enter is pressed because ketho said so - self:ClearFocus() - end) - FilterBox:SetScript('OnEditFocusGained', function(self) - self:SetAutoFocus(true) - self:HighlightText() - end) - - local CVarTable = {} - local ListFrame = addon:CreateListFrame(OptionsPanel, 650, 465, {{NAME, 200}, {'Description', 260, 'LEFT'}, {'Value', 100, 'RIGHT'}}) - ListFrame:SetPoint('TOP', FilterBox, 'BOTTOM', 0, -20) - ListFrame:SetPoint('BOTTOMLEFT', 0, 15) - ListFrame:SetItems(CVarTable) - - ListFrame.Bg:SetAlpha(0.8) - - FilterBox:SetMaxLetters(100) - - -- Escape special characters for matching a literal string - local function Literalize(str) - return str:gsub('[%(%)%.%%%+%-%*%?%[%]%^%$]', '%%%1') - end - - -- Rewrite text pattern to be case-insensitive - local function UnCase(c) - return '[' .. strlower(c) .. strupper(c) .. ']' - end - - local FilteredTable = {} -- Filtered version of CVarTable based on search box input - - -- Filter displayed items based on value of FilterBox - local function FilterCVarList() - local text = FilterBox:GetText() - if text == '' then - -- set to default list - ListFrame:SetItems(CVarTable) - else - local pattern = Literalize(text):gsub('%a', UnCase) - -- filter based on text - wipe(FilteredTable) - for i = 1, #CVarTable do - local row = CVarTable[i] - for j = 2, #row - 1 do -- start at 2 to skip the hidden value column, not sure if we should include every column in the filter or not - local col = row[j] - -- Color the search query, this is pretty inefficient - local newtext, replacements = col:gsub(pattern, '|cffff0000%1|r') - if replacements > 0 then - local newrow = {row[1], [#row] = row[#row]} - for k = 2, #row - 1 do - newrow[k] = row[k]:gsub(pattern, '|cffff0000%1|r') - end - tinsert(FilteredTable, newrow) - break - end - end + local Title = OptionsPanel:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge") + Title:SetJustifyV("TOP") + Title:SetJustifyH("LEFT") + Title:SetPoint("TOPLEFT", 10, -16) + Title:SetText("CVar Browser") + + local SubText = OptionsPanel:CreateFontString(nil, "ARTWORK", "GameFontHighlight") + SubText:SetMaxLines(3) + SubText:SetNonSpaceWrap(true) + SubText:SetJustifyV("TOP") + SubText:SetJustifyH("LEFT") + SubText:SetPoint("TOPLEFT", Title, "BOTTOMLEFT", 0, -12) + SubText:SetPoint("RIGHT", -32, 0) + SubText:SetText("These options allow you to modify various CVars within the game.") + + -- FilterBox should adjust the contents of the list frame based on the input text + -- todo: Display grey "Search" text in the box if it's empty + local FilterBox = CreateFrame("editbox", nil, OptionsPanel, "InputBoxTemplate") + FilterBox:SetPoint("TOPLEFT", SubText, "BOTTOMLEFT", 5, -10) + FilterBox:SetPoint("RIGHT", OptionsPanel, "RIGHT", -40, 0) + FilterBox:SetHeight(20) + FilterBox:SetAutoFocus(false) + FilterBox:ClearFocus() + FilterBox:SetScript("OnEscapePressed", function(self) + self:SetAutoFocus(false) -- Allow focus to clear when escape is pressed + self:ClearFocus() + end) + FilterBox:SetScript("OnEnterPressed", function(self) + self:SetAutoFocus(false) -- Clear focus when enter is pressed because ketho said so + self:ClearFocus() + end) + FilterBox:SetScript("OnEditFocusGained", function(self) + self:SetAutoFocus(true) + self:HighlightText() + end) + + local CVarTable = {} + local ListFrame = addon:CreateListFrame(OptionsPanel, 650, 465, { { NAME, 200 }, { "Description", 260, "LEFT" }, { "Value", 100, "RIGHT" } }) + ListFrame:SetPoint("TOP", FilterBox, "BOTTOM", 0, -20) + ListFrame:SetPoint("BOTTOMLEFT", 0, 15) + ListFrame:SetItems(CVarTable) + + ListFrame.Bg:SetAlpha(0.8) + + FilterBox:SetMaxLetters(100) + + -- Escape special characters for matching a literal string + local function Literalize(str) + return str:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$]", "%%%1") + end + + -- Rewrite text pattern to be case-insensitive + local function UnCase(c) + return "[" .. strlower(c) .. strupper(c) .. "]" + end + + local FilteredTable = {} -- Filtered version of CVarTable based on search box input + + -- Filter displayed items based on value of FilterBox + local function FilterCVarList() + local text = FilterBox:GetText() + if text == "" then + -- set to default list + ListFrame:SetItems(CVarTable) + else + local pattern = Literalize(text):gsub("%a", UnCase) + -- filter based on text + wipe(FilteredTable) + for i = 1, #CVarTable do + local row = CVarTable[i] + for j = 2, #row - 1 do -- start at 2 to skip the hidden value column, not sure if we should include every column in the filter or not + local col = row[j] + -- Color the search query, this is pretty inefficient + local newtext, replacements = col:gsub(pattern, "|cffff0000%1|r") + if replacements > 0 then + local newrow = { row[1], [#row] = row[#row] } + for k = 2, #row - 1 do + newrow[k] = row[k]:gsub(pattern, "|cffff0000%1|r") end - ListFrame:SetItems(FilteredTable) + tinsert(FilteredTable, newrow) + break + end end + end + ListFrame:SetItems(FilteredTable) end - - FilterBox:SetScript('OnTextChanged', FilterCVarList) - - -- Returns a rounded integer or float, the default value, and whether it's set to its default value - local function GetPrettyCVar(cvar) - local value, default = GetCVarInfo(cvar) - --if not value then value = '|cff00ff00EROR' end - --if not default then default = '|cff00ff00EROR' end - if not default or not value then return '', false end -- this cvar doesn't exist - local isFloat = strmatch(value or '', '^-?%d+%.%d+$') - if isFloat then - value = format('%.2f', value):gsub("%.?0+$", "") - end - - local isDefault = tonumber(value) and tonumber(default) and (value - default == 0) or (value == default) - return value, default, isDefault + end + + FilterBox:SetScript("OnTextChanged", FilterCVarList) + + -- Returns a rounded integer or float, the default value, and whether it's set to its default value + local function GetPrettyCVar(cvar) + local value, default = GetCVarInfo(cvar) + --if not value then value = '|cff00ff00EROR' end + --if not default then default = '|cff00ff00EROR' end + if not default or not value then + return "", false + end -- this cvar doesn't exist + local isFloat = strmatch(value or "", "^-?%d+%.%d+$") + if isFloat then + value = format("%.2f", value):gsub("%.?0+$", "") end - -- Update CVarTable to reflect current values - local function RefreshCVarList() - wipe(CVarTable) - UpdateCVarList() - -- todo: this needs to be updated every time a cvar changes while the table is visible - for cvar, tbl in pairs(CVarList) do - local value, default, isDefault = GetPrettyCVar(cvar) + local isDefault = tonumber(value) and tonumber(default) and (value - default == 0) or (value == default) + return value, default, isDefault + end - if not(type(value) == 'string' and (value:byte(2) == 1 or value:byte(1) == 2)) then -- hack to strip tracking variables and filters from our table, maybe look for a better solution - tinsert(CVarTable, {cvar, cvar, tbl.description or '', isDefault and value or ('|cffff0000' .. value .. '|r')}) - end - end - --ListFrame:SetItems(CVarTable) - end + -- Update CVarTable to reflect current values + local function RefreshCVarList() + wipe(CVarTable) + UpdateCVarList() + -- todo: this needs to be updated every time a cvar changes while the table is visible + for cvar, tbl in pairs(CVarList) do + local value, default, isDefault = GetPrettyCVar(cvar) - local function FilteredRefresh() - if ListFrame:IsVisible() then - RefreshCVarList() - FilterCVarList() - end + if not (type(value) == "string" and (value:byte(2) == 1 or value:byte(1) == 2)) then -- hack to strip tracking variables and filters from our table, maybe look for a better solution + tinsert(CVarTable, { cvar, cvar, tbl.description or "", isDefault and value or ("|cffff0000" .. value .. "|r") }) + end end + --ListFrame:SetItems(CVarTable) + end - ListFrame:HookScript('OnShow', FilteredRefresh) - - -- Events - local oSetCVar = SetCVar - - -- todo: this needs to be updated every time a cvar changes while the table is visible - RefreshCVarList() - ListFrame:SetItems(CVarTable) - ListFrame:SortBy(2) - --FilterCVarList() - - -- We don't really want the user to be able to do anything else while the input box is open - -- I'd rather make this a child of the input box, but I can't get it to show up above its child - -- todo: show default value around the input box somewhere while it's active - local CVarInputBoxMouseBlocker = CreateFrame('frame', nil, ListFrame) - CVarInputBoxMouseBlocker:SetFrameStrata('FULLSCREEN_DIALOG') + local function FilteredRefresh() + if ListFrame:IsVisible() then + RefreshCVarList() + FilterCVarList() + end + end + + ListFrame:HookScript("OnShow", FilteredRefresh) + + -- Events + local oSetCVar = SetCVar + + -- todo: this needs to be updated every time a cvar changes while the table is visible + RefreshCVarList() + ListFrame:SetItems(CVarTable) + ListFrame:SortBy(2) + --FilterCVarList() + + -- We don't really want the user to be able to do anything else while the input box is open + -- I'd rather make this a child of the input box, but I can't get it to show up above its child + -- todo: show default value around the input box somewhere while it's active + local CVarInputBoxMouseBlocker = CreateFrame("frame", nil, ListFrame) + CVarInputBoxMouseBlocker:SetFrameStrata("FULLSCREEN_DIALOG") + CVarInputBoxMouseBlocker:Hide() + + local CVarInputBox = CreateFrame("editbox", nil, CVarInputBoxMouseBlocker, "InputBoxTemplate") + -- block clicking and cancel on any clicks outside the edit box + CVarInputBoxMouseBlocker:EnableMouse(true) + CVarInputBoxMouseBlocker:SetScript("OnMouseDown", function(self) + CVarInputBox:ClearFocus() + end) + -- block scrolling + CVarInputBoxMouseBlocker:EnableMouseWheel(true) + CVarInputBoxMouseBlocker:SetScript("OnMouseWheel", function() end) + CVarInputBoxMouseBlocker:SetAllPoints(nil) + + local blackout = CVarInputBoxMouseBlocker:CreateTexture(nil, "BACKGROUND") + blackout:SetAllPoints() + blackout:SetColorTexture(0, 0, 0, 0.2) + + CVarInputBox:Hide() + CVarInputBox:SetSize(100, 20) + CVarInputBox:SetJustifyH("RIGHT") + CVarInputBox:SetTextInsets(5, 10, 0, 0) + CVarInputBox:SetScript("OnEscapePressed", function(self) + self:ClearFocus() + self:Hide() + end) + + CVarInputBox:SetScript("OnEnterPressed", function(self) + -- todo: I don't like this, change it + oSetCVar(self.cvar, self:GetText() or "") + self:Hide() + FilteredRefresh() + end) + --CVarInputBox:SetScript('OnShow', function(self) + --self:SetFocus() + --end) + CVarInputBox:SetScript("OnHide", function(self) CVarInputBoxMouseBlocker:Hide() - - local CVarInputBox = CreateFrame('editbox', nil, CVarInputBoxMouseBlocker, 'InputBoxTemplate') - -- block clicking and cancel on any clicks outside the edit box - CVarInputBoxMouseBlocker:EnableMouse(true) - CVarInputBoxMouseBlocker:SetScript('OnMouseDown', function(self) CVarInputBox:ClearFocus() end) - -- block scrolling - CVarInputBoxMouseBlocker:EnableMouseWheel(true) - CVarInputBoxMouseBlocker:SetScript('OnMouseWheel', function() end) - CVarInputBoxMouseBlocker:SetAllPoints(nil) - - local blackout = CVarInputBoxMouseBlocker:CreateTexture(nil, 'BACKGROUND') - blackout:SetAllPoints() - blackout:SetColorTexture(0,0,0,0.2) - - CVarInputBox:Hide() - CVarInputBox:SetSize(100, 20) - CVarInputBox:SetJustifyH('RIGHT') - CVarInputBox:SetTextInsets(5, 10, 0, 0) - CVarInputBox:SetScript('OnEscapePressed', function(self) - self:ClearFocus() - self:Hide() - end) - - CVarInputBox:SetScript('OnEnterPressed', function(self) - -- todo: I don't like this, change it - oSetCVar(self.cvar, self:GetText() or '') - self:Hide() - FilteredRefresh() - end) - --CVarInputBox:SetScript('OnShow', function(self) - --self:SetFocus() - --end) - CVarInputBox:SetScript('OnHide', function(self) - CVarInputBoxMouseBlocker:Hide() - if self.str then - self.str:Show() - end - end) - CVarInputBox:SetScript('OnEditFocusLost', function(self) - self:Hide() - FilterBox:SetFocus() - end) - - function E:PLAYER_REGEN_DISABLED() - if CVarInputBox:IsVisible() then - CVarInputBox:Hide() - end - FilterBox:GetScript('OnEscapePressed')(FilterBox) + if self.str then + self.str:Show() end + end) + CVarInputBox:SetScript("OnEditFocusLost", function(self) + self:Hide() + FilterBox:SetFocus() + end) + + function E:PLAYER_REGEN_DISABLED() + if CVarInputBox:IsVisible() then + CVarInputBox:Hide() + end + FilterBox:GetScript("OnEscapePressed")(FilterBox) + end + + local LastClickTime = 0 -- Track double clicks on rows + ListFrame:SetScripts({ + OnEnter = function(self) + if self.value ~= "" then + GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT") + local cvarTable = CVarList[self.value] + local _, defaultValue = GetCVarInfo(self.value) + GameTooltip:AddLine(cvarTable["prettyName"] or self.value, nil, nil, nil, false) + GameTooltip:AddLine(" ") + if cvarTable["description"] then --and _G[ cvarTable['description'] ] then + GameTooltip:AddLine(cvarTable["description"], 1, 1, 1, true) + end + GameTooltip:AddDoubleLine("Default Value:", defaultValue, 0.2, 1, 0.6, 0.2, 1, 0.6) - local LastClickTime = 0 -- Track double clicks on rows - ListFrame:SetScripts({ - OnEnter = function(self) - if self.value ~= '' then - GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT") - local cvarTable = CVarList[self.value] - local _, defaultValue = GetCVarInfo(self.value) - GameTooltip:AddLine(cvarTable['prettyName'] or self.value, nil, nil, nil, false) - GameTooltip:AddLine(" ") - if cvarTable['description'] then --and _G[ cvarTable['description'] ] then - GameTooltip:AddLine(cvarTable['description'], 1, 1, 1, true) - end - GameTooltip:AddDoubleLine("Default Value:", defaultValue, 0.2, 1, 0.6, 0.2, 1, 0.6) - - local modifiedBy = AdvancedInterfaceOptionsSaved.ModifiedCVars[ self.value:lower() ] - if modifiedBy then - GameTooltip:AddDoubleLine("Last Modified By:", modifiedBy, 1, 0, 0, 1, 0, 0) - end - - GameTooltip:Show() - end - self.bg:Show() - end, - OnLeave = function(self) - GameTooltip:Hide() - self.bg:Hide() - end, - OnMouseDown = function(self) - local now = GetTime() - if now - LastClickTime <= 0.2 then - -- display edit box on row with current cvar value - -- save on enter, discard on escape or losing focus - if CVarInputBox.str then - CVarInputBox.str:Show() - end - self.cols[#self.cols]:Hide() - CVarInputBox.str = self.cols[#self.cols] - CVarInputBox.cvar = self.value - CVarInputBox.row = self - CVarInputBox:SetPoint('RIGHT', self) - local value = GetPrettyCVar(self.value) - CVarInputBox:SetText(value or '') - CVarInputBox:HighlightText() - CVarInputBoxMouseBlocker:Show() - CVarInputBox:Show() - CVarInputBox:SetFocus() - else - LastClickTime = now - end - end, - }) - - - -- Update browser when a cvar is set while it's open - -- There are at least 4 different ways a cvar can be set: - -- /run SetCVar("cvar", value) - -- /console "cvar" value - -- /console SET "cvar" value (case doesn't matter) - -- Hitting ` and typing SET "cvar" into the console window itself - -- Console is not part of the interface, doesn't fire an event, and I'm not sure that we can hook it - - -- These could be more efficient by not refreshing the entire list but that would be more work - hooksecurefunc('SetCVar', FilteredRefresh) + local modifiedBy = AdvancedInterfaceOptionsSaved.ModifiedCVars[self.value:lower()] + if modifiedBy then + GameTooltip:AddDoubleLine("Last Modified By:", modifiedBy, 1, 0, 0, 1, 0, 0) + end - -- should we even bother checking what the console command did? - hooksecurefunc('ConsoleExec', FilteredRefresh) + GameTooltip:Show() + end + self.bg:Show() + end, + OnLeave = function(self) + GameTooltip:Hide() + self.bg:Hide() + end, + OnMouseDown = function(self) + local now = GetTime() + if now - LastClickTime <= 0.2 then + -- display edit box on row with current cvar value + -- save on enter, discard on escape or losing focus + if CVarInputBox.str then + CVarInputBox.str:Show() + end + self.cols[#self.cols]:Hide() + CVarInputBox.str = self.cols[#self.cols] + CVarInputBox.cvar = self.value + CVarInputBox.row = self + CVarInputBox:SetPoint("RIGHT", self) + local value = GetPrettyCVar(self.value) + CVarInputBox:SetText(value or "") + CVarInputBox:HighlightText() + CVarInputBoxMouseBlocker:Show() + CVarInputBox:Show() + CVarInputBox:SetFocus() + else + LastClickTime = now + end + end, + }) + + -- Update browser when a cvar is set while it's open + -- There are at least 4 different ways a cvar can be set: + -- /run SetCVar("cvar", value) + -- /console "cvar" value + -- /console SET "cvar" value (case doesn't matter) + -- Hitting ` and typing SET "cvar" into the console window itself + -- Console is not part of the interface, doesn't fire an event, and I'm not sure that we can hook it + + -- These could be more efficient by not refreshing the entire list but that would be more work + hooksecurefunc("SetCVar", FilteredRefresh) + + -- should we even bother checking what the console command did? + hooksecurefunc("ConsoleExec", FilteredRefresh) end diff --git a/cspell.json b/cspell.json new file mode 100644 index 0000000..80497dc --- /dev/null +++ b/cspell.json @@ -0,0 +1,31 @@ +{ + "version": "0.2", + "language": "en-US", + "ignorePaths": [ + "libs", + ".luacheckrc" + ], + "words": [ + "ADDONCATEGORIES", + "Ambiguate", + "Cata", + "cffaaaaff", + "cffaaffaa", + "cffffaaaa", + "cffffffff", + "cvar", + "cvars", + "Debuff", + "Debuffs", + "Dont", + "Lerp", + "Luacheck", + "nebularg", + "NUMDIALOGS", + "upvalue", + "UVARINFO", + "uvars", + "WAGO", + "WOWI" + ] +} diff --git a/cvars.lua b/cvars.lua index d397351..84a42ce 100644 --- a/cvars.lua +++ b/cvars.lua @@ -2,1023 +2,1157 @@ local addonName, addon = ... local _G = _G addon.combatProtected = { - -- List of cvars that can't be modified in combat - ["alwaysShowActionBars"] = true, - ["colorblindSimulator"] = true, - ["colorblindWeaknessFactor"] = true, - ["daltonize"] = true, - ["fullSizeFocusFrame"] = true, - ["garrisonCompleteTalent"] = true, - ["garrisonCompleteTalentType"] = true, - ["nameplateClassResourceTopInset"] = true, - ["nameplateGlobalScale"] = true, - ["NamePlateHorizontalScale"] = true, - ["nameplateLargeBottomInset"] = true, - ["nameplateLargerScale"] = true, - ["nameplateLargeTopInset"] = true, - ["nameplateMaxAlpha"] = true, - ["nameplateMaxAlphaDistance"] = true, - ["nameplateMaxDistance"] = true, - ["nameplateMaxScale"] = true, - ["nameplateMaxScaleDistance"] = true, - ["nameplateMinAlpha"] = true, - ["nameplateMinAlphaDistance"] = true, - ["nameplateMinScale"] = true, - ["nameplateMinScaleDistance"] = true, - ["nameplateMotion"] = true, - ["nameplateMotionSpeed"] = true, - ["nameplateOtherAtBase"] = true, - ["nameplateOtherBottomInset"] = true, - ["nameplateOtherTopInset"] = true, - ["nameplateOverlapH"] = true, - ["nameplateOverlapV"] = true, - ["NameplatePersonalHideDelayAlpha"] = true, - ["nameplatePersonalHideDelaySeconds"] = true, - ["nameplatePersonalShowAlways"] = true, - ["nameplatePersonalShowInCombat"] = true, - ["nameplatePersonalShowWithTarget"] = true, - ["nameplateResourceOnTarget"] = true, - ["nameplateSelectedAlpha"] = true, - ["nameplateSelectedScale"] = true, - ["nameplateSelfAlpha"] = true, - ["nameplateSelfBottomInset"] = true, - ["nameplateSelfScale"] = true, - ["nameplateSelfTopInset"] = true, - ["nameplateShowAll"] = true, - ["nameplateShowEnemies"] = true, - ["nameplateShowEnemyGuardians"] = true, - ["nameplateShowEnemyMinions"] = true, - ["nameplateShowEnemyMinus"] = true, - ["nameplateShowEnemyPets"] = true, - ["nameplateShowEnemyTotems"] = true, - ["nameplateShowFriendlyGuardians"] = true, - ["nameplateShowFriendlyMinions"] = true, - ["nameplateShowFriendlyNPCs"] = true, - ["nameplateShowFriendlyPets"] = true, - ["nameplateShowFriendlyTotems"] = true, - ["nameplateShowFriends"] = true, - ["nameplateShowSelf"] = true, - ["nameplateTargetBehindMaxDistance"] = true, - ["NamePlateVerticalScale"] = true, - ["showArenaEnemyFrames"] = true, - ["showArenaEnemyPets"] = true, - ["showPartyPets"] = true, - ["showTargetOfTarget"] = true, - ["splashScreenBoost"] = true, - ["splashScreenNormal"] = true, - ["targetOfTargetMode"] = true, - ["uiScale"] = true, - ["uiScaleMultiplier"] = true, - ["UnitNameGuildTitle"] = true, - ["useCompactPartyFrames"] = true, - ["useUiScale"] = true, + -- List of cvars that can't be modified in combat + ["alwaysShowActionBars"] = true, + ["colorblindSimulator"] = true, + ["colorblindWeaknessFactor"] = true, + ["daltonize"] = true, + ["fullSizeFocusFrame"] = true, + ["garrisonCompleteTalent"] = true, + ["garrisonCompleteTalentType"] = true, + ["nameplateClassResourceTopInset"] = true, + ["nameplateGlobalScale"] = true, + ["NamePlateHorizontalScale"] = true, + ["nameplateLargeBottomInset"] = true, + ["nameplateLargerScale"] = true, + ["nameplateLargeTopInset"] = true, + ["nameplateMaxAlpha"] = true, + ["nameplateMaxAlphaDistance"] = true, + ["nameplateMaxDistance"] = true, + ["nameplateMaxScale"] = true, + ["nameplateMaxScaleDistance"] = true, + ["nameplateMinAlpha"] = true, + ["nameplateMinAlphaDistance"] = true, + ["nameplateMinScale"] = true, + ["nameplateMinScaleDistance"] = true, + ["nameplateMotion"] = true, + ["nameplateMotionSpeed"] = true, + ["nameplateOtherAtBase"] = true, + ["nameplateOtherBottomInset"] = true, + ["nameplateOtherTopInset"] = true, + ["nameplateOverlapH"] = true, + ["nameplateOverlapV"] = true, + ["NameplatePersonalHideDelayAlpha"] = true, + ["nameplatePersonalHideDelaySeconds"] = true, + ["nameplatePersonalShowAlways"] = true, + ["nameplatePersonalShowInCombat"] = true, + ["nameplatePersonalShowWithTarget"] = true, + ["nameplateResourceOnTarget"] = true, + ["nameplateSelectedAlpha"] = true, + ["nameplateSelectedScale"] = true, + ["nameplateSelfAlpha"] = true, + ["nameplateSelfBottomInset"] = true, + ["nameplateSelfScale"] = true, + ["nameplateSelfTopInset"] = true, + ["nameplateShowAll"] = true, + ["nameplateShowEnemies"] = true, + ["nameplateShowEnemyGuardians"] = true, + ["nameplateShowEnemyMinions"] = true, + ["nameplateShowEnemyMinus"] = true, + ["nameplateShowEnemyPets"] = true, + ["nameplateShowEnemyTotems"] = true, + ["nameplateShowFriendlyGuardians"] = true, + ["nameplateShowFriendlyMinions"] = true, + ["nameplateShowFriendlyNPCs"] = true, + ["nameplateShowFriendlyPets"] = true, + ["nameplateShowFriendlyTotems"] = true, + ["nameplateShowFriends"] = true, + ["nameplateShowSelf"] = true, + ["nameplateTargetBehindMaxDistance"] = true, + ["NamePlateVerticalScale"] = true, + ["showArenaEnemyFrames"] = true, + ["showArenaEnemyPets"] = true, + ["showPartyPets"] = true, + ["showTargetOfTarget"] = true, + ["splashScreenBoost"] = true, + ["splashScreenNormal"] = true, + ["targetOfTargetMode"] = true, + ["uiScale"] = true, + ["uiScaleMultiplier"] = true, + ["UnitNameGuildTitle"] = true, + ["useCompactPartyFrames"] = true, + ["useUiScale"] = true, } addon.hiddenOptions = { - -- Names - ["UnitNameOwn"] = { prettyName = UNIT_NAME_OWN, description = OPTION_TOOLTIP_UNIT_NAME_OWN, type = "boolean" }, - ["UnitNameNPC"] = { prettyName = UNIT_NAME_NPC, description = OPTION_TOOLTIP_UNIT_NAME_NPC, type = "boolean" }, - ["UnitNameNonCombatCreatureName"] = { prettyName = UNIT_NAME_NONCOMBAT_CREATURE, description = OPTION_TOOLTIP_UNIT_NAME_NONCOMBAT_CREATURE, type = "boolean" }, - ["UnitNamePlayerGuild"] = { prettyName = UNIT_NAME_GUILD, description = OPTION_TOOLTIP_UNIT_NAME_GUILD, type = "boolean" }, - ["UnitNameGuildTitle"] = { prettyName = UNIT_NAME_GUILD_TITLE, description = OPTION_TOOLTIP_UNIT_NAME_GUILD_TITLE , type = "boolean" }, - ["UnitNamePlayerPVPTitle"] = { prettyName = UNIT_NAME_PLAYER_TITLE, description = OPTION_TOOLTIP_UNIT_NAME_PLAYER_TITLE, type = "boolean" }, - ["UnitNameFriendlyPlayerName"] = { prettyName = UNIT_NAME_FRIENDLY, description = OPTION_TOOLTIP_UNIT_NAME_FRIENDLY, type = "boolean" }, - ["UnitNameFriendlyPetName"] = { prettyName = UNIT_NAME_FRIENDLY_PETS, description = OPTION_TOOLTIP_UNIT_NAME_FRIENDLY_PETS, type = "boolean" }, - ["UnitNameFriendlyGuardianName"] = { prettyName = UNIT_NAME_FRIENDLY_GUARDIANS, description = OPTION_TOOLTIP_UNIT_NAME_FRIENDLY_GUARDIANS, type = "boolean" }, - ["UnitNameFriendlyTotemName"] = { prettyName = UNIT_NAME_FRIENDLY_TOTEMS, description = OPTION_TOOLTIP_UNIT_NAME_FRIENDLY_TOTEMS, type = "boolean" }, - ["UnitNameFriendlyMinionName"] = { prettyName = UNIT_NAME_FRIENDLY_MINIONS, description = "", type = "boolean" }, - ["UnitNameEnemyPlayerName"] = { prettyName = UNIT_NAME_ENEMY, description = OPTION_TOOLTIP_UNIT_NAME_ENEMY, type = "boolean" }, - ["UnitNameEnemyPetName"] = { prettyName = UNIT_NAME_ENEMY_PETS, description = OPTION_TOOLTIP_UNIT_NAME_ENEMY_PETS, type = "boolean" }, - ["UnitNameEnemyGuardianName"] = { prettyName = UNIT_NAME_ENEMY_GUARDIANS, description = OPTION_TOOLTIP_UNIT_NAME_ENEMY_GUARDIANS, type = "boolean" }, - ["UnitNameEnemyTotemName"] = { prettyName = UNIT_NAME_ENEMY_TOTEMS, description = OPTION_TOOLTIP_UNIT_NAME_ENEMY_TOTEMS, type = "boolean" }, - ["UnitNameEnemyMinionName"] = { prettyName = UNIT_NAME_ENEMY_MINIONS, description = "", type = "boolean" }, - ["UnitNameForceHideMinus"] = { prettyName = UNIT_NAME_HIDE_MINUS, description = OPTION_TOOLTIP_UNIT_NAME_HIDE_MINUS, type = "boolean" }, - ["UnitNameFriendlySpecialNPCName"] = { prettyName = NPC_NAMES_DROPDOWN_TRACKED, description = NPC_NAMES_DROPDOWN_TRACKED_TOOLTIP, type = "boolean" }, - ["UnitNameHostleNPC"] = { prettyName = "Hostile NPCs", description = "Display names for hostile NPCs", type = "boolean" }, - ["UnitNameInteractiveNPC"] = { prettyName = "Interactive NPCs", description = "Display names for interactive NPCs", type = "boolean" }, - -- Nameplates - ["nameplateShowFriends"] = { prettyName = UNIT_NAMEPLATES_SHOW_FRIENDS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDS, type = "boolean" }, - ["nameplateShowFriendlyPets"] = { prettyName = UNIT_NAMEPLATES_SHOW_FRIENDLY_PETS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDLY_PETS, type = "boolean" }, - ["nameplateShowFriendlyGuardians"] = { prettyName = UNIT_NAMEPLATES_SHOW_FRIENDLY_GUARDIANS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDLY_GUARDIANS, type = "boolean" }, - ["nameplateShowFriendlyTotems"] = { prettyName = UNIT_NAMEPLATES_SHOW_FRIENDLY_TOTEMS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDLY_TOTEMS, type = "boolean" }, - ["nameplateShowFriendlyNPCs"] = { prettyName = "Friendly NPCs", description = "Always show friendly NPC's nameplates", type = "boolean" }, - ["nameplateShowEnemies"] = { prettyName = UNIT_NAMEPLATES_SHOW_ENEMIES, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMIES, type = "boolean" }, - ["nameplateShowEnemyPets"] = { prettyName = UNIT_NAMEPLATES_SHOW_ENEMY_PETS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_PETS, type = "boolean" }, - ["nameplateShowEnemyGuardians"] = { prettyName = UNIT_NAMEPLATES_SHOW_ENEMY_GUARDIANS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_GUARDIANS, type = "boolean" }, - ["nameplateShowEnemyTotems"] = { prettyName = UNIT_NAMEPLATES_SHOW_ENEMY_TOTEMS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_TOTEMS, type = "boolean" }, - ["nameplateShowEnemyMinus"] = { prettyName = UNIT_NAMEPLATES_SHOW_ENEMY_MINUS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_MINUS, type = "boolean" }, - ["nameplateOtherAtBase"] = { prettyName = "Nameplate at Base", description = "Position other nameplates at the base, rather than overhead. 2=under unit, 0=over unit", type = "boolean" }, - ["nameplateOverlapH"] = { prettyName = "Nameplate Overlap (Horizontal)", description = "Percentage amount for horizontal overlap of nameplates", type = "number" }, - ["nameplateOverlapV"] = { prettyName = "Nameplate Overlap (Vertical)", description = "Percentage amount for vertical overlap of nameplates", type = "number" }, - ["nameplateMaxDistance"] = { prettyName = "Nameplate Distance", description = "The max distance to show nameplates.", type = "number" }, - ["nameplateTargetBehindMaxDistance"] = { prettyName = "Nameplate Target Behind Distance", description = "The max distance to show the target nameplate when the target is behind the camera.", type = "number" }, - ["nameplateGlobalScale"] = { prettyName = "Nameplate Global Scale", description = "Applies global scaling to non-self nameplates, this is applied AFTER selected, min, and max scale.", type = "number" }, - ["nameplateMinScale"] = { prettyName = "Nameplate Min Scale", description = "The minimum scale of nameplates.", type = "number" }, - ["nameplateMaxScale"] = { prettyName = "Nameplate Max Scale", description = "The max scale of nameplates.", type = "number" }, - ["nameplateLargerScale"] = { prettyName = "Nameplate Larger Scale", description = "An additional scale modifier for important monsters.", type = "number" }, - ["nameplateMinScaleDistance"] = { prettyName = "Nameplate Min Scale Distance", description = "The distance from the max distance that nameplates will reach their minimum scale.", type = "number" }, - ["nameplateMaxScaleDistance"] = { prettyName = "Nameplate Max Scale Distance", description = "The distance from the camera that nameplates will reach their maximum scale", type = "number" }, - ["nameplateMinAlpha"] = { prettyName = "Nameplate Min Alpha", description = "The minimum alpha of nameplates.", type = "number" }, - ["nameplateMaxAlpha"] = { prettyName = "Nameplate Max Alpha", description = "The max alpha of nameplates.", type = "number" }, - ["nameplateMinAlphaDistance"] = { prettyName = "Nameplate Min Alpha Distance", description = "The distance from the max distance that nameplates will reach their minimum alpha.", type = "number" }, - ["nameplateMaxAlphaDistance"] = { prettyName = "Nameplate Max Alpha Distance", description = "The distance from the camera that nameplates will reach their maximum alpha.", type = "number" }, - ["nameplateSelectedScale"] = { prettyName = "Nameplate Selected Scale", description = "The scale of the selected nameplate.", type = "number" }, - ["nameplateSelectedAlpha"] = { prettyName = "Nameplate Selected Alpha", description = "The alpha of the selected nameplate.", type = "number" }, - ["nameplateSelfScale"] = { prettyName = "Nameplate Self Scale", description = "The scale of the self nameplate.", type = "number" }, - ["nameplateSelfAlpha"] = { prettyName = "Nameplate Self Alpha", description = "The alpha of the self nameplate.", type = "number" }, - ["nameplateSelfBottomInset"] = { prettyName = "Nameplate Self Bottom Inset", description = "The inset from the bottom (in screen percent) that the self nameplate is clamped to.", type = "number" }, - ["nameplateSelfTopInset"] = { prettyName = "Nameplate Self Top Inset", description = "The inset from the top (in screen percent) that the self nameplate is clamped to.", type = "number" }, - ["nameplateOtherBottomInset"] = { prettyName = "Nameplate Other Bottom Inset", description = "The inset from the bottom (in screen percent) that the non-self nameplates are clamped to.", type = "number" }, - ["nameplateOtherTopInset"] = { prettyName = "Nameplate Other Top Inset", description = "The inset from the top (in screen percent) that the non-self nameplates are clamped to.", type = "number" }, - ["nameplateLargeBottomInset"] = { prettyName = "Nameplate Large Bottom Inset", description = "The inset from the bottom (in screen percent) that large nameplates are clamped to.", type = "number" }, - ["nameplateLargeTopInset"] = { prettyName = "Nameplate Large Top Inset", description = "The inset from the top (in screen percent) that large nameplates are clamped to.", type = "number" }, - ["nameplateClassResourceTopInset"] = { prettyName = "Nameplate Class Resource Top Inset", description = "The inset from the top (in screen percent) that nameplates are clamped to when class resources are being displayed on them.", type = "number" }, - ["NamePlateHorizontalScale"] = { prettyName = "Nameplate Horizontal Scale", description = "Applied to horizontal size of all nameplates.", type = "number" }, - ["NamePlateVerticalScale"] = { prettyName = "Nameplate Vertical Scale", description = "Applied to vertical size of all nameplates.", type = "number" }, - ["nameplateResourceOnTarget"] = { prettyName = "Nameplate Resource On Target", description = "Nameplate class resource overlay mode. 0=self, 1=target", type = "number" }, - ["nameplateShowSelf"] = { prettyName = "Show Nameplate Resource Bar", description = "Display class resource bar. 0=off 1=on", type = "number" }, - ["nameplateShowAll"] = { prettyName = "Always Show Nameplates", description = "Show nameplates at all times.", type = "number" }, - ["nameplateMotion"] = { prettyName = "Nameplate Motion Type", description = "0 = Overlapping - 1 = Stacking", type = "number" }, - ["namePlateFriendlySize"] = { prettyName = "", description = "", type = "number" }, - ["namePlateEnemySize"] = { prettyName = "", description = "", type = "number" }, - ["namePlateSelfClickThrough"] = { prettyName = "", description = "", type = "number" }, - ["namePlateFriendlyClickThrough"] = { prettyName = "", description = "", type = "number" }, - ["namePlateEnemyClickThrough"] = { prettyName = "", description = "", type = "number" }, - ["nameplatePersonalShowAlways"] = { prettyName = "", description = "Always show personal nameplate", type = "boolean" }, - ["nameplatePersonalShowInCombat"] = { prettyName = "", description = "Always show personal nameplate while in combat", type = "boolean" }, - ["nameplatePersonalShowWithTarget"] = { prettyName = "", description = "Always show personal nameplate with a hostile target", type = "boolean" }, - ["nameplatePersonalHideDelaySeconds"] = { prettyName = "", description = "The delay to wait before hiding the personal nameplate", type = "boolean" }, - ["ShowNamePlateLoseAggroFlash"] = { prettyName = nil, description = "When enabled, if you are a tank role and lose aggro, the nameplate with briefly flash.", type = "boolean" }, - ["ShowClassColorInNameplate"] = { prettyName = SHOW_CLASS_COLOR_IN_V_KEY, description = OPTION_TOOLTIP_SHOW_CLASS_COLOR_IN_V_KEY, type = "boolean" }, - ["ShowClassColorInFriendlyNameplate"] = { prettyName = "Class color friendly nameplates", description = "Class color for friendly nameplates", type = "boolean" }, + -- Names + ["UnitNameOwn"] = { prettyName = UNIT_NAME_OWN, description = OPTION_TOOLTIP_UNIT_NAME_OWN, type = "boolean" }, + ["UnitNameNPC"] = { prettyName = UNIT_NAME_NPC, description = OPTION_TOOLTIP_UNIT_NAME_NPC, type = "boolean" }, + ["UnitNameNonCombatCreatureName"] = { prettyName = UNIT_NAME_NONCOMBAT_CREATURE, description = OPTION_TOOLTIP_UNIT_NAME_NONCOMBAT_CREATURE, type = "boolean" }, + ["UnitNamePlayerGuild"] = { prettyName = UNIT_NAME_GUILD, description = OPTION_TOOLTIP_UNIT_NAME_GUILD, type = "boolean" }, + ["UnitNameGuildTitle"] = { prettyName = UNIT_NAME_GUILD_TITLE, description = OPTION_TOOLTIP_UNIT_NAME_GUILD_TITLE, type = "boolean" }, + ["UnitNamePlayerPVPTitle"] = { prettyName = UNIT_NAME_PLAYER_TITLE, description = OPTION_TOOLTIP_UNIT_NAME_PLAYER_TITLE, type = "boolean" }, + ["UnitNameFriendlyPlayerName"] = { prettyName = UNIT_NAME_FRIENDLY, description = OPTION_TOOLTIP_UNIT_NAME_FRIENDLY, type = "boolean" }, + ["UnitNameFriendlyPetName"] = { prettyName = UNIT_NAME_FRIENDLY_PETS, description = OPTION_TOOLTIP_UNIT_NAME_FRIENDLY_PETS, type = "boolean" }, + ["UnitNameFriendlyGuardianName"] = { prettyName = UNIT_NAME_FRIENDLY_GUARDIANS, description = OPTION_TOOLTIP_UNIT_NAME_FRIENDLY_GUARDIANS, type = "boolean" }, + ["UnitNameFriendlyTotemName"] = { prettyName = UNIT_NAME_FRIENDLY_TOTEMS, description = OPTION_TOOLTIP_UNIT_NAME_FRIENDLY_TOTEMS, type = "boolean" }, + ["UnitNameFriendlyMinionName"] = { prettyName = UNIT_NAME_FRIENDLY_MINIONS, description = "", type = "boolean" }, + ["UnitNameEnemyPlayerName"] = { prettyName = UNIT_NAME_ENEMY, description = OPTION_TOOLTIP_UNIT_NAME_ENEMY, type = "boolean" }, + ["UnitNameEnemyPetName"] = { prettyName = UNIT_NAME_ENEMY_PETS, description = OPTION_TOOLTIP_UNIT_NAME_ENEMY_PETS, type = "boolean" }, + ["UnitNameEnemyGuardianName"] = { prettyName = UNIT_NAME_ENEMY_GUARDIANS, description = OPTION_TOOLTIP_UNIT_NAME_ENEMY_GUARDIANS, type = "boolean" }, + ["UnitNameEnemyTotemName"] = { prettyName = UNIT_NAME_ENEMY_TOTEMS, description = OPTION_TOOLTIP_UNIT_NAME_ENEMY_TOTEMS, type = "boolean" }, + ["UnitNameEnemyMinionName"] = { prettyName = UNIT_NAME_ENEMY_MINIONS, description = "", type = "boolean" }, + ["UnitNameForceHideMinus"] = { prettyName = UNIT_NAME_HIDE_MINUS, description = OPTION_TOOLTIP_UNIT_NAME_HIDE_MINUS, type = "boolean" }, + ["UnitNameFriendlySpecialNPCName"] = { prettyName = NPC_NAMES_DROPDOWN_TRACKED, description = NPC_NAMES_DROPDOWN_TRACKED_TOOLTIP, type = "boolean" }, + ["UnitNameHostleNPC"] = { prettyName = "Hostile NPCs", description = "Display names for hostile NPCs", type = "boolean" }, + ["UnitNameInteractiveNPC"] = { prettyName = "Interactive NPCs", description = "Display names for interactive NPCs", type = "boolean" }, + -- Nameplates + ["nameplateShowFriends"] = { prettyName = UNIT_NAMEPLATES_SHOW_FRIENDS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDS, type = "boolean" }, + ["nameplateShowFriendlyPets"] = { prettyName = UNIT_NAMEPLATES_SHOW_FRIENDLY_PETS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDLY_PETS, type = "boolean" }, + ["nameplateShowFriendlyGuardians"] = { + prettyName = UNIT_NAMEPLATES_SHOW_FRIENDLY_GUARDIANS, + description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDLY_GUARDIANS, + type = "boolean", + }, + ["nameplateShowFriendlyTotems"] = { prettyName = UNIT_NAMEPLATES_SHOW_FRIENDLY_TOTEMS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_FRIENDLY_TOTEMS, type = "boolean" }, + ["nameplateShowFriendlyNPCs"] = { prettyName = "Friendly NPCs", description = "Always show friendly NPC's nameplates", type = "boolean" }, + ["nameplateShowEnemies"] = { prettyName = UNIT_NAMEPLATES_SHOW_ENEMIES, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMIES, type = "boolean" }, + ["nameplateShowEnemyPets"] = { prettyName = UNIT_NAMEPLATES_SHOW_ENEMY_PETS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_PETS, type = "boolean" }, + ["nameplateShowEnemyGuardians"] = { prettyName = UNIT_NAMEPLATES_SHOW_ENEMY_GUARDIANS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_GUARDIANS, type = "boolean" }, + ["nameplateShowEnemyTotems"] = { prettyName = UNIT_NAMEPLATES_SHOW_ENEMY_TOTEMS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_TOTEMS, type = "boolean" }, + ["nameplateShowEnemyMinus"] = { prettyName = UNIT_NAMEPLATES_SHOW_ENEMY_MINUS, description = OPTION_TOOLTIP_UNIT_NAMEPLATES_SHOW_ENEMY_MINUS, type = "boolean" }, + ["nameplateOtherAtBase"] = { + prettyName = "Nameplate at Base", + description = "Position other nameplates at the base, rather than overhead. 2=under unit, 0=over unit", + type = "boolean", + }, + ["nameplateOverlapH"] = { prettyName = "Nameplate Overlap (Horizontal)", description = "Percentage amount for horizontal overlap of nameplates", type = "number" }, + ["nameplateOverlapV"] = { prettyName = "Nameplate Overlap (Vertical)", description = "Percentage amount for vertical overlap of nameplates", type = "number" }, + ["nameplateMaxDistance"] = { prettyName = "Nameplate Distance", description = "The max distance to show nameplates.", type = "number" }, + ["nameplateTargetBehindMaxDistance"] = { + prettyName = "Nameplate Target Behind Distance", + description = "The max distance to show the target nameplate when the target is behind the camera.", + type = "number", + }, + ["nameplateGlobalScale"] = { + prettyName = "Nameplate Global Scale", + description = "Applies global scaling to non-self nameplates, this is applied AFTER selected, min, and max scale.", + type = "number", + }, + ["nameplateMinScale"] = { prettyName = "Nameplate Min Scale", description = "The minimum scale of nameplates.", type = "number" }, + ["nameplateMaxScale"] = { prettyName = "Nameplate Max Scale", description = "The max scale of nameplates.", type = "number" }, + ["nameplateLargerScale"] = { prettyName = "Nameplate Larger Scale", description = "An additional scale modifier for important monsters.", type = "number" }, + ["nameplateMinScaleDistance"] = { + prettyName = "Nameplate Min Scale Distance", + description = "The distance from the max distance that nameplates will reach their minimum scale.", + type = "number", + }, + ["nameplateMaxScaleDistance"] = { + prettyName = "Nameplate Max Scale Distance", + description = "The distance from the camera that nameplates will reach their maximum scale", + type = "number", + }, + ["nameplateMinAlpha"] = { prettyName = "Nameplate Min Alpha", description = "The minimum alpha of nameplates.", type = "number" }, + ["nameplateMaxAlpha"] = { prettyName = "Nameplate Max Alpha", description = "The max alpha of nameplates.", type = "number" }, + ["nameplateMinAlphaDistance"] = { + prettyName = "Nameplate Min Alpha Distance", + description = "The distance from the max distance that nameplates will reach their minimum alpha.", + type = "number", + }, + ["nameplateMaxAlphaDistance"] = { + prettyName = "Nameplate Max Alpha Distance", + description = "The distance from the camera that nameplates will reach their maximum alpha.", + type = "number", + }, + ["nameplateSelectedScale"] = { prettyName = "Nameplate Selected Scale", description = "The scale of the selected nameplate.", type = "number" }, + ["nameplateSelectedAlpha"] = { prettyName = "Nameplate Selected Alpha", description = "The alpha of the selected nameplate.", type = "number" }, + ["nameplateSelfScale"] = { prettyName = "Nameplate Self Scale", description = "The scale of the self nameplate.", type = "number" }, + ["nameplateSelfAlpha"] = { prettyName = "Nameplate Self Alpha", description = "The alpha of the self nameplate.", type = "number" }, + ["nameplateSelfBottomInset"] = { + prettyName = "Nameplate Self Bottom Inset", + description = "The inset from the bottom (in screen percent) that the self nameplate is clamped to.", + type = "number", + }, + ["nameplateSelfTopInset"] = { + prettyName = "Nameplate Self Top Inset", + description = "The inset from the top (in screen percent) that the self nameplate is clamped to.", + type = "number", + }, + ["nameplateOtherBottomInset"] = { + prettyName = "Nameplate Other Bottom Inset", + description = "The inset from the bottom (in screen percent) that the non-self nameplates are clamped to.", + type = "number", + }, + ["nameplateOtherTopInset"] = { + prettyName = "Nameplate Other Top Inset", + description = "The inset from the top (in screen percent) that the non-self nameplates are clamped to.", + type = "number", + }, + ["nameplateLargeBottomInset"] = { + prettyName = "Nameplate Large Bottom Inset", + description = "The inset from the bottom (in screen percent) that large nameplates are clamped to.", + type = "number", + }, + ["nameplateLargeTopInset"] = { + prettyName = "Nameplate Large Top Inset", + description = "The inset from the top (in screen percent) that large nameplates are clamped to.", + type = "number", + }, + ["nameplateClassResourceTopInset"] = { + prettyName = "Nameplate Class Resource Top Inset", + description = "The inset from the top (in screen percent) that nameplates are clamped to when class resources are being displayed on them.", + type = "number", + }, + ["NamePlateHorizontalScale"] = { prettyName = "Nameplate Horizontal Scale", description = "Applied to horizontal size of all nameplates.", type = "number" }, + ["NamePlateVerticalScale"] = { prettyName = "Nameplate Vertical Scale", description = "Applied to vertical size of all nameplates.", type = "number" }, + ["nameplateResourceOnTarget"] = { prettyName = "Nameplate Resource On Target", description = "Nameplate class resource overlay mode. 0=self, 1=target", type = "number" }, + ["nameplateShowSelf"] = { prettyName = "Show Nameplate Resource Bar", description = "Display class resource bar. 0=off 1=on", type = "number" }, + ["nameplateShowAll"] = { prettyName = "Always Show Nameplates", description = "Show nameplates at all times.", type = "number" }, + ["nameplateMotion"] = { prettyName = "Nameplate Motion Type", description = "0 = Overlapping - 1 = Stacking", type = "number" }, + ["namePlateFriendlySize"] = { prettyName = "", description = "", type = "number" }, + ["namePlateEnemySize"] = { prettyName = "", description = "", type = "number" }, + ["namePlateSelfClickThrough"] = { prettyName = "", description = "", type = "number" }, + ["namePlateFriendlyClickThrough"] = { prettyName = "", description = "", type = "number" }, + ["namePlateEnemyClickThrough"] = { prettyName = "", description = "", type = "number" }, + ["nameplatePersonalShowAlways"] = { prettyName = "", description = "Always show personal nameplate", type = "boolean" }, + ["nameplatePersonalShowInCombat"] = { prettyName = "", description = "Always show personal nameplate while in combat", type = "boolean" }, + ["nameplatePersonalShowWithTarget"] = { prettyName = "", description = "Always show personal nameplate with a hostile target", type = "boolean" }, + ["nameplatePersonalHideDelaySeconds"] = { prettyName = "", description = "The delay to wait before hiding the personal nameplate", type = "boolean" }, + ["ShowNamePlateLoseAggroFlash"] = { prettyName = nil, description = "When enabled, if you are a tank role and lose aggro, the nameplate with briefly flash.", type = "boolean" }, + ["ShowClassColorInNameplate"] = { prettyName = SHOW_CLASS_COLOR_IN_V_KEY, description = OPTION_TOOLTIP_SHOW_CLASS_COLOR_IN_V_KEY, type = "boolean" }, + ["ShowClassColorInFriendlyNameplate"] = { prettyName = "Class color friendly nameplates", description = "Class color for friendly nameplates", type = "boolean" }, - ["nameplateTargetRadialPosition"] = { prettyName = nil, description = "When target is off screen, position its nameplate radially around sides and bottom", type = "number"}, - ["nameplateOccludedAlphaMult"] = { prettyName = nil, description = "Alpha multiplier of nameplates for occluded targets", type = "number"}, + ["nameplateTargetRadialPosition"] = { prettyName = nil, description = "When target is off screen, position its nameplate radially around sides and bottom", type = "number" }, + ["nameplateOccludedAlphaMult"] = { prettyName = nil, description = "Alpha multiplier of nameplates for occluded targets", type = "number" }, + ["reverseCleanupBags"] = { prettyName = REVERSE_CLEAN_UP_BAGS_TEXT, description = OPTION_TOOLTIP_REVERSE_CLEAN_UP_BAGS, type = "boolean" }, + ["lootLeftmostBag"] = { prettyName = REVERSE_NEW_LOOT_TEXT, description = OPTION_TOOLTIP_REVERSE_NEW_LOOT, type = "boolean" }, + ["stopAutoAttackOnTargetChange"] = { prettyName = STOP_AUTO_ATTACK, description = OPTION_TOOLTIP_STOP_AUTO_ATTACK, type = "boolean" }, + ["assistAttack"] = { prettyName = ASSIST_ATTACK, description = OPTION_TOOLTIP_ASSIST_ATTACK, type = "boolean" }, + ["autoSelfCast"] = { prettyName = AUTO_SELF_CAST_TEXT, description = OPTION_TOOLTIP_SELF_CAST_TEXT, type = "boolean" }, + ["ActionButtonUseKeyDown"] = { prettyName = ACTION_BUTTON_USE_KEY_DOWN, description = OPTION_TOOLTIP_ACTION_BUTTON_USE_KEY_DOWN, type = "boolean" }, + ["mapFade"] = { prettyName = MAP_FADE_TEXT, description = OPTION_TOOLTIP_MAP_FADE, type = "boolean" }, + ["trackQuestSorting"] = { type = "table", options = { "proximity", "top" } }, + ["removeChatDelay"] = { prettyName = REMOVE_CHAT_DELAY_TEXT, description = OPTION_TOOLTIP_REMOVE_CHAT_DELAY_TEXT, type = "boolean" }, + ["secureAbilityToggle"] = { prettyName = SECURE_ABILITY_TOGGLE, description = OPTION_TOOLTIP_SECURE_ABILITY_TOGGLE, type = "boolean" }, + ["scriptErrors"] = { prettyName = SHOW_LUA_ERRORS, description = OPTION_TOOLTIP_SHOW_LUA_ERRORS, type = "boolean" }, + ["lootUnderMouse"] = { prettyName = LOOT_UNDER_MOUSE_TEXT, description = OPTION_TOOLTIP_LOOT_UNDER_MOUSE_TEXT, type = "boolean" }, + ["ShowQuestUnitCircles"] = { prettyName = "Quest Unit Circles", description = "Determines if units related to a quest display an indicator on the ground", type = "boolean" }, + ["autoLootDefault"] = { prettyName = AUTO_LOOT_DEFAULT_TEXT, description = OPTION_TOOLTIP_AUTO_LOOT_DEFAULT, type = "boolean" }, + ["threatShowNumeric"] = { prettyName = SHOW_NUMERIC_THREAT, description = OPTION_TOOLTIP_SHOW_NUMERIC_THREAT, type = "boolean" }, + ["showLootSpam"] = { prettyName = SHOW_LOOT_SPAM, description = OPTION_TOOLTIP_SHOW_LOOT_SPAM, type = "boolean" }, + ["advancedWatchFrame"] = { prettyName = ADVANCED_OBJECTIVES_TEXT, description = OPTION_TOOLTIP_ADVANCED_OBJECTIVES_TEXT, type = "" }, + ["watchFrameIgnoreCursor"] = { prettyName = OBJECTIVES_IGNORE_CURSOR_TEXT, description = OPTION_TOOLTIP_OBJECTIVES_IGNORE_CURSOR, type = "boolean" }, + ["guildMemberNotify"] = { prettyName = GUILDMEMBER_ALERT, description = OPTION_TOOLTIP_GUILDMEMBER_ALERT, type = "boolean" }, + ["showArenaEnemyFrames"] = { prettyName = SHOW_ARENA_ENEMY_FRAMES_TEXT, description = OPTION_TOOLTIP_SHOW_ARENA_ENEMY_FRAMES, type = "boolean" }, + ["autoClearAFK"] = { prettyName = nil, description = OPTION_TOOLTIP_CLEAR_AFK, type = "boolean" }, + ["colorblindWeaknessFactor"] = { prettyName = nil, description = OPTION_TOOLTIP_ADJUST_COLORBLIND_STRENGTH, type = "boolean" }, + ["autoLootDefault"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_LOOT_DEFAULT, type = "boolean" }, + ["autoLootRate"] = { prettyName = "Auto Loot Rate", description = "Rate in milliseconds to tick auto loot", type = "number" }, + ["ChatAmbienceVolume"] = { prettyName = nil, description = "", type = "boolean" }, + ["threatShowNumeric"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_NUMERIC_THREAT, type = "boolean" }, + ["rightActionBar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_MULTIBAR3, type = "boolean" }, + ["emphasizeMySpellEffects"] = { prettyName = nil, description = OPTION_TOOLTIP_EMPHASIZE_MY_SPELLS, type = "boolean" }, + ["chatBubblesParty"] = { prettyName = nil, description = OPTION_TOOLTIP_PARTY_CHAT_BUBBLES, type = "boolean" }, + ["enableTwitter"] = { prettyName = nil, description = OPTION_TOOLTIP_SOCIAL_ENABLE_TWITTER_FUNCTIONALITY, type = "boolean" }, + ["threatPlaySounds"] = { prettyName = nil, description = OPTION_TOOLTIP_PLAY_AGGRO_SOUNDS, type = "boolean" }, + -- Toasts mmhhh...Toast. + ["showToastOnline"] = { prettyName = SHOW_TOAST_ONLINE_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_ONLINE, type = "boolean" }, + ["showToastOffline"] = { prettyName = SHOW_TOAST_OFFLINE_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_OFFLINE, type = "boolean" }, + ["showToastBroadcast"] = { prettyName = SHOW_TOAST_BROADCAST_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_BROADCAST, type = "boolean" }, + ["showToastFriendRequest"] = { prettyName = SHOW_TOAST_FRIEND_REQUEST_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_FRIEND_REQUEST, type = "boolean" }, + ["showToastConversation"] = { prettyName = SHOW_TOAST_CONVERSATION_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_CONVERSATION, type = "boolean" }, + ["showToastWindow"] = { prettyName = SHOW_TOAST_WINDOW_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_WINDOW, type = "boolean" }, + ["toastDuration"] = { prettyName = nil, description = OPTION_TOOLTIP_TOAST_DURATION, type = "number" }, - ["reverseCleanupBags"] = { prettyName = REVERSE_CLEAN_UP_BAGS_TEXT, description = OPTION_TOOLTIP_REVERSE_CLEAN_UP_BAGS, type = "boolean" }, - ["lootLeftmostBag"] = { prettyName = REVERSE_NEW_LOOT_TEXT, description = OPTION_TOOLTIP_REVERSE_NEW_LOOT, type = "boolean" }, - ["stopAutoAttackOnTargetChange"] = { prettyName = STOP_AUTO_ATTACK, description = OPTION_TOOLTIP_STOP_AUTO_ATTACK, type = "boolean" }, - ["assistAttack"] = { prettyName = ASSIST_ATTACK, description = OPTION_TOOLTIP_ASSIST_ATTACK, type = "boolean" }, - ["autoSelfCast"] = { prettyName = AUTO_SELF_CAST_TEXT, description = OPTION_TOOLTIP_SELF_CAST_TEXT, type = "boolean" }, - ["ActionButtonUseKeyDown"] = { prettyName = ACTION_BUTTON_USE_KEY_DOWN, description = OPTION_TOOLTIP_ACTION_BUTTON_USE_KEY_DOWN, type = "boolean" }, - ["mapFade"] = { prettyName = MAP_FADE_TEXT, description = OPTION_TOOLTIP_MAP_FADE, type = "boolean" }, - ["trackQuestSorting"] = { type = "table", options = {"proximity", "top" } }, - ["removeChatDelay"] = { prettyName = REMOVE_CHAT_DELAY_TEXT, description = OPTION_TOOLTIP_REMOVE_CHAT_DELAY_TEXT, type = "boolean" }, - ["secureAbilityToggle"] = { prettyName = SECURE_ABILITY_TOGGLE, description = OPTION_TOOLTIP_SECURE_ABILITY_TOGGLE, type = "boolean" }, - ["scriptErrors"] = { prettyName = SHOW_LUA_ERRORS, description = OPTION_TOOLTIP_SHOW_LUA_ERRORS, type = "boolean" }, - ["lootUnderMouse"] = { prettyName = LOOT_UNDER_MOUSE_TEXT, description = OPTION_TOOLTIP_LOOT_UNDER_MOUSE_TEXT, type = "boolean" }, - ["ShowQuestUnitCircles"] = { prettyName = "Quest Unit Circles", description = "Determines if units related to a quest display an indicator on the ground", type = "boolean" }, - ["autoLootDefault"] = { prettyName = AUTO_LOOT_DEFAULT_TEXT, description = OPTION_TOOLTIP_AUTO_LOOT_DEFAULT, type = "boolean" }, - ["threatShowNumeric"] = { prettyName = SHOW_NUMERIC_THREAT, description = OPTION_TOOLTIP_SHOW_NUMERIC_THREAT, type = "boolean" }, - ["showLootSpam"] = { prettyName = SHOW_LOOT_SPAM, description = OPTION_TOOLTIP_SHOW_LOOT_SPAM, type = "boolean" }, - ["advancedWatchFrame"] = { prettyName = ADVANCED_OBJECTIVES_TEXT, description = OPTION_TOOLTIP_ADVANCED_OBJECTIVES_TEXT, type = "" }, - ["watchFrameIgnoreCursor"] = { prettyName = OBJECTIVES_IGNORE_CURSOR_TEXT, description = OPTION_TOOLTIP_OBJECTIVES_IGNORE_CURSOR, type = "boolean" }, - ["guildMemberNotify"] = { prettyName = GUILDMEMBER_ALERT, description = OPTION_TOOLTIP_GUILDMEMBER_ALERT, type = "boolean" }, - ["showArenaEnemyFrames"] = { prettyName = SHOW_ARENA_ENEMY_FRAMES_TEXT, description = OPTION_TOOLTIP_SHOW_ARENA_ENEMY_FRAMES, type = "boolean" }, - ["autoClearAFK"] = { prettyName = nil, description = OPTION_TOOLTIP_CLEAR_AFK, type = "boolean" }, - ["colorblindWeaknessFactor"] = { prettyName = nil, description = OPTION_TOOLTIP_ADJUST_COLORBLIND_STRENGTH, type = "boolean" }, - ["autoLootDefault"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_LOOT_DEFAULT, type = "boolean" }, - ["autoLootRate"] = { prettyName = "Auto Loot Rate", description = "Rate in milliseconds to tick auto loot", type = "number" }, - ["ChatAmbienceVolume"] = { prettyName = nil, description = "", type = "boolean" }, - ["threatShowNumeric"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_NUMERIC_THREAT, type = "boolean" }, - ["rightActionBar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_MULTIBAR3, type = "boolean" }, - ["emphasizeMySpellEffects"] = { prettyName = nil, description = OPTION_TOOLTIP_EMPHASIZE_MY_SPELLS, type = "boolean" }, - ["chatBubblesParty"] = { prettyName = nil, description = OPTION_TOOLTIP_PARTY_CHAT_BUBBLES, type = "boolean" }, - ["enableTwitter"] = { prettyName = nil, description = OPTION_TOOLTIP_SOCIAL_ENABLE_TWITTER_FUNCTIONALITY, type = "boolean" }, - ["threatPlaySounds"] = { prettyName = nil, description = OPTION_TOOLTIP_PLAY_AGGRO_SOUNDS, type = "boolean" }, - -- Toasts mmhhh...Toast. - ["showToastOnline"] = { prettyName = SHOW_TOAST_ONLINE_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_ONLINE, type = "boolean" }, - ["showToastOffline"] = { prettyName = SHOW_TOAST_OFFLINE_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_OFFLINE, type = "boolean" }, - ["showToastBroadcast"] = { prettyName = SHOW_TOAST_BROADCAST_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_BROADCAST, type = "boolean" }, - ["showToastFriendRequest"] = { prettyName = SHOW_TOAST_FRIEND_REQUEST_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_FRIEND_REQUEST, type = "boolean" }, - ["showToastConversation"] = { prettyName = SHOW_TOAST_CONVERSATION_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_CONVERSATION, type = "boolean" }, - ["showToastWindow"] = { prettyName = SHOW_TOAST_WINDOW_TEXT, description = OPTION_TOOLTIP_SHOW_TOAST_WINDOW, type = "boolean" }, - ["toastDuration"] = { prettyName = nil, description = OPTION_TOOLTIP_TOAST_DURATION, type = "number" }, + ["enableMouseSpeed"] = { prettyName = ENABLE_MOUSE_SPEED, description = OPTION_TOOLTIP_ENABLE_MOUSE_SPEED, type = "boolean" }, + ["mouseInvertPitch"] = { prettyName = INVERT_MOUSE, description = OPTION_TOOLTIP_INVERT_MOUSE, type = "boolean" }, + ["enableWoWMouse"] = { prettyName = WOW_MOUSE, description = OPTION_TOOLTIP_WOW_MOUSE, type = "boolean" }, + ["autointeract"] = { prettyName = CLICK_TO_MOVE, description = OPTION_TOOLTIP_CLICK_TO_MOVE, type = "boolean" }, + ["mouseSpeed"] = { prettyName = MOUSE_SENSITIVITY, description = OPTION_TOOLTIP_MOUSE_SENSITIVITY, type = "number" }, - ["enableMouseSpeed"] = { prettyName = ENABLE_MOUSE_SPEED, description = OPTION_TOOLTIP_ENABLE_MOUSE_SPEED, type = "boolean" }, - ["mouseInvertPitch"] = { prettyName = INVERT_MOUSE, description = OPTION_TOOLTIP_INVERT_MOUSE, type = "boolean" }, - ["enableWoWMouse"] = { prettyName = WOW_MOUSE, description = OPTION_TOOLTIP_WOW_MOUSE, type = "boolean" }, - ["autointeract"] = { prettyName = CLICK_TO_MOVE, description = OPTION_TOOLTIP_CLICK_TO_MOVE, type = "boolean" }, - ["mouseSpeed"] = { prettyName = MOUSE_SENSITIVITY, description = OPTION_TOOLTIP_MOUSE_SENSITIVITY, type = "number" }, + ["wholeChatWindowClickable"] = { prettyName = nil, description = OPTION_TOOLTIP_CHAT_WHOLE_WINDOW_CLICKABLE, type = "boolean" }, + ["useEnglishAudio"] = { prettyName = nil, description = OPTION_TOOLTIP_USE_ENGLISH_AUDIO, type = "boolean" }, + ["ChatSoundVolume"] = { prettyName = nil, description = "", type = "number" }, + --["reducedLagTolerance"] = { prettyName = "Custom Lag Tolerance", description = OPTION_TOOLTIP_REDUCED_LAG_TOLERANCE, type = "boolean" }, + ["EnableMicrophone"] = { prettyName = nil, description = OPTION_TOOLTIP_ENABLE_MICROPHONE, type = "boolean" }, + ["autoOpenLootHistory"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_OPEN_LOOT_HISTORY, type = "boolean" }, + ["showVKeyCastbarOnlyOnTarget"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_TARGET_CASTBAR_IN_V_KEY_ONLY_ON_TARGET, type = "boolean" }, + ["displaySpellActivationOverlays"] = { prettyName = nil, description = OPTION_TOOLTIP_DISPLAY_SPELL_ALERTS, type = "boolean" }, + ["hdPlayerModels"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_HD_MODELS, type = "boolean" }, + ["autoLootKey"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_LOOT_KEY, type = "boolean" }, -- TODO TYPE + ["SpellQueueWindow"] = { + prettyName = LAG_TOLERANCE, + description = "Determines how far ahead of the 'end of a spell' start-recovery spell system can be, before allowing spell request to be sent to the server. Ie this controls the built-in lag for the ability queuing system. Ideally, you'll want to set this to your in-game latency.", + type = "number", + }, + ["advancedCombatLogging"] = { prettyName = nil, description = OPTION_TOOLTIP_ADVANCED_COMBAT_LOGGING, type = "boolean" }, + ["disableServerNagle"] = { prettyName = nil, description = OPTION_TOOLTIP_OPTIMIZE_NETWORK_SPEED, type = "boolean" }, + -- Camera + ["cameraYawSmoothSpeed"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_FOLLOW_SPEED, type = "number" }, + ["cameraWaterCollision"] = { prettyName = nil, description = OPTION_TOOLTIP_WATER_COLLISION, type = "boolean" }, + ["cameraBobbing"] = { prettyName = nil, description = OPTION_TOOLTIP_HEAD_BOB, type = "boolean" }, + ["cameraPivot"] = { prettyName = nil, description = OPTION_TOOLTIP_SMART_PIVOT, type = "boolean" }, + ["cameraDistanceMaxZoomFactor"] = { prettyName = MAX_FOLLOW_DIST, description = OPTION_TOOLTIP_MAX_FOLLOW_DIST, type = "number" }, + ["cameraYawMoveSpeed"] = { prettyName = MOUSE_LOOK_SPEED, description = OPTION_TOOLTIP_MOUSE_LOOK_SPEED, type = "number" }, + ["cameraTerrainTilt"] = { prettyName = nil, description = OPTION_TOOLTIP_FOLLOW_TERRAIN, type = "boolean" }, + ["cameraHeadMovementStrength"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraHeadMovementWhileStanding"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraHeadMovementRange"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraHeadMovementSmoothRate"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraDynamicPitch"] = { prettyName = nil, description = nil, type = "number" }, + -- ["cameraDynamicPitchBaseFovPad"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraDynamicPitchBaseFovPadFlying"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraDynamicPitchSmartPivotCutoffDist"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraOverShoulder"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraLockedTargetFocusing"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraDistanceMoveSpeed"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraPitchMoveSpeed"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraBobbingSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraFoVSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraDistanceSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraGroundSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraHeightSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraPitchSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraTargetSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, + -- ["cameraFlyingMountHeightSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraViewBlendStyle"] = { prettyName = nil, description = nil, type = "number" }, + ["camerasmooth"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraSmoothPitch"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraSmoothYaw"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraSmoothStyle"] = { prettyName = nil, description = nil, type = "number" }, + ["cameraSmoothTrackingStyle"] = { prettyName = nil, description = nil, type = "number" }, - ["wholeChatWindowClickable"] = { prettyName = nil, description = OPTION_TOOLTIP_CHAT_WHOLE_WINDOW_CLICKABLE, type = "boolean" }, - ["useEnglishAudio"] = { prettyName = nil, description = OPTION_TOOLTIP_USE_ENGLISH_AUDIO, type = "boolean" }, - ["ChatSoundVolume"] = { prettyName = nil, description = "", type = "number" }, - --["reducedLagTolerance"] = { prettyName = "Custom Lag Tolerance", description = OPTION_TOOLTIP_REDUCED_LAG_TOLERANCE, type = "boolean" }, - ["EnableMicrophone"] = { prettyName = nil, description = OPTION_TOOLTIP_ENABLE_MICROPHONE, type = "boolean" }, - ["autoOpenLootHistory"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_OPEN_LOOT_HISTORY, type = "boolean" }, - ["showVKeyCastbarOnlyOnTarget"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_TARGET_CASTBAR_IN_V_KEY_ONLY_ON_TARGET, type = "boolean" }, - ["displaySpellActivationOverlays"] = { prettyName = nil, description = OPTION_TOOLTIP_DISPLAY_SPELL_ALERTS, type = "boolean" }, - ["hdPlayerModels"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_HD_MODELS, type = "boolean" }, - ["autoLootKey"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_LOOT_KEY, type = "boolean" }, -- TODO TYPE - ["SpellQueueWindow"] = { prettyName = LAG_TOLERANCE, description = "Determines how far ahead of the \'end of a spell\' start-recovery spell system can be, before allowing spell request to be sent to the server. Ie this controls the built-in lag for the ability queuing system. Ideally, you\'ll want to set this to your in-game latency.", type = "number" }, - ["advancedCombatLogging"] = { prettyName = nil, description = OPTION_TOOLTIP_ADVANCED_COMBAT_LOGGING, type = "boolean" }, - ["disableServerNagle"] = { prettyName = nil, description = OPTION_TOOLTIP_OPTIMIZE_NETWORK_SPEED, type = "boolean" }, - -- Camera - ["cameraYawSmoothSpeed"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_FOLLOW_SPEED, type = "number" }, - ["cameraWaterCollision"] = { prettyName = nil, description = OPTION_TOOLTIP_WATER_COLLISION, type = "boolean" }, - ["cameraBobbing"] = { prettyName = nil, description = OPTION_TOOLTIP_HEAD_BOB, type = "boolean" }, - ["cameraPivot"] = { prettyName = nil, description = OPTION_TOOLTIP_SMART_PIVOT, type = "boolean" }, - ["cameraDistanceMaxZoomFactor"] = { prettyName = MAX_FOLLOW_DIST, description = OPTION_TOOLTIP_MAX_FOLLOW_DIST, type = "number" }, - ["cameraYawMoveSpeed"] = { prettyName = MOUSE_LOOK_SPEED, description = OPTION_TOOLTIP_MOUSE_LOOK_SPEED, type = "number" }, - ["cameraTerrainTilt"] = { prettyName = nil, description = OPTION_TOOLTIP_FOLLOW_TERRAIN, type = "boolean" }, - ["cameraHeadMovementStrength"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraHeadMovementWhileStanding"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraHeadMovementRange"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraHeadMovementSmoothRate"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraDynamicPitch"] = { prettyName = nil, description = nil, type = "number" }, - -- ["cameraDynamicPitchBaseFovPad"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraDynamicPitchBaseFovPadFlying"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraDynamicPitchSmartPivotCutoffDist"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraOverShoulder"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraLockedTargetFocusing"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraDistanceMoveSpeed"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraPitchMoveSpeed"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraBobbingSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraFoVSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraDistanceSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraGroundSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraHeightSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraPitchSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraTargetSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, - -- ["cameraFlyingMountHeightSmoothSpeed"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraViewBlendStyle"] = { prettyName = nil, description = nil, type = "number" }, - ["camerasmooth"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraSmoothPitch"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraSmoothYaw"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraSmoothStyle"] = { prettyName = nil, description = nil, type = "number" }, - ["cameraSmoothTrackingStyle"] = { prettyName = nil, description = nil, type = "number" }, + ["chatBubbles"] = { prettyName = nil, description = OPTION_TOOLTIP_CHAT_BUBBLES, type = "boolean" }, + ["autoDismountFlying"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_DISMOUNT_FLYING, type = "boolean" }, + ["bottomRightActionBar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_MULTIBAR2, type = "boolean" }, + ["showPartyBackground"] = { prettyName = SHOW_PARTY_BACKGROUND_TEXT, description = OPTION_TOOLTIP_SHOW_PARTY_BACKGROUND, type = "boolean" }, + ["showPartyPets"] = { prettyName = SHOW_PARTY_PETS_TEXT, description = OPTION_TOOLTIP_SHOW_PARTY_PETS, type = "boolean" }, + ["showArenaEnemyFrames"] = { prettyName = SHOW_ARENA_ENEMY_FRAMES_TEXT, description = OPTION_TOOLTIP_SHOW_ARENA_ENEMY_FRAMES, type = "boolean" }, + ["showArenaEnemyCastbar"] = { prettyName = SHOW_ARENA_ENEMY_CASTBAR_TEXT, description = OPTION_TOOLTIP_SHOW_ARENA_ENEMY_CASTBAR, type = "boolean" }, + ["showArenaEnemyPets"] = { prettyName = SHOW_ARENA_ENEMY_PETS_TEXT, description = OPTION_TOOLTIP_SHOW_ARENA_ENEMY_PETS, type = "boolean" }, + ["fullSizeFocusFrame"] = { prettyName = FULL_SIZE_FOCUS_FRAME_TEXT, description = OPTION_TOOLTIP_FULL_SIZE_FOCUS_FRAME, type = "boolean" }, + ["spamFilter"] = { prettyName = nil, description = OPTION_TOOLTIP_SPAM_FILTER, type = "boolean" }, + ["profanityFilter"] = { prettyName = nil, description = OPTION_TOOLTIP_PROFANITY_FILTER, type = "boolean" }, + ["EnableVoiceChat"] = { prettyName = nil, description = OPTION_TOOLTIP_ENABLE_VOICECHAT, type = "boolean" }, + ["rightTwoActionBar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_MULTIBAR4, type = "boolean" }, + ["rotateMinimap"] = { prettyName = nil, description = OPTION_TOOLTIP_ROTATE_MINIMAP, type = "boolean" }, + ["blockTrades"] = { prettyName = nil, description = OPTION_TOOLTIP_BLOCK_TRADES, type = "boolean" }, + ["movieSubtitle"] = { prettyName = nil, description = OPTION_TOOLTIP_CINEMATIC_SUBTITLES, type = "boolean" }, + ["displayFreeBagSlots"] = { prettyName = nil, description = OPTION_TOOLTIP_DISPLAY_FREE_BAG_SLOTS, type = "boolean" }, + ["lockActionBars"] = { prettyName = nil, description = OPTION_TOOLTIP_LOCK_ACTIONBAR, type = "boolean" }, + ["screenEdgeFlash"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_FULLSCREEN_STATUS, type = "boolean" }, + ["showVKeyCastbar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_TARGET_CASTBAR_IN_V_KEY, type = "boolean" }, + ["chatMouseScroll"] = { prettyName = CHAT_MOUSE_WHEEL_SCROLL, description = OPTION_TOOLTIP_CHAT_MOUSE_WHEEL_SCROLL, type = "boolean" }, + ["InboundChatVolume"] = { prettyName = nil, description = OPTION_TOOLTIP_VOICE_OUTPUT_VOLUME, type = "number" }, + ["spellActivationOverlayOpacity"] = { prettyName = nil, description = OPTION_TOOLTIP_SPELL_ALERT_OPACITY, type = "number" }, + ["PushToTalkSound"] = { prettyName = nil, description = OPTION_TOOLTIP_PUSHTOTALK_SOUND, type = "boolean" }, + ["countdownForCooldowns"] = { prettyName = nil, description = OPTION_TOOLTIP_COUNTDOWN_FOR_COOLDOWNS, type = "boolean" }, + ["VoiceActivationSensitivity"] = { prettyName = nil, description = OPTION_TOOLTIP_VOICE_ACTIVATION_SENSITIVITY, type = "number" }, + ["alwaysShowActionBars"] = { prettyName = nil, description = OPTION_TOOLTIP_ALWAYS_SHOW_MULTIBARS, type = "boolean" }, + ["OutboundChatVolume"] = { prettyName = nil, description = OPTION_TOOLTIP_VOICE_INPUT_VOLUME, type = "number" }, + ["autoQuestWatch"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_QUEST_WATCH, type = "boolean" }, + ["SpellTooltip_DisplayAvgValues"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_POINTS_AS_AVG, type = "boolean" }, + ["bottomLeftActionBar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_MULTIBAR1, type = "boolean" }, + ["showVKeyCastbarSpellName"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_TARGET_CASTBAR_IN_V_KEY_SPELL_NAME, type = "boolean" }, + ["buffDurations"] = { prettyName = SHOW_BUFF_DURATION_TEXT, description = OPTION_TOOLTIP_SHOW_BUFF_DURATION, type = "boolean" }, + ["showDispelDebuffs"] = { prettyName = SHOW_DISPELLABLE_DEBUFFS_TEXT, description = OPTION_TOOLTIP_SHOW_DISPELLABLE_DEBUFFS, type = "boolean" }, + ["showCastableBuffs"] = { prettyName = SHOW_CASTABLE_BUFFS_TEXT, description = OPTION_TOOLTIP_SHOW_CASTABLE_BUFFS, type = "boolean" }, + ["deselectOnClick"] = { prettyName = nil, description = OPTION_TOOLTIP_GAMEFIELD_DESELECT, type = "boolean" }, + ["autoQuestProgress"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_QUEST_PROGRESS, type = "boolean" }, + ["UberTooltips"] = { prettyName = USE_UBERTOOLTIPS, description = OPTION_TOOLTIP_USE_UBERTOOLTIPS, type = "boolean" }, + ["chatClassColorOverride"] = { prettyName = "Disable Class Colors", description = "Disables Class Colors in Chat", type = "boolean" }, + -- Sound + ["Sound_EnableAllSound"] = { prettyName = ENABLE_SOUND, description = OPTION_TOOLTIP_ENABLE_SOUND, type = "boolean" }, + ["Sound_EnableDSPEffects"] = { prettyName = ENABLE_DSP_EFFECTS, description = OPTION_TOOLTIP_ENABLE_DSP_EFFECTS, type = "boolean" }, + ["Sound_SFXVolume"] = { prettyName = SOUND_VOLUME, description = OPTION_TOOLTIP_SOUND_VOLUME, type = "number" }, + ["Sound_ZoneMusicNoDelay"] = { prettyName = ENABLE_MUSIC_LOOPING, description = OPTION_TOOLTIP_ENABLE_MUSIC_LOOPING, type = "boolean" }, + ["Sound_EnableDialog"] = { prettyName = ENABLE_DIALOG, description = OPTION_TOOLTIP_ENABLE_DIALOG, type = "boolean" }, + ["Sound_EnableSoundWhenGameIsInBG"] = { prettyName = ENABLE_BGSOUND, description = OPTION_TOOLTIP_ENABLE_BGSOUND, type = "boolean" }, + ["Sound_EnableEmoteSounds"] = { prettyName = ENABLE_EMOTE_SOUNDS, description = OPTION_TOOLTIP_ENABLE_EMOTE_SOUNDS, type = "boolean" }, + ["Sound_EnableAmbience"] = { prettyName = ENABLE_AMBIENCE, description = OPTION_TOOLTIP_ENABLE_AMBIENCE, type = "boolean" }, + ["Sound_DialogVolume"] = { prettyName = DIALOG_VOLUME, description = OPTION_TOOLTIP_DIALOG_VOLUME, type = "number" }, + ["Sound_EnablePetBattleMusic"] = { prettyName = ENABLE_PET_BATTLE_MUSIC, description = OPTION_TOOLTIP_ENABLE_PET_BATTLE_MUSIC, type = "boolean" }, + ["Sound_MusicVolume"] = { prettyName = MUSIC_VOLUME, description = OPTION_TOOLTIP_MUSIC_VOLUME, type = "number" }, + ["Sound_EnableReverb"] = { prettyName = ENABLE_REVERB, description = OPTION_TOOLTIP_ENABLE_REVERB, type = "boolean" }, + ["Sound_MasterVolume"] = { prettyName = MASTER_VOLUME, description = OPTION_TOOLTIP_MASTER_VOLUME, type = "number" }, + ["Sound_EnableMusic"] = { prettyName = ENABLE_MUSIC, description = OPTION_TOOLTIP_ENABLE_MUSIC, type = "boolean" }, + ["Sound_AmbienceVolume"] = { prettyName = AMBIENCE_VOLUME, description = OPTION_TOOLTIP_AMBIENCE_VOLUME, type = "number" }, + ["Sound_EnableErrorSpeech"] = { prettyName = ENABLE_ERROR_SPEECH, description = OPTION_TOOLTIP_ENABLE_ERROR_SPEECH, type = "boolean" }, + ["Sound_EnableSFX"] = { prettyName = ENABLE_SOUNDFX, description = OPTION_TOOLTIP_ENABLE_SOUNDFX, type = "boolean" }, + ["Sound_ListenerAtCharacter"] = { prettyName = ENABLE_SOUND_AT_CHARACTER, description = OPTION_TOOLTIP_ENABLE_SOUND_AT_CHARACTER, type = "boolean" }, + ["Sound_EnablePetSounds"] = { prettyName = ENABLE_PET_SOUNDS, description = OPTION_TOOLTIP_ENABLE_PET_SOUNDS, type = "boolean" }, + ["Sound_EnablePositionalLowPassFilter"] = { prettyName = ENABLE_SOFTWARE_HRTF, description = OPTION_TOOLTIP_ENABLE_SOFTWARE_HRTF, type = "boolean" }, - ["chatBubbles"] = { prettyName = nil, description = OPTION_TOOLTIP_CHAT_BUBBLES, type = "boolean" }, - ["autoDismountFlying"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_DISMOUNT_FLYING, type = "boolean" }, - ["bottomRightActionBar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_MULTIBAR2, type = "boolean" }, - ["showPartyBackground"] = { prettyName = SHOW_PARTY_BACKGROUND_TEXT, description = OPTION_TOOLTIP_SHOW_PARTY_BACKGROUND, type = "boolean" }, - ["showPartyPets"] = { prettyName = SHOW_PARTY_PETS_TEXT, description = OPTION_TOOLTIP_SHOW_PARTY_PETS, type = "boolean" }, - ["showArenaEnemyFrames"] = { prettyName = SHOW_ARENA_ENEMY_FRAMES_TEXT, description = OPTION_TOOLTIP_SHOW_ARENA_ENEMY_FRAMES, type = "boolean" }, - ["showArenaEnemyCastbar"] = { prettyName = SHOW_ARENA_ENEMY_CASTBAR_TEXT, description = OPTION_TOOLTIP_SHOW_ARENA_ENEMY_CASTBAR, type = "boolean" }, - ["showArenaEnemyPets"] = { prettyName = SHOW_ARENA_ENEMY_PETS_TEXT, description = OPTION_TOOLTIP_SHOW_ARENA_ENEMY_PETS, type = "boolean" }, - ["fullSizeFocusFrame"] = { prettyName = FULL_SIZE_FOCUS_FRAME_TEXT, description = OPTION_TOOLTIP_FULL_SIZE_FOCUS_FRAME, type = "boolean" }, - ["spamFilter"] = { prettyName = nil, description = OPTION_TOOLTIP_SPAM_FILTER, type = "boolean" }, - ["profanityFilter"] = { prettyName = nil, description = OPTION_TOOLTIP_PROFANITY_FILTER, type = "boolean" }, - ["EnableVoiceChat"] = { prettyName = nil, description = OPTION_TOOLTIP_ENABLE_VOICECHAT, type = "boolean" }, - ["rightTwoActionBar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_MULTIBAR4, type = "boolean" }, - ["rotateMinimap"] = { prettyName = nil, description = OPTION_TOOLTIP_ROTATE_MINIMAP, type = "boolean" }, - ["blockTrades"] = { prettyName = nil, description = OPTION_TOOLTIP_BLOCK_TRADES, type = "boolean" }, - ["movieSubtitle"] = { prettyName = nil, description = OPTION_TOOLTIP_CINEMATIC_SUBTITLES, type = "boolean" }, - ["displayFreeBagSlots"] = { prettyName = nil, description = OPTION_TOOLTIP_DISPLAY_FREE_BAG_SLOTS, type = "boolean" }, - ["lockActionBars"] = { prettyName = nil, description = OPTION_TOOLTIP_LOCK_ACTIONBAR, type = "boolean" }, - ["screenEdgeFlash"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_FULLSCREEN_STATUS, type = "boolean" }, - ["showVKeyCastbar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_TARGET_CASTBAR_IN_V_KEY, type = "boolean" }, - ["chatMouseScroll"] = { prettyName = CHAT_MOUSE_WHEEL_SCROLL, description = OPTION_TOOLTIP_CHAT_MOUSE_WHEEL_SCROLL, type = "boolean" }, - ["InboundChatVolume"] = { prettyName = nil, description = OPTION_TOOLTIP_VOICE_OUTPUT_VOLUME, type = "number" }, - ["spellActivationOverlayOpacity"] = { prettyName = nil, description = OPTION_TOOLTIP_SPELL_ALERT_OPACITY, type = "number" }, - ["PushToTalkSound"] = { prettyName = nil, description = OPTION_TOOLTIP_PUSHTOTALK_SOUND, type = "boolean" }, - ["countdownForCooldowns"] = { prettyName = nil, description = OPTION_TOOLTIP_COUNTDOWN_FOR_COOLDOWNS, type = "boolean" }, - ["VoiceActivationSensitivity"] = { prettyName = nil, description = OPTION_TOOLTIP_VOICE_ACTIVATION_SENSITIVITY, type = "number" }, - ["alwaysShowActionBars"] = { prettyName = nil, description = OPTION_TOOLTIP_ALWAYS_SHOW_MULTIBARS, type = "boolean" }, - ["OutboundChatVolume"] = { prettyName = nil, description = OPTION_TOOLTIP_VOICE_INPUT_VOLUME, type = "number" }, - ["autoQuestWatch"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_QUEST_WATCH, type = "boolean" }, - ["SpellTooltip_DisplayAvgValues"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_POINTS_AS_AVG, type = "boolean" }, - ["bottomLeftActionBar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_MULTIBAR1, type = "boolean" }, - ["showVKeyCastbarSpellName"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_TARGET_CASTBAR_IN_V_KEY_SPELL_NAME, type = "boolean" }, - ["buffDurations"] = { prettyName = SHOW_BUFF_DURATION_TEXT, description = OPTION_TOOLTIP_SHOW_BUFF_DURATION, type = "boolean" }, - ["showDispelDebuffs"] = { prettyName = SHOW_DISPELLABLE_DEBUFFS_TEXT, description = OPTION_TOOLTIP_SHOW_DISPELLABLE_DEBUFFS, type = "boolean" }, - ["showCastableBuffs"] = { prettyName = SHOW_CASTABLE_BUFFS_TEXT, description = OPTION_TOOLTIP_SHOW_CASTABLE_BUFFS, type = "boolean" }, - ["deselectOnClick"] = { prettyName = nil, description = OPTION_TOOLTIP_GAMEFIELD_DESELECT, type = "boolean" }, - ["autoQuestProgress"] = { prettyName = nil, description = OPTION_TOOLTIP_AUTO_QUEST_PROGRESS, type = "boolean" }, - ["UberTooltips"] = { prettyName = USE_UBERTOOLTIPS, description = OPTION_TOOLTIP_USE_UBERTOOLTIPS, type = "boolean" }, - ["chatClassColorOverride"] = { prettyName = "Disable Class Colors", description = "Disables Class Colors in Chat", type = "boolean" }, - -- Sound - ["Sound_EnableAllSound"] = { prettyName = ENABLE_SOUND, description = OPTION_TOOLTIP_ENABLE_SOUND, type = "boolean" }, - ["Sound_EnableDSPEffects"] = { prettyName = ENABLE_DSP_EFFECTS, description = OPTION_TOOLTIP_ENABLE_DSP_EFFECTS, type = "boolean" }, - ["Sound_SFXVolume"] = { prettyName = SOUND_VOLUME, description = OPTION_TOOLTIP_SOUND_VOLUME, type = "number" }, - ["Sound_ZoneMusicNoDelay"] = { prettyName = ENABLE_MUSIC_LOOPING, description = OPTION_TOOLTIP_ENABLE_MUSIC_LOOPING, type = "boolean" }, - ["Sound_EnableDialog"] = { prettyName = ENABLE_DIALOG, description = OPTION_TOOLTIP_ENABLE_DIALOG, type = "boolean" }, - ["Sound_EnableSoundWhenGameIsInBG"] = { prettyName = ENABLE_BGSOUND, description = OPTION_TOOLTIP_ENABLE_BGSOUND, type = "boolean" }, - ["Sound_EnableEmoteSounds"] = { prettyName = ENABLE_EMOTE_SOUNDS, description = OPTION_TOOLTIP_ENABLE_EMOTE_SOUNDS, type = "boolean" }, - ["Sound_EnableAmbience"] = { prettyName = ENABLE_AMBIENCE, description = OPTION_TOOLTIP_ENABLE_AMBIENCE, type = "boolean" }, - ["Sound_DialogVolume"] = { prettyName = DIALOG_VOLUME, description = OPTION_TOOLTIP_DIALOG_VOLUME, type = "number" }, - ["Sound_EnablePetBattleMusic"] = { prettyName = ENABLE_PET_BATTLE_MUSIC, description = OPTION_TOOLTIP_ENABLE_PET_BATTLE_MUSIC, type = "boolean" }, - ["Sound_MusicVolume"] = { prettyName = MUSIC_VOLUME, description = OPTION_TOOLTIP_MUSIC_VOLUME, type = "number" }, - ["Sound_EnableReverb"] = { prettyName = ENABLE_REVERB, description = OPTION_TOOLTIP_ENABLE_REVERB, type = "boolean" }, - ["Sound_MasterVolume"] = { prettyName = MASTER_VOLUME, description = OPTION_TOOLTIP_MASTER_VOLUME, type = "number" }, - ["Sound_EnableMusic"] = { prettyName = ENABLE_MUSIC, description = OPTION_TOOLTIP_ENABLE_MUSIC, type = "boolean" }, - ["Sound_AmbienceVolume"] = { prettyName = AMBIENCE_VOLUME, description = OPTION_TOOLTIP_AMBIENCE_VOLUME, type = "number" }, - ["Sound_EnableErrorSpeech"] = { prettyName = ENABLE_ERROR_SPEECH, description = OPTION_TOOLTIP_ENABLE_ERROR_SPEECH, type = "boolean" }, - ["Sound_EnableSFX"] = { prettyName = ENABLE_SOUNDFX, description = OPTION_TOOLTIP_ENABLE_SOUNDFX, type = "boolean" }, - ["Sound_ListenerAtCharacter"] = { prettyName = ENABLE_SOUND_AT_CHARACTER, description = OPTION_TOOLTIP_ENABLE_SOUND_AT_CHARACTER, type = "boolean" }, - ["Sound_EnablePetSounds"] = { prettyName = ENABLE_PET_SOUNDS, description = OPTION_TOOLTIP_ENABLE_PET_SOUNDS, type = "boolean" }, - ["Sound_EnablePositionalLowPassFilter"] = { prettyName = ENABLE_SOFTWARE_HRTF, description = OPTION_TOOLTIP_ENABLE_SOFTWARE_HRTF, type = "boolean" }, + ["showTargetOfTarget"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_TARGET_OF_TARGET, type = "boolean" }, + ["guildMemberNotify"] = { prettyName = nil, description = OPTION_TOOLTIP_GUILDMEMBER_ALERT, type = "boolean" }, + ["showTutorials"] = { prettyName = SHOW_TUTORIALS, description = OPTION_TOOLTIP_SHOW_TUTORIALS, type = "boolean" }, + ["lossOfControl"] = { prettyName = nil, description = OPTION_TOOLTIP_LOSS_OF_CONTROL, type = "boolean" }, + ["blockChannelInvites"] = { prettyName = nil, description = OPTION_TOOLTIP_BLOCK_CHAT_CHANNEL_INVITE, type = "boolean" }, + ["showTargetCastbar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_TARGET_CASTBAR, type = "boolean" }, + ["enablePetBattleCombatText"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_PETBATTLE_COMBAT, type = "boolean" }, + ["colorblindMode"] = { prettyName = nil, description = OPTION_TOOLTIP_USE_COLORBLIND_MODE, type = "boolean" }, + ["useIPv6"] = { prettyName = USEIPV6, description = OPTION_TOOLTIP_USEIPV6, type = "boolean" }, + ["interactOnLeftClick"] = { prettyName = INTERACT_ON_LEFT_CLICK_TEXT, description = OPTION_TOOLTIP_INTERACT_ON_LEFT_CLICK, type = "boolean" }, + ["enableMovePad"] = { prettyName = MOVE_PAD, description = OPTION_TOOLTIP_MOVE_PAD, type = "boolean" }, + ["colorblindSimulator"] = { prettyName = nil, description = OPTION_TOOLTIP_COLORBLIND_FILTER, type = "boolean" }, - ["showTargetOfTarget"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_TARGET_OF_TARGET, type = "boolean" }, - ["guildMemberNotify"] = { prettyName = nil, description = OPTION_TOOLTIP_GUILDMEMBER_ALERT, type = "boolean" }, - ["showTutorials"] = { prettyName = SHOW_TUTORIALS, description = OPTION_TOOLTIP_SHOW_TUTORIALS, type = "boolean" }, - ["lossOfControl"] = { prettyName = nil, description = OPTION_TOOLTIP_LOSS_OF_CONTROL, type = "boolean" }, - ["blockChannelInvites"] = { prettyName = nil, description = OPTION_TOOLTIP_BLOCK_CHAT_CHANNEL_INVITE, type = "boolean" }, - ["showTargetCastbar"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_TARGET_CASTBAR, type = "boolean" }, - ["enablePetBattleCombatText"] = { prettyName = nil, description = OPTION_TOOLTIP_SHOW_PETBATTLE_COMBAT, type = "boolean" }, - ["colorblindMode"] = { prettyName = nil, description = OPTION_TOOLTIP_USE_COLORBLIND_MODE, type = "boolean" }, - ["useIPv6"] = { prettyName = USEIPV6, description = OPTION_TOOLTIP_USEIPV6, type = "boolean" }, - ["interactOnLeftClick"] = { prettyName = INTERACT_ON_LEFT_CLICK_TEXT, description = OPTION_TOOLTIP_INTERACT_ON_LEFT_CLICK, type = "boolean" }, - ["enableMovePad"] = { prettyName = MOVE_PAD, description = OPTION_TOOLTIP_MOVE_PAD, type = "boolean" }, - ["colorblindSimulator"] = { prettyName = nil, description = OPTION_TOOLTIP_COLORBLIND_FILTER, type = "boolean" }, + ["noBuffDebuffFilterOnTarget"] = { prettyName = "No Debuff Filter on Target", description = "Do not filter buffs or debuffs at all on targets", type = "boolean" }, + ["showHonorAsExperience"] = { prettyName = nil, description = "Show the honor bar as a regular experience bar in place of rep", type = "boolean" }, + -- Tab-Targetting + ["TargetNearestUseNew"] = { prettyName = nil, description = "Use 7.2 'nearest target' functionality", type = "boolean" }, + --["TargetPriorityAllowAnyOnScreen"] = { prettyName = nil, description = "If set, and no 100% correct target is available, allow selecting any valid in-range target (2 = also out-of-range)", type = "boolean" }, + ["TargetPriorityCombatLock"] = { + prettyName = nil, + description = "1=Lock to in-combat targets when starting from an in-combat target. 2=Further restrict to in-combat with player.", + type = "boolean", + }, + ["TargetPriorityCombatLockHighlight"] = { + prettyName = nil, + description = "1=Lock to in-combat targets when starting from an in-combat target. 2=Further restrict to in-combat with player. (while doing hold-to-target)", + type = "boolean", + }, + --["TargetPriorityHoldHighlightDelay"] = { prettyName = nil, description = "Delay in Milliseconds before priority target highlight starts when holding the button", type = "number" }, + --["TargetPriorityIncludeBehind"] = { prettyName = nil, description = "If set, include target's behind the player in priority target selection", type = "boolean" }, + ["TargetPriorityPvp"] = { + prettyName = nil, + description = "When in pvp, give higher priority to players and important pvp targets (2 = all pvp targets, 3 = players only)", + type = "boolean", + }, + --["TargetPriorityPvpLock"] = { prettyName = nil, description = "Lock to important pvp targets when starting from a pvp target.", type = "boolean" }, + --["TargetPriorityPvpLockHighlight"] = { prettyName = nil, description = "Lock to players when starting from a player target in pvp. (while doing hold-to-target)", type = "boolean" }, + --["TargetPriorityValueBank"] = { prettyName = nil, description = "Selects the scoring values bank for calculating target priority order", type = "boolean" }, + ["TargetPriorityCombatLockContextualRelaxation"] = { + prettyName = nil, + description = "1=Enables relaxation of combat lock based on context (eg. no in-combat target infront)", + type = "number", + }, - ["noBuffDebuffFilterOnTarget"] = { prettyName = "No Debuff Filter on Target", description = "Do not filter buffs or debuffs at all on targets", type = "boolean" }, - ["showHonorAsExperience"] = { prettyName = nil, description = "Show the honor bar as a regular experience bar in place of rep", type = "boolean" }, - -- Tab-Targetting - ["TargetNearestUseNew"] = { prettyName = nil, description = "Use 7.2 'nearest target' functionality", type = "boolean" }, - --["TargetPriorityAllowAnyOnScreen"] = { prettyName = nil, description = "If set, and no 100% correct target is available, allow selecting any valid in-range target (2 = also out-of-range)", type = "boolean" }, - ["TargetPriorityCombatLock"] = { prettyName = nil, description = "1=Lock to in-combat targets when starting from an in-combat target. 2=Further restrict to in-combat with player.", type = "boolean" }, - ["TargetPriorityCombatLockHighlight"] = { prettyName = nil, description = "1=Lock to in-combat targets when starting from an in-combat target. 2=Further restrict to in-combat with player. (while doing hold-to-target)", type = "boolean" }, - --["TargetPriorityHoldHighlightDelay"] = { prettyName = nil, description = "Delay in Milliseconds before priority target highlight starts when holding the button", type = "number" }, - --["TargetPriorityIncludeBehind"] = { prettyName = nil, description = "If set, include target's behind the player in priority target selection", type = "boolean" }, - ["TargetPriorityPvp"] = { prettyName = nil, description = "When in pvp, give higher priority to players and important pvp targets (2 = all pvp targets, 3 = players only)", type = "boolean" }, - --["TargetPriorityPvpLock"] = { prettyName = nil, description = "Lock to important pvp targets when starting from a pvp target.", type = "boolean" }, - --["TargetPriorityPvpLockHighlight"] = { prettyName = nil, description = "Lock to players when starting from a player target in pvp. (while doing hold-to-target)", type = "boolean" }, - --["TargetPriorityValueBank"] = { prettyName = nil, description = "Selects the scoring values bank for calculating target priority order", type = "boolean" }, - ["TargetPriorityCombatLockContextualRelaxation"] = { prettyName = nil, description = "1=Enables relaxation of combat lock based on context (eg. no in-combat target infront)", type = "number" }, + ["unitClutter"] = { prettyName = nil, description = "Enables/Disables unit clutter", type = "boolean" }, + ["unitClutterInstancesOnly"] = { prettyName = nil, description = "Whether or not to use unit clutter in instances only (0 or 1)", type = "boolean" }, + ["unitClutterPlayerThreshold"] = { prettyName = nil, description = "The number of players that have to be nearby to trigger unit clutter", type = "boolean" }, - ["unitClutter"] = { prettyName = nil, description = "Enables/Disables unit clutter", type = "boolean" }, - ["unitClutterInstancesOnly"] = { prettyName = nil, description = "Whether or not to use unit clutter in instances only (0 or 1)", type = "boolean" }, - ["unitClutterPlayerThreshold"] = { prettyName = nil, description = "The number of players that have to be nearby to trigger unit clutter", type = "boolean" }, + ["comboPointLocation"] = { prettyName = nil, description = "Location of combo points in UI. 1=target, 2=self", type = "number" }, + ["doNotFlashLowHealthWarning"] = { prettyName = nil, description = "Do not flash your screen red when you are low on health.", type = "boolean" }, + ["findYourselfAnywhere"] = { prettyName = nil, description = "Always Highlight your character", type = "boolean" }, + ["findYourselfAnywhereOnlyInCombat"] = { prettyName = nil, description = "Highlight your character only when in combat", type = "boolean" }, + ["findYourselfInBG"] = { prettyName = nil, description = "Always Highlight your character in Battlegrounds", type = "boolean" }, + ["findYourselfInBGOnlyInCombat"] = { prettyName = "Highlight your character in Battlegrounds only when in combat", description = "", type = "boolean" }, + ["findYourselfInRaid"] = { prettyName = nil, description = "Always Highlight your character in Raids", type = "boolean" }, + ["findYourselfInRaidOnlyInCombat"] = { prettyName = nil, description = "Highlight your character in Raids only when in combat", type = "boolean" }, + ["findYourselfMode"] = { prettyName = nil, description = "Highlight you character. 0 = circle, 1 = circle & outline", type = "boolean" }, + ["flashErrorMessageRepeats"] = { prettyName = nil, description = "Flashes the center screen red error text if the same message is fired.", type = "boolean" }, + -- Floating Combat Text + ["enableFloatingCombatText"] = { prettyName = SHOW_COMBAT_TEXT_TEXT, description = OPTION_TOOLTIP_SHOW_COMBAT_TEXT, type = "boolean" }, + ["floatingCombatTextAllSpellMechanics"] = { prettyName = nil, description = "", type = "boolean" }, + ["floatingCombatTextAuras"] = { prettyName = COMBAT_TEXT_SHOW_AURAS_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_AURAS, type = "boolean" }, + ["floatingCombatTextCombatDamage"] = { prettyName = SHOW_DAMAGE_TEXT_TEXT or SHOW_DAMAGE_TEXT, description = OPTION_TOOLTIP_SHOW_DAMAGE, type = "boolean" }, + ["floatingCombatTextCombatDamageAllAutos"] = { prettyName = nil, description = "Show all auto-attack numbers, rather than hiding non-event numbers", type = "boolean" }, + ["floatingCombatTextCombatDamageDirectionalOffset"] = { prettyName = nil, description = "Amount to offset directional damage numbers when they start", type = "boolean" }, + ["floatingCombatTextCombatDamageDirectionalScale"] = { + prettyName = "Directional Scale", + description = "Directional damage numbers movement scale (disabled = no directional numbers)", + type = "boolean", + }, + ["floatingCombatTextCombatHealing"] = { prettyName = SHOW_COMBAT_HEALING_TEXT or SHOW_COMBAT_HEALING, description = OPTION_TOOLTIP_SHOW_COMBAT_HEALING, type = "boolean" }, + ["floatingCombatTextCombatHealingAbsorbSelf"] = { + prettyName = SHOW_COMBAT_HEALING_ABSORB_SELF .. " (Self)", + description = OPTION_TOOLTIP_SHOW_COMBAT_HEALING_ABSORB_SELF, + type = "boolean", + }, + ["floatingCombatTextCombatHealingAbsorbTarget"] = { + prettyName = SHOW_COMBAT_HEALING_ABSORB_TARGET .. " (Target)", + description = OPTION_TOOLTIP_SHOW_COMBAT_HEALING_ABSORB_TARGET, + type = "boolean", + }, + ["floatingCombatTextCombatLogPeriodicSpells"] = { + prettyName = LOG_PERIODIC_EFFECTS_TEXT or LOG_PERIODIC_EFFECTS, + description = OPTION_TOOLTIP_LOG_PERIODIC_EFFECTS, + type = "boolean", + }, + ["floatingCombatTextCombatState"] = { prettyName = COMBAT_TEXT_SHOW_COMBAT_STATE_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBAT_STATE, type = "boolean" }, + ["floatingCombatTextComboPoints"] = { prettyName = COMBAT_TEXT_SHOW_COMBO_POINTS_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBO_POINTS, type = "boolean" }, + ["floatingCombatTextDamageReduction"] = { prettyName = COMBAT_TEXT_SHOW_RESISTANCES_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_RESISTANCES, type = "boolean" }, + ["floatingCombatTextDodgeParryMiss"] = { prettyName = COMBAT_TEXT_SHOW_DODGE_PARRY_MISS_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_DODGE_PARRY_MISS, type = "boolean" }, + ["floatingCombatTextEnergyGains"] = { + prettyName = COMBAT_TEXT_SHOW_ENERGIZE_TEXT .. " & " .. COMBAT_TEXT_SHOW_COMBO_POINTS_TEXT, + description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_ENERGIZE, + type = "boolean", + }, + ["floatingCombatTextFloatMode"] = { prettyName = COMBAT_TEXT_FLOAT_MODE_LABEL, description = OPTION_TOOLTIP_COMBAT_TEXT_MODE, type = "number" }, + ["floatingCombatTextFriendlyHealers"] = { prettyName = COMBAT_TEXT_SHOW_FRIENDLY_NAMES_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_FRIENDLY_NAMES, type = "boolean" }, + ["floatingCombatTextHonorGains"] = { prettyName = COMBAT_TEXT_SHOW_HONOR_GAINED_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_HONOR_GAINED, type = "boolean" }, + ["floatingCombatTextLowManaHealth"] = { prettyName = COMBAT_TEXT_SHOW_LOW_HEALTH_MANA_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_LOW_HEALTH_MANA, type = "boolean" }, + ["floatingCombatTextPeriodicEnergyGains"] = { + prettyName = COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE_TEXT, + description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE, + type = "boolean", + }, + ["floatingCombatTextPetMeleeDamage"] = { + prettyName = SHOW_PET_MELEE_DAMAGE_TEXT or SHOW_PET_MELEE_DAMAGE, + description = OPTION_TOOLTIP_SHOW_PET_MELEE_DAMAGE, + type = "boolean", + }, + ["floatingCombatTextPetSpellDamage"] = { prettyName = SHOW_PET_SPELL_DAMAGE, description = "Display pet spell damage in the world", type = "boolean" }, + ["floatingCombatTextReactives"] = { prettyName = COMBAT_TEXT_SHOW_REACTIVES_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REACTIVES, type = "boolean" }, + ["floatingCombatTextRepChanges"] = { prettyName = COMBAT_TEXT_SHOW_REPUTATION_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REPUTATION, type = "boolean" }, + ["floatingCombatTextSpellMechanics"] = { prettyName = SHOW_TARGET_EFFECTS, description = OPTION_TOOLTIP_SHOW_TARGET_EFFECTS, type = "boolean" }, + ["floatingCombatTextSpellMechanicsOther"] = { prettyName = SHOW_OTHER_TARGET_EFFECTS, description = OPTION_TOOLTIP_SHOW_OTHER_TARGET_EFFECTS, type = "boolean" }, + -- Status Text + ["statusText"] = { prettyName = STATUS_TEXT, description = "Whether the status bars show numeric health/mana values", type = "boolean" }, + ["statusTextDisplay"] = { prettyName = STATUS_TEXT, description = OPTION_TOOLTIP_STATUS_TEXT_DISPLAY, type = "boolean" }, + ["playerStatusText"] = { prettyName = STATUS_TEXT_PLAYER, description = OPTION_TOOLTIP_STATUS_TEXT_PLAYER, type = "boolean" }, -- removed + ["petStatusText"] = { prettyName = STATUS_TEXT_PET, description = OPTION_TOOLTIP_STATUS_TEXT_PET, type = "boolean" }, -- removed + ["partyStatusText"] = { prettyName = STATUS_TEXT_PARTY, description = OPTION_TOOLTIP_STATUS_TEXT_PARTY, type = "boolean" }, -- removed + ["targetStatusText"] = { prettyName = STATUS_TEXT_TARGET, description = OPTION_TOOLTIP_STATUS_TEXT_TARGET, type = "boolean" }, -- removed + ["alternateResourceText"] = { prettyName = ALTERNATE_RESOURCE_TEXT, description = OPTION_TOOLTIP_ALTERNATE_RESOURCE, type = "boolean" }, -- removed + ["xpBarText"] = { prettyName = XP_BAR_TEXT, description = OPTION_TOOLTIP_XP_BAR, type = "boolean" }, - ["comboPointLocation"] = { prettyName = nil, description = "Location of combo points in UI. 1=target, 2=self", type = "number" }, - ["doNotFlashLowHealthWarning"] = { prettyName = nil, description = "Do not flash your screen red when you are low on health.", type = "boolean" }, - ["findYourselfAnywhere"] = { prettyName = nil, description = "Always Highlight your character", type = "boolean" }, - ["findYourselfAnywhereOnlyInCombat"] = { prettyName = nil, description = "Highlight your character only when in combat", type = "boolean" }, - ["findYourselfInBG"] = { prettyName = nil, description = "Always Highlight your character in Battlegrounds", type = "boolean" }, - ["findYourselfInBGOnlyInCombat"] = { prettyName = "Highlight your character in Battlegrounds only when in combat", description = "", type = "boolean" }, - ["findYourselfInRaid"] = { prettyName = nil, description = "Always Highlight your character in Raids", type = "boolean" }, - ["findYourselfInRaidOnlyInCombat"] = { prettyName = nil, description = "Highlight your character in Raids only when in combat", type = "boolean" }, - ["findYourselfMode"] = { prettyName = nil, description = "Highlight you character. 0 = circle, 1 = circle & outline", type = "boolean" }, - ["flashErrorMessageRepeats"] = { prettyName = nil, description = "Flashes the center screen red error text if the same message is fired.", type = "boolean" }, - -- Floating Combat Text - ["enableFloatingCombatText"] = { prettyName = SHOW_COMBAT_TEXT_TEXT, description = OPTION_TOOLTIP_SHOW_COMBAT_TEXT , type = "boolean" }, - ["floatingCombatTextAllSpellMechanics"] = { prettyName = nil, description = "", type = "boolean" }, - ["floatingCombatTextAuras"] = { prettyName = COMBAT_TEXT_SHOW_AURAS_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_AURAS , type = "boolean" }, - ["floatingCombatTextCombatDamage"] = { prettyName = SHOW_DAMAGE_TEXT_TEXT or SHOW_DAMAGE_TEXT, description = OPTION_TOOLTIP_SHOW_DAMAGE, type = "boolean" }, - ["floatingCombatTextCombatDamageAllAutos"] = { prettyName = nil, description = "Show all auto-attack numbers, rather than hiding non-event numbers", type = "boolean" }, - ["floatingCombatTextCombatDamageDirectionalOffset"] = { prettyName = nil, description = "Amount to offset directional damage numbers when they start", type = "boolean" }, - ["floatingCombatTextCombatDamageDirectionalScale"] = { prettyName = "Directional Scale", description = "Directional damage numbers movement scale (disabled = no directional numbers)", type = "boolean" }, - ["floatingCombatTextCombatHealing"] = { prettyName = SHOW_COMBAT_HEALING_TEXT or SHOW_COMBAT_HEALING, description = OPTION_TOOLTIP_SHOW_COMBAT_HEALING, type = "boolean" }, - ["floatingCombatTextCombatHealingAbsorbSelf"] = { prettyName = SHOW_COMBAT_HEALING_ABSORB_SELF.." (Self)", description = OPTION_TOOLTIP_SHOW_COMBAT_HEALING_ABSORB_SELF, type = "boolean" }, - ["floatingCombatTextCombatHealingAbsorbTarget"] = { prettyName = SHOW_COMBAT_HEALING_ABSORB_TARGET.." (Target)" , description = OPTION_TOOLTIP_SHOW_COMBAT_HEALING_ABSORB_TARGET, type = "boolean" }, - ["floatingCombatTextCombatLogPeriodicSpells"] = { prettyName = LOG_PERIODIC_EFFECTS_TEXT or LOG_PERIODIC_EFFECTS, description = OPTION_TOOLTIP_LOG_PERIODIC_EFFECTS, type = "boolean" }, - ["floatingCombatTextCombatState"] = { prettyName = COMBAT_TEXT_SHOW_COMBAT_STATE_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBAT_STATE, type = "boolean" }, - ["floatingCombatTextComboPoints"] = { prettyName = COMBAT_TEXT_SHOW_COMBO_POINTS_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBO_POINTS , type = "boolean" }, - ["floatingCombatTextDamageReduction"] = { prettyName =COMBAT_TEXT_SHOW_RESISTANCES_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_RESISTANCES, type = "boolean" }, - ["floatingCombatTextDodgeParryMiss"] = { prettyName = COMBAT_TEXT_SHOW_DODGE_PARRY_MISS_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_DODGE_PARRY_MISS, type = "boolean" }, - ["floatingCombatTextEnergyGains"] = { prettyName = COMBAT_TEXT_SHOW_ENERGIZE_TEXT.." & "..COMBAT_TEXT_SHOW_COMBO_POINTS_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_ENERGIZE, type = "boolean" }, - ["floatingCombatTextFloatMode"] = { prettyName = COMBAT_TEXT_FLOAT_MODE_LABEL, description = OPTION_TOOLTIP_COMBAT_TEXT_MODE, type = "number" }, - ["floatingCombatTextFriendlyHealers"] = { prettyName = COMBAT_TEXT_SHOW_FRIENDLY_NAMES_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_FRIENDLY_NAMES, type = "boolean" }, - ["floatingCombatTextHonorGains"] = { prettyName = COMBAT_TEXT_SHOW_HONOR_GAINED_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_HONOR_GAINED, type = "boolean" }, - ["floatingCombatTextLowManaHealth"] = { prettyName = COMBAT_TEXT_SHOW_LOW_HEALTH_MANA_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_LOW_HEALTH_MANA, type = "boolean" }, - ["floatingCombatTextPeriodicEnergyGains"] = { prettyName = COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE, type = "boolean" }, - ["floatingCombatTextPetMeleeDamage"] = { prettyName = SHOW_PET_MELEE_DAMAGE_TEXT or SHOW_PET_MELEE_DAMAGE, description = OPTION_TOOLTIP_SHOW_PET_MELEE_DAMAGE, type = "boolean" }, - ["floatingCombatTextPetSpellDamage"] = { prettyName = SHOW_PET_SPELL_DAMAGE, description = "Display pet spell damage in the world", type = "boolean" }, - ["floatingCombatTextReactives"] = { prettyName = COMBAT_TEXT_SHOW_REACTIVES_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REACTIVES, type = "boolean" }, - ["floatingCombatTextRepChanges"] = { prettyName = COMBAT_TEXT_SHOW_REPUTATION_TEXT, description = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REPUTATION, type = "boolean" }, - ["floatingCombatTextSpellMechanics"] = { prettyName = SHOW_TARGET_EFFECTS, description = OPTION_TOOLTIP_SHOW_TARGET_EFFECTS, type = "boolean" }, - ["floatingCombatTextSpellMechanicsOther"] = { prettyName = SHOW_OTHER_TARGET_EFFECTS, description = OPTION_TOOLTIP_SHOW_OTHER_TARGET_EFFECTS, type = "boolean" }, - -- Status Text - ["statusText"] = { prettyName = STATUS_TEXT, description = "Whether the status bars show numeric health/mana values", type = "boolean"}, - ["statusTextDisplay"] = { prettyName = STATUS_TEXT, description = OPTION_TOOLTIP_STATUS_TEXT_DISPLAY, type = "boolean"}, - ["playerStatusText"] = { prettyName = STATUS_TEXT_PLAYER, description = OPTION_TOOLTIP_STATUS_TEXT_PLAYER , type = "boolean"}, -- removed - ["petStatusText"] = { prettyName = STATUS_TEXT_PET, description = OPTION_TOOLTIP_STATUS_TEXT_PET, type = "boolean"}, -- removed - ["partyStatusText"] = { prettyName = STATUS_TEXT_PARTY, description = OPTION_TOOLTIP_STATUS_TEXT_PARTY, type = "boolean"}, -- removed - ["targetStatusText"] = { prettyName = STATUS_TEXT_TARGET, description = OPTION_TOOLTIP_STATUS_TEXT_TARGET, type = "boolean"}, -- removed - ["alternateResourceText"] = { prettyName = ALTERNATE_RESOURCE_TEXT, description = OPTION_TOOLTIP_ALTERNATE_RESOURCE, type = "boolean"}, -- removed - ["xpBarText"] = { prettyName = XP_BAR_TEXT, description = OPTION_TOOLTIP_XP_BAR, type = "boolean" }, + ["violenceLevel"] = { prettyName = "Violence Level", description = "Sets the violence level of the game", type = "number" }, + ["ffxGlow"] = { prettyName = "FFX Glow", description = "full screen glow effect", type = "boolean" }, + ["ffxNether"] = { prettyName = "FFX Nether", description = "full screen nether / glow effect", type = "boolean" }, + ["releaseUITextures"] = { prettyName = "Release UI Textures", description = "Release Hidden UI Textures by default", type = "boolean" }, + ["alwaysCompareItems"] = { prettyName = "Always Compare Items", description = "Always show item comparison tooltips", type = "boolean" }, + ["showSpenderFeedback"] = { prettyName = "Show spender feedback", description = "Shows/Hide the flash after spending rage/mana/etc in resource bars.", type = "boolean" }, + -- Loss of Control UI + ["lossOfControlFull"] = { + prettyName = "Loss of Control: Full", + description = "Sets the type of the Loss of Control alert. (0 = Off, 1 = Only Alert, 2 = Show Full Duration)", + type = "number", + }, + ["lossOfControlSilence"] = { + prettyName = "Loss of Control: Silence", + description = "Sets the type of the Loss of Control alert. (0 = Off, 1 = Only Alert, 2 = Show Full Duration)", + type = "number", + }, + ["lossOfControlInterrupt"] = { + prettyName = "Loss of Control: Interrupt", + description = "Sets the type of the Loss of Control alert. (0 = Off, 1 = Only Alert, 2 = Show Full Duration)", + type = "number", + }, + ["lossOfControlDisarm"] = { + prettyName = "Loss of Control: Disarm", + description = "Sets the type of the Loss of Control alert. (0 = Off, 1 = Only Alert, 2 = Show Full Duration)", + type = "number", + }, + ["lossOfControlRoot"] = { + prettyName = "Loss of Control: Root", + description = "Sets the type of the Loss of Control alert. (0 = Off, 1 = Only Alert, 2 = Show Full Duration)", + type = "number", + }, + ["synchronizeMacros"] = { prettyName = "Synchronize Macros", description = "Toggles synchronizing Macros with the server on/off", type = "boolean" }, + ["synchronizeConfig"] = { prettyName = "Synchronize Config", description = "Toggles synchronizing settings with the server on/off", type = "boolean" }, + ["cursorsizepreferred"] = { prettyName = "Cursor Size", description = "0 = 32x32, 1 = 48x48, 2 = 64x64, -1 = autodetect", type = "number" }, + ["ffxDeath"] = { prettyName = "FFX Death", description = "Enables full screen death effect", type = "boolean" }, + ["WorldTextScale"] = { prettyName = "World Text Scale", description = "The scale of in-world damage numbers, xp gain, artifact gains, etc", type = "number" }, - ["violenceLevel"] = { prettyName = "Violence Level", description = "Sets the violence level of the game", type = "number" }, - ["ffxGlow"] = { prettyName = "FFX Glow", description = "full screen glow effect", type = "boolean" }, - ["ffxNether"] = { prettyName = "FFX Nether", description = "full screen nether / glow effect", type = "boolean" }, - ["releaseUITextures"] = { prettyName = "Release UI Textures", description = "Release Hidden UI Textures by default", type = "boolean" }, - ["alwaysCompareItems"] = { prettyName = "Always Compare Items", description = "Always show item comparison tooltips", type = "boolean" }, - ["showSpenderFeedback"] = { prettyName= "Show spender feedback", description = "Shows/Hide the flash after spending rage/mana/etc in resource bars.", type = "boolean" }, - -- Loss of Control UI - ["lossOfControlFull"] = { prettyName = "Loss of Control: Full", description = "Sets the type of the Loss of Control alert. (0 = Off, 1 = Only Alert, 2 = Show Full Duration)", type = "number" }, - ["lossOfControlSilence"] = { prettyName = "Loss of Control: Silence", description = "Sets the type of the Loss of Control alert. (0 = Off, 1 = Only Alert, 2 = Show Full Duration)", type = "number" }, - ["lossOfControlInterrupt"] = { prettyName = "Loss of Control: Interrupt", description = "Sets the type of the Loss of Control alert. (0 = Off, 1 = Only Alert, 2 = Show Full Duration)", type = "number" }, - ["lossOfControlDisarm"] = { prettyName = "Loss of Control: Disarm", description = "Sets the type of the Loss of Control alert. (0 = Off, 1 = Only Alert, 2 = Show Full Duration)", type = "number" }, - ["lossOfControlRoot"] = { prettyName = "Loss of Control: Root", description = "Sets the type of the Loss of Control alert. (0 = Off, 1 = Only Alert, 2 = Show Full Duration)", type = "number" }, - ["synchronizeMacros"] = { prettyName = "Synchronize Macros", description = "Toggles synchronizing Macros with the server on/off", type = "boolean" }, - ["synchronizeConfig"] = { prettyName = "Synchronize Config", description = "Toggles synchronizing settings with the server on/off", type = "boolean" }, - ["cursorsizepreferred"] = { prettyName = "Cursor Size", description = "0 = 32x32, 1 = 48x48, 2 = 64x64, -1 = autodetect", type = "number" }, - ["ffxDeath"] = { prettyName = "FFX Death", description = "Enables full screen death effect", type = "boolean" }, - ["WorldTextScale"] = { prettyName = "World Text Scale", description = "The scale of in-world damage numbers, xp gain, artifact gains, etc", type = "number" }, + -- 7.1.5 dump (1/16/17) + ["BrowserNavigateLog"] = { description = "Enables Logging of browser navigation requests (Requires /reload)" }, + --["CACHE-WGOB-GameObjectsHotfixCount"] = {}, + --["CACHE-WGOB-GameObjectsRecordCount"] = {}, + --["CACHE-WQST-QuestObjectiveHotfixCount"] = {}, + --["CACHE-WQST-QuestObjectiveRecordCount"] = {}, + --["CACHE-WQST-QuestObjectiveXEffectHotfixCount"] = {}, + --["CACHE-WQST-QuestObjectiveXEffectRecordCount"] = {}, + --["CACHE-WQST-QuestV2HotfixCount"] = {}, + --["CACHE-WQST-QuestV2RecordCount"] = {}, + ["ChatMusicVolume"] = {}, + ["CombatHealingAbsorbSelf"] = {}, + ["DepthBasedOpacity"] = {}, + ["DesktopGamma"] = {}, + -- ["EJDungeonDifficulty"] = { description = "Stores the last dungeon difficulty viewed in the encounter journal" }, + -- ["EJLootClass"] = { description = "Stores the last class that loot was filtered by in the encounter journal" }, + -- ["EJLootSpec"] = { description = "Stores the last spec that loot was filtered by in the encounter journal" }, + -- ["EJRaidDifficulty"] = { description = "Stores the last raid difficulty viewed in the encounter journal" }, + ["EmitterCombatrange"] = { description = "Range to stop shoulder/weapon emissions during combat" }, + -- ["ErrorFilter"] = {}, + -- ["ErrorLevelMax"] = {}, + -- ["ErrorLevelMin"] = {}, + -- ["Errors"] = {}, + ["FootstepSounds"] = { description = "play footstep sounds" }, + ["Gamma"] = {}, + ["LodLiquid"] = { description = "Render using lod liquid" }, + ["M2ForceAdditiveParticleSort"] = { description = "force all particles to sort as though they were additive" }, + ["M2UseInstancing"] = { description = "use hardware instancing" }, + ["M2UseLOD"] = { description = "use model lod" }, + ["M2UseThreads"] = { description = "multithread model animations" }, + ["MSAAAlphaTest"] = { description = "Enable MSAA for alpha-tested geometry" }, + ["MSAAQuality"] = { description = "Multisampling AA quality" }, + ["MaxObservedPetBattles"] = { description = "Maximum number of observed pet battles" }, + ["NameplatePersonalHideDelayAlpha"] = { + description = "Determines the alpha of the personal nameplate after no visibility conditions are met (during the period of time specified by NameplatePersonalHideDelaySeconds).", + }, + ["NonEmitterCombatRange"] = { description = "Range to stop shoulder/weapon emissions outside combat" }, + ["ObjectSelectionCircle"] = {}, + ["OutlineEngineMode"] = {}, + -- ["Outline"] = { description="Outline Mode" }, -- don't know what this does aside from make you flash when it's set + ["POIShiftComplete"] = {}, + -- ["PraiseTheSun"] = {}, + ["PushToTalkButton"] = { description = "String representation of the Push-To-Talk button." }, + ["RAIDDepthBasedOpacity"] = {}, + ["RAIDLightMode"] = {}, + ["RAIDOutlineEngineMode"] = {}, + ["RAIDSSAO"] = {}, + ["RAIDSSAOBlur"] = {}, + ["RAIDWaterDetail"] = {}, + ["RAIDcomponentTextureLevel"] = {}, + ["RAIDenvironmentDetail"] = {}, + ["RAIDfarclip"] = {}, + ["RAIDgraphicsQuality"] = {}, + ["RAIDgroundEffectDensity"] = {}, + ["RAIDgroundEffectDist"] = {}, + ["RAIDgroundEffectFade"] = { description = "Raid Ground effect fade" }, + ["RAIDhorizonStart"] = { description = "Raid Horizon start distance" }, + ["RAIDlodObjectCullDist"] = {}, + ["RAIDlodObjectCullSize"] = {}, + ["RAIDlodObjectMinSize"] = {}, + ["RAIDlodObjectFadeScale"] = {}, + ["RAIDparticleDensity"] = {}, + ["RAIDparticleMTDensity"] = {}, + ["RAIDprojectedTextures"] = {}, + ["RAIDreflectionMode"] = {}, + ["RAIDrefraction"] = {}, + ["RAIDrippleDetail"] = {}, + ["RAIDsettingsEnabled"] = { description = "Raid graphic settings are available" }, + ["RAIDsettingsInit"] = {}, + ["RAIDshadowMode"] = {}, + ["RAIDshadowSoft"] = {}, + ["RAIDshadowTextureSize"] = {}, + ["RAIDsunShafts"] = {}, + ["RAIDterrainLodDist"] = {}, + ["RAIDterrainMipLevel"] = {}, + ["RAIDterrainTextureLod"] = {}, + ["RAIDtextureFilteringMode"] = {}, + ["RAIDweatherDensity"] = {}, + ["RAIDwmoLodDist"] = {}, + ["RAIDworldBaseMip"] = {}, + ["RenderScale"] = { description = "Render scale (for supersampling or undersampling)" }, + ["ResampleQuality"] = { description = "Resample quality" }, + ["SSAO"] = {}, + ["SSAOBlur"] = {}, + ["SSAODistance"] = { description = "SSAO distance" }, + ["SkyCloudLOD"] = {}, + ["SoundPerf_VariationCap"] = { description = "Limit sound kit variations to cut down on memory usage and disk thrashing on 32-bit machines" }, + ["SoundUseNewBusSystem"] = { description = "use the new bus structure or fallback to the old one" }, + ["Sound_DSPBufferSize"] = { description = "sound buffer size, default 0" }, + ["Sound_EnableArmorFoleySoundForOthers"] = {}, + ["Sound_EnableArmorFoleySoundForSelf"] = {}, + ["Sound_EnableMixMode2"] = {}, + ["Sound_EnableMode2"] = {}, + ["Sound_MaxCacheSizeInBytes"] = { description = "Max cache size in bytes" }, + ["Sound_MaxCacheableSizeInBytes"] = { description = "Max sound size that will be cached, larger files will be streamed instead" }, + ["Sound_NumChannels"] = {}, + ["Sound_OutputDriverIndex"] = {}, + ["Sound_OutputDriverName"] = {}, + ["Sound_OutputSampleRate"] = { description = "output sample rate" }, + ["Sound_VoiceChatInputDriverIndex"] = {}, + ["Sound_VoiceChatInputDriverName"] = {}, + ["Sound_VoiceChatOutputDriverIndex"] = {}, + ["Sound_VoiceChatOutputDriverName"] = {}, + ["SplineOpt"] = { description = "toggles use of spline coll optimization" }, + ["StartTalkingDelay"] = {}, + ["StartTalkingTime"] = {}, + ["StopTalkingDelay"] = {}, + ["StopTalkingTime"] = {}, + ["TargetPriorityValueBank"] = { description = "Selects the active targeting values bank for calculating target priority order" }, + ["VoiceChatMode"] = { description = "Push to talk(0) or voice activation(1)" }, + ["VoiceChatSelfMute"] = { description = "Turn off your ability to talk." }, + ["WorldTextCritScreenY"] = {}, + ["WorldTextGravity"] = {}, + ["WorldTextNonRandomZ"] = {}, + ["WorldTextRampDuration"] = {}, + ["WorldTextRampPow"] = {}, + ["WorldTextRampPowCrit"] = {}, + ["WorldTextRandomXY"] = {}, + ["WorldTextRandomZMax"] = {}, + ["WorldTextRandomZMin"] = {}, + ["WorldTextScreenY"] = {}, + ["WorldTextStartPosRandomness"] = {}, + -- ["accounttype"] = {}, + -- ["actionedAdventureJournalEntries"] = { description = "Which adventure journal entries flagged with ADVENTURE_JOURNAL_HIDE_AFTER_ACTION the user acted upon" }, + -- ["activeCUFProfile"] = { description = "The last active CUF Profile." }, + -- ["addFriendInfoShown"] = { description = "The info for Add Friend has been shown" }, + -- ["advJournalLastOpened"] = { description = "Last time the Adventure Journal opened" }, + -- ["agentUID"] = { description = "The UID provided by Battle.net to be passed to Agent" }, + ["allowCompareWithToggle"] = {}, + ["allowD3D9BackingStore"] = { description = "Allow D3D9 to have texture backing to decrease load times and increase the chance of an out of memory crash" }, + ["animFrameSkipLOD"] = { description = "animations will skip frames at distance" }, + ["asyncHandlerTimeout"] = { description = "Engine option: Async read main thread timeout" }, + ["asyncThreadSleep"] = { description = "Engine option: Async read thread sleep" }, + ["auctionDisplayOnCharacter"] = { description = "Show auction items on the dress-up paperdoll" }, + ["audioLocale"] = { description = "Set the game locale for audio content" }, + ["autoCompleteResortNamesOnRecency"] = { description = "Shows people you recently spoke with higher up on the AutoComplete list." }, + ["autoCompleteUseContext"] = { description = "The system will, for example, only show people in your guild when you are typing /gpromote. Names will also never be removed." }, + ["autoCompleteWhenEditingFromCenter"] = { description = "If you edit a name by inserting characters into the center, a smarter auto-complete will occur." }, + ["autoDismount"] = { description = "Automatically dismount when needed" }, + -- ["autoFilledMultiCastSlots"] = { description = "Bitfield that saves whether multi-cast slots have been automatically filled." }, + -- ["autoQuestPopUps"] = { description = "Saves current pop-ups for quests that are automatically acquired or completed." }, + ["autoStand"] = { description = "Automatically stand when needed" }, + ["autoUnshift"] = { description = "Automatically leave shapeshift form when needed" }, + ["autojoinBGVoice"] = { description = "Automatically join the voice session in battleground chat" }, + ["autojoinPartyVoice"] = { description = "Automatically join the voice session in party/raid chat" }, + -- ["bloatTest"] = {}, + -- ["bloatnameplates"] = {}, + -- ["bloatthreat"] = {}, + ["bodyQuota"] = { description = "Maximum number of componented bodies seen at once" }, + ["breakUpLargeNumbers"] = { description = "Toggles using commas in large numbers" }, + ["bspcache"] = { description = "BSP node caching" }, + ["calendarShowBattlegrounds"] = { description = "Whether Battleground holidays should appear in the calendar" }, + ["calendarShowDarkmoon"] = { description = "Whether Darkmoon Faire holidays should appear in the calendar" }, + ["calendarShowLockouts"] = { description = "Whether raid lockouts should appear in the calendar" }, + ["calendarShowResets"] = { description = "Whether raid resets should appear in the calendar" }, + ["calendarShowWeeklyHolidays"] = { description = "Whether weekly holidays should appear in the calendar" }, + ["cameraCustomViewSmoothing"] = {}, + ["cameraDistanceMax"] = {}, + ["cameraDistanceMaxFactor"] = {}, + ["cameraDistanceRateMult"] = {}, + ["cameraDive"] = {}, + ["cameraHeightIgnoreStandState"] = {}, + ["cameraPitchSmoothMax"] = {}, + ["cameraPitchSmoothMin"] = {}, + ["cameraPivotDXMax"] = {}, + ["cameraPivotDYMin"] = {}, + -- ["cameraSavedDistance"] = {}, + -- ["cameraSavedPetBattleDistance"] = {}, + -- ["cameraSavedPitch"] = {}, + -- ["cameraSavedVehicleDistance"] = {}, + -- ["cameraView"] = {}, + ["cameraYawSmoothMax"] = {}, + ["cameraYawSmoothMin"] = {}, + ["cameraZDamp"] = {}, + ["cameraZoomSpeed"] = {}, + -- ["characterFrameCollapsed"] = {}, + ["chatStyle"] = { description = 'The style of Edit Boxes for the ChatFrame. Valid values: "classic", "im"' }, + ["checkAddonVersion"] = {}, + ["cloakFixEnabled"] = {}, + -- ["closedInfoFrames"] = { description = "Bitfield for which help frames have been acknowledged by the user" }, + ["colorChatNamesByClass"] = { description = "If enabled, the name of a player speaking in chat will be colored according to his class." }, + ["combatLogReducedRetentionTime"] = { description = "The maximum duration in seconds to retain combat log entries when we're low on memory" }, + ["combatLogRetentionTime"] = { description = "The maximum duration in seconds to retain combat log entries" }, + ["combatTextFloatMode"] = {}, + ["componentCompress"] = { description = "Character component texture compression" }, + ["componentEmissive"] = { description = "Character component unlit/emissive" }, + ["componentSpecular"] = { description = "DISABLED FOR 7.0.3 - Character component specular highlights" }, + ["componentTexCacheSize"] = { description = "Character component texture cache size (in MB)" }, + ["componentTexLoadLimit"] = { description = "Character component texture loading limit per frame" }, + ["componentTextureLevel"] = {}, + ["componentThread"] = { description = "Multi thread character component processing" }, + -- ["currencyCategoriesCollapsed"] = { description = "Internal CVar for tracking collapsed currency categories." }, + -- ["currencyTokensBackpack1"] = { description = "Currency token types shown on backpack." }, + -- ["currencyTokensBackpack2"] = { description = "Currency token types shown on backpack." }, + -- ["currencyTokensUnused1"] = { description = "Currency token types marked as unused." }, + -- ["currencyTokensUnused2"] = { description = "Currency token types marked as unused." }, + ["daltonize"] = { description = "Attempt to correct for color blindness (set colorblindSimulator to type of colorblindness)" }, + -- ["dangerousShipyardMissionWarningAlreadyShown"] = { description = "Boolean indicating whether the shipyard's dangerous mission warning has been shown" }, + -- ["debugSoundPlayerSpellsOnlyOnPlayerBus"] = {}, + ["detailDoodadInstancing"] = { description = "Detail doodad instancing" }, + ["digSites"] = { description = "If enabled, the archaeological dig site system will be used." }, + ["disableAutoRealmSelect"] = { description = "Disable automatically selecting a realm on login" }, + ["displayWorldPVPObjectives"] = { description = "Whether to show world PvP objectives" }, + -- ["displayedRAFFriendInfo"] = { description = "Stores whether we already told a recruited person about their new BattleTag friend" }, + ["dontShowEquipmentSetsOnItems"] = { description = "Don't show which equipment sets an item is associated with" }, + ["doodadLodDist"] = { description = "Doodad level of detail distance" }, + ["doodadUnloadDist"] = {}, + ["enableBGDL"] = { description = "Background Download (on async net thread) Enabled" }, + -- ["enableCombatText"] = {}, + ["enablePVPNotifyAFK"] = { description = "The ability to shutdown the AFK notification system" }, + ["enablePetBattleFloatingCombatText"] = { description = "Whether to show floating combat text for pet battles" }, + -- ["engineSurvey"] = {}, + ["enterWorld"] = {}, + ["entityLodDist"] = { description = "Entity level of detail distance" }, + ["environmentDetail"] = {}, + ["expandUpgradePanel"] = {}, + ["farclip"] = {}, + ["fctCombatState"] = {}, + -- ["fctFriendlyHealers"] = {}, + ["ffxAntiAliasingMode"] = { description = "Anti Aliasing Mode" }, + ["ffxRectangle"] = { description = "use rectangle texture for full screen effects" }, + -- ["flaggedTutorials"] = { description = "Internal cvar for saving completed tutorials in order" }, + ["flightAngleLookAhead"] = { description = "Enables more dynamic attitude adjustments while flying" }, + -- ["floatingCombatTextCombatDamageStyle"] = { description = "No longer used" }, + ["forceEnglishNames"] = {}, + ["forceLODCheck"] = { description = "If enabled, we will skip checking DBC for LOD count and every m2 will scan the folder for skin profiles" }, + -- ["friendInvitesCollapsed"] = { description = "Whether friend invites are hidden in the friends list" }, + ["friendsSmallView"] = { description = "Whether to use smaller buttons in the friends list" }, + ["friendsViewButtons"] = { description = "Whether to show the friends list view buttons" }, + ["fullDump"] = { description = "When you crash, generate a full memory dump" }, + ["gameTip"] = {}, + ["garrisonCompleteTalent"] = {}, + ["garrisonCompleteTalentType"] = {}, + ["graphicsDepthEffects"] = { description = "UI value of the graphics setting" }, + ["graphicsEnvironmentDetail"] = {}, + ["graphicsLightingQuality"] = { description = "UI value of the graphics setting" }, + ["graphicsLiquidDetail"] = { description = "UI value of the graphics setting" }, + ["graphicsOutlineMode"] = { description = "UI value of the graphics setting" }, + ["graphicsParticleDensity"] = {}, + ["graphicsProjectedTextures"] = { description = "UI value of the graphics setting" }, + ["graphicsQuality"] = {}, + ["graphicsSSAO"] = { description = "UI value of the graphics setting" }, + ["graphicsShadowQuality"] = {}, + ["graphicsSunshafts"] = { description = "UI value of the graphics setting" }, + ["graphicsTextureFiltering"] = {}, + ["graphicsTextureResolution"] = {}, + ["graphicsViewDistance"] = {}, + ["groundEffectDensity"] = {}, + ["groundEffectDist"] = {}, + ["groundEffectFade"] = { description = "Ground effect fade" }, + -- ["guildNewsFilter"] = { description = "Stores the guild news filters" }, + ["guildRewardsCategory"] = { description = "Show category of guild rewards" }, + ["guildRewardsUsable"] = { description = "Show usable guild rewards only" }, + -- ["guildRosterView"] = { description = "The current guild roster display mode" }, + ["guildShowOffline"] = { description = "Show offline guild members in the guild UI" }, + ["gxAFRDevicesCount"] = { description = "Force to set number of AFR devices" }, + ["gxAdapter"] = { description = "Force to run the specified adapter index (-1 to let client choose)" }, + -- ["gxApi"] = {}, + ["gxAspect"] = { description = "constrain window aspect" }, + ["gxCursor"] = { description = "toggle hardware cursor" }, + ["gxDepthResolveHandleCaching"] = { description = "Caching of the target handle for the depth resolve" }, + ["gxFixLag"] = { description = "prevent cursor lag" }, + ["gxFullscreenResolution"] = { description = "resolution" }, + ["gxMaxFrameLatency"] = { description = "maximum number of frames ahead of GPU the CPU can be" }, + ["gxMaximize"] = {}, + ["gxMonitor"] = { description = "monitor" }, + ["gxNewResolution"] = { description = "resolution to be set" }, + ["gxPreferWindowedFullscreen"] = { description = "prefer which fullscreen mode for toggle" }, + -- ["gxRefresh"] = {}, + ["gxStereoConvergence"] = { description = "Set stereoscopic rendering convergence depth" }, + ["gxStereoEnabled"] = { description = "Enable stereoscopic rendering" }, + ["gxStereoSeparation"] = { description = "Set stereoscopic rendering separation percentage" }, + ["gxTextureCacheSize"] = { description = "GX Texture Cache Size" }, + ["gxTripleBuffer"] = { description = "triple buffer" }, + ["gxVSync"] = { description = "vsync on or off" }, + ["gxWindow"] = {}, + ["gxWindowedResolution"] = {}, + -- ["hardTrackedQuests"] = { description = "Internal cvar for saving hard (user manually selected) tracked quests in order" }, + -- ["hardTrackedWorldQuests"] = { description = "Internal cvar for saving hard tracked world quests" }, + ["hbaoBias"] = { description = "HBAO Bias" }, + ["hbaoBlurSharp"] = { description = "HBAO Blur Sharpness" }, + ["hbaoNormals"] = { description = "Use Normals for HBAO" }, + ["hbaoPowerExp"] = { description = "HBAO Power Exponent" }, + ["hbaoRadius"] = { description = "HBAO Radius" }, + -- ["heirloomCollectedFilters"] = { description = "Bitfield for which collected filters are applied in the heirloom journal" }, + -- ["heirloomSourceFilters"] = { description = "Bitfield for which source filters are applied in the heirloom journal" }, + ["hideAdventureJournalAlerts"] = { description = "Hide alerts shown on the Adventure Journal Microbutton" }, + ["horizonStart"] = {}, + ["hotReloadModels"] = { + description = "Allow an active model to be reloaded when a new version is detected in the bin folder. If this is disabled, the model data will only be refreshed after all game objects using the model are deleted", + }, + ["hwDetect"] = {}, + ["hwPCF"] = { description = "Hardware PCF Filtering" }, + ["incompleteQuestPriorityThresholdDelta"] = {}, + ["initialRealmListTimeout"] = { description = "How long to wait for the initial realm list before failing login (in seconds)" }, + ["installLocale"] = {}, + --["installType"] = {}, + -- ["lastAddonVersion"] = {}, + -- ["lastCharacterIndex"] = {}, + -- ["lastGarrisonMissionTutorial"] = { description = "Stores the last garrison mission tutorial the player has accepted" }, + -- ["lastReadEULA"] = {}, + -- ["lastReadTOS"] = {}, + -- ["lastReadTerminationWithoutNotice"] = {}, + -- ["lastTalkedToGM"] = { description = "Stores the last GM someone was talking to in case they reload the UI while the GM chat window is open." }, + -- ["lastTransmogOutfitID"] = { description = "SetID of the last loaded transmog outfit" }, + -- ["lastVoidStorageTutorial"] = { description = "Stores the last void storage tutorial the player has accepted" }, + ["launchAgent"] = { description = "Set this to have the client start up Agent" }, + -- ["lfGuildComment"] = { description = "Stores the player's Looking For Guild comment" }, + -- ["lfGuildSettings"] = { description = "Bit field of Looking For Guild player settings" }, + -- ["lfdCollapsedHeaders"] = { description = "Stores which LFD headers are collapsed." }, + -- ["lfdSelectedDungeons"] = { description = "Stores which LFD dungeons are selected." }, + ["lfgAutoFill"] = { description = "Whether to automatically add party members while looking for a group" }, + ["lfgAutoJoin"] = { description = "Whether to automatically join a party while looking for a group" }, + -- ["lfgListSearchLanguages"] = { description = "A simple bitfield for what languages we want to search in." }, + -- ["lfgSelectedRoles"] = { description = "Stores what roles the player is willing to take on." }, + ["lightMode"] = {}, + ["locale"] = { description = "Set the game locale" }, + ["lockedWorldMap"] = { description = "Whether the world map is locked when sized down" }, + ["lodObjectCullDist"] = {}, + ["lodObjectCullSize"] = {}, + ["lodObjectMinSize"] = {}, + ["lodTerrainDiv"] = { description = "Terrain lod divisor" }, + ["mapAnimDuration"] = { description = "Duration for the alpha animation" }, + ["mapAnimMinAlpha"] = { description = "Alpha value to animate to when player moves with windowed world map open" }, + ["mapAnimStartDelay"] = { description = "Start delay for the alpha animation" }, + ["mapQuestDifficulty"] = {}, + -- ["maxAnimThreads"] = {}, + ["maxFPS"] = { description = "Set FPS limit" }, + ["maxFPSBk"] = { description = "Set background FPS limit" }, + ["maxLightCount"] = { description = "Maximum lights to render" }, + ["maxLightDist"] = { description = "Maximum distance to render lights" }, + ["miniWorldMap"] = { description = "Whether or not the world map has been toggled to smaller size" }, + ["minimapAltitudeHintMode"] = { description = "Change minimap altitude difference display. 0=none, 1=darken, 2=arrows" }, + ["minimapInsideZoom"] = { description = "The current indoor minimap zoom level" }, + ["minimapPortalMax"] = { description = "Max Number of Portals to traverse for minimap" }, + -- ["minimapShapeshiftTracking"] = { description = "Stores shapeshift-specific tracking spells that were active last session." }, + ["minimapShowArchBlobs"] = { description = "Stores whether to show archaeology blobs on the minimap." }, + ["minimapShowQuestBlobs"] = { description = "Stores whether to show the quest blobs on the minimap." }, + -- ["minimapTrackedInfo"] = {}, + -- ["minimapTrackedInfov2"] = { description = "Stores the minimap tracking that was active last session." }, + ["minimapZoom"] = { description = "The current outdoor minimap zoom level" }, + ["missingTransmogSourceInItemTooltips"] = { description = "Whether to show if you have collected the appearance of an item but not from that item itself" }, + -- ["mountJournalFilters"] = { description = "Bitfield for which collected filters are applied in the mount journal" }, + -- ["mountJournalSourceFilters"] = { description = "Bitfield for which source filters are applied in the mount journal" }, + ["mouseInvertYaw"] = {}, + ["mtParticles"] = { description = "multithread building of particle vertices" }, + ["nameplateMotionSpeed"] = { description = "Controls the rate at which nameplate animates into their target locations [0.0-1.0]" }, + ["nameplateShowEnemyMinions"] = {}, + ["nameplateShowFriendlyMinions"] = {}, + ["nearclip"] = { description = "Near clip plane distance" }, + -- ["orderHallMissionTutorial"] = { description = "Stores information about which order hall mission tutorials the player has seen" }, + ["outdoorMinAltitudeDistance"] = { description = "Minimum altitude distance for outdoor objects when you are also outdoors before the altitude difference marker displays" }, + ["outlineMouseOverFadeDuration"] = {}, + ["outlineSelectionFadeDuration"] = {}, + ["overrideArchive"] = { description = "Whether or not the client loads alternate data" }, + ["particleDensity"] = {}, + ["particleMTDensity"] = {}, + ["partyBackgroundOpacity"] = { description = "The opacity of the party background" }, + ["pathSmoothing"] = { description = "NPC will round corners on ground paths" }, + -- ["pendingInviteInfoShown"] = { description = "The info for pending invites has been shown" }, + -- ["petJournalFilters"] = { description = "Bitfield for which collected filters are applied in the pet journal" }, + -- ["petJournalSort"] = { description = "Sorting value for the pet journal" }, + -- ["petJournalSourceFilters"] = { description = "Bitfield for which source filters are applied in the pet journal" }, + -- ["petJournalTab"] = { description = "Stores the last tab the pet journal was opened to" }, + -- ["petJournalTypeFilters"] = { description = "Bitfield for which type filters are applied in the pet journal" }, + ["physicsLevel"] = { description = "Level of physics world interaction" }, + ["playIntroMovie"] = {}, + --["playerStatLeftDropdown"] = { description = "The player stat selected in the left dropdown" }, + --["playerStatRightDropdown"] = { description = "The player stat selected in the right dropdown" }, + -- ["portal"] = { description = "Name of Battle.net portal to use" }, + ["predictedHealth"] = { description = "Whether or not to use predicted health values in the UI" }, + ["preloadLoadingDistObject"] = { description = "Object preload distance when loading" }, + ["preloadLoadingDistTerrain"] = { description = "Terrain preload distance when loading" }, + ["preloadPlayerModels"] = { description = "Preload all local racial models into memory" }, + ["preloadStreamingDistObject"] = { description = "Object preload distance when streaming" }, + ["preloadStreamingDistTerrain"] = { description = "Terrain preload distance when streaming" }, + ["primaryProfessionsFilter"] = { description = "If enabled, primary profession world quests icons will be shown on world maps" }, + ["processAffinityMask"] = { description = "Sets which core(s) WoW may execute on - changes require restart to take effect" }, + ["projectedTextures"] = {}, + ["pvpBlacklistMaps0"] = { description = "Blacklist PVP Map" }, + ["pvpBlacklistMaps1"] = { description = "Blacklist PVP Map" }, + -- ["pvpSelectedRoles"] = { description = "Stores what roles the player will fulfill in a BG." }, + -- ["questLogCollapseFilter"] = {}, + -- ["questLogCollapseHeaderFilter"] = {}, + -- ["questLogOpen"] = { description = "Whether the quest log appears the side of the windowed map. " }, + ["questPOI"] = { description = "If enabled, the quest POI system will be used." }, + ["raidFramesDisplayAggroHighlight"] = { description = "Whether to display aggro highlights on Raid Frames" }, + ["raidFramesDisplayClassColor"] = { description = "Colors raid frames with the class color" }, + ["raidFramesDisplayOnlyDispellableDebuffs"] = { description = "Whether to display only dispellable debuffs on Raid Frames" }, + ["raidFramesDisplayPowerBars"] = { description = "Whether to display mana, rage, etc. on Raid Frames" }, + ["raidFramesHealthText"] = { description = "How to display health text on the raid frames" }, + ["raidFramesHeight"] = { description = "The height of the individual raid frames" }, + ["raidFramesPosition"] = { description = "Where the raid frames should be placed" }, + ["raidFramesWidth"] = { description = "The width of the individual raid frames" }, + ["raidGraphicsDepthEffects"] = {}, + ["raidGraphicsEnvironmentDetail"] = {}, + ["raidGraphicsGroundClutter"] = {}, + ["raidGraphicsLightingQuality"] = {}, + ["raidGraphicsLiquidDetail"] = {}, + ["raidGraphicsOutlineMode"] = {}, + ["raidGraphicsParticleDensity"] = {}, + ["raidGraphicsProjectedTextures"] = {}, + ["raidGraphicsSSAO"] = {}, + ["raidGraphicsShadowQuality"] = {}, + ["raidGraphicsSunshafts"] = {}, + ["raidGraphicsTextureFiltering"] = {}, + ["raidGraphicsTextureResolution"] = {}, + ["raidGraphicsViewDistance"] = {}, + ["raidOptionDisplayMainTankAndAssist"] = { description = "Whether to display main tank and main assist units in the raid frames" }, + ["raidOptionDisplayPets"] = { description = "Whether to display pets on the raid frames" }, + ["raidOptionIsShown"] = { description = "Whether the Raid Frames are shown" }, + ["raidOptionKeepGroupsTogether"] = { description = "The way to group raid frames" }, + ["raidOptionLocked"] = { description = "Whether the raid frames are locked" }, + ["raidOptionShowBorders"] = { description = "Displays borders around the raid frames." }, + ["raidOptionSortMode"] = { description = "The way to sort raid frames" }, + ["raidOrBattleCount"] = {}, + ["rawMouseAccelerationEnable"] = { description = "Enable acceleration for raw mouse input" }, + ["rawMouseEnable"] = { description = "Enable raw mouse input" }, + ["rawMouseRate"] = { description = "Raw mouse update rate" }, + ["rawMouseResolution"] = { description = "Raw mouse resolution" }, + --["readContest"] = {}, + --["readEULA"] = {}, + --["readScanning"] = {}, + --["readTOS"] = {}, + --["readTerminationWithoutNotice"] = {}, + -- ["realmName"] = {}, + ["reflectionDownscale"] = { description = "Reflection downscale" }, + ["reflectionMode"] = {}, + ["refraction"] = {}, + ["repositionfrequency"] = {}, + -- ["reputationsCollapsed"] = { description = "List of reputation categories that have been collapsed in the Reputation tab" }, + ["rippleDetail"] = {}, + ["sceneOcclusionEnable"] = { description = "Scene software occlusion" }, + ["screenshotFormat"] = {}, + ["screenshotQuality"] = {}, + ["scriptProfile"] = { description = "Whether or not script profiling is enabled" }, + ["scriptWarnings"] = { description = "Whether or not the UI shows Lua warnings" }, + ["secondaryProfessionsFilter"] = { description = "If enabled, secondary profession world quests icons will be shown on world maps" }, + -- ["seenAsiaCharacterUpgradePopup"] = { description = "Seen the free character upgrade popup (Asia)" }, + -- ["seenCharacterUpgradePopup"] = {}, + -- ["serverAlert"] = { description = "Get the glue-string tag for the URL" }, + -- ["serviceTypeFilter"] = { description = "Which trainer services to show" }, + ["shadowCull"] = { description = "enable shadow frustum culling" }, + ["shadowInstancing"] = { description = "enable instancing when rendering shadowmaps" }, + ["shadowMode"] = {}, + ["shadowScissor"] = { description = "enable scissoring when rendering shadowmaps" }, + ["shadowSoft"] = {}, + ["shadowTextureSize"] = {}, + -- ["shipyardMissionTutorialAreaBuff"] = { description = "Stores whether the player has accepted the first area buff mission tutorial" }, + -- ["shipyardMissionTutorialBlockade"] = { description = "Stores whether the player has accepted the first blockade mission tutorial" }, + -- ["shipyardMissionTutorialFirst"] = { description = "Stores whether the player has accepted the first mission tutorial" }, + ["showAllEnemyDebuffs"] = {}, + ["showArtifactXPBar"] = { description = "Show the artifact xp as priority over reputation" }, + ["showBattlefieldMinimap"] = { description = "Whether or not the battlefield minimap is shown" }, + ["showBuilderFeedback"] = { description = "Show animation when building power for builder/spender bar" }, + ["showErrors"] = {}, + ["showKeyring"] = {}, + ["showNPETutorials"] = { description = "display NPE tutorials" }, + ["showNewbieTips"] = {}, + ["showQuestObjectivesOnMap"] = { description = "Shows quest POIs on the main map." }, + ["showQuestTrackingTooltips"] = { description = "Displays quest tracking information in unit and object tooltips" }, + ["showSpectatorTeamCircles"] = { description = "Determines if the team color circles are visible while spectating or commentating a wargame" }, + ["showTamers"] = { description = "If enabled, pet battle icons will be shown on world maps" }, + ["showTimestamps"] = { description = 'The format of timestamps in chat or "none"' }, + -- ["showTokenFrame"] = { description = "The token UI has been shown" }, + -- ["showTokenFrameHonor"] = { description = "The token UI has shown Honor" }, + -- ["showToolsUI"] = {}, + ["showfootprintparticles"] = { description = "toggles rendering of footprint particles" }, + ["simd"] = { description = "Enable SIMD features (e.g. SSE)" }, + ["skipStartGear"] = { description = "Whether we should show starter gear on character create" }, + ["smoothUnitPhasing"] = { description = "The client will try to smoothly switch between the same on model different phases." }, + ["smoothUnitPhasingActorPurgatoryTimeMs"] = { description = "Time to keep client-actor displays in purgatory before letting go of them, if they were despawned" }, + ["smoothUnitPhasingAliveTimeoutMs"] = { description = "Time to wait for an alive unit to get it's despawn message" }, + ["smoothUnitPhasingDestroyedPurgatoryTimeMs"] = { description = "Time to keep unit displays in purgatory before letting go of them, if they were destroyed" }, + ["smoothUnitPhasingDistThreshold"] = { description = "Distance threshold to active smooth unit phasing." }, + ["smoothUnitPhasingEnableAlive"] = { description = "Use units that have not despawn yet if they match, in hopes the despawn message will come later." }, + ["smoothUnitPhasingUnseenPurgatoryTimeMs"] = { description = "Time to keep unit displays in purgatory before letting go of them, if they were just unseen." }, + ["smoothUnitPhasingVehicleExtraTimeoutMs"] = { + description = "Extra time to wait before releasing a vehicle, after it has smooth phased. This allows it's passengers to smooth phase as well.", + }, + ["spellBookSort"] = {}, + ["spellClutter"] = { description = "Enables/Disables spell clutter" }, + ["spellClutterDefaultTargetScalar"] = { description = "Starting target scalar value (min 0.1)" }, + ["spellClutterHostileScalar"] = { description = "Scalar we apply to the hostile creature spells (min 0.001)" }, + ["spellClutterMinSpellCount"] = { description = "Min spells on a target before we apply clutter logic (min 0)" }, + ["spellClutterPartySizeScalar"] = { description = "Scales the targetScalar by how different the party size is from this (min 1)" }, + ["spellClutterPlayerScalarMultiplier"] = { description = 'Increases number of effects on "interesting" targets multiplicatively (min 0.1)' }, + ["spellClutterRangeConstant"] = { description = "How many yards before the priority is doubled (min 1.0)" }, + ["splashScreenBoost"] = { description = "Show boost splash screen id " }, + ["splashScreenNormal"] = { description = "Show normal splash screen id" }, + -- ["statCategoriesCollapsed"] = {}, + -- ["statCategoriesCollapsed_2"] = {}, + -- ["statCategoryOrder"] = {}, + -- ["statCategoryOrder_2"] = {}, + ["streamBeams"] = { description = "Use vertex streaming for beams (Gfx Driver Workaround). 0=Auto Detect, 1=Never Stream, 2=Always Stream" }, + ["streamStatusMessage"] = { description = "Whether to display status messages while streaming content" }, + ["streamingCameraLookAheadTime"] = { description = "Look ahead time for streaming." }, + ["streamingCameraMaxRadius"] = { description = "Max radius of the streaming camera." }, + ["streamingCameraRadius"] = { description = "Base radius of the streaming camera." }, + ["sunShafts"] = {}, + ["superTrackerDist"] = {}, + ["synchronizeBindings"] = {}, + ["synchronizeChatFrames"] = {}, + ["synchronizeSettings"] = { description = "Whether client settings should be stored on the server" }, + ["taintLog"] = {}, + -- ["talentFrameShown"] = { description = "The talent UI has been shown" }, + ["talentPointsSpent"] = { description = "The player has spent a talent point" }, + ["targetOfTargetMode"] = { description = "The conditions under which target of target should be shown" }, + ["terrainAlphaBitDepth"] = { description = "Terrain alpha map bit depth" }, + ["terrainHoles"] = { description = "Terrain holes affect occlusion" }, + ["terrainLodDist"] = {}, + ["terrainMipLevel"] = {}, + ["terrainTextureLod"] = {}, + ["test_cameraDynamicPitch"] = { description = "ActionCam" }, + ["test_cameraDynamicPitchBaseFovPad"] = { description = "ActionCam" }, + ["test_cameraDynamicPitchBaseFovPadDownScale"] = { description = "ActionCam" }, + ["test_cameraDynamicPitchBaseFovPadFlying"] = { description = "ActionCam" }, + ["test_cameraDynamicPitchSmartPivotCutoffDist"] = { description = "ActionCam" }, + ["test_cameraHeadMovementDeadZone"] = { description = "ActionCam" }, + ["test_cameraHeadMovementFirstPersonDampRate"] = { description = "ActionCam" }, + ["test_cameraHeadMovementMovingDampRate"] = { description = "ActionCam" }, + ["test_cameraHeadMovementMovingStrength"] = { description = "ActionCam" }, + ["test_cameraHeadMovementRangeScale"] = { description = "ActionCam" }, + ["test_cameraHeadMovementStandingDampRate"] = { description = "ActionCam" }, + ["test_cameraHeadMovementStandingStrength"] = { description = "ActionCam" }, + ["test_cameraHeadMovementStrength"] = { description = "ActionCam" }, + ["test_cameraLockedTargetFocusing"] = { description = "ActionCam" }, + ["test_cameraOverShoulder"] = { description = "ActionCam" }, + ["test_cameraTargetFocusEnemyEnable"] = { description = "ActionCam" }, + ["test_cameraTargetFocusEnemyStrengthPitch"] = { description = "ActionCam" }, + ["test_cameraTargetFocusEnemyStrengthYaw"] = { description = "ActionCam" }, + ["test_cameraTargetFocusInteractEnable"] = { description = "ActionCam" }, + ["test_cameraTargetFocusInteractStrengthPitch"] = { description = "ActionCam" }, + ["test_cameraTargetFocusInteractStrengthYaw"] = { description = "ActionCam" }, + ["textLocale"] = { description = "Set the game locale for text" }, + ["textureFilteringMode"] = {}, + ["threatWarning"] = { description = "Whether or not to show threat warning UI (0 = off, 1 = in dungeons, 2 = in party/raid, 3 = always)" }, + ["threatWorldText"] = { description = "Whether or not to show threat floaters in combat" }, + ["timeMgrAlarmEnabled"] = { description = "Toggles whether or not the time manager's alarm will go off" }, + ["timeMgrAlarmMessage"] = { description = "The time manager's alarm message" }, + ["timeMgrAlarmTime"] = { description = "The time manager's alarm time in minutes" }, + ["timeMgrUseLocalTime"] = { description = "Toggles the use of either the realm time or your system time" }, + ["timeMgrUseMilitaryTime"] = { description = "Toggles the display of either 12 or 24 hour time" }, + ["timingMethod"] = { description = "Desired method for game timing" }, + -- ["timingTestError"] = { description = "Error reported by the timing validation system" }, -- read-only + -- ["toyBoxCollectedFilters"] = { description = "Bitfield for which collected filters are applied in the toybox" }, + -- ["toyBoxSourceFilters"] = { description = "Bitfield for which source filters are applied in the toybox" }, + -- ["trackedAchievements"] = { description = "Internal cvar for saving tracked achievements in order" }, + -- ["trackedQuests"] = { description = "Internal cvar for saving automatically tracked quests in order" }, + -- ["trackedWorldQuests"] = { description = "Internal cvar for saving tracked world quests" }, + -- ["trackerFilter"] = {}, + -- ["trackerSorting"] = {}, + ["transmogCurrentSpecOnly"] = { description = "Stores whether transmogs apply to current spec instead of all specs" }, + -- ["transmogrifyShowCollected"] = { description = "Whether to show collected transmogs in the at the transmogrifier" }, -- read-only + -- ["transmogrifyShowUncollected"] = { description = "Whether to show uncollected transmogs in the at the transmogrifier" }, -- read-only + -- ["transmogrifySourceFilters"] = { description = "Bitfield for which source filters are applied in the wardrobe at the transmogrifier" }, + ["twitterCharactersPerMedia"] = { description = "Number of characters needed when attaching media to a Twitter post" }, + -- ["twitterGetConfigTime"] = { description = "Last time that we got Twitter configuration data successfully" }, + ["twitterShortUrlLength"] = { description = "Number of characters that non-https URLS get shortened to" }, + ["twitterShortUrlLengthHttps"] = { description = "Number of characters that https URLS get shortened to" }, + ["uiScale"] = {}, + ["uiScaleMultiplier"] = { + description = "A multiplier for the default UI scale. -1=determine based on system/monitor DPI, 0.5-2.0=multiplier to use when calculating UI scale. Only applied when useUIScale is 0.", + }, + ["unitHighlights"] = { description = "Whether the highlight circle around units should be displayed" }, + ["useCompactPartyFrames"] = { description = "Use the new raid frames for parties" }, + ["useUiScale"] = {}, + ["videoOptionsVersion"] = {}, + -- ["wardrobeShowCollected"] = { description = "Whether to show collected transmogs in the wardrobe" }, -- read-only + -- ["wardrobeShowUncollected"] = { description = "Whether to show uncollected transmogs in the wardrobe" }, -- read-only + -- ["wardrobeSourceFilters"] = { description = "Bitfield for which source filters are applied in the wardrobe in the collection journal" }, + ["warp"] = { description = "UI value of the graphics setting" }, + ["warpScreenSize"] = { description = "Physical monitor size" }, + ["warpViewDistance"] = { description = "Physical distance from the viewer to the monitor" }, + ["warpViewTilt"] = { description = "Angle of the side monitors IN RADIANS" }, + ["watchFrameBaseAlpha"] = { description = "Objectives frame opacity." }, + -- ["watchFrameState"] = { description = "Stores Objectives frame locked and collapsed states" }, + ["waterDetail"] = {}, + ["weatherDensity"] = {}, + ["webChallengeURLTimeout"] = { description = "How long to wait for the web challenge URL (in seconds). 0 means wait forever." }, + ["whisperMode"] = { description = 'The action new whispers take by default: "popout", "inline", "popout_and_inline"' }, + ["windowResizeLock"] = { description = "prevent resizing in windowed mode" }, + ["wmoDoodadDist"] = { description = "Wmo doodad load distance" }, + ["wmoLodDist"] = {}, + ["worldBaseMip"] = {}, + ["worldLoadSort"] = { description = "Sort objects by distance when loading" }, + ["worldMapOpacity"] = { description = "Opacity for the world map when sized down" }, + ["worldMaxMipLevel"] = { description = "World maximum texture mip level" }, + ["worldPoolUsage"] = { description = "Usage static/dynamic/stream" }, + ["worldPreloadHighResTextures"] = { description = "Require high res textures to be loaded in streaming non critical radius when preloading" }, + ["worldPreloadNonCritical"] = { description = "Require objects to be loaded in streaming non critical radius when preloading" }, + ["worldPreloadSort"] = { description = "Sort objects by distance when preloading" }, + ["worldQuestFilterArtifactPower"] = { description = "If enabled, world quests with artifact power rewards will be shown on the map" }, + ["worldQuestFilterEquipment"] = { description = "If enabled, world quests with equipment rewards will be shown on the map" }, + ["worldQuestFilterGold"] = { description = "If enabled, world quests with gold rewards will be shown on the map" }, + ["worldQuestFilterOrderResources"] = { description = "If enabled, world quests with order resource rewards will be shown on the map" }, + ["worldQuestFilterProfessionMaterials"] = { description = "If enabled, world quests with profession material rewards will be shown on the map" }, + ["CastTimingEnhancements"] = { prettyName = nil, description = "Hold chain precasts, and predict anim timed casts", type = "boolean" }, + ["autoAcceptQuickJoinRequests"] = { prettyName = "Auto-accept quick join requests", description = "", type = "boolean" }, + ["AimingStrafeLeftUsesMoveBackwards"] = { description = "Uses backwards move anim when aiming a ranged weapon and strafing to the left" }, + ["DebugTorsoTwist"] = { description = "Debug visualization for Torso Twist: 1 = Player, 2 = Target, 3 = All" }, - -- 7.1.5 dump (1/16/17) - ["BrowserNavigateLog"] = { description = "Enables Logging of browser navigation requests (Requires /reload)" }, - --["CACHE-WGOB-GameObjectsHotfixCount"] = {}, - --["CACHE-WGOB-GameObjectsRecordCount"] = {}, - --["CACHE-WQST-QuestObjectiveHotfixCount"] = {}, - --["CACHE-WQST-QuestObjectiveRecordCount"] = {}, - --["CACHE-WQST-QuestObjectiveXEffectHotfixCount"] = {}, - --["CACHE-WQST-QuestObjectiveXEffectRecordCount"] = {}, - --["CACHE-WQST-QuestV2HotfixCount"] = {}, - --["CACHE-WQST-QuestV2RecordCount"] = {}, - ["ChatMusicVolume"] = {}, - ["CombatHealingAbsorbSelf"] = {}, - ["DepthBasedOpacity"] = {}, - ["DesktopGamma"] = {}, - -- ["EJDungeonDifficulty"] = { description = "Stores the last dungeon difficulty viewed in the encounter journal" }, - -- ["EJLootClass"] = { description = "Stores the last class that loot was filtered by in the encounter journal" }, - -- ["EJLootSpec"] = { description = "Stores the last spec that loot was filtered by in the encounter journal" }, - -- ["EJRaidDifficulty"] = { description = "Stores the last raid difficulty viewed in the encounter journal" }, - ["EmitterCombatrange"] = { description = "Range to stop shoulder/weapon emissions during combat" }, - -- ["ErrorFilter"] = {}, - -- ["ErrorLevelMax"] = {}, - -- ["ErrorLevelMin"] = {}, - -- ["Errors"] = {}, - ["FootstepSounds"] = { description = "play footstep sounds" }, - ["Gamma"] = {}, - ["LodLiquid"] = { description = "Render using lod liquid" }, - ["M2ForceAdditiveParticleSort"] = { description = "force all particles to sort as though they were additive" }, - ["M2UseInstancing"] = { description = "use hardware instancing" }, - ["M2UseLOD"] = { description = "use model lod" }, - ["M2UseThreads"] = { description = "multithread model animations" }, - ["MSAAAlphaTest"] = { description = "Enable MSAA for alpha-tested geometry" }, - ["MSAAQuality"] = { description = "Multisampling AA quality" }, - ["MaxObservedPetBattles"] = { description = "Maximum number of observed pet battles" }, - ["NameplatePersonalHideDelayAlpha"] = { description = "Determines the alpha of the personal nameplate after no visibility conditions are met (during the period of time specified by NameplatePersonalHideDelaySeconds)." }, - ["NonEmitterCombatRange"] = { description = "Range to stop shoulder/weapon emissions outside combat" }, - ["ObjectSelectionCircle"] = {}, - ["OutlineEngineMode"] = {}, - -- ["Outline"] = { description="Outline Mode" }, -- don't know what this does aside from make you flash when it's set - ["POIShiftComplete"] = {}, - -- ["PraiseTheSun"] = {}, - ["PushToTalkButton"] = { description = "String representation of the Push-To-Talk button." }, - ["RAIDDepthBasedOpacity"] = {}, - ["RAIDLightMode"] = {}, - ["RAIDOutlineEngineMode"] = {}, - ["RAIDSSAO"] = {}, - ["RAIDSSAOBlur"] = {}, - ["RAIDWaterDetail"] = {}, - ["RAIDcomponentTextureLevel"] = {}, - ["RAIDenvironmentDetail"] = {}, - ["RAIDfarclip"] = {}, - ["RAIDgraphicsQuality"] = {}, - ["RAIDgroundEffectDensity"] = {}, - ["RAIDgroundEffectDist"] = {}, - ["RAIDgroundEffectFade"] = { description = "Raid Ground effect fade" }, - ["RAIDhorizonStart"] = { description = "Raid Horizon start distance" }, - ["RAIDlodObjectCullDist"] = {}, - ["RAIDlodObjectCullSize"] = {}, - ["RAIDlodObjectMinSize"] = {}, - ["RAIDlodObjectFadeScale"] = {}, - ["RAIDparticleDensity"] = {}, - ["RAIDparticleMTDensity"] = {}, - ["RAIDprojectedTextures"] = {}, - ["RAIDreflectionMode"] = {}, - ["RAIDrefraction"] = {}, - ["RAIDrippleDetail"] = {}, - ["RAIDsettingsEnabled"] = { description = "Raid graphic settings are available" }, - ["RAIDsettingsInit"] = {}, - ["RAIDshadowMode"] = {}, - ["RAIDshadowSoft"] = {}, - ["RAIDshadowTextureSize"] = {}, - ["RAIDsunShafts"] = {}, - ["RAIDterrainLodDist"] = {}, - ["RAIDterrainMipLevel"] = {}, - ["RAIDterrainTextureLod"] = {}, - ["RAIDtextureFilteringMode"] = {}, - ["RAIDweatherDensity"] = {}, - ["RAIDwmoLodDist"] = {}, - ["RAIDworldBaseMip"] = {}, - ["RenderScale"] = { description = "Render scale (for supersampling or undersampling)" }, - ["ResampleQuality"] = { description = "Resample quality" }, - ["SSAO"] = {}, - ["SSAOBlur"] = {}, - ["SSAODistance"] = { description = "SSAO distance" }, - ["SkyCloudLOD"] = {}, - ["SoundPerf_VariationCap"] = { description = "Limit sound kit variations to cut down on memory usage and disk thrashing on 32-bit machines" }, - ["SoundUseNewBusSystem"] = { description = "use the new bus structure or fallback to the old one" }, - ["Sound_DSPBufferSize"] = { description = "sound buffer size, default 0" }, - ["Sound_EnableArmorFoleySoundForOthers"] = {}, - ["Sound_EnableArmorFoleySoundForSelf"] = {}, - ["Sound_EnableMixMode2"] = {}, - ["Sound_EnableMode2"] = {}, - ["Sound_MaxCacheSizeInBytes"] = { description = "Max cache size in bytes" }, - ["Sound_MaxCacheableSizeInBytes"] = { description = "Max sound size that will be cached, larger files will be streamed instead" }, - ["Sound_NumChannels"] = {}, - ["Sound_OutputDriverIndex"] = {}, - ["Sound_OutputDriverName"] = {}, - ["Sound_OutputSampleRate"] = { description = "output sample rate" }, - ["Sound_VoiceChatInputDriverIndex"] = {}, - ["Sound_VoiceChatInputDriverName"] = {}, - ["Sound_VoiceChatOutputDriverIndex"] = {}, - ["Sound_VoiceChatOutputDriverName"] = {}, - ["SplineOpt"] = { description = "toggles use of spline coll optimization" }, - ["StartTalkingDelay"] = {}, - ["StartTalkingTime"] = {}, - ["StopTalkingDelay"] = {}, - ["StopTalkingTime"] = {}, - ["TargetPriorityValueBank"] = { description = "Selects the active targeting values bank for calculating target priority order" }, - ["VoiceChatMode"] = { description = "Push to talk(0) or voice activation(1)" }, - ["VoiceChatSelfMute"] = { description = "Turn off your ability to talk." }, - ["WorldTextCritScreenY"] = {}, - ["WorldTextGravity"] = {}, - ["WorldTextNonRandomZ"] = {}, - ["WorldTextRampDuration"] = {}, - ["WorldTextRampPow"] = {}, - ["WorldTextRampPowCrit"] = {}, - ["WorldTextRandomXY"] = {}, - ["WorldTextRandomZMax"] = {}, - ["WorldTextRandomZMin"] = {}, - ["WorldTextScreenY"] = {}, - ["WorldTextStartPosRandomness"] = {}, - -- ["accounttype"] = {}, - -- ["actionedAdventureJournalEntries"] = { description = "Which adventure journal entries flagged with ADVENTURE_JOURNAL_HIDE_AFTER_ACTION the user acted upon" }, - -- ["activeCUFProfile"] = { description = "The last active CUF Profile." }, - -- ["addFriendInfoShown"] = { description = "The info for Add Friend has been shown" }, - -- ["advJournalLastOpened"] = { description = "Last time the Adventure Journal opened" }, - -- ["agentUID"] = { description = "The UID provided by Battle.net to be passed to Agent" }, - ["allowCompareWithToggle"] = {}, - ["allowD3D9BackingStore"] = { description = "Allow D3D9 to have texture backing to decrease load times and increase the chance of an out of memory crash" }, - ["animFrameSkipLOD"] = { description = "animations will skip frames at distance" }, - ["asyncHandlerTimeout"] = { description = "Engine option: Async read main thread timeout" }, - ["asyncThreadSleep"] = { description = "Engine option: Async read thread sleep" }, - ["auctionDisplayOnCharacter"] = { description = "Show auction items on the dress-up paperdoll" }, - ["audioLocale"] = { description = "Set the game locale for audio content" }, - ["autoCompleteResortNamesOnRecency"] = { description = "Shows people you recently spoke with higher up on the AutoComplete list." }, - ["autoCompleteUseContext"] = { description = "The system will, for example, only show people in your guild when you are typing /gpromote. Names will also never be removed." }, - ["autoCompleteWhenEditingFromCenter"] = { description = "If you edit a name by inserting characters into the center, a smarter auto-complete will occur." }, - ["autoDismount"] = { description = "Automatically dismount when needed" }, - -- ["autoFilledMultiCastSlots"] = { description = "Bitfield that saves whether multi-cast slots have been automatically filled." }, - -- ["autoQuestPopUps"] = { description = "Saves current pop-ups for quests that are automatically acquired or completed." }, - ["autoStand"] = { description = "Automatically stand when needed" }, - ["autoUnshift"] = { description = "Automatically leave shapeshift form when needed" }, - ["autojoinBGVoice"] = { description = "Automatically join the voice session in battleground chat" }, - ["autojoinPartyVoice"] = { description = "Automatically join the voice session in party/raid chat" }, - -- ["bloatTest"] = {}, - -- ["bloatnameplates"] = {}, - -- ["bloatthreat"] = {}, - ["bodyQuota"] = { description = "Maximum number of componented bodies seen at once" }, - ["breakUpLargeNumbers"] = { description = "Toggles using commas in large numbers" }, - ["bspcache"] = { description = "BSP node caching" }, - ["calendarShowBattlegrounds"] = { description = "Whether Battleground holidays should appear in the calendar" }, - ["calendarShowDarkmoon"] = { description = "Whether Darkmoon Faire holidays should appear in the calendar" }, - ["calendarShowLockouts"] = { description = "Whether raid lockouts should appear in the calendar" }, - ["calendarShowResets"] = { description = "Whether raid resets should appear in the calendar" }, - ["calendarShowWeeklyHolidays"] = { description = "Whether weekly holidays should appear in the calendar" }, - ["cameraCustomViewSmoothing"] = {}, - ["cameraDistanceMax"] = {}, - ["cameraDistanceMaxFactor"] = {}, - ["cameraDistanceRateMult"] = {}, - ["cameraDive"] = {}, - ["cameraHeightIgnoreStandState"] = {}, - ["cameraPitchSmoothMax"] = {}, - ["cameraPitchSmoothMin"] = {}, - ["cameraPivotDXMax"] = {}, - ["cameraPivotDYMin"] = {}, - -- ["cameraSavedDistance"] = {}, - -- ["cameraSavedPetBattleDistance"] = {}, - -- ["cameraSavedPitch"] = {}, - -- ["cameraSavedVehicleDistance"] = {}, - -- ["cameraView"] = {}, - ["cameraYawSmoothMax"] = {}, - ["cameraYawSmoothMin"] = {}, - ["cameraZDamp"] = {}, - ["cameraZoomSpeed"] = {}, - -- ["characterFrameCollapsed"] = {}, - ["chatStyle"] = { description = "The style of Edit Boxes for the ChatFrame. Valid values: \"classic\", \"im\"" }, - ["checkAddonVersion"] = {}, - ["cloakFixEnabled"] = {}, - -- ["closedInfoFrames"] = { description = "Bitfield for which help frames have been acknowledged by the user" }, - ["colorChatNamesByClass"] = { description = "If enabled, the name of a player speaking in chat will be colored according to his class." }, - ["combatLogReducedRetentionTime"] = { description = "The maximum duration in seconds to retain combat log entries when we're low on memory" }, - ["combatLogRetentionTime"] = { description = "The maximum duration in seconds to retain combat log entries" }, - ["combatTextFloatMode"] = {}, - ["componentCompress"] = { description = "Character component texture compression" }, - ["componentEmissive"] = { description = "Character component unlit/emissive" }, - ["componentSpecular"] = { description = "DISABLED FOR 7.0.3 - Character component specular highlights" }, - ["componentTexCacheSize"] = { description = "Character component texture cache size (in MB)" }, - ["componentTexLoadLimit"] = { description = "Character component texture loading limit per frame" }, - ["componentTextureLevel"] = {}, - ["componentThread"] = { description = "Multi thread character component processing" }, - -- ["currencyCategoriesCollapsed"] = { description = "Internal CVar for tracking collapsed currency categories." }, - -- ["currencyTokensBackpack1"] = { description = "Currency token types shown on backpack." }, - -- ["currencyTokensBackpack2"] = { description = "Currency token types shown on backpack." }, - -- ["currencyTokensUnused1"] = { description = "Currency token types marked as unused." }, - -- ["currencyTokensUnused2"] = { description = "Currency token types marked as unused." }, - ["daltonize"] = { description = "Attempt to correct for color blindness (set colorblindSimulator to type of colorblindness)" }, - -- ["dangerousShipyardMissionWarningAlreadyShown"] = { description = "Boolean indicating whether the shipyard's dangerous mission warning has been shown" }, - -- ["debugSoundPlayerSpellsOnlyOnPlayerBus"] = {}, - ["detailDoodadInstancing"] = { description = "Detail doodad instancing" }, - ["digSites"] = { description = "If enabled, the archaeological dig site system will be used." }, - ["disableAutoRealmSelect"] = { description = "Disable automatically selecting a realm on login" }, - ["displayWorldPVPObjectives"] = { description = "Whether to show world PvP objectives" }, - -- ["displayedRAFFriendInfo"] = { description = "Stores whether we already told a recruited person about their new BattleTag friend" }, - ["dontShowEquipmentSetsOnItems"] = { description = "Don't show which equipment sets an item is associated with" }, - ["doodadLodDist"] = { description = "Doodad level of detail distance" }, - ["doodadUnloadDist"] = {}, - ["enableBGDL"] = { description = "Background Download (on async net thread) Enabled" }, - -- ["enableCombatText"] = {}, - ["enablePVPNotifyAFK"] = { description = "The ability to shutdown the AFK notification system" }, - ["enablePetBattleFloatingCombatText"] = { description = "Whether to show floating combat text for pet battles" }, - -- ["engineSurvey"] = {}, - ["enterWorld"] = {}, - ["entityLodDist"] = { description = "Entity level of detail distance" }, - ["environmentDetail"] = {}, - ["expandUpgradePanel"] = {}, - ["farclip"] = {}, - ["fctCombatState"] = {}, - -- ["fctFriendlyHealers"] = {}, - ["ffxAntiAliasingMode"] = { description = "Anti Aliasing Mode" }, - ["ffxRectangle"] = { description = "use rectangle texture for full screen effects" }, - -- ["flaggedTutorials"] = { description = "Internal cvar for saving completed tutorials in order" }, - ["flightAngleLookAhead"] = { description = "Enables more dynamic attitude adjustments while flying" }, - -- ["floatingCombatTextCombatDamageStyle"] = { description = "No longer used" }, - ["forceEnglishNames"] = {}, - ["forceLODCheck"] = { description = "If enabled, we will skip checking DBC for LOD count and every m2 will scan the folder for skin profiles" }, - -- ["friendInvitesCollapsed"] = { description = "Whether friend invites are hidden in the friends list" }, - ["friendsSmallView"] = { description = "Whether to use smaller buttons in the friends list" }, - ["friendsViewButtons"] = { description = "Whether to show the friends list view buttons" }, - ["fullDump"] = { description = "When you crash, generate a full memory dump" }, - ["gameTip"] = {}, - ["garrisonCompleteTalent"] = {}, - ["garrisonCompleteTalentType"] = {}, - ["graphicsDepthEffects"] = { description = "UI value of the graphics setting" }, - ["graphicsEnvironmentDetail"] = {}, - ["graphicsLightingQuality"] = { description = "UI value of the graphics setting" }, - ["graphicsLiquidDetail"] = { description = "UI value of the graphics setting" }, - ["graphicsOutlineMode"] = { description = "UI value of the graphics setting" }, - ["graphicsParticleDensity"] = {}, - ["graphicsProjectedTextures"] = { description = "UI value of the graphics setting" }, - ["graphicsQuality"] = {}, - ["graphicsSSAO"] = { description = "UI value of the graphics setting" }, - ["graphicsShadowQuality"] = {}, - ["graphicsSunshafts"] = { description = "UI value of the graphics setting" }, - ["graphicsTextureFiltering"] = {}, - ["graphicsTextureResolution"] = {}, - ["graphicsViewDistance"] = {}, - ["groundEffectDensity"] = {}, - ["groundEffectDist"] = {}, - ["groundEffectFade"] = { description = "Ground effect fade" }, - -- ["guildNewsFilter"] = { description = "Stores the guild news filters" }, - ["guildRewardsCategory"] = { description = "Show category of guild rewards" }, - ["guildRewardsUsable"] = { description = "Show usable guild rewards only" }, - -- ["guildRosterView"] = { description = "The current guild roster display mode" }, - ["guildShowOffline"] = { description = "Show offline guild members in the guild UI" }, - ["gxAFRDevicesCount"] = { description = "Force to set number of AFR devices" }, - ["gxAdapter"] = { description = "Force to run the specified adapter index (-1 to let client choose)" }, - -- ["gxApi"] = {}, - ["gxAspect"] = { description = "constrain window aspect" }, - ["gxCursor"] = { description = "toggle hardware cursor" }, - ["gxDepthResolveHandleCaching"] = { description = "Caching of the target handle for the depth resolve" }, - ["gxFixLag"] = { description = "prevent cursor lag" }, - ["gxFullscreenResolution"] = { description = "resolution" }, - ["gxMaxFrameLatency"] = { description = "maximum number of frames ahead of GPU the CPU can be" }, - ["gxMaximize"] = {}, - ["gxMonitor"] = { description = "monitor" }, - ["gxNewResolution"] = { description = "resolution to be set" }, - ["gxPreferWindowedFullscreen"] = { description = "prefer which fullscreen mode for toggle" }, - -- ["gxRefresh"] = {}, - ["gxStereoConvergence"] = { description = "Set stereoscopic rendering convergence depth" }, - ["gxStereoEnabled"] = { description = "Enable stereoscopic rendering" }, - ["gxStereoSeparation"] = { description = "Set stereoscopic rendering separation percentage" }, - ["gxTextureCacheSize"] = { description = "GX Texture Cache Size" }, - ["gxTripleBuffer"] = { description = "triple buffer" }, - ["gxVSync"] = { description = "vsync on or off" }, - ["gxWindow"] = {}, - ["gxWindowedResolution"] = {}, - -- ["hardTrackedQuests"] = { description = "Internal cvar for saving hard (user manually selected) tracked quests in order" }, - -- ["hardTrackedWorldQuests"] = { description = "Internal cvar for saving hard tracked world quests" }, - ["hbaoBias"] = { description = "HBAO Bias" }, - ["hbaoBlurSharp"] = { description = "HBAO Blur Sharpness" }, - ["hbaoNormals"] = { description = "Use Normals for HBAO" }, - ["hbaoPowerExp"] = { description = "HBAO Power Exponent" }, - ["hbaoRadius"] = { description = "HBAO Radius" }, - -- ["heirloomCollectedFilters"] = { description = "Bitfield for which collected filters are applied in the heirloom journal" }, - -- ["heirloomSourceFilters"] = { description = "Bitfield for which source filters are applied in the heirloom journal" }, - ["hideAdventureJournalAlerts"] = { description = "Hide alerts shown on the Adventure Journal Microbutton" }, - ["horizonStart"] = {}, - ["hotReloadModels"] = { description = "Allow an active model to be reloaded when a new version is detected in the bin folder. If this is disabled, the model data will only be refreshed after all game objects using the model are deleted" }, - ["hwDetect"] = {}, - ["hwPCF"] = { description = "Hardware PCF Filtering" }, - ["incompleteQuestPriorityThresholdDelta"] = {}, - ["initialRealmListTimeout"] = { description = "How long to wait for the initial realm list before failing login (in seconds)" }, - ["installLocale"] = {}, - --["installType"] = {}, - -- ["lastAddonVersion"] = {}, - -- ["lastCharacterIndex"] = {}, - -- ["lastGarrisonMissionTutorial"] = { description = "Stores the last garrison mission tutorial the player has accepted" }, - -- ["lastReadEULA"] = {}, - -- ["lastReadTOS"] = {}, - -- ["lastReadTerminationWithoutNotice"] = {}, - -- ["lastTalkedToGM"] = { description = "Stores the last GM someone was talking to in case they reload the UI while the GM chat window is open." }, - -- ["lastTransmogOutfitID"] = { description = "SetID of the last loaded transmog outfit" }, - -- ["lastVoidStorageTutorial"] = { description = "Stores the last void storage tutorial the player has accepted" }, - ["launchAgent"] = { description = "Set this to have the client start up Agent" }, - -- ["lfGuildComment"] = { description = "Stores the player's Looking For Guild comment" }, - -- ["lfGuildSettings"] = { description = "Bit field of Looking For Guild player settings" }, - -- ["lfdCollapsedHeaders"] = { description = "Stores which LFD headers are collapsed." }, - -- ["lfdSelectedDungeons"] = { description = "Stores which LFD dungeons are selected." }, - ["lfgAutoFill"] = { description = "Whether to automatically add party members while looking for a group" }, - ["lfgAutoJoin"] = { description = "Whether to automatically join a party while looking for a group" }, - -- ["lfgListSearchLanguages"] = { description = "A simple bitfield for what languages we want to search in." }, - -- ["lfgSelectedRoles"] = { description = "Stores what roles the player is willing to take on." }, - ["lightMode"] = {}, - ["locale"] = { description = "Set the game locale" }, - ["lockedWorldMap"] = { description = "Whether the world map is locked when sized down" }, - ["lodObjectCullDist"] = {}, - ["lodObjectCullSize"] = {}, - ["lodObjectMinSize"] = {}, - ["lodTerrainDiv"] = { description = "Terrain lod divisor" }, - ["mapAnimDuration"] = { description = "Duration for the alpha animation" }, - ["mapAnimMinAlpha"] = { description = "Alpha value to animate to when player moves with windowed world map open" }, - ["mapAnimStartDelay"] = { description = "Start delay for the alpha animation" }, - ["mapQuestDifficulty"] = {}, - -- ["maxAnimThreads"] = {}, - ["maxFPS"] = { description = "Set FPS limit" }, - ["maxFPSBk"] = { description = "Set background FPS limit" }, - ["maxLightCount"] = { description = "Maximum lights to render" }, - ["maxLightDist"] = { description = "Maximum distance to render lights" }, - ["miniWorldMap"] = { description = "Whether or not the world map has been toggled to smaller size" }, - ["minimapAltitudeHintMode"] = { description = "Change minimap altitude difference display. 0=none, 1=darken, 2=arrows" }, - ["minimapInsideZoom"] = { description = "The current indoor minimap zoom level" }, - ["minimapPortalMax"] = { description = "Max Number of Portals to traverse for minimap" }, - -- ["minimapShapeshiftTracking"] = { description = "Stores shapeshift-specific tracking spells that were active last session." }, - ["minimapShowArchBlobs"] = { description = "Stores whether to show archaeology blobs on the minimap." }, - ["minimapShowQuestBlobs"] = { description = "Stores whether to show the quest blobs on the minimap." }, - -- ["minimapTrackedInfo"] = {}, - -- ["minimapTrackedInfov2"] = { description = "Stores the minimap tracking that was active last session." }, - ["minimapZoom"] = { description = "The current outdoor minimap zoom level" }, - ["missingTransmogSourceInItemTooltips"] = { description = "Whether to show if you have collected the appearance of an item but not from that item itself" }, - -- ["mountJournalFilters"] = { description = "Bitfield for which collected filters are applied in the mount journal" }, - -- ["mountJournalSourceFilters"] = { description = "Bitfield for which source filters are applied in the mount journal" }, - ["mouseInvertYaw"] = {}, - ["mtParticles"] = { description = "multithread building of particle vertices" }, - ["nameplateMotionSpeed"] = { description = "Controls the rate at which nameplate animates into their target locations [0.0-1.0]" }, - ["nameplateShowEnemyMinions"] = {}, - ["nameplateShowFriendlyMinions"] = {}, - ["nearclip"] = { description = "Near clip plane distance" }, - -- ["orderHallMissionTutorial"] = { description = "Stores information about which order hall mission tutorials the player has seen" }, - ["outdoorMinAltitudeDistance"] = { description = "Minimum altitude distance for outdoor objects when you are also outdoors before the altitude difference marker displays" }, - ["outlineMouseOverFadeDuration"] = {}, - ["outlineSelectionFadeDuration"] = {}, - ["overrideArchive"] = { description = "Whether or not the client loads alternate data" }, - ["particleDensity"] = {}, - ["particleMTDensity"] = {}, - ["partyBackgroundOpacity"] = { description = "The opacity of the party background" }, - ["pathSmoothing"] = { description = "NPC will round corners on ground paths" }, - -- ["pendingInviteInfoShown"] = { description = "The info for pending invites has been shown" }, - -- ["petJournalFilters"] = { description = "Bitfield for which collected filters are applied in the pet journal" }, - -- ["petJournalSort"] = { description = "Sorting value for the pet journal" }, - -- ["petJournalSourceFilters"] = { description = "Bitfield for which source filters are applied in the pet journal" }, - -- ["petJournalTab"] = { description = "Stores the last tab the pet journal was opened to" }, - -- ["petJournalTypeFilters"] = { description = "Bitfield for which type filters are applied in the pet journal" }, - ["physicsLevel"] = { description = "Level of physics world interaction" }, - ["playIntroMovie"] = {}, - --["playerStatLeftDropdown"] = { description = "The player stat selected in the left dropdown" }, - --["playerStatRightDropdown"] = { description = "The player stat selected in the right dropdown" }, - -- ["portal"] = { description = "Name of Battle.net portal to use" }, - ["predictedHealth"] = { description = "Whether or not to use predicted health values in the UI" }, - ["preloadLoadingDistObject"] = { description = "Object preload distance when loading" }, - ["preloadLoadingDistTerrain"] = { description = "Terrain preload distance when loading" }, - ["preloadPlayerModels"] = { description = "Preload all local racial models into memory" }, - ["preloadStreamingDistObject"] = { description = "Object preload distance when streaming" }, - ["preloadStreamingDistTerrain"] = { description = "Terrain preload distance when streaming" }, - ["primaryProfessionsFilter"] = { description = "If enabled, primary profession world quests icons will be shown on world maps" }, - ["processAffinityMask"] = { description = "Sets which core(s) WoW may execute on - changes require restart to take effect" }, - ["projectedTextures"] = {}, - ["pvpBlacklistMaps0"] = { description = "Blacklist PVP Map" }, - ["pvpBlacklistMaps1"] = { description = "Blacklist PVP Map" }, - -- ["pvpSelectedRoles"] = { description = "Stores what roles the player will fulfill in a BG." }, - -- ["questLogCollapseFilter"] = {}, - -- ["questLogCollapseHeaderFilter"] = {}, - -- ["questLogOpen"] = { description = "Whether the quest log appears the side of the windowed map. " }, - ["questPOI"] = { description = "If enabled, the quest POI system will be used." }, - ["raidFramesDisplayAggroHighlight"] = { description = "Whether to display aggro highlights on Raid Frames" }, - ["raidFramesDisplayClassColor"] = { description = "Colors raid frames with the class color" }, - ["raidFramesDisplayOnlyDispellableDebuffs"] = { description = "Whether to display only dispellable debuffs on Raid Frames" }, - ["raidFramesDisplayPowerBars"] = { description = "Whether to display mana, rage, etc. on Raid Frames" }, - ["raidFramesHealthText"] = { description = "How to display health text on the raid frames" }, - ["raidFramesHeight"] = { description = "The height of the individual raid frames" }, - ["raidFramesPosition"] = { description = "Where the raid frames should be placed" }, - ["raidFramesWidth"] = { description = "The width of the individual raid frames" }, - ["raidGraphicsDepthEffects"] = {}, - ["raidGraphicsEnvironmentDetail"] = {}, - ["raidGraphicsGroundClutter"] = {}, - ["raidGraphicsLightingQuality"] = {}, - ["raidGraphicsLiquidDetail"] = {}, - ["raidGraphicsOutlineMode"] = {}, - ["raidGraphicsParticleDensity"] = {}, - ["raidGraphicsProjectedTextures"] = {}, - ["raidGraphicsSSAO"] = {}, - ["raidGraphicsShadowQuality"] = {}, - ["raidGraphicsSunshafts"] = {}, - ["raidGraphicsTextureFiltering"] = {}, - ["raidGraphicsTextureResolution"] = {}, - ["raidGraphicsViewDistance"] = {}, - ["raidOptionDisplayMainTankAndAssist"] = { description = "Whether to display main tank and main assist units in the raid frames" }, - ["raidOptionDisplayPets"] = { description = "Whether to display pets on the raid frames" }, - ["raidOptionIsShown"] = { description = "Whether the Raid Frames are shown" }, - ["raidOptionKeepGroupsTogether"] = { description = "The way to group raid frames" }, - ["raidOptionLocked"] = { description = "Whether the raid frames are locked" }, - ["raidOptionShowBorders"] = { description = "Displays borders around the raid frames." }, - ["raidOptionSortMode"] = { description = "The way to sort raid frames" }, - ["raidOrBattleCount"] = {}, - ["rawMouseAccelerationEnable"] = { description = "Enable acceleration for raw mouse input" }, - ["rawMouseEnable"] = { description = "Enable raw mouse input" }, - ["rawMouseRate"] = { description = "Raw mouse update rate" }, - ["rawMouseResolution"] = { description = "Raw mouse resolution" }, - --["readContest"] = {}, - --["readEULA"] = {}, - --["readScanning"] = {}, - --["readTOS"] = {}, - --["readTerminationWithoutNotice"] = {}, - -- ["realmName"] = {}, - ["reflectionDownscale"] = { description = "Reflection downscale" }, - ["reflectionMode"] = {}, - ["refraction"] = {}, - ["repositionfrequency"] = {}, - -- ["reputationsCollapsed"] = { description = "List of reputation categories that have been collapsed in the Reputation tab" }, - ["rippleDetail"] = {}, - ["sceneOcclusionEnable"] = { description = "Scene software occlusion" }, - ["screenshotFormat"] = {}, - ["screenshotQuality"] = {}, - ["scriptProfile"] = { description = "Whether or not script profiling is enabled" }, - ["scriptWarnings"] = { description = "Whether or not the UI shows Lua warnings" }, - ["secondaryProfessionsFilter"] = { description = "If enabled, secondary profession world quests icons will be shown on world maps" }, - -- ["seenAsiaCharacterUpgradePopup"] = { description = "Seen the free character upgrade popup (Asia)" }, - -- ["seenCharacterUpgradePopup"] = {}, - -- ["serverAlert"] = { description = "Get the glue-string tag for the URL" }, - -- ["serviceTypeFilter"] = { description = "Which trainer services to show" }, - ["shadowCull"] = { description = "enable shadow frustum culling" }, - ["shadowInstancing"] = { description = "enable instancing when rendering shadowmaps" }, - ["shadowMode"] = {}, - ["shadowScissor"] = { description = "enable scissoring when rendering shadowmaps" }, - ["shadowSoft"] = {}, - ["shadowTextureSize"] = {}, - -- ["shipyardMissionTutorialAreaBuff"] = { description = "Stores whether the player has accepted the first area buff mission tutorial" }, - -- ["shipyardMissionTutorialBlockade"] = { description = "Stores whether the player has accepted the first blockade mission tutorial" }, - -- ["shipyardMissionTutorialFirst"] = { description = "Stores whether the player has accepted the first mission tutorial" }, - ["showAllEnemyDebuffs"] = {}, - ["showArtifactXPBar"] = { description = "Show the artifact xp as priority over reputation" }, - ["showBattlefieldMinimap"] = { description = "Whether or not the battlefield minimap is shown" }, - ["showBuilderFeedback"] = { description = "Show animation when building power for builder/spender bar" }, - ["showErrors"] = {}, - ["showKeyring"] = {}, - ["showNPETutorials"] = { description = "display NPE tutorials" }, - ["showNewbieTips"] = {}, - ["showQuestObjectivesOnMap"] = { description = "Shows quest POIs on the main map." }, - ["showQuestTrackingTooltips"] = { description = "Displays quest tracking information in unit and object tooltips" }, - ["showSpectatorTeamCircles"] = { description = "Determines if the team color circles are visible while spectating or commentating a wargame" }, - ["showTamers"] = { description = "If enabled, pet battle icons will be shown on world maps" }, - ["showTimestamps"] = { description = "The format of timestamps in chat or \"none\"" }, - -- ["showTokenFrame"] = { description = "The token UI has been shown" }, - -- ["showTokenFrameHonor"] = { description = "The token UI has shown Honor" }, - -- ["showToolsUI"] = {}, - ["showfootprintparticles"] = { description = "toggles rendering of footprint particles" }, - ["simd"] = { description = "Enable SIMD features (e.g. SSE)" }, - ["skipStartGear"] = { description = "Whether we should show starter gear on character create" }, - ["smoothUnitPhasing"] = { description = "The client will try to smoothly switch between the same on model different phases." }, - ["smoothUnitPhasingActorPurgatoryTimeMs"] = { description = "Time to keep client-actor displays in purgatory before letting go of them, if they were despawned" }, - ["smoothUnitPhasingAliveTimeoutMs"] = { description = "Time to wait for an alive unit to get it's despawn message" }, - ["smoothUnitPhasingDestroyedPurgatoryTimeMs"] = { description = "Time to keep unit displays in purgatory before letting go of them, if they were destroyed" }, - ["smoothUnitPhasingDistThreshold"] = { description = "Distance threshold to active smooth unit phasing." }, - ["smoothUnitPhasingEnableAlive"] = { description = "Use units that have not despawn yet if they match, in hopes the despawn message will come later." }, - ["smoothUnitPhasingUnseenPurgatoryTimeMs"] = { description = "Time to keep unit displays in purgatory before letting go of them, if they were just unseen." }, - ["smoothUnitPhasingVehicleExtraTimeoutMs"] = { description = "Extra time to wait before releasing a vehicle, after it has smooth phased. This allows it's passengers to smooth phase as well." }, - ["spellBookSort"] = {}, - ["spellClutter"] = { description = "Enables/Disables spell clutter" }, - ["spellClutterDefaultTargetScalar"] = { description = "Starting target scalar value (min 0.1)" }, - ["spellClutterHostileScalar"] = { description = "Scalar we apply to the hostile creature spells (min 0.001)" }, - ["spellClutterMinSpellCount"] = { description = "Min spells on a target before we apply clutter logic (min 0)" }, - ["spellClutterPartySizeScalar"] = { description = "Scales the targetScalar by how different the party size is from this (min 1)" }, - ["spellClutterPlayerScalarMultiplier"] = { description = "Increases number of effects on \"interesting\" targets multiplicatively (min 0.1)" }, - ["spellClutterRangeConstant"] = { description = "How many yards before the priority is doubled (min 1.0)" }, - ["splashScreenBoost"] = { description = "Show boost splash screen id " }, - ["splashScreenNormal"] = { description = "Show normal splash screen id" }, - -- ["statCategoriesCollapsed"] = {}, - -- ["statCategoriesCollapsed_2"] = {}, - -- ["statCategoryOrder"] = {}, - -- ["statCategoryOrder_2"] = {}, - ["streamBeams"] = { description = "Use vertex streaming for beams (Gfx Driver Workaround). 0=Auto Detect, 1=Never Stream, 2=Always Stream" }, - ["streamStatusMessage"] = { description = "Whether to display status messages while streaming content" }, - ["streamingCameraLookAheadTime"] = { description = "Look ahead time for streaming." }, - ["streamingCameraMaxRadius"] = { description = "Max radius of the streaming camera." }, - ["streamingCameraRadius"] = { description = "Base radius of the streaming camera." }, - ["sunShafts"] = {}, - ["superTrackerDist"] = {}, - ["synchronizeBindings"] = {}, - ["synchronizeChatFrames"] = {}, - ["synchronizeSettings"] = { description = "Whether client settings should be stored on the server" }, - ["taintLog"] = {}, - -- ["talentFrameShown"] = { description = "The talent UI has been shown" }, - ["talentPointsSpent"] = { description = "The player has spent a talent point" }, - ["targetOfTargetMode"] = { description = "The conditions under which target of target should be shown" }, - ["terrainAlphaBitDepth"] = { description = "Terrain alpha map bit depth" }, - ["terrainHoles"] = { description = "Terrain holes affect occlusion" }, - ["terrainLodDist"] = {}, - ["terrainMipLevel"] = {}, - ["terrainTextureLod"] = {}, - ["test_cameraDynamicPitch"] = { description = "ActionCam" }, - ["test_cameraDynamicPitchBaseFovPad"] = { description = "ActionCam" }, - ["test_cameraDynamicPitchBaseFovPadDownScale"] = { description = "ActionCam" }, - ["test_cameraDynamicPitchBaseFovPadFlying"] = { description = "ActionCam" }, - ["test_cameraDynamicPitchSmartPivotCutoffDist"] = { description = "ActionCam" }, - ["test_cameraHeadMovementDeadZone"] = { description = "ActionCam" }, - ["test_cameraHeadMovementFirstPersonDampRate"] = { description = "ActionCam" }, - ["test_cameraHeadMovementMovingDampRate"] = { description = "ActionCam" }, - ["test_cameraHeadMovementMovingStrength"] = { description = "ActionCam" }, - ["test_cameraHeadMovementRangeScale"] = { description = "ActionCam" }, - ["test_cameraHeadMovementStandingDampRate"] = { description = "ActionCam" }, - ["test_cameraHeadMovementStandingStrength"] = { description = "ActionCam" }, - ["test_cameraHeadMovementStrength"] = { description = "ActionCam" }, - ["test_cameraLockedTargetFocusing"] = { description = "ActionCam" }, - ["test_cameraOverShoulder"] = { description = "ActionCam" }, - ["test_cameraTargetFocusEnemyEnable"] = { description = "ActionCam" }, - ["test_cameraTargetFocusEnemyStrengthPitch"] = { description = "ActionCam" }, - ["test_cameraTargetFocusEnemyStrengthYaw"] = { description = "ActionCam" }, - ["test_cameraTargetFocusInteractEnable"] = { description = "ActionCam" }, - ["test_cameraTargetFocusInteractStrengthPitch"] = { description = "ActionCam" }, - ["test_cameraTargetFocusInteractStrengthYaw"] = { description = "ActionCam" }, - ["textLocale"] = { description = "Set the game locale for text" }, - ["textureFilteringMode"] = {}, - ["threatWarning"] = { description = "Whether or not to show threat warning UI (0 = off, 1 = in dungeons, 2 = in party/raid, 3 = always)" }, - ["threatWorldText"] = { description = "Whether or not to show threat floaters in combat" }, - ["timeMgrAlarmEnabled"] = { description = "Toggles whether or not the time manager's alarm will go off" }, - ["timeMgrAlarmMessage"] = { description = "The time manager's alarm message" }, - ["timeMgrAlarmTime"] = { description = "The time manager's alarm time in minutes" }, - ["timeMgrUseLocalTime"] = { description = "Toggles the use of either the realm time or your system time" }, - ["timeMgrUseMilitaryTime"] = { description = "Toggles the display of either 12 or 24 hour time" }, - ["timingMethod"] = { description = "Desired method for game timing" }, - -- ["timingTestError"] = { description = "Error reported by the timing validation system" }, -- read-only - -- ["toyBoxCollectedFilters"] = { description = "Bitfield for which collected filters are applied in the toybox" }, - -- ["toyBoxSourceFilters"] = { description = "Bitfield for which source filters are applied in the toybox" }, - -- ["trackedAchievements"] = { description = "Internal cvar for saving tracked achievements in order" }, - -- ["trackedQuests"] = { description = "Internal cvar for saving automatically tracked quests in order" }, - -- ["trackedWorldQuests"] = { description = "Internal cvar for saving tracked world quests" }, - -- ["trackerFilter"] = {}, - -- ["trackerSorting"] = {}, - ["transmogCurrentSpecOnly"] = { description = "Stores whether transmogs apply to current spec instead of all specs" }, - -- ["transmogrifyShowCollected"] = { description = "Whether to show collected transmogs in the at the transmogrifier" }, -- read-only - -- ["transmogrifyShowUncollected"] = { description = "Whether to show uncollected transmogs in the at the transmogrifier" }, -- read-only - -- ["transmogrifySourceFilters"] = { description = "Bitfield for which source filters are applied in the wardrobe at the transmogrifier" }, - ["twitterCharactersPerMedia"] = { description = "Number of characters needed when attaching media to a Twitter post" }, - -- ["twitterGetConfigTime"] = { description = "Last time that we got Twitter configuration data successfully" }, - ["twitterShortUrlLength"] = { description = "Number of characters that non-https URLS get shortened to" }, - ["twitterShortUrlLengthHttps"] = { description = "Number of characters that https URLS get shortened to" }, - ["uiScale"] = {}, - ["uiScaleMultiplier"] = { description = "A multiplier for the default UI scale. -1=determine based on system/monitor DPI, 0.5-2.0=multiplier to use when calculating UI scale. Only applied when useUIScale is 0." }, - ["unitHighlights"] = { description = "Whether the highlight circle around units should be displayed" }, - ["useCompactPartyFrames"] = { description = "Use the new raid frames for parties" }, - ["useUiScale"] = {}, - ["videoOptionsVersion"] = {}, - -- ["wardrobeShowCollected"] = { description = "Whether to show collected transmogs in the wardrobe" }, -- read-only - -- ["wardrobeShowUncollected"] = { description = "Whether to show uncollected transmogs in the wardrobe" }, -- read-only - -- ["wardrobeSourceFilters"] = { description = "Bitfield for which source filters are applied in the wardrobe in the collection journal" }, - ["warp"] = { description = "UI value of the graphics setting" }, - ["warpScreenSize"] = { description = "Physical monitor size" }, - ["warpViewDistance"] = { description = "Physical distance from the viewer to the monitor" }, - ["warpViewTilt"] = { description = "Angle of the side monitors IN RADIANS" }, - ["watchFrameBaseAlpha"] = { description = "Objectives frame opacity." }, - -- ["watchFrameState"] = { description = "Stores Objectives frame locked and collapsed states" }, - ["waterDetail"] = {}, - ["weatherDensity"] = {}, - ["webChallengeURLTimeout"] = { description = "How long to wait for the web challenge URL (in seconds). 0 means wait forever." }, - ["whisperMode"] = { description = "The action new whispers take by default: \"popout\", \"inline\", \"popout_and_inline\"" }, - ["windowResizeLock"] = { description = "prevent resizing in windowed mode" }, - ["wmoDoodadDist"] = { description = "Wmo doodad load distance" }, - ["wmoLodDist"] = {}, - ["worldBaseMip"] = {}, - ["worldLoadSort"] = { description = "Sort objects by distance when loading" }, - ["worldMapOpacity"] = { description = "Opacity for the world map when sized down" }, - ["worldMaxMipLevel"] = { description = "World maximum texture mip level" }, - ["worldPoolUsage"] = { description = "Usage static/dynamic/stream" }, - ["worldPreloadHighResTextures"] = { description = "Require high res textures to be loaded in streaming non critical radius when preloading" }, - ["worldPreloadNonCritical"] = { description = "Require objects to be loaded in streaming non critical radius when preloading" }, - ["worldPreloadSort"] = { description = "Sort objects by distance when preloading" }, - ["worldQuestFilterArtifactPower"] = { description = "If enabled, world quests with artifact power rewards will be shown on the map" }, - ["worldQuestFilterEquipment"] = { description = "If enabled, world quests with equipment rewards will be shown on the map" }, - ["worldQuestFilterGold"] = { description = "If enabled, world quests with gold rewards will be shown on the map" }, - ["worldQuestFilterOrderResources"] = { description = "If enabled, world quests with order resource rewards will be shown on the map" }, - ["worldQuestFilterProfessionMaterials"] = { description = "If enabled, world quests with profession material rewards will be shown on the map" }, - ["CastTimingEnhancements"] = { prettyName = nil, description = "Hold chain precasts, and predict anim timed casts", type = "boolean" }, - ["autoAcceptQuickJoinRequests"] = { prettyName = "Auto-accept quick join requests", description = "", type = "boolean" }, - - ["AimingStrafeLeftUsesMoveBackwards"] = { description = "Uses backwards move anim when aiming a ranged weapon and strafing to the left" }, - ["DebugTorsoTwist"] = { description = "Debug visualization for Torso Twist: 1 = Player, 2 = Target, 3 = All" }, - - ["lodObjectFadeScale"] = {}, + ["lodObjectFadeScale"] = {}, } local CategoryNames = { -- not sure how meaningful these really are (/Blizzard_Console/Blizzard_Console_AutoComplete.lua Enum.ConsoleCategory) - [0] = "Debug", - [1] = "Graphics", - [2] = "Console", - [3] = "Combat", - [4] = "Game", - [5] = "Default", - [6] = "Net", - [7] = "Sound", - [8] = "GM", - [9] = "None", + [0] = "Debug", + [1] = "Graphics", + [2] = "Console", + [3] = "Combat", + [4] = "Game", + [5] = "Default", + [6] = "Net", + [7] = "Sound", + [8] = "GM", + [9] = "None", } --[[ @@ -1031,53 +1165,53 @@ local CategoryNames = { -- not sure how meaningful these really are (/Blizzard_C -- Returns filtered list of CVars function addon:GetCVars() - local cvars = {} - for _, info in ipairs(addon:GetAllCommands()) do - if info.commandType == 0 -- cvar, rather than script - and info.category ~= 0 -- ignore debug category - and not strfind(info.command:lower(), 'debug') -- a number of commands with "debug" in their name are inexplicibly not in the "debug" category - and info.category ~= 8 -- ignore GM category - and addon:CVarExists(info.command) -- real cvar? - then - table.insert(cvars, info) - end - end - return cvars + local cvars = {} + for _, info in ipairs(addon:GetAllCommands()) do + if + info.commandType == 0 -- cvar, rather than script + and info.category ~= 0 -- ignore debug category + and not strfind(info.command:lower(), "debug") -- a number of commands with "debug" in their name are inexplicibly not in the "debug" category + and info.category ~= 8 -- ignore GM category + and addon:CVarExists(info.command) -- real cvar? + then + table.insert(cvars, info) + end + end + return cvars end for _, info in pairs(addon:GetCVars()) do - if not addon.hiddenOptions[info.command] then - local optionTable = { - -- prettyName = info.command, -- the api doesn't provide pretty names, so the only way to keep these would be to create a table for them - description = info.help, - } - addon.hiddenOptions[info.command] = optionTable - end + if not addon.hiddenOptions[info.command] then + local optionTable = { + -- prettyName = info.command, -- the api doesn't provide pretty names, so the only way to keep these would be to create a table for them + description = info.help, + } + addon.hiddenOptions[info.command] = optionTable + end end - -- Allow case-insensitive lookup of cvars in our table (relatively slow, so match the case when possible) local NoCase = { - __index = function(t, mk) -- get - if mk and mk.lower then - local mk = mk:lower() - for k,v in pairs(t) do - if k:lower() == mk then - return v - end - end - end - end, - __newindex = function(t, mk, mv) -- set - if mk and mk.lower then - local mk = mk:lower() - for k,v in pairs(t) do - if k:lower() == mk then - t[k] = mv - return - end - end - end - end, + __index = function(t, mk) -- get + if mk and mk.lower then + local mk = mk:lower() + for k, v in pairs(t) do + if k:lower() == mk then + return v + end + end + end + end, + __newindex = function(t, mk, mv) -- set + if mk and mk.lower then + local mk = mk:lower() + for k, v in pairs(t) do + if k:lower() == mk then + t[k] = mv + return + end + end + end + end, } setmetatable(addon.hiddenOptions, NoCase) diff --git a/gui/CVarConfigPanel.lua b/gui/CVarConfigPanel.lua index ae5b44d..ae4e0de 100644 --- a/gui/CVarConfigPanel.lua +++ b/gui/CVarConfigPanel.lua @@ -1,22 +1,20 @@ - local _, addon = ... -- Constants local THIRD_WIDTH = 1.25 - ------------------------------------------------------------------------- ------------------------------------------------------------------------- function addon:CreateCVarOptions() - local cvarOptions = { - type = "group", - childGroups = "tree", - name = "", - args = { - -- Left Empty -- - } - } + local cvarOptions = { + type = "group", + childGroups = "tree", + name = "", + args = { + -- Left Empty -- + }, + } - return cvarOptions + return cvarOptions end diff --git a/gui/ChatConfigPanel.lua b/gui/ChatConfigPanel.lua index 3c7c431..ff165e7 100644 --- a/gui/ChatConfigPanel.lua +++ b/gui/ChatConfigPanel.lua @@ -1,75 +1,73 @@ - local _, addon = ... -- Constants local THIRD_WIDTH = 1.25 - ------------------------------------------------------------------------- ------------------------------------------------------------------------- function addon:CreateChatOptions() - local chatOptions = { - type = "group", - childGroups = "tree", - name = "Chat", - args = { - instructions = { - type = "description", - name = "These options allow you to modify various chat settings that are no longer part of the default UI.", - fontSize = "medium", - order = 1, - }, - header = { - type = "header", - name = "", - order = 10, - }, - ------------------------------------------------- - chatMouseScroll = { - type = "toggle", - name = CHAT_MOUSE_WHEEL_SCROLL, - desc = OPTION_TOOLTIP_CHAT_MOUSE_WHEEL_SCROLL, - get = function() - return C_CVar.GetCVarBool("chatMouseScroll") - end, - set = function(_, value) - self:SetCVar("chatMouseScroll", value) - end, - width="full", - order = 11, - }, - removeChatDelay = { - type = "toggle", - name = REMOVE_CHAT_DELAY_TEXT, - desc = OPTION_TOOLTIP_REMOVE_CHAT_DELAY_TEXT, - get = function() - return C_CVar.GetCVarBool("removeChatDelay") - end, - set = function(_, value) - self:SetCVar("removeChatDelay", value) - end, - width="full", - order = 12, - }, - chatClassColorOverride = { - type = "toggle", - name = "Disable Class Colors", - desc = "Disables Class Colors in Chat", - get = function() - return C_CVar.GetCVarBool("chatClassColorOverride") - end, - set = function(_, value) - self:SetCVar("chatClassColorOverride", value) - end, - hidden = function() - return not self.IsClassicEra() and not self.IsClassic() - end, - width="full", - order = 13, - }, - } - } + local chatOptions = { + type = "group", + childGroups = "tree", + name = "Chat", + args = { + instructions = { + type = "description", + name = "These options allow you to modify various chat settings that are no longer part of the default UI.", + fontSize = "medium", + order = 1, + }, + header = { + type = "header", + name = "", + order = 10, + }, + ------------------------------------------------- + chatMouseScroll = { + type = "toggle", + name = CHAT_MOUSE_WHEEL_SCROLL, + desc = OPTION_TOOLTIP_CHAT_MOUSE_WHEEL_SCROLL, + get = function() + return C_CVar.GetCVarBool("chatMouseScroll") + end, + set = function(_, value) + self:SetCVar("chatMouseScroll", value) + end, + width = "full", + order = 11, + }, + removeChatDelay = { + type = "toggle", + name = REMOVE_CHAT_DELAY_TEXT, + desc = OPTION_TOOLTIP_REMOVE_CHAT_DELAY_TEXT, + get = function() + return C_CVar.GetCVarBool("removeChatDelay") + end, + set = function(_, value) + self:SetCVar("removeChatDelay", value) + end, + width = "full", + order = 12, + }, + chatClassColorOverride = { + type = "toggle", + name = "Disable Class Colors", + desc = "Disables Class Colors in Chat", + get = function() + return C_CVar.GetCVarBool("chatClassColorOverride") + end, + set = function(_, value) + self:SetCVar("chatClassColorOverride", value) + end, + hidden = function() + return not self.IsClassicEra() and not self.IsClassic() + end, + width = "full", + order = 13, + }, + }, + } - return chatOptions + return chatOptions end diff --git a/gui/CombatConfigPanel.lua b/gui/CombatConfigPanel.lua index cb19d91..82977c1 100644 --- a/gui/CombatConfigPanel.lua +++ b/gui/CombatConfigPanel.lua @@ -1,88 +1,86 @@ - local _, addon = ... -- Constants local THIRD_WIDTH = 1.25 - ------------------------------------------------------------------------- ------------------------------------------------------------------------- function addon:CreateCombatOptions() - local combatOptions = { - type = "group", - childGroups = "tree", - name = "Combat", - args = { - instructions = { - type = "description", - name = "These options allow you to modify Combat Options.", - fontSize = "medium", - order = 1, - }, - header = { - type = "header", - name = "", - order = 10, - }, - ------------------------------------------------- - stopAutoAttackOnTargetChange = { - type = "toggle", - name = STOP_AUTO_ATTACK, - desc = OPTION_TOOLTIP_STOP_AUTO_ATTACK, - get = function() - return C_CVar.GetCVarBool("stopAutoAttackOnTargetChange") - end, - set = function(_, value) - self:SetCVar("stopAutoAttackOnTargetChange", value) - end, - width="full", - order = 11, - }, - assistAttack = { - type = "toggle", - name = ASSIST_ATTACK, - desc = OPTION_TOOLTIP_ASSIST_ATTACK, - get = function() - return C_CVar.GetCVarBool("assistAttack") - end, - set = function(_, value) - self:SetCVar("assistAttack", value) - end, - width="full", - order = 12, - }, - ActionButtonUseKeyDown = { - type = "toggle", - name = ACTION_BUTTON_USE_KEY_DOWN, - desc = OPTION_TOOLTIP_ACTION_BUTTON_USE_KEY_DOWN, - get = function() - return C_CVar.GetCVarBool("ActionButtonUseKeyDown") - end, - set = function(_, value) - self:SetCVar("ActionButtonUseKeyDown", value) - end, - width="full", - order = 13, - }, - SpellQueueWindow = { - type = "range", - name = LAG_TOLERANCE, - desc = "Determines how far ahead of the \'end of a spell\' start-recovery spell system can be, before allowing spell request to be sent to the server. Ie this controls the built-in lag for the ability queuing system. Ideally, you\'ll want to set this to your in-game latency.", - min = 0, - max = 400, - step = 1, - get = function() - return tonumber(C_CVar.GetCVar("SpellQueueWindow")) - end, - set = function(_, value) - self:SetCVar("SpellQueueWindow", value) - end, - width = THIRD_WIDTH, - order = 14, - }, - } - } + local combatOptions = { + type = "group", + childGroups = "tree", + name = "Combat", + args = { + instructions = { + type = "description", + name = "These options allow you to modify Combat Options.", + fontSize = "medium", + order = 1, + }, + header = { + type = "header", + name = "", + order = 10, + }, + ------------------------------------------------- + stopAutoAttackOnTargetChange = { + type = "toggle", + name = STOP_AUTO_ATTACK, + desc = OPTION_TOOLTIP_STOP_AUTO_ATTACK, + get = function() + return C_CVar.GetCVarBool("stopAutoAttackOnTargetChange") + end, + set = function(_, value) + self:SetCVar("stopAutoAttackOnTargetChange", value) + end, + width = "full", + order = 11, + }, + assistAttack = { + type = "toggle", + name = ASSIST_ATTACK, + desc = OPTION_TOOLTIP_ASSIST_ATTACK, + get = function() + return C_CVar.GetCVarBool("assistAttack") + end, + set = function(_, value) + self:SetCVar("assistAttack", value) + end, + width = "full", + order = 12, + }, + ActionButtonUseKeyDown = { + type = "toggle", + name = ACTION_BUTTON_USE_KEY_DOWN, + desc = OPTION_TOOLTIP_ACTION_BUTTON_USE_KEY_DOWN, + get = function() + return C_CVar.GetCVarBool("ActionButtonUseKeyDown") + end, + set = function(_, value) + self:SetCVar("ActionButtonUseKeyDown", value) + end, + width = "full", + order = 13, + }, + SpellQueueWindow = { + type = "range", + name = LAG_TOLERANCE, + desc = "Determines how far ahead of the 'end of a spell' start-recovery spell system can be, before allowing spell request to be sent to the server. Ie this controls the built-in lag for the ability queuing system. Ideally, you'll want to set this to your in-game latency.", + min = 0, + max = 400, + step = 1, + get = function() + return tonumber(C_CVar.GetCVar("SpellQueueWindow")) + end, + set = function(_, value) + self:SetCVar("SpellQueueWindow", value) + end, + width = THIRD_WIDTH, + order = 14, + }, + }, + } - return combatOptions + return combatOptions end diff --git a/gui/FloatingCombatTextConfigPanel.lua b/gui/FloatingCombatTextConfigPanel.lua index 975216d..9456228 100644 --- a/gui/FloatingCombatTextConfigPanel.lua +++ b/gui/FloatingCombatTextConfigPanel.lua @@ -1,4 +1,3 @@ - local _, addon = ... -- Constants @@ -10,419 +9,419 @@ local HALF_WIDTH = 1.5 -- UVARINFO was made local in patch 8.2.0 local uvars = { - removeChatDelay = "REMOVE_CHAT_DELAY", - lockActionBars = "LOCK_ACTIONBAR", - buffDurations = "SHOW_BUFF_DURATIONS", - alwaysShowActionBars = "ALWAYS_SHOW_MULTIBARS", - showPartyPets = "SHOW_PARTY_PETS", - showPartyBackground = "SHOW_PARTY_BACKGROUND", - showTargetOfTarget = "SHOW_TARGET_OF_TARGET", - autoQuestWatch = "AUTO_QUEST_WATCH", - lootUnderMouse = "LOOT_UNDER_MOUSE", - autoLootDefault = "AUTO_LOOT_DEFAULT", - enableFloatingCombatText = "SHOW_COMBAT_TEXT", - floatingCombatTextLowManaHealth = "COMBAT_TEXT_SHOW_LOW_HEALTH_MANA", - floatingCombatTextAuras = "COMBAT_TEXT_SHOW_AURAS", - floatingCombatTextAuraFade = "COMBAT_TEXT_SHOW_AURA_FADE", - floatingCombatTextCombatState = "COMBAT_TEXT_SHOW_COMBAT_STATE", - floatingCombatTextDodgeParryMiss = "COMBAT_TEXT_SHOW_DODGE_PARRY_MISS", - floatingCombatTextDamageReduction = "COMBAT_TEXT_SHOW_RESISTANCES", - floatingCombatTextRepChanges = "COMBAT_TEXT_SHOW_REPUTATION", - floatingCombatTextReactives = "COMBAT_TEXT_SHOW_REACTIVES", - floatingCombatTextFriendlyHealers = "COMBAT_TEXT_SHOW_FRIENDLY_NAMES", - floatingCombatTextComboPoints = "COMBAT_TEXT_SHOW_COMBO_POINTS", - floatingCombatTextEnergyGains = "COMBAT_TEXT_SHOW_ENERGIZE", - floatingCombatTextPeriodicEnergyGains = "COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE", - floatingCombatTextFloatMode = "COMBAT_TEXT_FLOAT_MODE", - floatingCombatTextHonorGains = "COMBAT_TEXT_SHOW_HONOR_GAINED", - showCastableBuffs = "SHOW_CASTABLE_BUFFS", - showDispelDebuffs = "SHOW_DISPELLABLE_DEBUFFS", - showArenaEnemyFrames = "SHOW_ARENA_ENEMY_FRAMES", - showArenaEnemyCastbar = "SHOW_ARENA_ENEMY_CASTBAR", - showArenaEnemyPets = "SHOW_ARENA_ENEMY_PETS", + removeChatDelay = "REMOVE_CHAT_DELAY", + lockActionBars = "LOCK_ACTIONBAR", + buffDurations = "SHOW_BUFF_DURATIONS", + alwaysShowActionBars = "ALWAYS_SHOW_MULTIBARS", + showPartyPets = "SHOW_PARTY_PETS", + showPartyBackground = "SHOW_PARTY_BACKGROUND", + showTargetOfTarget = "SHOW_TARGET_OF_TARGET", + autoQuestWatch = "AUTO_QUEST_WATCH", + lootUnderMouse = "LOOT_UNDER_MOUSE", + autoLootDefault = "AUTO_LOOT_DEFAULT", + enableFloatingCombatText = "SHOW_COMBAT_TEXT", + floatingCombatTextLowManaHealth = "COMBAT_TEXT_SHOW_LOW_HEALTH_MANA", + floatingCombatTextAuras = "COMBAT_TEXT_SHOW_AURAS", + floatingCombatTextAuraFade = "COMBAT_TEXT_SHOW_AURA_FADE", + floatingCombatTextCombatState = "COMBAT_TEXT_SHOW_COMBAT_STATE", + floatingCombatTextDodgeParryMiss = "COMBAT_TEXT_SHOW_DODGE_PARRY_MISS", + floatingCombatTextDamageReduction = "COMBAT_TEXT_SHOW_RESISTANCES", + floatingCombatTextRepChanges = "COMBAT_TEXT_SHOW_REPUTATION", + floatingCombatTextReactives = "COMBAT_TEXT_SHOW_REACTIVES", + floatingCombatTextFriendlyHealers = "COMBAT_TEXT_SHOW_FRIENDLY_NAMES", + floatingCombatTextComboPoints = "COMBAT_TEXT_SHOW_COMBO_POINTS", + floatingCombatTextEnergyGains = "COMBAT_TEXT_SHOW_ENERGIZE", + floatingCombatTextPeriodicEnergyGains = "COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE", + floatingCombatTextFloatMode = "COMBAT_TEXT_FLOAT_MODE", + floatingCombatTextHonorGains = "COMBAT_TEXT_SHOW_HONOR_GAINED", + showCastableBuffs = "SHOW_CASTABLE_BUFFS", + showDispelDebuffs = "SHOW_DISPELLABLE_DEBUFFS", + showArenaEnemyFrames = "SHOW_ARENA_ENEMY_FRAMES", + showArenaEnemyCastbar = "SHOW_ARENA_ENEMY_CASTBAR", + showArenaEnemyPets = "SHOW_ARENA_ENEMY_PETS", } local function BlizzardOptionsPanel_UpdateCombatText() - -- Hack to call CombatText_UpdateDisplayedMessages which only exists if the Blizzard_CombatText AddOn is loaded - if CombatText_UpdateDisplayedMessages then - CombatText_UpdateDisplayedMessages() - end + -- Hack to call CombatText_UpdateDisplayedMessages which only exists if the Blizzard_CombatText AddOn is loaded + if CombatText_UpdateDisplayedMessages then + CombatText_UpdateDisplayedMessages() + end end local function FCT_SetValue(cvar, checked) - _G[uvars[cvar]] = checked and "1" or "0" - BlizzardOptionsPanel_UpdateCombatText() + _G[uvars[cvar]] = checked and "1" or "0" + BlizzardOptionsPanel_UpdateCombatText() end ------------------------------------------------------------------------- ------------------------------------------------------------------------- function addon:CreateFloatingCombatTextOptions() - local floatingCombatTextOptions = { - type = "group", - childGroups = "tree", - name = FLOATING_COMBATTEXT_LABEL, - args = { - instructions = { - type = "description", - name = COMBATTEXT_SUBTEXT, - fontSize = "medium", - order = 1, - }, - ------------------------------------------------- - onTargetHeader = { - type = "header", - name = "Floating Combat Text on Target", - order = 10, - }, - floatingCombatTextCombatDamage = { - type = "toggle", - name = SHOW_DAMAGE_TEXT, - desc = OPTION_TOOLTIP_SHOW_DAMAGE, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextCombatDamage") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextCombatDamage", value) - end, - width = HALF_WIDTH, - order = 11, - }, - floatingCombatTextCombatLogPeriodicSpells = { - type = "toggle", - name = LOG_PERIODIC_EFFECTS, - desc = OPTION_TOOLTIP_LOG_PERIODIC_EFFECTS, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextCombatLogPeriodicSpells") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextCombatLogPeriodicSpells", value) - end, - width = HALF_WIDTH, - order = 12, - }, - floatingCombatTextPetMeleeDamage = { - type = "toggle", - name = SHOW_PET_MELEE_DAMAGE, - desc = OPTION_TOOLTIP_SHOW_PET_MELEE_DAMAGE, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextPetMeleeDamage") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextPetMeleeDamage", value) - self:SetCVar("floatingCombatTextPetSpellDamage", value) - end, - width = HALF_WIDTH, - order = 13, - }, - floatingCombatTextCombatDamageDirectionalScale = { - type = "toggle", - name = "Directional Scale", - desc = "Directional damage numbers movement scale (disabled = no directional numbers)", - get = function() - return C_CVar.GetCVarBool("floatingCombatTextCombatDamageDirectionalScale") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextCombatDamageDirectionalScale", value) - end, - width = HALF_WIDTH, - order = 14, - }, - floatingCombatTextCombatHealing = { - type = "toggle", - name = SHOW_COMBAT_HEALING, - desc = OPTION_TOOLTIP_SHOW_COMBAT_HEALING, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextCombatHealing") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextCombatHealing", value) - end, - width = HALF_WIDTH, - order = 15, - }, - floatingCombatTextCombatHealingAbsorbTarget = { - type = "toggle", - name = SHOW_COMBAT_HEALING_ABSORB_TARGET.." ".."(Target)", - desc = OPTION_TOOLTIP_SHOW_COMBAT_HEALING_ABSORB_TARGET, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextCombatHealingAbsorbTarget") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextCombatHealingAbsorbTarget", value) - end, - width = HALF_WIDTH, - order = 16, - }, - floatingCombatTextSpellMechanics = { - type = "toggle", - name = SHOW_TARGET_EFFECTS, - desc = OPTION_TOOLTIP_SHOW_TARGET_EFFECTS, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextSpellMechanics") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextSpellMechanics", value) - end, - width = HALF_WIDTH, - order = 17, - }, - floatingCombatTextSpellMechanicsOther = { - type = "toggle", - name = SHOW_OTHER_TARGET_EFFECTS, - desc = OPTION_TOOLTIP_SHOW_OTHER_TARGET_EFFECTS, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextSpellMechanicsOther") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextSpellMechanicsOther", value) - end, - width = HALF_WIDTH, - order = 18, - }, - WorldTextScale = { - type = "range", - name = "World Text Scale", - desc = "The scale of in-world damage numbers, xp gain, artifact gains, etc", - min = 0.5, - max = 2.5, - step = 0.1, - get = function() - return tonumber(C_CVar.GetCVar("WorldTextScale")) - end, - set = function(_, value) - self:SetCVar("WorldTextScale", value) - end, - width = THIRD_WIDTH, - order = 19, - }, - ------------------------------------------------- - onMeHeader = { - type = "header", - name = "Floating Combat Text on Me", - order = 20, - }, - enableFloatingCombatText = { - type = "toggle", - name = SHOW_COMBAT_TEXT_TEXT, - desc = OPTION_TOOLTIP_SHOW_COMBAT_TEXT, - get = function() - return C_CVar.GetCVarBool("enableFloatingCombatText") - end, - set = function(_, value) - self:SetCVar("enableFloatingCombatText", value) - FCT_SetValue("enableFloatingCombatText", value) - end, - width = HALF_WIDTH, - order = 21, - }, - floatingCombatTextFloatMode = { - type = "select", - name = COMBAT_TEXT_FLOAT_MODE_LABEL, - desc = OPTION_TOOLTIP_COMBAT_TEXT_MODE, - values = { - ["1"] = "Scroll Up", - ["2"] = "Scroll Down", - ["3"] = "Arc", - }, - sorting = { - "1", - "2", - "3", - }, - get = function() - return C_CVar.GetCVar("floatingCombatTextFloatMode") - end, - set = function(_, value) - addon:SetCVar("floatingCombatTextFloatMode", value) - BlizzardOptionsPanel_UpdateCombatText() - end, - width = THIRD_WIDTH, - order = 22, - }, - floatingCombatTextDodgeParryMiss = { - type = "toggle", - name = COMBAT_TEXT_SHOW_DODGE_PARRY_MISS_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_DODGE_PARRY_MISS, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextDodgeParryMiss") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextDodgeParryMiss", value) - FCT_SetValue("floatingCombatTextDodgeParryMiss", value) - end, - width = HALF_WIDTH, - order = 23, - }, - floatingCombatTextDamageReduction = { - type = "toggle", - name = COMBAT_TEXT_SHOW_RESISTANCES_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_RESISTANCES, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextDamageReduction") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextDamageReduction", value) - FCT_SetValue("floatingCombatTextDamageReduction", value) - end, - width = HALF_WIDTH, - order = 24, - }, - floatingCombatTextRepChanges = { - type = "toggle", - name = COMBAT_TEXT_SHOW_REPUTATION_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REPUTATION, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextRepChanges") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextRepChanges", value) - FCT_SetValue("floatingCombatTextRepChanges", value) - end, - width = HALF_WIDTH, - order = 25, - }, - floatingCombatTextReactives = { - type = "toggle", - name = COMBAT_TEXT_SHOW_REACTIVES_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REACTIVES, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextReactives") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextReactives", value) - FCT_SetValue("floatingCombatTextReactives", value) - end, - width = HALF_WIDTH, - order = 26, - }, - floatingCombatTextFriendlyHealers = { - type = "toggle", - name = COMBAT_TEXT_SHOW_FRIENDLY_NAMES_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_FRIENDLY_NAMES, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextFriendlyHealers") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextFriendlyHealers", value) - FCT_SetValue("floatingCombatTextFriendlyHealers", value) - end, - width = HALF_WIDTH, - order = 27, - }, - floatingCombatTextCombatState = { - type = "toggle", - name = COMBAT_TEXT_SHOW_COMBAT_STATE_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBAT_STATE, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextCombatState") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextCombatState", value) - FCT_SetValue("floatingCombatTextCombatState", value) - end, - width = HALF_WIDTH, - order = 28, - }, - floatingCombatTextCombatHealingAbsorbSelf = { - type = "toggle", - name = SHOW_COMBAT_HEALING_ABSORB_SELF.." ".."(Self)", - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBAT_STATE, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextCombatHealingAbsorbSelf") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextCombatHealingAbsorbSelf", value) - end, - width = HALF_WIDTH, - order = 29, - }, - floatingCombatTextLowManaHealth = { - type = "toggle", - name = COMBAT_TEXT_SHOW_LOW_HEALTH_MANA_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_LOW_HEALTH_MANA, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextLowManaHealth") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextLowManaHealth", value) - FCT_SetValue("floatingCombatTextLowManaHealth", value) - end, - width = HALF_WIDTH, - order = 30, - }, - floatingCombatTextEnergyGains = { - type = "toggle", - name = COMBAT_TEXT_SHOW_ENERGIZE_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_ENERGIZE, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextEnergyGains") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextEnergyGains", value) - FCT_SetValue("floatingCombatTextEnergyGains", value) - end, - width = HALF_WIDTH, - order = 31, - }, - floatingCombatTextComboPoints = { - type = "toggle", - name = COMBAT_TEXT_SHOW_COMBO_POINTS_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBO_POINTS, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextComboPoints") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextComboPoints", value) - FCT_SetValue("floatingCombatTextComboPoints", value) - end, - width = HALF_WIDTH, - order = 32, - }, - floatingCombatTextPeriodicEnergyGains = { - type = "toggle", - name = COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextPeriodicEnergyGains") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextPeriodicEnergyGains", value) - FCT_SetValue("floatingCombatTextPeriodicEnergyGains", value) - end, - width = HALF_WIDTH, - order = 33, - }, - floatingCombatTextHonorGains = { - type = "toggle", - name = COMBAT_TEXT_SHOW_HONOR_GAINED_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_HONOR_GAINED, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextHonorGains") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextHonorGains", value) - FCT_SetValue("floatingCombatTextHonorGains", value) - end, - width = HALF_WIDTH, - order = 34, - }, - floatingCombatTextAuras = { - type = "toggle", - name = COMBAT_TEXT_SHOW_AURAS_TEXT, - desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_AURAS, - get = function() - return C_CVar.GetCVarBool("floatingCombatTextAuras") - end, - set = function(_, value) - self:SetCVar("floatingCombatTextAuras", value) - FCT_SetValue("floatingCombatTextAuras", value) - end, - width = HALF_WIDTH, - order = 35, - }, - } - } + local floatingCombatTextOptions = { + type = "group", + childGroups = "tree", + name = FLOATING_COMBATTEXT_LABEL, + args = { + instructions = { + type = "description", + name = COMBATTEXT_SUBTEXT, + fontSize = "medium", + order = 1, + }, + ------------------------------------------------- + onTargetHeader = { + type = "header", + name = "Floating Combat Text on Target", + order = 10, + }, + floatingCombatTextCombatDamage = { + type = "toggle", + name = SHOW_DAMAGE_TEXT, + desc = OPTION_TOOLTIP_SHOW_DAMAGE, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextCombatDamage") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextCombatDamage", value) + end, + width = HALF_WIDTH, + order = 11, + }, + floatingCombatTextCombatLogPeriodicSpells = { + type = "toggle", + name = LOG_PERIODIC_EFFECTS, + desc = OPTION_TOOLTIP_LOG_PERIODIC_EFFECTS, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextCombatLogPeriodicSpells") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextCombatLogPeriodicSpells", value) + end, + width = HALF_WIDTH, + order = 12, + }, + floatingCombatTextPetMeleeDamage = { + type = "toggle", + name = SHOW_PET_MELEE_DAMAGE, + desc = OPTION_TOOLTIP_SHOW_PET_MELEE_DAMAGE, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextPetMeleeDamage") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextPetMeleeDamage", value) + self:SetCVar("floatingCombatTextPetSpellDamage", value) + end, + width = HALF_WIDTH, + order = 13, + }, + floatingCombatTextCombatDamageDirectionalScale = { + type = "toggle", + name = "Directional Scale", + desc = "Directional damage numbers movement scale (disabled = no directional numbers)", + get = function() + return C_CVar.GetCVarBool("floatingCombatTextCombatDamageDirectionalScale") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextCombatDamageDirectionalScale", value) + end, + width = HALF_WIDTH, + order = 14, + }, + floatingCombatTextCombatHealing = { + type = "toggle", + name = SHOW_COMBAT_HEALING, + desc = OPTION_TOOLTIP_SHOW_COMBAT_HEALING, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextCombatHealing") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextCombatHealing", value) + end, + width = HALF_WIDTH, + order = 15, + }, + floatingCombatTextCombatHealingAbsorbTarget = { + type = "toggle", + name = SHOW_COMBAT_HEALING_ABSORB_TARGET .. " " .. "(Target)", + desc = OPTION_TOOLTIP_SHOW_COMBAT_HEALING_ABSORB_TARGET, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextCombatHealingAbsorbTarget") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextCombatHealingAbsorbTarget", value) + end, + width = HALF_WIDTH, + order = 16, + }, + floatingCombatTextSpellMechanics = { + type = "toggle", + name = SHOW_TARGET_EFFECTS, + desc = OPTION_TOOLTIP_SHOW_TARGET_EFFECTS, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextSpellMechanics") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextSpellMechanics", value) + end, + width = HALF_WIDTH, + order = 17, + }, + floatingCombatTextSpellMechanicsOther = { + type = "toggle", + name = SHOW_OTHER_TARGET_EFFECTS, + desc = OPTION_TOOLTIP_SHOW_OTHER_TARGET_EFFECTS, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextSpellMechanicsOther") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextSpellMechanicsOther", value) + end, + width = HALF_WIDTH, + order = 18, + }, + WorldTextScale = { + type = "range", + name = "World Text Scale", + desc = "The scale of in-world damage numbers, xp gain, artifact gains, etc", + min = 0.5, + max = 2.5, + step = 0.1, + get = function() + return tonumber(C_CVar.GetCVar("WorldTextScale")) + end, + set = function(_, value) + self:SetCVar("WorldTextScale", value) + end, + width = THIRD_WIDTH, + order = 19, + }, + ------------------------------------------------- + onMeHeader = { + type = "header", + name = "Floating Combat Text on Me", + order = 20, + }, + enableFloatingCombatText = { + type = "toggle", + name = SHOW_COMBAT_TEXT_TEXT, + desc = OPTION_TOOLTIP_SHOW_COMBAT_TEXT, + get = function() + return C_CVar.GetCVarBool("enableFloatingCombatText") + end, + set = function(_, value) + self:SetCVar("enableFloatingCombatText", value) + FCT_SetValue("enableFloatingCombatText", value) + end, + width = HALF_WIDTH, + order = 21, + }, + floatingCombatTextFloatMode = { + type = "select", + name = COMBAT_TEXT_FLOAT_MODE_LABEL, + desc = OPTION_TOOLTIP_COMBAT_TEXT_MODE, + values = { + ["1"] = "Scroll Up", + ["2"] = "Scroll Down", + ["3"] = "Arc", + }, + sorting = { + "1", + "2", + "3", + }, + get = function() + return C_CVar.GetCVar("floatingCombatTextFloatMode") + end, + set = function(_, value) + addon:SetCVar("floatingCombatTextFloatMode", value) + BlizzardOptionsPanel_UpdateCombatText() + end, + width = THIRD_WIDTH, + order = 22, + }, + floatingCombatTextDodgeParryMiss = { + type = "toggle", + name = COMBAT_TEXT_SHOW_DODGE_PARRY_MISS_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_DODGE_PARRY_MISS, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextDodgeParryMiss") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextDodgeParryMiss", value) + FCT_SetValue("floatingCombatTextDodgeParryMiss", value) + end, + width = HALF_WIDTH, + order = 23, + }, + floatingCombatTextDamageReduction = { + type = "toggle", + name = COMBAT_TEXT_SHOW_RESISTANCES_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_RESISTANCES, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextDamageReduction") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextDamageReduction", value) + FCT_SetValue("floatingCombatTextDamageReduction", value) + end, + width = HALF_WIDTH, + order = 24, + }, + floatingCombatTextRepChanges = { + type = "toggle", + name = COMBAT_TEXT_SHOW_REPUTATION_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REPUTATION, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextRepChanges") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextRepChanges", value) + FCT_SetValue("floatingCombatTextRepChanges", value) + end, + width = HALF_WIDTH, + order = 25, + }, + floatingCombatTextReactives = { + type = "toggle", + name = COMBAT_TEXT_SHOW_REACTIVES_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REACTIVES, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextReactives") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextReactives", value) + FCT_SetValue("floatingCombatTextReactives", value) + end, + width = HALF_WIDTH, + order = 26, + }, + floatingCombatTextFriendlyHealers = { + type = "toggle", + name = COMBAT_TEXT_SHOW_FRIENDLY_NAMES_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_FRIENDLY_NAMES, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextFriendlyHealers") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextFriendlyHealers", value) + FCT_SetValue("floatingCombatTextFriendlyHealers", value) + end, + width = HALF_WIDTH, + order = 27, + }, + floatingCombatTextCombatState = { + type = "toggle", + name = COMBAT_TEXT_SHOW_COMBAT_STATE_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBAT_STATE, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextCombatState") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextCombatState", value) + FCT_SetValue("floatingCombatTextCombatState", value) + end, + width = HALF_WIDTH, + order = 28, + }, + floatingCombatTextCombatHealingAbsorbSelf = { + type = "toggle", + name = SHOW_COMBAT_HEALING_ABSORB_SELF .. " " .. "(Self)", + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBAT_STATE, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextCombatHealingAbsorbSelf") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextCombatHealingAbsorbSelf", value) + end, + width = HALF_WIDTH, + order = 29, + }, + floatingCombatTextLowManaHealth = { + type = "toggle", + name = COMBAT_TEXT_SHOW_LOW_HEALTH_MANA_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_LOW_HEALTH_MANA, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextLowManaHealth") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextLowManaHealth", value) + FCT_SetValue("floatingCombatTextLowManaHealth", value) + end, + width = HALF_WIDTH, + order = 30, + }, + floatingCombatTextEnergyGains = { + type = "toggle", + name = COMBAT_TEXT_SHOW_ENERGIZE_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_ENERGIZE, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextEnergyGains") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextEnergyGains", value) + FCT_SetValue("floatingCombatTextEnergyGains", value) + end, + width = HALF_WIDTH, + order = 31, + }, + floatingCombatTextComboPoints = { + type = "toggle", + name = COMBAT_TEXT_SHOW_COMBO_POINTS_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBO_POINTS, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextComboPoints") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextComboPoints", value) + FCT_SetValue("floatingCombatTextComboPoints", value) + end, + width = HALF_WIDTH, + order = 32, + }, + floatingCombatTextPeriodicEnergyGains = { + type = "toggle", + name = COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_PERIODIC_ENERGIZE, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextPeriodicEnergyGains") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextPeriodicEnergyGains", value) + FCT_SetValue("floatingCombatTextPeriodicEnergyGains", value) + end, + width = HALF_WIDTH, + order = 33, + }, + floatingCombatTextHonorGains = { + type = "toggle", + name = COMBAT_TEXT_SHOW_HONOR_GAINED_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_HONOR_GAINED, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextHonorGains") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextHonorGains", value) + FCT_SetValue("floatingCombatTextHonorGains", value) + end, + width = HALF_WIDTH, + order = 34, + }, + floatingCombatTextAuras = { + type = "toggle", + name = COMBAT_TEXT_SHOW_AURAS_TEXT, + desc = OPTION_TOOLTIP_COMBAT_TEXT_SHOW_AURAS, + get = function() + return C_CVar.GetCVarBool("floatingCombatTextAuras") + end, + set = function(_, value) + self:SetCVar("floatingCombatTextAuras", value) + FCT_SetValue("floatingCombatTextAuras", value) + end, + width = HALF_WIDTH, + order = 35, + }, + }, + } - return floatingCombatTextOptions + return floatingCombatTextOptions end diff --git a/gui/GeneralConfigPanel.lua b/gui/GeneralConfigPanel.lua index b36d257..7106968 100644 --- a/gui/GeneralConfigPanel.lua +++ b/gui/GeneralConfigPanel.lua @@ -1,4 +1,3 @@ - local _, addon = ... -- Constants @@ -6,322 +5,322 @@ local THIRD_WIDTH = 1.25 local maxCameraZoomFactor if addon.IsClassicEra() then - maxCameraZoomFactor = 3.4 + maxCameraZoomFactor = 3.4 else - maxCameraZoomFactor = 2.6 + maxCameraZoomFactor = 2.6 end ------------------------------------------------------------------------- ------------------------------------------------------------------------- function addon:CreateGeneralOptions() - local generalOptions = { - type = "group", - childGroups = "tree", - name = "Advanced Interface Options", - args = { - instructions = { - type = "description", - name = "These options allow you to toggle various options that have been removed from the game in Legion.", - fontSize = "medium", - order = 1, - }, - header = { - type = "header", - name = "", - order = 2, - }, - ------------------------------------------------- - enforceBox = { - type = "toggle", - name = "Enforce Settings on Startup", - desc = "Reapplies all settings when you log in or change characters.\n\nCheck this if your settings aren't being saved between sessions.", - get = function() - return AdvancedInterfaceOptionsSaved.EnforceSettings - end, - set = function(_, value) - AdvancedInterfaceOptionsSaved.EnforceSettings = value - end, - width="full", - order = 3, - }, - ------------------------------------------------- - generalHeader = { - type = "header", - name = "General Options", - order = 10, - }, - UnitNamePlayerPVPTitle = { - type = "toggle", - name = UNIT_NAME_PLAYER_TITLE, - desc = OPTION_TOOLTIP_UNIT_NAME_PLAYER_TITLE, - get = function() - return C_CVar.GetCVarBool("UnitNamePlayerPVPTitle") - end, - set = function(_, value) - self:SetCVar("UnitNamePlayerPVPTitle", value) - end, - width="full", - order = 11, - }, - UnitNamePlayerGuild = { - type = "toggle", - name = UNIT_NAME_GUILD, - desc = OPTION_TOOLTIP_UNIT_NAME_GUILD, - get = function() - return C_CVar.GetCVarBool("UnitNamePlayerGuild") - end, - set = function(_, value) - self:SetCVar("UnitNamePlayerGuild", value) - end, - width="full", - order = 12, - }, - UnitNameGuildTitle = { - type = "toggle", - name = UNIT_NAME_GUILD_TITLE, - desc = OPTION_TOOLTIP_UNIT_NAME_GUILD_TITLE, - get = function() - return C_CVar.GetCVarBool("UnitNameGuildTitle") - end, - set = function(_, value) - self:SetCVar("UnitNameGuildTitle", value) - end, - width="full", - order = 13, - }, - mapFade = { - type = "toggle", - name = MAP_FADE_TEXT, - desc = OPTION_TOOLTIP_MAP_FADE, - get = function() - return C_CVar.GetCVarBool("mapFade") - end, - set = function(_, value) - self:SetCVar("mapFade", value) - end, - hidden = function() - return self.IsClassicEra() or self.IsClassic() - end, - width="full", - order = 14, - }, - secureAbilityToggle = { - type = "toggle", - name = SECURE_ABILITY_TOGGLE, - desc = OPTION_TOOLTIP_SECURE_ABILITY_TOGGLE, - get = function() - return C_CVar.GetCVarBool("secureAbilityToggle") - end, - set = function(_, value) - self:SetCVar("secureAbilityToggle", value) - end, - width="full", - order = 15, - }, - scriptErrors = { - type = "toggle", - name = SHOW_LUA_ERRORS, - desc = OPTION_TOOLTIP_SHOW_LUA_ERRORS, - get = function() - return C_CVar.GetCVarBool("scriptErrors") - end, - set = function(_, value) - self:SetCVar("scriptErrors", value) - end, - width="full", - order = 16, - }, - noBuffDebuffFilterOnTarget = { - type = "toggle", - name = "No Debuff Filter on Target", - desc = "Do not filter buffs or debuffs at all on targets", - get = function() - return C_CVar.GetCVarBool("noBuffDebuffFilterOnTarget") - end, - set = function(_, value) - self:SetCVar("noBuffDebuffFilterOnTarget", value) - end, - width="full", - order = 17, - }, - reverseCleanupBags = { - type = "toggle", - name = REVERSE_CLEAN_UP_BAGS_TEXT, - desc = OPTION_TOOLTIP_REVERSE_CLEAN_UP_BAGS, - get = function() - if C_Container and C_Container.GetSortBagsRightToLeft then - return C_Container.GetSortBagsRightToLeft() - elseif GetInsertItemsRightToLeft then - return GetInsertItemsRightToLeft() - end - end, - set = function(_, value) - -- This is a dirty hack for SetSortBagsRightToLeft not instantly updating the bags - -- Force a refresh of the UI after a set amount of time to make the checkbox reflect the new value - C_Timer.After(.5, function() - LibStub("AceConfigRegistry-3.0"):NotifyChange("AdvancedInterfaceOptions") - end) + local generalOptions = { + type = "group", + childGroups = "tree", + name = "Advanced Interface Options", + args = { + instructions = { + type = "description", + name = "These options allow you to toggle various options that have been removed from the game in Legion.", + fontSize = "medium", + order = 1, + }, + header = { + type = "header", + name = "", + order = 2, + }, + ------------------------------------------------- + enforceBox = { + type = "toggle", + name = "Enforce Settings on Startup", + desc = "Reapplies all settings when you log in or change characters.\n\nCheck this if your settings aren't being saved between sessions.", + get = function() + return AdvancedInterfaceOptionsSaved.EnforceSettings + end, + set = function(_, value) + AdvancedInterfaceOptionsSaved.EnforceSettings = value + end, + width = "full", + order = 3, + }, + ------------------------------------------------- + generalHeader = { + type = "header", + name = "General Options", + order = 10, + }, + UnitNamePlayerPVPTitle = { + type = "toggle", + name = UNIT_NAME_PLAYER_TITLE, + desc = OPTION_TOOLTIP_UNIT_NAME_PLAYER_TITLE, + get = function() + return C_CVar.GetCVarBool("UnitNamePlayerPVPTitle") + end, + set = function(_, value) + self:SetCVar("UnitNamePlayerPVPTitle", value) + end, + width = "full", + order = 11, + }, + UnitNamePlayerGuild = { + type = "toggle", + name = UNIT_NAME_GUILD, + desc = OPTION_TOOLTIP_UNIT_NAME_GUILD, + get = function() + return C_CVar.GetCVarBool("UnitNamePlayerGuild") + end, + set = function(_, value) + self:SetCVar("UnitNamePlayerGuild", value) + end, + width = "full", + order = 12, + }, + UnitNameGuildTitle = { + type = "toggle", + name = UNIT_NAME_GUILD_TITLE, + desc = OPTION_TOOLTIP_UNIT_NAME_GUILD_TITLE, + get = function() + return C_CVar.GetCVarBool("UnitNameGuildTitle") + end, + set = function(_, value) + self:SetCVar("UnitNameGuildTitle", value) + end, + width = "full", + order = 13, + }, + mapFade = { + type = "toggle", + name = MAP_FADE_TEXT, + desc = OPTION_TOOLTIP_MAP_FADE, + get = function() + return C_CVar.GetCVarBool("mapFade") + end, + set = function(_, value) + self:SetCVar("mapFade", value) + end, + hidden = function() + return self.IsClassicEra() or self.IsClassic() + end, + width = "full", + order = 14, + }, + secureAbilityToggle = { + type = "toggle", + name = SECURE_ABILITY_TOGGLE, + desc = OPTION_TOOLTIP_SECURE_ABILITY_TOGGLE, + get = function() + return C_CVar.GetCVarBool("secureAbilityToggle") + end, + set = function(_, value) + self:SetCVar("secureAbilityToggle", value) + end, + width = "full", + order = 15, + }, + scriptErrors = { + type = "toggle", + name = SHOW_LUA_ERRORS, + desc = OPTION_TOOLTIP_SHOW_LUA_ERRORS, + get = function() + return C_CVar.GetCVarBool("scriptErrors") + end, + set = function(_, value) + self:SetCVar("scriptErrors", value) + end, + width = "full", + order = 16, + }, + noBuffDebuffFilterOnTarget = { + type = "toggle", + name = "No Debuff Filter on Target", + desc = "Do not filter buffs or debuffs at all on targets", + get = function() + return C_CVar.GetCVarBool("noBuffDebuffFilterOnTarget") + end, + set = function(_, value) + self:SetCVar("noBuffDebuffFilterOnTarget", value) + end, + width = "full", + order = 17, + }, + reverseCleanupBags = { + type = "toggle", + name = REVERSE_CLEAN_UP_BAGS_TEXT, + desc = OPTION_TOOLTIP_REVERSE_CLEAN_UP_BAGS, + get = function() + if C_Container and C_Container.GetSortBagsRightToLeft then + return C_Container.GetSortBagsRightToLeft() + elseif GetInsertItemsRightToLeft then + return GetInsertItemsRightToLeft() + end + end, + set = function(_, value) + -- This is a dirty hack for SetSortBagsRightToLeft not instantly updating the bags + -- Force a refresh of the UI after a set amount of time to make the checkbox reflect the new value + C_Timer.After(0.5, function() + LibStub("AceConfigRegistry-3.0"):NotifyChange("AdvancedInterfaceOptions") + end) - if C_Container and C_Container.SetSortBagsRightToLeft then - C_Container.SetSortBagsRightToLeft(value) - elseif SetSortBagsRightToLeft then - SetSortBagsRightToLeft(value) - end - end, - hidden = function() - return self.IsClassicEra() or self.IsClassic() - end, - width="full", - order = 18, - }, - lootLeftmostBag = { - type = "toggle", - name = REVERSE_NEW_LOOT_TEXT, - desc = OPTION_TOOLTIP_REVERSE_NEW_LOOT, - get = function() - if C_Container and C_Container.GetInsertItemsLeftToRight then - return C_Container.GetInsertItemsLeftToRight() - elseif GetInsertItemsLeftToRight then - GetInsertItemsLeftToRight() - end - end, - set = function(_, value) - -- This is a dirty hack for SetInsertItemsLeftToRight not instantly updating the bags - -- Force a refresh of the UI after a set amount of time to make the checkbox reflect the new value - C_Timer.After(.5, function() - LibStub("AceConfigRegistry-3.0"):NotifyChange("AdvancedInterfaceOptions") - end) + if C_Container and C_Container.SetSortBagsRightToLeft then + C_Container.SetSortBagsRightToLeft(value) + elseif SetSortBagsRightToLeft then + SetSortBagsRightToLeft(value) + end + end, + hidden = function() + return self.IsClassicEra() or self.IsClassic() + end, + width = "full", + order = 18, + }, + lootLeftmostBag = { + type = "toggle", + name = REVERSE_NEW_LOOT_TEXT, + desc = OPTION_TOOLTIP_REVERSE_NEW_LOOT, + get = function() + if C_Container and C_Container.GetInsertItemsLeftToRight then + return C_Container.GetInsertItemsLeftToRight() + elseif GetInsertItemsLeftToRight then + GetInsertItemsLeftToRight() + end + end, + set = function(_, value) + -- This is a dirty hack for SetInsertItemsLeftToRight not instantly updating the bags + -- Force a refresh of the UI after a set amount of time to make the checkbox reflect the new value + C_Timer.After(0.5, function() + LibStub("AceConfigRegistry-3.0"):NotifyChange("AdvancedInterfaceOptions") + end) - if C_Container and C_Container.SetInsertItemsLeftToRight then - return C_Container.SetInsertItemsLeftToRight(value) - elseif SetInsertItemsLeftToRight then - SetInsertItemsLeftToRight(value) - end - end, - hidden = function() - return self.IsClassicEra() or self.IsClassic() - end, - width="full", - order = 19, - }, - enableWoWMouse = { - type = "toggle", - name = WOW_MOUSE, - desc = OPTION_TOOLTIP_WOW_MOUSE, - get = function() - return C_CVar.GetCVarBool("enableWoWMouse") - end, - set = function(_, value) - self:SetCVar("enableWoWMouse", value) - end, - width="full", - order = 20, - }, - ------------------------------------------------- - cameraHeader = { - type = "header", - name = "", - order = 30, - }, - trackQuestSorting = { - type = "select", - name = "Select quest sorting mode:", - desc = "Select how quests are sorted in the quest log.", - values = { - ["top"] = "Top", - ["proximity"] = "Proximity", - }, - sorting = { - "top", - "proximity", - }, - get = function() - return C_CVar.GetCVar("trackQuestSorting") - end, - set = function(_, value) - self:SetCVar("trackQuestSorting", value) - end, - width = THIRD_WIDTH, - order = 31, - }, - actionCam = { - type = "select", - name = "Select Action Cam mode:", - desc = "Select the mode for the Action Cam.", - values = { - ["default"] = "Default", - ["on"] = "On", - ["basic"] = "Basic", - ["full"] = "Full", - }, - sorting = { - "default", - "on", - "basic", - "full", - }, - get = function() - return self.getActionCamMode() - end, - set = function(_, value) - ConsoleExec("actioncam".." "..value) - end, - width = THIRD_WIDTH, - order = 32, - }, - --TODO: This might need more work for classic - cameraDistanceMaxZoomFactor = { - type = "range", - name = MAX_FOLLOW_DIST, - desc = OPTION_TOOLTIP_MAX_FOLLOW_DIST, - min = 1, - max = maxCameraZoomFactor, - step = 0.1, - get = function() - return tonumber(C_CVar.GetCVar("cameraDistanceMaxZoomFactor")) - end, - set = function(_, value) - self:SetCVar("cameraDistanceMaxZoomFactor", value) - end, - width = THIRD_WIDTH, - order = 33, - }, - ------------------------------------------------- - dataHeader = { - type = "header", - name = "", - order = 40, - }, - backupSettings = { - type = 'execute', - name = "Backup Settings", - func = function() - StaticPopup_Show("AIO_BACKUP_SETTINGS") - end, - width = THIRD_WIDTH, - order = 41, - }, - restoreSettings = { - type = 'execute', - name = "Restore Settings", - func = function() - StaticPopup_Show("AIO_RESTORE_SETTINGS") - end, - width = THIRD_WIDTH, - order = 43, - }, - resetSettings = { - type = 'execute', - name = "Reset Settings", - func = function() - StaticPopup_Show("AIO_RESET_EVERYTHING") - end, - width = THIRD_WIDTH, - order = 43, - }, - } - } + if C_Container and C_Container.SetInsertItemsLeftToRight then + return C_Container.SetInsertItemsLeftToRight(value) + elseif SetInsertItemsLeftToRight then + SetInsertItemsLeftToRight(value) + end + end, + hidden = function() + return self.IsClassicEra() or self.IsClassic() + end, + width = "full", + order = 19, + }, + enableWoWMouse = { + type = "toggle", + name = WOW_MOUSE, + desc = OPTION_TOOLTIP_WOW_MOUSE, + get = function() + return C_CVar.GetCVarBool("enableWoWMouse") + end, + set = function(_, value) + self:SetCVar("enableWoWMouse", value) + end, + width = "full", + order = 20, + }, + ------------------------------------------------- + cameraHeader = { + type = "header", + name = "", + order = 30, + }, + trackQuestSorting = { + type = "select", + name = "Select quest sorting mode:", + desc = "Select how quests are sorted in the quest log.", + values = { + ["top"] = "Top", + ["proximity"] = "Proximity", + }, + sorting = { + "top", + "proximity", + }, + get = function() + return C_CVar.GetCVar("trackQuestSorting") + end, + set = function(_, value) + self:SetCVar("trackQuestSorting", value) + end, + width = THIRD_WIDTH, + order = 31, + }, + actionCam = { + type = "select", + name = "Select Action Cam mode:", + desc = "Select the mode for the Action Cam.", + values = { + ["default"] = "Default", + ["on"] = "On", + ["basic"] = "Basic", + ["full"] = "Full", + }, + sorting = { + "default", + "on", + "basic", + "full", + }, + get = function() + return self.getActionCamMode() + end, + set = function(_, value) + ConsoleExec("actioncam" .. " " .. value) + end, + width = THIRD_WIDTH, + order = 32, + }, + --TODO: This might need more work for classic + cameraDistanceMaxZoomFactor = { + type = "range", + name = MAX_FOLLOW_DIST, + desc = OPTION_TOOLTIP_MAX_FOLLOW_DIST, + min = 1, + max = maxCameraZoomFactor, + step = 0.1, + get = function() + return tonumber(C_CVar.GetCVar("cameraDistanceMaxZoomFactor")) + end, + set = function(_, value) + self:SetCVar("cameraDistanceMaxZoomFactor", value) + end, + width = THIRD_WIDTH, + order = 33, + }, + ------------------------------------------------- + dataHeader = { + type = "header", + name = "", + order = 40, + }, + backupSettings = { + type = "execute", + name = "Backup Settings", + func = function() + StaticPopup_Show("AIO_BACKUP_SETTINGS") + end, + width = THIRD_WIDTH, + order = 41, + }, + restoreSettings = { + type = "execute", + name = "Restore Settings", + func = function() + StaticPopup_Show("AIO_RESTORE_SETTINGS") + end, + width = THIRD_WIDTH, + order = 43, + }, + resetSettings = { + type = "execute", + name = "Reset Settings", + func = function() + StaticPopup_Show("AIO_RESET_EVERYTHING") + end, + width = THIRD_WIDTH, + order = 43, + }, + }, + } - return generalOptions + return generalOptions end diff --git a/gui/NameplateConfigPanel.lua b/gui/NameplateConfigPanel.lua index 4a412b9..7bdf904 100644 --- a/gui/NameplateConfigPanel.lua +++ b/gui/NameplateConfigPanel.lua @@ -1,59 +1,57 @@ - local _, addon = ... -- Constants local THIRD_WIDTH = 1.25 - ------------------------------------------------------------------------- ------------------------------------------------------------------------- function addon:CreateNameplateOptions() - local nameplateOptions = { - type = "group", - childGroups = "tree", - name = "Nameplates", - args = { - instructions = { - type = "description", - name = "These options allow you to modify Nameplate Options.", - fontSize = "medium", - order = 1, - }, - header = { - type = "header", - name = "", - order = 10, - }, - ------------------------------------------------- - nameplateOtherAtBase = { - type = "toggle", - name = "Nameplate at Base", - desc = "Position other nameplates at the base, rather than overhead. 2=under unit, 0=over unit", - get = function() - return C_CVar.GetCVarBool("nameplateOtherAtBase") - end, - set = function(_, value) - self:SetCVar("nameplateOtherAtBase", value) - end, - width="full", - order = 11, - }, - ShowClassColorInFriendlyNameplate = { - type = "toggle", - name = "Class color friendly nameplates", - desc = "Class color for friendly nameplates", - get = function() - return C_CVar.GetCVarBool("ShowClassColorInFriendlyNameplate") - end, - set = function(_, value) - self:SetCVar("ShowClassColorInFriendlyNameplate", value) - end, - width="full", - order = 12, - }, - } - } + local nameplateOptions = { + type = "group", + childGroups = "tree", + name = "Nameplates", + args = { + instructions = { + type = "description", + name = "These options allow you to modify Nameplate Options.", + fontSize = "medium", + order = 1, + }, + header = { + type = "header", + name = "", + order = 10, + }, + ------------------------------------------------- + nameplateOtherAtBase = { + type = "toggle", + name = "Nameplate at Base", + desc = "Position other nameplates at the base, rather than overhead. 2=under unit, 0=over unit", + get = function() + return C_CVar.GetCVarBool("nameplateOtherAtBase") + end, + set = function(_, value) + self:SetCVar("nameplateOtherAtBase", value) + end, + width = "full", + order = 11, + }, + ShowClassColorInFriendlyNameplate = { + type = "toggle", + name = "Class color friendly nameplates", + desc = "Class color for friendly nameplates", + get = function() + return C_CVar.GetCVarBool("ShowClassColorInFriendlyNameplate") + end, + set = function(_, value) + self:SetCVar("ShowClassColorInFriendlyNameplate", value) + end, + width = "full", + order = 12, + }, + }, + } - return nameplateOptions + return nameplateOptions end diff --git a/gui/StatusTextConfigPanel.lua b/gui/StatusTextConfigPanel.lua index 5d9cb6b..f2241e9 100644 --- a/gui/StatusTextConfigPanel.lua +++ b/gui/StatusTextConfigPanel.lua @@ -1,62 +1,59 @@ - local _, addon = ... -- Constants local THIRD_WIDTH = 1.25 - ------------------------------------------------------------------------- ------------------------------------------------------------------------- local function setStatusTextBars(frame, value) - frame.healthbar.cvar = value - frame.manabar.cvar = value - if not addon.IsClassicEra() and not addon.IsClassic() then - frame.healthbar:UpdateTextString() - frame.manabar:UpdateTextString() - else - TextStatusBar_UpdateTextString(frame.healthbar) - TextStatusBar_UpdateTextString(frame.manabar) - end + frame.healthbar.cvar = value + frame.manabar.cvar = value + if not addon.IsClassicEra() and not addon.IsClassic() then + frame.healthbar:UpdateTextString() + frame.manabar:UpdateTextString() + else + TextStatusBar_UpdateTextString(frame.healthbar) + TextStatusBar_UpdateTextString(frame.manabar) + end end local statusTextVals = { - playerStatusText = function(value) - setStatusTextBars(PlayerFrame, value) - end, - petStatusText = function(value) - setStatusTextBars(PetFrame, value) - end, - --TODO: This appears to be deprecated - partyStatusText = function(value) - for i = 1, MAX_PARTY_MEMBERS do - setStatusTextBars(_G["PartyMemberFrame"..i], value) - end - end, - targetStatusText = function(value) - setStatusTextBars(TargetFrame, value) - end, - alternateResourceText = function(value) - PlayerFrameAlternateManaBar.cvar = value - if not addon.IsClassicEra() and not addon.IsClassic() then - PlayerFrameAlternateManaBar:UpdateTextString() - else - TextStatusBar_UpdateTextString(PlayerFrameAlternateManaBar) - end - end, - xpBarText = function(value) - MainMenuExpBar.cvar = value - if not addon.IsClassicEra() and not addon.IsClassic() then - MainMenuExpBar:UpdateTextString() - else - TextStatusBar_UpdateTextString(MainMenuExpBar) - end - end, + playerStatusText = function(value) + setStatusTextBars(PlayerFrame, value) + end, + petStatusText = function(value) + setStatusTextBars(PetFrame, value) + end, + --TODO: This appears to be deprecated + partyStatusText = function(value) + for i = 1, MAX_PARTY_MEMBERS do + setStatusTextBars(_G["PartyMemberFrame" .. i], value) + end + end, + targetStatusText = function(value) + setStatusTextBars(TargetFrame, value) + end, + alternateResourceText = function(value) + PlayerFrameAlternateManaBar.cvar = value + if not addon.IsClassicEra() and not addon.IsClassic() then + PlayerFrameAlternateManaBar:UpdateTextString() + else + TextStatusBar_UpdateTextString(PlayerFrameAlternateManaBar) + end + end, + xpBarText = function(value) + MainMenuExpBar.cvar = value + if not addon.IsClassicEra() and not addon.IsClassic() then + MainMenuExpBar:UpdateTextString() + else + TextStatusBar_UpdateTextString(MainMenuExpBar) + end + end, } - local function setStatusText(cvar, value) - addon.setCustomVar(cvar, value) - statusTextVals[cvar](value and "statusText") + addon.setCustomVar(cvar, value) + statusTextVals[cvar](value and "statusText") end --[[ @@ -89,146 +86,146 @@ end]] ------------------------------------------------------------------------- function addon:CreateStatusTextOptions() - local statusTextOptions = { - type = "group", - childGroups = "tree", - name = STATUSTEXT_LABEL, - args = { - instructions = { - type = "description", - name = STATUSTEXT_SUBTEXT, - fontSize = "medium", - order = 1, - }, - header = { - type = "header", - name = "", - order = 10, - }, - ------------------------------------------------- - statusText = { - type = "toggle", - name = STATUS_TEXT, - desc = "Whether the status bars show numeric health/mana values", - get = function() - return self.getCustomVar("statusText") - end, - set = function(_, value) - self.setCustomVar("statusText", value) - end, - width="full", - order = 11, - }, - playerStatusText = { - type = "toggle", - name = STATUS_TEXT_PLAYER, - desc = OPTION_TOOLTIP_STATUS_TEXT_PLAYER, - get = function() - return self.getCustomVar("playerStatusText") - end, - set = function(_, value) - setStatusText("playerStatusText", value) - end, - disabled = function() - return not self.getCustomVar("statusText") - end, - width="full", - order = 12, - }, - petStatusText = { - type = "toggle", - name = STATUS_TEXT_PET, - desc = OPTION_TOOLTIP_STATUS_TEXT_PET, - get = function() - return self.getCustomVar("petStatusText") - end, - set = function(_, value) - setStatusText("petStatusText", value) - end, - disabled = function() - return not self.getCustomVar("statusText") - end, - width="full", - order = 13, - }, - partyStatusText = { - type = "toggle", - name = STATUS_TEXT_PARTY, - desc = OPTION_TOOLTIP_STATUS_TEXT_PARTY, - get = function() - return self.getCustomVar("partyStatusText") - end, - set = function(_, value) - setStatusText("partyStatusText", value) - end, - disabled = function() - return not self.getCustomVar("statusText") - end, - hidden = function() - -- Frames only exists on Classic and Classic_Era - return not PartyMemberFrame1 - end, - width="full", - order = 14, - }, - targetStatusText = { - type = "toggle", - name = STATUS_TEXT_TARGET, - desc = OPTION_TOOLTIP_STATUS_TEXT_TARGET, - get = function() - return self.getCustomVar("targetStatusText") - end, - set = function(_, value) - setStatusText("targetStatusText", value) - end, - disabled = function() - return not self.getCustomVar("statusText") - end, - width="full", - order = 15, - }, - alternateResourceText = { - type = "toggle", - name = ALTERNATE_RESOURCE_TEXT, - desc = OPTION_TOOLTIP_ALTERNATE_RESOURCE, - get = function() - return self.getCustomVar("alternateResourceText") - end, - set = function(_, value) - setStatusText("alternateResourceText", value) - end, - disabled = function() - return not self.getCustomVar("statusText") - end, - hidden = function() - -- Frame only exists on Classic and Classic_Era - return not PlayerFrameAlternateManaBar - end, - width="full", - order = 16, - }, - xpBarText = { - type = "toggle", - name = XP_BAR_TEXT, - desc = OPTION_TOOLTIP_XP_BAR, - get = function() - return self.getCustomVar("xpBarText") - end, - set = function(_, value) - setStatusText("xpBarText", value) - end, - disabled = function() - return not self.getCustomVar("statusText") - end, - hidden = function() - -- Frame only exists on Classic and Classic_Era - return not MainMenuExpBar - end, - width="full", - order = 17, - }, - } - } + local statusTextOptions = { + type = "group", + childGroups = "tree", + name = STATUSTEXT_LABEL, + args = { + instructions = { + type = "description", + name = STATUSTEXT_SUBTEXT, + fontSize = "medium", + order = 1, + }, + header = { + type = "header", + name = "", + order = 10, + }, + ------------------------------------------------- + statusText = { + type = "toggle", + name = STATUS_TEXT, + desc = "Whether the status bars show numeric health/mana values", + get = function() + return self.getCustomVar("statusText") + end, + set = function(_, value) + self.setCustomVar("statusText", value) + end, + width = "full", + order = 11, + }, + playerStatusText = { + type = "toggle", + name = STATUS_TEXT_PLAYER, + desc = OPTION_TOOLTIP_STATUS_TEXT_PLAYER, + get = function() + return self.getCustomVar("playerStatusText") + end, + set = function(_, value) + setStatusText("playerStatusText", value) + end, + disabled = function() + return not self.getCustomVar("statusText") + end, + width = "full", + order = 12, + }, + petStatusText = { + type = "toggle", + name = STATUS_TEXT_PET, + desc = OPTION_TOOLTIP_STATUS_TEXT_PET, + get = function() + return self.getCustomVar("petStatusText") + end, + set = function(_, value) + setStatusText("petStatusText", value) + end, + disabled = function() + return not self.getCustomVar("statusText") + end, + width = "full", + order = 13, + }, + partyStatusText = { + type = "toggle", + name = STATUS_TEXT_PARTY, + desc = OPTION_TOOLTIP_STATUS_TEXT_PARTY, + get = function() + return self.getCustomVar("partyStatusText") + end, + set = function(_, value) + setStatusText("partyStatusText", value) + end, + disabled = function() + return not self.getCustomVar("statusText") + end, + hidden = function() + -- Frames only exists on Classic and Classic_Era + return not PartyMemberFrame1 + end, + width = "full", + order = 14, + }, + targetStatusText = { + type = "toggle", + name = STATUS_TEXT_TARGET, + desc = OPTION_TOOLTIP_STATUS_TEXT_TARGET, + get = function() + return self.getCustomVar("targetStatusText") + end, + set = function(_, value) + setStatusText("targetStatusText", value) + end, + disabled = function() + return not self.getCustomVar("statusText") + end, + width = "full", + order = 15, + }, + alternateResourceText = { + type = "toggle", + name = ALTERNATE_RESOURCE_TEXT, + desc = OPTION_TOOLTIP_ALTERNATE_RESOURCE, + get = function() + return self.getCustomVar("alternateResourceText") + end, + set = function(_, value) + setStatusText("alternateResourceText", value) + end, + disabled = function() + return not self.getCustomVar("statusText") + end, + hidden = function() + -- Frame only exists on Classic and Classic_Era + return not PlayerFrameAlternateManaBar + end, + width = "full", + order = 16, + }, + xpBarText = { + type = "toggle", + name = XP_BAR_TEXT, + desc = OPTION_TOOLTIP_XP_BAR, + get = function() + return self.getCustomVar("xpBarText") + end, + set = function(_, value) + setStatusText("xpBarText", value) + end, + disabled = function() + return not self.getCustomVar("statusText") + end, + hidden = function() + -- Frame only exists on Classic and Classic_Era + return not MainMenuExpBar + end, + width = "full", + order = 17, + }, + }, + } - return statusTextOptions + return statusTextOptions end diff --git a/semlib/eve.lua b/semlib/eve.lua index 1717b8d..821fa50 100644 --- a/semlib/eve.lua +++ b/semlib/eve.lua @@ -11,57 +11,57 @@ -- our functions if we require an identifier -- setmetatable({}, {__index = function(self, event) self[event] = {} return self[event] end}) -local F, Events, A, T = CreateFrame('frame'), {}, ... +local F, Events, A, T = CreateFrame("frame"), {}, ... local function Raise(_, event, ...) - if Events[event] then - for module in pairs(Events[event]) do - module[event](module, ...) - end - end + if Events[event] then + for module in pairs(Events[event]) do + module[event](module, ...) + end + end end local function RegisterEvent(module, event, func) - --if type(func) == 'function' then -- and not module[event] - if func then - rawset(module, event, func) - end - if not Events[event] then - Events[event] = {} - end - Events[event][module] = true - if strmatch(event, '^[%u_]+$') then - F:RegisterEvent(event) - end - return module + --if type(func) == 'function' then -- and not module[event] + if func then + rawset(module, event, func) + end + if not Events[event] then + Events[event] = {} + end + Events[event][module] = true + if strmatch(event, "^[%u_]+$") then + F:RegisterEvent(event) + end + return module end local function UnregisterEvent(module, event) - if Events[event] then - Events[event][module] = nil - if not next(Events[event]) and strmatch(event, '^[%u_]+$') then -- don't unregister unless the event table is empty - F:UnregisterEvent(event) - end - end - return module + if Events[event] then + Events[event][module] = nil + if not next(Events[event]) and strmatch(event, "^[%u_]+$") then -- don't unregister unless the event table is empty + F:UnregisterEvent(event) + end + end + return module end local Module = { - __newindex = RegisterEvent, -- function E:ADDON_LOADED() end - __call = Raise, -- E('CallBack', ...) -- Fire a callback across ALL modules - __index = { - RegisterEvent = RegisterEvent, -- E:RegisterEvent('ADDON_LOADED', func) - UnregisterEvent = UnregisterEvent, -- E:UnregisterEvent('ADDON_LOADED') - Raise = Raise, -- E:Raise('CallBack', ...) - }, + __newindex = RegisterEvent, -- function E:ADDON_LOADED() end + __call = Raise, -- E('CallBack', ...) -- Fire a callback across ALL modules + __index = { + RegisterEvent = RegisterEvent, -- E:RegisterEvent('ADDON_LOADED', func) + UnregisterEvent = UnregisterEvent, -- E:UnregisterEvent('ADDON_LOADED') + Raise = Raise, -- E:Raise('CallBack', ...) + }, } T.Eve = setmetatable({}, { - __call = function(eve) - local module = setmetatable({}, Module) - eve[ #eve + 1 ] = module - return module - end, + __call = function(eve) + local module = setmetatable({}, Module) + eve[#eve + 1] = module + return module + end, }) -F:SetScript('OnEvent', Raise) \ No newline at end of file +F:SetScript("OnEvent", Raise) diff --git a/semlib/semlib.xml b/semlib/semlib.xml index 5a8bd5e..da9afc0 100644 --- a/semlib/semlib.xml +++ b/semlib/semlib.xml @@ -1,5 +1,5 @@ -