local Details = _G.Details local Loc = LibStub("AceLocale-3.0"):GetLocale ( "Details" ) local _ local addonName, Details222 = ... local C_Timer = C_Timer local UnitName = UnitName --On Details! Load load default keys into the main object function Details222.LoadSavedVariables.DefaultProfile() for key, value in pairs(Details.default_profile) do if (type(value) == "table") then Details[key] = Details.CopyTable(value) else Details[key] = value end end end function Details222.LoadSavedVariables.CharacterData() local defaultCharacterData = Details.default_player_data local currentCharacterData = _detalhes_database --check if the player data exists, if not, load from default if (not currentCharacterData) then --NOT EXISTS currentCharacterData = Details.CopyTable(defaultCharacterData) --[[GLOBAL]] _detalhes_database = currentCharacterData end --verify if there's new data added to 'default_player_data' and copy it to the savedvariable table --do this up to a deepness level of 2, example: currentCharacterData[key][subKey] = any for key, value in pairs(defaultCharacterData) do if (currentCharacterData[key] == nil) then --the key doesn't exists, add it if (type(value) == "table") then currentCharacterData[key] = Details.CopyTable(defaultCharacterData[key]) else currentCharacterData[key] = value end elseif (type(currentCharacterData[key]) == "table") then for subKey, subValue in pairs(defaultCharacterData[key]) do if (currentCharacterData[key][subKey] == nil) then if (type(subValue) == "table") then currentCharacterData[key][subKey] = Details.CopyTable(defaultCharacterData[key][subKey]) else currentCharacterData[key][subKey] = subValue end end end end --copy the key from saved table to Details object if (type(value) == "table") then Details[key] = Details.CopyTable(currentCharacterData[key]) else Details[key] = currentCharacterData[key] end end end --check if this is a first run, reset, or just load the saved data. function Details222.LoadSavedVariables.SharedData() local defaultAccountData = Details.default_global_data local currentAccountData = _detalhes_global if (not currentAccountData) then currentAccountData = Details.CopyTable(defaultAccountData) --[[GLOBAL]] _detalhes_global = currentAccountData end for key, value in pairs(defaultAccountData) do if (currentAccountData[key] == nil) then if (type(value) == "table") then currentAccountData[key] = Details.CopyTable(defaultAccountData[key]) else currentAccountData[key] = value end elseif (type(currentAccountData[key]) == "table") then if (key == "always_use_profile_name") then currentAccountData["always_use_profile_name"] = "" end if (type(currentAccountData[key]) == "table") then for subKey, subValue in pairs(defaultAccountData[key]) do if (currentAccountData[key][subKey] == nil) then if (type(subValue) == "table") then currentAccountData[key][subKey] = Details.CopyTable(defaultAccountData[key][subKey]) else currentAccountData[key][subKey] = subValue end end end end end --copy the key from savedvariables to Details object if (type(value) == "table") then Details[key] = Details.CopyTable(currentAccountData[key]) else Details[key] = currentAccountData[key] end end end --load previous saved combat data function Details222.LoadSavedVariables.CombatSegments() --this is the table where the character data is saved as well the combat data local currentCharacterData = _G["_detalhes_database"] --no need to check if it exists, it's already checked if (currentCharacterData == nil) then currentCharacterData = {} end --custom displays - if there's no saved custom display, they will be filled from the StartMeUp() when a new version is installed if (_detalhes_global.custom) then Details.custom = _detalhes_global.custom Details.refresh:r_atributo_custom() end local bShouldClearAndExit = not currentCharacterData.tabela_historico --check integrity of the sub table 'tabelas' and its first index 'current segment' if (not bShouldClearAndExit) then if (not currentCharacterData.tabela_historico.tabelas or not currentCharacterData.tabela_historico.tabelas[1]) then bShouldClearAndExit = true end end --check if is a major version upgrade (usualy API or low level changes) if (not bShouldClearAndExit) then bShouldClearAndExit = currentCharacterData.last_realversion and currentCharacterData.last_realversion < Details.realversion end --if can just clear all data and exit if (bShouldClearAndExit) then Details.tabela_historico = Details.historico:CreateNewSegmentDatabase() Details.tabela_overall = Details.combate:NovaTabela() Details.tabela_vigente = Details.combate:NovaTabela(_, Details.tabela_overall) Details222.PetContainer.Reset() if (currentCharacterData.saved_pet_cache) then Details:Destroy(currentCharacterData.saved_pet_cache) --saved pet data currentCharacterData.saved_pet_cache = nil end if (currentCharacterData.tabela_overall) then --saved overall data Details:Destroy(currentCharacterData.tabela_overall) currentCharacterData.tabela_overall = nil end if (currentCharacterData.tabela_historico) then Details:Destroy(currentCharacterData.tabela_historico) currentCharacterData.tabela_historico = nil end return else --pet owners cache saved on logout do Details222.PetContainer.Reset() if (currentCharacterData.saved_pet_cache) then --pet ownership table only exists if the player logoff inside a raid or dungeon Details222.PetContainer.SetPetData(currentCharacterData.saved_pet_cache) Details:Destroy(currentCharacterData.saved_pet_cache) currentCharacterData.saved_pet_cache = nil end end --restore saved overall data do if (currentCharacterData.tabela_overall) then Details.tabela_overall = Details.CopyTable(currentCharacterData.tabela_overall) Details:RestoreOverallMetatables() else Details.tabela_overall = Details.combate:NovaTabela() Details.tabela_overall.overall_refreshed = true end end --restore saved segments do Details.tabela_historico = Details.CopyTable(currentCharacterData.tabela_historico) Details:Destroy(currentCharacterData.tabela_historico) currentCharacterData.tabela_historico = nil end --get the first segment saved and use it as current segment Details.tabela_vigente = Details.tabela_historico.tabelas[1] --only low level access to this table allowed --need refresh for all containers for _, actorContainer in ipairs(Details.tabela_overall) do actorContainer.need_refresh = true end for _, actorContainer in ipairs(Details.tabela_vigente) do actorContainer.need_refresh = true end Details:RestoreMetatables() end end ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --On Details! Load: --load the saved config on the addon function Details:LoadConfig() --plugins data Details.plugin_database = _detalhes_database.plugin_database or {} --startup --set the nicktag cache host Details:NickTagSetCache (_detalhes_database.nick_tag_cache) --count data Details:CountDataOnLoad() --solo e raid plugin if (_detalhes_database.SoloTablesSaved) then if (_detalhes_database.SoloTablesSaved.Mode) then Details.SoloTables.Mode = _detalhes_database.SoloTablesSaved.Mode Details.SoloTables.LastSelected = _detalhes_database.SoloTablesSaved.LastSelected else Details.SoloTables.Mode = 1 end end --switch tables Details.switch.slots = _detalhes_global.switchSaved.slots Details.switch.table = _detalhes_global.switchSaved.table if (Details.switch.table) then for i = 1, #Details.switch.table do if (not Details.switch.table [i]) then Details.switch.table [i] = {} end end end --last boss Details.last_encounter = _detalhes_database.last_encounter --buffs Details.savedbuffs = _detalhes_database.savedbuffs Details.Buffs:BuildTables() --initialize parser Details.capture_current = {} for captureType, captureValue in pairs(Details.capture_real) do Details.capture_current [captureType] = captureValue end --row animations Details:SetUseAnimations() --initialize spell cache Details:ClearSpellCache() --version first run if (not _detalhes_database.last_version or _detalhes_database.last_version ~= Details.userversion) then Details.is_version_first_run = true end --profile local unitname = UnitName ("player") --fix for old versions if (type(Details.always_use_profile) == "string") then Details.always_use_profile = false Details.always_use_profile_name = "" end if (type(Details.always_use_profile_name) ~= "string") then Details.always_use_profile = false Details.always_use_profile_name = "" end --check for "always use this profile" if (Details.always_use_profile and not Details.always_use_profile_exception [unitname]) then local profile_name = Details.always_use_profile_name if (profile_name and profile_name ~= "" and Details:GetProfile (profile_name)) then _detalhes_database.active_profile = profile_name end end --character first run if (_detalhes_database.active_profile == "") then Details.character_first_run = true --� a primeira vez que este character usa profiles, precisa copiar as keys existentes local current_profile_name = Details:GetCurrentProfileName() Details:GetProfile (current_profile_name, true) Details:SaveProfileSpecial() end --load profile and active instances local current_profile_name = Details:GetCurrentProfileName() --check if exists, if not, create one local profile = Details:GetProfile (current_profile_name, true) --instances Details.tabela_instancias = _detalhes_database.tabela_instancias or {} --fix for version 1.21.0 if (#Details.tabela_instancias > 0) then --only happens once after the character logon for index, saved_skin in ipairs(profile.instances) do local instance = Details.tabela_instancias [index] if (instance) then saved_skin.__was_opened = instance.ativa saved_skin.__pos = Details.CopyTable(instance.posicao) saved_skin.__locked = instance.isLocked saved_skin.__snap = Details.CopyTable(instance.snap) saved_skin.__snapH = instance.horizontalSnap saved_skin.__snapV = instance.verticalSnap for key, value in pairs(instance) do if (Details.instance_defaults [key] ~= nil) then if (type(value) == "table") then saved_skin [key] = Details.CopyTable(value) else saved_skin [key] = value end end end end end for index, instance in Details:ListInstances() do Details.local_instances_config [index] = { pos = Details.CopyTable(instance.posicao), is_open = instance.ativa, attribute = instance.atributo, sub_attribute = instance.sub_atributo, mode = instance.modo or 2, modo = instance.modo or 2, segment = instance.segmento, snap = Details.CopyTable(instance.snap), horizontalSnap = instance.horizontalSnap, verticalSnap = instance.verticalSnap, sub_atributo_last = instance.sub_atributo_last, isLocked = instance.isLocked } if (Details.local_instances_config [index].isLocked == nil) then Details.local_instances_config [index].isLocked = false end end Details.tabela_instancias = {} end --apply the profile Details:ApplyProfile(current_profile_name, true) end --On Details! Load count logons, tutorials, etc function Details:CountDataOnLoad() --basic if (not _detalhes_global.got_first_run) then Details.is_first_run = true end --tutorial self.tutorial = self.tutorial or {} self.tutorial.logons = self.tutorial.logons or 0 self.tutorial.logons = self.tutorial.logons + 1 self.tutorial.unlock_button = self.tutorial.unlock_button or 0 self.tutorial.version_announce = self.tutorial.version_announce or 0 self.tutorial.main_help_button = self.tutorial.main_help_button or 0 self.tutorial.alert_frames = self.tutorial.alert_frames or {false, false, false, false, false, false} self.tutorial.main_help_button = self.tutorial.main_help_button + 1 self.character_data = self.character_data or {logons = 0} self.character_data.logons = self.character_data.logons + 1 end