- Added several options and tools for streamers and youtubers.
- Bar animation now uses delta time and speed shouldn't variate with framerate. - Test bars got improvement! - Fixed balance druid sometimes being detected as resto druid. - API: added new events: COMBAT_ARENA_START, COMBAT_ARENA_END, COMBAT_MYTHICDUNGEON_START, COMBAT_MYTHICDUNGEON_END. - API: added Details:AddColorString (player_name, class), add the player class color in the name string. - API: added Details:AddRoleIcon (player_name, role, size), add the role icon in the name string. - API: framework updated to v57.
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
local dversion = 56
|
||||
local dversion = 57
|
||||
local major, minor = "DetailsFramework-1.0", dversion
|
||||
local DF, oldminor = LibStub:NewLibrary (major, minor)
|
||||
|
||||
|
||||
+119
-9
@@ -3618,13 +3618,6 @@ end
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- ~scrollbox
|
||||
|
||||
|
||||
-- preciso de uma fauxscroll que seja facil de lidar
|
||||
-- ele cria scroll aqui, preciso falar a função que cria a linha e a função que atualiza
|
||||
-- precisa passsar o tamanho em height width quantas barras vai mostrar
|
||||
-- search box incluso opcionalmente
|
||||
|
||||
|
||||
DF.SortFunctions = {}
|
||||
|
||||
local SortMember = ""
|
||||
@@ -3659,7 +3652,7 @@ DF.ScrollBoxFunctions.Refresh = function (self)
|
||||
offset = FauxScrollFrame_GetOffset (self)
|
||||
end
|
||||
|
||||
local okay, totalLines = pcall (self.refresh_func, self, self.data, offset, #self.Frames)
|
||||
local okay, totalLines = pcall (self.refresh_func, self, self.data, offset, self.LineAmount)
|
||||
if (not okay) then
|
||||
error ("Details! FrameWork: Refresh(): " .. totalLines)
|
||||
end
|
||||
@@ -3674,6 +3667,19 @@ DF.ScrollBoxFunctions.Refresh = function (self)
|
||||
|
||||
self:Show()
|
||||
|
||||
if (self.HideScrollBar) then
|
||||
local frameName = self:GetName()
|
||||
if (frameName) then
|
||||
local scrollBar = _G [frameName .. "ScrollBar"]
|
||||
if (scrollBar) then
|
||||
scrollBar:Hide()
|
||||
end
|
||||
else
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
return self.Frames
|
||||
end
|
||||
|
||||
@@ -3683,9 +3689,13 @@ DF.ScrollBoxFunctions.OnVerticalScroll = function (self, offset)
|
||||
end
|
||||
|
||||
DF.ScrollBoxFunctions.CreateLine = function (self, func)
|
||||
if (not func) then
|
||||
func = self.CreateLineFunc
|
||||
end
|
||||
local okay, newLine = pcall (func, self, #self.Frames+1)
|
||||
if (okay) then
|
||||
tinsert (self.Frames, newLine)
|
||||
newLine.Index = #self.Frames
|
||||
return newLine
|
||||
else
|
||||
error ("Details! FrameWork: CreateLine(): " .. newLine)
|
||||
@@ -3707,14 +3717,85 @@ DF.ScrollBoxFunctions.GetData = function (self)
|
||||
return self.data
|
||||
end
|
||||
|
||||
function DF:CreateScrollBox (parent, name, refresh_func, data, width, height, line_amount, line_height)
|
||||
DF.ScrollBoxFunctions.GetFrames = function (self)
|
||||
return self.Frames
|
||||
end
|
||||
|
||||
DF.ScrollBoxFunctions.GetNumFramesCreated = function (self)
|
||||
return #self.Frames
|
||||
end
|
||||
|
||||
DF.ScrollBoxFunctions.GetNumFramesShown = function (self)
|
||||
return self.LineAmount
|
||||
end
|
||||
|
||||
DF.ScrollBoxFunctions.SetNumFramesShown = function (self, new_amount)
|
||||
--> hide frames which won't be used
|
||||
if (new_amount < #self.Frames) then
|
||||
for i = new_amount+1, #self.Frames do
|
||||
self.Frames [i]:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
--> set the new amount
|
||||
self.LineAmount = new_amount
|
||||
end
|
||||
|
||||
DF.ScrollBoxFunctions.SetFramesHeight = function (self, new_height)
|
||||
self.LineHeight = new_height
|
||||
self:OnSizeChanged()
|
||||
self:Refresh()
|
||||
end
|
||||
|
||||
DF.ScrollBoxFunctions.OnSizeChanged = function (self)
|
||||
if (self.ReajustNumFrames) then
|
||||
--> how many lines the scroll can show
|
||||
local amountOfFramesToShow = floor (self:GetHeight() / self.LineHeight)
|
||||
|
||||
--> how many lines the scroll already have
|
||||
local totalFramesCreated = self:GetNumFramesCreated()
|
||||
|
||||
--> how many lines are current shown
|
||||
local totalFramesShown = self:GetNumFramesShown()
|
||||
|
||||
--> the amount of frames increased
|
||||
if (amountOfFramesToShow > totalFramesShown) then
|
||||
for i = totalFramesShown+1, amountOfFramesToShow do
|
||||
--> check if need to create a new line
|
||||
if (i > totalFramesCreated) then
|
||||
self:CreateLine (self.CreateLineFunc)
|
||||
end
|
||||
end
|
||||
|
||||
--> the amount of frames decreased
|
||||
elseif (amountOfFramesToShow < totalFramesShown) then
|
||||
--> hide all frames above the new amount to show
|
||||
for i = totalFramesCreated, amountOfFramesToShow, -1 do
|
||||
if (self.Frames [i]) then
|
||||
self.Frames [i]:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--> set the new amount of frames
|
||||
self:SetNumFramesShown (amountOfFramesToShow)
|
||||
|
||||
--> refresh lines
|
||||
self:Refresh()
|
||||
end
|
||||
end
|
||||
|
||||
function DF:CreateScrollBox (parent, name, refresh_func, data, width, height, line_amount, line_height, create_line_func, auto_amount, no_scroll)
|
||||
local scroll = CreateFrame ("scrollframe", name, parent, "FauxScrollFrameTemplate")
|
||||
|
||||
scroll:SetSize (width, height)
|
||||
scroll.LineAmount = line_amount
|
||||
scroll.LineHeight = line_height
|
||||
scroll.IsFauxScroll = true
|
||||
scroll.HideScrollBar = no_scroll
|
||||
scroll.Frames = {}
|
||||
scroll.ReajustNumFrames = auto_amount
|
||||
scroll.CreateLineFunc = create_line_func
|
||||
|
||||
DF:Mixin (scroll, DF.SortFunctions)
|
||||
DF:Mixin (scroll, DF.ScrollBoxFunctions)
|
||||
@@ -3723,9 +3804,38 @@ function DF:CreateScrollBox (parent, name, refresh_func, data, width, height, li
|
||||
scroll.data = data
|
||||
|
||||
scroll:SetScript ("OnVerticalScroll", scroll.OnVerticalScroll)
|
||||
scroll:SetScript ("OnSizeChanged", DF.ScrollBoxFunctions.OnSizeChanged)
|
||||
|
||||
return scroll
|
||||
end
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- ~resizers
|
||||
|
||||
function DF:CreateResizeGrips (parent)
|
||||
if (parent) then
|
||||
local parentName = parent:GetName()
|
||||
|
||||
local leftResizer = CreateFrame ("button", parentName and parentName .. "LeftResizer" or nil, parent)
|
||||
local rightResizer = CreateFrame ("button", parentName and parentName .. "RightResizer" or nil, parent)
|
||||
|
||||
leftResizer:SetPoint ("bottomleft", parent, "bottomleft")
|
||||
rightResizer:SetPoint ("bottomright", parent, "bottomright")
|
||||
leftResizer:SetSize (16, 16)
|
||||
rightResizer:SetSize (16, 16)
|
||||
|
||||
rightResizer:SetNormalTexture ([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Up]])
|
||||
rightResizer:SetHighlightTexture ([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Highlight]])
|
||||
rightResizer:SetPushedTexture ([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Down]])
|
||||
leftResizer:SetNormalTexture ([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Up]])
|
||||
leftResizer:SetHighlightTexture ([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Highlight]])
|
||||
leftResizer:SetPushedTexture ([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Down]])
|
||||
|
||||
leftResizer:GetNormalTexture():SetTexCoord (1, 0, 0, 1)
|
||||
leftResizer:GetHighlightTexture():SetTexCoord (1, 0, 0, 1)
|
||||
leftResizer:GetPushedTexture():SetTexCoord (1, 0, 0, 1)
|
||||
|
||||
return leftResizer, rightResizer
|
||||
end
|
||||
end
|
||||
|
||||
@@ -160,11 +160,21 @@
|
||||
if (have_cached) then
|
||||
novo_objeto.spec = have_cached
|
||||
--> check is didn't changed the spec:
|
||||
if (_detalhes.streamer_config.quick_detection) then
|
||||
--> validate the spec more times if on quick detection
|
||||
_detalhes:ScheduleTimer ("ReGuessSpec", 2, {novo_objeto, self})
|
||||
_detalhes:ScheduleTimer ("ReGuessSpec", 4, {novo_objeto, self})
|
||||
_detalhes:ScheduleTimer ("ReGuessSpec", 6, {novo_objeto, self})
|
||||
end
|
||||
_detalhes:ScheduleTimer ("ReGuessSpec", 15, {novo_objeto, self})
|
||||
--print (nome, "spec em cache:", have_cached)
|
||||
else
|
||||
_detalhes:ScheduleTimer ("GuessSpec", 3, {novo_objeto, self, 1})
|
||||
--print (nome, "nao tem")
|
||||
if (_detalhes.streamer_config.quick_detection) then
|
||||
--> shoot detection early if in quick detection
|
||||
_detalhes:ScheduleTimer ("GuessSpec", 1, {novo_objeto, self, 1})
|
||||
else
|
||||
_detalhes:ScheduleTimer ("GuessSpec", 3, {novo_objeto, self, 1})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -424,6 +424,9 @@ function historico:resetar_overall()
|
||||
end
|
||||
end
|
||||
|
||||
--> stop bar testing if any
|
||||
_detalhes:StopTestBarUpdate()
|
||||
|
||||
_detalhes:ClockPluginTickOnSegment()
|
||||
end
|
||||
|
||||
@@ -433,6 +436,9 @@ function historico:resetar()
|
||||
_detalhes.bosswindow:Reset()
|
||||
end
|
||||
|
||||
--> stop bar testing if any
|
||||
_detalhes:StopTestBarUpdate()
|
||||
|
||||
if (_detalhes.tabela_vigente.verifica_combate) then --> finaliza a checagem se esta ou não no combate
|
||||
_detalhes:CancelTimer (_detalhes.tabela_vigente.verifica_combate)
|
||||
end
|
||||
|
||||
@@ -415,6 +415,9 @@
|
||||
|
||||
_detalhes:CheckSwitchToCurrent()
|
||||
_detalhes:CheckForTextTimeCounter (true)
|
||||
|
||||
--> stop bar testing if any
|
||||
_detalhes:StopTestBarUpdate()
|
||||
end
|
||||
|
||||
function _detalhes:DelayedSyncAlert()
|
||||
@@ -900,6 +903,7 @@
|
||||
_detalhes.tabela_vigente.arena = true
|
||||
_detalhes.tabela_vigente.is_arena = {name = _detalhes.zone_name, zone = _detalhes.zone_name, mapid = _detalhes.zone_id}
|
||||
|
||||
_detalhes:SendEvent ("COMBAT_ARENA_START")
|
||||
end
|
||||
|
||||
function _detalhes:StartArenaSegment (...)
|
||||
@@ -946,6 +950,7 @@
|
||||
_detalhes:TimeDataUnregister ("Your Team Healing")
|
||||
_detalhes:TimeDataUnregister ("Enemy Team Healing")
|
||||
|
||||
_detalhes:SendEvent ("COMBAT_ARENA_END")
|
||||
end
|
||||
|
||||
local validSpells = {
|
||||
|
||||
+19
-2
@@ -461,17 +461,34 @@ function _detalhes:ResetSpecCache (forced)
|
||||
|
||||
end
|
||||
|
||||
function _detalhes:RefreshUpdater (suggested_interval)
|
||||
local updateInterval = suggested_interval or _detalhes.update_speed
|
||||
|
||||
if (_detalhes.streamer_config.faster_updates) then
|
||||
--> force 60 updates per second
|
||||
updateInterval = 0.016
|
||||
end
|
||||
|
||||
if (_detalhes.atualizador) then
|
||||
_detalhes:CancelTimer (_detalhes.atualizador)
|
||||
end
|
||||
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", updateInterval, -1)
|
||||
end
|
||||
|
||||
function _detalhes:SetWindowUpdateSpeed (interval, nosave)
|
||||
if (not interval) then
|
||||
interval = _detalhes.update_speed
|
||||
end
|
||||
|
||||
if (type (interval) ~= "number") then
|
||||
interval = _detalhes.update_speed or 0.3
|
||||
end
|
||||
|
||||
if (not nosave) then
|
||||
_detalhes.update_speed = interval
|
||||
end
|
||||
|
||||
_detalhes:CancelTimer (_detalhes.atualizador)
|
||||
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", interval, -1)
|
||||
_detalhes:RefreshUpdater (interval)
|
||||
end
|
||||
|
||||
function _detalhes:SetUseAnimations (enabled, nosave)
|
||||
|
||||
@@ -4060,6 +4060,13 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
|
||||
_detalhes.time_type = 1
|
||||
end
|
||||
|
||||
if (not _detalhes.is_in_arena) then
|
||||
--> reset spec cache if broadcaster requested
|
||||
if (_detalhes.streamer_config.reset_spec_cache) then
|
||||
wipe (_detalhes.cached_specs)
|
||||
end
|
||||
end
|
||||
|
||||
_detalhes.is_in_arena = true
|
||||
_detalhes:EnteredInArena()
|
||||
|
||||
|
||||
+1640
-22
File diff suppressed because it is too large
Load Diff
@@ -39,7 +39,11 @@
|
||||
["COMBAT_CHARTTABLES_CREATING"] = {},
|
||||
["COMBAT_CHARTTABLES_CREATED"] = {},
|
||||
["COMBAT_ENCOUNTER_PHASE_CHANGED"] = {},
|
||||
|
||||
["COMBAT_ARENA_START"] = {},
|
||||
["COMBAT_ARENA_END"] = {},
|
||||
["COMBAT_MYTHICDUNGEON_START"] = {},
|
||||
["COMBAT_MYTHICDUNGEON_END"] = {},
|
||||
|
||||
--> area
|
||||
["ZONE_TYPE_CHANGED"] = {},
|
||||
|
||||
@@ -96,6 +100,10 @@ local common_events = {
|
||||
["COMBAT_CHARTTABLES_CREATING"] = true,
|
||||
["COMBAT_CHARTTABLES_CREATED"] = true,
|
||||
["COMBAT_ENCOUNTER_PHASE_CHANGED"] = true,
|
||||
["COMBAT_ARENA_START"] = true,
|
||||
["COMBAT_ARENA_END"] = true,
|
||||
["COMBAT_MYTHICDUNGEON_START"] = true,
|
||||
["COMBAT_MYTHICDUNGEON_END"] = true,
|
||||
["GROUP_ONENTER"] = true,
|
||||
["GROUP_ONLEAVE"] = true,
|
||||
["ZONE_TYPE_CHANGED"] = true,
|
||||
|
||||
@@ -459,13 +459,50 @@ do
|
||||
|
||||
return spec
|
||||
end
|
||||
|
||||
if (tries and tries < 10) then
|
||||
t[3] = tries + 1
|
||||
_detalhes:ScheduleTimer ("GuessSpec", 3, t)
|
||||
|
||||
if (_detalhes.streamer_config.quick_detection) then
|
||||
if (tries and tries < 30) then
|
||||
t[3] = tries + 1
|
||||
_detalhes:ScheduleTimer ("GuessSpec", 1, t)
|
||||
end
|
||||
else
|
||||
if (tries and tries < 10) then
|
||||
t[3] = tries + 1
|
||||
_detalhes:ScheduleTimer ("GuessSpec", 3, t)
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
function _detalhes:AddColorString (player_name, class)
|
||||
--> check if the class colors exists
|
||||
local classColors = _G.RAID_CLASS_COLORS
|
||||
if (classColors) then
|
||||
local color = classColors [class]
|
||||
--> check if the player name is valid
|
||||
if (type (player_name) == "string" and color) then
|
||||
player_name = "|c" .. color.colorStr .. player_name .. "|r"
|
||||
return player_name
|
||||
end
|
||||
end
|
||||
|
||||
--> if failed, return the player name without modifications
|
||||
return player_name
|
||||
end
|
||||
|
||||
function _detalhes:AddRoleIcon (player_name, role, size)
|
||||
--> check if is a valid role
|
||||
local roleIcon = _detalhes.role_texcoord [role]
|
||||
if (type (player_name) == "string" and roleIcon and role ~= "NONE") then
|
||||
--> add the role icon
|
||||
size = size or 14
|
||||
player_name = "|TInterface\\LFGFRAME\\UI-LFG-ICON-ROLES:" .. size .. ":" .. size .. ":0:0:256:256:" .. roleIcon .. "|t " .. player_name
|
||||
return player_name
|
||||
end
|
||||
|
||||
return player_name
|
||||
end
|
||||
|
||||
+93
-8
@@ -234,14 +234,20 @@ function _detalhes:ApplyProfile (profile_name, nosave, is_copy)
|
||||
|
||||
--> update profile keys before go
|
||||
for key, value in pairs (_detalhes.default_profile) do
|
||||
--> the entire key doesn't exist
|
||||
if (profile [key] == nil) then
|
||||
if (type (value) == "table") then
|
||||
profile [key] = table_deepcopy (_detalhes.default_profile [key])
|
||||
else
|
||||
profile [key] = value
|
||||
end
|
||||
|
||||
|
||||
--> the key exist and is a table, check for missing values on sub tables
|
||||
elseif (type (value) == "table") then
|
||||
--> deploy only copy non existing data
|
||||
_detalhes.table.deploy (profile [key], value)
|
||||
|
||||
--[=[
|
||||
for key2, value2 in pairs (value) do
|
||||
if (profile [key] [key2] == nil) then
|
||||
if (type (value2) == "table") then
|
||||
@@ -251,7 +257,7 @@ function _detalhes:ApplyProfile (profile_name, nosave, is_copy)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--]=]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -542,6 +548,15 @@ function _detalhes:ApplyProfile (profile_name, nosave, is_copy)
|
||||
|
||||
--> update the numerical system
|
||||
_detalhes:SelectNumericalSystem()
|
||||
|
||||
--> refresh the update interval
|
||||
_detalhes:RefreshUpdater()
|
||||
|
||||
--> refresh animation functions
|
||||
_detalhes:RefreshAnimationFunctions()
|
||||
|
||||
--> refresh broadcaster tools
|
||||
_detalhes:LoadFramesForBroadcastTools()
|
||||
|
||||
if (_detalhes.initializing) then
|
||||
_detalhes.profile_loaded = true
|
||||
@@ -864,14 +879,14 @@ local default_profile = {
|
||||
0.23, -- [3]
|
||||
},
|
||||
["ARENA_GREEN"] = {
|
||||
0.1, -- [1]
|
||||
0.85, -- [2]
|
||||
0.1, -- [3]
|
||||
0.4, -- [1]
|
||||
1, -- [2]
|
||||
0.4, -- [3]
|
||||
},
|
||||
["ARENA_YELLOW"] = {
|
||||
0.90, -- [1]
|
||||
0.90, -- [2]
|
||||
0, -- [3]
|
||||
1, -- [1]
|
||||
1, -- [2]
|
||||
0.25, -- [3]
|
||||
},
|
||||
["NEUTRAL"] = {
|
||||
1, -- [1]
|
||||
@@ -942,6 +957,10 @@ local default_profile = {
|
||||
|
||||
--> performance
|
||||
use_row_animations = false,
|
||||
animation_speed = 33,
|
||||
animation_speed_triggertravel = 5,
|
||||
animation_speed_mintravel = 0.45,
|
||||
animation_speed_maxtravel = 3,
|
||||
animate_scroll = false,
|
||||
use_scroll = false,
|
||||
scroll_speed = 2,
|
||||
@@ -1013,7 +1032,64 @@ local default_profile = {
|
||||
tab_name = "",
|
||||
single_window = false,
|
||||
},
|
||||
|
||||
--> broadcaster options
|
||||
broadcaster_enabled = false,
|
||||
|
||||
--> event tracker
|
||||
event_tracker = {
|
||||
frame = {
|
||||
locked = false,
|
||||
width = 250,
|
||||
height = 300,
|
||||
backdrop_color = {0, 0, 0, 0.2},
|
||||
show_title = true,
|
||||
strata = "LOW",
|
||||
},
|
||||
options_frame = {},
|
||||
enabled = false,
|
||||
font_size = 10,
|
||||
font_color = {1, 1, 1, 1},
|
||||
font_shadow = "NONE",
|
||||
font_face = "Friz Quadrata TT",
|
||||
line_height = 16,
|
||||
line_texture = "Details Serenity",
|
||||
line_color = {.1, .1, .1, 0.3},
|
||||
},
|
||||
|
||||
--> current damage
|
||||
current_dps_meter = {
|
||||
frame = {
|
||||
locked = false,
|
||||
width = 220,
|
||||
height = 65,
|
||||
backdrop_color = {0, 0, 0, 0.2},
|
||||
show_title = false,
|
||||
strata = "LOW",
|
||||
},
|
||||
options_frame = {},
|
||||
enabled = false,
|
||||
arena_enabled = true,
|
||||
mythic_dungeon_enabled = true,
|
||||
font_size = 18,
|
||||
font_color = {1, 1, 1, 1},
|
||||
font_shadow = "NONE",
|
||||
font_face = "Friz Quadrata TT",
|
||||
update_interval = 0.10,
|
||||
sample_size = 5, --in seconds
|
||||
},
|
||||
|
||||
--> streamer
|
||||
-- _detalhes.streamer_config.
|
||||
streamer_config = {
|
||||
reset_spec_cache = false,
|
||||
disable_mythic_dungeon = false,
|
||||
no_alerts = false,
|
||||
quick_detection = false,
|
||||
faster_updates = false,
|
||||
use_animation_accel = false,
|
||||
},
|
||||
|
||||
--> tooltip
|
||||
tooltip = {
|
||||
fontface = "Friz Quadrata TT",
|
||||
@@ -1303,6 +1379,11 @@ local default_global_data = {
|
||||
_detalhes.default_global_data = default_global_data
|
||||
|
||||
function _detalhes:GetTutorialCVar (key, default)
|
||||
--> is disabling all popups from the streamer options
|
||||
if (_detalhes.streamer_config.no_alerts) then
|
||||
return true
|
||||
end
|
||||
|
||||
local value = _detalhes.tutorial [key]
|
||||
if (value == nil and default) then
|
||||
_detalhes.tutorial [key] = default
|
||||
@@ -1401,6 +1482,10 @@ function _detalhes:RestoreState_CurrentMythicDungeonRun()
|
||||
_detalhes.MythicPlus.PreviousBossKilledAt = savedTable.previous_boss_killed_at
|
||||
_detalhes.MythicPlus.IsRestoredState = true
|
||||
DetailsMythicPlusFrame.IsDoingMythicDungeon = true
|
||||
|
||||
C_Timer.After (2, function()
|
||||
_detalhes:SendEvent ("COMBAT_MYTHICDUNGEON_START")
|
||||
end)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
+30
-2
@@ -135,14 +135,14 @@ do
|
||||
|
||||
-- Restoration Druid:
|
||||
|
||||
[145518] = 105, -- Genesis
|
||||
[145518] = 105, -- Genesis --no exists
|
||||
[145205] = 105, -- Wild Mushroom
|
||||
[48438] = 105, -- Wild Growth
|
||||
[740] = 105, -- Tranquility
|
||||
[102342] = 105, -- Ironbark
|
||||
[33763] = 105, -- Lifebloom
|
||||
[88423] = 105, -- Nature's Cure
|
||||
[8936] = 105, -- Regrowth
|
||||
--[8936] = 105, -- Regrowth -overlap
|
||||
[18562] = 105, -- Swiftmend
|
||||
|
||||
-- Beast Mastery Hunter:
|
||||
@@ -1572,6 +1572,34 @@ do
|
||||
--[29842] = "WARRIOR", --undribled wrath
|
||||
}
|
||||
|
||||
_detalhes.HardCrowdControlSpells = {
|
||||
--> death knight
|
||||
|
||||
--> deamon hunter
|
||||
|
||||
--> druid
|
||||
[33786] = true, -- Cyclone
|
||||
|
||||
--> hunter
|
||||
|
||||
--> mage
|
||||
|
||||
--> monk
|
||||
|
||||
--> paladin
|
||||
|
||||
--> priest
|
||||
|
||||
--> rogue
|
||||
|
||||
--> shaman
|
||||
|
||||
--> warlock
|
||||
|
||||
--> warrior
|
||||
|
||||
}
|
||||
|
||||
-- updated on 25/04/2015 (@Tonyleila - WoWInterface)
|
||||
_detalhes.CrowdControlSpells = {
|
||||
|
||||
|
||||
+309
-20
@@ -20,7 +20,7 @@
|
||||
15 - custom spells
|
||||
16 - data for charts
|
||||
17 - automatization settings
|
||||
18 - misc settings
|
||||
18 - broadcaster options
|
||||
19 - externals widgets (data feed)
|
||||
20 - tooltip
|
||||
--]]
|
||||
@@ -478,8 +478,16 @@ function _detalhes:OpenOptionsWindow (instance, no_reopen, section)
|
||||
local extra_buttons_on_leave = function (self, capsule)
|
||||
capsule.textcolor = "C_OptionsButtonOrange"
|
||||
end
|
||||
|
||||
local fillbars = g:NewButton (window, _, "$parentCreateExampleBarsButton", nil, 110, 14, _detalhes.CreateTestBars, nil, nil, nil, Loc ["STRING_OPTIONS_TESTBARS"], 1)
|
||||
|
||||
local create_test_bars_func = function()
|
||||
_detalhes.CreateTestBars()
|
||||
if (not _detalhes.test_bar_update) then
|
||||
_detalhes:StartTestBarUpdate()
|
||||
else
|
||||
_detalhes:StopTestBarUpdate()
|
||||
end
|
||||
end
|
||||
local fillbars = g:NewButton (window, _, "$parentCreateExampleBarsButton", nil, 110, 14, create_test_bars_func, nil, nil, nil, Loc ["STRING_OPTIONS_TESTBARS"], 1)
|
||||
fillbars:SetPoint ("bottomleft", window.widget, "bottomleft", 41, 12)
|
||||
fillbars.textalign = "left"
|
||||
fillbars.textcolor = "C_OptionsButtonOrange"
|
||||
@@ -566,7 +574,7 @@ function _detalhes:OpenOptionsWindow (instance, no_reopen, section)
|
||||
17, --auto hide settings
|
||||
9, --wallpaper
|
||||
|
||||
18, --misc
|
||||
18, --streamer options
|
||||
|
||||
--advanced
|
||||
11, --raid tools
|
||||
@@ -600,7 +608,7 @@ local menus = { --labels nos menus
|
||||
Loc ["STRING_OPTIONSMENU_AUTOMATIC"],
|
||||
Loc ["STRING_OPTIONSMENU_WALLPAPER"],
|
||||
|
||||
"-- -- --", --Loc ["STRING_OPTIONSMENU_MISC"]
|
||||
"Streamer Settings", --Loc ["STRING_OPTIONSMENU_MISC"]
|
||||
},
|
||||
|
||||
{
|
||||
@@ -631,7 +639,7 @@ local menus2 = {
|
||||
Loc ["STRING_OPTIONSMENU_DATACHART"], --16
|
||||
Loc ["STRING_OPTIONSMENU_AUTOMATIC"], --17
|
||||
--Loc ["STRING_OPTIONSMENU_MISC"], --18
|
||||
"-- -- --", --18
|
||||
"Streamer Settings", --18
|
||||
Loc ["STRING_OPTIONSMENU_DATAFEED"], --19
|
||||
Loc ["STRING_OPTIONSMENU_TOOLTIP"], --20
|
||||
}
|
||||
@@ -647,10 +655,13 @@ local menus2 = {
|
||||
[9] = true,
|
||||
[14] = true,
|
||||
[17] = true,
|
||||
[18] = true,
|
||||
--[18] = true,
|
||||
}
|
||||
window.is_window_settings = is_window_settings
|
||||
|
||||
|
||||
local newIcon = g:CreateImage (window, [[Interface\AddOns\Details\images\icons2]], 62*0.6, 40*0.6, "overlay", {443/512, 505/512, 306/512, 346/512})
|
||||
newIcon:SetPoint ("topleft", window.widget, "topleft", 135, -351)
|
||||
|
||||
local select_options = function (options_type, true_index)
|
||||
|
||||
window.current_selected = options_type
|
||||
@@ -2198,7 +2209,7 @@ function window:CreateFrame19()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- Advanced Settings - Miscellaneous ~18
|
||||
-- Advanced Settings - options for broadcasters ~18
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
function window:CreateFrame18()
|
||||
|
||||
@@ -2209,19 +2220,287 @@ function window:CreateFrame18()
|
||||
titulo_misc_settings_desc.width = 350
|
||||
titulo_misc_settings_desc.height = 20
|
||||
|
||||
local right_side = {
|
||||
--{"instancesMiscLabel", 1, true},
|
||||
--{"deleteInstanceLabel", 2},
|
||||
|
||||
--{"DisableGroupsLabel", 5, true},
|
||||
--{"DisableLockResizeUngroupLabel", 7},
|
||||
--{"DisableStretchButtonLabel", 8},
|
||||
--{"DisableBarHighlightLabel", 9},
|
||||
--{"DisableAllDisplaysWindowLabel", 10},
|
||||
--{"DamageTakenEverythingLabel", 10},
|
||||
-->
|
||||
local button_width = 180
|
||||
|
||||
local titleFrame18 = g:NewLabel (frame18, _, "$parentTitleText", "TitleTextLabel", "Streamer Settings", "GameFontNormal", 16)
|
||||
local titleFrame18Desc = g:NewLabel (frame18, _, "$parentTitleDescText", "TitleDescTextLabel", "Set of tools for streamers, youtubers and broadcasters in general", "GameFontNormal", 10, "white")
|
||||
titleFrame18Desc:SetSize (450, 20)
|
||||
|
||||
--fazer os headers com espaço para images
|
||||
--fazer o botão para abrir o painel de opçopoes
|
||||
|
||||
--> streamer plugin - a.k.a. player spell tracker
|
||||
--> title anchor
|
||||
g:NewLabel (frame18, _, "$parentStreamerPluginAnchor", "streamerPluginAnchor", "Streamer Plugin: Action Tracker", "GameFontNormal")
|
||||
local streamerTitleDesc = g:NewLabel (frame18, _, "$parentStreamerTitleDescText", "StreamerTitleDescTextLabel", "Show the spells you are casting, allowing the viewer to follow your decision making and learn your rotation.", "GameFontNormal", 10, "white")
|
||||
streamerTitleDesc:SetSize (270, 40)
|
||||
streamerTitleDesc:SetJustifyV ("top")
|
||||
streamerTitleDesc:SetPoint ("topleft", frame18.streamerPluginAnchor, "bottomleft", 0, -4)
|
||||
|
||||
--{"scrollLabel", 11, true},
|
||||
local streamerTitleImage = g:CreateImage (frame18, [[Interface\AddOns\Details\images\icons2]], 256, 41, "overlay", {0.5, 1, 0.49, 0.57})
|
||||
streamerTitleImage:SetPoint ("topleft", frame18.streamerPluginAnchor, "bottomleft", 0, -40)
|
||||
|
||||
--> get the plugin object
|
||||
local StreamerPlugin = _detalhes:GetPlugin ("DETAILS_PLUGIN_STREAM_OVERLAY")
|
||||
if (StreamerPlugin) then
|
||||
--> get the plugin settings table
|
||||
local tPluginSettings = _detalhes:GetPluginSavedTable ("DETAILS_PLUGIN_STREAM_OVERLAY")
|
||||
if (tPluginSettings) then
|
||||
local bIsPluginEnabled = tPluginSettings.enabled
|
||||
--> plugin already enabled
|
||||
if (bIsPluginEnabled) then
|
||||
--> config button
|
||||
local configure_streamer_plugin = function()
|
||||
StreamerPlugin.OpenOptionsPanel (true)
|
||||
C_Timer.After (0.2, function()
|
||||
window:Hide()
|
||||
end)
|
||||
end
|
||||
local configurePluginButton = g:NewButton (frame18, _, "$parentConfigureStreamerPluginButton", "configureStreamerPlugin", 100, 20, configure_streamer_plugin, nil, nil, nil, "Action Tracker Options", nil, options_button_template)
|
||||
configurePluginButton:SetWidth (button_width)
|
||||
configurePluginButton:SetPoint ("topleft", streamerTitleImage, "bottomleft", 0, -7)
|
||||
|
||||
--> text telling how to disable
|
||||
local pluginAlreadyEnabled = g:NewLabel (frame18, _, "$parentStreamerAlreadyEnabledText", "StreamerAlreadyEnabledTextLabel", "Plugin is enabled. You may disable it on Plugin Management section.", "GameFontNormal", 10, "white")
|
||||
pluginAlreadyEnabled:SetJustifyV ("top")
|
||||
pluginAlreadyEnabled:SetSize (270, 40)
|
||||
pluginAlreadyEnabled:SetPoint ("topleft", configurePluginButton, "bottomleft", 0, -7)
|
||||
else
|
||||
--> plugin isnt enabled, create the enable button
|
||||
local enable_streamer_plugin = function()
|
||||
tPluginSettings.enabled = true
|
||||
StreamerPlugin.__enabled = true
|
||||
_detalhes:SendEvent ("PLUGIN_ENABLED", StreamerPlugin)
|
||||
|
||||
frame18.enableStreamerPluginButton:Hide()
|
||||
|
||||
--> config button
|
||||
local configure_streamer_plugin = function()
|
||||
StreamerPlugin.OpenOptionsPanel()
|
||||
end
|
||||
local configurePluginButton = g:NewButton (frame18, _, "$parentConfigureStreamerPluginButton", "configureStreamerPlugin", 100, 20, configure_streamer_plugin, nil, nil, nil, "Action Tracker Options", nil, options_button_template)
|
||||
configurePluginButton:SetWidth (button_width)
|
||||
configurePluginButton:SetPoint ("topleft", streamerTitleImage, "bottomleft", 0, -7)
|
||||
|
||||
--> text telling how to disable
|
||||
local pluginAlreadyEnabled = g:NewLabel (frame18, _, "$parentStreamerAlreadyEnabledText", "StreamerAlreadyEnabledTextLabel", "Plugin is enabled. You may disable it on Plugin Management section.", "GameFontNormal", 10, "white")
|
||||
pluginAlreadyEnabled:SetJustifyV ("top")
|
||||
pluginAlreadyEnabled:SetSize (270, 40)
|
||||
pluginAlreadyEnabled:SetPoint ("topleft", configurePluginButton, "bottomleft", 0, -7)
|
||||
end
|
||||
|
||||
local enablePluginButton = g:NewButton (frame18, _, "$parentEnableStreamerPluginButton", "enableStreamerPluginButton", 100, 20, enable_streamer_plugin, nil, nil, nil, "Enable Plugin", nil, options_button_template)
|
||||
enablePluginButton:SetWidth (button_width)
|
||||
enablePluginButton:SetPoint ("topleft", streamerTitleImage, "bottomleft", 0, -5)
|
||||
end
|
||||
end
|
||||
else
|
||||
--> plugin is disabled at the addon control panel
|
||||
local pluginDisabled = g:NewLabel (frame18, _, "$parentStreamerDisabledText", "StreamerDisabledTextLabel", "Details!: Streamer Plugin is disabled on the AddOns Control Panel.", "GameFontNormal", 10, "red")
|
||||
pluginDisabled:SetSize (270, 40)
|
||||
pluginDisabled:SetPoint ("topleft", streamerTitleImage, "bottomleft", 0, -2)
|
||||
end
|
||||
|
||||
|
||||
--> event tracker
|
||||
g:NewLabel (frame18, _, "$parentEventTrackerAnchor", "eventTrackerAnchor", "Event Tracker", "GameFontNormal")
|
||||
local eventTrackerTitleDesc = g:NewLabel (frame18, _, "$parentEventTrackerTitleDescText", "EventTrackerTitleDescTextLabel", "Show what's happening near you so the viewer can follow what's going on. Show cooldowns, CC, spell interruption. Useful on any group content.", "GameFontNormal", 10, "white")
|
||||
eventTrackerTitleDesc:SetJustifyV ("top")
|
||||
eventTrackerTitleDesc:SetSize (270, 40)
|
||||
eventTrackerTitleDesc:SetPoint ("topleft", frame18.eventTrackerAnchor, "bottomleft", 0, -4)
|
||||
|
||||
local eventTrackerTitleImage = g:CreateImage (frame18, [[Interface\AddOns\Details\images\icons2]], 256, 50, "overlay", {0.5, 1, 134/512, 184/512})
|
||||
eventTrackerTitleImage:SetPoint ("topleft", frame18.eventTrackerAnchor, "bottomleft", 0, -40)
|
||||
|
||||
--> enable feature checkbox
|
||||
g:NewLabel (frame18, _, "$parentEnableEventTrackerLabel", "EventTrackerLabel", "Enable Event Tracker", "GameFontHighlightLeft")
|
||||
g:NewSwitch (frame18, _, "$parentEventTrackerSlider", "EventTrackerSlider", 60, 20, _, _, _detalhes.event_tracker.enabled, nil, nil, nil, nil, options_switch_template)
|
||||
|
||||
frame18.EventTrackerSlider:SetPoint ("left", frame18.EventTrackerLabel, "right", 2)
|
||||
frame18.EventTrackerSlider:SetAsCheckBox()
|
||||
frame18.EventTrackerSlider.OnSwitch = function (_, _, value)
|
||||
_detalhes.event_tracker.enabled = not _detalhes.event_tracker.enabled
|
||||
Details:LoadFramesForBroadcastTools()
|
||||
_detalhes:SendOptionsModifiedEvent (DetailsOptionsWindow.instance)
|
||||
end
|
||||
|
||||
window:CreateLineBackground2 (frame18, "EventTrackerSlider", "EventTrackerLabel", "Enable Event Tracker")
|
||||
|
||||
frame18.EventTrackerLabel:SetPoint ("topleft", eventTrackerTitleImage, "bottomleft", 0, -10)
|
||||
frame18.EventTrackerSlider:SetPoint ("left", frame18.EventTrackerLabel, "right", 2, 0)
|
||||
|
||||
--> configure feature button
|
||||
local configure_event_tracker = function()
|
||||
_detalhes:OpenEventTrackerOptions (true)
|
||||
C_Timer.After (0.2, function()
|
||||
window:Hide()
|
||||
end)
|
||||
end
|
||||
local configureEventTrackerButton = g:NewButton (frame18, _, "$parentConfigureEventTrackerButton", "configureEventTracker", 100, 20, configure_event_tracker, nil, nil, nil, "Event Tracker Options", nil, options_button_template)
|
||||
configureEventTrackerButton:SetWidth (button_width)
|
||||
configureEventTrackerButton:SetPoint ("topleft", frame18.EventTrackerLabel, "bottomleft", 0, -7)
|
||||
|
||||
|
||||
--> current dps
|
||||
g:NewLabel (frame18, _, "$parentCurrentDPSAnchor", "currentDPSAnchor", "The Real Current DPS", "GameFontNormal")
|
||||
local currentDPSTitleDesc = g:NewLabel (frame18, _, "$parentCurrentDPSTitleDescText", "CurrentDPSTitleDescTextLabel", "Show a frame with DPS done only in the last 5 seconds, making it change very quickly when the group uses attack cooldowns.", "GameFontNormal", 10, "white")
|
||||
currentDPSTitleDesc:SetJustifyV ("top")
|
||||
currentDPSTitleDesc:SetSize (270, 40)
|
||||
currentDPSTitleDesc:SetPoint ("topleft", frame18.currentDPSAnchor, "bottomleft", 0, -4)
|
||||
|
||||
local currentDPSTitleImage = g:CreateImage (frame18, [[Interface\AddOns\Details\images\icons2]], 250, 61, "overlay", {259/512, 509/512, 186/512, 247/512})
|
||||
currentDPSTitleImage:SetPoint ("topleft", frame18.currentDPSAnchor, "bottomleft", 0, -40)
|
||||
|
||||
--> enable feature checkbox
|
||||
g:NewLabel (frame18, _, "$parentEnableCurrentDPSLabel", "CurrentDPSLabel", "Enable The Real Current Dps", "GameFontHighlightLeft")
|
||||
g:NewSwitch (frame18, _, "$parentCurrentDPSSlider", "CurrentDPSSlider", 60, 20, _, _, _detalhes.current_dps_meter.enabled, nil, nil, nil, nil, options_switch_template)
|
||||
|
||||
frame18.CurrentDPSSlider:SetPoint ("left", frame18.CurrentDPSLabel, "right", 2)
|
||||
frame18.CurrentDPSSlider:SetAsCheckBox()
|
||||
frame18.CurrentDPSSlider.OnSwitch = function (_, _, value)
|
||||
_detalhes.current_dps_meter.enabled = not _detalhes.current_dps_meter.enabled
|
||||
Details:LoadFramesForBroadcastTools()
|
||||
_detalhes:SendOptionsModifiedEvent (DetailsOptionsWindow.instance)
|
||||
end
|
||||
|
||||
window:CreateLineBackground2 (frame18, "CurrentDPSSlider", "CurrentDPSLabel", "Enable The Real Current Dps")
|
||||
|
||||
frame18.CurrentDPSLabel:SetPoint ("topleft", currentDPSTitleImage, "bottomleft", 0, -10)
|
||||
frame18.CurrentDPSSlider:SetPoint ("left", frame18.CurrentDPSLabel, "right", 2, 0)
|
||||
|
||||
--> configure feature button
|
||||
local configure_current_dps = function()
|
||||
_detalhes:OpenCurrentRealDPSOptions (true)
|
||||
C_Timer.After (0.2, function()
|
||||
window:Hide()
|
||||
end)
|
||||
end
|
||||
local configureCurrentDPSButton = g:NewButton (frame18, _, "$parentConfigureCurrentDPSButton", "configureCurrentDPS", 100, 20, configure_current_dps, nil, nil, nil, "Current Real DPS Options", nil, options_button_template)
|
||||
configureCurrentDPSButton:SetWidth (button_width)
|
||||
configureCurrentDPSButton:SetPoint ("topleft", frame18.CurrentDPSLabel, "bottomleft", 0, -7)
|
||||
|
||||
|
||||
--> suppress alerts and tutorial popups
|
||||
g:NewLabel (frame18, _, "$parentAlertsAndPopupsAnchor", "alertsAndPopupsAnchor", "Settings:", "GameFontNormal")
|
||||
|
||||
|
||||
|
||||
--> no alerts
|
||||
g:NewLabel (frame18, _, "$parentNoAlertsLabel", "NoAlertsLabel", "No Window Alerts", "GameFontHighlightLeft")
|
||||
g:NewSwitch (frame18, _, "$parentNoAlertsSlider", "NoAlertsSlider", 60, 20, _, _, _detalhes.streamer_config.no_alerts, nil, nil, nil, nil, options_switch_template)
|
||||
|
||||
frame18.NoAlertsSlider:SetPoint ("left", frame18.NoAlertsLabel, "right", 2)
|
||||
frame18.NoAlertsSlider:SetAsCheckBox()
|
||||
frame18.NoAlertsSlider.OnSwitch = function (_, _, value)
|
||||
_detalhes.streamer_config.no_alerts = not _detalhes.streamer_config.no_alerts
|
||||
_detalhes:SendOptionsModifiedEvent (DetailsOptionsWindow.instance)
|
||||
end
|
||||
|
||||
window:CreateLineBackground2 (frame18, "NoAlertsSlider", "NoAlertsLabel", "Don't show alerts in the bottom of the window and avoid show tutorial popups.")
|
||||
|
||||
--> faster updates
|
||||
g:NewLabel (frame18, _, "$parentFasterUpdatesLabel", "FasterUpdatesLabel", "60 Updates Per Second", "GameFontHighlightLeft")
|
||||
g:NewSwitch (frame18, _, "$parentFasterUpdatesSlider", "FasterUpdatesSlider", 60, 20, _, _, _detalhes.streamer_config.faster_updates, nil, nil, nil, nil, options_switch_template)
|
||||
|
||||
frame18.FasterUpdatesSlider:SetPoint ("left", frame18.FasterUpdatesLabel, "right", 2)
|
||||
frame18.FasterUpdatesSlider:SetAsCheckBox()
|
||||
frame18.FasterUpdatesSlider.OnSwitch = function (_, _, value)
|
||||
_detalhes.streamer_config.faster_updates = not _detalhes.streamer_config.faster_updates
|
||||
_detalhes:RefreshUpdater()
|
||||
_detalhes:SendOptionsModifiedEvent (DetailsOptionsWindow.instance)
|
||||
end
|
||||
|
||||
window:CreateLineBackground2 (frame18, "FasterUpdatesSlider", "FasterUpdatesLabel", "Increase the refresh rate to 60 times per second.")
|
||||
|
||||
--> quick detection
|
||||
g:NewLabel (frame18, _, "$parentQuickDetectionLabel", "QuickDetectionLabel", "Quick Player Info", "GameFontHighlightLeft")
|
||||
g:NewSwitch (frame18, _, "$parentQuickDetectionSlider", "QuickDetectionSlider", 60, 20, _, _, _detalhes.streamer_config.quick_detection, nil, nil, nil, nil, options_switch_template)
|
||||
|
||||
frame18.QuickDetectionSlider:SetPoint ("left", frame18.QuickDetectionLabel, "right", 2)
|
||||
frame18.QuickDetectionSlider:SetAsCheckBox()
|
||||
frame18.QuickDetectionSlider.OnSwitch = function (_, _, value)
|
||||
_detalhes.streamer_config.quick_detection = not _detalhes.streamer_config.quick_detection
|
||||
_detalhes:SendOptionsModifiedEvent (DetailsOptionsWindow.instance)
|
||||
end
|
||||
|
||||
window:CreateLineBackground2 (frame18, "QuickDetectionSlider", "QuickDetectionLabel", "Attempt to acquire player information such as class, spec or item level faster.")
|
||||
|
||||
--> disable mythic dungeon
|
||||
g:NewLabel (frame18, _, "$parentDisableMythicDungeonLabel", "DisableMythicDungeonLabel", "No Mythic Dungeon Shenanigans", "GameFontHighlightLeft")
|
||||
g:NewSwitch (frame18, _, "$parentDisableMythicDungeonSlider", "DisableMythicDungeonSlider", 60, 20, _, _, _detalhes.streamer_config.disable_mythic_dungeon, nil, nil, nil, nil, options_switch_template)
|
||||
|
||||
frame18.DisableMythicDungeonSlider:SetPoint ("left", frame18.DisableMythicDungeonLabel, "right", 2)
|
||||
frame18.DisableMythicDungeonSlider:SetAsCheckBox()
|
||||
frame18.DisableMythicDungeonSlider.OnSwitch = function (_, _, value)
|
||||
_detalhes.streamer_config.disable_mythic_dungeon = not _detalhes.streamer_config.disable_mythic_dungeon
|
||||
_detalhes:SendOptionsModifiedEvent (DetailsOptionsWindow.instance)
|
||||
end
|
||||
|
||||
window:CreateLineBackground2 (frame18, "DisableMythicDungeonSlider", "DisableMythicDungeonLabel", "Threat mythic dungeon as a normal dungeon: no trash merge, no mythic run overall segment.")
|
||||
|
||||
--> clear cache
|
||||
g:NewLabel (frame18, _, "$parentClearCacheLabel", "ClearCacheLabel", "Clear Cache on New Event", "GameFontHighlightLeft")
|
||||
g:NewSwitch (frame18, _, "$parentClearCacheSlider", "ClearCacheSlider", 60, 20, _, _, _detalhes.streamer_config.reset_spec_cache, nil, nil, nil, nil, options_switch_template)
|
||||
|
||||
frame18.ClearCacheSlider:SetPoint ("left", frame18.ClearCacheLabel, "right", 2)
|
||||
frame18.ClearCacheSlider:SetAsCheckBox()
|
||||
frame18.ClearCacheSlider.OnSwitch = function (_, _, value)
|
||||
_detalhes.streamer_config.reset_spec_cache = not _detalhes.streamer_config.reset_spec_cache
|
||||
_detalhes:SendOptionsModifiedEvent (DetailsOptionsWindow.instance)
|
||||
end
|
||||
|
||||
window:CreateLineBackground2 (frame18, "ClearCacheSlider", "ClearCacheLabel", "Reduces the chance of getting a serial number overlap when working with multiple realms.")
|
||||
|
||||
--> advanced animations
|
||||
g:NewLabel (frame18, _, "$parentAdvancedAnimationsLabel", "AdvancedAnimationsLabel", "Use Animation Acceleration", "GameFontHighlightLeft")
|
||||
g:NewSwitch (frame18, _, "$parentAdvancedAnimationsSlider", "AdvancedAnimationsSlider", 60, 20, _, _, _detalhes.streamer_config.use_animation_accel, nil, nil, nil, nil, options_switch_template)
|
||||
|
||||
frame18.AdvancedAnimationsSlider:SetPoint ("left", frame18.AdvancedAnimationsLabel, "right", 2)
|
||||
frame18.AdvancedAnimationsSlider:SetAsCheckBox()
|
||||
frame18.AdvancedAnimationsSlider.OnSwitch = function (_, _, value)
|
||||
_detalhes.streamer_config.use_animation_accel = not _detalhes.streamer_config.use_animation_accel
|
||||
_detalhes:RefreshAnimationFunctions()
|
||||
_detalhes:SendOptionsModifiedEvent (DetailsOptionsWindow.instance)
|
||||
end
|
||||
|
||||
window:CreateLineBackground2 (frame18, "AdvancedAnimationsSlider", "AdvancedAnimationsLabel", "Animation speed changes accordly to the amount of space the bar needs to travel.")
|
||||
|
||||
|
||||
--> anchoring
|
||||
local x = window.left_start_at
|
||||
titleFrame18:SetPoint (x, window.title_y_pos)
|
||||
titleFrame18Desc:SetPoint (x, window.title_y_pos2)
|
||||
|
||||
local a = frame18:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
frame18.a = a
|
||||
|
||||
local left_side = {
|
||||
{"streamerPluginAnchor", 0, true},
|
||||
|
||||
{"eventTrackerAnchor", 0, true},
|
||||
{"eventTrackerAnchor", 0, true},
|
||||
{"eventTrackerAnchor", 0, true},
|
||||
{"eventTrackerAnchor", 0, true},
|
||||
{"eventTrackerAnchor", 0, true},
|
||||
|
||||
}
|
||||
|
||||
window:arrange_menu (frame18, left_side, x, window.top_start_at)
|
||||
|
||||
local right_side = {
|
||||
{"currentDPSAnchor", 0, true},
|
||||
{"alertsAndPopupsAnchor", 0, true},
|
||||
{"alertsAndPopupsAnchor", 0, true},
|
||||
{"alertsAndPopupsAnchor", 0, true},
|
||||
{"alertsAndPopupsAnchor", 0, true},
|
||||
{"alertsAndPopupsAnchor", 0, true},
|
||||
{"NoAlertsLabel"},
|
||||
{"FasterUpdatesLabel"},
|
||||
{"QuickDetectionLabel"},
|
||||
{"DisableMythicDungeonLabel"},
|
||||
{"ClearCacheLabel"},
|
||||
{"AdvancedAnimationsLabel"},
|
||||
}
|
||||
|
||||
window:arrange_menu (frame18, right_side, window.right_start_at, window.top_start_at)
|
||||
@@ -11339,6 +11618,16 @@ end --> if not window
|
||||
--> window 16
|
||||
_G.DetailsOptionsWindow16UserTimeCapturesFillPanel.MyObject:Refresh()
|
||||
|
||||
--> window 18
|
||||
_G.DetailsOptionsWindow18EventTrackerSlider.MyObject:SetValue (_detalhes.event_tracker.enabled)
|
||||
_G.DetailsOptionsWindow18CurrentDPSSlider.MyObject:SetValue (_detalhes.current_dps_meter.enabled)
|
||||
_G.DetailsOptionsWindow18NoAlertsSlider.MyObject:SetValue (_detalhes.streamer_config.no_alerts)
|
||||
_G.DetailsOptionsWindow18FasterUpdatesSlider.MyObject:SetValue (_detalhes.streamer_config.faster_updates)
|
||||
_G.DetailsOptionsWindow18QuickDetectionSlider.MyObject:SetValue (_detalhes.streamer_config.quick_detection)
|
||||
_G.DetailsOptionsWindow18DisableMythicDungeonSlider.MyObject:SetValue (_detalhes.streamer_config.disable_mythic_dungeon)
|
||||
_G.DetailsOptionsWindow18ClearCacheSlider.MyObject:SetValue (_detalhes.streamer_config.reset_spec_cache)
|
||||
_G.DetailsOptionsWindow18AdvancedAnimationsSlider.MyObject:SetValue (_detalhes.streamer_config.use_animation_accel)
|
||||
|
||||
--> window 17
|
||||
_G.DetailsOptionsWindow17CombatAlphaDropdown.MyObject:Select (editing_instance.hide_in_combat_type, true)
|
||||
_G.DetailsOptionsWindow17HideOnCombatAlphaSlider.MyObject:SetFixedParameter (editing_instance)
|
||||
|
||||
@@ -1493,8 +1493,7 @@ local resize_scripts_onmousedown = function (self, button)
|
||||
_detalhes:SendEvent ("DETAILS_INSTANCE_STARTRESIZE", nil, self._instance)
|
||||
|
||||
if (_detalhes.update_speed > 0.3) then
|
||||
_detalhes:CancelTimer (_detalhes.atualizador)
|
||||
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", 0.3, -1)
|
||||
_detalhes:SetWindowUpdateSpeed (0.3, true)
|
||||
_detalhes.resize_changed_update_speed = true
|
||||
end
|
||||
|
||||
@@ -1591,8 +1590,7 @@ local resize_scripts_onmouseup = function (self, button)
|
||||
end
|
||||
|
||||
if (_detalhes.resize_changed_update_speed) then
|
||||
_detalhes:CancelTimer (_detalhes.atualizador)
|
||||
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", _detalhes.update_speed, -1)
|
||||
_detalhes:SetWindowUpdateSpeed (false, true)
|
||||
_detalhes.resize_changed_update_speed = nil
|
||||
end
|
||||
|
||||
@@ -2636,8 +2634,7 @@ local function button_stretch_scripts (baseframe, backgrounddisplay, instancia)
|
||||
|
||||
--> change the update speed
|
||||
if (_detalhes.update_speed > 0.3) then
|
||||
_detalhes:CancelTimer (_detalhes.atualizador)
|
||||
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", 0.3, -1)
|
||||
_detalhes:SetWindowUpdateSpeed (0.3, true)
|
||||
_detalhes.stretch_changed_update_speed = true
|
||||
end
|
||||
|
||||
@@ -2723,8 +2720,7 @@ local function button_stretch_scripts (baseframe, backgrounddisplay, instancia)
|
||||
_detalhes:SendEvent ("DETAILS_INSTANCE_ENDSTRETCH", nil, instancia)
|
||||
|
||||
if (_detalhes.stretch_changed_update_speed) then
|
||||
_detalhes:CancelTimer (_detalhes.atualizador)
|
||||
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", _detalhes.update_speed, -1)
|
||||
_detalhes:SetWindowUpdateSpeed (false, true)
|
||||
_detalhes.stretch_changed_update_speed = nil
|
||||
end
|
||||
|
||||
@@ -2991,6 +2987,10 @@ end
|
||||
|
||||
function _detalhes:InstanceAlert (msg, icon, time, clickfunc, doflash)
|
||||
|
||||
if (_detalhes.streamer_config.no_alerts) then
|
||||
return
|
||||
end
|
||||
|
||||
if (not self.meu_id) then
|
||||
local lower = _detalhes:GetLowerInstanceNumber()
|
||||
if (lower) then
|
||||
|
||||
Binary file not shown.
+49
-2
@@ -133,7 +133,7 @@ function _G._detalhes:Start()
|
||||
end
|
||||
|
||||
self:AtualizaGumpPrincipal (-1, true)
|
||||
self.atualizador = self:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", _detalhes.update_speed, -1)
|
||||
_detalhes:RefreshUpdater()
|
||||
|
||||
for index = 1, #self.tabela_instancias do
|
||||
local instance = self.tabela_instancias [index]
|
||||
@@ -571,6 +571,7 @@ function _G._detalhes:Start()
|
||||
local segment = segmentsToMerge [i]
|
||||
if (segment == _detalhes.tabela_vigente) then
|
||||
_detalhes:Msg ("unhandled exception > merged trash segment is current segment > MergeTrashCleanup() is scheduled:", isFromSchedule)
|
||||
--happened after killing one mob and leaving the dungeon, lots of /reload has done inside the dungeon
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1040,10 +1041,27 @@ function _G._detalhes:Start()
|
||||
|
||||
elseif (event == "CHALLENGE_MODE_START") then
|
||||
--> CHALLENGE_MODE_START does trigger every time the player enters a mythic dungeon already in progress
|
||||
|
||||
|
||||
--> send mythic dungeon start event
|
||||
local zoneName, instanceType, difficultyID, difficultyName, maxPlayers, dynamicDifficulty, isDynamic, instanceMapID, instanceGroupSize = GetInstanceInfo()
|
||||
if (difficultyID == 8) then
|
||||
_detalhes:SendEvent ("COMBAT_MYTHICDUNGEON_START")
|
||||
end
|
||||
|
||||
if (newFrame.DevelopmentDebug) then
|
||||
print ("Details!", event, ...)
|
||||
end
|
||||
|
||||
--> reset spec cache if broadcaster requested
|
||||
if (_detalhes.streamer_config.reset_spec_cache) then
|
||||
wipe (_detalhes.cached_specs)
|
||||
end
|
||||
|
||||
--> ignore the event if ignoring mythic dungeon special treatment
|
||||
if (_detalhes.streamer_config.disable_mythic_dungeon) then
|
||||
return
|
||||
end
|
||||
|
||||
C_Timer.After (0.5, newFrame.OnChallengeModeStart)
|
||||
|
||||
elseif (event == "CHALLENGE_MODE_COMPLETED") then
|
||||
@@ -1051,6 +1069,17 @@ function _G._detalhes:Start()
|
||||
print ("Details!", event, ...)
|
||||
end
|
||||
|
||||
--> send mythic dungeon end event
|
||||
local zoneName, instanceType, difficultyID, difficultyName, maxPlayers, dynamicDifficulty, isDynamic, instanceMapID, instanceGroupSize = GetInstanceInfo()
|
||||
if (difficultyID == 8) then
|
||||
_detalhes:SendEvent ("COMBAT_MYTHICDUNGEON_END")
|
||||
end
|
||||
|
||||
--> ignore the event if ignoring mythic dungeon special treatment
|
||||
if (_detalhes.streamer_config.disable_mythic_dungeon) then
|
||||
return
|
||||
end
|
||||
|
||||
--> delay to wait the encounter_end trigger first
|
||||
--> assuming here the party cleaned the mobs kill objective before going to kill the last boss
|
||||
C_Timer.After (2, newFrame.MythicDungeonFinished)
|
||||
@@ -1060,6 +1089,11 @@ function _G._detalhes:Start()
|
||||
print ("Details!", event, ...)
|
||||
end
|
||||
|
||||
--> ignore the event if ignoring mythic dungeon special treatment
|
||||
if (_detalhes.streamer_config.disable_mythic_dungeon) then
|
||||
return
|
||||
end
|
||||
|
||||
if (newFrame.IsDoingMythicDungeon) then
|
||||
local encounterID, encounterName, difficultyID, raidSize, endStatus = ...
|
||||
if (endStatus == 1) then
|
||||
@@ -1100,11 +1134,21 @@ function _G._detalhes:Start()
|
||||
print ("Details!", event, ...)
|
||||
print ("Zone changed and is Doing Mythic Dungeon")
|
||||
end
|
||||
|
||||
--> ignore the event if ignoring mythic dungeon special treatment
|
||||
if (_detalhes.streamer_config.disable_mythic_dungeon) then
|
||||
return
|
||||
end
|
||||
|
||||
local _, _, difficulty, _, _, _, _, currentZoneID = GetInstanceInfo()
|
||||
if (currentZoneID ~= self.MythicPlus.DungeonID) then
|
||||
if (newFrame.DevelopmentDebug) then
|
||||
print ("Zone changed and the zone is different than the dungeon")
|
||||
end
|
||||
|
||||
--> send mythic dungeon end event
|
||||
_detalhes:SendEvent ("COMBAT_MYTHICDUNGEON_END")
|
||||
|
||||
--> finish the segment
|
||||
newFrame.BossDefeated (true)
|
||||
|
||||
@@ -1450,6 +1494,9 @@ function _G._detalhes:Start()
|
||||
_detalhes:OpenWelcomeWindow()
|
||||
end
|
||||
|
||||
--> load broadcaster tools
|
||||
_detalhes:LoadFramesForBroadcastTools()
|
||||
|
||||
--_detalhes:OpenWelcomeWindow() --debug
|
||||
-- /run _detalhes:OpenWelcomeWindow()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user