-- Global variables TitanSettings = nil; TitanPlayerSettings = nil; TitanPluginSettings = nil; TitanPanelSettings = nil; TitanOldSettings = nil; TITAN_LAST_UPDATED = "April 27th, 2006" TITAN_VERSION = "2.18.11000"; TITAN_FIRST_LOAD = nil; -- Constants TITAN_NIL = "Titan Nil"; function TitanVariables_InitTitanSettings() if (not TitanSettings) then TitanSettings = {}; end -- Backup Settings from old version that doesn't support settings per char if ( not TitanSettings.Version ) then TitanVariables_BackupOldSettings(); end -- Settings migration from version to version if ( TitanVariables_CompareVersion(TitanSettings.Version, "1.22.1300") < 0 ) then TitanVariables_MigrateTo_1_22_1300(); end TitanOldSettings = TitanSettings.OldSettings; TitanSettings.Version = TITAN_VERSION; TITAN_PANEL_SELECTED = "Main"; end function TitanVariables_InitDetailedSettings() if (not TitanPlayerSettings) then TitanVariables_InitPlayerSettings(); if (TitanPlayerSettings) then -- Migrate old settings if (TITAN_FIRST_LOAD) then TitanVariables_MigrateOldSettings(); end -- Syncronize Plugins/Panel settings TitanVariables_SyncPluginSettings(); TitanVariables_SyncPanelSettings(); end end end function TitanVariables_InitPlayerSettings() -- Titan should not be nil if (not TitanSettings) then return; end -- Init TitanSettings.Players if (not TitanSettings.Players ) then TitanSettings.Players = {}; end local playerName = UnitName("player"); local serverName = GetCVar("realmName"); -- Do nothing if player name is not available if (playerName == nil or playerName == UNKNOWNOBJECT or playerName == UKNOWNBEING) then return; end if (TitanSettings.Players[playerName] and not TitanSettings[playerName .. "@" .. serverName]) then TitanSettings.Players[playerName.."@"..serverName] = TitanSettings.Players[playerName]; TitanSettings.Players[playerName]=nil; end -- Init TitanPlayerSettings if (not TitanSettings.Players[playerName.."@"..serverName]) then TitanSettings.Players[playerName.."@"..serverName] = {}; TitanSettings.Players[playerName.."@"..serverName].Plugins = {}; TitanSettings.Players[playerName.."@"..serverName].Panel = {}; TITAN_FIRST_LOAD = 1; end -- Set global variables TitanPlayerSettings = TitanSettings.Players[playerName.."@"..serverName]; TitanPluginSettings = TitanPlayerSettings["Plugins"]; TitanPanelSettings = TitanPlayerSettings["Panel"]; end function TitanVariables_SyncPluginSettings() -- Init each and every plugin for id, plugin in TitanPlugins do if (plugin and plugin.savedVariables) then -- Init savedVariables table if (not TitanPluginSettings[id]) then TitanPluginSettings[id] = {}; end -- Synchronize registered and saved variables TitanVariables_SyncRegisterSavedVariables(plugin.savedVariables, TitanPluginSettings[id]); else -- Remove plugin savedVariables table if there's one if (TitanPluginSettings[id]) then TitanPluginSettings[id] = nil; end end end end function TitanVariables_SyncPanelSettings() -- Synchronize registered and saved variables TitanVariables_SyncRegisterSavedVariables(TITAN_PANEL_SAVED_VARIABLES, TitanPanelSettings); end function TitanVariables_SyncRegisterSavedVariables(registeredVariables, savedVariables) if (registeredVariables and savedVariables) then -- Init registeredVariables for index, value in registeredVariables do if (not TitanUtils_TableContainsIndex(savedVariables, index)) then savedVariables[index] = value; end end -- Remove out-of-date savedVariables for index, value in savedVariables do if (not TitanUtils_TableContainsIndex(registeredVariables, index)) then savedVariables[index] = nil; end end end end function TitanGetVar(id, var) if (id and var and TitanPluginSettings and TitanPluginSettings[id]) then return TitanUtils_Ternary(TitanPluginSettings[id][var] == TITAN_NIL, nil, TitanPluginSettings[id][var]); end end function TitanSetVar(id, var, value) if (id and var and TitanPluginSettings and TitanPluginSettings[id]) then TitanPluginSettings[id][var] = TitanUtils_Ternary(value, value, TITAN_NIL); end end function TitanGetVarTable(id, var, position) if (id and var and TitanPluginSettings and TitanPluginSettings[id]) then return TitanUtils_Ternary(TitanPluginSettings[id][var][position] == TITAN_NIL, nil, TitanPluginSettings[id][var][position]); end end function TitanSetVarTable(id, var, position, value) if (id and var and TitanPluginSettings and TitanPluginSettings[id]) then TitanPluginSettings[id][var][position] = TitanUtils_Ternary(value, value, TITAN_NIL); end end function TitanToggleVar(id, var) if (id and var and TitanPluginSettings and TitanPluginSettings[id]) then TitanSetVar(id, var, TitanUtils_Toggle(TitanGetVar(id, var))); end end function TitanPanelGetVar(var) if (var and TitanPanelSettings) then return TitanUtils_Ternary(TitanPanelSettings[var] == TITAN_NIL, nil, TitanPanelSettings[var]); end end function TitanPanelSetVar(var, value) if (var and TitanPanelSettings) then TitanPanelSettings[var] = TitanUtils_Ternary(value, value, TITAN_NIL); end end function TitanPanelToggleVar(var) if (var and TitanPanelSettings) then TitanPanelSetVar(var, TitanUtils_Toggle(TitanPanelGetVar(var))); end end function TitanVariables_BackupOldSettings() if (TitanSettings.Players) then -- New OldSettings and copy over the existing settings TitanSettings.OldSettings = {}; TitanSettings.OldSettings.Players = TitanSettings.Players; TitanSettings.OldSettings.Panel = TitanSettings.Panel; -- Clear the existing settings TitanSettings.Players = nil; TitanSettings.Panel = nil; TitanSettings.Volume = nil; TitanSettings.UIScale = nil; TitanSettings.Tooltip = nil; end end function TitanVariables_MigrateOldSettings() local playerName = UnitName("player"); if (TITAN_FIRST_LOAD and TitanOldSettings) then -- Old player settings migration if (TitanOldSettings.Players[playerName]) then TitanPluginSettings.Clock = TitanOldSettings.Players[playerName].Clock; end -- Old panel settings migration if (TitanOldSettings.Panel) then -- Transparency TitanPanelSettings.Transparency = TitanOldSettings.Panel.Transparency; -- AutoHide TitanPanelSettings.AutoHide = TitanMigrate(TitanOldSettings.Panel.AutoHide); -- Buttons TitanPanelSettings.Buttons = TitanVariables_AppendNonMovableButtons(TitanOldSettings.Panel.Buttons); -- Bag if (TitanPluginSettings.Bag and TitanOldSettings.Panel.Bag) then TitanPluginSettings.Bag.CountAmmoPouchSlots = TitanMigrate(TitanOldSettings.Panel.Bag.CountAmmoPouchSlots); TitanPluginSettings.Bag.ShowUsedSlots = TitanMigrate(TitanOldSettings.Panel.Bag.ShowUsedSlots); end -- Coords if (TitanPluginSettings.Coords and TitanOldSettings.Panel.Location) then TitanPluginSettings.Coords.ShowColoredText = TitanMigrate(TitanOldSettings.Panel.Location.ShowColoredText); TitanPluginSettings.Coords.ShowCoordsOnMap = TitanMigrate(TitanOldSettings.Panel.Location.ShowCoordsOnMap); TitanPluginSettings.Coords.ShowZoneText = TitanMigrate(TitanOldSettings.Panel.Location.ShowZoneText); end -- FPS if (TitanPluginSettings.FPS and TitanOldSettings.Panel.FPS) then TitanPluginSettings.FPS.ShowColoredText = TitanMigrate(TitanOldSettings.Panel.FPS.ShowColoredText); end -- Latency if (TitanPluginSettings.Latency and TitanOldSettings.Panel.Latency) then TitanPluginSettings.Latency.ShowColoredText = TitanMigrate(TitanOldSettings.Panel.Latency.ShowColoredText); end -- XP if (TitanPluginSettings.XP and TitanOldSettings.Panel.XP) then TitanPluginSettings.XP.ShowXPPerHourSession = TitanMigrate(TitanOldSettings.Panel.XP.ShowXPPerHourSession); end end end end function TitanMigrate(value) return TitanUtils_Ternary(value, value, TITAN_NIL); end function TitanVariables_MigrateTo_1_22_1300() if ( TitanSettings and TitanSettings.Players and type(TitanSettings.Players) == "table" ) then for index, value in TitanSettings.Players do if ( value and value.Panel and value.Panel.Buttons ) then value.Panel.Buttons = TitanVariables_AppendNonMovableButtons(value.Panel.Buttons); end end end end function TitanVariables_AppendNonMovableButtons(buttons) if ( buttons and type(buttons) == "table" ) then for index, id in TITAN_PANEL_NONMOVABLE_PLUGINS do if ( not TitanUtils_TableContainsValue(buttons, id) ) then table.insert(buttons, id); end end end return buttons; end function TitanVariables_CompareVersion(version1, version2) local mainVer1, subVer1, uiVer1, betaVer1 = TitanVariables_ParseVersion(version1); local mainVer2, subVer2, uiVer2, betaVer2 = TitanVariables_ParseVersion(version2); if ( mainVer1 == mainVer2 ) then if ( subVer1 == subVer2 ) then if ( uiVer1 == uiVer2 ) then return (betaVer1 - betaVer2); else return (uiVer1 - uiVer2); end else return (subVer1 - subVer2); end else return (mainVer1 - mainVer2); end end function TitanVariables_ParseVersion(version) if ( version ) then local verInfo = {}; for w in string.gfind(version, "%w+") do table.insert(verInfo, w); end local mainVer, subVer, uiVer, betaVer; mainVer = tonumber(verInfo[1]); subVer = tonumber(verInfo[2]); uiVer = tonumber(verInfo[3]); if ( not verInfo[4] ) then betaVer = 100; else betaVer = tonumber(string.sub(verInfo[4], 5, -1)); end return mainVer, subVer, uiVer, betaVer; else return 0, 0, 0, 0; end end function TitanVariables_UseSettings() TitanCopyPlayerSettings = TitanSettings.Players[this.value]; TitanCopyPluginSettings = TitanCopyPlayerSettings["Plugins"]; TitanCopyPanelSettings = TitanCopyPlayerSettings["Panel"]; for index, id in TitanPanelSettings["Buttons"] do local currentButton = TitanUtils_GetButton(TitanPanelSettings["Buttons"][index]); currentButton:Hide(); end for index, id in TitanCopyPanelSettings do TitanPanelSetVar(index, TitanCopyPanelSettings[index]); end for index, id in TitanCopyPluginSettings do for var, id in TitanCopyPluginSettings[index] do TitanSetVar(index, var, TitanCopyPluginSettings[index][var]) end end TitanPanel_InitPanelBarButton(); TitanPanel_InitPanelButtons(); if (TitanPanelGetVar("AutoHide")) then TitanPanelBarButton_Hide("TitanPanelBarButton", TitanPanelGetVar("Position")); end if (TitanPanelGetVar("AuxAutoHide")) then TitanPanelBarButton_Hide("TitanPanelAuxBarButton", TITAN_PANEL_PLACE_BOTTOM); end TitanPanelRightClickMenu_Close(); end