chore: hoist plugins to root and move main into Details/
Each Details_* plugin and the main Details addon now lives in its own repo-root folder, matching the Exiles fork-layout convention.
This commit is contained in:
@@ -0,0 +1,379 @@
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user