Added support to Profiles, now you can share the same config between two or more characters
Added support for BattleTag friends over report window. Added pet threat to Tiny Threat plugin when out of a party or raid group. Fixed a issue with close button where it disappear without close the window when toolbar is in bottom side. Also fixed a issue where swapping toolbar positioning was sometimes making close button disappear. Fixed a problem opening options panel through minimap when there is no window opened.
This commit is contained in:
@@ -0,0 +1,644 @@
|
||||
--File Revision: 1
|
||||
--Last Modification: 07/04/2014
|
||||
-- Change Log:
|
||||
-- 07/04/2014: File Created.
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
local _detalhes = _G._detalhes
|
||||
local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" )
|
||||
local _
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> Profiles:
|
||||
--> return the current profile name
|
||||
|
||||
function _detalhes:GetCurrentProfileName()
|
||||
|
||||
--> check is have a profile name
|
||||
if (_detalhes_database.active_profile == "") then
|
||||
local character_key = UnitName ("player") .. "-" .. GetRealmName()
|
||||
_detalhes_database.active_profile = character_key
|
||||
end
|
||||
|
||||
--> end
|
||||
return _detalhes_database.active_profile
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> Profiles:
|
||||
--> create a new profile
|
||||
|
||||
function _detalhes:CreateProfile (name)
|
||||
|
||||
if (not name or type (name) ~= "string" or name == "") then
|
||||
return false
|
||||
end
|
||||
|
||||
--> check if already exists
|
||||
if (_detalhes_global.__profiles [name]) then
|
||||
return false
|
||||
end
|
||||
|
||||
--> copy the default table
|
||||
local new_profile = table_deepcopy (_detalhes.default_profile)
|
||||
new_profile.instances = {}
|
||||
|
||||
--> add to global container
|
||||
_detalhes_global.__profiles [name] = new_profile
|
||||
|
||||
--> end
|
||||
return new_profile
|
||||
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> Profiles:
|
||||
--> return the list os all profiles
|
||||
|
||||
function _detalhes:GetProfileList()
|
||||
|
||||
--> build the table
|
||||
local t = {}
|
||||
for name, profile in pairs (_detalhes_global.__profiles) do
|
||||
t [#t + 1] = name
|
||||
end
|
||||
|
||||
--> end
|
||||
return t
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> Profiles:
|
||||
--> delete a profile
|
||||
|
||||
function _detalhes:EraseProfile (profile_name)
|
||||
|
||||
--> erase profile table
|
||||
_detalhes_global.__profiles [profile_name] = nil
|
||||
|
||||
if (_detalhes_database.active_profile == profile_name) then
|
||||
|
||||
local character_key = UnitName ("player") .. "-" .. GetRealmName()
|
||||
|
||||
local my_profile = _detalhes:GetProfile (character_key)
|
||||
|
||||
if (my_profile) then
|
||||
_detalhes:ApplyProfile (character_key, true)
|
||||
else
|
||||
local profile = _detalhes:CreateProfile (character_key)
|
||||
_detalhes:ApplyProfile (character_key, true)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--> end
|
||||
return true
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> Profiles:
|
||||
--> return the profile table requested
|
||||
|
||||
function _detalhes:GetProfile (name, create)
|
||||
|
||||
--> get the profile, create and return
|
||||
local profile = _detalhes_global.__profiles [name]
|
||||
|
||||
if (not profile and not create) then
|
||||
return false
|
||||
|
||||
elseif (not profile and create) then
|
||||
profile = _detalhes:CreateProfile (name)
|
||||
|
||||
end
|
||||
|
||||
--> end
|
||||
return profile
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> Profiles:
|
||||
--> reset the profile
|
||||
function _detalhes:ResetProfile (profile_name)
|
||||
|
||||
--> get the profile
|
||||
local profile = _detalhes:GetProfile (profile_name, true)
|
||||
|
||||
if (not profile) then
|
||||
return false
|
||||
end
|
||||
|
||||
--> reset
|
||||
|
||||
local instances = profile.instances
|
||||
for index, instance in ipairs (instances) do
|
||||
for key, value in pairs (_detalhes.instance_defaults) do
|
||||
if (type (value) == "table") then
|
||||
instance [key] = table_deepcopy (value)
|
||||
else
|
||||
instance [key] = value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local profile = table_deepcopy (_detalhes.default_profile)
|
||||
profile.instances = instances
|
||||
|
||||
_detalhes:ApplyProfile (profile_name, true)
|
||||
|
||||
--> end
|
||||
return true
|
||||
end
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> Profiles:
|
||||
--> return the profile table requested
|
||||
|
||||
function _detalhes:ApplyProfile (profile_name, nosave, is_copy)
|
||||
|
||||
--> get the profile
|
||||
local profile = _detalhes:GetProfile (profile_name, true)
|
||||
|
||||
--> if the profile doesn't exist, just quit
|
||||
if (not profile) then
|
||||
_detalhes:Msg ("Profile Not Found.")
|
||||
return false
|
||||
end
|
||||
|
||||
--> always save the previous profile, except if nosave flag is up
|
||||
if (not nosave) then
|
||||
--> salva o profile ativo no momento
|
||||
_detalhes:SaveProfile()
|
||||
end
|
||||
|
||||
--> update profile keys before go
|
||||
for key, value in pairs (_detalhes.default_profile) do
|
||||
if (profile [key] == nil) then
|
||||
if (type (value) == "table") then
|
||||
profile [key] = table_deepcopy (_detalhes.default_profile [key])
|
||||
else
|
||||
profile [key] = value
|
||||
end
|
||||
|
||||
elseif (type (value) == "table") then
|
||||
for key2, value2 in pairs (value) do
|
||||
if (profile [key] [key2] == nil) then
|
||||
if (type (value2) == "table") then
|
||||
profile [key] [key2] = table_deepcopy (_detalhes.default_profile [key] [key2])
|
||||
else
|
||||
profile [key] [key2] = value2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
--> apply the profile values
|
||||
for key, _ in pairs (_detalhes.default_profile) do
|
||||
local value = profile [key]
|
||||
|
||||
if (type (value) == "table") then
|
||||
local ctable = table_deepcopy (value)
|
||||
_detalhes [key] = ctable
|
||||
else
|
||||
_detalhes [key] = value
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--> apply the skin
|
||||
|
||||
local saved_skins = profile.instances
|
||||
|
||||
--> we need to create instances if the profile have more saved skins then the current amount of instances
|
||||
if (#_detalhes.tabela_instancias < #saved_skins) then
|
||||
for i = #_detalhes.tabela_instancias+1, #saved_skins do
|
||||
|
||||
--> esse inicio precisa ser em silêncio
|
||||
|
||||
local new_instance = _detalhes:CreateInstance (true)
|
||||
if (not new_instance) then
|
||||
break
|
||||
end
|
||||
|
||||
new_instance:ShutDown()
|
||||
end
|
||||
end
|
||||
|
||||
for index, instance in ipairs (_detalhes.tabela_instancias) do
|
||||
|
||||
local this_skin = saved_skins [index]
|
||||
|
||||
if (this_skin) then
|
||||
if (not instance.iniciada and not _detalhes.initializing) then
|
||||
instance:RestauraJanela()
|
||||
instance:ApplySavedSkin (this_skin)
|
||||
instance:DesativarInstancia()
|
||||
elseif (instance.iniciada) then
|
||||
instance:ApplySavedSkin (this_skin)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--> end
|
||||
|
||||
if (not is_copy) then
|
||||
_detalhes.active_profile = profile_name
|
||||
_detalhes_database.active_profile = profile_name
|
||||
--_detalhes:SaveProfile()
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> Profiles:
|
||||
--> return the profile table requested
|
||||
|
||||
function _detalhes:SaveProfile (saveas)
|
||||
|
||||
--> get the current profile
|
||||
|
||||
local profile_name
|
||||
|
||||
if (saveas) then
|
||||
profile_name = saveas
|
||||
else
|
||||
profile_name = _detalhes:GetCurrentProfileName()
|
||||
end
|
||||
|
||||
local profile = _detalhes:GetProfile (profile_name, true)
|
||||
|
||||
--> save default keys
|
||||
|
||||
for key, _ in pairs (_detalhes.default_profile) do
|
||||
|
||||
local current_value = _detalhes [key]
|
||||
|
||||
if (type (current_value) == "table") then
|
||||
local ctable = table_deepcopy (current_value)
|
||||
profile [key] = ctable
|
||||
else
|
||||
profile [key] = current_value
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--> save skins
|
||||
table.wipe (profile.instances)
|
||||
|
||||
for index, instance in ipairs (_detalhes.tabela_instancias) do
|
||||
local exported = instance:ExportSkin()
|
||||
profile.instances [index] = exported
|
||||
end
|
||||
|
||||
--> end
|
||||
return profile
|
||||
end
|
||||
|
||||
local default_profile = {
|
||||
|
||||
--> class icons and colors
|
||||
class_icons_small = [[Interface\AddOns\Details\images\classes_small]],
|
||||
class_coords = {
|
||||
["HUNTER"] = {
|
||||
0, -- [1]
|
||||
0.25, -- [2]
|
||||
0.25, -- [3]
|
||||
0.5, -- [4]
|
||||
},
|
||||
["WARRIOR"] = {
|
||||
0, -- [1]
|
||||
0.25, -- [2]
|
||||
0, -- [3]
|
||||
0.25, -- [4]
|
||||
},
|
||||
["ROGUE"] = {
|
||||
0.49609375, -- [1]
|
||||
0.7421875, -- [2]
|
||||
0, -- [3]
|
||||
0.25, -- [4]
|
||||
},
|
||||
["MAGE"] = {
|
||||
0.25, -- [1]
|
||||
0.49609375, -- [2]
|
||||
0, -- [3]
|
||||
0.25, -- [4]
|
||||
},
|
||||
["PET"] = {
|
||||
0.25, -- [1]
|
||||
0.49609375, -- [2]
|
||||
0.75, -- [3]
|
||||
1, -- [4]
|
||||
},
|
||||
["DRUID"] = {
|
||||
0.7421875, -- [1]
|
||||
0.98828125, -- [2]
|
||||
0, -- [3]
|
||||
0.25, -- [4]
|
||||
},
|
||||
["MONK"] = {
|
||||
0.5, -- [1]
|
||||
0.73828125, -- [2]
|
||||
0.5, -- [3]
|
||||
0.75, -- [4]
|
||||
},
|
||||
["DEATHKNIGHT"] = {
|
||||
0.25, -- [1]
|
||||
0.5, -- [2]
|
||||
0.5, -- [3]
|
||||
0.75, -- [4]
|
||||
},
|
||||
["UNKNOW"] = {
|
||||
0.5, -- [1]
|
||||
0.75, -- [2]
|
||||
0.75, -- [3]
|
||||
1, -- [4]
|
||||
},
|
||||
["PRIEST"] = {
|
||||
0.49609375, -- [1]
|
||||
0.7421875, -- [2]
|
||||
0.25, -- [3]
|
||||
0.5, -- [4]
|
||||
},
|
||||
["UNGROUPPLAYER"] = {
|
||||
0.5, -- [1]
|
||||
0.75, -- [2]
|
||||
0.75, -- [3]
|
||||
1, -- [4]
|
||||
},
|
||||
["Alliance"] = {
|
||||
0.49609375, -- [1]
|
||||
0.7421875, -- [2]
|
||||
0.75, -- [3]
|
||||
1, -- [4]
|
||||
},
|
||||
["WARLOCK"] = {
|
||||
0.7421875, -- [1]
|
||||
0.98828125, -- [2]
|
||||
0.25, -- [3]
|
||||
0.5, -- [4]
|
||||
},
|
||||
["ENEMY"] = {
|
||||
0, -- [1]
|
||||
0.25, -- [2]
|
||||
0.75, -- [3]
|
||||
1, -- [4]
|
||||
},
|
||||
["Horde"] = {
|
||||
0.7421875, -- [1]
|
||||
0.98828125, -- [2]
|
||||
0.75, -- [3]
|
||||
1, -- [4]
|
||||
},
|
||||
["PALADIN"] = {
|
||||
0, -- [1]
|
||||
0.25, -- [2]
|
||||
0.5, -- [3]
|
||||
0.75, -- [4]
|
||||
},
|
||||
["MONSTER"] = {
|
||||
0, -- [1]
|
||||
0.25, -- [2]
|
||||
0.75, -- [3]
|
||||
1, -- [4]
|
||||
},
|
||||
["SHAMAN"] = {
|
||||
0.25, -- [1]
|
||||
0.49609375, -- [2]
|
||||
0.25, -- [3]
|
||||
0.5, -- [4]
|
||||
},
|
||||
},
|
||||
|
||||
class_colors = {
|
||||
["HUNTER"] = {
|
||||
0.67, -- [1]
|
||||
0.83, -- [2]
|
||||
0.45, -- [3]
|
||||
},
|
||||
["WARRIOR"] = {
|
||||
0.78, -- [1]
|
||||
0.61, -- [2]
|
||||
0.43, -- [3]
|
||||
},
|
||||
["PALADIN"] = {
|
||||
0.96, -- [1]
|
||||
0.55, -- [2]
|
||||
0.73, -- [3]
|
||||
},
|
||||
["SHAMAN"] = {
|
||||
0, -- [1]
|
||||
0.44, -- [2]
|
||||
0.87, -- [3]
|
||||
},
|
||||
["MAGE"] = {
|
||||
0.41, -- [1]
|
||||
0.8, -- [2]
|
||||
0.94, -- [3]
|
||||
},
|
||||
["ROGUE"] = {
|
||||
1, -- [1]
|
||||
0.96, -- [2]
|
||||
0.41, -- [3]
|
||||
},
|
||||
["UNKNOW"] = {
|
||||
0.2, -- [1]
|
||||
0.2, -- [2]
|
||||
0.2, -- [3]
|
||||
},
|
||||
["PRIEST"] = {
|
||||
1, -- [1]
|
||||
1, -- [2]
|
||||
1, -- [3]
|
||||
},
|
||||
["WARLOCK"] = {
|
||||
0.58, -- [1]
|
||||
0.51, -- [2]
|
||||
0.79, -- [3]
|
||||
},
|
||||
["UNGROUPPLAYER"] = {
|
||||
0.4, -- [1]
|
||||
0.4, -- [2]
|
||||
0.4, -- [3]
|
||||
},
|
||||
["ENEMY"] = {
|
||||
0.94117, -- [1]
|
||||
0, -- [2]
|
||||
0.0196, -- [3]
|
||||
1, -- [4]
|
||||
},
|
||||
["version"] = 1,
|
||||
["PET"] = {
|
||||
0.3, -- [1]
|
||||
0.4, -- [2]
|
||||
0.5, -- [3]
|
||||
},
|
||||
["DRUID"] = {
|
||||
1, -- [1]
|
||||
0.49, -- [2]
|
||||
0.04, -- [3]
|
||||
},
|
||||
["MONK"] = {
|
||||
0, -- [1]
|
||||
1, -- [2]
|
||||
0.59, -- [3]
|
||||
},
|
||||
["DEATHKNIGHT"] = {
|
||||
0.77, -- [1]
|
||||
0.12, -- [2]
|
||||
0.23, -- [3]
|
||||
},
|
||||
},
|
||||
|
||||
--> minimap
|
||||
minimap = {hide = false, radius = 160, minimapPos = 220},
|
||||
--> PvP
|
||||
only_pvp_frags = false,
|
||||
|
||||
--> window size
|
||||
max_window_size = {width = 480, height = 450},
|
||||
new_window_size = {width = 300, height = 95},
|
||||
window_clamp = {-8, 0, 21, -14},
|
||||
|
||||
--> segments
|
||||
segments_amount = 12,
|
||||
segments_amount_to_save = 5,
|
||||
segments_panic_mode = true,
|
||||
--> max instances
|
||||
instances_amount = 12,
|
||||
--> if clear ungroup characters when logout
|
||||
clear_ungrouped = true,
|
||||
--> if clear graphic data when logout
|
||||
clear_graphic = true,
|
||||
|
||||
--> text sizes
|
||||
font_sizes = {menus = 10},
|
||||
ps_abbreviation = 3,
|
||||
|
||||
--> performance
|
||||
use_row_animations = false,
|
||||
animate_scroll = false,
|
||||
use_scroll = false,
|
||||
update_speed = 1,
|
||||
time_type = 2,
|
||||
memory_threshold = 3,
|
||||
memory_ram = 64,
|
||||
remove_realm_from_name = true,
|
||||
trash_concatenate = false,
|
||||
trash_auto_remove = true,
|
||||
|
||||
--> death log
|
||||
deadlog_limit = 12,
|
||||
|
||||
--> report
|
||||
report_lines = 5,
|
||||
report_to_who = "",
|
||||
|
||||
--> colors
|
||||
default_bg_color = 0.0941,
|
||||
default_bg_alpha = 0.5,
|
||||
|
||||
--> fades
|
||||
row_fade_in = {"in", 0.2},
|
||||
windows_fade_in = {"in", 0.2},
|
||||
row_fade_out = {"out", 0.2},
|
||||
windows_fade_out = {"out", 0.2},
|
||||
|
||||
--> captures
|
||||
capture_real = {
|
||||
["damage"] = true,
|
||||
["heal"] = true,
|
||||
["energy"] = false,
|
||||
["miscdata"] = true,
|
||||
["aura"] = true,
|
||||
["spellcast"] = true,
|
||||
},
|
||||
|
||||
--> cloud capture
|
||||
cloud_capture = true,
|
||||
--> combat time mim
|
||||
minimum_combat_time = 5,
|
||||
|
||||
--> skins
|
||||
standard_skin = false, --?
|
||||
skin = "Default Skin", --?
|
||||
--> modes
|
||||
|
||||
--> switch
|
||||
|
||||
}
|
||||
|
||||
_detalhes.default_profile = default_profile
|
||||
|
||||
-- aqui fica as propriedades do jogador que não serão armazenadas no profile
|
||||
local default_player_data = {
|
||||
--> current combat number
|
||||
combat_id = 0,
|
||||
--> nicktag cache
|
||||
nick_tag_cache = {},
|
||||
--> plugin data
|
||||
plugin_database = {},
|
||||
--> information about this character
|
||||
character_data = {logons = 0},
|
||||
--> version
|
||||
last_realversion = _detalhes.realversion,
|
||||
last_version = "v1.0.0",
|
||||
--> profile
|
||||
active_profile = "",
|
||||
--> plugins tables
|
||||
SoloTablesSaved = {},
|
||||
RaidTablesSaved = {},
|
||||
--> switch tables
|
||||
switchSaved = {slots = 6, table = {}},
|
||||
--> saved skins
|
||||
savedStyles = {},
|
||||
}
|
||||
|
||||
_detalhes.default_player_data = default_player_data
|
||||
|
||||
local default_global_data = {
|
||||
|
||||
--> profile pool
|
||||
__profiles = {},
|
||||
custom = {},
|
||||
savedStyles = {},
|
||||
tutorial = {logons = 0, unlock_button = 0, version_announce = 0, main_help_button = 0, alert_frames = {false, false, false, false, false, false}, },
|
||||
}
|
||||
|
||||
_detalhes.default_global_data = default_global_data
|
||||
|
||||
|
||||
|
||||
function _detalhes:SaveProfileSpecial()
|
||||
|
||||
--> get the current profile
|
||||
local profile_name = _detalhes:GetCurrentProfileName()
|
||||
local profile = _detalhes:GetProfile (profile_name, true)
|
||||
|
||||
--> save default keys
|
||||
for key, _ in pairs (_detalhes.default_profile) do
|
||||
|
||||
local current_value = _detalhes_database [key] or _detalhes_global [key] or _detalhes.default_player_data [key] or _detalhes.default_global_data [key]
|
||||
|
||||
if (type (current_value) == "table") then
|
||||
local ctable = table_deepcopy (current_value)
|
||||
profile [key] = ctable
|
||||
else
|
||||
profile [key] = current_value
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--> save skins
|
||||
table.wipe (profile.instances)
|
||||
|
||||
for index, instance in ipairs (_detalhes.tabela_instancias) do
|
||||
local exported = instance:ExportSkin()
|
||||
profile.instances [index] = exported
|
||||
end
|
||||
|
||||
--> end
|
||||
return profile
|
||||
end
|
||||
Reference in New Issue
Block a user