diff --git a/boot.lua b/boot.lua index 9c53bd8a..7018018b 100644 --- a/boot.lua +++ b/boot.lua @@ -7,7 +7,7 @@ --> global name declaration _detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0") - _detalhes.userversion = "v1.4.0" + _detalhes.userversion = "v1.4.6" _detalhes.version = "Alpha 006" _detalhes.realversion = 6 diff --git a/classes/classe_damage.lua b/classes/classe_damage.lua index 72e8688c..b8cf3d7b 100644 --- a/classes/classe_damage.lua +++ b/classes/classe_damage.lua @@ -453,13 +453,17 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex --> organiza as tabelas - if (_detalhes.in_combat) then + if (_detalhes.in_combat and instancia.segmento == 0) then using_cache = true end - if (using_cache and instancia.segmento == 0) then + if (using_cache) then conteudo = _detalhes.cache_damage_group + if (#conteudo < 1) then + return _detalhes:EsconderBarrasNaoUsadas (instancia, showing) + end + _table_sort (conteudo, _detalhes.SortKeySimple) if (conteudo[1][keyName] < 1) then @@ -2114,8 +2118,8 @@ function atributo_damage:FF_funcao_de_criacao (_, _, link) return tabela end -function atributo_damage:ColetarLixo() - return _detalhes:ColetarLixo (class_type) +function atributo_damage:ColetarLixo (lastevent) + return _detalhes:ColetarLixo (class_type, lastevent) end local function ReconstroiMapa (tabela) diff --git a/classes/classe_energy.lua b/classes/classe_energy.lua index 662decdd..d6af65a0 100644 --- a/classes/classe_energy.lua +++ b/classes/classe_energy.lua @@ -658,8 +658,8 @@ function atributo_energy:Iniciar (iniciar) return false --retorna se o dps esta aberto ou fechado para este jogador end -function atributo_energy:ColetarLixo() - return _detalhes:ColetarLixo (class_type) +function atributo_energy:ColetarLixo (lastevent) + return _detalhes:ColetarLixo (class_type, lastevent) end local function ReconstroiMapa (tabela) diff --git a/classes/classe_heal.lua b/classes/classe_heal.lua index 8368e73e..56f1a022 100644 --- a/classes/classe_heal.lua +++ b/classes/classe_heal.lua @@ -119,7 +119,7 @@ function atributo_heal:RefreshWindow (instancia, tabela_do_combate, forcar, expo --> não há barras para mostrar -- not have something to show if (#showing._ActorTable < 1) then --> não há barras para mostrar --> colocado isso recentemente para fazer as barras de dano sumirem na troca de atributo - return _detalhes:EsconderBarrasNaoUsadas (instancia, showing) + return _detalhes:EsconderBarrasNaoUsadas (instancia, showing) end --> total @@ -205,12 +205,17 @@ function atributo_heal:RefreshWindow (instancia, tabela_do_combate, forcar, expo elseif (instancia.modo == modo_GROUP) then --> mostrando GROUP - if (_detalhes.in_combat) then + if (_detalhes.in_combat and instancia.segmento == 0) then using_cache = true end - if (using_cache and instancia.segmento == 0) then + if (using_cache) then + conteudo = _detalhes.cache_healing_group + + if (#conteudo < 1) then + return _detalhes:EsconderBarrasNaoUsadas (instancia, showing) + end _detalhes:ContainerSort (conteudo, nil, keyName) @@ -1353,8 +1358,8 @@ function atributo_heal:Iniciar (iniciar) end end -function atributo_heal:ColetarLixo() - return _detalhes:ColetarLixo (class_type) +function atributo_heal:ColetarLixo (lastevent) + return _detalhes:ColetarLixo (class_type, lastevent) end function _detalhes.refresh:r_atributo_heal (este_jogador, shadow) diff --git a/classes/classe_instancia.lua b/classes/classe_instancia.lua index 4fdc30d9..bfab84e8 100644 --- a/classes/classe_instancia.lua +++ b/classes/classe_instancia.lua @@ -620,6 +620,7 @@ function _detalhes:SnapTextures (remove) end --> cria uma janela para uma nova instância + --> search key: ~new ~nova function _detalhes:NovaInstancia (ID) -- Uma nova instância será uma extensão do acetimer somada com uma cópia da classe detalhes_funções @@ -662,6 +663,13 @@ end nova_instancia.bar_mod = 0 nova_instancia.bgdisplay_loc = 0 + nova_instancia.bg_alpha = _detalhes.default_bg_alpha + nova_instancia.bg_r = _detalhes.default_bg_color + nova_instancia.bg_g = _detalhes.default_bg_color + nova_instancia.bg_b = _detalhes.default_bg_color + + nova_instancia.auto_current = true + nova_instancia.barrasInfo["alturaReal"] = nova_instancia.barrasInfo.altura+nova_instancia.barrasInfo.espaco.entre nova_instancia.posicao = { @@ -764,12 +772,22 @@ end ------------------------------------------------------------------------------------------------------------------------ --> ao reiniciar o addon esta função é rodada para recriar a janela da instância +--> search key: ~restaura function _detalhes:RestauraJanela (index, temp) --if (index ~= self.meu_id) then --print ("DEBUG: Algo de errado, o index esta diferente do meu_id") --end + self.bg_alpha = self.bg_alpha or _detalhes.default_bg_alpha + self.bg_r = self.bg_r or _detalhes.default_bg_color + self.bg_g = self.bg_g or _detalhes.default_bg_color + self.bg_b = self.bg_b or _detalhes.default_bg_color + + if (self.auto_current == nil) then + self.auto_current = true + end + local _baseframe, _bgframe, _bgframe_display, _scrollframe = gump:CriaJanelaPrincipal (self.meu_id, self) self.baseframe = _baseframe @@ -848,19 +866,19 @@ function _detalhes:RestauraJanela (index, temp) self.StatusBarSaved.center = "DETAILS_STATUSBAR_PLUGIN_CLOCK" end local clock = _detalhes.StatusBar:CreateStatusBarChildForInstance (self, self.StatusBarSaved.center or "DETAILS_STATUSBAR_PLUGIN_CLOCK") - _detalhes.StatusBar:SetCenterPlugin (self, clock) + _detalhes.StatusBar:SetCenterPlugin (self, clock, true) if (self.StatusBarSaved.left and self.StatusBarSaved.left == "NONE") then self.StatusBarSaved.left = "DETAILS_STATUSBAR_PLUGIN_PSEGMENT" end local segment = _detalhes.StatusBar:CreateStatusBarChildForInstance (self, self.StatusBarSaved.left or "DETAILS_STATUSBAR_PLUGIN_PSEGMENT") - _detalhes.StatusBar:SetLeftPlugin (self, segment) + _detalhes.StatusBar:SetLeftPlugin (self, segment, true) if (self.StatusBarSaved.right and self.StatusBarSaved.right == "NONE") then self.StatusBarSaved.right = "DETAILS_STATUSBAR_PLUGIN_PDPS" end local dps = _detalhes.StatusBar:CreateStatusBarChildForInstance (self, self.StatusBarSaved.right or "DETAILS_STATUSBAR_PLUGIN_PDPS") - _detalhes.StatusBar:SetRightPlugin (self, dps) + _detalhes.StatusBar:SetRightPlugin (self, dps, true) -- if (not self.last_modo) then @@ -909,6 +927,20 @@ function _detalhes:RefreshBars (instance) end end +function _detalhes:SetBackgroundColor (...) + local r, g, b = gump:ParseColors (...) + self.bgdisplay:SetBackdropColor (r, g, b, self.bg_alpha or _detalhes.default_bg_alpha) + self.bg_r = r + self.bg_g = g + self.bg_b = b +end + +function _detalhes:SetBackgroundAlpha (alpha) + alpha = alpha or _detalhes.default_bg_alpha + self.bgdisplay:SetBackdropColor (self.bg_r or _detalhes.default_bg_color, self.bg_g or _detalhes.default_bg_color, self.bg_b or _detalhes.default_bg_color, alpha) + self.bg_alpha = alpha +end + function _detalhes:GetSize() return self.bgframe:GetWidth(), self.bgframe:GetHeight() end @@ -934,6 +966,33 @@ end ------------------------------------------------------------------------------------------------------------------------ +function _detalhes:HaveOneCurrentInstance() + + local have = false + for _, instance in _ipairs (_detalhes.tabela_instancias) do + if (instance.ativa and instance.baseframe and instance.segmento == 0) then + return + end + end + + local lower = _detalhes:GetLowerInstanceNumber() + if (lower) then + local instance = _detalhes:GetInstance (lower) + if (instance and instance.auto_current) then + instance:TrocaTabela (0) --> muda o segmento pra current + return instance:InstanceAlert (Loc ["STRING_CHANGED_TO_CURRENT"], {[[Interface\GossipFrame\TrainerGossipIcon]], 18, 18, false}, 6) + else + for _, instance in _ipairs (_detalhes.tabela_instancias) do + if (instance.ativa and instance.baseframe and instance.segmento ~= 0 and instance.auto_current) then + instance:TrocaTabela (0) --> muda o segmento pra current + return instance:InstanceAlert (Loc ["STRING_CHANGED_TO_CURRENT"], {[[Interface\GossipFrame\TrainerGossipIcon]], 18, 18, false}, 6) + end + end + end + end + +end + function _detalhes:Freeze (instancia) if (not instancia) then @@ -1048,7 +1107,7 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini local update_coolTip = false if (segmento == -2) then --> clicou para mudar de segmento - segmento = instancia.segmento+1 + segmento = instancia.segmento + 1 if (segmento > _detalhes.segments_amount) then segmento = -1 @@ -1515,6 +1574,39 @@ function _detalhes:AlteraModo (instancia, qual) _detalhes.popup:Select (1, checked) end +local function GetDpsHps (_thisActor, key) + + local keyname + if (key == "dps") then + keyname = "last_dps" + elseif (key == "hps") then + keyname = "last_hps" + end + + if (_thisActor [keyname]) then + return _thisActor [keyname] + else + if ((_detalhes.time_type == 2 and _thisActor.grupo) or not _detalhes:CaptureGet ("damage")) then + local dps = _thisActor.total / _thisActor:GetCombatTime() + _thisActor [keyname] = dps + return dps + else + if (not _thisActor.on_hold) then + local dps = _thisActor.total/_thisActor:Tempo() --calcula o dps deste objeto + _thisActor [keyname] = dps --salva o dps dele + return dps + else + if (_thisActor [keyname] == 0) then --> não calculou o dps dele ainda mas entrou em standby + local dps = _thisActor.total/_thisActor:Tempo() + _thisActor [keyname] = dps + return dps + else + return _thisActor [keyname] + end + end + end + end +end --> Reportar o que esta na janela da instância function _detalhes:monta_relatorio (este_relatorio, custom) @@ -1546,11 +1638,23 @@ function _detalhes:monta_relatorio (este_relatorio, custom) local is_current = _G ["Details_Report_CB_1"]:GetChecked() local is_reverse = _G ["Details_Report_CB_2"]:GetChecked() + if (not _detalhes.fontstring_len) then + _detalhes.fontstring_len = _detalhes.listener:CreateFontString (nil, "background", "GameFontNormal") + end + local _, fontSize = FCF_GetChatWindowInfo (1) + local fonte, _, flags = _detalhes.fontstring_len:GetFont() + _detalhes.fontstring_len:SetFont (fonte, fontSize, flags) + _detalhes.fontstring_len:SetText ("hello details!") + local default_len = _detalhes.fontstring_len:GetStringWidth() + + --> pegar a font do chat + --_detalhes.fontstring_len: + if (not is_reverse) then if (not is_current) then --> assumindo que self é sempre uma instância aqui. - local total, keyName, first + local total, keyName, keyNameSec, first local atributo = self.atributo local container = self.showing [atributo]._ActorTable @@ -1566,9 +1670,15 @@ function _detalhes:monta_relatorio (este_relatorio, custom) keyName = "frag" else total, keyName, first = _detalhes.atributo_damage:RefreshWindow (self, self.showing, true, true) + if (self.sub_atributo == 1) then + keyNameSec = "dps" + end end elseif (atributo == 2) then --> heal total, keyName, first = _detalhes.atributo_heal:RefreshWindow (self, self.showing, true, true) + if (self.sub_atributo == 1) then + keyNameSec = "hps" + end elseif (atributo == 3) then --> energy total, keyName, first = _detalhes.atributo_energy:RefreshWindow (self, self.showing, true, true) elseif (atributo == 4) then --> misc @@ -1595,9 +1705,26 @@ function _detalhes:monta_relatorio (este_relatorio, custom) if (_thisActor) then local amount = _thisActor [keyName] if (_type (amount) == "number" and amount > 0) then --1236 - report_lines [#report_lines+1] = i..".".. _thisActor.nome.." ".. _detalhes:comma_value ( _math_floor (amount) ).." (".._cstr ("%.1f", amount/total*100).."%)" + if (keyNameSec) then + local dps = GetDpsHps (_thisActor, keyNameSec) + + local name = _thisActor.nome.." " + + _detalhes.fontstring_len:SetText (name) + local stringlen = _detalhes.fontstring_len:GetStringWidth() + + while (stringlen < default_len) do + name = name .. "." + _detalhes.fontstring_len:SetText (name) + stringlen = _detalhes.fontstring_len:GetStringWidth() + end + + report_lines [#report_lines+1] = i..". ".. name .." ".. _cstr ("%.2f", amount/total*100) .. "% (" .. _math_floor (dps) .. ", " .. _detalhes:ToK ( _math_floor (amount) ) .. ")" + else + report_lines [#report_lines+1] = i..". ".. _thisActor.nome.." ".. _detalhes:comma_value ( _math_floor (amount) ).." (".._cstr ("%.1f", amount/total*100).."%)" + end elseif (_type (amount) == "string") then - report_lines [#report_lines+1] = i..".".. _thisActor.nome.." ".. amount + report_lines [#report_lines+1] = i..". ".. _thisActor.nome.." ".. amount else break end @@ -1643,10 +1770,16 @@ function _detalhes:monta_relatorio (este_relatorio, custom) container = reportarFrags keyName = "frag" else + if (self.sub_atributo == 1) then + keyNameSec = "dps" + end total, keyName, first = _detalhes.atributo_damage:RefreshWindow (self, self.showing, true, true) end elseif (atributo == 2) then --> heal total, keyName, first = _detalhes.atributo_heal:RefreshWindow (self, self.showing, true, true) + if (self.sub_atributo == 1) then + keyNameSec = "hps" + end elseif (atributo == 3) then --> energy total, keyName, first = _detalhes.atributo_energy:RefreshWindow (self, self.showing, true, true) elseif (atributo == 4) then --> misc @@ -1674,7 +1807,24 @@ function _detalhes:monta_relatorio (este_relatorio, custom) if (_type (amount) == "number") then if (amount > 0) then - report_lines [#report_lines+1] = i..".".. _thisActor.nome.." ".. _detalhes:comma_value ( _math_floor (amount) ).." (".._cstr ("%.1f", amount/total*100).."%)" + if (keyNameSec) then + local dps = GetDpsHps (_thisActor, keyNameSec) + + local name = _thisActor.nome.." " + + _detalhes.fontstring_len:SetText (name) + local stringlen = _detalhes.fontstring_len:GetStringWidth() + + while (stringlen < default_len) do + name = name .. "." + _detalhes.fontstring_len:SetText (name) + stringlen = _detalhes.fontstring_len:GetStringWidth() + end + + report_lines [#report_lines+1] = i..". ".. name .." ".. _cstr ("%.2f", amount/total*100) .. "% (" .. _math_floor (dps) .. ", " .. _detalhes:ToK ( _math_floor (amount) ) .. ")" + else + report_lines [#report_lines+1] = i..".".. _thisActor.nome.." ".. _detalhes:comma_value ( _math_floor (amount) ).." (".._cstr ("%.1f", amount/total*100).."%)" + end quantidade = quantidade + 1 if (quantidade == amt) then break @@ -1782,6 +1932,13 @@ function _detalhes:envia_relatorio (linhas, custom) end linhas[1] = linhas[1] .. ". " .. Loc ["STRING_REPORT_FIGHT"] .. ": " .. luta + + end + + if (_detalhes.time_type == 2) then + linhas[1] = linhas[1] .. " (Co)" + else + linhas[1] = linhas[1] .. " (Cr)" end local editbox = _detalhes.janela_report.editbox @@ -1809,6 +1966,7 @@ function _detalhes:envia_relatorio (linhas, custom) for i = 1, #linhas do _SendChatMessage (linhas[i], "CHANNEL", nil, _GetChannelName (channel)) end + return elseif (to_who == "WHISPER") then --> whisper @@ -1848,6 +2006,14 @@ function _detalhes:envia_relatorio (linhas, custom) return end + if (to_who == "RAID") then + --LE_PARTY_CATEGORY_HOME - default + --LE_PARTY_CATEGORY_INSTANCE - player's automatic group, raid finder?. + if (GetNumGroupMembers (LE_PARTY_CATEGORY_INSTANCE) > 0) then + to_who = "INSTANCE_CHAT" + end + end + for i = 1, #linhas do _SendChatMessage (linhas[i], to_who) end diff --git a/classes/classe_others.lua b/classes/classe_others.lua index 7d4328cf..43b546d8 100644 --- a/classes/classe_others.lua +++ b/classes/classe_others.lua @@ -1198,8 +1198,8 @@ function atributo_misc:Iniciar (iniciar) return false --retorna se o dps esta aberto ou fechado para este jogador end -function atributo_misc:ColetarLixo() - return _detalhes:ColetarLixo (class_type) +function atributo_misc:ColetarLixo (lastevent) + return _detalhes:ColetarLixo (class_type, lastevent) end local function ReconstroiMapa (tabela) diff --git a/classes/container_combatentes.lua b/classes/container_combatentes.lua index 618fcdb8..763220c2 100644 --- a/classes/container_combatentes.lua +++ b/classes/container_combatentes.lua @@ -245,9 +245,9 @@ function container_combatentes:PegarCombatente (serial, nome, flag, criar, isOwn -- tipo do container ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - if (self.tipo == container_playernpc) then --> CONTAINER COMUM + --if (self.tipo == container_playernpc) then --> CONTAINER COMUM - elseif (self.tipo == container_damage) then --> CONTAINER DAMAGE + if (self.tipo == container_damage) then --> CONTAINER DAMAGE get_class_ (novo_objeto, nome, flag) diff --git a/classes/container_historico.lua b/classes/container_historico.lua index 3e3b6741..04b27cd4 100644 --- a/classes/container_historico.lua +++ b/classes/container_historico.lua @@ -45,9 +45,14 @@ function historico:adicionar (tabela) if (index < 3) then for _, jogador in ipairs (container._ActorTable) do - --> limpeza + --> remover a tabela de last events jogador.last_events_table = nil + --> verifica se ele ainda esta registrado na time machine + if (jogador.timeMachine) then + jogador:DesregistrarNaTimeMachine() + end + end else break @@ -61,18 +66,32 @@ function historico:adicionar (tabela) --> verifica se precisa apagar a última tabela do histórico if (#self.tabelas > _detalhes.segments_amount) then - -- BETA subtração do combate overall - _detalhes.tabela_overall = _detalhes.tabela_overall - self.tabelas [#self.tabelas] - _detalhes.tabela_overall.start_time = _detalhes.tabela_overall.start_time + (self.tabelas[#self.tabelas].end_time-self.tabelas[#self.tabelas].start_time) - --print (#self.tabelas) + local combat_removed = self.tabelas [#self.tabelas] + + --> diminuir quantidades no overall + _detalhes.tabela_overall = _detalhes.tabela_overall - combat_removed + _detalhes.tabela_overall.start_time = _detalhes.tabela_overall.start_time + (combat_removed.end_time-combat_removed.start_time) - local amt_mortes = #self.tabelas[#self.tabelas].last_events_tables --> quantas mortes teve nessa luta + local amt_mortes = #combat_removed.last_events_tables --> quantas mortes teve nessa luta if (amt_mortes > 0) then for i = #_detalhes.tabela_overall.last_events_tables, #_detalhes.tabela_overall.last_events_tables-amt_mortes, -1 do _table_remove (_detalhes.tabela_overall.last_events_tables, #_detalhes.tabela_overall.last_events_tables) end end + --> verificar novamente a time machine + for _, jogador in ipairs (combat_removed [1]._ActorTable) do --> damage + if (jogador.timeMachine) then + jogador:DesregistrarNaTimeMachine() + end + end + for _, jogador in ipairs (combat_removed [2]._ActorTable) do --> heal + if (jogador.timeMachine) then + jogador:DesregistrarNaTimeMachine() + end + end + + --> remover _table_remove (self.tabelas, #self.tabelas) _detalhes:SendEvent ("DETAILS_DATA_SEGMENTREMOVED", nil, nil) diff --git a/core/control.lua b/core/control.lua index 23c843d9..05ad4007 100644 --- a/core/control.lua +++ b/core/control.lua @@ -258,9 +258,11 @@ end _detalhes:SendEvent ("COMBAT_PLAYER_ENTER", nil, _detalhes.tabela_vigente) + + _detalhes:HaveOneCurrentInstance() end - function _detalhes:SairDoCombate() + function _detalhes:SairDoCombate (bossKilled) --> pega a zona do jogador e vê se foi uma luta contra um Boss -- identifica se a luta foi com um boss if (not _detalhes.tabela_vigente.is_boss) then @@ -285,6 +287,10 @@ _detalhes:Msg ("(debug) forcing equalize actors behavior.") _detalhes:EqualizeActorsSchedule (_detalhes.host_of) end + + --> verifica memoria + _detalhes:CheckMemoryAfterCombat() + else if (_detalhes:GetBossDetails (_detalhes.tabela_vigente.is_boss.mapid, _detalhes.tabela_vigente.is_boss.index)) then @@ -296,6 +302,11 @@ _detalhes:Msg ("(debug) found encounter on last fight, freezing parser for 30 seconds.") end + if (bossKilled) then + _detalhes.tabela_vigente.is_boss.killed = true + end + + local bossFunction, bossFunctionType = _detalhes:GetBossFunction (_detalhes.tabela_vigente.is_boss.mapid, _detalhes.tabela_vigente.is_boss.index) if (bossFunction) then if (_bit_band (bossFunctionType, 0x2) ~= 0) then --end of combat diff --git a/core/meta.lua b/core/meta.lua index 106c8bf7..0b3b7b94 100644 --- a/core/meta.lua +++ b/core/meta.lua @@ -728,55 +728,153 @@ end end + function _detalhes:CheckMemoryAfterCombat() + if (_detalhes.next_memory_check < time()) then + if (_detalhes.debug) then + _detalhes:Msg ("checking memory after combat.") + end + _detalhes.next_memory_check = time()+_detalhes.intervalo_memoria + UpdateAddOnMemoryUsage() + local memory = GetAddOnMemoryUsage ("Details") + if (memory > _detalhes.memory_ram) then + _detalhes:IniciarColetaDeLixo (true, 60) --> sending true doesn't check anythink + end + end + end + function _detalhes:CheckMemoryPeriodically() + if (_detalhes.next_memory_check <= time() and not _InCombatLockdown() and not _detalhes.in_combat) then + _detalhes.next_memory_check = time() + _detalhes.intervalo_memoria - 3 + UpdateAddOnMemoryUsage() + local memory = GetAddOnMemoryUsage ("Details") + if (_detalhes.debug) then + _detalhes:Msg ("checking memory periodically. Using: ",math.floor (memory), "of", _detalhes.memory_ram) + end + if (memory > _detalhes.memory_ram) then + if (_detalhes.debug) then + _detalhes:Msg ("Memory is too high, starting garbage collector") + end + _detalhes:IniciarColetaDeLixo (1, 60) --> sending 1 only check for combat and ignore garbage collect cooldown + end + end + end - - function _detalhes:IniciarColetaDeLixo (forcar) + function _detalhes:IniciarColetaDeLixo (forcar, lastevent) if (not forcar) then if (_detalhes.ultima_coleta + _detalhes.intervalo_coleta > _detalhes._tempo + 1) then return elseif (_detalhes.in_combat or _InCombatLockdown() or _detalhes:IsInInstance()) then + if (_detalhes.debug) then + _detalhes:Msg ("garbage collect queued due combatlockdown (forced false)") + end _detalhes:ScheduleTimer ("IniciarColetaDeLixo", 5) return end + else + if (type (forcar) ~= "boolean") then + if (forcar == 1) then + if (_detalhes.in_combat or _InCombatLockdown()) then + if (_detalhes.debug) then + _detalhes:Msg ("garbage collect queued due combatlockdown (forced 1)") + end + _detalhes:ScheduleTimer ("IniciarColetaDeLixo", 5, forcar) + return + end + end + end end if (_detalhes.debug) then if (forcar) then - _detalhes:Msg ("collecting garbage with forced state.") + _detalhes:Msg ("collecting garbage with forced state: ", forcar) else _detalhes:Msg ("collecting garbage.") end end + local memory = GetAddOnMemoryUsage ("Details") + + --> reseta o cache do parser _detalhes:ClearParserCache() - local limpados = atributo_damage:ColetarLixo() + atributo_heal:ColetarLixo() + atributo_energy:ColetarLixo() + atributo_misc:ColetarLixo() + --> limpa barras que não estão sendo usadas nas instâncias. + for index, instancia in _ipairs (_detalhes.tabela_instancias) do + if (instancia.barras and instancia.barras [1]) then + for i, barra in _ipairs (instancia.barras) do + if (not barra:IsShown()) then + barra.minha_tabela = nil + end + end + end + end + --> faz a coleta nos 4 atributos + local damage = atributo_damage:ColetarLixo (lastevent) + local heal = atributo_heal:ColetarLixo (lastevent) + local energy = atributo_energy:ColetarLixo (lastevent) + local misc = atributo_misc:ColetarLixo (lastevent) + + local limpados = damage + heal + energy + misc + + --> refresh nas janelas if (limpados > 0) then _detalhes:InstanciaCallFunction (_detalhes.reset_window) end - --print ("coletados: " .. limpados) + _detalhes:ManutencaoTimeMachine() + --> print cache states + if (_detalhes.debug) then + _detalhes:Msg ("removed: damage "..damage.." heal "..heal.." energy "..energy.." misc "..misc) + end + + --> elimina pets antigos + local _new_PetTable = {} + for PetSerial, PetTable in _pairs (_detalhes.tabela_pets.pets) do + if (PetTable[4] + _detalhes.intervalo_coleta > _detalhes._tempo + 1) then + _new_PetTable [PetSerial] = PetTable + end + end + _table_wipe (_detalhes.tabela_pets.pets) + _detalhes.tabela_pets.pets = _new_PetTable + + --> wipa container de escudos + _table_wipe (_detalhes.escudos) + _detalhes.ultima_coleta = _detalhes._tempo + + if (_detalhes.debug) then + collectgarbage() + UpdateAddOnMemoryUsage() + local memory2 = GetAddOnMemoryUsage ("Details") + _detalhes:Msg ("memory antes: "..memory.." memory depois: "..memory2) + end end - - local function FazColeta (_combate, tipo) + --> combates Normais + local function FazColeta (_combate, tipo, intervalo_overwrite) local conteudo = _combate [tipo]._ActorTable local _iter = {index = 1, data = conteudo[1], cleaned = 0} local _tempo = _time() + local links_removed = 0 + while (_iter.data) do local _actor = _iter.data local can_garbage = false - if (not _actor.grupo and not _actor.boss and not _actor.boss_fight_component and _actor.last_event + _detalhes.intervalo_coleta < _tempo) then + local t + if (intervalo_overwrite) then + t = _actor.last_event + intervalo_overwrite + else + t = _actor.last_event + _detalhes.intervalo_coleta + end + + if (not _actor.grupo and not _actor.boss and not _actor.boss_fight_component and t < _tempo) then local owner = _actor.owner if (owner) then local owner_actor = _combate (tipo, owner.nome) @@ -807,6 +905,11 @@ end _iter.cleaned = _iter.cleaned+1 + + if (_actor.tipo == 1 or _actor.tipo == 2) then + _actor:DesregistrarNaTimeMachine() + end + _table_remove (conteudo, _iter.index) _iter.data = conteudo [_iter.index] else @@ -816,6 +919,10 @@ end + if (_detalhes.debug) then + -- _detalhes:Msg ("- garbage collect:", tipo, "actors removed:",_iter.cleaned) + end + if (_iter.cleaned > 0) then ReconstroiMapa (_combate [tipo]) _combate [tipo].need_refresh = true @@ -824,21 +931,13 @@ return _iter.cleaned end - function _detalhes:ColetarLixo (tipo) - - for index, instancia in _ipairs (_detalhes.tabela_instancias) do - if (instancia:IsAtiva()) then - for i, barra in _ipairs (instancia.barras) do - if (not barra:IsShown()) then - barra.minha_tabela = nil - end - end - end - end + --> Combate overall + function _detalhes:ColetarLixo (tipo, lastevent) local _tempo = _time() local limpados = 0 + --> monta a lista de combates local tabelas_de_combate = {} for _, _tabela in _ipairs (_detalhes.tabela_historico.tabelas) do if (_tabela ~= _detalhes.tabela_vigente) then @@ -847,17 +946,16 @@ end tabelas_de_combate [#tabelas_de_combate+1] = _detalhes.tabela_vigente + --> faz a coleta em todos os combates para este atributo for _, _combate in _ipairs (tabelas_de_combate) do - limpados = limpados + FazColeta (_combate, tipo) + limpados = limpados + FazColeta (_combate, tipo, lastevent) end - --> clear shadow tables + --> limpa a tabela overall local _overall_combat = _detalhes.tabela_overall local conteudo = _overall_combat [tipo]._ActorTable - _iter = {index = 1, data = conteudo[1], cleaned = 0} --> ._ActorTable[1] para pegar o primeiro index - - --collectgarbage() - + local _iter = {index = 1, data = conteudo[1], cleaned = 0} --> ._ActorTable[1] para pegar o primeiro index + while (_iter.data) do local _actor = _iter.data @@ -875,12 +973,7 @@ end _table_wipe (meus_links) end - - --if (tipo == 1 and #new_weak_table > 0) then - -- print (can_garbage, _actor.nome) - --end - - + if (can_garbage or not meus_links) then --> não há referências a este objeto if (not _actor.owner) then --> pet @@ -889,7 +982,18 @@ --> apaga a referência deste jogador na tabela overall _iter.cleaned = _iter.cleaned+1 + + if (_detalhes.debug) then + if (#_actor.links > 0) then + _detalhes:Msg (_actor.nome, " has been garbaged but have links: ", #_actor.links) + end + end + + if (_actor.tipo == 1 or _actor.tipo == 2) then + _actor:DesregistrarNaTimeMachine() + end _table_remove (conteudo, _iter.index) + _iter.data = conteudo [_iter.index] else _actor.links = new_weak_table @@ -898,21 +1002,7 @@ end end - - --> elimina pets antigos - local _new_PetTable = {} - for PetSerial, PetTable in _pairs (_detalhes.tabela_pets.pets) do - if (PetTable[4] + _detalhes.intervalo_coleta > _detalhes._tempo + 1) then - _new_PetTable [PetSerial] = PetTable - end - end - - _table_wipe (_detalhes.tabela_pets.pets) - _detalhes.tabela_pets.pets = _new_PetTable - - --> wipa container de escudos - _table_wipe (_detalhes.escudos) - + --> termina o coletor de lixo if (_iter.cleaned > 0) then _overall_combat[tipo].need_refresh = true diff --git a/core/parser.lua b/core/parser.lua index b6fa9db3..6cf432dd 100644 --- a/core/parser.lua +++ b/core/parser.lua @@ -63,15 +63,15 @@ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> cache --> damage - local damage_cache = {} - local damage_cache_pets = {} - local damage_cache_petsOwners = {} + local damage_cache = setmetatable ({}, _detalhes.weaktable) + local damage_cache_pets = setmetatable ({}, _detalhes.weaktable) + local damage_cache_petsOwners = setmetatable ({}, _detalhes.weaktable) --> heaing - local healing_cache = {} + local healing_cache = setmetatable ({}, _detalhes.weaktable) --> energy - local energy_cache = {} + local energy_cache = setmetatable ({}, _detalhes.weaktable) --> misc - local misc_cache = {} + local misc_cache = setmetatable ({}, _detalhes.weaktable) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> constants @@ -153,6 +153,12 @@ ------------------------------------------------------------------------------------------------ --> get actors + --> debug - no cache + --[[ + local este_jogador, meu_dono, who_name = _current_damage_container:PegarCombatente (who_serial, who_name, who_flags, true) + local jogador_alvo, alvo_dono, alvo_name = _current_damage_container:PegarCombatente (alvo_serial, alvo_name, alvo_flags, true) + --]] + --[ --> damager local este_jogador, meu_dono = damage_cache [who_name] or damage_cache_pets [who_serial], damage_cache_petsOwners [who_serial] @@ -188,6 +194,7 @@ end end + --]] --> damager shadow local shadow = este_jogador.shadow @@ -209,41 +216,7 @@ --> record death log local t = jogador_alvo.last_events_table local i = t.n - - --[[ - if (not i) then - local isOriginal = jogador_alvo.last_events_table.original - if (isOriginal) then - isOriginal = "IsOriginal = TRUE" - else - isOriginal = "IsOriginal = FALSE" - end - local indexes = #jogador_alvo.last_events_table - if (not indexes) then - indexes = "Indexes = NIL" - else - indexes = "Indexes = "..indexes - end - local resync = _detalhes.tabela_vigente.resincked - if (resync) then - resync = "resync = TRUE" - else - resync = "resync = FALSE" - end - - local saved = _detalhes.tabela_vigente.hasSaved - if (saved) then - saved = "saved = TRUE" - else - saved = "saved = FALSE" - end - - print ("Report the lines shown, click on reset button and type /reload") - print ("We are investigation this issue, this information is important to us.") - assert (false, "Please Report This Error on the Blue Button: Parser 194: " .. isOriginal .. " " .. indexes .. " " .. resync .. " " .. saved) - end - --]] - + t.n = i + 1 t = t [i] @@ -504,6 +477,12 @@ ------------------------------------------------------------------------------------------------ --> get actors + --> debug - no cache + --[[ + local este_jogador, meu_dono, who_name = _current_heal_container:PegarCombatente (who_serial, who_name, who_flags, true) + local jogador_alvo, alvo_dono, alvo_name = _current_heal_container:PegarCombatente (alvo_serial, alvo_name, alvo_flags, true) + --]] + --[ local este_jogador, meu_dono = healing_cache [who_name] if (not este_jogador) then --> pode ser um desconhecido ou um pet este_jogador, meu_dono, who_name = _current_heal_container:PegarCombatente (who_serial, who_name, who_flags, true) @@ -519,7 +498,7 @@ healing_cache [alvo_name] = jogador_alvo end end - + --]] local shadow = este_jogador.shadow local shadow_of_target = jogador_alvo.shadow @@ -1013,6 +992,12 @@ --> get actors --> main actor + --> debug - no cache + --[[ + local este_jogador, meu_dono, who_name = _current_energy_container:PegarCombatente (who_serial, who_name, who_flags, true) + local jogador_alvo, alvo_dono, alvo_name = _current_energy_container:PegarCombatente (alvo_serial, alvo_name, alvo_flags, true) + --]] + --[ local este_jogador, meu_dono = energy_cache [who_name] if (not este_jogador) then --> pode ser um desconhecido ou um pet este_jogador, meu_dono, who_name = _current_energy_container:PegarCombatente (who_serial, who_name, who_flags, true) @@ -1029,6 +1014,7 @@ energy_cache [alvo_name] = jogador_alvo end end + --]] --> actor targets local este_alvo = este_jogador.targets._NameIndexTable [alvo_name] @@ -1107,6 +1093,12 @@ --> get actors --> main actor + + --> debug - no cache + --[[ + local este_jogador, meu_dono, who_name = _current_misc_container:PegarCombatente (who_serial, who_name, who_flags, true) + --]] + --[ local este_jogador, meu_dono = misc_cache [who_name] if (not este_jogador) then --> pode ser um desconhecido ou um pet este_jogador, meu_dono, who_name = _current_misc_container:PegarCombatente (who_serial, who_name, who_flags, true) @@ -1114,7 +1106,7 @@ misc_cache [who_name] = este_jogador end end - + --]] local shadow = este_jogador.shadow ------------------------------------------------------------------------------------------------ @@ -1193,6 +1185,11 @@ --> get actors --> main actor + --> debug - no cache + --[[ + local este_jogador, meu_dono, who_name = _current_misc_container:PegarCombatente (who_serial, who_name, who_flags, true) + --]] + --[ local este_jogador, meu_dono = misc_cache [who_name] if (not este_jogador) then --> pode ser um desconhecido ou um pet este_jogador, meu_dono, who_name = _current_misc_container:PegarCombatente (who_serial, who_name, who_flags, true) @@ -1200,7 +1197,7 @@ misc_cache [who_name] = este_jogador end end - + --]] local shadow = este_jogador.shadow ------------------------------------------------------------------------------------------------ @@ -1301,6 +1298,11 @@ --> get actors --> main actor + --> debug - no cache + --[[ + local este_jogador, meu_dono, who_name = _current_misc_container:PegarCombatente (who_serial, who_name, who_flags, true) + --]] + --[ local este_jogador, meu_dono = misc_cache [who_name] if (not este_jogador) then --> pode ser um desconhecido ou um pet este_jogador, meu_dono, who_name = _current_misc_container:PegarCombatente (who_serial, who_name, who_flags, true) @@ -1308,7 +1310,7 @@ misc_cache [who_name] = este_jogador end end - + --]] local shadow = este_jogador.shadow ------------------------------------------------------------------------------------------------ @@ -1516,6 +1518,11 @@ --> get actors --> main actor + --> debug - no cache + --[[ + local este_jogador, meu_dono, who_name = _current_misc_container:PegarCombatente (who_serial, who_name, who_flags, true) + --]] + --[ local este_jogador, meu_dono = misc_cache [who_name] if (not este_jogador) then --> pode ser um desconhecido ou um pet este_jogador, meu_dono, who_name = _current_misc_container:PegarCombatente (who_serial, who_name, who_flags, true) @@ -1523,7 +1530,7 @@ misc_cache [who_name] = este_jogador end end - + --]] local shadow = este_jogador.shadow ------------------------------------------------------------------------------------------------ @@ -1658,7 +1665,7 @@ if (_detalhes.debug) then _detalhes:Msg ("(debug) combat finished: encounter objective is completed") end - _detalhes:SairDoCombate() + _detalhes:SairDoCombate (true) end end @@ -2133,11 +2140,69 @@ _tempo = _detalhes._tempo end + function _detalhes:PrintParserCacheIndexes() + + local amount = 0 + for n, nn in pairs (damage_cache) do + amount = amount + 1 + end + print ("parser damage_cache", amount) + + amount = 0 + for n, nn in pairs (damage_cache_pets) do + amount = amount + 1 + end + print ("parser damage_cache_pets", amount) + + amount = 0 + for n, nn in pairs (damage_cache_petsOwners) do + amount = amount + 1 + end + print ("parser damage_cache_petsOwners", amount) + + amount = 0 + for n, nn in pairs (healing_cache) do + amount = amount + 1 + end + print ("parser healing_cache", amount) + + amount = 0 + for n, nn in pairs (energy_cache) do + amount = amount + 1 + end + print ("parser energy_cache", amount) + + amount = 0 + for n, nn in pairs (misc_cache) do + amount = amount + 1 + end + print ("parser misc_cache", amount) + + print ("group damage", #_detalhes.cache_damage_group) + print ("group damage", #_detalhes.cache_healing_group) + end + function _detalhes:ClearParserCache() - damage_cache = {} - healing_cache = {} - energy_cache = {} - misc_cache = {} + + --> clear cache | not sure if replacing the old table is the best approach + + table.wipe (damage_cache) + table.wipe (damage_cache_pets) + table.wipe (damage_cache_petsOwners) + table.wipe (healing_cache) + table.wipe (energy_cache) + table.wipe (misc_cache) + + damage_cache = setmetatable ({}, _detalhes.weaktable) + damage_cache_pets = setmetatable ({}, _detalhes.weaktable) + damage_cache_petsOwners = setmetatable ({}, _detalhes.weaktable) + + healing_cache = setmetatable ({}, _detalhes.weaktable) + + energy_cache = setmetatable ({}, _detalhes.weaktable) + + misc_cache = setmetatable ({}, _detalhes.weaktable) + end --serach key: ~cache @@ -2168,18 +2233,8 @@ _recording_took_damage = _detalhes.RecordRealTimeTookDamage _recording_ability_with_buffs = _detalhes.RecordPlayerAbilityWithBuffs _in_combat = _detalhes.in_combat - - --> clear cache - damage_cache = {} - damage_cache_pets = {} - damage_cache_petsOwners = {} - - healing_cache = {} - - energy_cache = {} - - misc_cache = {} - + + return _detalhes:ClearParserCache() end diff --git a/core/plugins_statusbar.lua b/core/plugins_statusbar.lua index f09f7089..e91beaa3 100644 --- a/core/plugins_statusbar.lua +++ b/core/plugins_statusbar.lua @@ -58,7 +58,7 @@ end --> functions to set the three statusbar places: left, center and right - function _detalhes.StatusBar:SetCenterPlugin (instance, childObject) + function _detalhes.StatusBar:SetCenterPlugin (instance, childObject, fromStartup) childObject.frame:Show() childObject.frame:SetPoint ("center", instance.baseframe.rodape.StatusBarCenterAnchor, "center") _detalhes.StatusBar:AlignPluginText (childObject, 2) @@ -69,10 +69,19 @@ if (childObject.OnEnable) then childObject:OnEnable() end + + if (fromStartup and childObject.options.isHidden) then + childObject.frame.text:Hide() + end + return true end - function _detalhes.StatusBar:SetLeftPlugin (instance, childObject) + function _detalhes.StatusBar:SetLeftPlugin (instance, childObject, fromStartup) + + if (not childObject) then + return + end childObject.frame:Show() childObject.frame:SetPoint ("left", instance.baseframe.rodape.StatusBarLeftAnchor, "left") @@ -84,10 +93,15 @@ if (childObject.OnEnable) then childObject:OnEnable() end + + if (fromStartup and childObject.options.isHidden) then + childObject.frame.text:Hide() + end + return true end - function _detalhes.StatusBar:SetRightPlugin (instance, childObject) + function _detalhes.StatusBar:SetRightPlugin (instance, childObject, fromStartup) childObject.frame:Show() childObject.frame:SetPoint ("right", instance.baseframe.rodape.direita, "right", -20, 10) _detalhes.StatusBar:AlignPluginText (childObject, 3) @@ -98,6 +112,11 @@ if (childObject.OnEnable) then childObject:OnEnable() end + + if (fromStartup and childObject.options.isHidden) then + childObject.frame.text:Hide() + end + return true end @@ -126,6 +145,16 @@ --> select a new plugin in for an instance anchor local ChoosePlugin = function (_, _, index, current_child, anchor) + + if (index == -1) then --> hide + current_child.frame.text:Hide() + _detalhes.StatusBar:ApplyOptions (current_child, "hidden", true) + return + else + _detalhes.StatusBar:ApplyOptions (current_child, "hidden", false) + current_child.frame.text:Show() + end + local pluginMestre = _detalhes.StatusBar.Plugins [index] local instance = current_child.instance -- instance que estamos usando agora @@ -210,6 +239,7 @@ frame.child:Setup() else GameCooltip:Reset() + GameCooltip:AddMenu (1, ChoosePlugin, -1, frame.child, frame.child.anchor, Loc ["STRING_PLUGIN_CLEAN"], [[Interface\Buttons\UI-GroupLoot-Pass-Down]], true) for index, _name_and_icon in _ipairs (_detalhes.StatusBar.Menu) do GameCooltip:AddMenu (1, ChoosePlugin, index, frame.child, frame.child.anchor, _name_and_icon [1], _name_and_icon [2], true) end @@ -308,6 +338,8 @@ child.options.textFace = value end child:SetFontFace (child.text, SharedMedia:Fetch ("font", child.options.textFace)) + elseif (option == "hidden") then + child.options.isHidden = value else if (child [option] and type (child [option]) == "function") then child [option] (_, child, value) @@ -773,6 +805,49 @@ do end +---------> BUILT-IN CLEAR PLUGIN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--[[ +do + --> Create the plugin Object + local PClear1 = _detalhes:NewPluginObject ("Details_Attribute", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + local PClear2 = _detalhes:NewPluginObject ("Details_Attribute", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + local PClear3 = _detalhes:NewPluginObject ("Details_Attribute", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + --> Handle events (must have) + function PClear1:OnDetailsEvent (event) + return + end + function PClear2:OnDetailsEvent (event) + return + end + function PClear3:OnDetailsEvent (event) + return + end + + --> Create Plugin Frames (must have) + function PClear1:CreateChildObject (instance) + local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsPClear1Instance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local new_child = _detalhes.StatusBar:CreateChildTable (instance, PClear1, myframe) + return new_child + end + function PClear2:CreateChildObject (instance) + local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsPClear2Instance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local new_child = _detalhes.StatusBar:CreateChildTable (instance, PClear2, myframe) + return new_child + end + function PClear3:CreateChildObject (instance) + local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsPClear3Instance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local new_child = _detalhes.StatusBar:CreateChildTable (instance, PClear3, myframe) + return new_child + end + +--]] --> Install +-- _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_CLEAN"].." 1", [[Interface\Buttons\UI-GroupLoot-Pass-Down]], PClear1, "DETAILS_STATUSBAR_PLUGIN_PCLEAR1") +-- _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_CLEAN"].." 2", [[Interface\Buttons\UI-GroupLoot-Pass-Down]], PClear2, "DETAILS_STATUSBAR_PLUGIN_PCLEAR2") +-- _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_CLEAN"].." 3", [[Interface\Buttons\UI-GroupLoot-Pass-Down]], PClear3, "DETAILS_STATUSBAR_PLUGIN_PCLEAR3") + +--end + + ---------> default options panel ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- local window = _detalhes.gump:NewPanel (UIParent, nil, "DetailsStatusBarOptions", nil, 300, 180) diff --git a/core/timemachine.lua b/core/timemachine.lua index 3af00aa9..a2f670e6 100644 --- a/core/timemachine.lua +++ b/core/timemachine.lua @@ -1,13 +1,13 @@ ---File Revision: 1 ---Last Modification: 27/07/2013 +--File Revision: 2 +--Last Modification: 12/09/2013 -- Change Log: -- 27/07/2013: Finished alpha version. + -- 12/09/2013: Fixed some problems with garbage collector. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- local _detalhes = _G._detalhes - local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) local _tempo = time() ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -66,7 +66,6 @@ jogador:RegistrarNaTimeMachine() end end - end function timeMachine:Desligar() @@ -86,9 +85,15 @@ if (not timeMachine.ligada) then return end - local esta_tabela = timeMachine.tabelas [self.tipo] - esta_tabela [self.timeMachine] = nil - self.timeMachine = nil + + local timeMachineContainer = timeMachine.tabelas [self.tipo] + local actorTimeMachineID = self.timeMachine + + if (timeMachineContainer [actorTimeMachineID] == self) then + self:TerminarTempo() + self.timeMachine = nil + timeMachineContainer [actorTimeMachineID] = false + end end function _detalhes:RegistrarNaTimeMachine() @@ -96,11 +101,6 @@ return end - --if (self.tipo == 3) then - -- print (debugstack()) - -- return - --end - local esta_tabela = timeMachine.tabelas [self.tipo] _table_insert (esta_tabela, self) self.timeMachine = #esta_tabela @@ -109,13 +109,21 @@ function _detalhes:ManutencaoTimeMachine() for tipo, tabela in _ipairs (timeMachine.tabelas) do local t = {} + local removed = 0 for index, jogador in _ipairs (tabela) do if (jogador) then t [#t+1] = jogador jogador.timeMachine = #t + else + removed = removed + 1 end end + timeMachine.tabelas [tipo] = t + + if (_detalhes.debug) then + _detalhes:Msg ("timemachine r"..removed.."| e"..#t.."| t"..tipo) + end end end @@ -203,3 +211,8 @@ self.last_event = tempo end end + + function _detalhes:PrintTimeMachineIndexes() + print ("timemachine damage", #timeMachine.tabelas [1]) + print ("timemachine heal", #timeMachine.tabelas [2]) + end \ No newline at end of file diff --git a/framework/pictureedit.lua b/framework/pictureedit.lua index 6bd2b969..602ea377 100644 --- a/framework/pictureedit.lua +++ b/framework/pictureedit.lua @@ -8,6 +8,8 @@ local g = _detalhes.gump window:SetMovable (true) tinsert (UISpecialFrames, "DetailsImageEdit") + window.hooks = {} + local background = g:NewImage (window, _, "$parentBackground", _, _, _, nil, "background") background:SetAllPoints() background:SetTexture (0, 0, 0, .8) @@ -43,6 +45,9 @@ local g = _detalhes.gump topSlider:SetHook ("OnValueChange", function (_, _, value) topCoordTexture.image:SetHeight (window.frame:GetHeight()/100*value) + if (window.callback_func) then + window.accept (true) + end end) topSlider:Hide() @@ -73,6 +78,9 @@ local g = _detalhes.gump bottomSlider:SetHook ("OnValueChange", function (_, _, value) value = math.abs (value-100) bottomCoordTexture.image:SetHeight (math.max (window.frame:GetHeight()/100*value, 1)) + if (window.callback_func) then + window.accept (true) + end end) bottomSlider:Hide() @@ -101,6 +109,9 @@ local g = _detalhes.gump leftSlider:SetHook ("OnValueChange", function (_, _, value) leftCoordTexture.image:SetWidth (window.frame:GetWidth()/100*value) + if (window.callback_func) then + window.accept (true) + end end) leftSlider:Hide() @@ -130,6 +141,9 @@ local g = _detalhes.gump rightSlider:SetHook ("OnValueChange", function (_, _, value) value = math.abs (value-100) rightCoordTexture.image:SetWidth (math.max (window.frame:GetWidth()/100*value, 1)) + if (window.callback_func) then + window.accept (true) + end end) rightSlider:Hide() @@ -202,8 +216,14 @@ local g = _detalhes.gump local selectedColor = function (default) if (default) then edit_texture:SetVertexColor (unpack (default)) + if (window.callback_func) then + window.accept (true) + end else edit_texture:SetVertexColor (ColorPickerFrame:GetColorRGB()) + if (window.callback_func) then + window.accept (true) + end end end @@ -282,6 +302,9 @@ local g = _detalhes.gump alphaSlider:SetHook ("OnValueChange", function (_, _, value) edit_texture:SetAlpha (value/100) + if (window.callback_func) then + window.accept (true) + end end) local resizer = CreateFrame ("Button", nil, window.widget) @@ -320,6 +343,10 @@ local g = _detalhes.gump leftCoordTexture.image:SetWidth (window.frame:GetWidth()/100*leftSlider:GetValue()) bottomCoordTexture:SetHeight (math.max ( (window.frame:GetHeight() / 100 * math.abs (bottomSlider:GetValue()-100)), 1)) topCoordTexture:SetHeight (window.frame:GetHeight()/100*topSlider:GetValue()) + + if (window.callback_func) then + window.accept (true) + end end) --> change size @@ -353,6 +380,10 @@ local g = _detalhes.gump rightTexCoordButton:Enable() end haveHFlip = not haveHFlip + if (window.callback_func) then + window.accept (true) + end + elseif (side == 2) then if (not haveVFlip) then @@ -379,6 +410,9 @@ local g = _detalhes.gump bottomTexCoordButton:Enable() end haveVFlip = not haveVFlip + if (window.callback_func) then + window.accept (true) + end end end @@ -391,11 +425,14 @@ local g = _detalhes.gump flipButtonV:InstallCustomTexture() --> accept - local accept = function() - buttonsBackground:Hide() - window:Hide() - alphaFrame:Hide() - ColorPickerFrame:Hide() + window.accept = function (keep_editing) + + if (not keep_editing) then + buttonsBackground:Hide() + window:Hide() + alphaFrame:Hide() + ColorPickerFrame:Hide() + end local coords = {} if (haveHFlip) then @@ -417,7 +454,7 @@ local g = _detalhes.gump return window.callback_func (edit_texture.width, edit_texture.height, {edit_texture:GetVertexColor()}, edit_texture:GetAlpha(), coords, window.extra_param) end - local acceptButton = g:NewButton (buttonsBackground, _, "$parentAcceptButton", _, 100, 20, accept, _, _, _, "DONE") + local acceptButton = g:NewButton (buttonsBackground, _, "$parentAcceptButton", _, 100, 20, window.accept, _, _, _, "DONE") acceptButton:SetPoint ("topleft", window, "topright", 10, -200) acceptButton:InstallCustomTexture() @@ -432,24 +469,27 @@ window:Hide() local ttexcoord function g:ImageEditor (callback, texture, texcoord, colors, width, height, extraParam) + texcoord = texcoord or {0, 1, 0, 1} + ttexcoord = texcoord + + colors = colors or {1, 1, 1, 1} + edit_texture:SetTexture (texture) edit_texture.width = width edit_texture.height = height - colors = colors or {1, 1, 1, 1} edit_texture:SetVertexColor (colors [1], colors [2], colors [3]) edit_texture:SetAlpha (colors [4] or 1) - - texcoord = texcoord or {0, 1, 0, 1} - ttexcoord = texcoord - + _detalhes:ScheduleTimer ("RefreshImageEditor", 0.2) window:Show() window.callback_func = callback window.extra_param = extraParam buttonsBackground:Show() + + table.wipe (window.hooks) end function _detalhes:RefreshImageEditor() @@ -476,6 +516,10 @@ window:Hide() topSlider:SetValue (ttexcoord[3]*100) bottomSlider:SetValue (ttexcoord[4]*100) end + + if (window.callback_func) then + window.accept (true) + end end \ No newline at end of file diff --git a/framework/slider.lua b/framework/slider.lua index c613f9cb..45fb2a90 100644 --- a/framework/slider.lua +++ b/framework/slider.lua @@ -19,8 +19,28 @@ local SliderMetaFunctions = {} SliderMetaFunctions.__call = function (_table, value) if (not value) then + if (_table.isSwitch) then + if (_table.slider:GetValue() == 1) then + return false + else + return true + end + end return _table.slider:GetValue() else + if (_table.isSwitch) then + if (type (value) == "boolean") then + if (value) then + _table.slider:SetValue (2) + else + _table.slider:SetValue (1) + end + else + _table.slider:SetValue (value) + end + return + end + return _table.slider:SetValue (value) end end @@ -163,6 +183,11 @@ local SliderMetaFunctions = {} _rawset (self, "FixedValue", value) end +--> set value + function SliderMetaFunctions:SetValue (value) + return self (value) + end + -- thumb size function SliderMetaFunctions:SetThumbSize (w, h) if (not w) then @@ -382,6 +407,7 @@ function gump:NewSwitch (parent, container, name, member, w, h, ltext, rtext, de --> build frames local slider = gump:NewSlider (parent, container, name, member, w, h, 1, 2, 1, defaultv) + slider:SetBackdrop ({edgeFile = "Interface\\Buttons\\UI-SliderBar-Border", edgeSize = 8, bgFile = [[Interface\AddOns\Details\images\background]], insets = {left = 3, right = 3, top = 5, bottom = 5}}) @@ -406,6 +432,8 @@ function gump:NewSwitch (parent, container, name, member, w, h, ltext, rtext, de slider:SetValue (2) slider:SetValue (defaultv) + slider.isSwitch = true + return slider end diff --git a/functions/savedata.lua b/functions/savedata.lua index b9f2d981..1a7f5fa4 100644 --- a/functions/savedata.lua +++ b/functions/savedata.lua @@ -117,6 +117,8 @@ function _detalhes:SaveDataOnLogout() _detalhes_global.clear_ungrouped = _detalhes.clear_ungrouped _detalhes_global.update_speed = _detalhes.update_speed _detalhes_global.time_type = _detalhes.time_type + _detalhes_global.memory_threshold = _detalhes.memory_threshold + _detalhes_global.memory_ram = _detalhes.memory_ram _detalhes_global.SpellOverwriteUser = _detalhes.SpellOverwriteUser @@ -309,6 +311,8 @@ end --]] _detalhes.clear_ungrouped = _detalhes_global.clear_ungrouped or _detalhes.clear_ungrouped _detalhes.update_speed = _detalhes_global.update_speed or _detalhes.update_speed _detalhes.time_type = _detalhes_global.time_type or _detalhes.time_type + _detalhes.memory_threshold = _detalhes_global.memory_threshold + _detalhes.memory_ram = _detalhes_global.memory_ram _detalhes.SpellOverwriteUser = _detalhes_global.SpellOverwriteUser or _detalhes.SpellOverwriteUser else diff --git a/functions/slash.lua b/functions/slash.lua index b321604d..ae6bbd2d 100644 --- a/functions/slash.lua +++ b/functions/slash.lua @@ -85,6 +85,11 @@ function SlashCmdList.DETAILS (msg, editbox) local name, realm = UnitName ("party"..i) print (name, " -- ", realm) end + + elseif (msg == "cacheparser") then + _detalhes:PrintParserCacheIndexes() + elseif (msg == "parsercache") then + _detalhes:PrintParserCacheIndexes() elseif (msg == "captures") then for k, v in pairs (_detalhes.capture_real) do @@ -175,6 +180,14 @@ function SlashCmdList.DETAILS (msg, editbox) _detalhes.gump:ImageEditor (callback, "Interface\\TALENTFRAME\\bg-paladin-holy", nil, {1, 1, 1, 1}) -- {0.25, 0.25, 0.25, 0.25} + elseif (msg == "chat") then + + local name, fontSize, r, g, b, a, shown, locked = FCF_GetChatWindowInfo (1); + print (name,"|",fontSize,"|", r,"|", g,"|", b,"|", a,"|", shown,"|", locked) + + --local fontFile, unused, fontFlags = self:GetFont(); + --self:SetFont(fontFile, fontSize, fontFlags); + elseif (msg == "error") then a = nil + 1 @@ -284,10 +297,10 @@ function SlashCmdList.DETAILS (msg, editbox) elseif (msg == "debug") then if (_detalhes.debug) then _detalhes.debug = false - print ("Details Diagnostic mode OFF") + _detalhes:Msg ("diagnostic mode has been turned off.") else _detalhes.debug = true - print ("Details Diagnostic mode ON") + _detalhes:Msg ("diagnostic mode has been turned on.") end --> debug combat log @@ -303,6 +316,9 @@ function SlashCmdList.DETAILS (msg, editbox) end --> debug + elseif (msg == "tables") then + _detalhes:tables() + elseif (msg == "gs") then _detalhes:teste_grayscale() @@ -323,3 +339,444 @@ function SlashCmdList.DETAILS (msg, editbox) end end + +function _detalhes:tables () + -- generate a graphviz graph from a lua table structure + + local string_result = "" + + local function append( tab, ... ) + for i = 1, select( '#', ... ) do + tab[ #tab + 1 ] = (select( i, ... )) + end + return tab + end + + local function abbrev( str, data ) + local escape = "\\\\" + if data.use_html then + escape = "\\" + end + local s = string.gsub( str, "[^%w?!=/+*-_.:,; ]", function( c ) + -- local s = string.gsub( str, "[^%w_]", function( c ) + return escape .. string.byte( c ) + end ) + if string.len( s ) > 20 then + s = string.sub( s, 1, 17 ) .. "..." + end + return "'" .. s .. "'" + end + + local function update_node_depth( val, data, depth ) + data.node2depth[ val ] = math.min( data.node2depth[ val ] or depth, depth ) + end + + local function define_node( data, node ) + assert( not data.node2id[ node.value ] ) + local id = data.n_nodes + data.n_nodes = data.n_nodes + 1 + data.node2id[ node.value ] = id + append( data.nodes, node ) + return id + end + + local function define_edge( data, edge ) + append( data.edges, edge ) + end + + local function get_metatable( val, enabled ) + if enabled then + if type( debug ) == "table" and + type( debug.getmetatable ) == "function" then + return debug.getmetatable( val ) + elseif type( getmetatable ) == "function" then + return getmetatable( val ) + end + end + end + + local function get_environment( val, enabled ) + if enabled then + if type( debug ) == "table" and + type( debug.getfenv ) == "function" then + return debug.getfenv( val ) + elseif type( getfenv ) == "function" and + type( val ) == "function" then + return getfenv( val ) + end + end + end + + + + -- generate dot code for references + local function dottify_metatable_ref( val, id1, mt, id2, data ) + append( data.edges, { + A = val, A_id = id1, + B = mt, B_id = id2, + style = "dashed", + arrowtail = "odiamond", + label = "metatable", + color = "blue" + } ) + data.nodes[ data.node2id[ val ] ].important = true + data.nodes[ data.node2id[ mt ] ].important = true + end + local function dottify_environment_ref( val, id1, env, id2, data ) + append( data.edges, { + A = val, A_id = id1, + B = env, B_id = id2, + style = "dotted", + arrowtail = "dot", + label = "environment", + color = "red" + } ) + data.nodes[ data.node2id[ val ] ].important = true + data.nodes[ data.node2id[ env ] ].important = true + end + local function dottify_upvalue_ref( val, id1, upv, id2, data, name ) + append( data.edges, { + A = val, A_id = id1, + B = upv, B_id = id2, + style = "dashed", + label = name or "#upvalue", + color = "green" + } ) + data.nodes[ data.node2id[ val ] ].important = true + data.nodes[ data.node2id[ upv ] ].important = true + end + local function dottify_ref( val1, id1, val2, id2, data ) + append( data.edges, { + A = val1, A_id = id1, + B = val2, B_id = id2, + style = "solid", + arrowhead = "normal", + } ) + end + + + -- forward declarations + local dottify_table, dottify_userdata, dottify_thread, dottify_function + + + local function make_label( tab, v, data, id, subid, depth ) + if type( v ) == "table" then + local id2 = dottify_table( v, data, depth+1 ) + dottify_ref( tab, id..":"..subid, v, id2..":0", data ) + return tostring( v ) + elseif type( v ) == "userdata" then + local id2 = dottify_userdata( v, data, depth+1 ) + dottify_ref( tab, id..":"..subid, v, id2, data ) + return tostring( v ) + elseif type( v ) == "function" then + local id2 = dottify_function( v, data, depth+1 ) + dottify_ref( tab, id..":"..subid, v, id2, data ) + return tostring( v ) + elseif type( v ) == "thread" then + local id2 = dottify_thread( v, data, depth+1 ) + dottify_ref( tab, id..":"..subid, v, id2, data ) + return tostring( v ) + elseif type( v ) == "string" then + return abbrev( v, data ) + elseif type( v ) == "number" or type( v ) == "boolean" then + return tostring( v ) + else + error( "unsupported primitive lua type" ) + end + end + + + function dottify_table( tab, data, depth ) + assert( type( tab ) == "table" ) + update_node_depth( tab, data, depth ) + if not data.node2id[ tab ] then + local node = { + value = tab + } + local id = define_node( data, node ) + local label + -- build label for this table + if data.use_html then + node.shape = "plaintext" + label = [[]] + else + node.shape = "record" + label = "{ <0> " .. tostring( tab ) + end + local handled = {} + local n = 1 + -- first the array part + for i,v in ipairs( tab ) do + local el_label = make_label( tab, v, data, id, n, depth ) + if data.use_html then + label = label .. [[]] + else + label = label .. " | <" .. n .. "> " .. el_label + end + n = n + 1 + handled[ i ] = true + end + -- and then the hash part + local keys, values = {}, {} + for k,v in pairs( tab ) do + node.important = true + if not handled[ k ] then -- skip array part elements + local k_label = make_label( tab, k, data, id, "k"..n, depth ) + local v_label = make_label( tab, v, data, id, "v"..n, depth ) + if data.use_html then + label = label .. [[ ]] + else + append( keys, " " .. k_label ) + append( values, " " .. v_label ) + end + n = n + 1 + end + end + if data.use_html then + node.label = label .. [[
]] .. tostring( tab ) .. [[
]] .. el_label .. [[
]] .. k_label .. [[]] .. v_label .. [[
]] + else + if next( keys ) ~= nil then + label = label .. " | { { " .. table.concat( keys, " | " ) .. + " } | { " .. table.concat( values, " | " ) .. " } }" + end + node.label = label .. " }" + end + -- and now the metatable + local mt = get_metatable( tab, data.show_metatables ) + if type( mt ) == "table" then + local id2 = dottify_table( mt, data, depth+1 ) + dottify_metatable_ref( tab, id .. ":0", mt, id2 .. ":0", data ) + end + end + return data.node2id[ tab ] + end + + + function dottify_userdata( udata, data, depth ) + assert( type( udata ) == "userdata" ) + update_node_depth( udata, data, depth ) + if not data.node2id[ udata ] then + local id = define_node( data, { + value = udata, + label = tostring( udata ), + shape = "box" + } ) + -- the metatable + local mt = get_metatable( udata, data.show_metatables ) + if type( mt ) == "table" then + local id2 = dottify_table( mt, data, depth+1 ) + dottify_metatable_ref( udata, id, mt, id2..":0", data ) + end + -- the environment + local env = get_environment( udata, data.show_environments ) + if type( env ) == "table" then + local id2 = dottify_table( env, data, depth+1 ) + dottify_environment_ref( udata, id, env, id2..":0", data ) + end + end + return data.node2id[ udata ] + end + + + function dottify_thread( thread, data, depth ) + assert( type( thread ) == "thread" ) + update_node_depth( thread, data, depth ) + if not data.node2id[ thread ] then + local id = define_node( data, { + value = thread, + label = tostring( thread ), + shape = "triangle" + } ) + -- the environment + local env = get_environment( val, data.show_environments ) + if type( env ) == "table" then + local id2 = dottify_table( env, data, depth+1 ) + dottify_environment_ref( thread, id, env, id2..":0", data ) + end + end + return data.node2id[ thread ] + end + + + + function dottify_function( func, data, depth ) + assert( type( func ) == "function" ) + update_node_depth( func, data, depth ) + if not data.node2id[ func ] then + local id = define_node( data, { + value = func, + label = tostring( func ), + shape = "ellipse" + } ) + -- the environment + local env = get_environment( func, data.show_environments ) + if type( env ) == "table" then + local id2 = dottify_table( env, data, depth+1 ) + dottify_environment_ref( func, id, env, id2..":0", data ) + end + -- the upvalues + if data.show_upvalues and + type( debug ) == "table" and + type( debug.getupvalue ) == "function" then + local n = 1 + repeat + local name, upvalue = debug.getupvalue( func, n ) + if type( upvalue ) == "table" then + local id2 = dottify_table( upvalue, data, depth+1 ) + dottify_upvalue_ref( func, id, upvalue, id2..":0", data, name ) + elseif type( upvalue ) == "userdata" then + local id2 = dottify_userdata( upvalue, data, depth+1 ) + dottify_upvalue_ref( func, id, upvalue, id2, data, name ) + elseif type( upvalue ) == "function" then + local id2 = dottify_function( upvalue, data, depth+1 ) + dottify_upvalue_ref( func, id, upvalue, id2, data, name ) + elseif type( upvalue ) == "thread" then + local id2 = dottify_thread( upvalue, data, depth+1 ) + dottify_upvalue_ref( func, id, upvalue, id2, data, name ) + end + n = n + 1 + until name == nil + end + end + return data.node2id[ func ] + end + + local option_names = { + "label", "shape", "style", "dir", "arrowhead", "arrowtail", "color", + "fillcolor" + } + + local function process_options( obj ) + local options = {} + for _,opt in ipairs( option_names ) do + if obj[ opt ] then + local quote_on = "\"" + local quote_off = "\"" + if opt == "label" and type( obj[ opt ] ) == "string" and + obj[ opt ]:match( "^<.*>$" ) then + quote_on, quote_off = "<", ">" + end + append( options, tostring( opt ) .. "=" .. quote_on .. + tostring( obj[ opt ] ) .. quote_off ) + end + end + return options + end + + + local function write_nodes( file, data ) + for _,n in ipairs( data.nodes ) do + if (data.max_depth <= 0 or + data.node2depth[ n.value ] <= data.max_depth) and + (data.show_unimportant or n.important) then + local options = process_options( n ) + + string_result = string_result .. " " .. tostring( data.node2id[ n.value ] ) .. " [" .. table.concat( options, "," ) .. "];--PULALINHA--" + + end + end + end + + + local function write_edges( file, data ) + for _,e in ipairs( data.edges ) do + if (data.max_depth <= 0 or + (data.node2depth[ e.A ] <= data.max_depth and + data.node2depth[ e.B ] <= data.max_depth)) and + (data.show_unimportant or + (data.nodes[ data.node2id[ e.A ] ].important and + data.nodes[ data.node2id[ e.B ] ].important)) then + local id1 = e.A_id or data.node2id[ e.A ] + local id2 = e.B_id or data.node2id[ e.B ] + local options = process_options( e ) + + string_result = string_result .. " " .. tostring( id1 ) .. " -> " .. tostring( id2 ) .. " [" .. table.concat( options, "," ) .. "];--PULALINHA--" + + end + end + end + + + -- main function + local function dottify( filename, val, ... ) + + local data = { + n_nodes = 1, + node2id = {}, + node2depth = {}, + nodes = {}, + edges = {}, + show_metatables = true, + show_upvalues = true, + show_environments = false, + use_html = true, + show_unimportant = false, + max_depth = 0, + } + for i = 1, select( '#', ... ) do + local opt = select( i, ... ) + if opt == "noenvironments" then + data.show_environments = false + elseif opt == "nometatables" then + data.show_metatables = false + elseif opt == "noupvalues" then + data.show_upvalues = false + elseif opt == "nohtml" then + data.use_html = false + elseif opt == "environments" then + data.show_environments = true + elseif opt == "metatables" then + data.show_metatables = true + elseif opt == "upvalues" then + data.show_upvalues = true + elseif opt == "html" then + data.use_html = true + elseif opt == "unimportant" then + data.show_unimportant = true + elseif type( opt ) == "number" then + data.max_depth = opt + end + end + local t = type( val ) + if t == "table" then + local id = dottify_table( val, data, 1 ) + data.nodes[ id ].important = true + elseif t == "function" then + local id = dottify_function( val, data, 1 ) + data.nodes[ id ].important = true + elseif t == "thread" then + local id = dottify_thread( val, data, 1 ) + data.nodes[ id ].important = true + elseif t == "userdata" then + local id = dottify_userdata( val, data, 1 ) + data.nodes[ id ].important = true + else + io.stderr:write( "warning: unsuitable value for dotlua!
" ) + end + + --local file = assert( io.open( filename, "w" ) ) + + string_result = string_result .. "digraph {--PULALINHA--" + + --file:write( "digraph {\n" ) + write_nodes ( o, data ) + write_edges ( o, data ) + + string_result = string_result .. "}--PULALINHA--" + + --file:write( "}\n" ) + --file:close() + return o + end + + dottify ( nil, _detalhes, "nohtml") + + print ("running...", string.len (string_result)) + + --_G ["_detalhes_database"].aaaaaaaa = string_result + + _detalhes:CopyPaste (string_result) + + + return dottify +end \ No newline at end of file diff --git a/gumps/janela_options.lua b/gumps/janela_options.lua index d1921a38..3f1a0e4c 100644 --- a/gumps/janela_options.lua +++ b/gumps/janela_options.lua @@ -15,7 +15,7 @@ function _detalhes:OpenOptionsWindow (instance) -- Most of details widgets have the same 6 first parameters: parent, container, global name, parent key, width, height - window = g:NewPanel (UIParent, _, "DetailsOptionsWindow", _, 700, 340) + window = g:NewPanel (UIParent, _, "DetailsOptionsWindow", _, 700, 360) window.instance = instance tinsert (UISpecialFrames, "DetailsOptionsWindow") window:SetPoint ("center", UIParent, "Center") @@ -28,11 +28,85 @@ function _detalhes:OpenOptionsWindow (instance) local c = window:CreateRightClickLabel ("medium") c:SetPoint ("bottomleft", window, "bottomleft", 5, 5) + --------------- Memory + + g:NewSlider (window, _, "$parentSlider", "segmentsSlider", 120, 20, 1, 25, 1, _detalhes.segments_amount) -- min, max, step, defaultv + g:NewSlider (window, _, "$parentSliderSegmentsSave", "segmentsSliderToSave", 80, 20, 1, 5, 1, _detalhes.segments_amount_to_save) -- min, max, step, defaultv + g:NewSlider (window, _, "$parentSliderUpdateSpeed", "updatespeedSlider", 160, 20, 0.3, 3, 0.1, _detalhes.update_speed, true) --parent, container, name, member, w, h, min, max, step, defaultv + + g:NewLabel (window, _, "$parentLabelMemory", "memoryLabel", "memory threshold") + window.memoryLabel:SetPoint (10, -35) + -- + g:NewSlider (window, _, "$parentSliderMemory", "memorySlider", 130, 20, 1, 4, 1, _detalhes.memory_threshold) -- min, max, step, defaultv + window.memorySlider:SetPoint ("left", window.memoryLabel, "right", 2, 0) + window.memorySlider:SetHook ("OnValueChange", function (slider, _, amount) --> slider, fixedValue, sliderValue + + amount = math.floor (amount) + + if (amount == 1) then + slider.amt:SetText ("<= 1gb") + _detalhes.memory_ram = 16 + _detalhes.segments_amount = 5 + _detalhes.segments_amount_to_save = 2 + _detalhes.update_speed = 1.5 + + _G.DetailsOptionsWindowSlider.MyObject:SetValue (_detalhes.segments_amount) + _G.DetailsOptionsWindowSliderSegmentsSave.MyObject:SetValue (_detalhes.segments_amount_to_save) + _G.DetailsOptionsWindowSliderUpdateSpeed.MyObject:SetValue (_detalhes.update_speed) + + elseif (amount == 2) then + slider.amt:SetText ("2gb") + _detalhes.memory_ram = 32 + _detalhes.segments_amount = 10 + _detalhes.segments_amount_to_save = 3 + _detalhes.update_speed = 1.2 + + _G.DetailsOptionsWindowSlider.MyObject:SetValue (_detalhes.segments_amount) + _G.DetailsOptionsWindowSliderSegmentsSave.MyObject:SetValue (_detalhes.segments_amount_to_save) + _G.DetailsOptionsWindowSliderUpdateSpeed.MyObject:SetValue (_detalhes.update_speed) + + elseif (amount == 3) then + slider.amt:SetText ("4gb") + _detalhes.memory_ram = 64 + _detalhes.segments_amount = 20 + _detalhes.segments_amount_to_save = 5 + _detalhes.update_speed = 1.0 + + _G.DetailsOptionsWindowSlider.MyObject:SetValue (_detalhes.segments_amount) + _G.DetailsOptionsWindowSliderSegmentsSave.MyObject:SetValue (_detalhes.segments_amount_to_save) + _G.DetailsOptionsWindowSliderUpdateSpeed.MyObject:SetValue (_detalhes.update_speed) + + elseif (amount == 4) then + slider.amt:SetText (">= 6gb") + _detalhes.memory_ram = 128 + _detalhes.segments_amount = 25 + _detalhes.segments_amount_to_save = 5 + _detalhes.update_speed = 0.5 + + _G.DetailsOptionsWindowSlider.MyObject:SetValue (_detalhes.segments_amount) + _G.DetailsOptionsWindowSliderSegmentsSave.MyObject:SetValue (_detalhes.segments_amount_to_save) + _G.DetailsOptionsWindowSliderUpdateSpeed.MyObject:SetValue (_detalhes.update_speed) + + end + + _detalhes.memory_threshold = amount + + return true + end) + window.memorySlider.tooltip = "Details! try adjust it self with the amount of memory\navaliable on your system.\n\nAlso is recommeded keep the amount of\nsegments low if your system have 2gb ram or less." + window.memorySlider.thumb:SetSize (40, 12) + window.memorySlider.thumb:SetTexture ([[Interface\Buttons\UI-Listbox-Highlight2]]) + window.memorySlider.thumb:SetVertexColor (.2, .2, .2, .9) + local t = _detalhes.memory_threshold + window.memorySlider:SetValue (1) + window.memorySlider:SetValue (2) + window.memorySlider:SetValue (t) + --------------- Max Segments g:NewLabel (window, _, "$parentSliderLabel", "segmentsLabel", "max segments") - window.segmentsLabel:SetPoint (10, -35) + window.segmentsLabel:SetPoint (10, -50) -- - g:NewSlider (window, _, "$parentSlider", "segmentsSlider", 120, 20, 1, 25, 1, _detalhes.segments_amount) -- min, max, step, defaultv + window.segmentsSlider:SetPoint ("left", window.segmentsLabel, "right") window.segmentsSlider:SetHook ("OnValueChange", function (self, _, amount) --> slider, fixedValue, sliderValue _detalhes.segments_amount = math.floor (amount) @@ -41,18 +115,18 @@ function _detalhes:OpenOptionsWindow (instance) --------------- Max Segments Saved g:NewLabel (window, _, "$parentLabelSegmentsSave", "segmentsSaveLabel", "segments saved on logout") - window.segmentsSaveLabel:SetPoint (10, -50) + window.segmentsSaveLabel:SetPoint (10, -65) -- - g:NewSlider (window, _, "$parentSliderSegmentsSave", "segmentsSliderToSave", 80, 20, 1, 5, 1, _detalhes.segments_amount_to_save) -- min, max, step, defaultv + window.segmentsSliderToSave:SetPoint ("left", window.segmentsSaveLabel, "right") window.segmentsSliderToSave:SetHook ("OnValueChange", function (self, _, amount) --> slider, fixedValue, sliderValue - _detalhes.segments_amount_to_save = amount + _detalhes.segments_amount_to_save = math.floor (amount) end) window.segmentsSliderToSave.tooltip = "How many segments will be saved on logout.\nHigher values may increase the time between a\nlogout button click and your character selection screen.\nIf you rarely check last day data, it`s high recommeded save only 1." --------------- Panic Mode g:NewLabel (window, _, "$parentPanicModeLabel", "panicModeLabel", "panic mode") - window.panicModeLabel:SetPoint (10, -65) + window.panicModeLabel:SetPoint (10, -80) -- g:NewSwitch (window, _, "$parentPanicModeSlider", "panicModeSlider", 60, 20, _, _, _detalhes.segments_panic_mode) window.panicModeSlider:SetPoint ("left", window.panicModeLabel, "right") @@ -63,7 +137,7 @@ function _detalhes:OpenOptionsWindow (instance) --------------- Animate Rows g:NewLabel (window, _, "$parentAnimateLabel", "animateLabel", "dance bars") - window.animateLabel:SetPoint (10, -80) + window.animateLabel:SetPoint (10, -95) -- g:NewSwitch (window, _, "$parentAnimateSlider", "animateSlider", 60, 20, _, _, _detalhes.use_row_animations) -- ltext, rtext, defaultv window.animateSlider:SetPoint ("left",window.animateLabel, "right") @@ -71,22 +145,9 @@ function _detalhes:OpenOptionsWindow (instance) _detalhes.use_row_animations = value end - --------------- Clear Ungrouped - --[[ - g:NewLabel (window, _, "$parentClearUngroupedLabel", "clearungroupedLabel", "delete ungrouped on logout") - window.clearungroupedLabel:SetPoint (10, -65) - -- - g:NewSwitch (window, _, "$parentClearUngroupedSlider", "clearungroupedSlider", 60, 20, _, _, _detalhes.clear_ungrouped) -- ltext, rtext, defaultv - window.clearungroupedSlider:SetPoint ("left", window.clearungroupedLabel, "right") - window.clearungroupedSlider.OnSwitch = function (self, _, value) --> slider, fixedValue, sliderValue - _detalhes.clear_ungrouped = value - end - window.clearungroupedSlider.tooltip = "erase actors without a group when you logout." - --]] - --------------- Use Scroll Bar g:NewLabel (window, _, "$parentUseScrollLabel", "scrollLabel", "show scroll bar") - window.scrollLabel:SetPoint (10, -95) + window.scrollLabel:SetPoint (10, -110) -- g:NewSwitch (window, _, "$parentUseScrollSlider", "scrollSlider", 60, 20, _, _, _detalhes.use_scroll) -- ltext, rtext, defaultv window.scrollSlider:SetPoint ("left", window.scrollLabel, "right") @@ -110,7 +171,7 @@ function _detalhes:OpenOptionsWindow (instance) --------------- Animate scroll bar g:NewLabel (window, _, "$parentAnimateScrollLabel", "animatescrollLabel", "animate scroll") - window.animatescrollLabel:SetPoint (10, -110) + window.animatescrollLabel:SetPoint (10, -125) -- g:NewSwitch (window, _, "$parentClearAnimateScrollSlider", "animatescrollSlider", 60, 20, _, _, _detalhes.animate_scroll) -- ltext, rtext, defaultv window.animatescrollSlider:SetPoint ("left", window.animatescrollLabel, "right") @@ -120,9 +181,9 @@ function _detalhes:OpenOptionsWindow (instance) --------------- Update Speed g:NewLabel (window, _, "$parentUpdateSpeedLabel", "updatespeedLabel", "update speed") - window.updatespeedLabel:SetPoint (10, -125) + window.updatespeedLabel:SetPoint (10, -143) -- - g:NewSlider (window, _, "$parentSliderUpdateSpeed", "updatespeedSlider", 160, 20, 0.3, 3, 0.1, _detalhes.update_speed, true) --parent, container, name, member, w, h, min, max, step, defaultv + --g:NewSlider (window, _, "$parentSliderUpdateSpeed", "updatespeedSlider", 160, 20, 0.3, 3, 0.1, _detalhes.update_speed, true) --parent, container, name, member, w, h, min, max, step, defaultv window.updatespeedSlider:SetPoint ("left", window.updatespeedLabel, "right") window.updatespeedSlider:SetThumbSize (50) window.updatespeedSlider.useDecimals = true @@ -147,7 +208,7 @@ function _detalhes:OpenOptionsWindow (instance) --------------- Time Type g:NewLabel (window, _, "$parentTimeTypeLabel", "timetypeLabel", "time measure") - window.timetypeLabel:SetPoint (10, -143) + window.timetypeLabel:SetPoint (10, -163) -- local onSelectTimeType = function (_, _, timetype) _detalhes.time_type = timetype @@ -165,23 +226,23 @@ function _detalhes:OpenOptionsWindow (instance) --------------- Captures g:NewImage (window, _, "$parentCaptureDamage", "damageCaptureImage", 20, 20, [[Interface\AddOns\Details\images\atributos_captures]]) - window.damageCaptureImage:SetPoint (10, -163) + window.damageCaptureImage:SetPoint (10, -183) window.damageCaptureImage:SetTexCoord (0, 0.125, 0, 1) g:NewImage (window, _, "$parentCaptureHeal", "healCaptureImage", 20, 20, [[Interface\AddOns\Details\images\atributos_captures]]) - window.healCaptureImage:SetPoint (10, -183) + window.healCaptureImage:SetPoint (10, -203) window.healCaptureImage:SetTexCoord (0.125, 0.25, 0, 1) g:NewImage (window, _, "$parentCaptureEnergy", "energyCaptureImage", 20, 20, [[Interface\AddOns\Details\images\atributos_captures]]) - window.energyCaptureImage:SetPoint (10, -203) + window.energyCaptureImage:SetPoint (10, -223) window.energyCaptureImage:SetTexCoord (0.25, 0.375, 0, 1) g:NewImage (window, _, "$parentCaptureMisc", "miscCaptureImage", 20, 20, [[Interface\AddOns\Details\images\atributos_captures]]) - window.miscCaptureImage:SetPoint (10, -223) + window.miscCaptureImage:SetPoint (10, -243) window.miscCaptureImage:SetTexCoord (0.375, 0.5, 0, 1) g:NewImage (window, _, "$parentCaptureAura", "auraCaptureImage", 20, 20, [[Interface\AddOns\Details\images\atributos_captures]]) - window.auraCaptureImage:SetPoint (10, -243) + window.auraCaptureImage:SetPoint (10, -263) window.auraCaptureImage:SetTexCoord (0.5, 0.625, 0, 1) g:NewLabel (window, _, "$parentCaptureDamageLabel", "damageCaptureLabel", "Damage") @@ -247,7 +308,7 @@ function _detalhes:OpenOptionsWindow (instance) --------------- Cloud Capture g:NewLabel (window, _, "$parentCloudCaptureLabel", "cloudCaptureLabel", "Cloud Capture") - window.cloudCaptureLabel:SetPoint (10, -268) + window.cloudCaptureLabel:SetPoint (10, -288) g:NewSwitch (window, _, "$parentCloudAuraSlider", "cloudCaptureSlider", 60, 20, _, _, _detalhes.cloud_capture) window.cloudCaptureSlider:SetPoint ("left", window.cloudCaptureLabel, "right", 2) @@ -258,7 +319,7 @@ function _detalhes:OpenOptionsWindow (instance) --------------- Max Instances g:NewLabel (window, _, "$parentLabelMaxInstances", "maxInstancesLabel", "max instances") - window.maxInstancesLabel:SetPoint (10, -288) + window.maxInstancesLabel:SetPoint (10, -314) -- g:NewSlider (window, _, "$parentSliderMaxInstances", "maxInstancesSlider", 150, 20, 12, 30, 1, _detalhes.instances_amount) -- min, max, step, defaultv window.maxInstancesSlider:SetPoint ("left", window.maxInstancesLabel, "right") @@ -267,8 +328,11 @@ function _detalhes:OpenOptionsWindow (instance) end) window.maxInstancesSlider.tooltip = "Amount of windows which can be created." --- Current Instalnce -------------------------------------------------------------------------------------------------------------------------------------------- + +-- Current Instalnce -------------------------------------------------------------------------------------------------------------------------------------------- + + --------------- Row textures g:NewLabel (window, _, "$parentTextureLabel", "textureLabel", "row style") window.textureLabel:SetPoint (250, -30) @@ -351,6 +415,8 @@ function _detalhes:OpenOptionsWindow (instance) local selectedAlpha = function() local r, g, b = ColorPickerFrame:GetColorRGB() local a = OpacitySliderFrame:GetValue() + + a = _detalhes:Scale (0, 1, 0.5, 1, a) - 0.5 window.instancecolortexture:SetTexture (r, g, b) window.instancecolortexture:SetAlpha (a) @@ -362,8 +428,9 @@ function _detalhes:OpenOptionsWindow (instance) local colorpick = function() ColorPickerFrame.func = selectedColor + ColorPickerFrame.opacityFunc = selectedAlpha ColorPickerFrame.cancelFunc = canceledColor - ColorPickerFrame.hasOpacity = false + ColorPickerFrame.hasOpacity = true --false ColorPickerFrame.opacity = window.instance.color[4] or 1 ColorPickerFrame.previousValues = window.instance.color ColorPickerFrame:SetParent (window.widget) @@ -371,7 +438,7 @@ function _detalhes:OpenOptionsWindow (instance) ColorPickerFrame:Show() end - g:NewImage (window, _, "$parentInstanceColorTexture", "instancecolortexture", 100, 12) + g:NewImage (window, _, "$parentInstanceColorTexture", "instancecolortexture", 150, 12) window.instancecolortexture:SetPoint ("left", window.instancecolor, "right", 2) window.instancecolortexture:SetTexture (1, 1, 1) @@ -634,6 +701,7 @@ function _detalhes:OpenOptionsWindow (instance) if (tinstance.wallpaper.texture:find ("TALENTFRAME")) then g:ImageEditor (callmeback, tinstance.wallpaper.texture, tinstance.wallpaper.texcoord, tinstance.wallpaper.overlay, window.instance.baseframe.wallpaper:GetWidth(), window.instance.baseframe.wallpaper:GetHeight()) else + tinstance.wallpaper.overlay [4] = 0.5 g:ImageEditor (callmeback, tinstance.wallpaper.texture, tinstance.wallpaper.texcoord, tinstance.wallpaper.overlay, window.instance.baseframe.wallpaper:GetWidth(), window.instance.baseframe.wallpaper:GetHeight()) end end @@ -648,6 +716,35 @@ function _detalhes:OpenOptionsWindow (instance) window.editImage:InstallCustomTexture() window.editImage:SetPoint ("left", window.anchorDropdown, "right", 2) + -- + + --------------- Alpha + g:NewLabel (window, _, "$parentAlphaLabel", "alphaLabel", "transparency") + window.alphaLabel:SetPoint (250, -230) + -- + g:NewSlider (window, _, "$parentAlphaSlider", "alphaSlider", 160, 20, 0.02, 1, 0.02, instance.bg_alpha, true) -- min, max, step, defaultv + window.alphaSlider:SetPoint ("left", window.alphaLabel, "right", 2, 0) + window.alphaSlider.useDecimals = true + window.alphaSlider:SetHook ("OnValueChange", function (self, instance, amount) --> slider, fixedValue, sliderValue + self.amt:SetText (string.format ("%.2f", amount)) + instance:SetBackgroundAlpha (amount) + return true + end) + window.alphaSlider.thumb:SetSize (30+(120*0.2)+2, 20*1.2) + window.alphaSlider.tooltip = "Change the background alpha for this instance" + + --------------- Auto Current Segment + + g:NewLabel (window, _, "$parentAutoCurrentLabel", "autoCurrentLabel", "auto switch to current") + window.autoCurrentLabel:SetPoint (250, -253) + + g:NewSwitch (window, _, "$parentAutoCurrentSlider", "autoCurrentSlider", 60, 20, _, _, instance.auto_current) + window.autoCurrentSlider:SetPoint ("left", window.autoCurrentLabel, "right", 2) + window.autoCurrentSlider.tooltip = "Whenever a combat start and there is no other instance on\ncurrent segment, this instance auto switch to current segment." + window.autoCurrentSlider.OnSwitch = function (self, instance, value) + instance.auto_current = value + end + ----------------------- Save Style Text Entry and Button ----------------------------------------- ----- style name @@ -666,7 +763,8 @@ function _detalhes:OpenOptionsWindow (instance) fontSize = tonumber (window.fonsizeSlider.value), fontFace = window.fontDropdown.value, color = window.instance.color, - wallpaper = instance.wallpaper + wallpaper = instance.wallpaper, + alpha = tonumber (window.alphaSlider.value) } _detalhes.savedStyles [#_detalhes.savedStyles+1] = savedObject window.saveStyleName.text = "" @@ -695,6 +793,8 @@ function _detalhes:OpenOptionsWindow (instance) instance:InstanceColor (style.color) --wallpaper instance:InstanceWallpaper (style.wallpaper) + --alpha + instance:SetBackgroundAlpha (style.alpha or _detalhes.default_bg_alpha) --refresh instance:RefreshBars() --update options @@ -703,6 +803,7 @@ function _detalhes:OpenOptionsWindow (instance) _G.DetailsOptionsWindowTextureDropdown.MyObject:Select (style.texture) _G.DetailsOptionsWindowFontDropdown.MyObject:Select (style.fontFace) _G.DetailsOptionsWindowSliderFontSize.MyObject:SetValue (style.fontSize) + _G.DetailsOptionsWindowAlphaSlider.MyObject:SetValue (style.alpha or _detalhes.default_bg_alpha) end local createLoadMenu = function() @@ -809,6 +910,12 @@ function _detalhes:OpenOptionsWindow (instance) _G.DetailsOptionsWindowSliderFontSize.MyObject:SetFixedParameter (instance) _G.DetailsOptionsWindowSliderFontSize.MyObject:SetValue (instance.barrasInfo.fontSize) -- + _G.DetailsOptionsWindowAutoCurrentSlider.MyObject:SetFixedParameter (instance) + _G.DetailsOptionsWindowAutoCurrentSlider.MyObject:SetValue (instance.auto_current) + -- + _G.DetailsOptionsWindowAlphaSlider.MyObject:SetFixedParameter (instance) + _G.DetailsOptionsWindowAlphaSlider.MyObject:SetValue (instance.bg_alpha) + -- _G.DetailsOptionsWindowUseBackgroundSlider.MyObject:SetFixedParameter (instance) _G.DetailsOptionsWindowBackgroundDropdown.MyObject:SetFixedParameter (instance) _G.DetailsOptionsWindowBackgroundDropdown2.MyObject:SetFixedParameter (instance) diff --git a/gumps/janela_principal.lua b/gumps/janela_principal.lua index a6f93d39..0b4bc80a 100644 --- a/gumps/janela_principal.lua +++ b/gumps/janela_principal.lua @@ -1,3 +1,6 @@ + +--note: this file need a major clean up especially on function creation. + local _detalhes = _G._detalhes local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) @@ -1333,7 +1336,7 @@ local function button_stretch_scripts (BaseFrame, BackGroundDisplay, instancia) _detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, esta_instancia) local _r, _g, _b, _a = esta_instancia.baseframe:GetBackdropColor() - gump:GradientEffect ( esta_instancia.baseframe, "frame", _r, _g, _b, _a, _detalhes.default_bg_color, _detalhes.default_bg_color, _detalhes.default_bg_color, _detalhes.default_bg_alpha, 0.5) + gump:GradientEffect ( esta_instancia.baseframe, "frame", _r, _g, _b, _a, instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha, 0.5) if (esta_instancia.wallpaper.enabled) then _r, _g, _b = esta_instancia.baseframe.wallpaper:GetVertexColor() @@ -1351,7 +1354,7 @@ local function button_stretch_scripts (BaseFrame, BackGroundDisplay, instancia) end local _r, _g, _b, _a = BaseFrame:GetBackdropColor() - gump:GradientEffect ( BaseFrame, "frame", _r, _g, _b, _a, _detalhes.default_bg_color, _detalhes.default_bg_color, _detalhes.default_bg_color, _detalhes.default_bg_alpha, 0.5) + gump:GradientEffect ( BaseFrame, "frame", _r, _g, _b, _a, instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha, 0.5) if (instancia.wallpaper.enabled) then _r, _g, _b = BaseFrame.wallpaper:GetVertexColor() _a = BaseFrame.wallpaper:GetAlpha() @@ -1630,7 +1633,7 @@ function CreateAlertFrame (BaseFrame, instancia) local rotate_frame = CreateFrame ("frame", nil, alert_bg) rotate_frame:SetWidth (12) - rotate_frame:SetPoint ("right", alert_bg, "right") + rotate_frame:SetPoint ("right", alert_bg, "right", -2, 0) rotate_frame:SetHeight (alert_bg:GetWidth()) local icon = rotate_frame:CreateTexture (nil, "overlay") @@ -1790,7 +1793,7 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) BaseFrame:SetMaxResize (_detalhes.max_window_size.width, _detalhes.max_window_size.height) BaseFrame:SetBackdrop (gump_fundo_backdrop) - BaseFrame:SetBackdropColor (_detalhes.default_bg_color, _detalhes.default_bg_color, _detalhes.default_bg_color, _detalhes.default_bg_alpha) + BaseFrame:SetBackdropColor (instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha) --BaseFrame:SetBackdropColor (0, 0, 0, 1) -- fundo @@ -1803,7 +1806,7 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) BackGroundDisplay:SetPoint ("TOPLEFT", BaseFrame, "TOPLEFT") BackGroundDisplay:SetPoint ("BOTTOMRIGHT", BaseFrame, "BOTTOMRIGHT") BackGroundDisplay:SetBackdrop (gump_fundo_backdrop) - BackGroundDisplay:SetBackdropColor (_detalhes.default_bg_color, _detalhes.default_bg_color, _detalhes.default_bg_color, _detalhes.default_bg_alpha) + BackGroundDisplay:SetBackdropColor (instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha) --BackGroundDisplay:SetBackdropColor (0, 0, 0, 1) @@ -1832,9 +1835,14 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) if (not _detalhes.initializing) then instancia._version:Hide() end - + --[[ BaseFrame.wallpaper = BaseFrame:CreateTexture (nil, "border") BaseFrame.wallpaper:Hide() + BaseFrame.wallpaperUP = BackGroundDisplay:CreateTexture (nil, "overlay") + BaseFrame.wallpaperUP:Hide() + --]] + BaseFrame.wallpaper = BackGroundDisplay:CreateTexture (nil, "overlay") + BaseFrame.wallpaper:Hide() BaseFrame.alert = CreateAlertFrame (BaseFrame, instancia) @@ -2241,7 +2249,7 @@ function _detalhes:InstanceWallpaper (texture, anchor, alpha, texcoord, width, h t:SetPoint ("topleft", self.baseframe, "topleft") t:SetPoint ("bottomright", self.baseframe, "bottomright") elseif (anchor == "center") then - t:SetPoint ("center", self.baseframe, "center") + t:SetPoint ("center", self.baseframe, "center", 0, 4) elseif (anchor == "stretchLR") then t:SetPoint ("center", self.baseframe, "center") t:SetPoint ("left", self.baseframe, "left") @@ -2380,7 +2388,9 @@ end function _detalhes:UnConsolidateIcons() self.consolidate = false - print (self.consolidateButton:GetObjectType()) + if (not self.consolidateButton) then + return self:DefaultIcons() + end self.consolidateButton:Hide() return self:DefaultIcons() end @@ -2446,10 +2456,10 @@ function _detalhes:DefaultIcons (_mode, _segment, _attributes, _report) if (_thisIcon2:IsShown()) then _thisIcon:ClearAllPoints() if (self.consolidate) then - _thisIcon:SetPoint ("topleft", _thisIcon2, "bottomleft", anchors[index][1], anchors[index][2]-2) + _thisIcon:SetPoint ("topleft", _thisIcon2.widget or _thisIcon2, "bottomleft", anchors[index][1], anchors[index][2]-2) _thisIcon:SetParent (self.consolidateFrame) else - _thisIcon:SetPoint ("left", _thisIcon2, "right", 0 + anchors[index][1], 0 + anchors[index][2]) + _thisIcon:SetPoint ("left", _thisIcon2.widget or _thisIcon2, "right", 0 + anchors[index][1], 0 + anchors[index][2]) _thisIcon:SetParent (self.baseframe) _thisIcon:SetFrameLevel (self.baseframe.UPFrame:GetFrameLevel()+1) end @@ -2476,6 +2486,7 @@ function _detalhes:DefaultIcons (_mode, _segment, _attributes, _report) return true end +local empty_segment_color = {1, 1, 1, .4} function gump:CriaCabecalho (BaseFrame, instancia) @@ -2697,6 +2708,23 @@ function gump:CriaCabecalho (BaseFrame, instancia) end) --> SELECIONAR O SEGMENTO ---------------------------------------------------------------------------------------------------------------------------------------------------- + + --[[ + BaseFrame.cabecalho.segmento = gump:NewButton (BaseFrame, nil, "DetailsSegmentButton"..instancia.meu_id, nil, 16, 16, function() end, nil, nil, "Interface\GossipFrame\TrainerGossipIcon") + BaseFrame.cabecalho.segmento:SetFrameLevel (BaseFrame.UPFrame:GetFrameLevel()+1) + + BaseFrame.cabecalho.segmento:SetHook ("OnMouseUp", function (button, buttontype) + if (buttontype == "LeftButton") then + local segmento_goal = instancia.segmento + 1 + if (segmento_goal > _detalhes.segments_amount) then + + end + elseif (buttontype == "RightButton") then + --instancia:TrocaTabela (-2) + end + end) + --]] + BaseFrame.cabecalho.segmento = gump:NewDetailsButton (BaseFrame, _, instancia, instancia.TrocaTabela, instancia, -2, 16, 16, "Interface\\GossipFrame\\TrainerGossipIcon") BaseFrame.cabecalho.segmento:SetFrameLevel (BaseFrame.UPFrame:GetFrameLevel()+1) @@ -2727,51 +2755,79 @@ function gump:CriaCabecalho (BaseFrame, instancia) ----------- segments local menuIndex = 0 _detalhes.segments_amount = math.floor (_detalhes.segments_amount) + + local fight_amount = 0 + + local filled_segments = 0 + for i = 1, _detalhes.segments_amount do + if (_detalhes.tabela_historico.tabelas [i]) then + filled_segments = filled_segments + 1 + else + break + end + end + + filled_segments = _detalhes.segments_amount - filled_segments - 2 + local fill = math.abs (filled_segments - _detalhes.segments_amount) + for i = _detalhes.segments_amount, 1, -1 do - local thisCombat = _detalhes.tabela_historico.tabelas [i] - if (thisCombat) then - local enemy = thisCombat.is_boss and thisCombat.is_boss.name + if (i <= fill) then - if (thisCombat.is_boss and thisCombat.is_boss.name) then - CoolTip:AddLine (thisCombat.is_boss.name .." (#"..i..")", _, 1, "red") - local portrait = _detalhes:GetBossPortrait (thisCombat.is_boss.mapid, thisCombat.is_boss.index) - if (portrait) then - CoolTip:AddIcon (portrait, 2, "top", 128, 64) - end - else - enemy = thisCombat.enemy - if (enemy) then - CoolTip:AddLine (thisCombat.enemy .." (#"..i..")", _, 1, "yellow") + local thisCombat = _detalhes.tabela_historico.tabelas [i] + if (thisCombat) then + local enemy = thisCombat.is_boss and thisCombat.is_boss.name + + if (thisCombat.is_boss and thisCombat.is_boss.name) then + + if (thisCombat.is_boss.killed) then + CoolTip:AddLine (thisCombat.is_boss.name .." (#"..i..")", _, 1, "lime") + else + CoolTip:AddLine (thisCombat.is_boss.name .." (#"..i..")", _, 1, "red") + end + + local portrait = _detalhes:GetBossPortrait (thisCombat.is_boss.mapid, thisCombat.is_boss.index) + if (portrait) then + CoolTip:AddIcon (portrait, 2, "top", 128, 64) + end + CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 16, 0.96875, 1, 0, 0.03125) else - CoolTip:AddLine (segmentos.past..i, _, 1, "silver") + enemy = thisCombat.enemy + if (enemy) then + CoolTip:AddLine (thisCombat.enemy .." (#"..i..")", _, 1, "yellow") + else + CoolTip:AddLine (segmentos.past..i, _, 1, "silver") + end + CoolTip:AddIcon ("Interface\\QUESTFRAME\\UI-Quest-BulletPoint", "main", "left", 16, 16) + end + + CoolTip:AddMenu (1, instancia.TrocaTabela, i) + + CoolTip:AddLine (Loc ["STRING_SEGMENT_ENEMY"] .. ":", enemy, 2, "white", "white") + + local decorrido = (thisCombat.end_time or _detalhes._tempo) - thisCombat.start_time + local minutos, segundos = _math_floor (decorrido/60), _math_floor (decorrido%60) + CoolTip:AddLine (Loc ["STRING_SEGMENT_TIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white") + + CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", thisCombat.data_inicio, 2, "white", "white") + CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", thisCombat.data_fim or "in progress", 2, "white", "white") + + fight_amount = fight_amount + 1 + else + CoolTip:AddLine (Loc ["STRING_SEGMENT_LOWER"] .. " #" .. i, _, 1, "gray") + CoolTip:AddMenu (1, instancia.TrocaTabela, i) + CoolTip:AddIcon ("Interface\\QUESTFRAME\\UI-Quest-BulletPoint", "main", "left", 16, 16, nil, nil, nil, nil, empty_segment_color) + CoolTip:AddLine (Loc ["STRING_SEGMENT_EMPTY"], _, 2) + end + + if (menuIndex) then + menuIndex = menuIndex + 1 + if (instancia.segmento == i) then + CoolTip:SetLastSelected ("main", menuIndex) + menuIndex = nil end end - - CoolTip:AddMenu (1, instancia.TrocaTabela, i) - CoolTip:AddIcon ("Interface\\QUESTFRAME\\UI-Quest-BulletPoint", "main", "left", 16, 16) - - CoolTip:AddLine (Loc ["STRING_SEGMENT_ENEMY"] .. ":", enemy, 2, "white", "white") - - local decorrido = (thisCombat.end_time or _detalhes._tempo) - thisCombat.start_time - local minutos, segundos = _math_floor (decorrido/60), _math_floor (decorrido%60) - CoolTip:AddLine (Loc ["STRING_SEGMENT_TIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white") - - CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", thisCombat.data_inicio, 2, "white", "white") - CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", thisCombat.data_fim or "in progress", 2, "white", "white") - else - CoolTip:AddLine (Loc ["STRING_SEGMENT_LOWER"] .. " #" .. i, _, 1, "gray") - CoolTip:AddMenu (1, instancia.TrocaTabela, i) - CoolTip:AddIcon ("Interface\\QUESTFRAME\\UI-Quest-BulletPoint", "main", "left", 16, 16) - CoolTip:AddLine (Loc ["STRING_SEGMENT_EMPTY"], _, 2) - end - if (menuIndex) then - menuIndex = menuIndex + 1 - if (instancia.segmento == i) then - CoolTip:SetLastSelected ("main", menuIndex) - menuIndex = nil - end end end @@ -2779,7 +2835,7 @@ function gump:CriaCabecalho (BaseFrame, instancia) ----------- current CoolTip:AddLine (segmentos.current_standard, _, 1, "white") CoolTip:AddMenu (1, instancia.TrocaTabela, 0) - CoolTip:AddIcon ("Interface\\QUESTFRAME\\UI-Quest-BulletPoint", "main", "left", 16, 16) + CoolTip:AddIcon ("Interface\\QUESTFRAME\\UI-Quest-BulletPoint", "main", "left", 16, 16, nil, nil, nil, nil, "orange") local enemy = _detalhes.tabela_vigente.is_boss and _detalhes.tabela_vigente.is_boss.name or _detalhes.tabela_vigente.enemy or "--x--x--" @@ -2810,15 +2866,17 @@ function gump:CriaCabecalho (BaseFrame, instancia) CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", _detalhes.tabela_vigente.data_inicio, 2, "white", "white") CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", _detalhes.tabela_vigente.data_fim or "in progress", 2, "white", "white") + --> fill é a quantidade de menu que esta sendo mostrada if (instancia.segmento == 0) then - CoolTip:SetLastSelected ("main", _detalhes.segments_amount + 1) + CoolTip:SetLastSelected ("main", fill + 1) menuIndex = nil end ----------- overall - CoolTip:AddLine (segmentos.overall_standard, _, 1, "white") + --CoolTip:AddLine (segmentos.overall_standard, _, 1, "white") Loc ["STRING_REPORT_LAST"] .. " " .. fight_amount .. " " .. Loc ["STRING_REPORT_FIGHTS"] + CoolTip:AddLine (Loc ["STRING_SEGMENT_OVERALL"], _, 1, "white") CoolTip:AddMenu (1, instancia.TrocaTabela, -1) - CoolTip:AddIcon ("Interface\\QUESTFRAME\\UI-Quest-BulletPoint", "main", "left", 16, 16) + CoolTip:AddIcon ("Interface\\QUESTFRAME\\UI-Quest-BulletPoint", "main", "left", 16, 16, nil, nil, nil, nil, "orange") CoolTip:AddLine (Loc ["STRING_SEGMENT_ENEMY"] .. ":", "--x--x--", 2, "white", "white")--localize-me @@ -2854,8 +2912,9 @@ function gump:CriaCabecalho (BaseFrame, instancia) end CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", lastFight, 2, "white", "white") + --> fill é a quantidade de menu que esta sendo mostrada if (instancia.segmento == -1) then - CoolTip:SetLastSelected ("main", _detalhes.segments_amount + 2) + CoolTip:SetLastSelected ("main", fill + 2) menuIndex = nil end @@ -2911,7 +2970,7 @@ function gump:CriaCabecalho (BaseFrame, instancia) --> SELECIONAR O ATRIBUTO ---------------------------------------------------------------------------------------------------------------------------------------------------- BaseFrame.cabecalho.atributo = gump:NewDetailsButton (BaseFrame, _, instancia, instancia.TrocaTabela, instancia, -3, 16, 16, "Interface\\AddOns\\Details\\images\\sword") BaseFrame.cabecalho.atributo:SetFrameLevel (BaseFrame.UPFrame:GetFrameLevel()+1) - BaseFrame.cabecalho.atributo:SetPoint ("left", BaseFrame.cabecalho.segmento, "right", 0, 0) + BaseFrame.cabecalho.atributo:SetPoint ("left", BaseFrame.cabecalho.segmento.widget, "right", 0, 0) --> Cooltip automatic method through Injection diff --git a/gumps/janela_report.lua b/gumps/janela_report.lua index 66dace77..01efbe48 100644 --- a/gumps/janela_report.lua +++ b/gumps/janela_report.lua @@ -239,13 +239,13 @@ local _UISpecialFrames = UISpecialFrames --> wow api locals slider:SetThumbTexture (slider.thumb) --depois slider:SetOrientation ("HORIZONTAL") - slider:SetMinMaxValues (1, 25) - slider:SetValueStep (1) + slider:SetMinMaxValues (1.0, 25.0) + slider:SetValueStep (1.0) slider:SetWidth (232) slider:SetHeight (20) local last_value = _detalhes.report_lines or 5 - slider:SetValue (last_value) + slider:SetValue (math.floor (last_value)) slider.amt = slider:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") local amt = slider:GetValue() @@ -258,7 +258,7 @@ local _UISpecialFrames = UISpecialFrames --> wow api locals slider.amt:SetPoint ("center", slider.thumb, "center") slider:SetScript ("OnValueChanged", function (self) - local amt = self:GetValue() + local amt = math.floor (self:GetValue()) _detalhes.report_lines = amt if (amt < 10) then amt = "0"..amt diff --git a/gumps/janela_welcome.lua b/gumps/janela_welcome.lua index 4f63f8b5..a783b0de 100644 --- a/gumps/janela_welcome.lua +++ b/gumps/janela_welcome.lua @@ -366,7 +366,7 @@ function _detalhes:OpenWelcomeWindow () interval_text:SetPoint ("topleft", window, "topleft", 30, -110) local dance_text = window:CreateFontString (nil, "overlay", "GameFontNormal") - dance_text:SetText ("Keeping 'Dance Bars' disabled may help save performance.") + dance_text:SetText ("Keeping 'Dance Bars' disabled also may help with performance.") dance_text:SetWidth (460) dance_text:SetHeight (40) dance_text:SetJustifyH ("left") @@ -421,6 +421,109 @@ function _detalhes:OpenWelcomeWindow () -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> page 5 + local bg44 = window:CreateTexture (nil, "overlay") + bg44:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) + bg44:SetPoint ("bottomright", window, "bottomright", -10, 10) + bg44:SetHeight (125*3)--125 + bg44:SetWidth (89*3)--82 + bg44:SetAlpha (.1) + bg44:SetTexCoord (1, 0, 0, 1) + + g:NewLabel (window, _, "$parentChangeMind44Label", "changemind44Label", "if you change your mind, you can always modify again through options panel", "GameFontNormal", 9, "orange") + window.changemind44Label:SetPoint ("center", window, "center") + window.changemind44Label:SetPoint ("bottom", window, "bottom", 0, 19) + window.changemind44Label.align = "|" + + local texto44 = window:CreateFontString (nil, "overlay", "GameFontNormal") + texto44:SetPoint ("topleft", window, "topleft", 20, -80) + texto44:SetText ("Memory Adjustments:") + + local interval_text4 = window:CreateFontString (nil, "overlay", "GameFontNormal") + interval_text4:SetText ("The amount of memory used by addons doesn't affect framerate, but, saving memory in computers which doesn't have much of it, may help the whole system. Details! try to be as flexible as possible to keep the game smooth even in not high-end hardware.") + interval_text4:SetWidth (460) + interval_text4:SetHeight (60) + interval_text4:SetJustifyH ("left") + interval_text4:SetJustifyV ("top") + interval_text4:SetTextColor (1, 1, 1, 1) + interval_text4:SetPoint ("topleft", window, "topleft", 30, -110) + + --[[ + local dance_text = window:CreateFontString (nil, "overlay", "GameFontNormal") + dance_text:SetText ("Low amount of segments can keep memory .") + dance_text:SetWidth (460) + dance_text:SetHeight (40) + dance_text:SetJustifyH ("left") + dance_text:SetJustifyV ("top") + dance_text:SetTextColor (1, 1, 1, 1) + dance_text:SetPoint ("topleft", window, "topleft", 30, -170) + --]] + --------------- Max Segments + g:NewLabel (window, _, "$parentSliderLabel", "segmentsLabel", "max segments") + window.segmentsLabel:SetPoint (31, -170) + -- + g:NewSlider (window, _, "$parentSlider", "segmentsSlider", 120, 20, 1, 25, 1, _detalhes.segments_amount) -- min, max, step, defaultv + window.segmentsSlider:SetPoint ("left", window.segmentsLabel, "right", 2, 0) + window.segmentsSlider:SetHook ("OnValueChange", function (self, _, amount) --> slider, fixedValue, sliderValue + _detalhes.segments_amount = math.floor (amount) + end) + window.segmentsSlider.tooltip = "How many segments you want to maintain.\nFeel free to adjust this number to be comfortable for you." + + --------------- memory + g:NewLabel (window, _, "$parentLabelMemory", "memoryLabel", "memory threshold") + window.memoryLabel:SetPoint (31, -185) + -- + g:NewSlider (window, _, "$parentSliderMemory", "memorySlider", 130, 20, 1, 4, 1, _detalhes.memory_threshold) -- min, max, step, defaultv + window.memorySlider:SetPoint ("left", window.memoryLabel, "right", 2, 0) + window.memorySlider:SetHook ("OnValueChange", function (slider, _, amount) --> slider, fixedValue, sliderValue + + amount = math.floor (amount) + + if (amount == 1) then + slider.amt:SetText ("<= 1gb") + _detalhes.memory_ram = 16 + elseif (amount == 2) then + slider.amt:SetText ("2gb") + _detalhes.memory_ram = 32 + elseif (amount == 3) then + slider.amt:SetText ("4gb") + _detalhes.memory_ram = 64 + elseif (amount == 4) then + slider.amt:SetText (">= 6gb") + _detalhes.memory_ram = 128 + end + + _detalhes.memory_threshold = amount + return true + end) + window.memorySlider.tooltip = "Details! try adjust it self with the amount of memory\navaliable on your system.\n\nAlso is recommeded keep the amount of\nsegments low if your system have 2gb ram or less." + window.memorySlider.thumb:SetSize (40, 10) + window.memorySlider.thumb:SetTexture ([[Interface\Buttons\UI-Listbox-Highlight2]]) + window.memorySlider.thumb:SetVertexColor (.2, .2, .2, .9) + local t = _detalhes.memory_threshold + window.memorySlider:SetValue (1) + window.memorySlider:SetValue (2) + window.memorySlider:SetValue (t) + + --------------- Max Segments Saved + g:NewLabel (window, _, "$parentLabelSegmentsSave", "segmentsSaveLabel", "segments saved on logout") + window.segmentsSaveLabel:SetPoint (31, -200) + -- + g:NewSlider (window, _, "$parentSliderSegmentsSave", "segmentsSliderToSave", 120, 20, 1, 5, 1, _detalhes.segments_amount_to_save) -- min, max, step, defaultv + window.segmentsSliderToSave:SetPoint ("left", window.segmentsSaveLabel, "right") + window.segmentsSliderToSave:SetHook ("OnValueChange", function (self, _, amount) --> slider, fixedValue, sliderValue + _detalhes.segments_amount_to_save = math.floor (amount) + end) + window.segmentsSliderToSave.tooltip = "High values may increase the time between a\nlogout button click and your character selection screen.\n\nIf you rarely check 'last day data', it`s high recommeded save only 1." + + pages [#pages+1] = {bg44, window.changemind44Label, texto44, interval_text4, window.memorySlider, window.memoryLabel, window.segmentsLabel, window.segmentsSlider, window.segmentsSaveLabel, window.segmentsSliderToSave} + + for _, widget in ipairs (pages[#pages]) do + widget:Hide() + end + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--> page 6 + local bg6 = window:CreateTexture (nil, "overlay") bg6:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) bg6:SetPoint ("bottomright", window, "bottomright", -10, 10) @@ -456,7 +559,7 @@ function _detalhes:OpenWelcomeWindow () end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> page 6 +--> page 7 local bg6 = window:CreateTexture (nil, "overlay") bg6:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) @@ -493,7 +596,7 @@ function _detalhes:OpenWelcomeWindow () end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> page 7 +--> page 8 local bg7 = window:CreateTexture (nil, "overlay") bg7:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) @@ -537,7 +640,125 @@ function _detalhes:OpenWelcomeWindow () end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---> page 8 +--> page 9 + + local bg77 = window:CreateTexture (nil, "overlay") + bg77:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) + bg77:SetPoint ("bottomright", window, "bottomright", -10, 10) + bg77:SetHeight (125*3)--125 + bg77:SetWidth (89*3)--82 + bg77:SetAlpha (.1) + bg77:SetTexCoord (1, 0, 0, 1) + + local texto77 = window:CreateFontString (nil, "overlay", "GameFontNormal") + texto77:SetPoint ("topleft", window, "topleft", 20, -80) + texto77:SetText ("Using the Interface: Snap Instances") + + local texto_snap = window:CreateFontString (nil, "overlay", "GameFontNormal") + texto_snap:SetPoint ("topleft", window, "topleft", 25, -101) + texto_snap:SetText ("You can |cFFFFFF00snap windows|r in vertical or horizontal. A window always snap with |cFFFFFF00previous instance number|r: like the image in the right, instance |cFFFFFF00#5|r snapped with |cFFFFFF00#4|r. When a snapped window is stretched, all other instances in the |cFFFFFF00cluster are also|r stretched.") + texto_snap:SetWidth (160) + texto_snap:SetHeight (110) + texto_snap:SetJustifyH ("left") + texto_snap:SetJustifyV ("top") + texto_snap:SetTextColor (1, 1, 1, 1) + local fonte, _, flags = texto_snap:GetFont() + texto_snap:SetFont (fonte, 11, flags) + + local snap_image1 = window:CreateTexture (nil, "overlay") + snap_image1:SetTexture ([[Interface\Addons\Details\images\icons]]) + snap_image1:SetPoint ("topright", window, "topright", -12, -95) + snap_image1:SetWidth (308) + snap_image1:SetHeight (121) + snap_image1:SetTexCoord (0, 0.6015625, 0.353515625, 0.58984375) + + + pages [#pages+1] = {bg77, texto77, snap_image1, texto_snap} + + for _, widget in ipairs (pages[#pages]) do + widget:Hide() + end + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--> page 10 + + local bg88 = window:CreateTexture (nil, "overlay") + bg88:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) + bg88:SetPoint ("bottomright", window, "bottomright", -10, 10) + bg88:SetHeight (125*3)--125 + bg88:SetWidth (89*3)--82 + bg88:SetAlpha (.1) + bg88:SetTexCoord (1, 0, 0, 1) + + local texto88 = window:CreateFontString (nil, "overlay", "GameFontNormal") + texto88:SetPoint ("topleft", window, "topleft", 20, -80) + texto88:SetText ("Using the Interface: Micro Display") + --|cFFFFFF00 + local texto_micro_display = window:CreateFontString (nil, "overlay", "GameFontNormal") + texto_micro_display:SetPoint ("topleft", window, "topleft", 25, -101) + texto_micro_display:SetText ("All instances have three |cFFFFFF00mini widgets|r located at the bottom of window. |cFFFFFF00Right clicking|r pops up a menu and with |cFFFFFF00left click|r displays a options panel for that widget.") + texto_micro_display:SetWidth (160) + texto_micro_display:SetHeight (110) + texto_micro_display:SetJustifyH ("left") + texto_micro_display:SetJustifyV ("top") + texto_micro_display:SetTextColor (1, 1, 1, 1) + --local fonte, _, flags = texto_micro_display:GetFont() + --texto_micro_display:SetFont (fonte, 11, flags) + + local micro_image1 = window:CreateTexture (nil, "overlay") + micro_image1:SetTexture ([[Interface\Addons\Details\images\icons]]) + micro_image1:SetPoint ("topright", window, "topright", -12, -95) + micro_image1:SetWidth (303) + micro_image1:SetHeight (128) + micro_image1:SetTexCoord (0.408203125, 1, 0.09375, 0.341796875) + + pages [#pages+1] = {bg88, texto88, micro_image1, texto_micro_display} + + for _, widget in ipairs (pages[#pages]) do + widget:Hide() + end + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--> page 11 + + local bg11 = window:CreateTexture (nil, "overlay") + bg11:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) + bg11:SetPoint ("bottomright", window, "bottomright", -10, 10) + bg11:SetHeight (125*3)--125 + bg11:SetWidth (89*3)--82 + bg11:SetAlpha (.1) + bg11:SetTexCoord (1, 0, 0, 1) + + local texto11 = window:CreateFontString (nil, "overlay", "GameFontNormal") + texto11:SetPoint ("topleft", window, "topleft", 20, -80) + texto11:SetText ("Using the Interface: Plugins") + --|cFFFFFF00 + local texto_plugins = window:CreateFontString (nil, "overlay", "GameFontNormal") + texto_plugins:SetPoint ("topleft", window, "topleft", 25, -101) + texto_plugins:SetText ("|cFFFFFF00Threat, tank avoidance, and others|r are handled by |cFFFFFF00plugins|r. You can open a new instance, select '|cFFFFFF00Widgets|r' and choose what you want at |cFFFFFF00sword|r menu.\n\nTip: click over a bar on |cFFFFFF00Vanguard|r to show avoidance numbers.") + texto_plugins:SetWidth (220) + texto_plugins:SetHeight (110) + texto_plugins:SetJustifyH ("left") + texto_plugins:SetJustifyV ("top") + texto_plugins:SetTextColor (1, 1, 1, 1) + --local fonte, _, flags = texto_plugins:GetFont() + --texto_plugins:SetFont (fonte, 11, flags) + + local plugins_image1 = window:CreateTexture (nil, "overlay") + plugins_image1:SetTexture ([[Interface\Addons\Details\images\icons2]]) + plugins_image1:SetPoint ("topright", window, "topright", -12, -35) + plugins_image1:SetWidth (226) + plugins_image1:SetHeight (181) + plugins_image1:SetTexCoord (0.55859375, 1, 0.646484375, 1) + + pages [#pages+1] = {bg11, texto11, plugins_image1, texto_plugins} + + for _, widget in ipairs (pages[#pages]) do + widget:Hide() + end + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--> page 12 local bg8 = window:CreateTexture (nil, "overlay") bg8:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]]) @@ -583,6 +804,9 @@ function _detalhes:OpenWelcomeWindow () forward:Click() forward:Click() forward:Click() + forward:Click() + forward:Click() + forward:Click() --]] end diff --git a/images/icons.tga b/images/icons.tga index 1fab5292..e1493878 100644 Binary files a/images/icons.tga and b/images/icons.tga differ diff --git a/images/icons2.tga b/images/icons2.tga new file mode 100644 index 00000000..a96090b2 Binary files /dev/null and b/images/icons2.tga differ diff --git a/locales/Details-enUS.lua b/locales/Details-enUS.lua index 1820fc16..c71dbb0d 100644 --- a/locales/Details-enUS.lua +++ b/locales/Details-enUS.lua @@ -14,6 +14,7 @@ if not Loc then return end Loc ["STRING_RIGHT"] = "right" Loc ["STRING_TOOOLD"] = "could not be installed because your Details! version is too old." Loc ["STRING_TOOOLD2"] = "your Details! version isn't the same." + Loc ["STRING_CHANGED_TO_CURRENT"] = "Segment changed to current" Loc ["STRING_INSTANCE_LIMIT"] = "max instance number has been reached, you can modify this limit over options panel." @@ -55,6 +56,7 @@ if not Loc then return end Loc ["STRING_SEGMENT_END"] = "End" Loc ["STRING_SEGMENT_ENEMY"] = "Enemy" Loc ["STRING_SEGMENT_TIME"] = "Time" + Loc ["STRING_SEGMENT_OVERALL"] = "Current Segments Overall" Loc ["STRING_TOTAL"] = "Total" Loc ["STRING_OVERALL"] = "Overall" Loc ["STRING_CURRENT"] = "Current" @@ -205,6 +207,7 @@ if not Loc then return end Loc ["STRING_PLUGIN_PDPSNAME"] = "Raid Dps" Loc ["STRING_PLUGIN_THREATNAME"] = "My Threat" Loc ["STRING_PLUGIN_PATTRIBUTENAME"] = "Attribute" + Loc ["STRING_PLUGIN_CLEAN"] = "None" Loc ["STRING_PLUGINOPTIONS_COMMA"] = "Comma" Loc ["STRING_PLUGINOPTIONS_ABBREVIATE"] = "Abbreviate" @@ -244,6 +247,7 @@ if not Loc then return end --> report frame Loc ["STRING_REPORTFRAME_PARTY"] = "Party" + --Loc ["STRING_REPORTFRAME_INSTANCE"] = "Instance" Loc ["STRING_REPORTFRAME_RAID"] = "Raid" Loc ["STRING_REPORTFRAME_GUILD"] = "Guild" Loc ["STRING_REPORTFRAME_OFFICERS"] = "Officer Channel" diff --git a/locales/Details-ptBR.lua b/locales/Details-ptBR.lua index 1b41c4e0..4ea038b0 100644 --- a/locales/Details-ptBR.lua +++ b/locales/Details-ptBR.lua @@ -14,6 +14,7 @@ if not Loc then return end Loc ["STRING_RIGHT"] = "direita" Loc ["STRING_TOOOLD"] = "nao pode ser instalado pois sua versao do Details! e muito antiga." Loc ["STRING_TOOOLD2"] = "a sua versao do Details! nao e a mesma." + Loc ["STRING_CHANGED_TO_CURRENT"] = "Segmento trocado para atual" Loc ["STRING_INSTANCE_LIMIT"] = "o limite de instancias foi atingido, voce pode modificar este limite no painel de opcoes." @@ -55,6 +56,7 @@ if not Loc then return end Loc ["STRING_SEGMENT_END"] = "Fim" Loc ["STRING_SEGMENT_ENEMY"] = "Contra" Loc ["STRING_SEGMENT_TIME"] = "Tempo" + Loc ["STRING_SEGMENT_OVERALL"] = "Total dos Segmentos Atuais" Loc ["STRING_TOTAL"] = "Total" Loc ["STRING_OVERALL"] = "Dados Gerais" Loc ["STRING_CURRENT"] = "Atual" @@ -203,6 +205,7 @@ if not Loc then return end Loc ["STRING_PLUGIN_PDPSNAME"] = "Dps da Raide" Loc ["STRING_PLUGIN_THREATNAME"] = "Minha Ameaça" Loc ["STRING_PLUGIN_PATTRIBUTENAME"] = "Atributo" + Loc ["STRING_PLUGIN_CLEAN"] = "Nenhum" Loc ["STRING_PLUGINOPTIONS_COMMA"] = "Virgula" Loc ["STRING_PLUGINOPTIONS_ABBREVIATE"] = "Abreviar" diff --git a/plugins/Details_EncounterDetails/frames.lua b/plugins/Details_EncounterDetails/frames.lua index 992e62c9..70ab96e3 100644 --- a/plugins/Details_EncounterDetails/frames.lua +++ b/plugins/Details_EncounterDetails/frames.lua @@ -272,7 +272,7 @@ Message: ..\AddOns\Details_EncounterDetails\frames.lua line 156: end end - print ("DPSMAX: " .. dps_max .. " > " .. g.max_damage) + --print ("DPSMAX: " .. dps_max .. " > " .. g.max_damage) if (dps_max > g.max_damage) then diff --git a/plugins/Details_RaidInfo-SiegeOfOrgrimmar/SiegeOfOrgrimmar.lua b/plugins/Details_RaidInfo-SiegeOfOrgrimmar/SiegeOfOrgrimmar.lua index a4f1d3f1..e42f5cc9 100644 --- a/plugins/Details_RaidInfo-SiegeOfOrgrimmar/SiegeOfOrgrimmar.lua +++ b/plugins/Details_RaidInfo-SiegeOfOrgrimmar/SiegeOfOrgrimmar.lua @@ -88,12 +88,17 @@ local siege_of_orgrimmar = { spell_mechanics = { [143295] = {0x1, 0x2000}, --> Sha Bolt [143309] = {0x8, 0x40}, --> Swirl + [143413] = {0x8, 0x40}, --> Swirl [143436] = {0x100}, --> Corrosive Blast [143281] = {0x8}, --> Seeping Sha [143574] = {0x200}, --> Swelling Corruption [143498] = {0x1, 0x200, 0x2}, --> Erupting Sha - [143460] = {0x200}, --> Sha Pool + [143460] = {0x200}, --> Sha Pool [143286] = {0x40}, --> Seeping Sha + [143297] = {0x200}, --> Sha Splash + [145377] = {0x1}, --> Erupting Water + [143574] = {0x200}, --> Swelling Corruption (H) + [143460] = {0x200} --> }, phases = { @@ -102,9 +107,13 @@ local siege_of_orgrimmar = { spells = { 143295, --> Sha Bolt 143309, --> Swirl + 143413, --> Swirl 143436, --> Corrosive Blast 143281, --> Seeping Sha 143574, --> Swelling Corruption + 143297, --> Sha Splash + 145377, --> Erupting Water + 143574 --> Swelling Corruption (H) }, adds = { @@ -120,6 +129,9 @@ local siege_of_orgrimmar = { 143498, --> Erupting Sha 143460, --> Sha Pool 143286, --> Seeping Sha + 143297, --> Sha Splash + 145377, --> Erupting Wate + 143460 --> Sha Pool (H) }, adds = { @@ -141,9 +153,11 @@ local siege_of_orgrimmar = { [144397] = {0x8000, 0x1}, --> Vengeful Strikes (Rook Stonetoe) [143023] = {0x8}, --> Corrupted Brew (Rook Stonetoe) [143028] = {0x1}, --> Clash (Rook Stonetoe) + [143010] = {0x80}, --> Corruption Kick (Rook Stonetoe) [143009] = {0x80}, --> Corruption Kick (Rook Stonetoe) [144357] = {0x8, 0x1}, --> Defiled Ground (Embodied Misery) - [101000] = {0x10000}, --> Inferno Strike (Embodied Sorrow) + [143961] = {0x8, 0x1}, --> Defiled Ground (Embodied Misery) + [143962] = {0x10000}, --> Inferno Strike (Embodied Sorrow) [144018] = {0x20, 0x1}, --> Corruption Shock (Embodied Gloom) [143198] = {0x1}, --> Garrote (He Softfoot) @@ -151,21 +165,28 @@ local siege_of_orgrimmar = { [144367] = {0x8}, --> Noxious Poison (He Softfoot) [143224] = {0x1, 0x800}, --> Instant Poison (He Softfoot) [143808] = {0x1, 0x2}, --> Mark of Anguish (Embodied Anguish) + [144365] = {0x1, 0x2}, --> Mark of Anguish (Embodied Anguish) [143424] = {0x2000}, --> Sha Sear (Sun Tenderheart) [143434] = {0x1, 0x10}, --> Shadow Word: Bane (Sun Tenderheart) - [143544] = {0x1}, --> Calamity (Sun Tenderheart) + [143544] = {0x1}, --> Calamity (Sun Tenderheart) --ptr + [143493] = {0x1}, --> Calamity (Sun Tenderheart) --live [143559] = {0x1, 0x40}, --> Dark Meditation + [144007] = {}, --Residual Burn + [145631] = {}, --Corruption Chain + [143602] = {}, --Meditation Spike }, + + continuo = { 144397, --> Vengeful Strikes (Rook Stonetoe) 143023, --> Corrupted Brew (Rook Stonetoe) 143028, --> Clash (Rook Stonetoe) 143009, --> Corruption Kick (Rook Stonetoe) 144357, --> Defiled Ground (Embodied Misery) - 101000, --> Inferno Strike (Embodied Sorrow) + 143962, --> Inferno Strike (Embodied Sorrow) 144018, --> Corruption Shock (Embodied Gloom) 143198, --> Garrote (He Softfoot) @@ -178,6 +199,15 @@ local siege_of_orgrimmar = { 143434, --> Shadow Word: Bane (Sun Tenderheart) 143544, --> Calamity (Sun Tenderheart) 143559, --> Dark Meditation + + 143010, --> Corruption Kick (Rook Stonetoe) + 143493, --> Calamity (Sun Tenderheart) --live + 144365, --> Mark of Anguish (Embodied Anguish) + 143961, --> Defiled Ground (Embodied Misery) + + 144007, --Residual Burn + 145631, --Corruption Chain + 143602, --Meditation Spike }, phases = { @@ -199,7 +229,8 @@ local siege_of_orgrimmar = { 71474, --> Embodied Despair (Sun Tenderheart) 71482, --> Embodied Desperation (Sun Tenderheart) - 71993, --> Despair Spawns (Sun Tenderheart) + 71712, --> Despair Spawns (Sun Tenderheart) + 71993, --> Desperation Spawn } } } @@ -212,6 +243,8 @@ local siege_of_orgrimmar = { boss = "Norushen", portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Norushen]], + combat_end = {1, 72276}, + spell_mechanics = { [146707] = {0x1}, --> Disheartening Laugh [144514] = {0x10}, --> Lingering Corruption @@ -223,12 +256,14 @@ local siege_of_orgrimmar = { [145212] = {0x1}, --> Unleashed Anger [146124] = {0x100}, --> Self Doubt (not a damage) - [145733] = {0x1}, --> Icy Fear + [145733] = {0x1}, --> Icy Fear -ptr + [145735] = {0x1}, --> Icy Fear -live [145227] = {0x8, 0x40}, --> Blind Hatred [147082] = {0x1, 0x2}, --> Burst of Anger [145073] = {0x200, 0x8}, --> Residual Corruption [144548] = {0x200}, --> Expel Corruption + [145134] = {0x200}, --> Expel Corruption -live }, continuo = { @@ -243,11 +278,13 @@ local siege_of_orgrimmar = { 145212, --> Unleashed Anger 146124, --> Self Doubt 145733, --> Icy Fear + 145735, --> Icy Fear -live 145227, --> Blind Hatred 147082, --> Burst of Anger 145073, --> Residual Corruption 144548, --> Expel Corruption + 145134, --> Expel Corruption }, phases = { @@ -274,16 +311,28 @@ local siege_of_orgrimmar = { boss = "Sha of Pride", portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Sha of Pride]], + combat_end = {1, 71734}, + spell_mechanics = { [144400] = {0x1}, --> Swelling Pride [144774] = {0x40}, --> Reaching Attack [144358] = {0x100}, --> Wounded Pride (not a damage) - [144351] = {0x10}, --> Mark of Arrogance + [144351] = {0x10, 0x200}, --> Mark of Arrogance [144911] = {0x8}, --> Bursting Pride [145320] = {0x200}, --> Projection [146818] = {0x2000}, --> Aura of Pride [144379] = {0x20}, --> Mocking Blast [144832] = {0x1, 0x2}, --> Unleashed + [144836] = {0x1, 0x2}, --> Unleashed + [144788] = {0x200}, --> Self-Reflection + [144636] = {0x1, 0x200}, --> Corrupted Prison + [144684] = {0x1, 0x200}, --> Corrupted Prison + [144574] = {0x1, 0x200}, --> Corrupted Prison + [144683] = {0x1, 0x200}, --> Corrupted Prison + [144774] = {0x40}, --> Reaching Attack + + [145215] = {}, --Banishment + [147198] = {}, --Unstable Corruption }, continuo = { @@ -296,6 +345,16 @@ local siege_of_orgrimmar = { 146818, --> Aura of Pride 144379, --> Mocking Blast 144832, --> Unleashed + 144836, --> Unleashed + 144788, --> Self-Reflection + 144636, --> Corrupted Prison + 144684, --> Corrupted Prison + 144574, --> Corrupted Prison + 144683, --> Corrupted Prison + 144774, --> Reaching Attack + + 145215, --Banishment + 147198, --Unstable Corruption }, phases = { @@ -314,6 +373,8 @@ local siege_of_orgrimmar = { boss = "Galakras", portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Galakras]], + combat_end = {1, 72249}, + spell_mechanics = { [146902] = {0x1, 0x100}, -- Poison-Tipped Blades (Korgra the Snake) [147705] = {0x8}, -- Poison Cloud (Korgra the Snake) @@ -328,7 +389,8 @@ local siege_of_orgrimmar = { [147824] = {0x40}, -- Muzzle Spray (Master Cannoneer Dagryn) [146899] = {0x200}, -- Fracture (Dragonmaw Bonecrushers) - [146897] = {0x1}, -- Shattering Roare (Dragonmaw Bonecrushers) + [146897] = {0x1}, -- Shattering Roar (Dragonmaw Bonecrushers) + [147204] = {0x1}, -- Shattering Roar (Dragonmaw Bonecrushers) [146728] = {0x20}, -- Chain Heal (Dragonmaw Tidal Shamans) [149188] = {0x40}, -- Tidal Wwave (Dragonmaw Tidal Shamans) [149187] = {0x40}, -- Tidal Wave (Dragonmaw Tidal Shamans) @@ -340,11 +402,13 @@ local siege_of_orgrimmar = { [146747] = {0x1}, -- Dragonmaw Strike (Dragonmaw Grunts) [147669] = {0x1}, -- Throw Axe (Dragonmaw Grunts) [148352] = {0x200}, -- DrakeFire (Dragonmaw Proto-Drakes) + [148560] = {0x200}, -- DrakeFire (Dragonmaw Proto-Drakes) -- missing spells from Dragonmaw Wind Reavers [146776] = {0x40}, -- Flame Breath (Dragonmaw Proto-Drakes) [148311] = {0x40}, -- Bombard (Kor'kron Demolishers) [148310] = {0x40}, -- Bombard (Kor'kron Demolishers) [147029] = {0x200}, -- Flames of Galakrond + [146992] = {0x200}, -- Flames of Galakrond [147043] = {0x2}, -- Pulsing Flames }, @@ -384,9 +448,10 @@ local siege_of_orgrimmar = { 146848, --Skull Cracker (High Enforcer Thranok) 146773, --Shoot (Master Cannoneer Dagryn) 147824, --Muzzle Spray (Master Cannoneer Dagryn) - + 148560, -- DrakeFire (Dragonmaw Proto-Drakes) 146899, --Fracture (Dragonmaw Bonecrushers) - 146897, --Shattering Roare (Dragonmaw Bonecrushers) + 146897, --Shattering Roar (Dragonmaw Bonecrushers) + 147204, -- Shattering Roar (Dragonmaw Bonecrushers) 146728, --Chain Heal (Dragonmaw Tidal Shamans) 149188, --Tidal Wwave (Dragonmaw Tidal Shamans) 149187, --Tidal Wave (Dragonmaw Tidal Shamans) @@ -411,6 +476,7 @@ local siege_of_orgrimmar = { }, spells = { 147029, --Flames of Galakrond + 146992, --Flames of Galakrond 147043, --Pulsing Flames } } @@ -424,14 +490,19 @@ local siege_of_orgrimmar = { spell_mechanics = { [144464] = {0x100}, --> Flame Vents + [144467] = {0x100, 0x1}, --> Ignite Armor + [144791] = {0x1, 0x200, 0x40}, --> Engulfed Explosion [144218] = {0x40}, --> Borer Drill [144459] = {0x1}, --> Laser Burn --[144439] = {}, -->Ricochet [144483] = {0x1}, --> Seismic Activity + [144484] = {0x1}, --> Seismic Activity [144485] = {0x1, 0x40}, --> Shock Pulse [144154] = {0x2000}, --> Demolisher Cannons + [144316] = {0x2000}, --> Mortar Blast [144918] = {0x40, 0x80}, --> Cutter Laser - [144498] = {0x8, 0x200} --> Explosive Tar + [144498] = {0x8, 0x200}, --> Explosive Tar + [144327] = {}, --> Ricochet }, continuo = { @@ -449,6 +520,10 @@ local siege_of_orgrimmar = { 144459, --> Laser Burn --> Mortar Cannon --144439 --> Ricochet + 144467, --> Ignite Armor + 144316, --> Mortar Blast + 144791, --> Engulfed Explosion + 144327, --> Ricochet } }, { --> phase 2: Breaking the Defense: Siege Mode: @@ -457,6 +532,7 @@ local siege_of_orgrimmar = { }, spells = { 144483, --> Seismic Activity + 144484, --> Seismic Activity 144485, --> Shock Pulse 144154, --> Demolisher Cannons 144918, --> Cutter Laser @@ -483,10 +559,20 @@ local siege_of_orgrimmar = { [144214] = {0x1}, --Froststorm Bolt [144005] = {0x8}, --Toxic Storm 90% + [144017] = {0x8}, --Toxic Storm 90% + [144030] = {0x40}, -- Toxic Tornado [143990] = {0x80, 0x40}, --Foul Geyser 80% + [143993] = {0x80, 0x40}, --Foul Geyser 80% [143973] = {0x8}, --Falling Ash 70% + [143987] = {0x8}, --Falling Ash 70% - [144064] = {0x40} --Foulness + [144064] = {0x40}, --Foulness + [144066] = {0x40}, --Foulness + + [144328] = {}, --> Iron Tomb + [144334] = {}, --> Iron Tomb + [144330] = {}, --> Iron Prison + [144331] = {}, --> Iron Prison }, continuo = { @@ -500,9 +586,18 @@ local siege_of_orgrimmar = { 144214, --Froststorm Bolt 144005, --Toxic Storm + 144017, --Toxic Storm + 144030, --Toxic Tornado 143990, --Foul Geyser + 143993, --Foul Geyser 143973, --Falling Ash - 144064 --Foulness + 143987, --Falling Ash + 144064, --Foulness + 144066, --Foulness + 144328, --> Iron Tomb + 144334, --> Iron Tomb + 144330, --> Iron Prison + 144331, --> Iron Prison }, phases = { @@ -538,6 +633,7 @@ local siege_of_orgrimmar = { [143872] = {0x80, 0x40}, --Ravager [143420] = {0x80, 0x40}, --Ironstorm (Kor'kron Ironblades) + [143421] = {0x80, 0x40}, --Ironstorm (Kor'kron Ironblades) [143481] = {0x200, 0x1000}, --Backstab (Kor'kron Assassins) [143432] = {0x20, 0x1}, --Arcane Shock (Kor'kron Arcweavers) [143431] = {0x20, 0x1}, --Magistrike (Kor'kron Arcweavers) @@ -552,10 +648,11 @@ local siege_of_orgrimmar = { 143872, --Ravager 143420, --Ironstorm (Kor'kron Ironblades) + 143421, --Ironstorm (Kor'kron Ironblades) 143481, --Backstab (Kor'kron Assassins) 143432, --Arcane Shock (Kor'kron Arcweavers) 143431, --Magistrike (Kor'kron Arcweavers) - + }, phases = { @@ -585,13 +682,17 @@ local siege_of_orgrimmar = { spell_mechanics = { [142861] = {0x200}, --Ancient Miasma + [142906] = {0x200}, --Ancient Miasma [142990] = {0x100}, --Fatal Strike [142851] = {0x2000}, --Seismic Slam + [142849] = {0x2000}, --Seismic Slam [142826] = {0x40}, --Arcing Smash + [142815] = {0x40}, --Arcing Smash [142816] = {0x40}, --Breath of Y'Shaarj [142987] = {0x200, 0x1}, --Imploding Energy - + [142986] = {0x200, 0x1}, --Imploding Energy [142879] = {0x10000}, --Blood Rage + [142890] = {0x10000}, --Blood Rage [142913] = {0x80}, --Displaced Energy }, @@ -606,11 +707,15 @@ local siege_of_orgrimmar = { }, spells = { 142861, --Ancient Miasma + 142906, --Ancient Miasma 142990, --Fatal Strike 142851, --Seismic Slam + 142849, --Seismic Slam 142826, --Arcing Smash + 142815, --Arcing Smash 142816, --Breath of Y'Shaarj - 142987 --Imploding Energy + 142987, --Imploding Energy + 142986 --Imploding Energy } }, { --> phase 2: Blood Rage @@ -619,6 +724,7 @@ local siege_of_orgrimmar = { }, spells = { 142879, --Blood Rage + 142890, --Blood Rage 142913 --Displaced Energy } }, @@ -637,22 +743,30 @@ local siege_of_orgrimmar = { [144923] = {0x20}, --Earthen Shard (Animated Stone Mogu) [142775] = {0x40}, --Nova (Sparks of Life) [142765] = {0x40}, --Pulse (Sparks of Life) + [142759] = {0x40}, --Pulse (Sparks of Life) [144853] = {0x1}, --Carnivorous Bite (Quilen Guardians) --Stout Crates -> Mogu Crates [145393] = {0x200}, --Matter Scramble (Modified Anima Golems) --[145271] = {}, --Crimson Reconstitution (Modified Anima Golems) [142942] = {0x200, 0x10}, --Torment (Mogu Shadow Ritualists) + [142983] = {0x200, 0x10}, --Torment (Mogu Shadow Ritualists) [145240] = {0x20}, --Forbidden Magic (Mogu Shadow Ritualists) --[145460] = {}, --Mogu Rune of Power (Mogu Shadow Ritualists) --Massive Crates -> Mogu Crates [145489] = {0x1}, --Return to Stone + [145514] = {0x1}, --Return to Stone [148515] = {0x40}, --Shadow Volley (Jun-Wei) + [148516] = {0x40}, --Shadow Volley (Jun-Wei) + [148517] = {0x40}, --Molten Fist (Zu-Yin) [148518] = {0x40}, --Molten Fist (Zu-Yin) [148582] = {0x40}, --Jade Tempest (Xiang-Lin) + [148583] = {0x40}, --Jade Tempest (Xiang-Lin) [148513] = {0x40}, --Fracture (Kun-Da) + [148514] = {0x40}, --Fracture (Kun-Da) --Lightweight Crates -> Mantid Crates [145718] = {0x8}, -- Gusting Bomb (Sri'thik Bombardiers) + [145716] = {0x8}, -- Gusting Bomb (Sri'thik Bombardiers) [145706] = {0x1, 0x2000}, --Throw Explosives (Sri'thik Bombardiers) [145748] = {0x8}, -- Encapsulated Pheromones (Sri'thik Bombardiers) --[145692] = {}, -- Enrage (Kor'thik Warcallerss) @@ -663,7 +777,7 @@ local siege_of_orgrimmar = { --[145812] = {}, --Rage of the Empress (Set'thik Wind Wielders) --Massive Crates -> Mantid Crates [148760] = {0x1}, --Pheromone Cloud (Pheromone Cloud) - [145993] = {}, --Set to Blow (Ka'thik Demolisher) + [145993] = {0x200}, --Set to Blow (Ka'thik Demolisher) [142997] = {0x200}, --Set to Blow (Ka'thik Demolisher) [145987] = {0x200}, --Set to Blow (Ka'thik Demolisher) [145996] = {0x200}, --Set to Blow (Ka'thik Demolisher) @@ -674,10 +788,13 @@ local siege_of_orgrimmar = { [148056] = {0x200}, --Set to Blow (Ka'thik Demolisher) --Pandaren Crates - [146217] = {0x2000}, --(Ancient Brewmaster Spirits) - [146222] = {0x40}, --(Ancient Brewmaster Spirits) + [146217] = {0x2000}, -- Keg Toss (Ancient Brewmaster Spirits) + [146222] = {0x40}, --Breath of Fire (Ancient Brewmaster Spirits) + [146226] = {0x40}, --Breath of Fire (Ancient Brewmaster Spirits) + [146230] = {0x40}, --Breath of Fire (Ancient Brewmaster Spirits) --[146081] = {}, --(Ancient Brewmaster Spirits) [146180] = {0x40, 0x1}, --Gusting Crane Kick (Wise Mistweaver Spirits) + [146182] = {0x40, 0x1}, --Gusting Crane Kick (Wise Mistweaver Spirits) --[146189] = {}, Eminence --(Wise Mistweaver Spirits) --[146679] = {}, --(Wise Mistweaver Spirits) [146257] = {0x8, 0x2000}, --(Nameless Windwalker Spirits) @@ -727,22 +844,31 @@ local siege_of_orgrimmar = { 144923, --Earthen Shard (Animated Stone Mogu) 142775, --Nova (Sparks of Life) 142765, --Pulse (Sparks of Life) + 142759, --Pulse (Sparks of Life) 144853, --Carnivorous Bite (Quilen Guardians) --Stout Crates -> Mogu Crates 145393, --Matter Scramble (Modified Anima Golems) 145271, --Crimson Reconstitution (Modified Anima Golems) 142942, --Torment (Mogu Shadow Ritualists) + 142983, --Torment (Mogu Shadow Ritualists) + 146885, --Torment (Mogu Shadow Ritualists) 145240, --Forbidden Magic (Mogu Shadow Ritualists) 145460, --Mogu Rune of Power (Mogu Shadow Ritualists) --Massive Crates -> Mogu Crates + 145514, --Return to Stone 145489, --Return to Stone 148515, --Shadow Volley (Jun-Wei) + 148516, --Shadow Volley (Jun-Wei) + 148517, --Molten Fist (Zu-Yin) 148518, --Molten Fist (Zu-Yin) 148582, --Jade Tempest (Xiang-Lin) + 148583, --Jade Tempest (Xiang-Lin) 148513, --Fracture (Kun-Da) + 148514, --Fracture (Kun-Da) --Lightweight Crates -> 145718, -- Gusting Bomb (Sri'thik Bombardiers) + 145716, -- Gusting Bomb (Sri'thik Bombardiers) 145706, --Throw Explosives (Sri'thik Bombardiers) 145748, -- Encapsulated Pheromones (Sri'thik Bombardiers) 145692, -- Enrage (Kor'thik Warcallerss) @@ -765,37 +891,22 @@ local siege_of_orgrimmar = { --Pandaren Crates 146217, --(Ancient Brewmaster Spirits) - 146222, --(Ancient Brewmaster Spirits) + 146222, --Breath of Fire(Ancient Brewmaster Spirits) + 146226, --Breath of Fire(Ancient Brewmaster Spirits) + 146230, --Breath of Fire(Ancient Brewmaster Spirits) 146081, --(Ancient Brewmaster Spirits) 146180, --(Wise Mistweaver Spirits) 146189, --(Wise Mistweaver Spirits) 146679, --(Wise Mistweaver Spirits) - 146257, --(Nameless Windwalker Spirits) - 146142 --(Nameless Windwalker Spirits) + 146257, --Path of Blossoms (Nameless Windwalker Spirits) + 146142, --(Nameless Windwalker Spirits) + 146182, --Gusting Crane Kick (Wise Mistweaver Spirits) } } }, }, --> end of Spoils of Pandaria ---[[ - [0x1] = "|cFF00FF00"..Loc ["STRING_HEAL"].."|r", - [0x2] = "|cFF710000"..Loc ["STRING_LOWDPS"].."|r", - [0x4] = "|cFF057100"..Loc ["STRING_LOWHEAL"].."|r", - [0x8] = "|cFFd3acff"..Loc ["STRING_VOIDZONE"].."|r", - [0x10] = "|cFFbce3ff"..Loc ["STRING_DISPELL"].."|r", - [0x20] = "|cFFffdc72"..Loc ["STRING_INTERRUPT"].."|r", - [0x40] = "|cFFd9b77c"..Loc ["STRING_POSITIONING"].."|r", - [0x80] = "|cFFd7ff36"..Loc ["STRING_RUNAWAY"].."|r", - [0x100] = "|cFF9a7540"..Loc ["STRING_TANKSWITCH"] .."|r", - [0x200] = "|cFFff7800"..Loc ["STRING_MECHANIC"].."|r", - [0x400] = "|cFFbebebe"..Loc ["STRING_CROWDCONTROL"].."|r", - [0x800] = "|cFF6e4d13"..Loc ["STRING_TANKCOOLDOWN"].."|r", - [0x1000] = "|cFFffff00"..Loc ["STRING_KILLADD"].."|r", - [0x2000] = "|cFFff9999"..Loc ["STRING_SPREADOUT"].."|r", - [0x4000] = "|cFFffff99"..Loc ["STRING_STOPCAST"].."|r", - [0x8000] = "|cFFffff99"..Loc ["STRING_FACING"].."|r", - [0x10000] = "|cFFffff99"..Loc ["STRING_STACK"].."|r", ---]] + ------------> Thok the Bloodthirsty ------------------------------------------------------------------------------ [11] = { boss = "Thok the Bloodthirsty", @@ -868,10 +979,18 @@ local siege_of_orgrimmar = { --[144213] = {}, --Automatic Repair Beam [144210] = {0x40, 0x8}, --Death From Above [145444] = {0x1}, --Overload + [144664] = {0x8, 0x40}, --Shockwave Missile (Missile Turrets) + [144663] = {0x8, 0x40}, --Shockwave Missile (Missile Turrets) + [144662] = {0x8, 0x40}, --Shockwave Missile (Missile Turrets) + [144661] = {0x8, 0x40}, --Shockwave Missile (Missile Turrets) + [144660] = {0x8, 0x40}, --Shockwave Missile (Missile Turrets) + [143641] = {0x8, 0x40}, --Shockwave Missile (Missile Turrets) + [143856] = {0x40, 0x8}, --Superheated (Laser Turrets) [144466] = {0x1, 0x200}, --Magnetic Crush (Electromagnets) [149146] = {0x80}, --Detonate! (Crawler Mines) + [143327] = {0x40}, --Serrated Slash }, continuo = { @@ -901,10 +1020,16 @@ local siege_of_orgrimmar = { 144213, --Automatic Repair Beam 144210, --Death From Above 145444, --Overload - 144664, --Shockwave Missile (Missile Turrets) 143856, --Superheated (Laser Turrets) 144466, --Magnetic Crush (Electromagnets) - 149146 --Detonate! (Crawler Mines) + 149146, --Detonate! (Crawler Mines) + 143327, --Serrated Slash + 144664, --Shockwave Missile (Missile Turrets) + 144663, --Shockwave Missile (Missile Turrets) + 144662, --Shockwave Missile (Missile Turrets) + 144661, --Shockwave Missile (Missile Turrets) + 144660, --Shockwave Missile (Missile Turrets) + 143641, --Shockwave Missile (Missile Turrets) } } @@ -918,18 +1043,183 @@ local siege_of_orgrimmar = { portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Klaxxi Paragons]], spell_mechanics = { + --Kil'ruk the Wind-Reaver + [142931] = {}, --Exposed Veins + [143939] = {}, --Gouge + [143941] = {}, --Mutilate + [142232] = {}, --Death from Above + [142270] = {}, --Reave + [142922] = {}, --Razor Sharp Blades + [142930] = {}, --Razor Sharp Blades + + --Xaril the Poisoned Mind + [142929] = {}, --Tenderizing Strikes + [142315] = {}, --Caustic Blood + [142317] = {}, --Bloody Explosion + [142528] = {}, --Toxic Injection + [148656] = {}, --Vast Apothecarial Knowledge + [142877] = {}, --Volatile Poultice + [143735] = {}, --Caustic Amber + [142797] = {}, --Noxious Vapors + + --Kaz'tik the Manipulator + [142667] = {}, --Thick Shell + [115268] = {}, --Mesmerize + [142649] = {}, --Devour + [142270] = {}, --Reave + [142651] = {}, --Molt + [144275] = {}, --Swipe + [142655] = {}, --Swipe + [143768] = {}, --Sonic Projection + + --Korven the Prime + [142564] = {}, --Encase in Amber + [143974] = {}, --Shield Bash + + [143979] = {}, --Vicious Assault + [143980] = {}, --Vicious Assault + [143981] = {}, --Vicious Assault + [143982] = {}, --Vicious Assault + [143984] = {}, --Vicious Assault + [143985] = {}, --Vicious Assault + + [148649] = {}, --Master of Amber + + --Iyyokuk the Lucid + [143666] = {}, --Diminish + [142514] = {}, --Calculate + [142416] = {}, --Insane Calculation: Fiery Edge + [142809] = {}, --Fiery Edgeficious Assault + [142735] = {}, --Reaction: Blue + [142736] = {}, --Reaction: Red + [141858] = {}, --Ingenious + + --Ka'roz the Locust + [143701] = {}, --Whirling + [143702] = {}, --Whirling + [143733] = {}, --Hurl Amber + [148650] = {}, --Strong Legs + [142564] = {}, --Encase in Amber + + --Skeer the Bloodseeker + [143274] = {}, --Hewn + [143275] = {}, --Hewn + [143280] = {}, --Bloodletting + [148655] = {}, --Bloodthirsty + + --Rik'kal the Dissector + [143278] = {}, --Genetic Alteration + [143279] = {}, --Genetic Alteration + [143339] = {}, --Injection + [144274] = {}, --Claw + [142655] = {}, --Swipe + [144276] = {}, --Sting + [143373] = {}, --Gene Splice + [143337] = {}, --Mutate + + --Hisek the Swarmkeeper + [144839] = {}, --Multi-Shot + [142948] = {}, --Aim }, continuo = { - + --Kil'ruk the Wind-Reaver + 142931, --Exposed Veins + 143939, --Gouge + 143941, --Mutilate + 142232, --Death from Above + 142270, --Reave + 142922, --Razor Sharp Blades + 142930, --Razor Sharp Blades + + --Xaril the Poisoned Mind + 142929, --Tenderizing Strikes + 142315, --Caustic Blood + 142317, --Bloody Explosion + 142528, --Toxic Injection + 148656, --Vast Apothecarial Knowledge + 142877, --Volatile Poultice + 143735, --Caustic Amber + 142797, --Noxious Vapors + + --Kaz'tik the Manipulator + 142667, --Thick Shell + 115268, --Mesmerize + 142649, --Devour + 142270, --Reave + 142651, --Molt + 144275, --Swipe + 142655, --Swipe + 143768, --Sonic Projection + + --Korven the Prime + 142564, --Encase in Amber + 143974, --Shield Bash + + 143979, --Vicious Assault + 143980, --Vicious Assault + 143981, --Vicious Assault + 143982, --Vicious Assault + 143984, --Vicious Assault + 143985, --Vicious Assault + + 148649, --Master of Amber + + --Iyyokuk the Lucid + 143666, --Diminish + 142514, --Calculate + 142416, --Insane Calculation: Fiery Edge + 142809, --Fiery Edgeficious Assault + 142735, --Reaction: Blue + 142736, --Reaction: Red + 141858, --Ingenious + + --Ka'roz the Locust + 143701, --Whirling + 143702, --Whirling + 143733, --Hurl Amber + 148650, --Strong Legs + 142564, --Encase in Amber + + --Skeer the Bloodseeker + 143274, --Hewn + 143275, --Hewn + 143280, --Bloodletting + 148655, --Bloodthirsty + + --Rik'kal the Dissector + 143278, --Genetic Alteration + 143279, --Genetic Alteration + 143339, --Injection + 144274, --Claw + 142655, --Swipe + 144276, --Sting + 143373, --Gene Splice + 143337, --Mutate + + --Hisek the Swarmkeeper + 144839, --Multi-Shot + 142948, --Aim }, phases = { { --> phase 1: adds = { - - + 71161, --Kil'ruk the Wind-Reaver + 71157, --Xaril the Poisoned Mind + 71158, --Rik'kal the Dissector + 71152, --Skeer the Bloodseeker + 71160, --Iyyokuk the Lucid + 71155, --Korven the Prime + 71156, -- Kaz'tik the Manipulator + 71154, -- Ka'roz the Locust + 71153, -- Hisek the Swarmkeeper + + 71578, --Amber Parasites + 71542, --Bloods + 71420, --Hungry Kunchongs + 71425, --Mature Kunchongs }, spells = { diff --git a/startup.lua b/startup.lua index 391b7174..0cf6b669 100644 --- a/startup.lua +++ b/startup.lua @@ -30,8 +30,10 @@ function _G._detalhes:Start() self.in_combat = false self.combat_id = self.combat_id or 0 self.instances_amount = self.instances_amount or 12 - self.segments_amount = self.segments_amount or 10 - self.segments_amount_to_save = self.segments_amount_to_save or 2 + self.segments_amount = self.segments_amount or 25 + self.segments_amount_to_save = self.segments_amount_to_save or 5 + self.memory_threshold = self.memory_threshold or 3 + self.memory_ram = self.memory_ram or 64 self.deadlog_limit = self.deadlog_limit or 12 self.minimum_combat_time = self.minimum_combat_time or 5 @@ -219,8 +221,11 @@ function _G._detalhes:Start() --> start garbage collector self.ultima_coleta = 0 self.intervalo_coleta = 720 + self.intervalo_memoria = 180 self.garbagecollect = self:ScheduleRepeatingTimer ("IniciarColetaDeLixo", self.intervalo_coleta) - + self.memorycleanup = self:ScheduleRepeatingTimer ("CheckMemoryPeriodically", self.intervalo_memoria) + self.next_memory_check = time()+self.intervalo_memoria + --> start parser --> load parser capture options @@ -271,7 +276,7 @@ function _G._detalhes:Start() self:SendEvent ("DETAILS_INSTANCE_OPEN", nil, instancia) end end - + --> all done, send started signal and we are ready function self:AnnounceStartup() self:SendEvent ("DETAILS_STARTED", "SEND_TO_ALL") @@ -304,5 +309,5 @@ function _G._detalhes:Start() if (self.is_first_run) then _detalhes:OpenWelcomeWindow() end - + end