You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

379 lines
13 KiB

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